Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Have user_runtime_dir return /var/run/user/uid for *BSD #194

Merged
merged 1 commit into from
Jun 21, 2023

Conversation

kemzeb
Copy link
Contributor

@kemzeb kemzeb commented Jun 21, 2023

Partially addresses #190 by having user_runtime_dir() return /var/run/user/... for the 3 most popular BSD systems

I just check to see if we are using FreeBSD/OpenBSD/NetBSD by using sys.platform. Unless other BSD-based systems use the kernel names of these OSs (since sys.platform essentially returns a lowercase version of uname -s with its major version appended to it), they will still fallback to /run/user/.

References:
FreeBSD's kernel name: from reading https://docs.python.org/3/library/sys.html#sys.platform
OpenBSD's kernel name: from firing up a VM and running uname -s
NetBSD's kernel name: an image search of uname being ran.

Instead of /run/user since /run is not a directory known to FreeBSD,
OpenBSD, and NetBSD.
Copy link
Member

@gaborbernat gaborbernat left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@gaborbernat gaborbernat merged commit a02fb04 into tox-dev:main Jun 21, 2023
@kemzeb kemzeb deleted the fix/user-runtime-dir-for-bsd branch June 21, 2023 00:40
@ThomasWaldmann
Copy link
Contributor

@kemzeb thanks for the fix! did you try this also as root and did it work as expected?

@ThomasWaldmann
Copy link
Contributor

https://superuser.com/questions/1056926/is-var-run-user-uid-the-new-var-run-for-pid-files

"""
Only use /run/user/$UID/ if you want to make sure the file shall vanish as soon as the user logs off completely. Also note that the root user is not always logged in, so it is likely that there is no /run/user/0/.
"""

That sounds potentially problematic.

@kemzeb
Copy link
Contributor Author

kemzeb commented Jun 25, 2023

Hi @ThomasWaldmann, this change was just for logged in regular users. I did ponder a simple solution where user_runtime_dir() would return the fallback of /var/run/ (or /run/ for Linux) if the UID is that of the root user, but after reading #188 I didn't think it was a good idea as such a change could break projects that may rely on this behavior (if there is any).

Another solution is to follow the idea mentioned in that issue and implement a site_runtime_dir(). I did look into this recently, but had trouble finding the shared runtime directories for the other platforms besides Unix. I'll see if I can make a PR for this when I get the time!

hugovk referenced this pull request in hugovk/pypistats Jul 1, 2023
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [numpy](https://www.numpy.org)
([source](https://github.com/numpy/numpy)) | `==1.24.3` -> `==1.25.0`
|
[![age](https://badges.renovateapi.com/packages/pypi/numpy/1.25.0/age-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://badges.renovateapi.com/packages/pypi/numpy/1.25.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://badges.renovateapi.com/packages/pypi/numpy/1.25.0/compatibility-slim/1.24.3)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://badges.renovateapi.com/packages/pypi/numpy/1.25.0/confidence-slim/1.24.3)](https://docs.renovatebot.com/merge-confidence/)
|
| [pandas](https://github.com/pandas-dev/pandas) | `==2.0.2` ->
`==2.0.3` |
[![age](https://badges.renovateapi.com/packages/pypi/pandas/2.0.3/age-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://badges.renovateapi.com/packages/pypi/pandas/2.0.3/adoption-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://badges.renovateapi.com/packages/pypi/pandas/2.0.3/compatibility-slim/2.0.2)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://badges.renovateapi.com/packages/pypi/pandas/2.0.3/confidence-slim/2.0.2)](https://docs.renovatebot.com/merge-confidence/)
|
| [platformdirs](https://github.com/platformdirs/platformdirs) |
`==3.5.1` -> `==3.8.0` |
[![age](https://badges.renovateapi.com/packages/pypi/platformdirs/3.8.0/age-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://badges.renovateapi.com/packages/pypi/platformdirs/3.8.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://badges.renovateapi.com/packages/pypi/platformdirs/3.8.0/compatibility-slim/3.5.1)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://badges.renovateapi.com/packages/pypi/platformdirs/3.8.0/confidence-slim/3.5.1)](https://docs.renovatebot.com/merge-confidence/)
|
| [prettytable](https://github.com/jazzband/prettytable)
([changelog](https://github.com/jazzband/prettytable/releases)) |
`==3.7.0` -> `==3.8.0` |
[![age](https://badges.renovateapi.com/packages/pypi/prettytable/3.8.0/age-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://badges.renovateapi.com/packages/pypi/prettytable/3.8.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://badges.renovateapi.com/packages/pypi/prettytable/3.8.0/compatibility-slim/3.7.0)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://badges.renovateapi.com/packages/pypi/prettytable/3.8.0/confidence-slim/3.7.0)](https://docs.renovatebot.com/merge-confidence/)
|
| [pytest](https://docs.pytest.org/en/latest/)
([source](https://github.com/pytest-dev/pytest),
[changelog](https://docs.pytest.org/en/stable/changelog.html)) |
`==7.3.1` -> `==7.4.0` |
[![age](https://badges.renovateapi.com/packages/pypi/pytest/7.4.0/age-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://badges.renovateapi.com/packages/pypi/pytest/7.4.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://badges.renovateapi.com/packages/pypi/pytest/7.4.0/compatibility-slim/7.3.1)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://badges.renovateapi.com/packages/pypi/pytest/7.4.0/confidence-slim/7.3.1)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>numpy/numpy (numpy)</summary>

### [`v1.25.0`](https://github.com/numpy/numpy/releases/tag/v1.25.0)

[Compare
Source](https://github.com/numpy/numpy/compare/v1.24.4...v1.25.0)

### NumPy 1.25.0 Release Notes

The NumPy 1.25.0 release continues the ongoing work to improve the
handling and promotion of dtypes, increase the execution speed, and
clarify the documentation. There has also been work to prepare for the
future NumPy 2.0.0 release, resulting in a large number of new and
expired deprecation. Highlights are:

-   Support for MUSL, there are now MUSL wheels.
-   Support the Fujitsu C/C++ compiler.
-   Object arrays are now supported in einsum
-   Support for inplace matrix multiplication (`@=`).

We will be releasing a NumPy 1.26 when Python 3.12 comes out. That is
needed because distutils has been dropped by Python 3.12 and we will be
switching to using meson for future builds. The next mainline release
will be NumPy 2.0.0. We plan that the 2.0 series will still support
downstream projects built against earlier versions of NumPy.

The Python versions supported in this release are 3.9-3.11.

#### Deprecations

-   `np.core.MachAr` is deprecated. It is private API. In names defined
    in `np.core` should generally be considered private.

    ([gh-22638](https://github.com/numpy/numpy/pull/22638))

-   `np.finfo(None)` is deprecated.

    ([gh-23011](https://github.com/numpy/numpy/pull/23011))

-   `np.round_` is deprecated. Use `np.round` instead.

    ([gh-23302](https://github.com/numpy/numpy/pull/23302))

-   `np.product` is deprecated. Use `np.prod` instead.

    ([gh-23314](https://github.com/numpy/numpy/pull/23314))

-   `np.cumproduct` is deprecated. Use `np.cumprod` instead.

    ([gh-23314](https://github.com/numpy/numpy/pull/23314))

-   `np.sometrue` is deprecated. Use `np.any` instead.

    ([gh-23314](https://github.com/numpy/numpy/pull/23314))

-   `np.alltrue` is deprecated. Use `np.all` instead.

    ([gh-23314](https://github.com/numpy/numpy/pull/23314))

-   Only ndim-0 arrays are treated as scalars. NumPy used to treat all
    arrays of size 1 (e.g., `np.array([3.14])`) as scalars. In the
    future, this will be limited to arrays of ndim 0 (e.g.,
    `np.array(3.14)`). The following expressions will report a
    deprecation warning:

    ```python
    a = np.array([3.14])
    float(a)  # better: a[0] to get the numpy.float or a.item()

    b = np.array([[3.14]])
    c = numpy.random.rand(10)
    c[0] = b  # better: c[0] = b[0, 0]
    ```

    ([gh-10615](https://github.com/numpy/numpy/pull/10615))

-   `numpy.find_common_type` is now deprecated and its use
    should be replaced with either `numpy.result_type` or
    `numpy.promote_types`. Most users leave the second
    `scalar_types` argument to `find_common_type` as `[]` in which case
    `np.result_type` and `np.promote_types` are both faster and more
    robust. When not using `scalar_types` the main difference is that
    the replacement intentionally converts non-native byte-order to
    native byte order. Further, `find_common_type` returns `object`
    dtype rather than failing promotion. This leads to differences when
    the inputs are not all numeric. Importantly, this also happens for
    e.g. timedelta/datetime for which NumPy promotion rules are
    currently sometimes surprising.

    When the `scalar_types` argument is not `[]` things are more
    complicated. In most cases, using `np.result_type` and passing the
    Python values `0`, `0.0`, or `0j` has the same result as using
    `int`, `float`, or `complex` in `scalar_types`.

    When `scalar_types` is constructed, `np.result_type` is the correct
    replacement and it may be passed scalar values like
    `np.float32(0.0)`. Passing values other than 0, may lead to
    value-inspecting behavior (which `np.find_common_type` never used
    and NEP 50 may change in the future). The main possible change in
    behavior in this case, is when the array types are signed integers
    and scalar types are unsigned.

    If you are unsure about how to replace a use of `scalar_types` or
    when non-numeric dtypes are likely, please do not hesitate to open a
    NumPy issue to ask for help.

    ([gh-22539](https://github.com/numpy/numpy/pull/22539))

#### Expired deprecations

-   `np.core.machar` and `np.finfo.machar` have been removed.

    ([gh-22638](https://github.com/numpy/numpy/pull/22638))

-   `+arr` will now raise an error when the dtype is not numeric (and
    positive is undefined).

    ([gh-22998](https://github.com/numpy/numpy/pull/22998))

-   A sequence must now be passed into the stacking family of functions
    (`stack`, `vstack`, `hstack`, `dstack` and `column_stack`).

    ([gh-23019](https://github.com/numpy/numpy/pull/23019))

-   `np.clip` now defaults to same-kind casting. Falling back to unsafe
    casting was deprecated in NumPy 1.17.

    ([gh-23403](https://github.com/numpy/numpy/pull/23403))

-   `np.clip` will now propagate `np.nan` values passed as `min` or
    `max`. Previously, a scalar NaN was usually ignored. This was
    deprecated in NumPy 1.17.

    ([gh-23403](https://github.com/numpy/numpy/pull/23403))

-   The `np.dual` submodule has been removed.

    ([gh-23480](https://github.com/numpy/numpy/pull/23480))

-   NumPy now always ignores sequence behavior for an array-like
    (defining one of the array protocols). (Deprecation started NumPy
    1.20)

    ([gh-23660](https://github.com/numpy/numpy/pull/23660))

-   The niche `FutureWarning` when casting to a subarray dtype in
    `astype` or the array creation functions such as `asarray` is now
    finalized. The behavior is now always the same as if the subarray
    dtype was wrapped into a single field (which was the workaround,
    previously). (FutureWarning since NumPy 1.20)

    ([gh-23666](https://github.com/numpy/numpy/pull/23666))

-   `==` and `!=` warnings have been finalized. The `==` and `!=`
    operators on arrays now always:

    -   raise errors that occur during comparisons such as when the
        arrays have incompatible shapes
        (`np.array([1, 2]) == np.array([1, 2, 3])`).

    -   return an array of all `True` or all `False` when values are
        fundamentally not comparable (e.g. have different dtypes). An
        example is `np.array(["a"]) == np.array([1])`.

        This mimics the Python behavior of returning `False` and `True`
        when comparing incompatible types like `"a" == 1` and
        `"a" != 1`. For a long time these gave `DeprecationWarning` or
        `FutureWarning`.

    ([gh-22707](https://github.com/numpy/numpy/pull/22707))

-   Nose support has been removed. NumPy switched to using pytest in
    2018 and nose has been unmaintained for many years. We have kept
    NumPy's nose support to avoid breaking downstream projects who
    might have been using it and not yet switched to pytest or some
    other testing framework. With the arrival of Python 3.12, unpatched
    nose will raise an error. It is time to move on.

    *Decorators removed*:

    -   raises
    -   slow
    -   setastest
    -   skipif
    -   knownfailif
    -   deprecated
    -   parametrize
    -   \_needs_refcount

    These are not to be confused with pytest versions with similar
    names, e.g., pytest.mark.slow, pytest.mark.skipif,
    pytest.mark.parametrize.

    *Functions removed*:

    -   Tester
    -   import_nose
    -   run_module_suite

    ([gh-23041](https://github.com/numpy/numpy/pull/23041))

-   The `numpy.testing.utils` shim has been removed. Importing from the
    `numpy.testing.utils` shim has been deprecated since 2019, the shim
    has now been removed. All imports should be made directly from
    `numpy.testing`.

    ([gh-23060](https://github.com/numpy/numpy/pull/23060))

-   The environment variable to disable dispatching has been removed.
    Support for the `NUMPY_EXPERIMENTAL_ARRAY_FUNCTION` environment
    variable has been removed. This variable disabled dispatching with
    `__array_function__`.

    ([gh-23376](https://github.com/numpy/numpy/pull/23376))

-   Support for `y=` as an alias of `out=` has been removed. The `fix`,
    `isposinf` and `isneginf` functions allowed using `y=` as a
    (deprecated) alias for `out=`. This is no longer supported.

    ([gh-23376](https://github.com/numpy/numpy/pull/23376))

#### Compatibility notes

-   The `busday_count` method now correctly handles cases where the
    `begindates` is later in time than the `enddates`. Previously, the
    `enddates` was included, even though the documentation states it is
    always excluded.

    ([gh-23229](https://github.com/numpy/numpy/pull/23229))

-   When comparing datetimes and timedelta using `np.equal` or
    `np.not_equal` numpy previously allowed the comparison with
    `casting="unsafe"`. This operation now fails. Forcing the output
    dtype using the `dtype` kwarg can make the operation succeed, but we
    do not recommend it.

    ([gh-22707](https://github.com/numpy/numpy/pull/22707))

-   When loading data from a file handle using `np.load`, if the handle
    is at the end of file, as can happen when reading multiple arrays by
    calling `np.load` repeatedly, numpy previously raised `ValueError`
    if `allow_pickle=False`, and `OSError` if `allow_pickle=True`. Now
    it raises `EOFError` instead, in both cases.

    ([gh-23105](https://github.com/numpy/numpy/pull/23105))

##### `np.pad` with `mode=wrap` pads with strict multiples of original
data

Code based on earlier version of `pad` that uses `mode="wrap"` will
return different results when the padding size is larger than initial
array.

`np.pad` with `mode=wrap` now always fills the space with strict
multiples of original data even if the padding size is larger than the
initial array.

([gh-22575](https://github.com/numpy/numpy/pull/22575))

##### Cython `long_t` and `ulong_t` removed

`long_t` and `ulong_t` were aliases for `longlong_t` and `ulonglong_t`
and confusing (a remainder from of Python 2). This change may lead to
the errors:

    'long_t' is not a type identifier
    'ulong_t' is not a type identifier

We recommend use of bit-sized types such as `cnp.int64_t` or the use of
`cnp.intp_t` which is 32 bits on 32 bit systems and 64 bits on 64 bit
systems (this is most compatible with indexing). If C `long` is desired,
use plain `long` or `npy_long`. `cnp.int_t` is also `long` (NumPy's
default integer). However, `long` is 32 bit on 64 bit windows and we may
wish to adjust this even in NumPy. (Please do not hesitate to contact
NumPy developers if you are curious about this.)

([gh-22637](https://github.com/numpy/numpy/pull/22637))

##### Changed error message and type for bad `axes` argument to `ufunc`

The error message and type when a wrong `axes` value is passed to
`ufunc(..., axes=[...])` has changed. The message is now more
indicative of the problem, and if the value is mismatched an
`AxisError` will be raised. A `TypeError` will still be raised for
invalidinput types.

([gh-22675](https://github.com/numpy/numpy/pull/22675))

##### Array-likes that define `__array_ufunc__` can now override ufuncs
if used as `where`

If the `where` keyword argument of a `numpy.ufunc`{.interpreted-text
role="class"} is a subclass of `numpy.ndarray`{.interpreted-text
role="class"} or is a duck type that defines
`numpy.class.__array_ufunc__`{.interpreted-text role="func"} it can
override the behavior of the ufunc using the same mechanism as the input
and output arguments. Note that for this to work properly, the
`where.__array_ufunc__` implementation will have to unwrap the `where`
argument to pass it into the default implementation of the `ufunc` or,
for `numpy.ndarray`{.interpreted-text role="class"} subclasses before
using `super().__array_ufunc__`.

([gh-23240](https://github.com/numpy/numpy/pull/23240))

##### Compiling against the NumPy C API is now backwards compatible by
default

NumPy now defaults to exposing a backwards compatible subset of the
C-API. This makes the use of `oldest-supported-numpy` unnecessary.
Libraries can override the default minimal version to be compatible with
using:

    #define NPY_TARGET_VERSION NPY_1_22_API_VERSION

before including NumPy or by passing the equivalent `-D` option to the
compiler. The NumPy 1.25 default is `NPY_1_19_API_VERSION`. Because the
NumPy 1.19 C API was identical to the NumPy 1.16 one resulting programs
will be compatible with NumPy 1.16 (from a C-API perspective). This
default will be increased in future non-bugfix releases. You can still
compile against an older NumPy version and run on a newer one.

For more details please see
`for-downstream-package-authors`{.interpreted-text role="ref"}.

([gh-23528](https://github.com/numpy/numpy/pull/23528))

#### New Features

##### `np.einsum` now accepts arrays with `object` dtype

The code path will call python operators on object dtype arrays, much
like `np.dot` and `np.matmul`.

([gh-18053](https://github.com/numpy/numpy/pull/18053))

##### Add support for inplace matrix multiplication

It is now possible to perform inplace matrix multiplication via the `@=`
operator.

```python
>>> import numpy as np

>>> a = np.arange(6).reshape(3, 2)
>>> print(a)
[[0 1]
 [2 3]
 [4 5]]

>>> b = np.ones((2, 2), dtype=int)
>>> a @&#8203;= b
>>> print(a)
[[1 1]
 [5 5]
 [9 9]]
```

([gh-21120](https://github.com/numpy/numpy/pull/21120))

##### Added `NPY_ENABLE_CPU_FEATURES` environment variable

Users may now choose to enable only a subset of the built CPU features
at runtime by specifying the `NPY_ENABLE_CPU_FEATURES`
environment variable. Note that these specified features must be outside
the baseline, since those are always assumed. Errors will be raised if
attempting to enable a feature that is either not supported by your CPU,
or that NumPy was not built with.

([gh-22137](https://github.com/numpy/numpy/pull/22137))

##### NumPy now has an `np.exceptions` namespace

NumPy now has a dedicated namespace making most exceptions and warnings
available. All of these remain available in the main namespace, although
some may be moved slowly in the future. The main reason for this is to
increase discoverability and add future exceptions.

([gh-22644](https://github.com/numpy/numpy/pull/22644))

##### `np.linalg` functions return NamedTuples

`np.linalg` functions that return tuples now return namedtuples. These
functions are `eig()`, `eigh()`, `qr()`, `slogdet()`, and `svd()`. The
return type is unchanged in instances where these functions return
non-tuples with certain keyword arguments (like
`svd(compute_uv=False)`).

([gh-22786](https://github.com/numpy/numpy/pull/22786))

##### String functions in `np.char` are compatible with NEP 42 custom
dtypes

Custom dtypes that represent unicode strings or byte strings can now be
passed to the string functions in `np.char`.

([gh-22863](https://github.com/numpy/numpy/pull/22863))

##### String dtype instances can be created from the string abstract
dtype classes

It is now possible to create a string dtype instance with a size without
using the string name of the dtype. For example,
`type(np.dtype('U'))(8)` will create a dtype that is equivalent to
`np.dtype('U8')`. This feature is most useful when writing generic code
dealing with string dtype classes.

([gh-22963](https://github.com/numpy/numpy/pull/22963))

##### Fujitsu C/C++ compiler is now supported

Support for Fujitsu compiler has been added. To build with Fujitsu
compiler, run:

> python setup.py build -c fujitsu

##### SSL2 is now supported

Support for SSL2 has been added. SSL2 is a library that provides
OpenBLAS compatible GEMM functions. To enable SSL2, it need to edit
site.cfg and build with Fujitsu compiler. See site.cfg.example.

([gh-22982](https://github.com/numpy/numpy/pull/22982))

#### Improvements

##### `NDArrayOperatorsMixin` specifies that it has no `__slots__`

The `NDArrayOperatorsMixin` class now specifies that it contains no
`__slots__`, ensuring that subclasses can now make use of this feature
in Python.

([gh-23113](https://github.com/numpy/numpy/pull/23113))

##### Fix power of complex zero

`np.power` now returns a different result for `0^{non-zero}` for complex
numbers. Note that the value is only defined when the real part of the
exponent is larger than zero. Previously, NaN was returned unless the
imaginary part was strictly zero. The return value is either `0+0j` or
`0-0j`.

([gh-18535](https://github.com/numpy/numpy/pull/18535))

##### New `DTypePromotionError`

NumPy now has a new `DTypePromotionError` which is used when two dtypes
cannot be promoted to a common one, for example:

    np.result_type("M8[s]", np.complex128)

raises this new exception.

([gh-22707](https://github.com/numpy/numpy/pull/22707))

##### `np.show_config` uses information from Meson

Build and system information now contains information from Meson.
`np.show_config` now has a new optional parameter `mode` to
help customize the output.

([gh-22769](https://github.com/numpy/numpy/pull/22769))

##### Fix `np.ma.diff` not preserving the mask when called with
arguments prepend/append.

Calling `np.ma.diff` with arguments prepend and/or append now returns a
`MaskedArray` with the input mask preserved.

Previously, a `MaskedArray` without the mask was returned.

([gh-22776](https://github.com/numpy/numpy/pull/22776))

##### Corrected error handling for NumPy C-API in Cython

Many NumPy C functions defined for use in Cython were lacking the
correct error indicator like `except -1` or `except *`. These have now
been added.

([gh-22997](https://github.com/numpy/numpy/pull/22997))

##### Ability to directly spawn random number generators

`numpy.random.Generator.spawn` now allows to directly spawn new
independent
child generators via the `numpy.random.SeedSequence.spawn` mechanism.
`numpy.random.BitGenerator.spawn` does the same for the underlying bit
generator.

Additionally, `numpy.random.BitGenerator.seed_seq` now gives
direct access to the seed sequence used for initializing the bit
generator. This allows for example:

    seed = 0x2e09b90939db40c400f8f22dae617151
    rng = np.random.default_rng(seed)
    child_rng1, child_rng2 = rng.spawn(2)

### safely use rng, child_rng1, and child_rng2

Previously, this was hard to do without passing the `SeedSequence`
explicitly. Please see `numpy.random.SeedSequence` for more
information.

([gh-23195](https://github.com/numpy/numpy/pull/23195))

##### `numpy.logspace` now supports a non-scalar `base` argument

The `base` argument of `numpy.logspace` can now be array-like if it is
broadcastable against the `start` and `stop` arguments.

([gh-23275](https://github.com/numpy/numpy/pull/23275))

##### `np.ma.dot()` now supports for non-2d arrays

Previously `np.ma.dot()` only worked if `a` and `b` were both 2d. Now it
works for non-2d arrays as well as `np.dot()`.

([gh-23322](https://github.com/numpy/numpy/pull/23322))

##### Explicitly show keys of .npz file in repr

`NpzFile` shows keys of loaded .npz file when printed.

```python
>>> npzfile = np.load('arr.npz')
>>> npzfile
NpzFile 'arr.npz' with keys arr_0, arr_1, arr_2, arr_3, arr_4...
```

([gh-23357](https://github.com/numpy/numpy/pull/23357))

##### NumPy now exposes DType classes in `np.dtypes`

The new `numpy.dtypes` module now exposes DType classes and will contain
future dtype related functionality. Most users should have no need to
use these classes directly.

([gh-23358](https://github.com/numpy/numpy/pull/23358))

##### Drop dtype metadata before saving in .npy or .npz files

Currently, a `*.npy` file containing a table with a dtype with metadata
cannot
be read back. Now, `np.save` and `np.savez` drop metadata before saving.

([gh-23371](https://github.com/numpy/numpy/pull/23371))

##### `numpy.lib.recfunctions.structured_to_unstructured` returns views
in more cases

`structured_to_unstructured` now returns a view, if the stride between
the fields is constant. Prior, padding between the fields or a reversed
field would lead to a copy. This change only applies to `ndarray`,
`memmap` and `recarray`. For all other array subclasses, the behavior
remains unchanged.

([gh-23652](https://github.com/numpy/numpy/pull/23652))

##### Signed and unsigned integers always compare correctly

When `uint64` and `int64` are mixed in NumPy, NumPy typically promotes
both to `float64`. This behavior may be argued about but is confusing
for comparisons `==`, `<=`, since the results returned can be incorrect
but the conversion is hidden since the result is a boolean. NumPy will
now return the correct results for these by avoiding the cast to float.

([gh-23713](https://github.com/numpy/numpy/pull/23713))

#### Performance improvements and changes

##### Faster `np.argsort` on AVX-512 enabled processors

32-bit and 64-bit quicksort algorithm for np.argsort gain up to 6x speed
up on processors that support AVX-512 instruction set.

Thanks to [Intel corporation](https://open.intel.com/) for sponsoring
this work.

([gh-23707](https://github.com/numpy/numpy/pull/23707))

##### Faster `np.sort` on AVX-512 enabled processors

Quicksort for 16-bit and 64-bit dtypes gain up to 15x and 9x speed up on
processors that support AVX-512 instruction set.

Thanks to [Intel corporation](https://open.intel.com/) for sponsoring
this work.

([gh-22315](https://github.com/numpy/numpy/pull/22315))

##### `__array_function__` machinery is now much faster

The overhead of the majority of functions in NumPy is now smaller
especially when keyword arguments are used. This change significantly
speeds up many simple function calls.

([gh-23020](https://github.com/numpy/numpy/pull/23020))

##### `ufunc.at` can be much faster

Generic `ufunc.at` can be up to 9x faster. The conditions for this
speedup:

-   operands are aligned
-   no casting

If ufuncs with appropriate indexed loops on 1d arguments with the above
conditions, `ufunc.at` can be up to 60x faster (an additional 7x
speedup). Appropriate indexed loops have been added to `add`,
`subtract`, `multiply`, `floor_divide`, `maximum`, `minimum`, `fmax`,
and `fmin`.

The internal logic is similar to the logic used for regular ufuncs,
which also have fast paths.

Thanks to the [D. E. Shaw group](https://deshaw.com/) for sponsoring
this work.

([gh-23136](https://github.com/numpy/numpy/pull/23136))

##### Faster membership test on `NpzFile`

Membership test on `NpzFile` will no longer decompress the archive if it
is successful.

([gh-23661](https://github.com/numpy/numpy/pull/23661))

#### Changes

##### `np.r_[]` and `np.c_[]` with certain scalar values

In rare cases, using mainly `np.r_` with scalars can lead to different
results. The main potential changes are highlighted by the following:

    >>> np.r_[np.arange(5, dtype=np.uint8), -1].dtype
    int16  # rather than the default integer (int64 or int32)
    >>> np.r_[np.arange(5, dtype=np.int8), 255]
    array([  0,   1,   2,   3,   4, 255], dtype=int16)

Where the second example returned:

    array([ 0,  1,  2,  3,  4, -1], dtype=int8)

The first one is due to a signed integer scalar with an unsigned integer
array, while the second is due to `255` not fitting into `int8` and
NumPy currently inspecting values to make this work. (Note that the
second example is expected to change in the future due to
`NEP 50 <NEP50>`{.interpreted-text role="ref"}; it will then raise an
error.)

([gh-22539](https://github.com/numpy/numpy/pull/22539))

##### Most NumPy functions are wrapped into a C-callable

To speed up the `__array_function__` dispatching, most NumPy functions
are now wrapped into C-callables and are not proper Python functions or
C methods. They still look and feel the same as before (like a Python
function), and this should only improve performance and user experience
(cleaner tracebacks). However, please inform the NumPy developers if
this change confuses your program for some reason.

([gh-23020](https://github.com/numpy/numpy/pull/23020))

##### C++ standard library usage

NumPy builds now depend on the C++ standard library, because the
`numpy.core._multiarray_umath` extension is linked with the C++ linker.

([gh-23601](https://github.com/numpy/numpy/pull/23601))

#### Checksums

##### MD5

4657f046d9d9d62e4baeae9b2cc1b4ea
numpy-1.25.0-cp310-cp310-macosx_10_9_x86_64.whl
f57f98fee3da2d98f752f755a880a508
numpy-1.25.0-cp310-cp310-macosx_11_0_arm64.whl
72b0ad52f96a41a7a82f511cb35c7ef1
numpy-1.25.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
a61227341b8903fa66ab0e0fdaa15430
numpy-1.25.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
bfccabfbd866c59545ce11ecdac60701
numpy-1.25.0-cp310-cp310-musllinux_1_1_x86_64.whl
    22402904f194376b8d2de01481f04b03  numpy-1.25.0-cp310-cp310-win32.whl
e983b193f7d63568eac85d8bda8be62e numpy-1.25.0-cp310-cp310-win_amd64.whl
5f6477db172f59a4fd7f591e1007e632
numpy-1.25.0-cp311-cp311-macosx_10_9_x86_64.whl
6a85cca47af69e3d45b4efab9490af4d
numpy-1.25.0-cp311-cp311-macosx_11_0_arm64.whl
ad1c0b4b406c9a2f1b42792502bc456b
numpy-1.25.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
39e241f265611a9c1e89499054ead1c9
numpy-1.25.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
e36b37acf1acfbc185face67c67bfe09
numpy-1.25.0-cp311-cp311-musllinux_1_1_x86_64.whl
    67862d7849b4f0f943760142f1628aed  numpy-1.25.0-cp311-cp311-win32.whl
6e8ed7865792246cac2213bad404f4da numpy-1.25.0-cp311-cp311-win_amd64.whl
25e843425697364f50dd7288ff9d2ce1
numpy-1.25.0-cp39-cp39-macosx_10_9_x86_64.whl
58641e53bcb1e13dfed1f5af1aff94bc
numpy-1.25.0-cp39-cp39-macosx_11_0_arm64.whl
ce15327793c39beecee8401356bc6c9b
numpy-1.25.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
34b734a2c7698d59954c29fe7c0536f3
numpy-1.25.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
6652d9df23c84e54466b10f4a2a290be
numpy-1.25.0-cp39-cp39-musllinux_1_1_x86_64.whl
    c228105e3c4c8887823d99e35eea9d2b  numpy-1.25.0-cp39-cp39-win32.whl
1322210ae6a874293d13c4bb3abf24ee numpy-1.25.0-cp39-cp39-win_amd64.whl
dc36096628e65077c2a44c493606c668
numpy-1.25.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl
942b4276f8d563efb111921d5995834c
numpy-1.25.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
0fa0734a8ff952dd643e7b9826168099
numpy-1.25.0-pp39-pypy39_pp73-win_amd64.whl
    b236497153bc19b4a560ac485e4c2754  numpy-1.25.0.tar.gz

##### SHA256

8aa130c3042052d656751df5e81f6d61edff3e289b5994edcf77f54118a8d9f4
numpy-1.25.0-cp310-cp310-macosx_10_9_x86_64.whl
9e3f2b96e3b63c978bc29daaa3700c028fe3f049ea3031b58aa33fe2a5809d24
numpy-1.25.0-cp310-cp310-macosx_11_0_arm64.whl
d6b267f349a99d3908b56645eebf340cb58f01bd1e773b4eea1a905b3f0e4208
numpy-1.25.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
4aedd08f15d3045a4e9c648f1e04daca2ab1044256959f1f95aafeeb3d794c16
numpy-1.25.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
6d183b5c58513f74225c376643234c369468e02947b47942eacbb23c1671f25d
numpy-1.25.0-cp310-cp310-musllinux_1_1_x86_64.whl
d76a84998c51b8b68b40448ddd02bd1081bb33abcdc28beee6cd284fe11036c6
numpy-1.25.0-cp310-cp310-win32.whl
c0dc071017bc00abb7d7201bac06fa80333c6314477b3d10b52b58fa6a6e38f6
numpy-1.25.0-cp310-cp310-win_amd64.whl
4c69fe5f05eea336b7a740e114dec995e2f927003c30702d896892403df6dbf0
numpy-1.25.0-cp311-cp311-macosx_10_9_x86_64.whl
9c7211d7920b97aeca7b3773a6783492b5b93baba39e7c36054f6e749fc7490c
numpy-1.25.0-cp311-cp311-macosx_11_0_arm64.whl
ecc68f11404930e9c7ecfc937aa423e1e50158317bf67ca91736a9864eae0232
numpy-1.25.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
e559c6afbca484072a98a51b6fa466aae785cfe89b69e8b856c3191bc8872a82
numpy-1.25.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
6c284907e37f5e04d2412950960894b143a648dea3f79290757eb878b91acbd1
numpy-1.25.0-cp311-cp311-musllinux_1_1_x86_64.whl
95367ccd88c07af21b379be1725b5322362bb83679d36691f124a16357390153
numpy-1.25.0-cp311-cp311-win32.whl
b76aa836a952059d70a2788a2d98cb2a533ccd46222558b6970348939e55fc24
numpy-1.25.0-cp311-cp311-win_amd64.whl
b792164e539d99d93e4e5e09ae10f8cbe5466de7d759fc155e075237e0c274e4
numpy-1.25.0-cp39-cp39-macosx_10_9_x86_64.whl
7cd981ccc0afe49b9883f14761bb57c964df71124dcd155b0cba2b591f0d64b9
numpy-1.25.0-cp39-cp39-macosx_11_0_arm64.whl
5aa48bebfb41f93043a796128854b84407d4df730d3fb6e5dc36402f5cd594c0
numpy-1.25.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
5177310ac2e63d6603f659fadc1e7bab33dd5a8db4e0596df34214eeab0fee3b
numpy-1.25.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
0ac6edfb35d2a99aaf102b509c8e9319c499ebd4978df4971b94419a116d0790
numpy-1.25.0-cp39-cp39-musllinux_1_1_x86_64.whl
7412125b4f18aeddca2ecd7219ea2d2708f697943e6f624be41aa5f8a9852cc4
numpy-1.25.0-cp39-cp39-win32.whl
26815c6c8498dc49d81faa76d61078c4f9f0859ce7817919021b9eba72b425e3
numpy-1.25.0-cp39-cp39-win_amd64.whl
5b1b90860bf7d8a8c313b372d4f27343a54f415b20fb69dd601b7efe1029c91e
numpy-1.25.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl
85cdae87d8c136fd4da4dad1e48064d700f63e923d5af6c8c782ac0df8044542
numpy-1.25.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
cc3fda2b36482891db1060f00f881c77f9423eead4c3579629940a3e12095fe8
numpy-1.25.0-pp39-pypy39_pp73-win_amd64.whl
f1accae9a28dc3cda46a91de86acf69de0d1b5f4edd44a9b0c3ceb8036dfff19
numpy-1.25.0.tar.gz

### [`v1.24.4`](https://github.com/numpy/numpy/releases/tag/v1.24.4)

[Compare
Source](https://github.com/numpy/numpy/compare/v1.24.3...v1.24.4)

### NumPy 1.24.4 Release Notes

NumPy 1.24.4 is a maintenance release that fixes a few bugs
discovered after the 1.24.3 release. It is the last planned
release in the 1.24.x cycle. The Python versions supported by
this release are 3.8-3.11.

#### Contributors

A total of 4 people contributed to this release. People with a "+" by
their names contributed a patch for the first time.

-   Bas van Beek
-   Charles Harris
-   Sebastian Berg
-   Hongyang Peng +

#### Pull requests merged

A total of 6 pull requests were merged for this release.

- [#&#8203;23720](https://github.com/numpy/numpy/pull/23720): MAINT,
BLD: Pin rtools to version 4.0 for Windows builds.
- [#&#8203;23739](https://github.com/numpy/numpy/pull/23739): BUG: fix
the method for checking local files for 1.24.x
- [#&#8203;23760](https://github.com/numpy/numpy/pull/23760): MAINT:
Copy rtools installation from install-rtools.
- [#&#8203;23761](https://github.com/numpy/numpy/pull/23761): BUG: Fix
masked array ravel order for A (and somewhat K)
- [#&#8203;23890](https://github.com/numpy/numpy/pull/23890): TYP,DOC:
Annotate and document the `metadata` parameter of...
- [#&#8203;23994](https://github.com/numpy/numpy/pull/23994): MAINT:
Update rtools installation

#### Checksums

##### MD5

25049e3aee79dde29e7a498d3ad13379
numpy-1.24.4-cp310-cp310-macosx_10_9_x86_64.whl
579b5c357c918feaef4af03af8afb721
numpy-1.24.4-cp310-cp310-macosx_11_0_arm64.whl
c873a14fa4f0210884db9c05e2904286
numpy-1.24.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
110a13ac016286059f0658b52b3646c0
numpy-1.24.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
    fa67218966c0aef4094867cad7703648  numpy-1.24.4-cp310-cp310-win32.whl
6ee768803d8ebac43ee0a04e628a69f9 numpy-1.24.4-cp310-cp310-win_amd64.whl
0c918c16b58cb7f6773ea7d76e0bdaff
numpy-1.24.4-cp311-cp311-macosx_10_9_x86_64.whl
20506ae8003faf097c6b3a8915b4140e
numpy-1.24.4-cp311-cp311-macosx_11_0_arm64.whl
902df9d5963e89d88a1939d94207857f
numpy-1.24.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
2543611d802c141c8276e4868b4d9619
numpy-1.24.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
    37b23a4e4e148d61dd3a515ac5dbf7ec  numpy-1.24.4-cp311-cp311-win32.whl
25e9f6bee2b65ff2a87588e717f15165 numpy-1.24.4-cp311-cp311-win_amd64.whl
f39a0cc3655a482af7d300bcaff5978e
numpy-1.24.4-cp38-cp38-macosx_10_9_x86_64.whl
9ed27941388fdb392e8969169f3fc600
numpy-1.24.4-cp38-cp38-macosx_11_0_arm64.whl
dee3f0c7482f1dc8bd1cd27b9b028a2c
numpy-1.24.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
2cc0967af29df3caef9fb3520f14e071
numpy-1.24.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
    8572a3a0973fa78355bcb5f737745b47  numpy-1.24.4-cp38-cp38-win32.whl
771c63f2ef0d31466bbb12362a532265 numpy-1.24.4-cp38-cp38-win_amd64.whl
5713d9dc3dff287fb72121fe1960c48d
numpy-1.24.4-cp39-cp39-macosx_10_9_x86_64.whl
4e6718e3b655219a2a733b4fa242ca32
numpy-1.24.4-cp39-cp39-macosx_11_0_arm64.whl
31487f9a52ef81f8f88ec7fce8738dad
numpy-1.24.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
ea597b30187e55eb16ee31631e66f60d
numpy-1.24.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
    98adbf30c67154056474001c125f6188  numpy-1.24.4-cp39-cp39-win32.whl
49c444b0e572ef45f1d92c106a36004e numpy-1.24.4-cp39-cp39-win_amd64.whl
cdddfdeac437b0f20b4e366f00b5c42e
numpy-1.24.4-pp38-pypy38_pp73-macosx_10_9_x86_64.whl
3778338c15628caa3abd61e6f7bd46ec
numpy-1.24.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
e16bd49d5295dc1b01ed50d76229fb54
numpy-1.24.4-pp38-pypy38_pp73-win_amd64.whl
    3f3995540a17854a29dc79f8eeecd832  numpy-1.24.4.tar.gz

##### SHA256

c0bfb52d2169d58c1cdb8cc1f16989101639b34c7d3ce60ed70b19c63eba0b64
numpy-1.24.4-cp310-cp310-macosx_10_9_x86_64.whl
ed094d4f0c177b1b8e7aa9cba7d6ceed51c0e569a5318ac0ca9a090680a6a1b1
numpy-1.24.4-cp310-cp310-macosx_11_0_arm64.whl
79fc682a374c4a8ed08b331bef9c5f582585d1048fa6d80bc6c35bc384eee9b4
numpy-1.24.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
7ffe43c74893dbf38c2b0a1f5428760a1a9c98285553c89e12d70a96a7f3a4d6
numpy-1.24.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
4c21decb6ea94057331e111a5bed9a79d335658c27ce2adb580fb4d54f2ad9bc
numpy-1.24.4-cp310-cp310-win32.whl
b4bea75e47d9586d31e892a7401f76e909712a0fd510f58f5337bea9572c571e
numpy-1.24.4-cp310-cp310-win_amd64.whl
f136bab9c2cfd8da131132c2cf6cc27331dd6fae65f95f69dcd4ae3c3639c810
numpy-1.24.4-cp311-cp311-macosx_10_9_x86_64.whl
e2926dac25b313635e4d6cf4dc4e51c8c0ebfed60b801c799ffc4c32bf3d1254
numpy-1.24.4-cp311-cp311-macosx_11_0_arm64.whl
222e40d0e2548690405b0b3c7b21d1169117391c2e82c378467ef9ab4c8f0da7
numpy-1.24.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
7215847ce88a85ce39baf9e89070cb860c98fdddacbaa6c0da3ffb31b3350bd5
numpy-1.24.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
4979217d7de511a8d57f4b4b5b2b965f707768440c17cb70fbf254c4b225238d
numpy-1.24.4-cp311-cp311-win32.whl
b7b1fc9864d7d39e28f41d089bfd6353cb5f27ecd9905348c24187a768c79694
numpy-1.24.4-cp311-cp311-win_amd64.whl
1452241c290f3e2a312c137a9999cdbf63f78864d63c79039bda65ee86943f61
numpy-1.24.4-cp38-cp38-macosx_10_9_x86_64.whl
04640dab83f7c6c85abf9cd729c5b65f1ebd0ccf9de90b270cd61935eef0197f
numpy-1.24.4-cp38-cp38-macosx_11_0_arm64.whl
a5425b114831d1e77e4b5d812b69d11d962e104095a5b9c3b641a218abcc050e
numpy-1.24.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
dd80e219fd4c71fc3699fc1dadac5dcf4fd882bfc6f7ec53d30fa197b8ee22dc
numpy-1.24.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
4602244f345453db537be5314d3983dbf5834a9701b7723ec28923e2889e0bb2
numpy-1.24.4-cp38-cp38-win32.whl
692f2e0f55794943c5bfff12b3f56f99af76f902fc47487bdfe97856de51a706
numpy-1.24.4-cp38-cp38-win_amd64.whl
2541312fbf09977f3b3ad449c4e5f4bb55d0dbf79226d7724211acc905049400
numpy-1.24.4-cp39-cp39-macosx_10_9_x86_64.whl
9667575fb6d13c95f1b36aca12c5ee3356bf001b714fc354eb5465ce1609e62f
numpy-1.24.4-cp39-cp39-macosx_11_0_arm64.whl
f3a86ed21e4f87050382c7bc96571755193c4c1392490744ac73d660e8f564a9
numpy-1.24.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
d11efb4dbecbdf22508d55e48d9c8384db795e1b7b51ea735289ff96613ff74d
numpy-1.24.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
6620c0acd41dbcb368610bb2f4d83145674040025e5536954782467100aa8835
numpy-1.24.4-cp39-cp39-win32.whl
befe2bf740fd8373cf56149a5c23a0f601e82869598d41f8e188a0e9869926f8
numpy-1.24.4-cp39-cp39-win_amd64.whl
31f13e25b4e304632a4619d0e0777662c2ffea99fcae2029556b17d8ff958aef
numpy-1.24.4-pp38-pypy38_pp73-macosx_10_9_x86_64.whl
95f7ac6540e95bc440ad77f56e520da5bf877f87dca58bd095288dce8940532a
numpy-1.24.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
e98f220aa76ca2a977fe435f5b04d7b3470c0a2e6312907b37ba6068f26787f2
numpy-1.24.4-pp38-pypy38_pp73-win_amd64.whl
80f5e3a4e498641401868df4208b74581206afbee7cf7b8329daae82676d9463
numpy-1.24.4.tar.gz

</details>

<details>
<summary>pandas-dev/pandas (pandas)</summary>

###
[`v2.0.3`](https://github.com/pandas-dev/pandas/releases/tag/v2.0.3):
Pandas 2.0.3

[Compare
Source](https://github.com/pandas-dev/pandas/compare/v2.0.2...v2.0.3)

This is a patch release in the 2.0.x series and includes some regression
and bug fixes. We recommend that all users upgrade to this version.

See the [full
whatsnew](https://pandas.pydata.org/pandas-docs/version/2.0.3/whatsnew/v2.0.3.html)
for a list of all the changes.

The release will be available on the defaults and conda-forge channels:

conda install pandas
Or via PyPI:

python3 -m pip install --upgrade pandas
Please report any issues with the release on the [pandas issue
tracker](https://github.com/pandas-dev/pandas/issues).

Thanks to all the contributors who made this release possible.

</details>

<details>
<summary>platformdirs/platformdirs (platformdirs)</summary>

###
[`v3.8.0`](https://github.com/platformdirs/platformdirs/releases/tag/3.8.0)

[Compare
Source](https://github.com/platformdirs/platformdirs/compare/3.7.0...3.8.0)

<!-- Release notes generated using configuration in .github/release.yml
at main -->

#### What's Changed

- Add missing user media directory docs by
[@&#8203;kemzeb](https://github.com/kemzeb) in
[https://github.com/platformdirs/platformdirs/pull/195](https://github.com/platformdirs/platformdirs/pull/195)

**Full Changelog**:
https://github.com/platformdirs/platformdirs/compare/3.7.0...3.8.0

###
[`v3.7.0`](https://github.com/platformdirs/platformdirs/releases/tag/3.7.0)

[Compare
Source](https://github.com/platformdirs/platformdirs/compare/3.6.0...3.7.0)

<!-- Release notes generated using configuration in .github/release.yml
at main -->

#### What's Changed

- Have user_runtime_dir return /var/run/user/uid for \*BSD by
[@&#8203;kemzeb](https://github.com/kemzeb) in
[https://github.com/platformdirs/platformdirs/pull/194](https://github.com/platformdirs/platformdirs/pull/194)

**Full Changelog**:
https://github.com/platformdirs/platformdirs/compare/3.6.0...3.7.0

###
[`v3.6.0`](https://github.com/platformdirs/platformdirs/releases/tag/3.6.0)

[Compare
Source](https://github.com/platformdirs/platformdirs/compare/3.5.3...3.6.0)

<!-- Release notes generated using configuration in .github/release.yml
at main -->

#### What's Changed

- platformdirs: introduce user_downloads_dir() by
[@&#8203;cofiem](https://github.com/cofiem) in
[https://github.com/platformdirs/platformdirs/pull/192](https://github.com/platformdirs/platformdirs/pull/192)

#### New Contributors

- [@&#8203;cofiem](https://github.com/cofiem) made their first
contribution in
[https://github.com/platformdirs/platformdirs/pull/192](https://github.com/platformdirs/platformdirs/pull/192)

**Full Changelog**:
https://github.com/platformdirs/platformdirs/compare/3.5.3...3.6.0

###
[`v3.5.3`](https://github.com/platformdirs/platformdirs/releases/tag/3.5.3)

[Compare
Source](https://github.com/platformdirs/platformdirs/compare/3.5.2...3.5.3)

<!-- Release notes generated using configuration in .github/release.yml
at main -->

**Full Changelog**:
https://github.com/platformdirs/platformdirs/compare/3.5.2...3.5.3

###
[`v3.5.2`](https://github.com/platformdirs/platformdirs/releases/tag/3.5.2)

[Compare
Source](https://github.com/platformdirs/platformdirs/compare/3.5.1...3.5.2)

<!-- Release notes generated using configuration in .github/release.yml
at 3.5.2 -->

#### What's Changed

- git ls-files -z -- .github/workflows/check.yml | xargs -0 sed -i
's|3.12.0-alpha.7|3.12.0-beta.1|g' by
[@&#8203;gaborbernat](https://github.com/gaborbernat) in
[https://github.com/platformdirs/platformdirs/pull/187](https://github.com/platformdirs/platformdirs/pull/187)
- Use ruff by [@&#8203;gaborbernat](https://github.com/gaborbernat) in
[https://github.com/platformdirs/platformdirs/pull/189](https://github.com/platformdirs/platformdirs/pull/189)

**Full Changelog**:
https://github.com/platformdirs/platformdirs/compare/3.5.1...3.5.2

</details>

<details>
<summary>jazzband/prettytable (prettytable)</summary>

###
[`v3.8.0`](https://github.com/jazzband/prettytable/releases/tag/3.8.0)

[Compare
Source](https://github.com/jazzband/prettytable/compare/3.7.0...3.8.0)

#### Added

- Add `get_formatted_string()` convenience function
([#&#8203;241](https://github.com/jazzband/prettytable/issues/241))
[@&#8203;rickwporter](https://github.com/rickwporter)

#### Changed

- Drop support for EOL Python 3.7
([#&#8203;245](https://github.com/jazzband/prettytable/issues/245))
[@&#8203;hugovk](https://github.com/hugovk)

</details>

<details>
<summary>pytest-dev/pytest (pytest)</summary>

###
[`v7.4.0`](https://github.com/pytest-dev/pytest/releases/tag/7.4.0)

[Compare
Source](https://github.com/pytest-dev/pytest/compare/7.3.2...7.4.0)

# pytest 7.4.0 (2023-06-23)

## Features

- [#&#8203;10901](https://github.com/pytest-dev/pytest/issues/10901):
Added `ExceptionInfo.from_exception()
<pytest.ExceptionInfo.from_exception>`{.interpreted-text role="func"}, a
simpler way to create an `~pytest.ExceptionInfo`{.interpreted-text
role="class"} from an exception.
This can replace `ExceptionInfo.from_exc_info()
<pytest.ExceptionInfo.from_exc_info()>`{.interpreted-text role="func"}
for most uses.

## Improvements

- [#&#8203;10872](https://github.com/pytest-dev/pytest/issues/10872):
Update test log report annotation to named tuple and fixed inconsistency
in docs for `pytest_report_teststatus`{.interpreted-text role="hook"}
hook.

- [#&#8203;10907](https://github.com/pytest-dev/pytest/issues/10907):
When an exception traceback to be displayed is completely filtered out
(by mechanisms such as `__tracebackhide__`, internal frames, and
similar), now only the exception string and the following message are
shown:

"All traceback entries are hidden. Pass \[--full-trace]{.title-ref} to
see hidden and internal frames.".

Previously, the last frame of the traceback was shown, even though it
was hidden.

- [#&#8203;10940](https://github.com/pytest-dev/pytest/issues/10940):
Improved verbose output (`-vv`) of `skip` and `xfail` reasons by
performing text wrapping while leaving a clear margin for progress
output.

    Added `TerminalReporter.wrap_write()` as a helper for that.

- [#&#8203;10991](https://github.com/pytest-dev/pytest/issues/10991):
Added handling of `%f` directive to print microseconds in log format
options, such as `log-date-format`.

- [#&#8203;11005](https://github.com/pytest-dev/pytest/issues/11005):
Added the underlying exception to the cache provider's path creation and
write warning messages.

- [#&#8203;11013](https://github.com/pytest-dev/pytest/issues/11013):
Added warning when `testpaths`{.interpreted-text role="confval"} is set,
but paths are not found by glob. In this case, pytest will fall back to
searching from the current directory.

- [#&#8203;11043](https://github.com/pytest-dev/pytest/issues/11043):
When \[--confcutdir]{.title-ref} is not specified, and there is no
config file present, the conftest cutoff directory
(\[--confcutdir]{.title-ref}) is now set to the `rootdir
<rootdir>`{.interpreted-text role="ref"}.
Previously in such cases, \[conftest.py]{.title-ref} files would be
probed all the way to the root directory of the filesystem.
If you are badly affected by this change, consider adding an empty
config file to your desired cutoff directory, or explicitly set
\[--confcutdir]{.title-ref}.

- [#&#8203;11081](https://github.com/pytest-dev/pytest/issues/11081):
The `norecursedirs`{.interpreted-text role="confval"} check is now
performed in a `pytest_ignore_collect`{.interpreted-text role="hook"}
implementation, so plugins can affect it.

If after updating to this version you see that your
\[norecursedirs]{.title-ref} setting is not being respected,
it means that a conftest or a plugin you use has a bad
\[pytest_ignore_collect]{.title-ref} implementation.
Most likely, your hook returns \[False]{.title-ref} for paths it does
not want to ignore,
which ends the processing and doesn't allow other plugins, including
pytest itself, to ignore the path.
The fix is to return \[None]{.title-ref} instead of \[False]{.title-ref}
for paths your hook doesn't want to ignore.

- [#&#8203;8711](https://github.com/pytest-dev/pytest/issues/8711):
`caplog.set_level()
<pytest.LogCaptureFixture.set_level>`{.interpreted-text role="func"} and
`caplog.at_level()
<pytest.LogCaptureFixture.at_level>`{.interpreted-text role="func"}
will temporarily enable the requested `level` if `level` was disabled
globally via
    `logging.disable(LEVEL)`.

## Bug Fixes

- [#&#8203;10831](https://github.com/pytest-dev/pytest/issues/10831):
Terminal Reporting: Fixed bug when running in `--tb=line` mode where
`pytest.fail(pytrace=False)` tests report `None`.
- [#&#8203;11068](https://github.com/pytest-dev/pytest/issues/11068):
Fixed the `--last-failed` whole-file skipping functionality ("skipped N
files") for `non-python test files <non-python tests>`{.interpreted-text
role="ref"}.
- [#&#8203;11104](https://github.com/pytest-dev/pytest/issues/11104):
Fixed a regression in pytest 7.3.2 which caused to
`testpaths`{.interpreted-text role="confval"} to be considered for
loading initial conftests,
even when it was not utilized (e.g. when explicit paths were given on
the command line).
    Now the `testpaths` are only considered when they are in use.
- [#&#8203;1904](https://github.com/pytest-dev/pytest/issues/1904):
Fixed traceback entries hidden with `__tracebackhide__ = True` still
being shown for chained exceptions (parts after "... the above exception
..." message).
- [#&#8203;7781](https://github.com/pytest-dev/pytest/issues/7781):
Fix writing non-encodable text to log file when using `--debug`.

## Improved Documentation

- [#&#8203;9146](https://github.com/pytest-dev/pytest/issues/9146):
Improved documentation for `caplog.set_level()
<pytest.LogCaptureFixture.set_level>`{.interpreted-text role="func"}.

## Trivial/Internal Changes

- [#&#8203;11031](https://github.com/pytest-dev/pytest/issues/11031):
Enhanced the CLI flag for `-c` to now include `--config-file` to make it
clear that this flag applies to the usage of a custom config file.

###
[`v7.3.2`](https://github.com/pytest-dev/pytest/releases/tag/7.3.2)

[Compare
Source](https://github.com/pytest-dev/pytest/compare/7.3.1...7.3.2)

# pytest 7.3.2 (2023-06-10)

## Bug Fixes

- [#&#8203;10169](https://github.com/pytest-dev/pytest/issues/10169):
Fix bug where very long option names could cause pytest to break with
`OSError: [Errno 36] File name too long` on some systems.
- [#&#8203;10894](https://github.com/pytest-dev/pytest/issues/10894):
Support for Python 3.12 (beta at the time of writing).
- [#&#8203;10987](https://github.com/pytest-dev/pytest/issues/10987):
`testpaths`{.interpreted-text role="confval"} is now honored to load
root `conftests`.
- [#&#8203;10999](https://github.com/pytest-dev/pytest/issues/10999):
The \[monkeypatch]{.title-ref}
\[setitem]{.title-ref}/\[delitem]{.title-ref} type annotations now allow
\[TypedDict]{.title-ref} arguments.
- [#&#8203;11028](https://github.com/pytest-dev/pytest/issues/11028):
Fixed bug in assertion rewriting where a variable assigned with the
walrus operator could not be used later in a function call.
- [#&#8203;11054](https://github.com/pytest-dev/pytest/issues/11054):
Fixed `--last-failed`'s "(skipped N files)" functionality for files
inside of packages (directories with \[\__init\_\_.py]{.title-ref}
files).

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "on the first day of the month" (UTC),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config help](https://github.com/renovatebot/renovate/discussions) if
that's undesired.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/hugovk/pypistats).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNS4xNDQuMiIsInVwZGF0ZWRJblZlciI6IjM1LjE0NC4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants