When cross compiling, ibus builds unicode-parser with CC_FOR_BUILD and
the glib flags from PKG_CONFIG_FOR_BUILD. That defaults to the native
pkg-config binary, but with the target PKG_CONFIG_PATH and sysroot, so
the build tool is compiled against the target glib headers. On 32-bit
targets glib's static assertions then fail with the 64-bit host
compiler:
glib/gmacros.h:910:31: error: static assertion failed: "Expression evaluates to false"
Pass pkg-config-native, which uses the native sysroot, as
PKG_CONFIG_FOR_BUILD.
AI-Generated: Uses Claude Code
Signed-off-by: Khem Raj <khem.raj@oss.qualcomm.com>
rice-proto counts agents in a core AtomicU64, which is not available on
targets without 64-bit atomics, so it fails to build for riscv32:
error[E0432]: unresolved import `core::sync::atomic::AtomicU64`
Add a patch that uses AtomicUsize for it, like the other id counters
in rice-proto, keeping the u64 agent id.
AI-Generated: Uses Claude Code
Signed-off-by: Khem Raj <khem.raj@oss.qualcomm.com>
Add patches to the vendored crates:
- libc: Add the syscall numbers 443 to 450, which riscv32 musl lacks
and rustix needs for SYS_futex_waitv.
- fff-search, rmcp, nu-command and nu-dap: Use the 64-bit atomics from
portable-atomic on targets without 64-bit atomics, where std does not
provide them, and record the dependency in Cargo.lock since the build
uses --frozen.
AI-Generated: Uses Claude Code
Signed-off-by: Khem Raj <khem.raj@oss.qualcomm.com>
std only provides AtomicU64 on targets with 64-bit atomics, so ruff
fails to build for riscv32:
error[E0432]: unresolved import `std::sync::atomic::AtomicU64`
--> crates/ruff/src/cache.rs:7:25
Add a patch that uses portable-atomic's AtomicU64 for the cache
timestamp on such targets, archived in the same on-disk format.
AI-Generated: Uses Claude Code
Signed-off-by: Khem Raj <khem.raj@oss.qualcomm.com>
floret keeps its training token counter in a std::atomic<int64_t>. On
riscv32 its operations become __atomic_*_8 libcalls, and floret is not
linked with libatomic, so linking the CLI fails:
ld.lld: error: undefined symbol: __atomic_fetch_add_8
Add a patch that checks in CMake whether 64-bit atomics need libatomic
and only then links the libraries with it and adds it to floret.pc.
AI-Generated: Uses Claude Code
Signed-off-by: Khem Raj <khem.raj@oss.qualcomm.com>
The vendored libc 0.2.171 crate declares getrandom() for musl only on
some architectures, so the vendored getrandom crate fails to build for
riscv32 musl:
error[E0425]: cannot find value `getrandom` in crate `libc`
Backport the libc 0.2.172 change that declares it for all musl targets,
and update the vendored crate checksums of the modified files.
AI-Generated: Uses Claude Code
Signed-off-by: Khem Raj <khem.raj@oss.qualcomm.com>
klibc only has a riscv64 port, which hardcodes KLIBCBITSIZE = 64 and
uses 64-bit loads and stores in its assembly, and upstream has no
riscv32 port. With KLIBC_ARCH defaulting to TARGET_ARCH, the build fails:
make[1]: *** No rule to make target '.../usr/klibc/arch/riscv32/MCONFIG'. Stop.
Mark klibc and the recipes sharing klibc.inc incompatible with riscv32
so they are skipped instead of failing to build.
Also skip all recipes inheriting klibc
AI-Generated: Uses Claude Code
Signed-off-by: Khem Raj <khem.raj@oss.qualcomm.com>
The encoder uses atomic operations on 64-bit counters. On riscv32 these
become __atomic_*_8 libcalls, and libx265 is not linked with libatomic,
so linking the x265 CLI fails:
ld.lld: error: undefined reference: __atomic_fetch_or_8
>>> referenced by libx265.so.217 (disallowed by --no-allow-shlib-undefined)
Add a patch that checks in CMake whether 64-bit atomics need libatomic
and adds it to the platform libraries only in that case.
AI-Generated: Uses Claude Code
Signed-off-by: Khem Raj <khem.raj@oss.qualcomm.com>
hiawatha uses __atomic_store_n()/__atomic_load_n() on time_t values. On
riscv32, where time_t is 64-bit but there are no 64-bit atomic
instructions, these become __atomic_*_8 libcalls, and linking fails:
ld.lld: error: undefined symbol: __atomic_store_8
Add a patch that checks in CMake whether atomic operations on a time_t
need libatomic and links hiawatha with it only in that case.
AI-Generated: Uses Claude Code
Signed-off-by: Khem Raj <khem.raj@oss.qualcomm.com>
The configure check for -latomic links a program that loads from a
local std::atomic<uint64_t>, which clang folds away at -O2. On riscv32
it therefore reports that libatomic is not needed, and linking rtorrent
fails:
ld.lld: error: undefined symbol: __atomic_load_8
Add a patch that makes the test atomic global and modifies it with
fetch_add() so the check cannot be optimized away.
AI-Generated: Uses Claude Code
Signed-off-by: Khem Raj <khem.raj@oss.qualcomm.com>
The configure check for -latomic links a program that loads from a
local std::atomic<uint64_t>, which clang folds away at -O2. On riscv32
it therefore reports that libatomic is not needed, and libtorrent.so is
left with undefined __atomic_fetch_add_8, __atomic_fetch_sub_8,
__atomic_load_8 and __atomic_store_8 references and no dependency on
libatomic.
Add a patch that makes the test atomic global and modifies it with
fetch_add() so the check cannot be optimized away.
AI-Generated: Uses Claude Code
Signed-off-by: Khem Raj <khem.raj@oss.qualcomm.com>
do_compile maps HOST_ARCH to the Android architecture and fails for
riscv32, which Android does not support:
ERROR: Unsupported HOST_ARCH=riscv32
Mark the recipe incompatible with riscv32, as for powerpc, so it is
skipped instead of failing to build.
AI-Generated: Uses Claude Code
Signed-off-by: Khem Raj <khem.raj@oss.qualcomm.com>
BufferQueue keeps its memory usage counter in a std::atomic<uint64_t>,
which riscv32 lowers to __atomic_*_8 libcalls, so programs linking the
static libbit7z, such as the ptest binaries, fail to link:
ld.lld: error: undefined symbol: __atomic_fetch_add_8
ld.lld: error: undefined symbol: __atomic_fetch_sub_8
ld.lld: error: undefined symbol: __atomic_load_8
Add a patch that uses a std::size_t counter instead. It sums the sizes
of in-memory buffers, so it always fits, and the atomic is lock-free on
every target, so no libatomic is needed.
AI-Generated: Uses Claude Code
Signed-off-by: Khem Raj <khem.raj@oss.qualcomm.com>
The example server keeps the file size in a uint64_t and uses it as the
size of a std::span, which clang rejects as narrowing on targets with a
32-bit size_t, such as riscv32:
examples/server.cc:236:54: error: non-constant-expression cannot be
narrowed from type 'uint64_t' (aka 'unsigned long long') to
'size_type' (aka 'unsigned int') in initializer list [-Wc++11-narrowing]
Add a patch that stores the length as a size_t and rejects files too
large to map instead of truncating their size.
AI-Generated: Uses Claude Code
Signed-off-by: Khem Raj <khem.raj@oss.qualcomm.com>
When cross compiling for a 32-bit target such as riscv32, configure
cannot test the long long snprintf format and builds the replacement
snprintf(), which fails because SIZEOF_LONG and SIZEOF_LONG_LONG are
never defined:
snprintf.c:651:2: error: "cannot find integer type of the same size as size_t"
Add a patch that checks the size of long and long long in configure.
AI-Generated: Uses Claude Code
Signed-off-by: Khem Raj <khem.raj@oss.qualcomm.com>
fio uses 64-bit C11 atomics, which riscv32 lowers to
__atomic_load_8/__atomic_store_8 libcalls, so linking fio fails:
ld.lld: error: undefined symbol: __atomic_load_8
ld.lld: error: undefined symbol: __atomic_store_8
Add a patch that makes configure check whether 64-bit atomics need
libatomic and add it to LIBS only in that case.
AI-Generated: Uses Claude Code
Signed-off-by: Khem Raj <khem.raj@oss.qualcomm.com>
CheckAtomic.cmake tests whether libatomic is needed with a program that
loads from a local std::atomic. With -O2 clang folds the load away, so
the check passes on riscv32 even though 64-bit atomics need libatomic,
and linking fails later:
ld.lld: error: undefined reference: __atomic_fetch_add_8
ld.lld: error: undefined symbol: __atomic_load_8
Add a patch that makes the test programs use a global atomic with a
read-modify-write operation so they cannot be optimized away.
AI-Generated: Uses Claude Code
Signed-off-by: Khem Raj <khem.raj@oss.qualcomm.com>
libmana uses 64-bit C11 atomics, which riscv32 lowers to
__atomic_load_8/__atomic_store_8 libcalls, so linking libmana fails:
ld.lld: error: undefined symbol: __atomic_load_8
ld.lld: error: undefined symbol: __atomic_store_8
Add a patch that checks at configure time whether 64-bit atomics need
libatomic and links libmana with it only in that case.
AI-Generated: Uses Claude Code
Signed-off-by: Khem Raj <khem.raj@oss.qualcomm.com>
ntp_set_tod() passes a long to stime(), which fails to build on 32-bit
targets with a 64-bit time_t, e.g. riscv32 with clang:
libntp/machines.c:483:14: error: incompatible pointer types passing
'long *' to parameter of type 'const time_t *'
Add a patch to use time_t unless the system declares stime() with a
long (DECL_STIME_1), so the argument matches the prototype in use on
every architecture.
AI-Generated: Uses Claude Code
Signed-off-by: Khem Raj <khem.raj@oss.qualcomm.com>
Upgrade to release 10.17.0:
- Added {class}pikepdf.ObjectSet, which records the objects that a
walk of a PDF's object graph has already visited. Objects in a
PDF are shared and may refer back to their ancestors, so a search
that only limits its depth can take exponential time on quite
ordinary files. ObjectSet.add() reports whether an object is new,
and tells apart direct objects and objects of different Pdf,
which a set of objgen cannot. See {ref}walking-object-graphs.
- Added {meth}pikepdf.Object.is_same_object_as, which tests whether
two references lead to the same object. Neither is, == nor
comparing objgen answers this reliably.
- Added {meth}pikepdf.Pdf.content_scopes and
{meth}pikepdf.Page.content_scopes, which iterate over every
content stream that pages can draw, each with the resource
dictionary it uses: the page itself, form XObjects, annotation
appearance streams, tiling patterns, Type 3 glyph procedures and
soft masks, however they are nested or shared. This is the way to
find every font, image or colour space a document uses. Each
{class}pikepdf.ContentScope is reported once for the document;
pages= selects pages and kinds= selects what is reported.
- Added {meth}pikepdf.Page.get_resources, which returns the
resources of a page or form XObject for reading. Unlike
{attr}pikepdf.Page.resources, it finds resources inherited from
the page tree, does not create an empty dictionary when there are
none, and returns None instead of raising when /Resources is
malformed.
- Fixed comparing two objects with == taking exponential time when
the objects being compared share children, such as the same file
opened twice. Each pair of objects is now compared once.
- Fixed {meth}pikepdf.Pdf.add_pages_from hanging on a page with an
action whose /Next actions are shared or form a loop.
- Fixed {meth}pikepdf.Pdf.open_outline reading only the first item
at each level of an outline whose items are direct objects. Such
items are now made indirect when the outline is saved, as the PDF
specification requires.
- Reading a stream that will not decode now raises
{exc}~pikepdf.exceptions.DataDecodingError with the reason,
whether the stream's data was read from a file or set from
memory. Previously a stream read from a file raised a
{exc}~pikepdf.exceptions.PdfError that said only "read_bytes
called on unfilterable stream", and the reason was available only
from {meth}pikepdf.Pdf.get_warnings. DataDecodingError is a
PdfError, so existing handlers are unaffected.
- An exception raised by a JBIG2 decoder now reaches the caller of
{meth}pikepdf.PdfImage.as_pil_image,
{meth}pikepdf.PdfImage.extract_to and
{meth}pikepdf.PdfImage.read_bytes unchanged, with its own type,
message and traceback. Previously, for an image read from a file,
it was replaced by a generic DataDecodingError or PdfError.
- Added {exc}~pikepdf.exceptions.QpdfRuntimeError, raised for
errors from qpdf that pikepdf has no more specific exception for.
These were previously raised as a bare RuntimeError, which except
pikepdf.PikepdfError did not catch. The new exception derives
from both {exc}~pikepdf.exceptions.PikepdfError and RuntimeError,
so handlers written for RuntimeError still work.
- The empty name / is now supported. The PDF 1.7 and 2.0
specifications define a lone slash as a valid name made of zero
characters, but pikepdf.Name('/') raised ValueError, and
dictionaries refused / as a key. This broke
{meth}pikepdf.Pdf.add_pages_from on files with an empty-named
destination such as /Dests << / 3 0 R >>. Such names can now be
created, used as dictionary keys, and migrated during page
copying. bool(Name('/')) is False, like an empty
{class}pikepdf.String. Name(''), which lacks the leading slash,
is still rejected. PDF/A does not forbid empty names, and the
PDF/A validator accepts them.
- AcroFormField.get_inheritable_field_value_as_name() now returns a
{class}pikepdf.Name, as documented, instead of a str. When the
value is missing or not a name, it returns the empty name
Name('/'), which is falsy, instead of ''. Comparisons such as ==
'/Tx' are unaffected.
- Fixed an out-of-bounds read when opening a PDF from a Python file
object whose readinto() reports more bytes than were requested.
This now raises ValueError, as writing to such a stream already
did. Non-blocking streams, whose readinto() returns None, now
raise ValueError instead of hanging.
- Fixed building from source on PyPy, which failed to compile since
v10.0. PyPy now reads Python file objects through readinto(),
like CPython, instead of copying the result of read().
- {func}pikepdf.open reads directly from the file descriptor when
given a filename, instead of calling the seek() and readinto()
methods of a Python file object for every read. Opening and
reading a large file with many objects is about four to five
times faster, matching the speed of memory mapping
(access_mode=AccessMode.mmap). Streams passed to
{func}pikepdf.open, including plain file objects, are read
through their methods as before.
- Documented {class}pikepdf.TokenFilter with worked examples that
shorten numbers and convert RGB colors to grayscale, and
explained when to use a token filter instead of
{func}pikepdf.parse_content_stream. The API reference no longer
says that the parser should not be used to edit content streams.
The TokenFilter.handle_token documentation now says correctly
that exceptions it raises propagate to the caller.
Extend RDEPENDS with the missing runtime dependencies
python3-fonttools and python3-jsonschema which are required
to import pikepdf.pdfa.
Install pdfa_differential.py to pass the tests from
test_pdfa_differential.py. Fixes:
E ModuleNotFoundError: No module named 'pdfa_differential'
This work was sponsored by GOVCERT.LU.
Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
Signed-off-by: Khem Raj <khem.raj@oss.qualcomm.com>
Add a recipe for fonttools which provides tools to manipulate font
files. Release 4.67.0 brings:
- [varLib] Support decreasing design-space axis mappings, via a new
keyword-only allow_decreasing argument to models.normalizeValue.
- [designspaceLib] Allow partial DesignSpace v5 axis subsets:
omitted range attributes on an <axis-subset> are taken from the
parent axis, as the spec says.
- [designspaceLib] Fix DesignSpaceDocument.normalize() for mapped
axes: axis bounds and rule conditions are now normalized from
their original values.
- [designspaceLib] splitInterpolable and splitVariableFonts now
warn when a source or instance is dropped because it lies outside
the document's own axes, instead of silently discarding it.
- [varLib.instancer] Add support for instancing variable COLRv1
fonts.
- [varLib.instancer] Apply VVAR vertical-origin deltas to VORG, and
use OpenType rounding for instanced advances and vertical
origins.
- [varLib.instancer] Keep a universal FeatureVariations record when
pinning removes its last condition but other axes remain.
- [varLib.instancer] Preserve ppem Device corrections in GDEF,
BASE, GPOS and JSTF instead of asserting on them.
- [varLib.instancer] Allow requesting an axis's original range on
VARC fonts.
- [varLib.instancer, subset] Fold, remove or remap MATH
VariationIndex devices when instancing, subsetting the GDEF store
or optimizing it.
- [varLib] Raise ValueError: Missing required table fvar from
varLib.mutator and the instancer CLI on a static font, instead of
a bare KeyError.
- [featureVars] When adding rvrn, also shift lookup indices inside
existing FeatureVariations. Handle null ConditionSet and
FeatureTableSubstitution offsets when building, subsetting and
instancing. Keep FeatureTableSubstitution records sorted after
merging new ones into an existing record.
- [ttLib] Fix FeatureParams (size, ssXX, cvXX) in FeatureVariations
alternate feature tables, which failed to compile and round-trip.
- [ttLib] Fully decode lazily loaded ligatures, SinglePos and
PairPos arrays during recursive decompilation, so reorderGlyphs()
on a lazy font no longer corrupts or asserts on them.
- [VARC] Update the variation-store binary format to follow
harfbuzz/boring-expansion-spec#175:
SparseVarRegionList.RegionCount is uint32, sparse axes use
Offset32 and MultiVarData items are stored in an INDEX. VARC
fonts built with earlier fontTools versions must be rebuilt.
- [VARC] Several fixes: derive component conditions from
conditionIndex, set the implicit scaleY when importing XML,
report the font's current coordinates for components that reset
unspecified axes, and keep inherited coordinates when drawing
CFF2 VARC components.
- [varLib] buildMultiVarData accepts flattened per-region vector
tuples.
- [otConverters] Bounds-check CFF2 INDEX count and offSize on read,
raising TTLibError instead of allocating huge lazy lists.
- [ttLib] Handle empty packed deltas when OPTIMIZE_FONT_SPEED is
set.
- [scaleUpem] Scale per-glyph VORG origins; fix VARC scaling for
static fonts and condition variations; don't mutate the shared
default CFF FontMatrix.
- [cmap] Fix format 2 compilation when all codes are single-byte or
all single-byte codes map to .notdef. Formats 2 and 4 now reject
glyph IDs above 65535 instead of wrapping them. Split format 14
default UVS ranges longer than 256 codepoints. Empty format 12
and 13 subtables round-trip.
- [glyf] Use unsigned instruction lengths, so programs of
32768-65535 bytes compile and decompile correctly. Keep
instructions in zero-contour glyphs.
- [pens] Fix cubic off-curve detection in TTGlyphPointPen across
contour starts. Glyph.drawPoints() now raises NotImplementedError
for an all-off-curve cubic contour, which the point pen protocol
cannot express. RoundingPen passes the all-off-curve None
sentinel through.
- [CFF2] Preserve operands when a blend has zero regions.
- [cffLib] Read CFF font names as Latin-1, matching how they are
written. Deleting a CFF dict attribute now actually removes it.
- [CFF2ToCFF] Fix conversion of fonts with local subroutines. A
CFF2 table with a single FontDict is now converted to a
name-keyed CFF font that keeps its glyph names.
- [subset] Handle a null GDEF variation store.
- [merge] Support merging fonts that both have a MATH table.
- [feaLib] Reject the same mark class used twice in one anchor
list. Don't crash on value records whose devices are all NULL.
Pad a short OS/2 Vendor with spaces.
- [feaLib] Raise FeatureLibError with a location, instead of a bare
Python error, for: a BASE script list without a matching tag
list, a UnicodeRange bit outside 0-127, a name string that cannot
be decoded, a STAT axis location with no or too many values, and
a non-ASCII OS/2 Vendor.
- [name] Fix the BCP 47 tags of some Mac and Windows language IDs,
e.g. es was mapped to Mac Estonian. getDebugName prefers the
Windows English name over the Mac one.
- [post] Don't crash on a format 2.0 table with numGlyphs set to 0.
- [VDMX] Recompute numRecs and numRatios when compiling.
- [Silf] Fix compiling a Silf table that was decompiled from
binary.
- [woff2] Preserve minorVersion when copying flavor data.
- [ttGlyphSet] Compute glyph width lazily for glyf variable fonts
without HVAR, so .width is correct before drawing.
- [varLib.interpolatable] Respect designspace source layers; fix
--json output with SciPy.
- [misc.psLib] Fix tokenizing of escaped parentheses in PostScript
strings.
- [svgLib] Raise ValueError instead of IndexError on a truncated
path command.
- [misc.transform] Preserve the direction of the remaining axis
when decomposing a transform whose first column is zero.
- [misc.textTools] Tag.__ne__ returns NotImplemented for
unsupported types.
- [misc.dictTools] hashdict rejects in-place union (|=).
- [misc.xmlReader] Close owned input streams when parsing fails.
- [misc.filesystem] WriteZipFS.close() can be called more than
once.
- [EBDT] Keep EBDT/CBDT glyph metrics after probing a missing
attribute.
This work was sponsored by GOVCERT.LU.
Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
Signed-off-by: Khem Raj <khem.raj@oss.qualcomm.com>
In case the overlayfs-tools are built using meson, a test triggers
during meson setup phase during do_configure task. The test invokes
"sudo", which may not be present on the build machine. Skip the test
at meson setup phase. Tests should be executed separately on demand
using "meson test" command instead, and invoking "sudo" and expecting
it to work during do_configure is unusual.
"
ERROR: overlayfs-tools-v2025.01-r0 do_configure: meson setup failed
...
| Run-time dependency musl-fts found: NO (tried pkgconfig)
| Library m found: YES
| Program test_cases/run_tests.py found: YES (/home/oe/build-some-target/tmp/work/arm64-distro-linux/overlayfs-tools/v2025.01/sources/overlayfs-tools-v2025.01/test_cases/run_tests.py)
|
| ../sources/overlayfs-tools-v2025.01/meson.build:94:0: ERROR: Program 'sudo' not found or not executable
|
| A full log can be found at /home/oe/build-some-target/tmp/work/arm64-distro-linux/overlayfs-tools/v2025.01/build/meson-logs/meson-log.txt
|
| Last 10 lines of meson-log.txt:
| Code:
| int main(void) { return 0; }
"
Signed-off-by: Marek Vasut <marek.vasut@mailbox.org>
Signed-off-by: Khem Raj <khem.raj@oss.qualcomm.com>
Upgrade to release 1.13.0:
- Document explicit proxy evaluation and identity checks with None.
- Fixed some broken tests on Python 3.15.
- Added configuration for Windows ARM64 wheels.
- Added Python 3.15 wheels.
- Dropped support for EOL Python 3.10 and 3.9.
- Dropped wheel building for Python 3.13 free-threading
(experimental and unsupported by cibuildwheel anymore; details).
- Fixed typo in __annotations__ (basically it was broken).
License-Update: Copyright years updated
Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
Signed-off-by: Khem Raj <khem.raj@oss.qualcomm.com>
Upgrade to release 3.7:
Highlights:
- The isomorphism checking suite of tools has been upgraded. The
VF2++ functions now provide subgraph isomorphism and subgraph
monomorphism checking.
- Leiden based community detection algorithms are now supported via
leiden_communities and leiden_partitions. This provides an
alternative, often improved, community detection algorithm
compared to the Louvain functions.
- The pygraphviz library is now provided via pip with wheels that
include the GraphViz binaries. This should make the NetworkX
interface to pygraphviz easier to use for graph layout and
rendering.
API Changes:
- Expire random lobster dep.
- API: Expire deprecations of could-be isomorphism aliases.
- Proposal to deprecate bfs_predecessors.
- Change maximal_independent_set to return set instead of list
.
- Add centroid as alias to barycenter.
- API: Deprecate p2g module.
Enhancements:
- Adding the Tree Optimization in Floyd Warshall.
- Kruskal MST early break for efficiency.
- create new generator that returns a random k-lift of a d-regular
graph.
- Floyd Warshall: Adding support for weight parameter as a callable.
- [ENH] Flow algorithms: Add support for callable capacity
parameter.
- fix: add suggestions from #8021 and #8029 to is_aperiodic.
- Improve chordal code readability by removing helper function.
- FEAT: Added basic random walk utilities #8378.
- Implement Constant-Potts Model (for use with Leiden community
detection).
- The isomorphism checking suite of tools has been upgraded. The
VF2++ functions now provide subgraph isomorphism and subgraph
monomorphism checking.
- Adding optional sp arg to closeness_centrality.
- perf: replace built-in sum() with np.sum() in pagerank and katz.
- ENH: Add format parameter to adjacency_matrix.
- Proposal: Add density to nx.describe defaults.
- Add utility to extract faces from PlanarEmbedding.
- Improving views exceptions.
- Optimize _build_paths_from_predecessors stack logic for 30-40%
speedup.
- EHN: Add nonedge argument to from_numpy_array and complete the
roundtrip.
- State-of-the-art implementation of Tarjan's algorithm.
- Add description and keywords support to GEXF reader/writer.
- DOC: more barycenter and centroid equivalence.
- ENH: Add Barber's bipartite modularity quality function.
- Leiden based community detection algorithms are now supported via
leiden_communities and leiden_partitions. This provides an
alternative, often improved, community detection algorithm
compared to the Louvain functions.
- ENH: Add Shen's overlapping modularity quality function.
- ENH: leiden test and doc_string improvements.
- Add butterflies() to bipartite cluster module.
- Avoid O(E) lookup in nx.display -issue8639.
- Add HITS algorithm benchmark to benchmark suite.
- Add DAG antichain width.
- escape tuple labels in generate_gml.
- Speed up the residual flow reset in edmonds_karp and simplify the
minimum_cut partition.
- Avoid building the flow dict in maximum_flow_value.
- ENH: add n_samples parameter to rich_club_coefficient for
multi-sample averaging.
- Simplifying _build_paths_from_predecessors - 10% faster.
- {label=Highlight} The isomorphism checking suite of tools has
been upgraded. The ISMAGS symmetry aware isomorphism and subgraph
isomorphism checking tools now support directed and multigraph
Graphs. And, now in addition to support for (induced) subgraph
isomorphisms, they support (non-induced subgraph) monomorphism.
- ENH: adding magnetic_laplacian_matrix.
- ENH: Speed up connectivity checks in random_reference and
lattice_reference.
- [BUG][PERF] Fix ISMAGS directed matching and monomorphism
overhead.
- Add: Shrikhande graph.
Bug Fixes:
- Bug: Floyd Warshall: resolved self positive loop bug.
- Bugfix for spring layouts with empty list of fixed nodes.
- Fixed diameter/radius error for null graphs.
- Floyd warshall: raises error if negative cycle is found.
- BUG: fix ISMAGS self-loops error.
- Fix cost function in min_weighted_dominating_set.
- Fix sparse heuristic not applied to diagonal blocks in
stochastic_block_model.
- BUG: fix SpanningTreeIterator AttributeError when using next()
directly.
- Fix all_node_cuts: correct Even-Tarjan reduction for Kanevsky's
algorithm.
- fix multigraph isomorphism tests and fix support in ISMAGS and in
VF2pp.
- BUG: Make argmap._lazy_compile thread-safe.
- reject out-of-range bytes in graph6/sparse6 decoders.
- Fix: bug with mean degree part of
geometric_soft_configuration_model.
- Fix k_components losing or truncating k-components.
- Fix ISMAGS ignoring matches when graph has extra node/edge colors
(gh-8738).
- BUG: reverse the map returned by vf2pp functions.
- BUG: Fix node connectivity and node cuts for digraphs.
- BUG: Use power iteration as the default HITS implementation.
- BUG: group betweenness gives incorrect values for undirected
connected graph.
- BUG: Group betweenness centrality counts paths incorrectly for
directed but not strongly connected.
- BUG: Group betweenness skips adjustments if any sigma is zero.
- BUG: Handle KeyErrors in directed not strongly-connected
group_betweenness_centrality.
- BUG: correct normalization of group betweenness centrality when
endpoints is true.
- [BUG][PERF] Fix ISMAGS directed matching and monomorphism
overhead.
- BUG: Fix vf2 handling of isomorphism_iter with isolated subgraph
nodes.
- fix: handle empty candidate sets in
ISMAGS.largest_common_subgraph.
- BUG: Hold the graph weakly in cached edge and degree views.
Documentation:
- Improving FP recommendations.
- DOC: add Reporting Views reference page and include in toctree.
- Betweenness documentation definitions should match default
behavior.
- docs: clarify chordal_cycle_graph degree for multigraph vs simple
graph.
- DOC: dedup graph setup in fp tutorial cells.
- Clarify decorator usage in backend implementations.
- DOC: Warn that env vars must be set before importing networkx.
- Update PGF/TikZ link.
- Consolidate reportviews documentation.
- Document betweenness normalizations correctly.
- DOC: Add nx-guides cross-link to plot_lca example.
- DOC: Update link to football data.
- Clarify that bfs_predecessors() does not actually search through
predecessors.
- Add example to filter multiedges in edge_subgraph docstring.
- Doc: Add nx_pydot to DOT file documentation.
- Adopt scikit-learn's agentic AI policy.
- Clarify a note on graph ordering in graph_atlas_g docstring.
- DOC: Update import convention for bipartite docstring examples.
- DOC: Use dict(G.degree) in examples.
- Fix typo: thrid-party to third-party in tutorial.
- Fix: minor typo in docstring.
- DOC: Add docstring examples to random_walk.
- DOC: first step to add football.zip to examples directory.
- DOC: Add football example using url to our own examples github
folder.
- DOC: Remove Good First Issue references from docs.
- DOC: Add note about from_scipy_sparse_array treating zeros as
explicit zeros.
- Update maximal_independent_set docstring.
- Add examples to degree_histogram docstring.
- Gallery: Fix and update basic_properties example.
- Added example for SpanningTreeIterator to find min spanning trees.
- Gallery: Update basic read/write example.
- Gallery: split simple graph example into two separate ones.
- Fix broken links in quotient_graph docstring and other minor doc
warnings.
- Gallery: Improve plot_dag example.
- Gallery: Improve plot_degree_sequence example.
- Enhance has_cycle docstring with usage examples.
- DOC: Remove redundant sphinx links.
- DOC: clarify lazy exception behavior in topological_sort
generator.
- Fixed incorrect description of modularity formula for directed
graphs.
- DOC: clarify remaining readwrite generator docstrings.
- DOC: Add note about connectionstyle effectiveness.
- DOC: more barycenter and centroid equivalence.
- DOC: Add xref to nx-guides to gallery overview.
- DOC: Add conference information to visualization in football
example.
- leiden: fix "wen" + duplicate "the the" in q_add comment.
- Fix star graph node count in dual_barabasi_albert_graph comment.
- DOC: update to roadmap.
- DOC: Clarify degree_centrality behavior for directed graphs.
- DOC: Fixups for Leiden docstrings.
- DOC: Update install guide.
- Louvain updates to docs and code readability.
- DOC: Add Hiveplotlib to Drawing Docs and External Examples
Gallery.
- Clarify attribute behavior in relabel_nodes when multiple nodes
map to the same target.
- MAINT: update code of conduct form link to match NumFOCUS link.
- Warn when PageRank convergence check is ineffective.
- DOC: fix lattice_reference niter default (5, not 1).
- Fix typos in comments and docstrings.
- DOC: Add example of floating point handling for maximum_flow
capacity.
- DOC: minor tweaks to biconnected docstring examples.
- BUG: fix bfs_successors yielding empty tuple for zero-successor
source.
- DOC: clarify method='unweighted' behavior in all_shortest_paths
helpers.
- Fix docstring parameters that are not in the signature.
- Raise NetworkXError on unknown attribute class in GEXF reader.
- DOC: add example of immediate post-dominators.
- Fix four docstring parameter names that do not match the
signature.
- DOC: Add details about steiner tree approxmation for disconnected
graphs.
- DOC: Fix broken link in leiden_partitions.
- DOC: Fixup communicability.
- DOC: document bfs_layout raises.
- Add and correct ISMAGS method docs.
- DOC: Fix write graphml docstring examples.
- DOC: Fix edgelist docstring examples.
- DOC: Fix TeX docstring examples.
- DOC: Fixing adjlist docstring examples.
- DOC: Fix gexf docstring examples.
- DOC: Fixing bipartite.write_edgelist docstring examples.
- DOC: Fix pajek docstring examples.
- DOC: Update bipartite.read_edgelist docstring examples.
- DOC: Fix multiadjlist docstring examples.
- DOC: Fix gml docstring examples.
- [BUG][PERF] Fix ISMAGS directed matching and monomorphism
overhead.
- DOC: Fix Parameters indentation in generate_gexf.
- Expose *Matcher classes to get them into the objects inventory.
Maintenance:
- Relaxes check for undirected edge node ordering when backends are
used for networkx tests.
- Revert "pin python 3.14 to be version 3.14.0 until dataclasses
are fixed".
- MAINT: Single implementation for different returns.
- CI: Build docs in parallel.
- BENCH: Add minimum spanning tree to benchmarks.
- fix: circular_ladder_graph edge cases for n < 2.
- Fix/refactor dag root to leaf.
- fix: preserve string positions in to_agraph conversion.
- BUG: forceatlas2 layout with nonarray complete initial positions.
- Add benchmarks for is_chordal.
- Explicitly install nx after deps.
- Minor improvements to chordal_graph_treewidth.
- DOC: Eliminate sphinx build warnings.
- CI: Bump dispatch workflow python version.
- Update minimum dependencies (SPEC 0) and drop python 3.11.
- Remove _hits_scipy code that has been deprecated.
- DOC: footnote -> hyperlink.
- Linting exceptions.
- BUGFIX: spring energy and ARF layouts with zero iterations.
- Expire random lobster dep.
- MAINT: Reuse could_be_isomorphic in fast_/faster_ variants.
- API: Expire deprecations of could-be isomorphism aliases.
- MAINT: Bump linters.
- CI: Use pixi for CI platform/OS independent tasks.
- CI: Explicitly add pip as a dep while resolving doc env.
- Minor random_walks test refactor.
- Refactor random walk implementation.
- Minor update to zip examples.
- TST: Dedup and refactor closeness centrality tests.
- MAINT: clarify error when RandomState is used with random API.
- MAINT: remove unused functions and imports.
- MAINT: Minor readability tweaks to pagerank.
- Raise ValueError in write_gexf for mixed typed attributes.
- BUG: Handle small graphs in information_centrality.
- CI: fix benchmark PR workflow checkout.
- Followup that fixes import order.
- MAINT: remove unused imports and dead helpers.
- MAINT: Handle insufficient degree Pearson samples.
- Optimize VF2 GMState frontier update by removing full core scan.
- MAINT: Avoid subgraph views in strategy_connected_sequential.
- Cleanup butterflies tests.
- Remove unused dsum variable from havel_hakimi_graph.
- CI: networkx default deps were leaking into the pixi default env.
- DOC/CI: Update github label requirements for user experience.
- CI: Redo benchmarks to use pixi around asv.
- MAINT: Fix ci permissions.
- MAINT: Minor touchups to lexicographical_toplogical_sort.
- MAINT: Rm MANIFEST.in.
- CI: Add image comparison tests to pre-release workflows.
- MAINT: Avoid subgraph views in is_forest.
- TST, MAINT: explict graphviz check for test_pydot.
- CI: Fix circleci artifact redirector permissions.
- write xsd:boolean true/false for dynamic gexf attvalues.
- escape quotes and backslashes in pajek make_qstr.
- Louvain updates to docs and code readability.
- Align boruvka_mst_edges keys default with kruskal/prim and fix
docstring typo.
- TST: Test maintenance for test_clique.py.
- Optimize Leiden data handling.
- MAINT: Avoid Louvain infinite loops.
- MAINT: avoid timeouts on circleci.
- MAINT: bump copyright year before release.
- BENCH: Add clustering to algorithm benchmarks.
- CI: Add back --doctest-modules flag to base tests.
- Prune nested components in k_components reconstruction and add
tests the private helpers.
- Fix reverse to preserve all attributes in dispatch conversions.
- Clear the dispatch cache in remove_{node,edge}_attributes.
- Fix "accidentally quadratic" use of list as queue in
full_rary_tree.
- MAINT: allow isomorphism match helpers to be lists or not.
- fix: correct typo in test variable name.
- Allow spectral_layout to handle dim>=len(G). Added dim tests.
- META: Add agents.md.
- MNT: Use linalg.eigh to compute HITS eigenvalues.
- TST: parameterizing with iterables is deprecated in pytest.
- TST: Cleanup & modernize the minimum cuts test suite.
- MAINT: Refactor communicability tests.
- ENH: Use linear algebra to compute communicability.
- MNT: Raise warnings to errors while running pytest.
- MAINT: sparse.eye is deprecated, use eye_array.
- BUG: Fix _hits_numpy inf/NaN when eigh returns negated
eigenvector.
- Fix typo while dispatching vf2pp.
- Support for Py3.15.
- Update minimum dependencies (SPEC 0).
Other:
- TST: Common tests for all isomorphism algorithms.
- TST: Add test cases for len(G) != 3.
- TST: shorten leiden tests.
- TST: Update pytest-mpl baselines for matplotlib v3.11.
- Adding regression test for duplicate shortest-paths.
License-Update: Copyright years updated
Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
Signed-off-by: Khem Raj <khem.raj@oss.qualcomm.com>
Upgrade to release 4.7.0:
- Fix language: node hooks during commit with -a or inside a
submodule.
Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
Signed-off-by: Khem Raj <khem.raj@oss.qualcomm.com>
Upgrade to release 0.26.2:
Major changes
- check(), +/-, comparisons and to_reduced_units() now use the
active context, e.g. adding kN and kg in a context relating force
and mass (#1951, #1748, #1002, #1067)
- <number> / <offset or logarithmic unit> (e.g. 1 / ureg.degC) now
raises OffsetUnitCalculusError; Unit * bool and Quantity * str
now raise TypeError
- Add a deprecation warning to ApplicationRegistry.__getitem__()
matching direct registry item access
- Improve and test / and * between Quantity and Unit, supporting
more edge cases; improve their type annotations as well
- Preserve the registry's Quantity type in wraps annotations for a
single return unit, allowing array results to be indexed
- Improve type annotations for Unit: / and ** keep the unit type,
and __copy__/__deepcopy__ keep the registry subclass
Units and parsing
- Update definition of US survey units to reflect the 2022 revision
by NIST/NGS
- Fix fathom to equal two international yards; the old value is now
survey_fathom
- Fix the angular mil so one turn is 6400 mil
- Parse $ as a unit symbol like £, and raise DefinitionSyntaxError
for unknown operators such as & instead of ignoring them
- Raise DefinitionSyntaxError instead of an internal TypeError for
addition or subtraction in unit expressions, e.g. kilo-watt
- Reject invalid unit aliases at definition time while preserving
Unicode and degree aliases
Formatting changes
- Add TypstFormatter and ZeroFormatter to allow formatting to plain
Typst and zero package
- Format temperature units as valid LaTeX (~L) and siunitx (Lx),
e.g. \degreeCelsius
- str() and format() of a Unit now use the registry's fmt_locale,
like Quantities
- Keep the row layout of multi-dimensional arrays in
Quantity._repr_html_, as repr does
- Fix babel not localizing unit names containing underscores, e.g.
kilowatt_hour
- Fix formatting a unit with only negative exponents, e.g. 1 /
second, raising IndexError when a locale is set
- Restore the previous numeric locale when localized formatting
raises an exception
NumPy
- Support the numpy.vecdot, numpy.matvec and numpy.vecmat ufuncs
and numpy.linalg.vecdot on Quantities
- Support numpy.repeat on Quantities
- numpy.sum/numpy.nansum now raise DimensionalityError for a bare
non-zero initial on a dimensioned Quantity, like numpy.max
- Fix numpy.sum/numpy.nansum not converting a Quantity initial
value, unlike numpy.max/numpy.min
- Fix numpy.nanmax/numpy.nanmin raising ValueError on a Quantity
initial value, unlike numpy.max/numpy.min
- Fix numpy.clip not converting the units of the numpy 2.1 min/max
keywords
- Fix recursion in numpy.average with dimensionless Quantity
weights and returned=False
- Fix assigning offset-unit quantities (e.g. degC into a kelvin
array) via __setitem__
- Fix numpy.linspace(..., retstep=True) on Quantities failing to
return separate samples and step; offset temperature steps use
delta units
- Fix numpy.block raising TypeError for nested lists of Quantities,
e.g. numpy.block([[a, b], [c, d]])
- Fix numpy.percentile, numpy.nanpercentile, numpy.quantile, and
numpy.nanquantile raising RecursionError when q is a Quantity
- Fix numpy.tensordot, numpy.cross and the other multiplicative
functions rejecting positional arguments after the two arrays,
e.g. numpy.tensordot(a, b, 1)
- Fix numpy.mod, numpy.remainder, numpy.fmod and numpy.floor_divide
ignoring the units of the divisor when both operands have the
same dimensionality, e.g. np.mod(7 m, 200 cm) returned 7 m
- Fix numpy.unwrap raising TypeError on the period keyword; a
Quantity period or discont is converted to the units of the input
- Fix numpy.diff and numpy.ediff1d not converting the units of
Quantity prepend/append and to_end/to_begin values
- Fix numpy.ptp returning an absolute temperature instead of a
delta for offset units
Bugfixes
- Fix converting logarithmic units defined with a compound
reference, e.g. volt / ampere, which dropped all but one
reference unit
- Fix compound logarithmic units, e.g. Quantity(-161, "dBm/Hz"),
becoming an undefined delta_ unit that could not be converted
- Fix logarithmic unit conversion and hashing with Decimal
magnitudes and non_int_type=Decimal, with or without NumPy
- Fix UnitRegistry.wraps() converting only the first variadic
positional argument and failing on empty *args; preserve
keyword-only arguments and defaults
- Fix UnitRegistry.check() validating the wrong arguments of
functions with *args, **kwargs or keyword-only parameters, and
failing to call functions with positional-only defaults
- Fix 1 * unit skipping auto_reduce_dimensions and
autoconvert_to_preferred, so it disagreed with every other
magnitude
- Fix to_preferred raising a spurious DimensionalityError for some
preferred units
- Fix RecursionError in find_connected_nodes for long chains of
contexts
- Fix in-place **= changing a Quantity's units when the magnitude
update fails, e.g. a fractional power of an integer array
- Fix Quantity.dimensionality being stale after an in-place
operation changes the units
- Fix Quantity.to_compact() raising OffsetUnitCalculusError for
offset units like degree_Celsius with magnitude below 1
Documentation
- Document is_compatible_with in the tutorial
- Document defining units with a custom Converter
- Document that Unit equality compares definitions, not values,
e.g. kph != km/hour (#1433, #1876)
- Document how to compare angles that differ by a full turn, e.g.
-140 degree and 220 degree, using the modulo operator
Development and packaging
- Remove the babel <= 2.8 upper bound from the babel extra
- Fix CI never comparing the matplotlib test figures with the
baseline images: --mpl was lost with the Travis config in 2021
- Fix CI installing the numpy matrix pin outside the pixi env on
Windows/macOS, so those legs ran the no-numpy test suite
Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
Signed-off-by: Khem Raj <khem.raj@oss.qualcomm.com>
Upgrade to release 5.1.0:
- [Feature]: Added support for the mlkem768x25519-sha256 post-quantum
hybrid key exchange method described in draft-ietf-sshm-mlkem-hybrid-kex.
It pairs ML-KEM-768 (FIPS 203) with X25519 and is interoperable with
OpenSSH 10.0+. The new method is enabled automatically when the
installed cryptography library exposes ML-KEM (which requires
OpenSSL 3.5+, AWS-LC, or BoringSSL); it is preferred over the
existing classical methods when available.
See paramiko.kex_mlkem.KexMLKEM768X25519.
Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
Signed-off-by: Khem Raj <khem.raj@oss.qualcomm.com>
Upgrade to release 3.7.0:
- Add support for Python 3.14 and 3.15.
- Drop support for Python 3.7, 3.8, and 3.9.
- Fix get_leaking_objects with an objects argument to not ignore
references from other sources. Closes#82.
- Fix get_leaking_objects([]) causing an UnboundLocalError.
Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
Signed-off-by: Khem Raj <khem.raj@oss.qualcomm.com>
Upgrade to release 4.0.0:
The release 4.0.0 defines the foundation that enables AI contributions
and will improve the maintenance of oauthlib by using AI agents, skills,
code for both contributors and maintainers. It includes devcontainer,
skills and cleanup of instructions.
Important: this release contains 2 breaking changes:
- Removed JSONP support from token revocation endpoint
- Client authentication validation reorganized across grants:
the grant_type parameter is now validated before client
authentication.
- Replace pyenv with uv in documentation and tooling
- Improve github action to publish package
- Add pre-commit to run linters, formatters, etc. on code changes
- Fix client authentication for DeviceCodeGrant when getting a
token
- Add project URLs to this project's PyPI page
- Fix a typo in ServiceApplicationClient docstring.
- Correct grammar in function help
- Add Python 3.14 to the testing
- Initial python/uv/tox devcontainer
- Fix ruff checks about unused variables
- Drop EOL Python 3.8 from CI
- Set Open Collective username to 'oauthlib'
- pre-commit autoupdate 2026_02_21
- Remove a trailing whitespace fo fix failing pre-commit
- Fix typos discovered by typos
- Add resource to Request._params
- Release 3.4.0: Add OAuthLib Maintainer agent
- Remove JSONP support from token revocation
- Improve PKCE code comparison
- Release 4.0.0: bump and update changelog
Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
Signed-off-by: Khem Raj <khem.raj@oss.qualcomm.com>
Upgrade to release 1.11.0:
New Features:
- feat(certifi): optionally use certifi certificates
- feat(nodeenv): accept npm-style semver ranges in --node
- feat(nodeenv): add --prefer-system to use system node when
available
- feat(nodeenv): add --isolate-npm to keep npm config inside the
environment
- feat(nodeenv): install local packages from a requirements file
- feat(nodeenv): write the posix activate on Windows for git-bash
Fixed bugs:
- fix: repair Windows CI (ZipFile.extractall filter, test_smoke
layout)
- fix(nodeenv): replace leftover debug print with logger.debug
- fix(nodeenv): stop -p from reinstalling node that is already
there
- fix(nodeenv): let -p target a virtualenv nodeenv isn't installed
in
- fix(nodeenv): report the url and proxy instead of a traceback
- fix(nodeenv): keep the python virtualenv's scripts under -p on
Windows
- fix(nodeenv): report a missing node archive instead of a
traceback
- fix(nodeenv): detect musl regardless of the host triplet vendor
- fix(nodeenv): read npm's parseable listing in freeze
- fix: allow zsh to source bin/activate
- fix(nodeenv): link nodejs.exe without mklink
Improvements:
- FEAT: Check if activate is called as script.
- address deprecation warning in tarfile.TarFile.extract all in
Python …
- chore(ci): run the activation scripts in sh, dash, bash, zsh and
fish
- chore(ci): give the integration smoke tests a home and stop
running them 20 times
- feat(nodeenv): clean "src" directory by default
Documentation:
- docs(readme): document file:// mirrors as a local download source
- docs(changes): backfill the changelog from 1.3.2 to 1.10.0
Other Changes:
- chore(release): bump nodeenv version to 1.11.0
Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
Signed-off-by: Khem Raj <khem.raj@oss.qualcomm.com>
Upgrade to release 1.2.3:
- Fix memory leaks in the C extension when map key validation or
container hooks fail. See GHSA-j586-36cw-2gc2.
- wheels: also build for pyodide using emscripten.
- Support packing Python 3.15 frozentdict (PEP 814)
- Reject negative array and map header sizes
Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
Signed-off-by: Khem Raj <khem.raj@oss.qualcomm.com>
Upgrade to release 3.16.0:
- Add support for SSD1363
- Remove deprecation notice in framebuffer mixin
- Make page_address_offset configurable for SH1106 displays
Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
Signed-off-by: Khem Raj <khem.raj@oss.qualcomm.com>
Upgrade to release 1.6.0:
- Fix caching of functions whose source cannot be retrieved, such
as functions defined in a notebook cell. Their identity fell back
to str(hash(func.__code__)), which is salted by PYTHONHASHSEED
and so differed between processes. A worker reading the
func_code.py written by another one concluded that the function
had changed and wiped the whole cache directory for it, discarding
results computed by its peers. func_code.py is also no longer
rewritten in place, so a reader can no longer catch it
half-written and draw the same conclusion.
- Drop python 3.9 support. The oldest supported Python version is
now Python 3.10.
- Fix eval_expr (used to evaluate the pre_dispatch argument of
Parallel) to raise a ValueError as documented instead of leaking
a ZeroDivisionError for expressions that divide or take a modulo
by zero.
- MemorizedResult now forwards mmap_mode to its store backend, so a
cached array reconstructed from a location is memory-mapped as
requested instead of being loaded fully into memory.
- Unvendor cloudpickle to more quickly benefit from maintenance
releases of cloudpickle
- Fix Memory.cache for functions with a keyword-only argument that
has a default declared before a keyword-only argument without a
default.
- Fix behavior of filter_args on some precise cases.
- Fix a concurrency error that could happen with unordered
generator.
- Fix: dump() now accepts any input os.PathLike object to be
consistent with load.
- The documentation now uses pydata sphinx theme. Furthermore,
optional dependencies test and docs have been added to
pyproject.toml.
Extend RDEPENDS with the missing runtime dependencies:
python3-cloudpickle.
Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
Signed-off-by: Khem Raj <khem.raj@oss.qualcomm.com>
Upgrade to release 0.20.1:
- Avoid loading an executable path from project.json
- Avoid changing the global recursion limit
- Support for async pytest fixtures
- Work better with PEP 695 type parameter syntax
Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
Signed-off-by: Khem Raj <khem.raj@oss.qualcomm.com>
Upgrade to release 9.17.1:
- Have builin-lazy magics have a lower priority than registered on
Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
Signed-off-by: Khem Raj <khem.raj@oss.qualcomm.com>
Upgrade to release 0.36.1:
- Defer generating source representations until they are needed,
improving performance when comparing matching snapshots with
updates disabled.
- Speed up snapshot conversion for literal constants, especially in
large lists and dictionaries.
- Built-in literal values are always managed; attempting to
register their types as unmanaged raises TypeError.
- Scope unmanaged type registrations to the current snapshot
context, inheriting registrations from the parent context.
- Speed up snapshot comparisons by avoiding unnecessary deep copies
of immutable built-in values.
- Speed up snapshot conversion by reading AST constant values
directly instead of compiling and evaluating them.
- Respect show-updates in the short report, hiding snapshot
representation change messages when it is disabled.
Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
Signed-off-by: Khem Raj <khem.raj@oss.qualcomm.com>
Upgrade to release 2.38.1:
- Correct v2 format argument type hints
- Drop Python 3.10, fix PyAV gc stall, temporarily pin pillow on
pypy
- Bump multidict from 6.7.1 to 6.9.1
Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
Signed-off-by: Khem Raj <khem.raj@oss.qualcomm.com>
Upgrade to release 3.4.0:
Backwards-incompatible. The django stats app writes to its own sqlite
database by default (huey-stats.db in settings.BASE_DIR), instead of
DATABASES['default']. To keep recording in your main Django database,
specify the database explicitly:
HUEY_STATS['database'] takes a db-url or a peewee Database, or use
HUEY_STATS['filename'] to set the sqlite path. See the Django docs
section for building a peewee database from your existing DATABASES
entry.
The admin *Events* log is now rendered from the stats database through
peewee, rather than being a ModelAdmin via ORM. It is now linked from
the dashboard's *Recent events* heading.
Consumer:
- Add --shutdown-timeout option to bound graceful shutdown time.
- Add --graceful-signal option to allow making SIGTERM the graceful
shutdown signal (e.g. -g TERM).
User-facing APIs:
- Add ttl to lock_task() and put_if_empty() so locks expire on
their own. Supported by memory and redis storages, others raise
NotImplementedError. RedisHuey requires server hash-field TTL
support (redis 7.4+ or valkey 9+), RedisExpireHuey works on any
version.
- Add timeout parameter to aget_result().
Small stuff:
- Ensure one raising signal receiver does not prevent the remaining
receivers from running.
- Fix crontab ranges with a step (0-30/5) and wrap-around ranges
(22-2, day_of_week='1-7'). Raise ValueError when a field matches
no values.
- Pass failed chord members to the callback as huey.Error and
skipped (revoked, expired, cancelled) members as huey.SKIPPED
instead of a raw exception or None.
- Delete chord partial results explicitly on completion, so they no
longer linger until expiry on RedisExpireStorage.
- Write the error of a failed pipeline stage to every skipped
downstream stage, so their Result handles raise instead of
blocking.
- Accept an explicit id in TaskWrapper.s(), matching schedule().
Storage:
- Skip messages that fail to deserialize in Huey.pending() and
Huey.scheduled(), logging the error, as read_schedule() already
does.
- Add clean_name option to RedisHuey (default to True). Specify
False to stop stripping non-alphanumeric characters from the
storage namespace. The default will change in a future release.
- Reduce Redis round-trips for peek_data, pop_data and delete_data,
and make RedisExpireStorage.incr() set the TTL atomically w/ the
increment.
- Skip the exclusive lock in SqliteStorage.dequeue() when the queue
is empty, so idle consumers no longer block producers and the
scheduler.
- Batch the SqliteStorage.read_schedule() delete to avoid sqlite's
parameter limit when many tasks come due at once. Same fix in
SqlHuey.
- Order SqliteStorage.read_schedule() and SqlHuey.read_schedule()
by (timestamp, id), matching PostgresStorage.
- Add queue to the sqlite task index (task_queue_priority_id) so
queues sharing a file no longer scan each other's rows. The old
task_priority_id index is dropped when the schema is initialized.
I'll get rid of the temporary in-band drop in a few releases.
- Add peek_many() to the storage API. Revocation checks now fetch
the task and task-class keys in one round trip.
- Return str keys from result_items() on every storage backend.
Redis and File storage previously returned bytes.
Stats:
- Better handling for timeout, locked, rate-limited and retrying in
stats recorder.
- Log dropped events in the stats recorder instead of failing
silently.
- Fix stats recorder max_events pruning to count rows per queue.
With multiple queues sharing a stats db, each queue retained only
a fraction of the configured cap.
- Add inflight_hours option to stats recorder, replacing the
hardcoded 6 hour in-flight cutoff.
- Require the change_hueydashboard permission for the django admin
dashboard's revoke, restore and flush controls. Previously any
staff user who could view the dashboard could also flush the
queue.
- Add huey[stats] extra which installs ol' peewee.
Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
Signed-off-by: Khem Raj <khem.raj@oss.qualcomm.com>
Upgrade to release 2.15.1:
Highlights:
- Flat CPU usage for long-lived clients on Linux:
On Linux, the default SSL context is now configured once instead of
on every handshake. With OpenSSL older than 3.4, each handshake
added a duplicate certificate lookup path, so CPU usage per request
grew over the lifetime of a reused client. Certificate verification
is unchanged, and Windows and macOS still use truststore.
httpx2:
Fixed:
- Configure the default SSL context once on Linux, instead of on
every handshake. With OpenSSL older than 3.4, CPU usage grew over
the lifetime of a reused client (#1253).
httpcore2:
Fixed:
- Configure the default SSL context once on Linux, instead of on
every handshake. With OpenSSL older than 3.4, CPU usage grew over
the lifetime of a reused client (#1253).
Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
Signed-off-by: Khem Raj <khem.raj@oss.qualcomm.com>