Charm4py

Latest version: v1.1

Safety actively analyzes 702088 Python packages for vulnerabilities to keep your Python projects secure.

Scan your dependencies

Page 1 of 2

1.1

==================

- PyPI binary distribution

- supports MacOS (Intel and Apple Silicon architectures) and Manylinux (x86_64)
- supports both PyPy and CPython
- PyPI package here: https://pypi.org/project/charm4py/

- Add a Ray Core API implementation on Charm4py

- Ray is a framework for distributed AI and Python applications (https://docs.ray.io/)
- the Charm4py Ray API allows users to run Ray programs with Charm4py background with minimal changes

- Fixes reductions over a section, use of futures in threaded entry methods
- Reduce message latency for builtin Numpy datatypes
- Disabled local message optimization which broke Charm++ semantics in some
cases
- Use a `register` decorator for registering Chares instead of passing them
as a list to `charm.start`
- Migrate build system to pyproject.toml
- Fix build on ARM-based machines
- Update Cython support, now requires Cython 3.0.0

1.0

==================

This is a major release, containing API changes, many new features, bug fixes
and performance improvements. The highlights are:

- Many improvements that simplify how Charm4py programs are written.
There have been API changes, but most of the old API is preserved for
backward compatibility. Please consult the documentation if you
encounter any issues, and consider migrating to the new API.

- **Coroutines**: threaded entry methods are now referred to as coroutines (which is a more
common term) and the appropiate way to declare them is with the new
``coro`` decorator.

- Significant performance improvement of coroutines, now implemented using the
greenlet package.

- **Channels**: can establish channels between arbitrary pairs of chares, and use
them to send/receive data inside coroutines.

- **Sections**: it is now possible to split, slice and combine chare collections
in arbitrary ways, to form new collections called *sections*, containing some
subset or combination of elements. Sections are referenced by section proxies, and the usual operations
of broadcast and reductions are supported (uses efficient multicast trees
that only involve the PEs where the section elements are located).

- Can now create Groups that are constrained to certain PEs, for example:
``g = Group(MyChare, onPEs=[0,4,8...])``. This uses the sections implementation
underneath.

- Keyword arguments are now correctly supported when calling remote methods.

- Added ``charm.wait(awaitables)`` that waits for the given objects to become
ready (works for futures and channels).

- Added ``charm.iwait(awaitables)`` that iteratively yields objects as they
become ready (works for futures and channels).

- Huge rewrite and revision of examples to use new features (like coroutines
and channels), and added documentation and comments. New examples added.

- Same applies to the tutorial and large parts of the documentation.

- Added ARM support (tested on Raspberry Pi 3 B+).

- **Pool**: added an interface to create single tasks. Tasks themselves can spawn
any number of other tasks. Python functions decorated with ``coro`` can be
used as tasks that can wait for messages, other tasks to complete, etc.

- Added Quiescence Detection (QD) support. Please see the manual and tutorial for
more information.

- Can now use Futures and proxy methods as *callbacks*, that is: *callable* objects
that can be sent to other chares, and which those chares can call to send
values back. For example: ``someproxy[3].somemethod`` is a valid callback that can
be sent (requires Python 3+).

- The ``ret=True`` keyword argument now has the same semantics for broadcast calls
as for point-to-point calls: the future will receive the return values.
For the broadcast case, it will be a list of return values
(of all the called elements), sorted by element index.

- Added ``awaitable`` keyword argument to proxy calls, to wait for completion
without sending return values to the caller.

- Better method to update globals: ``charm.updateGlobals(dict, module_name)``
is a remote method that can be called to update global values on any PE at
any time (typically used as a broadcast call). It has the same rules and semantics
as any other proxy call, so it can be waited upon.

- Distributed exception handling: if a future is requested when invoking remote
methods (using ``awaitable=True`` or ``ret=True``) and an exception happens
in the remote method, it is propagated to the caller.

- **Interactive mode**: several QOL improvements. Note that we consider this mode to still
be in beta, and encourage feedback. Some highlights:

- Improved launch process for interactive mode. Now also works with charmrun
in ssh mode (which can be used to launch an interactive session using multiple hosts).

- Can automatically broadcast import statements to other PEs (on by default).

- Can automatically broadcast and register Chare definitions (on by default).

- Exceptions (whether local or remote) should not crash the interactive
session anymore (thanks to distributed exception handling mentioned above).

- Chares now have a method called ``migrated`` that applications can redefine
to get notified when a chare has migrated.

- Added ``Chare.setMigratable(bool)`` to indicate whether a chare that is part
of an Array can be migrated or not.

- All proxies implement ``__eq__`` and ``__hash__``, with correct results
between proxies generated locally and those obtained from a remote PE.
This allows, for example, checking proxies for equality, using them as
dictionary keys or inserting in sets.

0.12.3

=====================

* Fixed some bugs in charm.pool, one of which could cause charm.pool to hang
when tasks return None.

0.12.2

=====================

* Fixed a bug which decreased the performance of charm.pool, and could result
in high memory usage in some circumstances.

* Added API to obtain information on nodes, for example: the number of nodes on
which the application is running, or the first PE of each node.

* Expanded topology-aware tree API to allow obtaining the subtrees of a given
PE in a topology-based spanning tree.

0.12

===================

* Added experimental charm.pool library which is similar to Python's
multiprocessing Pool, but also works in a distributed setting (multiple hosts),
tasks can create other tasks all of which use the same shared pool,
and can benefit from Charm++'s support for efficient communication layers
such as MPI. See documentation for more information.

* Improved support for building and running with Charm++'s MPI communication
layer. See Install and Running sections of the documentation for more information.

* Substantially improved the performance of threaded entry methods by allowing
thread reuse.

* Blocking allreduce and barrier is now supported inside threaded entry methods:
``result = charm.allReduce(data, reducer, self)`` and ``charm.barrier(self)``.

* Can now indicate if array elements use AtSync at array creation time
by passing ``useAtSync=True`` in Array creation method.

* Minor bugfixes and improvements.

0.11

===================

* Changed the name of the project from CharmPy to *charm4py* (more information on why
we changed the name is in the forum).

* Not directly related to this release, but there is a new forum for charm4py discussions
(see contact details). Feel free to visit the forum for discussions, reports,
provide feedback, request features and to follow development.

* Support for interactive charm4py shell using multiple processes on one host has been added
as a *beta* feature. Please provide feedback and suggestions in the forum or GitHub.

* Uses the recent major release of Charm++ (6.9)

* C-extension module can be built on Windows. Windows binary wheels on PyPI come with
the compiled extension module.

* API change: method ``Chare.gather()`` has been removed to make the name available
for user-defined remote methods. Use ``self.contribute(data, Reducer.gather, ...)``
instead.

* Some methods of ``charm`` are now remotely callable, like ``charm.exit()``.
They can be used as any other remote method including as targets of reductions.
For example: ``self.contribute(None, None, charm.thisProxy[0].exit)``

* Can now use Python exit function instead of ``charm.exit()``

* Other small fixes and improvements.

Page 1 of 2

© 2025 Safety CLI Cybersecurity Inc. All Rights Reserved.