From ffe817542e7f035c8fa70eef064b9a869d018cea Mon Sep 17 00:00:00 2001
From: rosalub <rosalie.dauchez.etu@univ-lille.fr>
Date: Wed, 3 Apr 2024 14:29:08 +0200
Subject: [PATCH] Adapt FederatedServer to use the new version of FLRunConfig

---
 declearn/main/_server.py |   15 +-
 quit                     | 7089 ++++++++++++++++++++++++++++++++++++++
 2 files changed, 7097 insertions(+), 7 deletions(-)
 create mode 100644 quit

diff --git a/declearn/main/_server.py b/declearn/main/_server.py
index 494bc3f7..7d921fed 100644
--- a/declearn/main/_server.py
+++ b/declearn/main/_server.py
@@ -205,9 +205,10 @@ class FederatedServer:
             round_i = 0
             while True:
                 round_i += 1
-                await self.training_round(round_i, config.training)
-                await self.evaluation_round(round_i, config.evaluate)
-                if not self._keep_training(round_i, config.rounds, early_stop):
+                await self.training_round(round_i, config.get_next_train_config)
+                if config.get_next_valid_config is not None:
+                    await self.evaluation_round(round_i, config.get_next_valid_config)
+                if not self._keep_training(round_i, early_stop, config):
                     break
             # Interrupt training when time comes.
             self.logger.info("Stopping training.")
@@ -387,10 +388,10 @@ class FederatedServer:
         self.logger.info("Sending privacy requests to all clients.")
         assert config.privacy is not None  # else this method is not called
         params = {
-            "rounds": config.rounds,
-            "batches": config.training.batch_cfg,
-            "n_epoch": config.training.n_epoch,
-            "n_steps": config.training.n_steps,
+            "rounds": config.n_rounds,
+            "batches": config.train_cfg.batch_cfg,
+            "n_epoch": config.train_cfg.n_epoch,
+            "n_steps": config.train_cfg.n_steps,
             **dataclasses.asdict(config.privacy),
         }  # type: Dict[str, Any]
         message = messaging.PrivacyRequest(**params)
diff --git a/quit b/quit
new file mode 100644
index 00000000..f3f031cc
--- /dev/null
+++ b/quit
@@ -0,0 +1,7089 @@
+commit 39bd3b932b3926093f8786491391b2b2c48653ef (HEAD -> fedalgo)
+Author: rosalub <rosalie.dauchez.etu@univ-lille.fr>
+Date:   Mon Apr 1 13:07:27 2024 +0200
+
+    Incorporate a keep_training method in FLRunConfig and its child class, adapt it for FederatedServer
+
+commit 6f973ecfda2b80a943af9971bb5ef4138cd9369a (origin/fedalgo)
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Mar 29 16:16:13 2024 +0100
+
+    Start ammending new FLRunConfig API.
+
+commit 606833e385bee9338447f42316d8f65875d31bc9
+Author: rosalub <rosalie.dauchez.etu@univ-lille.fr>
+Date:   Thu Mar 28 16:18:35 2024 +0100
+
+    Created concrete class for the basic federated learning approach which heritates from FLRunConfig
+
+commit aeb8e7a7bfc01479a95520470d31923d1e12723f
+Author: rosalub <rosalie.dauchez.etu@univ-lille.fr>
+Date:   Wed Mar 27 16:25:35 2024 +0100
+
+    Abstraction of FLRunConfig
+
+commit 5881c22a437fb8c6f15751d058d1a7937d8d1d3b (develop)
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Mar 18 15:07:39 2024 +0100
+
+    Fix typos in release notes.
+
+commit c13246c293753c92f22de2bca30043f46d32fee4 (tag: v2.4.0)
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Mar 18 15:02:02 2024 +0100
+
+    Release DecLearn v2.4.0.
+
+commit ff404f9f6ff1d85da3b3c19199a7987d27f72178
+Merge: 18a459f ffe6a30
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Mon Mar 18 14:16:44 2024 +0100
+
+    Merge branch 'prerelease-2.4' into 'develop'
+    
+    Finalize DecLearn v2.4.0.
+    
+    See merge request magnet/declearn/declearn2!63
+
+commit ffe6a302a70c6dade9200e2c678a30c30756a6f8
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Mar 15 13:58:21 2024 +0100
+
+    Fix Torch 1.13 unit tests launch.
+
+commit aff0ff3185113a97b6603092b79ba9d30659541c
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Mar 15 11:29:16 2024 +0100
+
+    Add support for TensorFlow 2.16 / Keras 3.
+    
+    - Apply some minor backward changes (and, when required, branches) to
+      support breaking changes in Keras 3 (the default for TensorFlow 2.16
+      and onwards), while preserving support for older versions.
+    - On the side, split a test about 'Model' serialization in two tests,
+      one for config serializability, the other for instantiation from a
+      non-serialized config dict.
+    - The current code has been tested (by running all unit tests) with
+      both TensorFlow 2.11 and 2.16, in a Python 3.10 environment.
+
+commit dce82854b3304a9a51a7332fbc24dfe9a27cefd0
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Mar 13 16:21:13 2024 +0100
+
+    Deprecate 'declearn.dataset.load_from_json'.
+
+commit 113f68df6245a7146677879ae061a7a46476228f
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Mar 13 16:02:38 2024 +0100
+
+    Update website documentation and enhance that of new Aggregate ABCs.
+
+commit 8318d23e4e211aff29f36b1d1bbf62d63577a0fc
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Mar 12 16:07:19 2024 +0100
+
+    Add and deploy new utils for messages' type-checking.
+    
+    - Add new 'declearn.communication.utils' submodule.
+    - Move existing utils there, but keep re-exporting them from the
+      parent level to avoid breaking existing code.
+    - Refactor some backend code used to verify exchanged messages'
+      type as part of federated learning processes into two new utils.
+
+commit 0b9edf38d8edaad0ada4351a05e5c031c1405272
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Mar 12 12:27:31 2024 +0100
+
+    Fix legacy 'Error' sending in edge case by 'GrpcServer'.
+
+commit 08b53632a288cf48a8d8553fc10570a0fbd524b0
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Mar 1 15:19:15 2024 +0100
+
+    Update release notes for '2.4.0'.
+
+commit d0b8eb2c7ec889db136ae097b7c757c72f6f5f2d
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Mar 1 15:08:39 2024 +0100
+
+    Fix redundant model weights sharing with clients.
+    
+    - Until now, in the main FL process, clients would always receive
+      global model weights twice, due to their being shared both with
+      training and evaluation requests.
+    - This commit fixes that via the introduction of backend mechanisms
+      to keep track of which clients hold the latest model weights, and
+      sparingly attach them to requests based on this.
+    - As a side effect, `TrainRequest` and `EvaluationRequest` messages
+      now specify `weights` to be an `Optional[Vector]` field.
+
+commit 7704c46254eec0eaf5dcdf4ce1f8586cd7a893c2
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Feb 29 18:03:07 2024 +0100
+
+    Hack around PyLint not detecting 'tensorflow.keras' anymore.
+    
+    This commit introduces imports of 'tf.keras' as 'tf_keras' so that
+    false-positive pylint errors can be silenced in one place per file
+    rather than on each and every call.
+    This remains tiresome, but might in fact be useful to switch to the
+    newer TensorFlow versions in the future.
+
+commit 196cef332de90fc8e0a41145e2d0539c9f425ac3
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Feb 29 17:30:18 2024 +0100
+
+    Update TensorFlow (optional) dependency version specification.
+    
+    Set minimal version to 2.11.0 (rather than 2.5.0):
+    - 'TensorflowOptiModule' adapter is based on the "new" Optimizer API
+      introduced with TensorFlow/Keras v2.11, but the required dependency
+      version had not been updated until now.
+    
+    Set maximal version to 2.15.X:
+    - TensorFlow 2.16 (the first release candidate of which was added to
+      PyPI three days ago) is switching to Keras 3 by default, which is
+      bound to introduce breaking changes (current unit tests fail with
+      'tensorflow==2.16.0rc0').
+    - For now, the maximal version is thus set to 2.15.X. This may change
+      in the near future when some time and effort is put in understanding
+      changes and/or configuring dependencies to keep using Keras 2 rather
+      than Keras 3 in TensorFlow's backend.
+
+commit 921d17585deee665a82dbe853db336cace3bc2f9
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Feb 19 15:14:42 2024 +0100
+
+    Fix exceptions reporting in Heart UCI example.
+
+commit 7a8563a585af26dc2d4df3e9c456b7aa9887a4dc
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Feb 19 15:12:31 2024 +0100
+
+    Improve 'run_as_processes' backend to avoid specific kwargs loss.
+    
+    - The previous implementation would result in dropping some kwargs
+      (namely, 'name' and 'queue') when running a function as process.
+    - The new backend implementation prevents this using a wrapped
+      instead of a partial function (still relying on 'functools').
+
+commit 7715ab915b04bfb468f2a49348cab255522ccfbf
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Feb 19 11:49:39 2024 +0100
+
+    Write up release notes for 'v2.4.0'.
+
+commit e7fae4b5f9c39d7cdd4fc18dcb06e2ee80918e55
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Feb 19 10:54:56 2024 +0100
+
+    Update online documentation to reflect API changes.
+    
+    - Document changes in the registration and initialization processes.
+    - Document changes of the Optimizer AuxVar API.
+    - Document requirement for peers using the same DecLearn version.
+
+commit 542f5ad8dfaf990d244fc66f7c2a81e3d876fc7f
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Feb 19 10:14:10 2024 +0100
+
+    Fix docs' automated rendering.
+
+commit 6300a10e6c439874caf6373fd0f79924059cb66b
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Feb 16 17:54:02 2024 +0100
+
+    Remove deprecated features as planned since v2.2.
+
+commit e90280981de288587ee6c19506bc819d623e3e83
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Feb 16 17:47:39 2024 +0100
+
+    Bump version to '2.4.0'.
+
+commit fc20c9ddf9765ef7f652fff654be4f6e37cd4b0c
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Feb 16 17:45:39 2024 +0100
+
+    Update 'black' version to '2.4.*'.
+
+commit 0d78e2c91fab00eabca798fbfa84e977d336ed76
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Feb 16 17:37:03 2024 +0100
+
+    Quit using a scikit-learn deprecated attribute.
+
+commit 18a459fe653dfc2da507a09f6d5eeea1b576760a
+Merge: 7c65a28 f770f37
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Fri Feb 16 17:52:31 2024 +0100
+
+    Merge branch 'revise-messaging' into 'develop'
+    
+    Revise network communication backend and message-parsing logic.
+    
+    See merge request magnet/declearn/declearn2!62
+
+commit f770f37037ba593dd4ccf121c3ea651e9eee6088
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Feb 16 15:25:19 2024 +0100
+
+    Add 'heartbeat' parameter to 'NetworkServer' and speed up tests.
+    
+    Set up a low heartbeat for localhost-running tests, resulting in
+    drastic runtime gains (notably due to time gains during the join
+    and initialization phase for functional tests).
+
+commit 07ed21db1f83cbf31d3b39ce4f291c8076696cc0
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Feb 16 15:01:39 2024 +0100
+
+    Add unit tests for 'declearn.communication.api.backend' code.
+
+commit 395436597f5a50b2e65c0d4e1aa5d45a00b501fc
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Feb 16 15:01:01 2024 +0100
+
+    Turn version-based rejection into a (version-based) constant flag.
+
+commit 7937bee773c9765a559568e0f661a0e46de5510a
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Feb 16 14:58:35 2024 +0100
+
+    Enable specifying message-related timeouts as floats.
+
+commit bbe43fba4e8c61a59057e8d518143b7f56453b9c
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Feb 15 17:52:46 2024 +0100
+
+    Update unit tests for 'communication' module.
+
+commit 1f554f141566574d9bacc8c03ed98a59a329f84c
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Feb 15 15:29:53 2024 +0100
+
+    Fix detection and rejection of legacy clients' messages.
+
+commit 3b8703f2cb18850d9ebcf9be37e38afe8fa0c845
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Feb 15 12:09:06 2024 +0100
+
+    Adjust 'FederatedClient' and 'FederatedServer' to new messaging API.
+    
+    - Update the way received messages are type-checked and have them
+      be deserialized after type-checking only.
+    - Move up metadata collection and use to a new optional and sparse
+      step during the initialization phase.
+    - Implement new message subtypes for metadata query and reply, and
+      for signalling that initializations steps went well.
+
+commit 125e2708881f527dd6a3a2301687f29f5aa7421f
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Feb 15 12:03:58 2024 +0100
+
+    Integrate new Message API with communication endpoints.
+    
+    - Revert some changes from a previous commit, that may be envisioned
+      again when revising APIs in-depth for DecLearn 3.0.
+    - Stitch back the 'communication' and 'messaging' submodules together,
+      having 'NetworkClient' and 'NetworkServer' send 'Message' instances
+      (that are merely serialized to string prior to being exchanged) and
+      parse received strings into 'SerializedMessage' instances.
+    - This change is a compromise between keeping things as before (which
+      would not benefit from the introduced delayed-parsing capability of
+      'SerializedMessage'), and changing them so deeply that current code
+      making use of communication endpoint would require heavy revisions.
+
+commit 4215381049c3d61de518a5c8f77099ec7839b2be
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Feb 13 17:23:55 2024 +0100
+
+    Revise 'Message' API, make it extendable and move it around.
+    
+    * Introduce new 'declearn.messaging' submodule, that is meant to
+      replace the now-deprecated 'declearn.communication.messaging'.
+    * Make 'Message' extendable via subclassing and type-registration
+      (which is automatically performed by default).
+    * Introduce 'SerializedMessage' as a wrapper for received messages,
+      that parses the exact message subtype (enabling logic tests and
+      message filtering) but delays actual content deserialization and
+      Message object recovery (enabling to prevent undue resources use
+      for unwanted messages that end up being discarded).
+    * Deprecate some old 'Message' classes, that are still exported by
+      the deprecated submodule but not by the new one.
+
+commit 7b6233170727d89d10ff2a3b426b7085cdc6624a
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Feb 13 15:15:20 2024 +0100
+
+    Revise network communication backend and message-parsing logic.
+    
+    - Introduce a new 'declearn.communication.api.backend' submodule:
+      - Introduce a new 'ActionMessage' minimal backend API, that defines
+        hard-coded, lightweight and easily-parsed data structures designed
+        to convey information and content across network communications
+        agnostic to the content's nature.
+      - Move 'declearn.communication.messaging.flags' submodule to
+        'declearn.communication.api.backend.flags'.
+      - Move 'MessagesHandler' semi-private class to the 'backend'
+        submodule, where it is now properly exposed.
+    
+    - Revise 'MessagesHandler':
+      - Have it use the new 'ActionMessage's to wrap up messages, and
+        delay their content's parsing to other times and parts of the
+        code.
+      - Quit sending information together with registration requests.
+        In the future, we may want to introduce some callback system to
+        validate or complete a registration request's processing.
+      - Turn 'heartbeat' into an instantiation parameter.
+    
+    - Revise 'NetworkClient' and 'NetworkServer':
+      - Quit passing of 'data_info' with registration requests.
+      - Have message-sending and message-receiving methods expect str
+        inputs and return str outputs: the actual parsing into objects
+        is therefore delayed and left to be defined elsewhere.
+      - Rename 'NetworkClient.check_message' into 'recv_message' (keep
+        the former as an alias, with a DeprecationWarning).
+      - Improve the use of (optional) timeouts when sending or expecting
+        messages and overall exceptions handling:
+        - 'NetworkClient.recv_message' may either raise a TimeoutError
+          (in case of timeout) or RuntimeError (in case of rejection).
+        - 'NeworkServer.send_messages' and 'broadcast_message' quietly
+          stops waiting for clients to collect messages after the (opt.)
+          timeout delay has passed. Messages may still be collected.
+        - 'NetworkServer.wait_for_messages' no longer accepts a timeout.
+        - 'NetworkServer.wait_for_messages_with_timeout' implements the
+          possibility to setup a timeout. It returns both received client
+          replies and a list of clients that failed to answer.
+
+commit 7c65a28361af1e2c31fcf1d2d32fac471c6207da
+Merge: d240079 03efb10
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Fri Feb 9 13:04:01 2024 +0000
+
+    Merge branch 'revise-aggregator-api' into 'develop'
+    
+    Introduce and deploy `Aggregate` API
+    
+    See merge request magnet/declearn/declearn2!61
+
+commit 03efb109e6035c786d682a4d7fca6496ac8f1514
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Feb 9 12:06:23 2024 +0100
+
+    Add 'declearn.version' namespace to avoid circular imports of '__version__'.
+
+commit 47cc28436188e1f62cd6c5279c13636b68783d8f
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Jan 25 15:14:30 2024 +0100
+
+    Add unit tests for all 'Aggregate.prepare_for_secagg' methods.
+
+commit 71d1e62407fd4544e501dc825f61eedf8ebf7d12
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Jan 25 11:00:02 2024 +0100
+
+    Expand 'Aggregate' API to specify how to use SecAgg on top of it.
+
+commit fd01dfd784c69f41e177a29a685156311563ddbd
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Jan 25 10:53:06 2024 +0100
+
+    Make 'VectorSpec' JSON-serializable.
+
+commit b12c8d8a1cfe06ebb73a5031bf216978c669ddc0
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Oct 19 17:50:44 2023 +0200
+
+    Expand 'Vector' API to enable (un)flattening to/from list of floats.
+    
+    - Add `VectorSpec` dataclass to store metadata about a Vector.
+    - Add `Vector.get_vector_specs` to access the metadata of an instance.
+    - Add `Vector.flatten` and `Vector.unflatten` to convert to and from
+      a list of floats and a VectorSpec instance.
+    - Add `Vector.build_from_specs` static method as a generic entrypoint
+      to unflatten any Vector instance from its list of float values and
+      VectorSpec instance, provided it was properly type-registered.
+    - Implement these new methods for each and every `Vector` subclass
+      currently shipped with declearn.
+    - Add unit tests for these features as part of the standard test suite
+      applied to each and every type-registered `Vector` subclass.
+    - All of these new features are designed to enable SecAgg of Vector-
+      wrapped values, which requires operating on (very) big integers
+      that would result in overflows in most backend data frameworks,
+      starting with numpy.
+
+commit d40233861a1eb3ece19ca32e0c9309caedc9ab65
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Jan 23 16:10:26 2024 +0100
+
+    Update 'BinaryRocAUC' to better handle boundedness of thresholds.
+
+commit 389d58ba6b088f660b4d6d998c6adc4763d618ec
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Jan 22 13:22:55 2024 +0100
+
+    Update unit tests for 'Metrics' and revise/fix associated code.
+
+commit 9141b0403e2d49e3bccd2d0e8d5fe96966ff68d6
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Jan 19 16:08:07 2024 +0100
+
+    Revise 'Metric' API introducing 'MetricState' aggregates.
+
+commit bc74f367609a680232b366caccc15286087277ac
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Jan 19 17:37:01 2024 +0100
+
+    Update 'declearn.optimizer' unit tests.
+
+commit 3ee402cb960a9133f63255820718cf1947dc2a97
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Jan 23 12:06:30 2024 +0100
+
+    Implement declearn version verification when registering clients.
+    
+    * Clients now send their local declearn version string as part of
+      their registration request to the server.
+    * Server now rejects requests that have unmatching 'major.minor'
+      version string.
+    * This may be revised in the future to implement an asymmetric
+      requirement where clients may have more recent minor versions
+      than the server. For now, this will however lessen the burden
+      of having to deal with complicated retro-compatibility issues.
+
+commit 4262f78840710d87fe5b39d85461a363f6d2fd38
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Jan 19 12:11:07 2024 +0100
+
+    Abstract new 'Aggregate' ABC from 'AuxVar' and 'ModelUpdates'
+
+commit 7c1baf4f2c36b94ebab2ce7342d2b935b349c7d4
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Jan 19 11:29:53 2024 +0100
+
+    Preserve 'AuxVar' and 'ModelUpdates' types across network messaging.
+    
+    * Automate the extension of JSON support to 'AuxVar' and 'ModelUpdates'
+      (sub)classes.
+    * Revise 'TrainReply' and 'TrainRequest' to pass objects directly rather
+      than their dict representation.
+    * Overload these messages' 'to_kwargs' methods to avoid recursive dict
+      conversion of dataclasses, hence ensuring that types are preserved
+      and rebuilt upon messages' deserialization.
+
+commit 1c977320d574945648f2fe12fd8a60d33907c50c
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Jan 19 10:41:48 2024 +0100
+
+    Refactor 'Message.to_string', adding 'Message.to_kwargs'.
+    
+    - Refactor 'Message.to_string' into a pair of methods:
+      - 'to_kwargs' to produce a JSON-serializable dict of kwargs
+      - 'to_string' that calls the former, dumps to JSON and adds
+        the message's typekey.
+    - Note: in the future we may change things to have the typekey
+      parsable without deserializing the rest of the message, and
+      then add some intermediate structure where deserialization
+      is yet to occur, so that message validity can be checked prior
+      to deserialization of its content.
+
+commit 80865e116dbe297740b9f5f08cb9fdf58c04206b
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Jan 18 10:49:53 2024 +0100
+
+    Deploy new 'AuxVar' to the federated learning process.
+    
+    * Have 'FederatedServer' and 'FederatedClient' (via 'TrainingManager')
+      convert emitted auxiliary variables to dict representations.
+    * Also have them reconstruct 'AuxVar' structures upon reception,
+      using the newly-introduced 'Optimizer.unpack_aux_var' method.
+    * Rewrite the aggregation of clients' auxiliary variables, taking
+      advantage of the new 'AuxVar' structure, and pass the resulting
+      one-object-per-module to the server's 'Optimizer'.
+    
+    Notes:
+    * The all 'unpack_aux_var' may be dropped in favor of preserving
+      'AuxVar' types across serialization (and thus across network),
+      using the usual type-registration and JSON-extending systems.
+
+commit bd97e31427f32949571b65387111af856f818362
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Jan 17 16:55:03 2024 +0100
+
+    Revise OptiModule Auxiliary Variables, and Scaffold implementation.
+    
+    - Replace dictionaries with dataclass structures that may implement
+      aggregation rules (with a default of sum-aggregation).
+    - Drop support for client-wise values emission from the server, and
+      move aggregation outside of the 'Optimizer' class.
+    - Rewrite Scaffold to make it more efficient, and SecAgg-compatible
+      (with clients sending Vector information that are to be summed).
+    
+    Notes:
+    - Actual aggregation of new-type auxiliary variables is yet to be
+      implemented. The same design questions arise as with 'Aggregator',
+      and the final answers should be the same for tidyness purposes.
+    - Tests are yet to be revised and run for debugging purposes.
+    - 'AuxVar' code is largely redundant with 'ModelUpdates' and should
+      be abstracted into some common ancestor for maintainability.
+    - At first, some retro-compatibility was considered: newer Scaffold
+      clients would be able to communicate with older servers. However,
+      the opposite seems not to be (easily) achievable. In the end, this
+      was dropped, as it would cause maintenance costs and hurt code
+      readability for no practical benefit given the current user-base.
+
+commit cc8a19ef921a1eeaed083685bb0ec667a96d9c77
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Jan 17 11:09:25 2024 +0100
+
+    Update unit tests for 'Aggregator' to cover new API methods.
+
+commit 3428ab41b2a0b840185383431233b265117a8e5c
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Jan 17 10:31:45 2024 +0100
+
+    Deploy new 'Aggregator' API to the main federated learning process.
+    
+    * Add 'Aggregator' to objects shared with clients in 'InitRequest'.
+    * Add 'Aggregator' to the 'TrainingManager' and make use of it to
+      prepare and package shared model updates.
+    * Use 'Aggregator.updates_cls' to recover 'ModelUpdates' objects
+      from client-emitted dict representations, sum-aggregate them
+      and finalize them using 'Aggregator.finalize_updates' on the
+      server side.
+    * Fix/update 'TrainingManager' unit tests based on changes.
+    
+    Notes:
+    * 'TrainingManager' is due for a revision, that will probably
+      result in splitting the training loop away from results'
+      packaging for sharing.
+    * 'ModelUpdates' may be updated with type-registration tools,
+      so that its type is recovered upon deserialization rather
+      than through an explicit call to 'Aggregator.updates_cls'.
+
+commit 137f02308634021a62cbded3f4b95b7211397756
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Jan 16 16:28:25 2024 +0100
+
+    Revise 'Aggregator' API, replacing 'aggregate' with new methods.
+    
+    * Revise 'Aggregator' API entirely:
+      - Define 'ModelUpdates', a dataclass holding (partial) aggregates
+        for their sharing and aggregation across peers.
+      - Add 'Aggregator.prepare_for_sharing' to the API, that is bound
+        to prepare and package local updates for their sum-aggregation.
+      - Add 'Aggregator.finalize_aggregates' to the API, that is bound
+        to compute a 'Vector' of global model updates from a single
+        'ModelUpdates' instance (holding pre-aggregated values).
+      - Deprecate 'Aggregator.aggregate' API method, but make it work
+        in legacy mode using new methods as core backend.
+    * Rewrite 'AveragingAggregator' and 'GradientsMaskAveraging'.
+      - 'AveragingAggregator' no longer supports using client weights,
+        save when using the deprecated (legacy) 'aggregate' method.
+      - 'GradientsMaskAveraging' no longer inherits 'AveragingAggregator',
+        but uses it by composition instead, notably to avoid type-hinting
+        issues.
+      - 'GradientsMaskAveraging' is designed to compute updates' sign with
+        parsimony, to avoid information duplication across network in the
+        non-secagg federated setting.
+    
+    * Notes for the future:
+      - 'ModelUpdates' could be made to inherit from a much more generic ABC,
+        that would enable writing aggregation rules for many data containers.
+      - It is yet unsure how/whether the 'aggregates_cls' class attribute is
+        going to be used; it may be removed during development.
+      - SecAgg is yet to be plugged into this code. The current rationale is
+        to write dedicated code at the level of 'ModelUpdates' to encrypt or
+        decrypt content - and it might require some dedicated wrapper type.
+
+commit d24007973b7df864f4b2bf3d3a1ea6fe9cd237fa
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Jan 30 15:59:51 2024 +0100
+
+    Marginally improve 'run_tests.sh' commandline outputs.
+
+commit 7649b725519742d344b5c60ceabe06e07b068f91
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Jan 29 16:14:45 2024 +0100
+
+    Sort internal imports under 'declearn.utils'.
+
+commit c450f6af5cf059c2376b68169d07b76766121e1d
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Jan 26 11:04:22 2024 +0100
+
+    Add a shared '.gitignore' file.
+
+commit 428cf933ab9310c02820faee3523095b3c42f1fe
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Jan 11 16:59:58 2024 +0100
+
+    Fix 'BinaryAccuracyPrecisionRecall' computations without true positives.
+
+commit 6497f761e111959ed3aa4ec86c089d8723d6fd8e
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Dec 14 11:56:11 2023 +0100
+
+    Fix some 'pragma: no cover' comments for typos.
+
+commit daef0c0a4b2ff10aed2ae3e543d8eee67a485704
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Dec 14 11:28:04 2023 +0100
+
+    Remove pylint-false-positive-silencing comments regarding torch.
+    
+    False-positives on many `torch.<something>` symbols appear to have
+    been fixed. Whether this comes from a Pylint and/or Torch update
+    is unclear, but as developers are expected to work with up-to-date
+    installations (and so does the CI), we can safely remove silencing
+    comments.
+
+commit 73a8f80afcc9beeef39ba12c3303cc6a09bd8377
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Dec 14 11:26:39 2023 +0100
+
+    Fix 'TorchVector.(min|max)imum' failing on GPU with float input.
+
+commit 33dca7cd0b00ed8befd108f24169274938a0b64c
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Dec 4 13:47:13 2023 +0100
+
+    Change pandas version specifier to re-enable v2.x.
+
+commit 5c1fe0fd056a96fe2d3b63ba21a6e7b7178c77e7
+Merge: 6226ba3 1931b16
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Mon Dec 4 12:44:18 2023 +0000
+
+    Merge branch 'fix-ci-gpu' into 'develop'
+    
+    Enable GPU use on our CI runner and garden around 'pyproject.toml'.
+    
+    See merge request magnet/declearn/declearn2!60
+
+commit 1931b166a705255d4fd21748340fc510d32f1890
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Nov 23 15:06:35 2023 +0100
+
+    Add support for recent versions of websockets.
+    
+    - The 'websockets' dependency has been known to introduce breaking
+      changes with its major version, hence our sticking with v10 since
+      DecLearn was first implemented.
+    - However, the two latest major version releases are documented and
+      have been tested not to break compatibility with our code; hence
+      we now explicitly support them as compatible dependencies.
+
+commit df0829b3bcd440135309e66171ec5425de141ce8
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Nov 23 15:00:50 2023 +0100
+
+    Enable using the more recent versions of dm-haiku.
+    
+    - Haiku is still at the early stages of its developments, hence
+      we are being somewhat conservative in its version specifier.
+    - However, the latest versions prove not to break compatibility
+      with Python >=3.9, hence we now explicitly support them.
+    - For Python 3.8, the latest is no longer compatible, due to the
+      use of some newer type-hint syntax. We hence use version-based
+      specifiers.
+
+commit 07ea0a24f371f22aeac8abbcae870eb90b0bc9ea
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Nov 23 15:00:16 2023 +0100
+
+    Improve dependencies version specifiers, using '~=' in most places.
+
+commit 549b77667c5d1c0169c32000f460a138d45012a7
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Nov 22 10:21:19 2023 +0100
+
+    Update 'tox.ini' to improve GPU usage.
+    
+    - Add environment variables to prevent over-allocation of GPU VRAM
+      by TensorFlow and/or Jax.
+    - Add 'py{3x}-ci' test environments that are tweaked specifically
+      for our CI runner, adding instructions that offer as much support
+      for GPU as possible given our runner host's configuration.
+    - At the moment, an update of the host to the latest CUDA version
+      enables native support for Torch, and TensorFlow with Python>=3.9
+      (but not 3.8), plus Jax with some extra installation command.
+
+commit 2743d0d24409e112e4cc481704c1ceade66a2847
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Nov 23 14:43:02 2023 +0100
+
+    Stop forcing '--full-trace' mode of pytest.
+
+commit d50bc747e403ee62e189cd5f52531b8059f19d3e
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Nov 23 14:15:14 2023 +0100
+
+    Fix some minor linter warnings on unit tests' code.
+
+commit 4a21f58712399e2063c00341a8d5267f31a1faf6
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Nov 23 11:49:32 2023 +0100
+
+    Fix the way GPU-use is disabled for some unit tests.
+
+commit e84c69c3fea72f8eefd3bdafcb380ecdadf89a1e
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Nov 23 11:42:54 2023 +0100
+
+    Fix tests' automated type-checking.
+
+commit 48711aa9eb119fa64b051832ae86aeb6518ed0d5
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Nov 23 11:42:24 2023 +0100
+
+    Complete docs and type-hints of 'test_multiprocessing'.
+
+commit 7adbbebfd6881ba7b29299b2c029acad9da8ce86
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Nov 23 10:59:12 2023 +0100
+
+    Fix 'JaxNumpyVector' equality operator on distinct-device inputs.
+
+commit afbae61520ae2e2e0a1e8d0ea8ba697338cb095c
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Nov 22 12:33:29 2023 +0100
+
+    Ensure GPU is unused in toy-regression functional tests.
+
+commit eabba124d56a1f78b6eb605b8c5cd9d1059d9f3c
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Nov 22 11:39:50 2023 +0100
+
+    Fix TensorFlow Adam optimizer unit test.
+
+commit 6226ba34f82422754acc57423b8bf37ea89952dc
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Sep 7 11:42:52 2023 +0200
+
+    Add a guide about the Optimizer API to the docs.
+
+commit ef7f4bcbbe955d179d7c89093c374f99054e8de9
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Sep 7 10:52:24 2023 +0200
+
+    Improve website code blocks' rendering.
+
+commit 6d935012c5302188623b34d91f0f0a965032fa11
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Nov 29 14:06:12 2023 +0100
+
+    Improve a docstring of ScaffoldClientModule.
+
+commit f2c14debfe028624e5fecb4c574602b1e0816a0e
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Nov 22 10:20:36 2023 +0100
+
+    Fix device-placement of jax-numpy stub data by 'GradientsTestCase'.
+
+commit c148e388dd99d58499b11386d750e23a1158204a
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Nov 22 10:18:12 2023 +0100
+
+    Improve torch dependencies management in the tests-running script.
+
+commit d99c74908a86ecc04f4a3efc1857f7a530e56c9b
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Nov 22 10:16:10 2023 +0100
+
+    Update 'opacus' dependency required version to '~=1.4'.
+    
+    Former versions of opacus require functorch, which is eager to
+    cause some conflicts with recent torch versions.
+
+commit 83ada7a5b1f8e92e46b00bedfb5f7d31db3453e1
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Nov 22 10:08:24 2023 +0100
+
+    Correct syntax and comment 'jax.config' calls in tests.
+
+commit f48cec58de25ae091d481fb82a9702327c0e3586
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Nov 22 10:05:42 2023 +0100
+
+    Minor mypy-based type-check correction.
+
+commit 583e2fc785520c202b25a53c65aaa02e5d2b53ad
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Oct 30 16:16:11 2023 +0100
+
+    Fix coherence of torch dependencies specification.
+
+commit 6c36112f4a8fda32285d623f27251ce6583e7ec1
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Oct 10 16:30:35 2023 +0200
+
+    Upgrade Pylint requirement to version 3.
+
+commit cf016b5f28f761536dc87ce3cc9bf88f662caa16
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Oct 10 16:02:17 2023 +0200
+
+    Improve 'mnist_quickrun' example documentation and add torch variant.
+
+commit 7166e0a6194f41c9ed1cfa27d78b3c47aef82021
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Oct 10 16:01:24 2023 +0200
+
+    Revise 'declearn-quickrun' backend to use asyncio.
+
+commit 9ca2167727ae1a44d55fd867460ffccbb7df483d
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Oct 5 11:48:50 2023 +0200
+
+    Add release notes for v2.3.2.
+
+commit cfbf09d9a0653d1731a5035517471bfb13373a23
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Oct 5 11:24:10 2023 +0200
+
+    Update 'torch' extra dependency specifiers.
+    
+    - Drop support for Torch 1.10-1.12, which complexify rules for functorch.
+    - Make "torch", "torch1" and "torch2" specifiers deal merely with Torch,
+      leaving Opacus to the "dp" specifier, as should be.
+    - Have functorch be installed together with torch, removing some burden
+      from our specifier, and enabling support for the new Torch 2.1.
+
+commit edd2d777ff8e68f74afdab0cdc7ab480fb9ea258
+Merge: ad09f31 c379c5f
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Tue Sep 26 13:53:04 2023 +0000
+
+    Merge branch 'display-progress-bars' into 'develop'
+    
+    Add 'verbose' argument to 'FederatedClient' and 'TrainingManager'
+    
+    See merge request magnet/declearn/declearn2!59
+
+commit ad09f3116a3accb2258d00f62287c17fffce705b
+Merge: a7e1b27 4067160
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Tue Sep 26 13:36:08 2023 +0000
+
+    Merge branch 'record-training-losses' into 'develop'
+    
+    Enable recording training loss values
+    
+    See merge request magnet/declearn/declearn2!58
+
+commit 40671604c3f219f622f513fcb4edd776391443b8
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Sep 21 17:33:27 2023 +0200
+
+    Add (optional) training losses export to 'FederatedClient'.
+
+commit 753b43f693b583bc97f63547b1d824a18052c66a
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Sep 21 17:32:54 2023 +0200
+
+    Minor backend changes to 'Checkpointer'.
+
+commit 23726d573eeb503f1881f0eafccea627684ccd4a
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Sep 21 16:49:33 2023 +0200
+
+    Add 'TrainingManager.(train|evaluate)_under_constraints' to the API.
+    
+    - Until now, the public methods for training and evaluation using
+      the `declearn.main.utils.TrainingManager` class (and its DP-SGD
+      counterpart) required message-wrapped inputs and emitted similar
+      outputs.
+    - With this commit, the previously-private `train_under_constraints`
+      and `evaluate_under_constraints` routines are made public and thus
+      part of the declearn API, with some minor refactoring to make them
+      more user-friendly.
+    - The rationale of this change is to enable using `TrainingManager`
+      outside of our `FederatedClient`/`FederatedServer` orchestration,
+      notably when simulating FL training or testing client-side code.
+      It may also be helpful to end-users that would like to build on
+      declearn but implement their own orchestration tools or algorithm
+      loops.
+    - In the future (declearn >=3.0), we may go one step further and
+      take all the messaging-related instructions out of the current
+      class. The class may also be moved to a different namespace, e.g.
+      a new 'declearn.train' module; but this is entirely out of scope
+      for now.
+
+commit c379c5fc187d2eaa5f3347e71a6a13dab01b77bb
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Sep 21 12:01:11 2023 +0200
+
+    Add 'verbose' argument to 'FederatedClient'.
+
+commit 03151d4938f3cdad974e2f00cd3a335b1f4f03d4
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Sep 21 11:59:55 2023 +0200
+
+    Add optional progress bars to 'TrainingManager'.
+
+commit 9a3cd4c78ec9004a254ee5c0de4b82f02936f745
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Sep 21 11:51:50 2023 +0200
+
+    Add unit tests for 'run_as_processes'.
+
+commit 7ff01bc20465d534665d99749e9f983196141820
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Sep 21 11:51:35 2023 +0200
+
+    Modularize 'run_as_processes' input specs.
+
+commit e820470ce966f9f2c80d8505ccde297c07603a0a
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Sep 20 14:46:51 2023 +0200
+
+    Implement training losses' recording in 'Model'.
+
+commit a7e1b273843919ed50636286e40bb70079ee7e18
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Sep 6 13:50:28 2023 +0200
+
+    Update website index of release notes.
+
+commit 34ee4bfbd757f297086df6ece3e1bcfdc30e31d8 (tag: v2.3.1)
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Sep 6 11:26:29 2023 +0200
+
+    Update 'tox.ini' as openssl is no longer called directly.
+
+commit 905dcc022d1eb442254766679e45497121ea1442
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Sep 6 11:06:33 2023 +0200
+
+    Add release notes for v2.3.1 and v2.2.2.
+
+commit 911c67a9b89c05924800eb49566867d13b16246f
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Sep 6 11:05:47 2023 +0200
+
+    Bump version to '2.3.1'.
+
+commit 4de359e9734cc4cc372a2351d8e0ff2d29a0fa3d
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Sep 6 10:49:35 2023 +0200
+
+    Drop 'functorch.compile' use.
+    
+    - The use of 'functorch.compile' over a function that takes variable-size
+      batch inputs proves impossible, as the tracing on first call creates a
+      computation graph with fixed dimensions.
+    - As a result, the tentative compilation of per-sample clipped gradients
+      computation prevents the proper use of DP-SGD with the functorch backend.
+    - An alternative attempt was to compile the sample-wise function and vmap
+      it afterwards, but this is currently unsupported (and unlikely to be as
+      part of functorch, as development efforts have moved to 'torch.func').
+    - This commit therefore drops the use of 'functorch.compile'.
+
+commit c65d0b4ca18039ec873f315a08d74afa7371acb6
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Sep 1 11:57:00 2023 +0200
+
+    Improve release notes formatting.
+
+commit 783869c2e96794124e97d1d485b8488ac94cd024
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Sep 1 11:26:18 2023 +0200
+
+    Fix self-signed CA generation.
+
+commit eed7b8868f69694e615f3e15dc18e94378e9b3f7
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Aug 31 17:39:17 2023 +0200
+
+    Add a 'duration' parameter to 'generate_ssl_certificates'.
+
+commit 8f8199db154bac9939772ce07fc345ec23a4e119
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Aug 9 16:34:05 2023 +0200
+
+    Rewrite 'generate_ssl_certificates' backend using 'cryptography'.
+
+commit 7cb704dc89c07ad726223d685a3ad763bb3299fc
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Aug 31 15:37:59 2023 +0200
+
+    Patch website docs.
+
+commit cba2534d450e0e29ad6ea97b426a63b0298334f4
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Aug 31 15:30:51 2023 +0200
+
+    Fix some internal documentation links.
+
+commit ad56d1e175e8e0a17a20ebdfdf66b9cf8f5b3e95
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Aug 31 15:30:27 2023 +0200
+
+    Fix 'L2GlobalClipping' not being properly exported.
+
+commit 2a85461eade1bf7a87e6e68d998ad86b580c0a05
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Aug 31 15:29:35 2023 +0200
+
+    Add release notes to the website docs.
+
+commit 8a0c4c8542612a0b44649a86b3882ecffeb79cb1
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Aug 31 15:29:08 2023 +0200
+
+    Document GitLab/GitHub repositories use.
+
+commit 03e7b1f8fbef914177bdea505b4a13a17ba662e7 (tag: v2.3.0)
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Aug 31 09:28:50 2023 +0200
+
+    Bump version to 2.3.0 and update authors info.
+
+commit ad4814320883006f09615529eeb7a0f94f811c6b
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Aug 31 09:29:45 2023 +0200
+
+    Add a missing file license header.
+
+commit 094ab9eb2e7205b141f168e79c006eb2b4eb6a14
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Aug 31 09:26:46 2023 +0200
+
+    Correct the docs of 'EvaluateConfig'.
+
+commit 899be96ea22f270c891b18d7bdcd8453122ece7d
+Merge: 3d39a2d ec75ca3
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Wed Aug 30 14:24:38 2023 +0000
+
+    Merge branch 'gardening' into 'develop'
+    
+    Improve tests coverage and fix test-digged bugs
+    
+    See merge request magnet/declearn/declearn2!57
+
+commit ec75ca3239617a4f8993495ca64cd87cbacbbd53
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Aug 30 16:10:52 2023 +0200
+
+    Rename same-name test files.
+
+commit 878057dae292e146e998eb927b2709a198c56089
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Aug 30 15:46:01 2023 +0200
+
+    Update unit tests to use optimizer plug-in listing utils.
+
+commit b5121d0fc9b641a85cac63714ded88d86a1ae8cb
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Aug 30 15:43:25 2023 +0200
+
+    Add unit tests for 'aggregate_clients_data_info'.
+
+commit 6c9b983d49b6b5ea76a4cf53b6ce6df7671765fd
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Aug 30 15:02:13 2023 +0200
+
+    Fix EarlyStopping for exact repeated inputs.
+
+commit 480a5995f21651c7e4b1f7bc5cd00696c7160e82
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Aug 30 15:01:11 2023 +0200
+
+    Add unit tests for 'EarlyStopping'.
+
+commit 730db92c34a57d19fe9c1fa3ba73142c120a45fc
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Jun 8 11:35:44 2023 +0200
+
+    Add tests for 'declearn.quickrun.parse_data_folder'.
+
+commit 89c807bb916107f6ee0f113edf698f74b52c3cec
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Jun 8 10:53:54 2023 +0200
+
+    Add unit tests for some quickrun backend utils.
+
+commit 474f544771669b045660e3ef12192905a789dd65
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Aug 30 12:21:50 2023 +0200
+
+    Expand 'InMemoryDataset' unit tests.
+
+commit d8d078ee8b8076ed4e175bebf9485681894eeedf
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Aug 30 12:21:46 2023 +0200
+
+    Adjust 'pragma: no cover' for 'InMemoryDataset'.
+
+commit 0c13373b9167d62bddd8672a3cc837da98b884b8
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Aug 30 12:20:55 2023 +0200
+
+    Deprecate 'InMemoryDataset' JSON-dump (private) type-key use.
+
+commit 87eada196f528d93620b2b0dcd8aebf4e611e752
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Aug 30 12:20:24 2023 +0200
+
+    Fix 'InMemoryDataset.data_type'.
+
+commit 4d0226f3636f536a089e1ae6c2a50d19fc51bffa
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Aug 30 12:19:37 2023 +0200
+
+    Fix 'InMemoryDataset' single-column target loading from csv.
+
+commit beae850833f658adeb2269d7e0615942e624e3a9
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Aug 30 10:29:51 2023 +0200
+
+    Add unit tests for high-level data info utils.
+
+commit 2a9a53134e91ead0dad7e097598b59c275437f2f
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Aug 25 16:23:42 2023 +0200
+
+    Rewrite toy regression integration tests.
+
+commit 811699cac6565e912c6abbb12935fd70c80fd082
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Aug 25 10:27:03 2023 +0200
+
+    Fix expanded-dim inputs handling in MAE, MSE and R2 metrics.
+    
+    Until now, when provided with y_true:<shape>, y_pred:(<shape>, 1)
+    inputs, the MAE, MSE and R2 metrics would be entirely wrong, due
+    to the way numpy casts operations between such inputs. This patch
+    adds some shape-verification and squeezing operations that fix the
+    computations. Unit tests were added to cover this case.
+
+commit cfb294ea8fd59de112fec0e7688d5120baa453af
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Aug 24 14:21:44 2023 +0200
+
+    Update Jax / Haiku dependency specifications.
+
+commit d10a42e2de75a854882f941aa5d4d840e098eb83
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Aug 24 13:54:23 2023 +0200
+
+    Deploy 'TensorflowDataset' in toy-regression integration test.
+
+commit 0a242469fa58273743a357f4d4107373dceaef2e
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Aug 24 11:27:56 2023 +0200
+
+    Fix 'DataTypeField.is_valid' and update deprecated fields' doc.
+
+commit 044466096d7d7b5ebd8dff2153d992c1f4a73e20
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Aug 24 11:28:16 2023 +0200
+
+    Add unit tests for 'DataInfoField' subclasses.
+
+commit 44dbcd1c6def023fcb9ae893b41f940b1b676434
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Aug 24 10:47:58 2023 +0200
+
+    Clean up some Websockets backend code.
+
+commit 91adc4077ca2bfc54429c5c4c1ee6ea053e5b579
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Aug 24 10:47:26 2023 +0200
+
+    Add unit tests for large (chunked) messages exchange.
+
+commit 48d18343bf39746d2687bb8c017fe5ce20a28d06
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Aug 9 17:04:18 2023 +0200
+
+    Add some 'pragma: no cover' for deprecated functions and edge-case exception handling.
+
+commit 6a18057ca219eb565c2f2e4d72396da24282ce4e
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Aug 9 17:03:52 2023 +0200
+
+    Correct v2.3-introduced deprecations' planned removal.
+
+commit 3d39a2d051e58eb7b482f301eeb5184635664700
+Merge: 62cc5a6 2795507
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Wed Aug 9 12:36:38 2023 +0000
+
+    Merge branch 'global-clipping' into 'develop'
+    
+    Implement 'L2GlobalClipping' OptiModule.
+    
+    See merge request magnet/declearn/declearn2!56
+
+commit 2795507c8b9ad5a13ef84d4af876ce3096f5602f
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Aug 3 17:49:02 2023 +0200
+
+    Implement 'L2GlobalClipping' OptiModule.
+
+commit 62cc5a69d18169a74affbaf1b61aa175e900918f
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Aug 7 16:06:31 2023 +0200
+
+    Add missing seed to Torch and TensorFlow Dataset tests.
+
+commit 459545757cbfdd6af031143c67a618335ba9f43b
+Merge: 72e8738 d6552ab
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Mon Aug 7 13:35:59 2023 +0000
+
+    Merge branch 'vector-unit-tests' into 'develop'
+    
+    Add proper unit tests for 'Vector' and its subclasses
+    
+    See merge request magnet/declearn/declearn2!55
+
+commit d6552ab77140ad0a089d7fa58fa014f43d693e7a
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Aug 7 13:53:26 2023 +0200
+
+    Rename 'Model' unit tests files.
+
+commit 730beced4d9ee93d11ad73b7ae467fb29e88f200
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Aug 7 13:52:38 2023 +0200
+
+    Rename 'Vector' unit tests files.
+
+commit 7c5990c200508444575d406de205617d0e9d1dd0
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Aug 7 12:57:59 2023 +0200
+
+    Remove old 'Vector' unit tests.
+
+commit f5067bdb60cd650ffaad0e9e65852a2b536a2269
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Aug 7 12:56:45 2023 +0200
+
+    Add some generic and error-cases unit tests for 'Vector'.
+
+commit 34037cbc1a63d2a23774839db4b7df01b99b50ed
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Aug 7 12:36:50 2023 +0200
+
+    Add unit tests on (Other)-NumpyVector compatibility.
+
+commit bcc6903453309b7a85608b207b4145bf013b8d96
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Aug 7 12:32:54 2023 +0200
+
+    Fix 'Vector.minimum' and '.maximum' type annotations.
+
+commit 5ccad9c2e09b7827dd24a0e3083c77a3792a2db3
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Aug 7 12:24:11 2023 +0200
+
+    Deprecate 'axis' and 'keepdims' kwargs of 'Vector.sum'.
+    
+    These arguments have never been used, are defined at the level of
+    subclasses rather than that of the 'Vector' ABC, and are bound to
+    create some issues if mis-used.
+    
+    They are being deprecated, and will be considered for re-instatement
+    with proper ABC definition and documentation if and only if they are
+    required to implement some given algorithm in the future.
+
+commit 6f811fc00d771fe3d9f8ac4c9d0ed62544cf592d
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Aug 7 11:13:37 2023 +0200
+
+    Fix an error message in 'Vector.build'.
+
+commit 4395571e90a4ad1d321eae43acb8800ca6d53691
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Aug 7 11:12:51 2023 +0200
+
+    Add unit tests for 'Vector.build'.
+
+commit ce6cd7925fe1dbe69a3cd3a11d2a7a9464269d7b
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Aug 7 11:00:32 2023 +0200
+
+    Fix type-association for 'JaxNumpyVector'.
+
+commit de262d7bc515ef8795939f050c8e7a8bcc423a7e
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Aug 4 17:08:06 2023 +0200
+
+    Test 'tf.IndexedSlices' support in 'TensorflowVector' unit tests.
+
+commit 5c21f8596469bef5e913f963669d93eba266f1cb
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Aug 4 17:00:26 2023 +0200
+
+    Add square and sqrt Vector unit tests.
+
+commit 6e1c1bfa92f331fd4ea4047ad6a1865b7abdb704
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Aug 4 15:59:28 2023 +0200
+
+    Fix 'TensorflowVector.shapes' output type.
+
+commit 6826cfeafd153debf5a30f4a072ba9936aa4f8a6
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Aug 4 15:44:20 2023 +0200
+
+    Implement a new unit tests suite for 'Vector' classes.
+
+commit 72e8738aae686779d945d28dd06252a349558c51
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Aug 4 10:06:05 2023 +0200
+
+    Fix 'SklearnSGDModel' cross-version compatibility.
+
+commit fadcdc44e66dc74304624cc0ae7d9f944fe30bc3
+Merge: 47381cb 14bdb42
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Fri Aug 4 07:28:17 2023 +0000
+
+    Merge branch 'hotfix-truediv' into 'develop'
+    
+    Hotfix: 'Vector.__rtruediv__' and 'L2Clipping'
+    
+    See merge request magnet/declearn/declearn2!54
+
+commit 14bdb425f1ac93d3115ffe08c596befa0e73c514
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Aug 3 18:59:36 2023 +0200
+
+    Disable GPU use in 'test_regression' integration test.
+
+commit ca3dafb7f10e27899e22418073e1a73afe30c92d
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Aug 3 18:40:01 2023 +0200
+
+    Deploy '--cpu-only' test option to optimizer tests.
+
+commit 047d9b64adb16c3e7b84e7252f296914dc71c796
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Aug 3 17:46:41 2023 +0200
+
+    Fix 'L2Clipping' algorithm.
+
+commit 3a53dfa4e91efc5cf36b44a905be1ab6bcdb55ec
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Aug 3 17:45:39 2023 +0200
+
+    Fix 'Vector.__rtruediv__'.
+
+commit 47381cb90595b95712aa4aeb538cc1ae1aa10c1f
+Merge: 6bb9d42 62669f6
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Tue Aug 1 13:05:04 2023 +0000
+
+    Merge branch 'enhance-datasets' into 'develop'
+    
+    Enhance `declearn.dataset`: implement `TensorflowDataset` and improve `TorchDataset` and `InMemoryDataset`.
+    
+    Closes #21
+    
+    See merge request magnet/declearn/declearn2!53
+
+commit 62669f67ea457689a25daa44292ac813361bb15c
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Jul 31 16:34:06 2023 +0200
+
+    Implement and test 'collate_with_padding' util for 'TorchDataset'.
+
+commit 6c24ad11bdb4baacc33431f80360558c6d78abe4
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Jul 31 16:33:35 2023 +0200
+
+    Add 'collate_fn' parameter to 'TorchDataset'.
+
+commit 2581aca71b84b49dec82a9c3572c25108661a53c
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Jul 31 13:26:24 2023 +0200
+
+    Add support for padded and ragged batching to 'TensorflowDataset'.
+
+commit aab0c4f82911a3a7dd3a1848b1a69cc4231dac88
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Jul 31 10:48:09 2023 +0200
+
+    Implement custom 'PoissonSampler' for 'TorchDataset'.
+    
+    Previously, poisson sampling was delegated to a sampler implemented
+    as part of the third-party 'opacus' library. However, the latter is
+    not mandatory for end-users, and its implementation does not prevent
+    empty batches from being yielded (which break our collate function).
+    
+    Therefore, this commit implements our own sampler, as it is a very
+    straightforward process.
+
+commit 9a85bab03b8e6707c85110d9962663a0af0261c6
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Jul 31 10:47:05 2023 +0200
+
+    Add unit tests for batch-generation with replacement.
+
+commit 742c8d8763facc6a95188042cb0bf249e16c480f
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Jul 31 10:13:07 2023 +0200
+
+    Add base unit tests for 'TensorflowDataset'.
+
+commit 4fc12a667ff2d12ce1c949a137ca40c9e0034881
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Jul 28 18:22:29 2023 +0200
+
+    Implement 'replacement' parameter use for 'InMemoryDataset.generate_batches'.
+
+commit 09c5fb27f78dd3ec02ce8f77ed332f0b9d750e8b
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Jul 28 16:35:00 2023 +0200
+
+    Implement 'TensorflowDataset' interface to 'tf.data.Dataset'.
+
+commit 6bb9d428c7ba52444f50fa02f82e83e46f739a30
+Merge: 1bf2d69 114ecf3
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Fri Jul 28 09:37:57 2023 +0000
+
+    Merge branch '24-declearn-text' into 'develop'
+    
+    Implement 'TorchDataset' to support an example on language models
+    
+    Closes #24
+    
+    See merge request magnet/declearn/declearn2!47
+
+commit 114ecf35ee075ceb82eb03fdc1990ebe1a5d23c7
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Jul 26 23:10:43 2023 +0200
+
+    Fix 'to_numpy' test util.
+
+commit e7e2880b622fc26fd1b32fb98a30100a016b8a22
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Jul 26 17:40:07 2023 +0200
+
+    Improve 'TorchDataset' setup in 'test_regression'.
+
+commit c1dbe133c15ff17951a971c667e863e0623b9a8f
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Jul 26 17:18:54 2023 +0200
+
+    Use 'make_importable' to perform local imports in tests' code.
+
+commit db97bed55c473991faf675470443b46d9e43e11b
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Jul 26 16:10:55 2023 +0200
+
+    Move 'TorchDataset' to 'declearn.dataset.torch' manual-import submodule.
+
+commit be4c9f220537b5529b6648d6b42868455608600d
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Jul 26 15:57:59 2023 +0200
+
+    Correct 'TorchModel._unpack_batch' output signature.
+
+commit 67a9a0177598227a76bddd95ccaa4031e22f57b5
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Jul 26 15:44:24 2023 +0200
+
+    Fix 'TorchDataset' custom collate fn and its tests.
+    
+    - The previous 'transform_batch' function was rewritten into the
+      'TorchDataset.collate_to_batch' static method. Its dependency
+      util (and a number of 'TorchDataset' attributes) were removed.
+    - The function was revised into yielding expected results so as
+      to collate lists of sample data (formatted as tuples) into a
+      declearn-compatible batch. Its tests were updated and expanded
+      to match real-life requirements.
+
+commit d94bb87e607147115cf7752436efaa8e5838c448
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Jul 26 15:43:41 2023 +0200
+
+    Remove deprecated '_type_key' attribute from 'Dataset' API.
+
+commit 6ae7dd7b01b3163fdd231b7fce3047a778da5fe8
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Jul 26 15:38:35 2023 +0200
+
+    Marginally improve 'TorchDataset' backend code.
+    
+    - Wrap up 'opacus' conditional import to raise proper warnings.
+    - Favor 'torch.utils.data.X' calls rather than calling 'X' after using
+      'from torch.utils.data import X'.
+    - Catch exceptions (and silence mypy warnings) due to possibly-unsized
+      torch Dataset inputs.
+    - Clean up a few minor development artifacts in the backend code.
+
+commit f8c33496fd63752e3ae8a3387d3e8b8f53286a03
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Fri Jul 7 11:32:23 2023 +0200
+
+    Making data_item_info an attirbute of TorchDataset
+
+commit ced87128aa33b61d06fdd98e06c38ee684e2f9da
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Tue Jul 4 18:19:47 2023 +0200
+
+    Centralize all versions of the "to_numpy" function in a single test_util
+
+commit 768c79d78f45957280839a7c92bd5124f3c7b41d
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Thu Jun 29 17:31:32 2023 +0200
+
+    Apply linter-based and typo-resolving corrections.
+
+commit 33a2224bb1a6d2288b4c1a3b26235ef1cc7b997d
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Thu Jun 29 17:01:07 2023 +0200
+
+    Add unit tests for 'InMemoryDataset'.
+
+commit 8d236abd94d7a609ac424e7280586e09994f541f
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Thu Jun 29 16:19:13 2023 +0200
+
+    Finalizing Torch Dataset testsc, and moving key fucntions to test_utils
+
+commit 18db2fbe22ef3757428f251f9e037ca56b26e423
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Tue Jun 27 17:35:18 2023 +0200
+
+    Basic test suite + application to torchdataset
+
+commit 4286453bdce50a8dedf5a60ee2aaf0059e9a3318
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Fri Jun 23 13:36:07 2023 +0200
+
+    Revise 'TorchDataset', and use it in 'test_regression'.
+
+commit cbd665b4ae74491e5be2406f3d3ecb22761d16d1
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Thu Jun 22 18:56:29 2023 +0200
+
+    Updating torch dataset v1 - validate method broken
+
+commit 90119d689038c1d6f35d0d4417bc6e92893057d5
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Wed Jun 21 16:59:51 2023 +0200
+
+    Adding torch dataset v0 and moving TorchBatch from model to dataset folder
+
+commit c2f3e875d2e04499e7eac8fb367c79f310987067
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Mon Jun 19 20:36:46 2023 +0200
+
+    Trim 'Dataset' ABC, removing load/save method from the API.
+    
+    Also add 'replacement' argument to the 'generate_batches' method.
+
+commit 1bf2d691b0793502509264cfb40a560d8c1db92b
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Jul 25 11:37:05 2023 +0200
+
+    Update the website docs on tests and ways to run them.
+
+commit 1943a468524d998342484f800cb6a16b779b5cdf
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Jul 25 11:02:22 2023 +0200
+
+    Add documentation for developers to 'run_tests.sh' script.
+
+commit 31a69ce46b7f4eee7328ff15ba1ee95244607b11
+Merge: 50255e3 67ef8f4
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Mon Jul 24 14:43:18 2023 +0000
+
+    Merge branch 'test-magnet-runner' into 'develop'
+    
+    Switch to a Magnet-hosted CI runner
+    
+    See merge request magnet/declearn/declearn2!45
+
+commit 67ef8f4c49e51bdef4d2705bd7f90f315c5afc73
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Jul 24 16:30:24 2023 +0200
+
+    Force CI tox env recreation on merge commits to a main branch.
+
+commit 451cde2da441df6ed9e6142a3d9f4d7ee97a745e
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Jul 21 13:26:11 2023 +0200
+
+    Enable torch dynamo error fallback in 'Model' unit tests.
+
+commit 59f8779d9e8f31cf20f30cabfae6f2c2c1309dbb
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Jul 20 16:27:40 2023 +0200
+
+    Change CI/CD runner and execution rules.
+    
+    - Move from shared inria CI/CD runners to a Magnet-hosted one, that
+      enables re-using the same docker volume across jobs.
+    - Ensure the venv, pip and tox cache folders are preserved across jobs.
+    - Ensure the tox venvs differ between branches, preserving isolation.
+    - Ensure merged branches' tox venv is garbage-collected.
+    - Enable removing the current branch's cached tox venv.
+    - Enable removing the entire tox cache directory.
+
+commit b099959bd8e88bb6f7f070d8227e055719d6b008
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Thu May 4 11:42:14 2023 +0200
+
+    Switch to a Magnet-hosted CI runner.
+    
+    - This commit squashes (effectively dropping most of) a number of
+      attempts at tweaking the CI/CD config so as to run on a custom,
+      self-hosted, gpu-enabled CI runner and make an efficient use of
+      caching capabilities in order to reduce CI pipelines' runtime.
+    - Although the finalized commit barely comprises any change it is
+      meant to record that Nathan was the one to first set up our new
+      CI runner and tackle GPU-access issues, and put some effort in
+      attempting to tackle caching issues that would later be handled
+      by Paul.
+
+commit 50255e378fecb2dc28ff5dc3d164cc3ebc7c3b1f
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Jul 17 11:27:58 2023 +0200
+
+    Increase CI/CD coverage statistic precision.
+
+commit 571ff5007911c7dabb23795f9e0c15c44ad6a9c5
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri May 26 10:58:59 2023 +0200
+
+    Refactor 'gen_docs.py' code.
+
+commit 4cff0d377a246bb06fa186a7905692d0aa84980d
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed May 24 13:35:04 2023 +0200
+
+    Refactor 'run_as_processes' backend code.
+
+commit 861d559b520f8761f1811ad68106633ed08f856c
+Merge: 9f0035d 6d3695f
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Thu Jul 13 07:54:27 2023 +0000
+
+    Merge branch '27-add-support-for-torch-2-0' into 'develop'
+    
+    Add support for Torch 2.0
+    
+    Closes #27
+    
+    See merge request magnet/declearn/declearn2!49
+
+commit 6d3695fdd1e4ad162440ca99179743fc1caa856e
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Jul 7 12:05:50 2023 +0200
+
+    Add a couple of 'no cover' pragmas.
+
+commit fdb8167fc5ecc4c3a68b7564ed43577a9c59ff73
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Jul 13 08:41:09 2023 +0200
+
+    Have some unit tests re-run using Torch-1.13 in the CI.
+
+commit 7468f705fb2dd4d020daf0586f85f09d3443582c
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri May 26 10:44:55 2023 +0200
+
+    Add and document 'torch.compile' support.
+    
+    - Torch 2.0 introduced `torch.compile`, a novel utilty to optimize
+      computations via their JIT-compiling into optimized kernels. At
+      the moment, compiled modules cannot be saved (but their states,
+      which are shared with the underlying original module, can), and
+      are not compatible with `torch.func` functional execution either.
+    - As declearn vows to support Torch 2.0, it seems crucial that end-
+      users may use `torch.compile`. However, as long as Torch 1.10-13
+      versions (and previous versions of DecLearn 2.X) are supported,
+      this handling should not break backward compatibility.
+    - An initial approach was to enable compiling the handled module as
+      part of `TorchModel.__init__`. However, this proves impractical,
+      as it takes away the assumption that end-users should be able to
+      use their customly-prepared module as-is - including pre-compiled
+      ones. This is all the more true as their are many options to the
+      `torch.compile` function, that DecLearn has no purpose handling.
+    - Therefore, the approach implemented here is to detect and handle
+      models that were compiled prior to being input into `TorchModel`.
+    
+    - Here are a few notes and caveats regarding the current implementation:
+      - Some impractical steps were taken to ensure weights and gradients
+        have the same name regardless of whether the module was compiled
+        or not, _and regardless of the specific 2.x version of declearn_.
+        When we move to declearn 3, it will be worth revising.
+      - A positive consequence of the previous note is that the compilation
+        of the module should not impair cases where some clients are using
+        torch 1 and/or an older 2.x version of declearn.
+      - The will to retain user-defined compilation option is mostly lost
+        due to the current lack of recording of these info by torch. This
+        is however expected to evolve in the future, which should enable
+        sharing instructions with clients. See issue 101107 of pytorch:
+        https://github.com/pytorch/pytorch/issues/101107
+      - A clumsy bugfix was introduced to avoid an issue where the wrapped
+        compiled model would not take weights updates into account when
+        running in evaluation mode. The status of this hack should be kept
+        under close look as the issue I opened to report the bug is treated:
+        https://github.com/pytorch/pytorch/issues/104984
+
+commit ef8b5662e43533cd59f439f467b1ac08e7a419e3
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Jul 4 13:43:23 2023 +0200
+
+    Add support for torch model buffers in clipped gradients computation.
+
+commit 4202d5624820e1a57931757b44bbe546a0653db3
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Jul 4 17:10:31 2023 +0200
+
+    Update 'pyproject.toml' to support both Torch 1.1X and 2.X.
+    
+    - Turn "all" and "torch" extras more loose, enabling (thus, in most cases,
+      resulting in) installing torch >=2.0 rather than 1.1[0-3].
+    - Add "torch1" and "torch2" extras to specify explicitly whether the user
+      would rather use Torch 1.13 or >=2.0. Opacus is made part of these two
+      extras, as its version is also co-dependent with Torch/Functorch.
+    - Document this change as part of the package installation guide.
+
+commit accb07d1ba8815c3b6fbe659330cb740238dda84
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed May 24 16:48:21 2023 +0200
+
+    Revise TorchModel to support Torch 2.0.
+    
+    - Torch 2.0 was released in march 2023, introducing a number of
+      new features to the torch ecosystem, while being non-breaking
+      wrt past versions on most points.
+    - One of the salient changes is the introduction of `torch.func`,
+      that integrates features previously introduced as part of the
+      `functorch` package, which we have been relying upon in order
+      to efficiently compute and clip sample-wise gradients.
+    - This commit therefore introduces a new backend code branch so
+      as to make use of `torch.func` when `torch~=2.0` is used, and
+      retain the existing `functorch`-based branch when older torch
+      versions are used.
+    - As part of this effort, some of the `TorchModel` backend code
+      was refactored, notably deferring the functional transform of
+      the input `torch.nn.Module` to the first call for sample-wise
+      gradients computation. This has the nice side effect of fixing
+      cases when users want to train a non-functorch-compatible model
+      without DP-SGD.
+
+commit 9f0035d7d7a80b8a28181c2386154e700681cc27
+Merge: 8843e07 4efde98
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Wed Jul 12 13:25:58 2023 +0000
+
+    Merge branch 'revise-ci-and-tests' into 'develop'
+    
+    Refactor tests pipeline, introducing 'scripts/run_tests.sh'.
+    
+    See merge request magnet/declearn/declearn2!52
+
+commit 4efde9876c7762d72b67bd7415e3db2315b25dea
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Jul 10 13:23:45 2023 +0200
+
+    Adjust the CI/CD configuration to 'tox.ini' evolution.
+
+commit 31d3fb67f1b254797d48d985326e5fdb7b374120
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Jul 7 12:05:08 2023 +0200
+
+    Refactor tests pipeline, introducing 'scripts/run_tests.sh'.
+    
+    - Add the 'scripts/run_tests.sh' bash script, which enables running
+      various blocks of tests. This mostly refactors instructions that
+      used to be part of 'tox.ini', in a more convenient way:
+      - some tests are grouped (commands in a group _all_ run, but the
+        group fails if any has failed once all are done);
+      - instructions are (hopefully) easier to read through and should
+        be easier to maintain in the future;
+      - it should be easier to decline more groups in the future (e.g.
+        to have a routine with only unit tests);
+      - groups of tests can be run easily, including without using tox.
+    - Have the 'tox.ini' file trigger some groups of tests by calling
+      the new bash script. This makes the tox file easier to read and
+      parse through, and merely oriented at providing run isolation.
+    - Split test groups into various envs in tox, which may be slightly
+      more costly to run, but enables writing simpler CI/CD pipelines
+      that merely pass arguments to the tox command.
+    - Make it explicit in 'tox.ini' that tests can be run with python
+      3.8 and onwards.
+    - Keep a "main" job that groups all others. This is useful in the
+      Inria shared Gitlab Runner, as caching is disabled, so that the
+      use of distinct jobs would result in redundant costful package
+      installations.
+
+commit 8843e075e5b75e52f03ab0cc35aa961e14936f49
+Merge: c9f5245 6b7a3d6
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Wed Jul 12 13:00:15 2023 +0000
+
+    Merge branch 'mnist-example' into 'develop'
+    
+    Revise the MNIST example, cleaning up the code and documentation.
+    
+    See merge request magnet/declearn/declearn2!51
+
+commit 6b7a3d618cc67d957d8702672e86c6acd727b38b
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Jul 11 15:08:00 2023 +0200
+
+    Revise the MNIST example, cleaning up the code and documentation.
+
+commit c9f52458b8cdc3eab7e89eb57d42faa6b5e4cc3c
+Merge: 3b687a3 38accb6
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Thu Jul 6 16:52:11 2023 +0000
+
+    Merge branch 'sklearn-13-dtype-fix' into 'develop'
+    
+    Fix compatibility issues with scikit-learn 1.3.0 and tensorflow 2.13.0
+    
+    Closes #28 and #29
+    
+    See merge request magnet/declearn/declearn2!50
+
+commit 38accb6466e94f2b68955dfa7692a5511c53fa6d
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Thu Jul 6 17:12:05 2023 +0200
+
+    Refactor 'SklearnSGModel' dtype choice code into a private function.
+    
+    Co-authored-by: Paul ANDREY <paul.andrey@inria.fr>
+
+commit c4fe82b50fcddfed71c6701db8c6c8c69570a748
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Jul 6 14:13:16 2023 +0200
+
+    Prune 'test_main.py' pytest-collected test scenarios.
+    
+    The legacy 'test_main.py' integration tests are now mostly redundant
+    with other integration tests, adding little marginal value to the CI/CD
+    tests pipeline. From a Coverage POV, the only thing that is not already
+    tested elsewhere is the actual use of Scaffold.
+    
+    Hence the test scenarios collected during PyTest runs are restricted to:
+    - FedAvg and Scaffold variants of Optimization strategies.
+      (prior: FedAvg + FedAvgM + Scaffold)
+    - In non-fulltest, only the Scaffold strategy is used.
+      (prior: FedAvg + Scaffold)
+    
+    This results in testing 3 scenarios in the limited pipeline and 18 in the
+    "fulltest" one, when there previously would be 6 or 27 scenarios.
+
+commit 29ecf47396bccd1baf1363d1f3806bfa083d1c61
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Jul 6 14:11:37 2023 +0200
+
+    Add 'dtype' use to 'SklearnSGDModel' unit tests.
+
+commit 95cfa2b9069472f2867120d099d330a88e6d166f
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Jul 6 14:09:39 2023 +0200
+
+    Refactor and fix 'build_keras_loss' util; add unit tests for it.
+
+commit 808cd5fd0a9a0dc3a25fc8b6d6f10b34341520dc
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Jul 6 11:56:48 2023 +0200
+
+    Fix 'build_keras_loss' for TensorFlow 2.13.
+
+commit 02afef6ec467896cc9fdcdaab8df238860e40ef1
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Jul 5 18:07:21 2023 +0200
+
+    Improve dtype handling in 'SklearnSGDModel'.
+    
+    - Scikit-Learn 1.3.0 introduced the possibility to use any dtype for
+      SGD-based models' weights.
+    - As a consequence, this commit introduces the optional 'dtype' argument
+      to 'SklearnSGDModel.__init__' and '.from_parameters' methods, which is
+      only used with `sickit-learn >=1.3` and an un-initialized model.
+    - Coherently (and for all scikit-learn versions), additional type/dtype
+      verification has been implemented under the hood of `_unpack_batch`.
+
+commit 3b687a3a249c7f33711da02f4ab575ff151869ff
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Jun 8 14:23:35 2023 +0200
+
+    Fix Heart Disease UCI Dataset loaded due to website change.
+
+commit afc295100261d5a19b278363e73763eafc2022ba
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed May 31 11:57:23 2023 +0200
+
+    Replace deprecated 'pkg_resources' with 'importlib.metadata'.
+
+commit a8cfa7cc9fa9045d13466527793f8baf706a817c
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue May 23 16:22:15 2023 +0200
+
+    Remove unused line in 'tox.ini'.
+
+commit f7a13dff9ce3de674ac263628ae8dc98153b2335 (tag: v2.2.0)
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu May 11 15:58:17 2023 +0200
+
+    Fix Jax dependency specification.
+
+commit 9113e8adfca5678b20e33f8eb6b58f8135c14125
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu May 11 15:53:42 2023 +0200
+
+    Document known issues with GPU support.
+
+commit 88a990ec327925d7194c283169f7e054af92c80b
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu May 11 10:39:47 2023 +0200
+
+    Turn device-selection 'UserWarning' into 'RuntimeWarning'.
+
+commit 9d1b25cb591e4713f303b6441892eff5faf1f8bd
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu May 11 10:39:10 2023 +0200
+
+    Fix device selection for Jax and add '--cpu-only' to its tests.
+    
+    - Fix device-selection utils for Jax/Haiku.
+    - Ensure any GPU is left untouched when the device policy specifies
+      that the CPU must be used.
+    - Fix instructions in both HaikuModel and its tests' setup code to
+      achieve the former.
+    - Note: `jax.jit(..., device=<D>)` is used to prevent Haiku from
+      using another device than the desired one; however this argument
+      is being deprecated, making this solution short-lived. Since the
+      supported Jax version is hard-coded however, we keep this patch
+      for now, in wait of future framework evolutions.
+    - Add the use of the optional, custom `--cpu-only` flag in Haiku
+      unit tests. This enabled testing the former changes in an env
+      that has a detectable GPU, but an unproper driver version (so
+      that any undesired use of that GPU would make the tests fail).
+
+commit 28e881522f3f4da1d4ff7542065f6063893fb3c2
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed May 10 15:10:30 2023 +0200
+
+    Bump version number to 2.2.0.
+
+commit 1eae849db8486fef14b5fb7304d2bea8b71e9a3b
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed May 10 15:05:22 2023 +0200
+
+    Improve some documentation formatting.
+
+commit 164ddb3b4b827c2fbd3ed047be4fee339adcdcbe
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed May 10 15:03:18 2023 +0200
+
+    Improve 'HaikuModel.set_trainable_weights' docs.
+
+commit dd2eef5029ab0a75785372326d5e3fe472c72799
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed May 10 14:49:12 2023 +0200
+
+    Fix jax dependency specification.
+
+commit e95ece2ee68e98a570539c1f3eac4d68d83e571e
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed May 10 14:48:56 2023 +0200
+
+    Fix 'declearn.model' main module docstring.
+
+commit 38dbe123376bc69097098fc7406e5f1f5ab69860
+Merge: a748ae7 eef2033
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Wed May 10 09:30:49 2023 +0000
+
+    Merge branch 'gardening' into 'develop'
+    
+    Minor gardening around the package
+    
+    See merge request magnet/declearn/declearn2!44
+
+commit eef2033fc3d4ceda652cdccf863738312a434b85
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed May 10 09:53:43 2023 +0200
+
+    Enhance type hints for Jax/Haiku classes.
+
+commit ba2caa2f9b694283f1283266ce4a386885310af1
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed May 3 16:40:38 2023 +0200
+
+    Revise test suite's ordering.
+    
+    - First run unit tests (which are the more problematic).
+    - Then run code quality verifications (pylint / mypy / black).
+    - Finally run integration tests.
+    
+    The rationale to inverting the last two items relative to what was
+    done prior to this update is to keep the longest-running tests for
+    the end (rather than re-play a long pipeline due to late-detected
+    formatting issues).
+
+commit 9e6f9a8c6ad0e6472fa450cd29c2a5279063e7ed
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed May 3 16:40:12 2023 +0200
+
+    Patch 'TomlConfig' unit tests for PyLint.
+
+commit fd8abbd3f7b27cba1087f441f32fd734dc8ef836
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed May 3 15:57:10 2023 +0200
+
+    Add the 'list_aggregators' util function.
+
+commit c3a6186149d09fc0d3d1c0ec74058f109cedf375
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed May 3 10:57:10 2023 +0200
+
+    Add some 'pragma: no cover' comments.
+
+commit d37d8ed21548984bdfb9112d676d8bb469cc8ab5
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed May 3 10:46:17 2023 +0200
+
+    Lift 'run_as_processes' backend code.
+
+commit 93f13d536ed0dd919be456f0a3adf0380eefb088
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed May 3 10:40:42 2023 +0200
+
+    Add basic unit tests for 'Aggregator' classes.
+
+commit 29c6fb3a0cfc7f73e528d4db1a57dd9d01c6f2d8
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed May 3 10:40:07 2023 +0200
+
+    Marginally improve some 'Aggregator' code and docs.
+
+commit f9ee9b9a3c19829970dca24d8e3856f699856bb2
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Apr 28 11:48:30 2023 +0200
+
+    Add minimal functional test for quickrun mode.
+
+commit 163acc1f64e462f56d06abc1c704ab2baae311ec
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Apr 28 11:47:16 2023 +0200
+
+    Make quickrun mode compatible with gRPC.
+
+commit fd7d8c2a56609babd92ff5c93c228cdeddfd93e4
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Apr 28 11:46:52 2023 +0200
+
+    Fix default aggregator in `FLOptimConfig`.
+
+commit dd17cd64d10bae0c6a75a49c698c7a3e1eba0d43
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Apr 27 16:38:31 2023 +0200
+
+    Add unit tests for 'TomlConfig' and revise its backend.
+
+commit 2b020369a21697513204a312a1d4dc7a7c53220d
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Apr 27 10:42:40 2023 +0200
+
+    Extend unit tests for type-registration utils.
+
+commit 6630eb915dfd8c59304f466fde9f01efd5250574
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Apr 26 17:14:46 2023 +0200
+
+    Add utils to list available optimizer plug-ins.
+
+commit 13b5c75792879db557e45e23900624c5ce6e17eb
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Apr 26 16:45:56 2023 +0200
+
+    Add 'Model.get_wrapped_model' to the API.
+
+commit 7d440b0cf60b28cb5875b20ec6a1ab2ffd0c8cf3
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Apr 26 16:25:16 2023 +0200
+
+    Correct a comment in 'NoiseModule' code.
+
+commit 7f3327b1bc94309fc4babc06ef7c6a5027986be6
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Apr 26 16:18:50 2023 +0200
+
+    Enhance typing of 'Model' and 'Vector' using 'typing.Generic'.
+    
+    - Make `Vector` a `Generic[T]` to indicate that stored data arrays
+      should have coherent types.
+    - Make `Model` a `Generic[VectorT]` to indicate that a given model
+      class is associated with a unique vector class.
+    - In `Optimizer` and plug-ins ABCs, specify that inputs and outputs
+      should be coherent using `Vector[T]` and `Model[Vector[T]]` type-
+      hints.
+    - In concrete plug-in classes, leave the existing code as-is so as
+      not to make it harder to read.
+
+commit a748ae7131fbd0be50aa947f146e78e44b66da95
+Merge: 2258d64 11274f4
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Tue May 9 19:16:39 2023 +0000
+
+    Merge branch 'haiku-jax' into 'develop'
+    
+    Add support for Jax / Haiku
+    
+    See merge request magnet/declearn/declearn2!32
+
+commit 11274f419a6b35b9cedfc4f9f0833da6c39f9729
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Tue May 9 14:40:27 2023 +0200
+
+    Removing unused typing import
+
+commit 6653b3dc55959414ce800e3281f9476d9c7e2653
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Tue May 9 12:55:47 2023 +0200
+
+    Avoid re-implementing haiku model traverse.
+
+commit 5f33eef6bd3ffd819a713c6e7d99110d6eeb26c0
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri May 5 12:16:33 2023 +0200
+
+    Revise 'HaikuModel' backend.
+    
+    * Add proper weights and gradients naming.
+    * Store the model's nested dict of parameters rather than its
+      flattened counterpart.
+    * Refactor some backend code to improve readability of gradients
+      computation.
+    * Add a public getter to access weights' names, opt. restricted
+      to trainable ones.
+    * Revise `set_trainable_weights` to received lists of names rather
+      than indices. Keep support for predicates and PyTree inputs.
+
+commit d02b880ed7c59aab0ffda0519f1cef2440103da5
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri May 5 10:20:55 2023 +0200
+
+    Minor formatting revisions to 'HaikuModel'.
+
+commit defe9ba664f9c0e4ea4de5ca37bd1701c1f255e3
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Wed May 3 17:53:04 2023 +0200
+
+    post rebase corrections
+
+commit 692a4054753c0deaab7ef406d1b20e96a3fc102a
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Mon Apr 24 19:30:03 2023 +0200
+
+    linting
+
+commit eb441268a48f093bfb489050de12984494c2a7a5
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Mon Apr 24 19:24:30 2023 +0200
+
+    Adding list inputs to model and automatic unpacking
+
+commit d35056847ba5d3e7324da6556f9470f43b36163b
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Mon Apr 24 18:06:12 2023 +0200
+
+    Changign test model to use last LSTM hidden state
+
+commit a55f6417aa56f5fd027fdd4fdbfd1e335964507b
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Mon Apr 24 17:49:46 2023 +0200
+
+    Fixing `_compute_batched_gradients_clipped` test and typos
+
+commit 98090019afb4ce68cc131c4383ca538513a4b845
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Mon Apr 24 13:18:36 2023 +0200
+
+    Fixing Jax RNN `_compute_batch_gradient` testing - with open questions on the internal logic of the model
+
+commit 4bea61f0b1be169c49937100b09ea5db71f99db9
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Wed Apr 19 18:26:27 2023 +0200
+
+    Running gradient only on trainable parameters
+
+commit c948f95a5f99a2ded442972db280a44b88565a40
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Wed Apr 19 17:20:24 2023 +0200
+
+    Refining haiku model frozen weights methods
+
+commit fb6cc0b42e5eef3843f142bcb8d2f248646afd37
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Wed Apr 19 17:19:19 2023 +0200
+
+    Adding frozen weights tests
+
+commit bac15a39e34c7a2d79fd21b6a7c3935b10944315
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Tue Apr 18 19:14:49 2023 +0200
+
+    v0 of adding support for frozen_weights. Main ideas:
+    * Store the index of trainable weights under `self._trainable`
+    * Create a `set_trainable` method to allow to define trainable weights by using either a list of param leaves index, an existing pytree or dictionnary, or a boolean function checking for conditions on the param pytree
+    * Only update what the weights needed
+
+commit 1d43c0ddff3cd6283400f1ba76d5604bf760bb6b
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Mar 17 10:04:54 2023 +0100
+
+    Marginal 'HaikuModel' changes after review.
+
+commit 28a34851693f5a2cb220acd1c8eea4240624d434
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Mar 16 17:46:49 2023 +0100
+
+    Silence duplicate-code issue and minify haiku test code.
+
+commit e1031b5ede39043471dd5ef54960008eb5c6e3a2
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Mar 16 17:15:49 2023 +0100
+
+    Add missing license headers to haiku-related files.
+
+commit 56971bd5932d0c3cb972757e2417b8d0bcddacfe
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Mar 16 17:03:00 2023 +0100
+
+    Improve some Haiku/Jax related documentation and imports.
+
+commit 569106f8b29db6064a804b0dce5f49f5223cae27
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Mar 16 17:02:17 2023 +0100
+
+    Remove redundant jax config call.
+
+commit 8bcbc9d59de34b7ddf4ce24a9c316665f81bb819
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Mar 16 16:30:29 2023 +0100
+
+    Clean up 'JaxNumpyVector' backend code.
+
+commit 0c43b027a5ce89fd0fca0645639871ff18fe7026
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Mar 16 16:27:56 2023 +0100
+
+    Capture expected warnings in 'HaikuModel' tests.
+
+commit 1ede1179fae64ef67673be4b22d7ff18c121e549
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Mar 16 16:12:19 2023 +0100
+
+    Correct Haiku test CNN parameters.
+
+commit 8dfc07d04be402a05501e8cb85aac62c86727e0d
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Mar 16 15:49:07 2023 +0100
+
+    Correct gradient-clipping with 'HaikuModel'.
+
+commit 274ae23f6d2eea5c0dfe186dbe55630ee80b58de
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Mar 16 15:20:12 2023 +0100
+
+    Optimize `HaikuModel` backend.
+    
+    Avoid building the gradient-computing jax functions every time they
+    are to be used. On the `test_regression.py` functional test, this
+    results in halving the execution time (which contains that of the
+    sklearn benchmark; hence the actual haiku gain is even higher).
+
+commit f8330bcefb2256525c7c47975c949e33ed09d44d
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Mar 16 13:10:32 2023 +0100
+
+    Improve 'HaikuModel' backend code readability.
+    
+    * Remove some targetted imports to make jax functions' origin
+      clearer when used in the declearn code.
+    * Use `haiku.Params` type-hint to annotate parameters.
+    * Rename the parameters-holding private attributes to make them
+      shorter.
+    * Improve the type-hinting of the parameters-holding attributes.
+    * Add some assertions to silent mypy. These seem un-hurtful as to
+      code runtime and may be skipped with the proper python flag, but
+      may be removed in favor of restoring `type: ignore` comments if
+      they turn out to be costly.
+
+commit c859b4d7b13d0d60527350973c17dd8f8b6fd609
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Mar 16 12:30:58 2023 +0100
+
+    Fix and silent pylint warnings.
+
+commit 1fddb802e3a6a9a018311993cf4f60afc148a2d3
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Wed Mar 15 14:41:56 2023 +0100
+
+    Adding cpu flag in jax install - to be revised when adding gpu support in ci/cf
+
+commit 5158a84ed9e058ed2c517ebef15b6335772495c1
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Tue Mar 14 17:57:47 2023 +0100
+
+    Make imports conditional on framework availability in test_regression
+
+commit 0b7f98c7301289895fc42cf92c9338a8b582231a
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Tue Mar 14 17:46:59 2023 +0100
+
+    Adding dependencies in toml, updating jax and haiku version, implementing new typing using jax latest features
+
+commit b26e1b0cb7e885d393fec13f99a8e8c99b1e6cd6
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Mon Mar 13 19:11:13 2023 +0100
+
+    Adding doc
+
+commit 2bef2b8146255845390756a1fc64bab2d8faf25f
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Mon Mar 13 18:16:28 2023 +0100
+
+    Removing temp test file
+
+commit 7d70503ea46d08d008f1d4eb547cf2ba9029f996
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Mon Mar 13 18:15:23 2023 +0100
+
+    jax functional testing
+
+commit f53e80c77006618caceeeef417223d9e80227df2
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Mon Mar 13 12:39:02 2023 +0100
+
+    Adding vector doc and applying left-most device placement rules
+
+commit a7d9b3c039302f95236b8656bbe46cb4714c3eb3
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Mon Mar 13 12:16:00 2023 +0100
+
+    Correcting test model shape
+
+commit f9daded96d9925d064f885382c2a23fb02d4042c
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Mon Mar 13 12:09:44 2023 +0100
+
+    Correcting tf file typos
+
+commit 6227db0af4d1fd6eff869a608bb59c9471bf5de7
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Fri Mar 10 18:14:44 2023 +0100
+
+    HaikuModel Unit testing
+
+commit 10399088fb3c2ec341dd610d6fdd80f845123901
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Thu Mar 9 15:30:30 2023 +0100
+
+    Adding jax to testing and correcting JaxNumpyVector for tests
+
+commit 00e8763b7077ec0e66ae8f578dcb5fdfa59311c1
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Thu Mar 9 14:27:41 2023 +0100
+
+    Adding data_info attribute to HaikuModel
+
+commit 83ff7106655a82cde4afbdc955b8ce9e936ffe86
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Wed Mar 8 19:42:39 2023 +0100
+
+    Adding feature_shape (WIP)
+
+commit a709875bbfe2cafd7792eaddc12c96b0589a97a1
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Wed Mar 8 16:42:07 2023 +0100
+
+    linting code
+
+commit 4fbf74fe8ea023355540f94629f03fd71bbfd186
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Tue Mar 7 20:18:51 2023 +0100
+
+    Adding first simple typing
+
+commit 9c9943d9fefae86c8342d78ac78748bd20958222
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Tue Mar 7 19:06:43 2023 +0100
+
+    Correcting rnadom generation
+
+commit d55ec54ad6e401f408d05cf5b647895914a5488f
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Mon Mar 6 10:21:00 2023 +0100
+
+    quick and dirty functional test
+
+commit deba84259380474ea5ae19c20f3f50c9be0cec88
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Mon Mar 6 10:20:39 2023 +0100
+
+    temp data info unpacking
+
+commit 89196050dba0e8477b6a3be4c48bfaafd2ee58c7
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Thu Mar 2 19:16:46 2023 +0100
+
+    v0 of GPU support for HaikuModel - untested
+
+commit 2af9a079c7bc0ea5d014b3f69ceab1d0658d70f6
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Tue Feb 28 18:32:57 2023 +0100
+
+    Adding @jit for grad and vmap operations
+
+commit 90da8fb30c383de616b8153aa37e0246a232d5a1
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Mon Feb 27 19:25:48 2023 +0100
+
+    Adding functional clipping
+
+commit 2788d8e686c88b58acf28117349bb21a734d76bb
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Thu Feb 16 18:35:07 2023 +0100
+
+    First functional HaikuModel
+
+commit 60eaa705e7c783109ebf286e2ab8ff4e04a44283
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Wed Feb 15 14:01:06 2023 +0100
+
+    __init__ files
+
+commit c1f7b1610546a1843622469107de43719acb927a
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Wed Feb 15 14:00:47 2023 +0100
+
+    Minimal, untested jax numpy vector
+
+commit 2258d64f3b79136e39785fea75b4973fcedb751e
+Merge: 16ec423 365c980
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Wed Apr 26 10:02:18 2023 +0000
+
+    Merge branch 'experimental' into 'develop'
+    
+    Quickrun mode
+    
+    See merge request magnet/declearn/declearn2!41
+
+commit 365c9808534be602c724039f4b791ff469da86b5
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Apr 26 11:02:58 2023 +0200
+
+    Fix formatting and links of 'quickstart.md'.
+
+commit f263e015766bba519de07ee748d91c32b8b7928c
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Apr 26 11:02:44 2023 +0200
+
+    Minor addition to 'setup.md' docs.
+
+commit 5c2b28a188a844b1ab6ccc99a8945ba4d4cde8e8
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Apr 26 11:02:12 2023 +0200
+
+    Enhance the in-code docs of quickrun.
+
+commit dba91294fc7ca8b3aebfda79a310913b120fc913
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Apr 26 10:47:36 2023 +0200
+
+    Expose quickrun building bricks, to render their docs.
+
+commit 21bcd2f63ca288225398be6a3b7fba1fe3375647
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Apr 26 10:47:11 2023 +0200
+
+    Fix some docs under 'declearn/dataset/'.
+
+commit 82174e1eed2766f3530ba9b89df8f1393094e48e
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Apr 26 09:35:52 2023 +0200
+
+    Update mnist-quickrun example and add a readme file.
+
+commit 30549fa951edda572ccd135cb834385a07418978
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Apr 25 18:04:25 2023 +0200
+
+    Change default model name in quickrun mode.
+    
+    Rationale: the model must be an instance, while "MyModel" has the
+    naming convention for a class.
+
+commit 63218f595d18c78a5bb664fb0f2dc766c667fecb
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Apr 25 18:03:36 2023 +0200
+
+    Lift the MNIST example files.
+
+commit a9dd17ded42d465a7e65cabe8daeaf5d15cc3d72
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Apr 25 17:48:52 2023 +0200
+
+    Lift the backend of 'declearn-quickrun'.
+
+commit c187016b160f8c185566ba055d84aa4d120a5743
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Apr 25 16:27:58 2023 +0200
+
+    Lift up `declearn-split` backend code.
+    
+    - Add support for sparse data arrays (as inputs and outputs).
+    - Add support for column name targets when using a csv file.
+    - Make 'split_data.py' file private and expand its documentation
+      as part of `declearn/dataset/__init__.py`.
+
+commit 648b3fd92f5bb4bb60a3448c838917236464b371
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Apr 25 11:31:05 2023 +0200
+
+    Add support for sparse inputs in 'split_multi_classif_dataset'.
+
+commit ab6d9c2bb3817dc26a03a8d5e81eef8cb4ef746e
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Fri Apr 21 12:06:14 2023 +0200
+
+    Small formatting changes to quickstart doc
+
+commit fec24b2c1abdadfa4e080fc0d432435b203d4da1
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Mon Apr 17 17:29:45 2023 +0200
+
+    Minor mypy changes in 'datasets.examples'.
+
+commit 7f51399d43d05ed966b2e7e160ec128a4bcc60fb
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Fri Apr 14 12:30:56 2023 +0200
+
+    Infering client names form folder names
+
+commit 8ac8411a47e97e72c9a639747a8af5e6bec62c1c
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Fri Apr 14 11:38:06 2023 +0200
+
+    Local MNIST example
+
+commit 75c1ec354a78932857aa25e652d0b063d198633f
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Apr 13 12:07:35 2023 +0200
+
+    Add unit tests for sparse-data utils.
+
+commit 69c99d2e7ff3cab402d974345a652fe96296dd5f
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Apr 12 16:15:17 2023 +0200
+
+    Add unit tests for data save/load utils.
+
+commit ab42d2225d3fe25c8819dcb281676d073ac4b0b9
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Apr 12 16:13:38 2023 +0200
+
+    Fix bug in 'declearn.dataset.utils.sparse_from_file'.
+
+commit fc311fd2739236bf4a9458d64fb1db60e0ddfbb8
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Apr 12 14:37:33 2023 +0200
+
+    Implement tests for example dataset loaders.
+
+commit c4b4f80ebeaa89d958fd4e435b82faebab173c8f
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Apr 12 14:09:56 2023 +0200
+
+    Remove inadvertantly restored 'test_routines.py'
+
+commit fe3f18a731d60cfa58e01126af046c2a420d3a58
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Wed Apr 12 12:37:52 2023 +0200
+
+    Linting
+
+commit 07942a1160400cf5664fb216a2d25ab23db3a0a3
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Fri Mar 31 18:19:02 2023 +0200
+
+    Integrating feedback from Magnet au Lac.
+    
+    * Separating `split_data` and `quickrun`
+    * Improving doc and leveraging better existing doc
+    * Using fire for parsing
+
+commit 3ba1c1aaa476ff07b4064da7dd2943910b35ee31
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Mar 31 16:20:05 2023 +0200
+
+    Fix logger use in quickrun mode.
+
+commit f398148d6c29cf544a3c562fea7531eb339e8599
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Mar 31 16:16:58 2023 +0200
+
+    Disable GPU use in quickrun mode.
+
+commit 17d11a023da6f707257aa1cfc9206dbdf7ec3933
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Mar 31 16:16:40 2023 +0200
+
+    Improve file paths handling in quickrun script.
+
+commit 303b90581c1db988ef15724a4382bd5d846abf13
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Fri Mar 31 12:36:13 2023 +0200
+
+    Heavily simplifying model
+
+commit 68d3c24285c921ff7f0fc9698c2eee92755defbc
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Fri Mar 31 12:35:57 2023 +0200
+
+    Adding datime to result folder  by default
+
+commit b62f7ed6fbd50dba4d0813e35e9a801d21a8adbb
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Mar 31 15:42:17 2023 +0200
+
+    Add a custom logging level to filter multiprocessing outputs.
+
+commit 041588db2052b60c8c461699a133183b50f56247
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Mar 31 11:44:30 2023 +0200
+
+    Add 'requests' dependency to 'pyproject.toml'.
+
+commit 838111469023f67519d2b9174499605c10bf38d1
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Mar 31 11:31:28 2023 +0200
+
+    Add 'declearn.dataset.utils.split_multi_classif_dataset'.
+
+commit 8b38b10f0dc536217ef7239788cdaf370998e0f2
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Fri Mar 31 11:29:21 2023 +0200
+
+    Documenting in detail the quickrun mode, later overridden
+
+commit 4d713710961db07ead1e8db4da6e675a6cca7f64
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Mar 31 10:54:20 2023 +0200
+
+    Moving data_split utils to `declearn.dataset`.
+    
+    - Move functional data loading/saving utils to it.
+    - Properly deprecate `InMemoryDataset.(load|save)_data_array`.
+    - Improve docstrings formatting and exhaustiveness.
+
+commit deb44655135a51c48dec56e3b2adee34a32f8b7a
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Thu Mar 30 21:00:11 2023 +0200
+
+    Small quickrun back end changes
+
+commit 69699d65e34cc1098e8bb3e67db41bd262a69f82
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Thu Mar 30 20:59:24 2023 +0200
+
+    Simplyfing defualt config and model
+
+commit 35b5a3af45d71174c26f58c7092c4cf9e1550df9
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Thu Mar 30 20:58:40 2023 +0200
+
+    Adding quicklearn readme
+
+commit 4206cca1a7011512f84fe8e83c11069de51d6b29
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Mar 30 15:31:31 2023 +0200
+
+    Improve quickrun metrics parsing.
+
+commit 0296417ea65ad49f9c19757b505fe77859d2f000
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Mar 30 10:29:22 2023 +0200
+
+    Update 'utils.__init__' to document 'run_as_processes'.
+
+commit 8ddc1bb97015718c5a7d1b344fe0263bb16cab96
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Mar 30 10:27:36 2023 +0200
+
+    Enhance refactored 'run_as_processes' code.
+
+commit 1c26f2c201bf62a60902cfa9dc74b0c290982911
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Thu Mar 30 09:26:31 2023 +0200
+
+    Adding checkpointer and metrics, re-shuffling data in labels split
+
+commit 98027bc4ff4ed17e9206c00e97953ebe0218b825
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Wed Mar 29 16:01:08 2023 +0200
+
+    In depth review of TOML parsing, first pass :
+    * Creating "ModelConfig","DataSplitConfig", and "ExperimentConfig"
+    * Relocating and updating parser to accept toml file as input
+    * Update split data to use config input
+    * Modularization and updating of run.py
+    * Small changes to MNIST toml example
+
+commit ca9f503e8517a5eaac3601342db4939cdf2994ec
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Mon Mar 27 22:55:56 2023 +0200
+
+    Making the MNIST example work
+
+commit dce90357596c12fb70f9105fadf27ac2d0d491e4
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Mon Mar 27 11:20:58 2023 +0200
+
+    Updating multiprocessing to run on all systems
+
+commit 22b0af35b38700fcbc5a5a3945d4ba5e2323c207
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Fri Mar 24 12:12:38 2023 +0100
+
+    Debugging and documenting
+
+commit 0969d20bdbe2ed120be77f53f989bc42d3a71d9a
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Fri Mar 24 11:03:39 2023 +0100
+
+    Adding quickrun cli script
+
+commit 38f46c0715836c1e37b831cea74f08a6a5b157cb
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Thu Mar 23 12:28:37 2023 +0100
+
+    removing csv export in split data
+
+commit 8f2be5b7c608efcd570efc9a310bfb4ae21ca9e2
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Wed Mar 22 16:10:45 2023 +0100
+
+    Removing data.py from the example folder
+
+commit 0341551755bda4e4e11b63c7a5d5434808c3c15b
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Wed Mar 22 16:10:08 2023 +0100
+
+    Adding optional behavior on loading config from toml
+
+commit 6525cf7663490f040fdf927095d7c033a68efb0c
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Thu Mar 16 09:51:35 2023 +0100
+
+    v0 of quickrun
+
+commit 16ec423645eae786022598ff43eb8fef3d484be8
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Apr 24 15:42:15 2023 +0200
+
+    Silence mypy false-positives on pandas.
+
+commit 3f6ed06df031255d3699c8d85835af0eb0990ac1
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Apr 24 15:17:48 2023 +0200
+
+    Correct RNN test case for Torch.
+    
+    - Previously, the predictions would come from the final hidden state
+      of the trained LSTM, rather than the output representation of the
+      final sequence element.
+    - This barely has any consequence given the nature of the unit tests,
+      but improves readability when used as a template for RNN models or
+      similar tests with other model frameworks.
+
+commit b8222c84df9615dd19220f7a21f11895414ec49c
+Merge: 594dfac be449f9
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Mon Apr 17 13:18:49 2023 +0000
+
+    Merge branch 'functorch' into 'develop'
+    
+    Refactor 'TorchModel' backend code to compute sample-wise gradients.
+    
+    See merge request magnet/declearn/declearn2!42
+
+commit 594dfacb20e4eca7bbb11c02684241bf1dd0bf5d
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Apr 6 11:04:32 2023 +0200
+
+    Minor optimization to 'SklearnSGDModel' backend.
+
+commit be449f942e0869c899e5fa345d4e522e9d1cb4a6
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Mar 17 13:12:56 2023 +0100
+
+    Refactor 'TorchModel' backend code to compute sample-wise gradients.
+    
+    * Cache the functorch-built vmapped functions that compute (and opt.
+      clip) sample-wise gradients.
+    * When available, use `functorch.compile` to try and optimize these
+      functions (resulting in lower execution runtimes on repeated calls
+      thanks to their caching).
+    * Note: with the release of torch-2.0, the `functorch.compile` API,
+      which is experimental as of torch-1.13, is already deprecated.
+      Hence this patch is going to be short-lived - but it may in turn
+      pave the way to the future backend changes to add support for and
+      take advantage of new torch-2.0 features.
+
+commit 46d7492c720ae40c45b6ecbf576fcca4c8208a8f
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Mar 29 16:21:38 2023 +0200
+
+    Fix link to API reference page in README file.
+
+commit a918f2a44db1c1e6017ba73f932306a91d63e9b7
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Wed Mar 29 09:08:16 2023 +0000
+
+    Add coverage statistic capture to CI/CD config.
+
+commit fe92463734bfa05e9d79a3d272a64758cd9ae3a7
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Mar 29 09:49:23 2023 +0200
+
+    Make CI/CD optional 'test-full' non-blocking on main branches.
+
+commit 1bf6a11bd60f5e0b8c79d98238be4500a4ae86f1
+Merge: 34779af d6fe02b
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Tue Mar 28 13:16:43 2023 +0000
+
+    Merge branch 'coverage' into 'develop'
+    
+    Compute coverage as part of CI/CD.
+    
+    See merge request magnet/declearn/declearn2!38
+
+commit d6fe02b426ec8e4cf4699692080c278d2a111ea9
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Mar 3 12:48:15 2023 +0100
+
+    Add coverage collection to GitLab CI/CD.
+
+commit a5eedd4ab2afba621f124b95c1d694948aa4326c
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Mar 3 12:43:59 2023 +0100
+
+    Add coverage computation to 'tox.ini'.
+
+commit c8e04ad0981d7a70c82626c89cad74c31c878886
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Mar 2 17:02:08 2023 +0100
+
+    Configure coverage tool with 'pyproject.toml'.
+    
+    * Add 'pytest-cov' (hence, indirectly, 'coverage') to third-party
+      dependencies of test environments.
+    * Add configuration of 'coverage' to properly target declearn code
+      (excluding auto-generated protobuf code as well as `test_utils`
+      submodule) and be compatible with the use of multiprocessing in
+      some functional~integration tests.
+
+commit 34779af93b74e73a964c251ab5bee7d6552ae951
+Merge: b744ca4 7d08a3c
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Tue Mar 28 12:34:04 2023 +0000
+
+    Merge branch 'tests-gardening' into 'develop'
+    
+    Improve the test suite
+    
+    See merge request magnet/declearn/declearn2!39
+
+commit b744ca4527c14af2bd5355851fd58aa404b29100
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Mar 27 12:03:22 2023 +0200
+
+    Improve API reference navigation in online docs.
+
+commit 08aea92bccb33b066eb555ac8546543017bbba58
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Mar 27 12:02:52 2023 +0200
+
+    Update gitlab-exported 'docs/index.md' file.
+
+commit e2643ad1fb6d621bc9954efb89aad02ea947c33d
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Mar 27 08:01:32 2023 +0200
+
+    Fix formatting of 'Optimizer' main docstring.
+
+commit fec1780b3323ad915dbd72dcffb157dc3952788f
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Mar 24 21:26:29 2023 +0100
+
+    Update links to the public website.
+
+commit ae6ec5cd24030b1ec593bb0b35ec3bf65b72131c
+Merge: 0664076 cec394f
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Fri Mar 24 14:47:48 2023 +0000
+
+    Merge branch 'docs' into 'develop'
+    
+    Restructure the documentation and render docstrings
+    
+    See merge request magnet/declearn/declearn2!40
+
+commit cec394fba05294564a9be273b506dc587571a34d
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Mar 24 15:30:54 2023 +0100
+
+    Fix Quickstart docs formatting.
+
+commit bd89ba1763a8ee8bb009abc6e50ae4785166be00
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Mar 24 15:25:16 2023 +0100
+
+    Remove non-existent website link.
+
+commit 76a08a32e5b601aba109781c16e176d48e2fbf06
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Mar 24 12:02:38 2023 +0100
+
+    Add docs versioning tools.
+
+commit 23c4a34b397e325da3e54d8ebd3ebd9dd4751b4b
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Mar 24 11:59:36 2023 +0100
+
+    Add missing license header.
+
+commit efe77f4260b560243ba300472064dfcb5c347a72
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Mar 24 09:52:33 2023 +0100
+
+    Add "docs" extra deps and remove "all" from "tests".
+
+commit a038bd9fdf199bab560e46e244a0be0423f30742
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Mar 24 09:39:07 2023 +0100
+
+    Move 'gen_docs.py' to the 'scripts' folder.
+
+commit 4f7f292ece6cd5b1d4c8ea5e1b130d5866ccdf87
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Mar 23 12:57:08 2023 +0100
+
+    Refactor developers guide into multiple files.
+
+commit 2a13933e27ebe4050715a158df6033be464a6b38
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Mar 23 12:18:26 2023 +0100
+
+    Add docstrings style-guide to the developers guide.
+
+commit 44b688d709cd8a1002e2725b93c79df58eec9914
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Mar 23 10:08:43 2023 +0100
+
+    Fix "Raises" and "Warns" sections' formatting.
+
+commit 1faf2a2433d3b5790bbd9301ab30cd35a571ce91
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Mar 23 09:50:12 2023 +0100
+
+    Fix multi-references rendering.
+
+commit 131eb4e512053e7ef7fcd5de597fced7c0d79e23
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Mar 22 18:13:57 2023 +0100
+
+    Add LaTeX rendering to the mkdocs config.
+
+commit de829563723257e2bc690b8774fcf1ce513712fc
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Mar 22 18:13:29 2023 +0100
+
+    Improve docstrings' formatting based on mkdocs rendering.
+
+commit fa55e88cb5c3e2a455c5c9473aa9f065c53b6d86
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Mar 22 14:51:44 2023 +0100
+
+    Revise formatting of module docstrings for mkdocs parsing.
+
+commit c1eecc64221dfe44ff5e068cedc031121970d3c4
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Mar 22 14:48:37 2023 +0100
+
+    Update the API reference docs generation policy.
+
+commit 35b5fa4660d92181d3c361d238332d02807e1a06
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Mar 16 11:38:19 2023 +0100
+
+    Add information on building the docs.
+
+commit 9723f8e2c1299adea076e7c93e84a4e848042708
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Mar 15 13:21:23 2023 +0100
+
+    Add website- and API-Reference-generation tools.
+    
+    * Write a `gen_docs.py` script that automatically updates the
+      `docs/index.md` file based on the `README.md` one, and more
+      importantly creates the `docs/api-reference/` markdown files
+      by parsing through the declearn source code.
+    * Set up a `mkdocs.yml` file to render the documentation (both
+      static and dynamically-generated) into a website.
+    * Add `SUMMARY.md` files and enhance `index.md` ones to benefit
+      from the mkdocs-literate-nav plugin when building the website.
+
+commit b980c9330a9fb93201407ccebfb7de561bdd5863
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Mar 15 13:20:50 2023 +0100
+
+    Add "docs" folder and distribute README content within it.
+    
+    * Split the increasingly-long README content into multiple files
+      and structure them under the new "docs" folder.
+    * Improve the formatting of some of the files, notably based on
+      their rendering by the mkdocs website-generation tool.
+    * Write a placeholder file for the API reference.
+
+commit 066407647c1f1a126e48b17121160a95efbc5a8c
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Wed Mar 15 09:30:00 2023 +0100
+
+    Checking process is alive before closing in multiprocessing
+
+commit 7d08a3c506cecf97ed990d9b74e23d9bebaa47eb
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Mar 14 18:03:20 2023 +0100
+
+    Fix 'localhost' specification in tests for the CI.
+
+commit 9951b76ecd7febfac2f4dc7e225b7f2a702c95e0
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Mar 13 17:28:07 2023 +0100
+
+    Re-implement unit tests for communication routines.
+
+commit ccaf21daced87ccb702fcad454d5343f4a75d98e
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Mar 6 16:39:03 2023 +0100
+
+    Fix 'WebsocketServer.stop'.
+
+commit 957d40d7652902dc9e6c3595d06cd94dd44cd90d
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Mar 6 16:38:35 2023 +0100
+
+    Minor docstring formatting fix.
+
+commit e71cabba642688c1ff82cb7090a0353a7d025c57
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Mar 3 18:23:48 2023 +0100
+
+    Implement generic unit tests for 'NetworkServer'.
+    
+    Note: these tests somewhat fall into the issue of being redundant
+    with the souce code, especially as they do not really test that
+    communications really work.
+    
+    The next effort will therefore be to try and rewrite client-server
+    routines unit tests, after which the present tests will be skimmed.
+
+commit 5fe5ed7ca8af9c86c726878df9337feef79f95cc
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Mar 14 16:44:15 2023 +0100
+
+    Add a '--cpu-only' mode for unit tests.
+
+commit 45def4ed8707d80e50f412397749a781c258069e
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Mar 14 16:43:39 2023 +0100
+
+    Ensure multiprocessed functional tests run on CPU.
+
+commit fce0bb75d2da36b87234ed55c470e5f1997ca395
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Mar 14 16:43:14 2023 +0100
+
+    Enable running `test_regression.py` with missing frameworks.
+
+commit 9ce1ef7d827323767c56d05104533e067af25e3b
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Mar 13 17:48:35 2023 +0100
+
+    Add missing license header to 'test_regression.py'.
+
+commit 9229751096aeb9acbfba777ee0dc0df42766c4d6
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Mar 13 15:33:04 2023 +0100
+
+    Fix some docstring typos and errors.
+
+commit e2b855e4838b1435e79113bbb9a29f7f49fa2000
+Merge: fb86f06 9dd5fcc
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Mon Mar 13 14:10:47 2023 +0000
+
+    Merge branch 'improve-multiprocessing' into 'develop'
+    
+    Improve `run_as_processes` to capture exceptions and outputs.
+    
+    See merge request magnet/declearn/declearn2!37
+
+commit 9dd5fcc4712b72631129cf4577a4350b57c58f74
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Mon Mar 13 14:10:47 2023 +0000
+
+    Improve `run_as_processes` to capture exceptions and outputs.
+    
+    * Add exceptions and outputs catching to multiprocessed routines.
+    * Change the output signature of `run_as_processes` to return a bool
+      flag indicating success, and a list of routine-wise output value or
+      RuntimeError (that may either result from an actual failure or from
+      the process having been interrupted due to another one's failure).
+    * Add `auto_stop` parameter to enable disabling the default automated
+      interruption of processes once any of them has failed.
+
+commit fb86f06661014bf2f90a910d2b767f1b58929835
+Merge: 35ec6c7 afaee4f
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Wed Mar 8 15:01:57 2023 +0000
+
+    Merge branch 'jax-dataset' into 'develop'
+    
+    Adding data_type to DataSpecs
+    
+    See merge request magnet/declearn/declearn2!36
+
+commit afaee4f028bb1c742660d92165ce2e83bb46ea0e
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Mar 8 14:47:54 2023 +0100
+
+    Mitigate and document 'DataSpecs' API changes.
+
+commit 5864510d39aa11954cbe99feb0b894efe9c57f2f
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Mar 8 12:48:39 2023 +0100
+
+    Polish up data-info fields' revision.
+    
+    Data-info fields:
+    * Rename "single_input_shape" to "features_shape".
+    * Move deprecation warnings to `combine` classmethod as the data-
+      info fields are never instantiated.
+    * Make these deprecation warnings more verbose.
+    * On the side, remove some redundant-with-parent type hints.
+    
+    Models:
+    * Have "features_shape" verification happen for both regression
+      and classification variants of `SklearnSGDModel`.
+    * Remove requirement for "n_samples" in `TensorflowModel`.
+
+commit 0f4eced5d78b8da09c0db2db8e8cf4ced1a68f0c
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Tue Mar 7 12:15:10 2023 +0100
+
+    Applying corrections after MR review:
+    * Re-introducing deprecated `DataField` subclasses with a warning
+    * Other minor changes, to `sklearn` and `tf` models, and `DataTypeField`
+
+commit 83204307d99a0e72631572f835e5267a0e7c79a9
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Mon Mar 6 18:19:06 2023 +0100
+
+    Replacing `n_features` by `single_input_shape` and propagating changes in relevant files
+
+commit a4da6fdbb9a3251b3df4fd9406d377fcedde5ed7
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Mon Mar 6 16:24:48 2023 +0100
+
+    Correcting tf code (in part) to not use data_shape, for reference purposes
+
+commit 38cf844fa8c0642c2304d13d3b0db12558d91edd
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Thu Mar 2 14:26:44 2023 +0100
+
+    V0 of adding data_type to DataSpecs
+
+commit 35ec6c7275b061dce44dbeabce05c23f1d4a509c
+Merge: 1d6f499 c6447a5
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Thu Mar 2 14:47:04 2023 +0000
+
+    Merge branch 'modularize-heart-example' into 'develop'
+    
+    Modularize "heart-uci" example for its real-life deployment.
+    
+    See merge request magnet/declearn/declearn2!34
+
+commit c6447a5d176a29fe6fbe61b37e56581629f1d713
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Thu Mar 2 14:56:19 2023 +0100
+
+    Minor typos
+
+commit 1d6f4992211a346b0549c20dda420a8449ffff91 (tag: v2.1.0)
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Mar 2 09:46:36 2023 +0100
+
+    Bump version to 2.1.0.
+
+commit be743fe9466a98d99102af35517c02df0b55526b
+Merge: 2babbf1 300a1a8
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Thu Mar 2 08:36:07 2023 +0000
+
+    Merge branch 'toy-regression' into 'develop'
+    
+    Functional test of regression
+    
+    See merge request magnet/declearn/declearn2!28
+
+commit 300a1a81f881750bf50937a79e298c6186e0b923
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Feb 21 10:51:43 2023 +0100
+
+    Document 'penalty="none"' option for 'SklearnSGDModel'.
+
+commit 478d8c4e5bb0e7008daf57183d152ce70f0e6d2b
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Mon Feb 13 10:32:13 2023 +0100
+
+    Add a toy regression functional test, checking convergence on simple data
+
+commit 2babbf18b13e894b87ce6217966c338811b104d1
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Mar 1 16:15:26 2023 +0100
+
+    Fix 'TensorflowModel.apply_updates'.
+
+commit 62683d6336dc7f9af767e30addb85e775fd73800
+Merge: fec1fa0 0585e4c
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Wed Mar 1 14:08:39 2023 +0000
+
+    Merge branch 'branching' into 'develop'
+    
+    Revise git branching strategy.
+    
+    See merge request magnet/declearn/declearn2!35
+
+commit 0585e4ca3c63468cb4a03b457a23a0c7dbd6f9c0
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Wed Mar 1 14:08:39 2023 +0000
+
+    Revise git branching strategy.
+    
+    * Keep "develop" as principal (~main) branch where to push new features,
+      hence acting as a nightly stable version.
+    * Drop "main" branch from the strategy as its name was misleading.
+    * Introduce "rX.Y" release branches, that need protection and CI/CD.
+
+commit fec1fa06192ce64d173ea3394bb0800451cb05db
+Merge: 89f940c ec4f3e1
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Wed Mar 1 13:36:06 2023 +0000
+
+    Merge branch 'indexed-slices' into 'develop'
+    
+    Enhance support for 'tf.IndexedSlices' in 'TensorflowVector'.
+    
+    Closes #17
+    
+    See merge request magnet/declearn/declearn2!33
+
+commit ec4f3e17b80d6df6945e8ea3990fda11b468b6b0
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Wed Mar 1 13:36:06 2023 +0000
+
+    Enhance support for 'tf.IndexedSlices' in 'TensorflowVector'.
+    
+    * Implement a public util to wrap tensorflow operations in order to preserve
+      `tf.IndexedSlices` structures and run appropriate computations with them.
+    * Deploy the former wrapper to cover all usual operations in the backend of
+      `TensorflowVector`.
+    * Refactor the use of the device-placement-handling wrapper in the backend of
+      `TensorflowVector` to reduce runtime overheads and factor it with the new
+      indexed-slices-handling wrapper.
+
+commit 89f940cedd00b353155de9d31fa57d8f76eaf85f
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Mar 1 14:17:28 2023 +0100
+
+    Add a seed to 'test_rsquared.py' to avoid random failures due to numerical precision.
+
+commit 13459d5981739e70b8cb6d0a578fac6f6988d3d8
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Jan 4 16:25:34 2023 +0100
+
+    Deploy `make_importable` to the Heart-UCI example scripts.
+
+commit b7f2f1f7e9637a82f4da27a6faa4d05b09aafd5e
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Jan 4 16:24:56 2023 +0100
+
+    Implement the `make_importable` test-util context manager.
+
+commit 7a37aa52cb5b78d34800551b29cc5d8381487885
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Nov 25 16:28:07 2022 +0100
+
+    Refactor argparse code from the heart-uci example.
+
+commit d73f2331de5fd590aeca9c40c4db18381aa6f820
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Nov 24 17:16:19 2022 +0100
+
+    Modularize "heart-uci" example for its real-life deployment.
+    
+    * Add optional parameters to the Python functions and the argparser
+      so as to enable running the UCI-Heart-Dataset examples over an
+      actual network.
+    * Make the documentation more verbose about these options, and the
+      difference between localhost-based simulations and real-network
+      use.
+    * Rationale: having a minimal example to run is a valuable feature
+      when deploying declearn to a new machines~network setting, so as
+      to quickly assess (and/or debug) the framework's usability.
+
+commit 71debe68a72e4a067e8d09d4080c04e96ff7c6f6
+Merge: 10d8a40 622d241
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Tue Feb 28 15:48:00 2023 +0000
+
+    Merge branch 'scaffold-update' into 'develop'
+    
+    Change 'ScaffoldClient.collect_aux_var' behavior on unused module.
+    
+    See merge request magnet/declearn/declearn2!31
+
+commit 10d8a40db4fa67967d388fcce5f7a1d249c073a1
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Feb 27 17:11:41 2023 +0100
+
+    Optimize 'TensorflowModel.apply_updates'.
+
+commit 915bd4280766009b0b383c321674e77292529378
+Merge: 3c82f5c 76ed2a4
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Thu Feb 23 17:13:14 2023 +0000
+
+    Merge branch 'hacky-optim' into 'develop'
+    
+    Implement framework-specific OptiModule subclasses.
+    
+    See merge request magnet/declearn/declearn2!15
+
+commit 76ed2a406f4aeefc46fc2bdee5fb1303c33e0b93
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Feb 23 16:43:27 2023 +0100
+
+    Improve 'declearn.model' docstring and add some missing '__all__'.
+
+commit 3d63f26d89446b3008f7038cef0f06738c2625b8
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Feb 23 16:39:01 2023 +0100
+
+    Implement 'TensorflowOptiModule' optimizer plug-in.
+
+commit 16511fc8bddbf99ba62c7423c85e532157c83c72
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Feb 23 16:35:54 2023 +0100
+
+    Implement 'TorchOptiModule' optimizer plug-in.
+
+commit 206302d06e855426311abee14f2454b961141038
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Feb 23 16:34:56 2023 +0100
+
+    Refactor 'TestOptiModule' to enable subclassing.
+
+commit 861447a25dd0edcab55208d278d70a62d4ff0c69
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Feb 23 16:27:19 2023 +0100
+
+    Fix optimizer plug-ins' framework-equivalence test.
+
+commit 2a61cd47923c381e4c85bcc42222cfd866e526bf
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Feb 23 15:25:17 2023 +0100
+
+    Fix the (un)packing of scalar tensors in 'Vector' subclasses.
+
+commit a6fc24859a565ec5c3ab39b4fcbb64d7b559193c
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Feb 23 16:19:09 2023 +0100
+
+    Use new assertion utils in existing unit tests.
+
+commit 0420531a9e50b28d1d6214e4da53ef60ada29cd7
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Feb 23 15:24:09 2023 +0100
+
+    Implement assertion functions that complexify 'a == b'.
+    
+    The implemented functions are a convenience to reduce boilerplate
+    code in unit tests, and improve the existing JSON-serializability
+    check.
+    They notably support comparing numpy arrays (optionally tolerating
+    small absolute discrepancies), and ignoring tuple-list type change
+    that typically result from JSON-serialization.
+
+commit 1fbecfacfed035d64d6fb316a9c8a62fc9553094
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Feb 23 15:23:49 2023 +0100
+
+    Add a generic functional test for `OptiModule.set_state`.
+    
+    * Add `test_set_state_results` to verify that resetting a modules' state
+      enables running the same computation twice. This should enable detecting
+      cases when information is missing from the returned state dict.
+    
+    * Note that at the moment noise-addition modules are ignored. We could look
+      into a way to access and restore RNG states (when CSPRNG is not used).
+
+commit 74d6808f29b56987fc93149f59bee33c38ff27d7
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Jan 12 17:48:42 2023 +0100
+
+    Adjust TensorflowVector square and square root computations.
+    
+    For some reason, `tf.square(x)` and `tf.pow(x, 2)` can result in
+    distinct values for small-enough values of x. The same is true of
+    `tf.sqrt(x)` and `tf.pow(x, 0.5)`.
+    
+    This commit ensures the `tf.sqrt` and `tf.square` functions are
+    used in these two edge cases for the `vector ** p` syntax. This
+    choice is motivated by the fact that these functions are used
+    in most official tensorflow / keras code, and seem to be closer
+    to their torch counterparts (which are equivalent to `vec ** p`)
+    than `tf.pow` - based on a few local tests.
+
+commit 3c82f5ce719668a64d0af4ccce6fd7b9c6c0187a
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Feb 22 18:35:53 2023 +0100
+
+    Make network communication dependencies optional.
+    
+    This removal was supposed to be part of a past commit
+    (cd1d0cb137b74c6baec397c703f4d1c8830427c4) but had in
+    fact not been properly finished.
+    
+    With this commit, install declearn no longer results
+    in the automatic installation of gRPC and websockets,
+    which are properly relegated to being optional, user-
+    triggered-installation, dependencies.
+
+commit dba20501715e4498b9f58dbb0f02d67d4407586e
+Merge: ae0c079 28865db
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Wed Feb 22 14:53:56 2023 +0000
+
+    Merge branch 'handle-frozen-weights' into 'develop'
+    
+    Enable skipping frozen weights when using `Model.get_weights` and `Model.set_weights`
+    
+    Closes #15
+    
+    See merge request magnet/declearn/declearn2!29
+
+commit 28865db8e5b7a6209e8951ea5982a3301d8ca772
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Wed Feb 22 14:53:55 2023 +0000
+
+    Add 'trainable' argument to 'Model.get_weights' and 'Model.set_weights'.
+    
+    This commit squashes the following modifications:
+    
+    * Add `trainable` argument to `Model.get_weights`:
+      - Add `trainable: bool = False` argument to `Model.get_weights`,
+        enabling accessing only trainable weights of a neural network
+        (or any model that supports using frozen weights).
+      - Use the former to fix support for models with frozen weights by
+        the `Optimizer`'s weight-decay and loss-regularization plug-ins.
+      - Add unit tests for `get_weights(trainable=True)` to the Torch
+        and Tensorflow Model tests.
+    
+    * Add `trainable` argument to `Model.set_weights`:
+      - Add `trainable: bool = False` argument to `Model.set_weights`, enabling
+        to update model weights with the exclusion of frozen ones.
+      - Improve the documentation and exception-raising of `Model.set_weights`.
+        Notably refactor some code into a private util used by tensorflow and
+        torch models' backend code.
+      - Add some related tests to the tensorflow and torch Model test suites.
+        Note that there is redundancy that could be tackled later, as part of
+        an effort to improve the `Model` test suite template.
+    
+    * Restrict round-wise weights sharing to trainable weights:
+      - Update `FederatedClient`, `FederatedServer` and `TrainingManager`
+        so that only the trainable model weights' values and updates are
+        communicated during training and evaluation rounds.
+      - This reduces communication costs when some weights are frozen.
+      - This also avoids including non-trainable weights in server-side
+        optimization computations (which should have resulted in zero at
+        any rate, properly leaving these weights unaltered -- but may not
+        have done so in the rare case when weight decay or regularization
+        was used on the server side).
+    
+    * Add 'MLP-tune' test case for 'TorchModel' and 'TensorflowModel':
+      - This case is the same as the base MLP, but with a frozen first layer.
+      - This case would fail if the `get_weights(trainable=False)` was badly
+        implemented (or used), since the gradients-and-weights comparison in
+        the `Model.apply_updates` test would raise an error.
+    
+    * Improve unit test for 'Optimizer.compute_updates_from_gradients':
+      - Ensure the pipelined plug-ins were called in proper order and
+        with proper input values. In other words, test the formula.
+      - Ensure the model weights are only accessed once, and with the
+        proper restriction to trainable weights.
+
+commit ae0c0796531b468b101a82bcfa10371316d51019
+Merge: 73f4d1e f370dad
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Wed Feb 22 14:27:37 2023 +0000
+
+    Merge branch 'gpu-support' into 'develop'
+    
+    Improve GPU support for TensorFlow and Torch
+    
+    Closes #11
+    
+    See merge request magnet/declearn/declearn2!24
+
+commit f370dadcf03d709574170ea1c2eef9286398b07a
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Feb 22 14:23:14 2023 +0100
+
+    Fix 'Vector' backend to enable 'numpy + tensor' operations.
+
+commit 5c1dc54af469202de6917846aa3e9398632a2f6f
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Tue Feb 21 17:13:29 2023 +0100
+
+    Improve the documentation of GPU support and of 'Vector' subclasses.
+    
+    Co-authored-by: Paul Andrey <paul.andrey@inria.fr>
+
+commit cce29e1ac2facef777d457f1e9339f1adea520b7
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Feb 16 13:17:13 2023 +0100
+
+    Document GPU support in the README.
+
+commit 996b22a636da5de015c645bce2b6c1038727beb3
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Feb 16 12:34:44 2023 +0100
+
+    Enhance unit tests to take device-placement policy into account.
+    
+    Core changes to the global test suite:
+    * Add some device-placement verifications to the generic Model test
+      suite. This should be refactored into more unitary tests as part
+      of a distinct effort to revise and improve this test suite.
+    * For TensorFlow and Torch, parametrize the whole test suite to run
+      either on CPU and GPU, and run it once per available device type.
+    * Ensure Vector and OptiModule unit tests run on CPU.
+    
+    Changes to some 'Model' tests to run on GPU:
+    * `test_compute_batch_gradients_np`: allow for small numerical
+      discrepancies that may result from running the test on GPU.
+    * `test_apply_updates`: correct the test, that had not been
+      updated since `Model.get_weights` stopped to systematically
+      use `NumpyVector` as return type.
+    
+    Changes to 'TorchModel' tests to run on GPU:
+    * Override `test_serialization` due to torch-serialization relying
+      on pickle. Replace pickles' comparison with a more shallow (but
+      less susceptible to fail for unknown reasons) test that ensures
+      a reloaded model shares the same structure of modules.
+
+commit 098c26e6b6f2a8fc1c26c0658be8e84c5b5f50af
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Feb 16 11:04:29 2023 +0100
+
+    Abstract GPU-related methods into the Model API.
+
+commit c8a3dbb64e0fa75db51e4a50b6e53edbdbfb0b42
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Feb 10 17:09:36 2023 +0100
+
+    Add GPU support for TensorFlow.
+    
+    * Add `declearn.model.tensorflow.utils` submodule. Move existing `build_keras_loss`
+      function into it, and implement the following new utils:
+      - move_layer_to_device:
+          Create a copy of an input keras layer placed on a given device.
+      - preserve_tensor_device:
+          Wrap a tensor-processing function to have it run on its inputs' device.
+      - select_device:
+          Select a backing device to use based on inputs and availability.
+    * Add device-management to `TensorflowModel`:
+      - Copy the input model to (or deserialize reloaded one onto) a device selected
+        based on the global device-placement policy.
+      - Add `with tf.context(device)` instructions in public methods that require it.
+      - Add the `TorchModel.update_device_policy` method to enable changing the backing
+        device for computations (following what was done for `TorchModel`).
+    * Add device-management to `TensorflowVector`:
+      - Ensure all operations applied to the wrapped tensors occur on the device backing
+        these tensors (which may vary from tensor to tensor).
+      - Overall, ensure the specification as to tensors' device-placement are the same
+        as those of the current `TorchVector`, and document them.
+
+commit c768efed918c70ad1fd8980ecdb78dbf4c7e420d
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Feb 9 14:19:45 2023 +0100
+
+    Add GPU support for torch.
+    
+    * Add `declearn.model.torch.utils` submodule, that currently provides with:
+      - AutoDeviceModule:
+          Wrapper for a `torch.nn.Module` automating device-management.
+      - select_device:
+          Select a backing device to use based on inputs and availability.
+    * Add device-management to `TorchModel`:
+      - Wrap the model and loss function modules using `AutoDeviceModule`.
+      - Add `tensor.to(device)` instructions in places that require it.
+      - Consult the global `DevicePolicy` as part of `TorchModel.__init__`
+        so as to automatically place the wrapped model and computations.
+      - Add the `TorchModel.update_device_policy` method to enable changing
+        the device policy to an input one or to the global one (that may have
+        changed since the model was first instantiated).
+    * Add device-management to `TorchVector`:
+      - Ensure `TorchVector.__eq__` transcends device-placement.
+      - Ensure combining with a `NumpyVector` works regardless of device-placement.
+      - Implement a device-placement rules when combining two `TorchVector`: move
+        tensors from the right-hand vector to the device backing the left-hand one.
+      - Document the former rule, as well as the current limitation that device-
+        placement information is lost through serialization, resulting in reloaded
+        vectors being placed entirely on CPU.
+      - Ensure unpacking a `TorchVector` from a serialized dump results in placing
+        it on a device that abides by the global `DevicePolicy`.
+    
+    Note on the consequence to support GPU-backed training and evaluation:
+    * A `TorchModel` placed on GPU will handle moving its input data there, so that
+      output gradients are backed on GPU (but output numpy predictions are moved to
+      CPU).
+    * The processing of gradients into updates will be kept on GPU as long as there
+      is no `output = operation(cpu_vector, gpu_gradients)` operation in that flow.
+      The latter could for example happen as part of an optimizer plug-in that uses
+      deserialized state (or auxiliary variable) vectors, in the rare case when the
+      global device policy is not in line with that of the model.
+    * Input updates to a `TorchModel` may be placed on any device, and will preserve
+      its initial placement (whether via `apply_updates` or `set_weights`).
+
+commit dd029d78e4bbb763c5c6710ee1b545365ba08904
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Feb 10 12:12:55 2023 +0100
+
+    Add device-placement policy utils.
+
+commit 73f4d1eb361f56da01b445bf10faee5322f11583
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Feb 20 14:34:19 2023 +0100
+
+    Add SAN capabilities to 'generate_ssl_certificates'.
+    
+    * Add the `alt_ips` and `alt_dns` optional parameters to the
+      `declearn.test_utils.generate_ssl_certificates` function,
+      that enable configuring the created server certificate to
+      cover alternative IP addresses or DNS names, using Subject
+      Alternative Name (SAN) extensions.
+    * Refactor the entire function to ease the readability and
+      maintainance of the backend code.
+    * Improve the function's documentation.
+
+commit de0bbbc5cbf095b029ea570a07c817069114c2d1
+Merge: 30f1230 cdd004f
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Feb 20 09:49:21 2023 +0100
+
+    Merge branch 'main' into develop
+
+commit 30f1230f2fee1ff364ddb9bffb8708039aeb5418
+Merge: 430be0f 9a9ffe7
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Fri Feb 17 12:08:30 2023 +0000
+
+    Merge branch 'r2' into 'develop'
+    
+    Implement the 'RSquared' metric
+    
+    See merge request magnet/declearn/declearn2!30
+
+commit 9a9ffe7d769a4f17ba95231cb7d78c0f9a45d3e1
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Feb 17 12:15:10 2023 +0100
+
+    Deprecate 'Metrics.normalize_weights'.
+
+commit 647a59b07e317d3d9c900749a5c0cc26710106a7
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Feb 17 12:01:11 2023 +0100
+
+    Fix formatting of Metric test files.
+
+commit 062f55840faae0f1290d57642a9c03df2885ad0b
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Feb 17 11:57:12 2023 +0100
+
+    Finalize RSquared Metric implementation and unit tests.
+    
+    * Rename R2 to RSquared out of compliance with PEP-8.
+    * Improve states' naming and documentation to improve readability.
+    * Rename backend files out of clarity.
+    * Add RSquared to the `declearn.metrics` module docstring.
+    * Refactor copy/pasted code from MeanMetric to RSquared.
+    * Improve unit tests:
+      - use regression-like data and actual sample weights
+      - use scikit-learn to compute the reference score (test our maths)
+      - remove redundant or useless code to set up the test suite
+
+commit ab1320f1f20073a1475fa6422e500116826f23ee
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Mon Feb 13 15:17:07 2023 +0100
+
+    First implementation of R2 Metric.
+    
+    * This squashed commit comprises the result from an iterative effort
+      to implement the R-squared evaluation metric for regression tasks.
+    * It comprises a working implementation of the metric, as well as
+      associated unit tests.
+    * It does not pass linter tests.
+
+commit 622d24169613f9af9a98f9e3b15412e0e0b95368
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Feb 17 12:24:04 2023 +0100
+
+    Change 'ScaffoldClient.collect_aux_var' behavior on unused module.
+    
+    * Until now, calling the `collect_aux_var` method of a `ScaffoldClient`
+      module that had not processed any gradients raised a RuntimeError.
+    * This commit changes that behavior for something less stringent:
+      warn a RuntimeWarning that such a call is unexpected, but return
+      a conventional, zero-valued scalar state.
+    * Conversely, upon receiving such states, `ScaffoldServer` ignores the
+      client (i.e. it is not part of the global state's update calculation).
+    * The rationale behind this change is that it may happen that a client
+      does not perform any optimization step, e.g. due to their DP budget
+      having been saturated. In that case, we do not want the FL process
+      to crash, but rather the client to be ignored as part of the update
+      process.
+
+commit cdd004f7e053f4887feb8dda67e1a731c00fb835
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Tue Feb 14 10:17:24 2023 +0000
+
+    Fix the main docstring of 'BinaryRocAUC'.
+
+commit 430be0f9cdde30b065523eeb5b7aea6933b45ce1
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Feb 13 15:34:50 2023 +0100
+
+    Add 'develop' branch to our git branching strategy.
+
+commit efbd18d0dc86530f22455d0fab25edad96af3fe1 (tag: v2.0.1)
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Feb 13 10:30:41 2023 +0100
+
+    Update version to 2.0.1
+
+commit 18238f188200a52aebd570f1b9c73518933082e8
+Merge: e8afbe1 1e388de
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Mon Feb 13 09:15:10 2023 +0000
+
+    Merge branch 'hotfix-warn-frozen-weights' into 'main'
+    
+    Warn about frozen weights use in `TensorflowModel` and `TorchModel`.
+    
+    See merge request magnet/declearn/declearn2!27
+
+commit 1e388de1aeae7a0c730858e946b911f9d36cffbf
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Feb 10 19:01:14 2023 +0100
+
+    Warn about limited support for frozen neural network weights.
+
+commit e8afbe1b6d8471d8efb33ad94da89318579a95bb
+Merge: 7155419 261ab37
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Fri Feb 10 17:51:20 2023 +0000
+
+    Merge branch 'hotfix-tf-gradient-names' into 'main'
+    
+    Fix `TensorflowModel` gradients' labeling.
+    
+    Closes #14
+    
+    See merge request magnet/declearn/declearn2!26
+
+commit 261ab37917e4f164e3f1d1f3ca996ece3f953c71
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Feb 10 18:17:58 2023 +0100
+
+    Add gradients-labeling check to the Model test suite.
+
+commit c55a3265bfcc4bd5a86a965d18bd342e99ea6b98
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Feb 10 18:09:44 2023 +0100
+
+    Fix the labeling of output gradients in `TensorflowModel`.
+
+commit 715541977806752e6b14570fbc54000acf524fda
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Feb 8 10:18:14 2023 +0100
+
+    Add license header to 'test_vector.py'.
+
+commit 108463839e8abac16427991a7d59a35a93edfbe9
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Feb 7 12:07:52 2023 +0100
+
+    Garbage-collect unused 'type: ignore' comments.
+
+commit cd8e394fe8b1dfa4c6965bae86e7a2a268d636d0
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Feb 7 11:40:59 2023 +0100
+
+    Update mypy to version 1.0 and deploy Self type-hint.
+
+commit 203dce04c946fc8c082b7478995a8fd92ed1f3d9
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Feb 7 11:09:22 2023 +0100
+
+    Correct some docstrings to comply with PEP 257.
+
+commit 111339961f23183112d3bbc95a37d1794ddef808
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Feb 7 10:11:43 2023 +0100
+
+    Update installation instructions.
+
+commit 22f6b996cec4cab51fee1a0783d2965530cdafdb (tag: v2.0.0)
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Feb 6 17:26:05 2023 +0100
+
+    Fix pypi classifiers.
+
+commit 0237f15137a6cf8ab0b5721c73ea1cf1ed14b227
+Merge: ddc0402 8b08248
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Mon Feb 6 16:06:13 2023 +0000
+
+    Merge branch 'release-todo' into 'main'
+    
+    Release version 2.0
+    
+    See merge request magnet/declearn/declearn2!23
+
+commit 8b0824831546d2e1cf94f9d7051b838b1a8526b2
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Feb 6 16:46:49 2023 +0100
+
+    Update pyproject.toml metadata.
+
+commit 90a6f0ee7aa64488d25f0959e5d2491f677c68f8
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Feb 6 16:45:26 2023 +0100
+
+    Add a missing 'type: ignore' comment.
+
+commit 57419237345991b3d5a68cab6601db192f315dc8
+Merge: 92e82db 9ee99bc
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Mon Feb 6 15:40:43 2023 +0000
+
+    Merge branch 'test-vector' into 'release-todo'
+    
+    Adding unit tests for vectors
+    
+    See merge request magnet/declearn/declearn2!22
+
+commit 9ee99bc8c4db1292f5d80d72040df6fc07dd26fe
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Mon Feb 6 15:40:43 2023 +0000
+
+    Adding unit tests for vectors
+
+commit 92e82dbff6c02542ce39281bb8f8322f3d34098c
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Mon Feb 6 15:23:40 2023 +0100
+
+    Reviewing doc
+
+commit 0077dde9db8aa515c3631c2d19743eeb13b3541d
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Feb 6 15:07:51 2023 +0100
+
+    Add AUTHORS file.
+
+commit d91a42565d18ea2467f916331bb194a0a7bd584e
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Feb 6 15:01:37 2023 +0100
+
+    Update package version and classifiers.
+
+commit b72856ac795927f95e57784f7cab4d837e3c99a6
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Feb 6 14:58:17 2023 +0100
+
+    Enhance some `Vector` docstrings.
+
+commit 95c4191e3f8e43164e94c020dbd76682ea36c4aa
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Feb 6 12:05:32 2023 +0100
+
+    Add Apache-2.0 license file, headers and information.
+
+commit 6360878f27a504818ca1a5429ce5ec4a42a1fb05
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Feb 6 11:12:10 2023 +0100
+
+    Modularize tests' execution based on frameworks' availability.
+
+commit d846802c5a809b6b0bf2cd69c6f085ae8999e403
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Feb 6 10:00:11 2023 +0100
+
+    Drop support for Python 3.7.
+    
+    Support for Python 3.7 had been envisioned and partially documented,
+    but had not been tested for a while. As it turns out, some of the
+    `typing` functionalities the generic TOML-parsing system relies upon
+    were only introduced in Python 3.8. Since rewriting this code would
+    be tedious without these utils, and since official support for py37
+    ends in less than six months, it was decided not to support it for
+    declearn.
+
+commit 5c8c649917aad05eb4dd3b4cf80d53d8a26c5d41
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Feb 6 09:51:42 2023 +0100
+
+    Add some missing 'type: ignore' comments.
+
+commit b3b75a7aa970c15a383ccdf306676e23f492db16
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Feb 3 17:38:39 2023 +0100
+
+    Update black to version 23.
+
+commit b752723ceadf984335d7fdd8506af0155defc691
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Fri Feb 3 15:14:08 2023 +0100
+
+    Fix some errors in `NumpyVector.sum` and `TorchVector.maximum`.
+
+commit a8fa357c19248119cb91f62c475a59f738f4c864
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Feb 3 15:12:35 2023 +0100
+
+    Collect some unused statements.
+
+commit 06f0092b4eeebcc0d4a7f8f9f49aeba22d8c7156
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Feb 3 15:02:22 2023 +0100
+
+    Remove deprecated `Model.compute_loss` method.
+
+commit 464e1c416c91a3aadea2ab48ac365ac6d83f9c93
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Jan 16 17:41:57 2023 +0100
+
+    Fix some docstring and code typos.
+    
+    * Fix FLRunConfig handling of `register=<int>` inputs.
+    * Fix docstring typo in `OptiModule`.
+    * Fix typos in server-side code sample in README file.
+
+commit 7bd717fd3040f021b5963e9a432f3839f65a857a
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Thu Feb 2 16:12:15 2023 +0100
+
+    Remove superflous `return NotImplemented` and `return None` in abstract methods.
+    
+    Note: kept the `raise NotImplementedError` statements.
+
+commit 2db25bbe33fc9249d70b647da025be96f282f7f4
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Thu Feb 2 15:54:44 2023 +0100
+
+    Rename some unexposed functions to make them private.
+    
+    Reviewed all 58 `__all__`, found no error, renamed some methods
+    as private since they were not used outside of the file.
+
+commit 87cc9d7a9972b5514ea5bffc4495ff6f785999d7
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Thu Feb 2 15:34:36 2023 +0100
+
+    Add `super().__init_subclass__()` calls.
+    
+    This commit implements minor changes to stick to the python doc
+    (https://docs.python.org/3/reference/datamodel.html?highlight=__init_subclass__#object.__init_subclass__).
+    
+    Co-authored-by: Paul Andrey <paul.andrey@inria.fr>
+
+commit aee79fc11ae62af7dc936d203af5bc7d9015b015
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Thu Feb 2 13:49:12 2023 +0100
+
+    Add NoReturn type-hints
+    
+    NoReturn type is only meant for functions that never return normally, so
+    quite a rare occurence (https://peps.python.org/pep-0484/#the-noreturn-type).
+    
+    Manually scanned the 250 raise statements. Only changed two `_raise_...` methods
+    in `main/utils/data_info.py`.
+    Other places were it could be relevant:
+    * `message_pb2_grpc.py` > big ' DO NOT EDIT" in there so did not touch
+    * `api/_vector.py` > abstract methods raising a `NotImplementedError`,
+      the current convention seems to be using the expected implementation
+      type, so I did not change
+
+commit 21f9b0d96efcfa2f0286bc96db56aeb61bf93d80
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Wed Feb 1 17:29:25 2023 +0100
+
+    Add ClassVar type-hints.
+    
+    Details :
+    * In `/optimizer`, `/metrics`, and `/aggregator` :`name` and `aux_name`
+    * In `/communications` : `protocol`
+    * In `/dataset` : `_type_key`
+    * In `/data_info` : `field`, `type`, and `doc`
+    
+    Excluding all classes decorated with `@dataclasses.dataclass`,
+    see https://stackoverflow.com/a/52099457
+
+commit ddc04028c8424d4e45ebb2950b0bd521c3ea6bac
+Merge: 5f23f93 4cf8b54
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Thu Feb 2 14:26:19 2023 +0000
+
+    Merge branch 'revise-checkpointer' into 'main'
+    
+    Revise `Checkpointer`.
+    
+    See merge request magnet/declearn/declearn2!21
+
+commit 4cf8b5496b9437c575b31eee5b85a04995a3f590
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Thu Feb 2 14:26:18 2023 +0000
+
+    Revise `Checkpointer`.
+    
+    * Rewrite the `declearn.main.utils.Checkpointer` util.
+      - Implement Model, Optimizer and Metric-output results saving and loading methods.
+      - Add a `max_history` parameter to garbage-collect past files.
+      - Revise the labeling of output files to ease collection and re-use.
+    * Revise the use of `Checkpointer` in `FederatedClient` and `FederatedServer`.
+      - Have both entities checkpoint at the end of evaluation rounds.
+      - For now, clients save the global model (not local one), local optimizer and metrics.
+      - For now, server saves the global model (not local ones), server optimizer and all
+        metrics: aggregated ones and client-wise ones (in separate files).
+      - Move lowest-loss-yielding weights tracking and restoring to the private backend
+        of `FederatedServer`, and ensure they are still saved and sent to clients at the
+        end of the federated learning process.
+    * Add unit tests for the `Checkpointer` class.
+
+commit 5f23f9351af634c7a0a5493afc7081bb0f02ad8d
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Feb 1 14:50:57 2023 +0100
+
+    Minor pylint-based syntax fix.
+
+commit b302cd2f4403490f00c72a30bcb57b16f1d2b664
+Merge: bd45c0a 8b40601
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Wed Feb 1 13:40:36 2023 +0000
+
+    Merge branch 'metrics' into 'main'
+    
+    Implement Metric API.
+    
+    See merge request magnet/declearn/declearn2!20
+
+commit bd45c0ad95a4bf5a9b937ab35a5d3f01d20ca2df
+Merge: 7c0dca2 d933ac7
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Wed Feb 1 13:36:43 2023 +0000
+
+    Merge branch 'stateful-optimizer' into 'main'
+    
+    Revise `Optimizer` and add state-access methods.
+    
+    See merge request magnet/declearn/declearn2!19
+
+commit 7c0dca2daa4f5fc1fc9390a39379e753388a0649
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Jan 31 12:33:10 2023 +0100
+
+    Fix side effect in `SklearnSGDModel.set_weights`.
+
+commit 8b406014de19394bb59b4e2fcecba153b92bfc97
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Fri Jan 27 16:30:37 2023 +0100
+
+    Implement `Metric.normalize_weights` util.
+
+commit d933ac706883cce4d1e9ea7ab423c4d8f0fee5fe
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Jan 27 12:13:40 2023 +0100
+
+    Patch `test_train_manager.py` to avoid failure on slower machines.
+
+commit 8a528ae09953fc7f13bd41ed3a0a22be63a04a9e
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Jan 27 12:13:40 2023 +0100
+
+    Patch `test_train_manager.py` to avoid failure on slower machines.
+
+commit 2bca6bdbe71d8c123eb0ab940075479a94e76b28
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Jan 27 12:40:36 2023 +0100
+
+    Update the RMSProp-implementation example.
+
+commit 35cde15994c358d6535c0b20620bf554cbbfc8b3
+Merge: c9be886 1bd8a5f
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Jan 27 12:02:14 2023 +0100
+
+    Merge branch 'main' into metrics
+
+commit c9be88624636360c3644cb84f8a03d5e9587c827
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Jan 27 11:48:08 2023 +0100
+
+    Add metrics computation to the Heart UCI example.
+
+commit 8ac4aec99b95a9ec3989e0c1251892304ecbb89d
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Jan 27 11:43:33 2023 +0100
+
+    Update README to document the Metric API.
+
+commit 358872bfea68a23ec10e2b3258f08200b3e2b08c
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Jan 27 11:21:09 2023 +0100
+
+    Add `share_metrics` bool parameter to `FederatedClient`.
+    
+    * Enable clients to prevent sharing evaluation metrics (and their
+      intermediate states for federative aggregation) with the server.
+    * Enable server to handle clients' replies when metrics are lacking.
+
+commit 90ad4c574e6abfb39201c49fabc986e0e950306e
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Jan 27 11:21:05 2023 +0100
+
+    Update unit tests for `TrainingManager`.
+
+commit 41cf12874986fd2979ef94a9e72da72d5a34a318
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Jan 27 10:51:29 2023 +0100
+
+    Minor docstring and code-order revisions to `FederatedServer`.
+
+commit 892a68b26bdbb0d073783e2e607847089de4b765
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Jan 27 10:46:10 2023 +0100
+
+    Enable server-driven computation of federative evaluation metrics.
+    
+    * This commit adds an optional `metrics` parameter to `FederatedServer`
+      that enables specifying evaluation metrics that are to be computed by
+      each and every client during evaluation rounds.
+    * The resulting metric states are then shared by clients with the
+      server, that procedes to their exact aggregation thanks to the
+      `Metric.agg_states` method.
+    * Note that this commit does not (yet) implement:
+      - proper saving of the computed metrics, which for now are merely
+        and clumsily logged to the console
+      - privacy safeguards enabling clients to control which metrics are
+        computed and shared with the server (as intermediate metric states
+        might in some cases leak information, e.g. as to the distribution
+        of target labels or values)
+
+commit e2018f8e5dd8503ba4338c3578695e7dbc198b27
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Jan 27 10:43:31 2023 +0100
+
+    Refactor some code into `MetricSet.from_specs`.
+
+commit 5df95e7592b08aa628d5b4462895092b794e7fa0
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Jan 27 09:59:50 2023 +0100
+
+    Patch `test_optimizer.py` to silence pylint.
+
+commit 7e059884d9fc1b3c97be86c405aad3103e3a3229
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Jan 26 17:55:48 2023 +0100
+
+    Clean up `OptiModule` code by removing unused statements.
+
+commit 9c3267f5e692dbc2cade02a901cbafb93200b898
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Jan 26 17:48:22 2023 +0100
+
+    Remove out-of-use OptiModule (de)serialization methods.
+
+commit 13f6304dd799e0c6ae7ccb90c7c93a11718576db
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Jan 26 17:25:24 2023 +0100
+
+    Add `Optimizer.start_round` method to trigger `Regularizer.on_round_start`.
+
+commit 47ae6cc4fdf488edc0c0ef6fac609004badf7616
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Jan 26 17:09:15 2023 +0100
+
+    Implement unit tests for `Optimizer`.
+
+commit ab7e2559a3b26842e6b12611d6c1b9d78c3b42ec
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Jan 26 14:47:34 2023 +0100
+
+    Add `assert_json_serializable_dict` to `declearn.test_utils`.
+
+commit ed342b82f1130651ee7a339cd47020f0712136cb
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Jan 26 14:41:40 2023 +0100
+
+    Deploy `access_types_mapping` to unit test code.
+
+commit 162f80525f6f3221af36a546cc1f6d8c31227cbe
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Jan 26 10:39:24 2023 +0100
+
+    Revise the format of `Optimizer`'s config and states.
+    
+    * The udpate to the config format enables including multiple instances
+      of a plug-in in the Optimizer pipeline (which is unlikely to happen,
+      but was a limitation neither documented nor motivated).
+    * It also removes some redundant code in `Optimizer.from_config`.
+    * The update to the states format covers the same concern, but goes
+      along an extension of the verifications and error-handling of the
+      `set_state` method.
+
+commit a6d7d03d05f8dd163ab2bb3b8308836b2161e3c5
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Jan 25 18:18:14 2023 +0100
+
+    Fix YogiModule algorithm.
+
+commit 4d6c65942e2027e63235ad02c945300b52c2318f
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Jan 25 18:22:56 2023 +0100
+
+    Improve some `OptiModule` docstrings.
+    
+    * Improve the docstrings of `get_config`, `from_config` and `run`.
+    * Remove overriding docstring from subclasses, to ease code readability
+      and maintenance.
+
+commit 44f834343546e032e93ad0a02633f94ccb5252c2
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Jan 25 18:28:13 2023 +0100
+
+    Add unit tests for `OptiModule.(get|set)_state` methods.
+
+commit 993d8eef8bc8a54d4865b1ad2dc826e9928d4064
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Mon Jan 16 18:11:20 2023 +0100
+
+    Add `Optimizer.get_state` and `set_state` methods to the API.
+    
+    * Add `get_state` and `set_state` to the `OptiModule` API.
+    * Add the same methods to `Optimizer`, that collects and propagates
+      information from and to its plug-in modules.
+    * These methods, which are unused for now, enable saving the state
+      of the optimizer between rounds, which can be useful to repeat
+      or resume training from a given point when running experiments.
+    
+    Co-authored-by: Paul Andrey <paul.andrey@inria.fr>
+    
+    Authorship:
+    * Nathan Bigaud wrote the first version of this commit.
+    * Paul Andrey cleaned it up and applied fixes for missing variables.
+
+commit 2c424b35fcc5e1430db5e42f3669ac375ea27497
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Jan 25 15:53:43 2023 +0100
+
+    Handle division-by-zero errors in metrics and add associated tests.
+
+commit 522bfd3344201a58da18605d4cdc86f076cffc3b
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Jan 25 11:36:54 2023 +0100
+
+    Add F1-Score to classification metrics.
+
+commit 1bd8a5ff9cbf8b229214025a5bd88600da200fc4
+Merge: feac22d f880486
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Wed Jan 25 08:06:15 2023 +0000
+
+    Merge branch 'revise-network-api' into 'main'
+    
+    Revise some front-end aspects of network endpoints
+    
+    See merge request magnet/declearn/declearn2!18
+
+commit 374324182408352130194de977cb15c7484d82dc
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Jan 24 15:34:57 2023 +0100
+
+    Patch Metric tests to comply with linters.
+
+commit 9f68f9cda43b289d99eb5dcecb2968c5408d6563
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Jan 24 09:52:52 2023 +0100
+
+    Minimally deploy the Metrics API to `TrainingManager`.
+    
+    * This commit adds a `metrics` attribute (and instantiation parameter)
+      to `TrainingManager`, that enables defining evaluation metrics, in
+      addition to the model's loss.
+    * The backend of `TrainingManager.evaluation_round` is also updated to
+      make use of this `MetricSet` and of the newly-introduced inference
+      methods of `Model`.
+    * At the moment, the `EvaluationReply` message does not support adding
+      computed metrics beyond the loss.
+    * Similarly, the "main" centralized FL process does not yet provide
+      with the possibility to specify metrics to be computed.
+    * Hence, this commit:
+      - adds the potentiality and some core API modifications to compute
+        evaluation metrics modularly
+      - revises the way the model's loss is computed, without altering its
+        logic nor the way the results are handled in the FL process
+
+commit bef9ef8be0cb43d72a7dc13e5806adaa63785cac
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Jan 24 12:19:51 2023 +0100
+
+    Update Model API for better articulation with the Metric API.
+    
+    * Add `Model.compute_batch_predictions`, interfacing the wrapped model
+      in inference mode.
+      - This method outputs numpy arrays so as to enable passing its output
+      to a `Metric` or `MetricSet` instance.
+      - It may also be overridden by end-users to alter the flow between
+      inputs and outputs, e.g. for self-supervised learning models.
+    * Add `Model.loss_function` to finalize sample-wise loss computation.
+    * Abstract `Model.compute_loss` into the base class using the previous
+      two methods. Deprecate it, in favor of out-of-Model orchestration.
+    * Expand Model unit tests to cover these new functions.
+
+commit 6fc008960a5a46936dbda41c2e7f419e02d2eeac
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Jan 18 13:41:42 2023 +0100
+
+    Implement `MetricSet` wrapper for `Metric` instances.
+    
+    * Implement `MetricSet`, a wrapper for an ensemble of `Metric` instances.
+    * Design `MetricSet` to mimic the `Metric` API, similar to the way how an
+      `Optimizer` wraps a pipeline of `OptiModule` plug-ins.
+    * Design `MetricSet` to be instantiable from a human-editable and JSON-
+      serializable config, similar to the way an `Optimizer` can be.
+    * Expose a `MetricInputType` type-alias for the variety of input formats
+      enabling to specify the individual wrapped metrics, to ease source code
+      readability.
+    * Implement unit tests for `MetricSet`.
+
+commit f20c14f6591c7340da1bc1deed016e78d09d4262
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Jan 24 11:05:47 2023 +0100
+
+    Implement standard classification and regression metrics.
+    
+    * Implement accuracy, precision and recall metrics for classification,
+      covering both the binary and multi-class classification cases.
+    * Implement binary roc-auc metric, with modular precision on thresholds
+      used for fpr/tpr estimation, including privacy-oriented restrictions.
+    * Implement abstract `MeanMetric` template for averaged scalars.
+    * Implement `MeanAbsoluteError` and `MeanSquaredError` metrics.
+    * Implement associated unit and functional tests, including a shared
+      test suite that may be re-used for future `Metric` subclasses.
+
+commit 4ebb627852f3981ca4fafc27576c4b8f496268dc
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Jan 24 10:59:03 2023 +0100
+
+    Implement Metric API.
+    
+    * Add `declearn.metrics` submodule.
+    * Implement `Metric` abstract base class, that defines an API for
+      the iterative and federative computation of evaluation metrics.
+    * This commit is the result from an iterative process:
+      - Implement a first draft of the Metric API, with some subclasses.
+      - Marginally revise the API based on subclasses' implementation
+        and test-driven debugging.
+      - Harmonize the Metric API with the type-registration and name-based
+        specification practices used in the Regularizer and OptiModule APIs.
+
+commit feac22d72b62788a53af5352ee418995f3c69f40
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Jan 23 09:34:15 2023 +0100
+
+    Add 'tomli' dependency for Python <3.11.
+
+commit f880486463a771f1efee3e69dd2dd080c7167b1b
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Jan 16 09:50:35 2023 +0100
+
+    Add TOML-parsing to network endpoints' build-config dataclasses.
+    
+    * Use dataclass-generation utils to replace the hand-written
+      `NetworkClientConfig` / `NetworkServerConfig` dataclasses.
+    * Use inheritance from `TomlConfig` to add TOML-parsing.
+    * Update `FederatedClient` and `FederatedServer` to use the
+      revised classes' features (including TOML parsing).
+
+commit cd1d0cb137b74c6baec397c703f4d1c8830427c4
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Jan 11 14:34:11 2023 +0100
+
+    Made gRPC and websockets network communication backends optional.
+
+commit 54b3f2ee7d883bbc48f43dbbfde6bbfa4231ae07
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Jan 11 14:24:49 2023 +0100
+
+    Add `declearn.communication.list_available_protocols`.
+
+commit b0f880a6eaedc1fb27820990b71e6793681b71a5
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Jan 11 13:53:59 2023 +0100
+
+    Add `access_types_mapping` util to access registered type mappings.
+
+commit f64067e079f84eaeaf514fb038de653129dfe59a
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Jan 11 13:11:47 2023 +0100
+
+    Rename `Client` and `Server` to `NetworkClient` and `NetworkServer`.
+    
+    On the side, slightly update the API of these classes, in a similar
+    fashion as what was recently done for `OptiModule` and `Regularizer`:
+    * Automate type-registration of child classes.
+    * Add a `protocol` str class attribute, used by the automated type
+      registration.
+
+commit c841bfcb66587d1f9adbbd4b105d9eb7da9f7f2f
+Merge: d2ef427 d4cd449
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Tue Jan 17 08:35:14 2023 +0000
+
+    Merge branch 'revise-strategy-api' into 'main'
+    
+    Revise strategy api
+    
+    See merge request magnet/declearn/declearn2!16
+
+commit d4cd449fa240124032a2b6884b63d18f00e2249d
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Mon Jan 16 19:25:02 2023 +0100
+
+    minor name chnages and typo
+
+commit d2ef427e3e8518559818e05af71d5f8e965147de
+Merge: 8824105 29043ba
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Mon Jan 16 18:20:25 2023 +0000
+
+    Merge branch 'hotfix-examples' into 'main'
+    
+    Hotfix examples
+    
+    See merge request magnet/declearn/declearn2!17
+
+commit 34c6e4ec573c358f1b2bbe6c5dded0171c5b5d0e
+Merge: 973167f 8824105
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Jan 16 11:33:27 2023 +0100
+
+    Merge branch 'main' into revise-strategy-api
+
+commit 8824105071787c74f38cc8ed3aba51714a98e92f
+Merge: 168781e 37cfaf4
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Mon Jan 16 09:13:06 2023 +0000
+
+    Merge branch 'dp-sgd' into 'main'
+    
+    Add local DP to declearn
+    
+    See merge request magnet/declearn/declearn2!11
+
+commit 29043ba4d34d5bc663f393c593e42d4f84392504
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Jan 12 15:59:49 2023 +0100
+
+    Fix an argparse bug in the Heart-UCI server script.
+
+commit 9571ad560cde8fc76ebc37661c9ef5b1c6c82734
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Jan 12 15:59:09 2023 +0100
+
+    Update RMSprop-addition example.
+
+commit 37cfaf4a4aeaca1f4be0ba3644a31a63e244109d
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Jan 11 11:08:47 2023 +0100
+
+    Fix mypy error due to untyped opacus imports.
+    
+    Note: depending on the opacus (and, seemingly, python) version used,
+    opacus's type hints are available to mypy or not. This commit hence
+    takes a conservative approach at silencing errors that mypy might in
+    some contexts not raise.
+
+commit 168781e2cbe1cfe0b68913818aaa187271312a47
+Merge: b796921 b8c969c
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Mon Jan 9 16:14:58 2023 +0000
+
+    Merge branch 'refactor-main' into 'main'
+    
+    Refactor `FederatedServer` and `FederatedClient` code.
+    
+    See merge request magnet/declearn/declearn2!14
+
+commit fc50779e2f71462320a2a360bff141e00aecd42a
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Jan 9 10:00:48 2023 +0100
+
+    Increment version number and add Nathan to authors.
+
+commit 973167fd04e09aaf86eb9df40b4b7e499a0d75b4
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Jan 9 09:54:52 2023 +0100
+
+    Enable specifying `FLOptimConfig` optimizers as single floats (lrate).
+
+commit 1a6e937e57b786d92f7a95ac04725cb56c0aa179
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Jan 6 18:10:55 2023 +0100
+
+    Remove `declearn.strategy` in favor of using `FLOptimConfig`.
+
+commit e4d28bee6a9526a1c21a3c233e91045bfd42e9cd
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Jan 6 18:05:59 2023 +0100
+
+    Implement `FLOptimConfig` as an alternative to the Strategy API.
+
+commit f4d19036113ec32ee67954e6ed94eada15f07d52
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Jan 6 12:03:31 2023 +0100
+
+    Move Aggregator API and subclasses to the new `aggregator` module.
+
+commit d27fcaf9de61276d5803dd8c060056b439ed8dda
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Jan 5 17:04:49 2023 +0100
+
+    Marginally improve TomlConfig docs and type-hints parsing.
+
+commit 81e530ed354f2cbafee9aad98e306098b38babb0
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Jan 5 15:10:20 2023 +0100
+
+    Implement unit tests for `declearn.main.privacy.DPTrainingManager`.
+
+commit 8b5e8cd4c92f2122fc096edce85c563164ea63b2
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Jan 3 15:49:06 2023 +0100
+
+    Implement DP-budget-based training interruption in `DPTrainingManager`.
+    
+    * `DPTrainingManager`'s (private) training step method now implements
+      the verification of the DP budget that would be spent as a result
+      of the step, and effectively prevents the step from being taken if
+      needed.
+    * To achieve the former, `TrainingManager._train_under_constraints`
+      now catches any built-in `StopIteration` errors raised when calling
+      `_run_traing_step`, and interprets it as a signal to exit the loop.
+    * The latter behaviour is now documented at the base class level.
+    * Note: in case the train step is authorized but fails, the accountant's
+      history will be wrong - but so may be the optimizer's plug-ins' states
+      etc. hence this is not tackled as of now.
+
+commit d5170c9d16fc6c2fc45ba61fa466cc45f4e91fe6
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Mon Dec 12 15:04:50 2022 +0100
+
+    Add documentation on local DP, including warnings and limits.
+    
+    Co-authored-by: Paul Andrey <paul.andrey@inria.fr>
+
+commit 46981363dff0967dc3d13b072603348fef22381f
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Jan 3 11:39:27 2023 +0100
+
+    Document local DP setup in the README.
+
+commit 6a39d72a0ff5321e1d36afab1c1304b54873255f
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Jan 3 10:14:30 2023 +0100
+
+    Modularize available frameworks' listing and use in optimizer tests.
+    
+    * Replace the hard-coded `Frameworks` tuple with a `list_available_frameworks`
+      function that checks third-party dependencies' availability.
+    * Avoid importing all frameworks when importing `declearn.test_utils`, which
+      resulted in slow start-up (and unrequired warnings) of examples code.
+    * Adjust the optimizer tests based on available frameworks.
+    
+    Notes:
+    * Additional work is required to deploy this function to other tests.
+    * It may be useful to move `list_available_frameworks` to `declearn.model`
+      (or `declearn.utils`?).
+
+commit 26bebdc1ba45400b85f50473d8969813656040a9
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Dec 5 14:55:50 2022 +0100
+
+    Fix `TorchVector` compatibility with `NumpyVector`.
+
+commit 3e1a2ae1b9539a731ba84fbc8589c19b17da5064
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Dec 23 17:27:13 2022 +0100
+
+    Enable DP-SGD setup in `FederatedClient` and `FederatedServer`.
+    
+    * Add an optional secondary initialization phase to set DP-SGD up
+      based on the presence of a "privacy" field in the `FLRunConfig`.
+    * Have the server package and send information required to set up
+      the local DP.
+    * Have the client replace its `TrainingManager` with the DP-SGD
+      subclass `DPTrainingManager` and call its `make_private` method.
+    
+    Co-authored-by: BIGAUD Nathan <nathan.bigaud@inria.fr>
+    
+    Authors:
+    * Nathan Bigaud first implemented the setup and use of DP-SGD by
+      subclassing `FederatedClient` and `FederatedServer`.
+    * Paul Andrey made use of the revisions inspired by Nathan's work
+      to come up with this final implementation.
+
+commit 4738265c3a897b7c2e202fc9c78366d0b6488a41
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Fri Dec 23 17:14:07 2022 +0100
+
+    Implement `DPTrainingManager` to enable DP-SGD use.
+    
+    * Implement `DPTrainingManager`, a subclass of `TrainingManager` that adds
+      DP-SGD tools and enables setting them up through a `make_private` method.
+    * Expose it under a dedicated `declearn.main.privacy` submodule so as to
+      lazy-import 'opacus'. Also implement informative warnings when opacus is
+      missing.
+    * NOTE: some "# REVISE" comments should be tackled before this commit hits
+      the main branch.
+    
+    Co-authored-by: Paul Andrey <paul.andrey@inria.fr>
+    
+    Authors:
+    * Nathan Bigaud wrote a first version of DP-SGD-enabling code, using the
+      opacus dependency and its `make_private` naming logic.
+    * Paul Andrey re-implemented from this code using the newly-introduced
+      `TrainingManager` and `sclip` parameter to `Optimizer.run_train_step`.
+
+commit c97a6510359cca626dfdc062defba4c66e659151
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Fri Dec 23 16:58:33 2022 +0100
+
+    Add a PrivacyRequest message and marginally modify InitRequest.
+    
+    * PrivacyRequest is a new message designed to wrap up hyper-parameters
+      required to set up local differential privacy (using DP-SGD).
+    * InitRequest has been provided with a 'dpsgd' bool field (default=False)
+      that will serve in the future to indicate that initialization should
+      be pursued by a local-DP-setup phase (using a secondary PrivacyRequest).
+    
+    Co-authored-by: Paul Andrey <paul.andrey@inria.fr>
+    
+    Authors:
+    * Nathan Bigaud first implemented PrivacyRequest.
+    * Paul Andrey polished it and made the change to InitRequest.
+
+commit 3cb81145cb24eb177d3772ee0044949b088ac941
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Dec 23 16:55:36 2022 +0100
+
+    Add `PrivacyConfig` dataclass and make it an optional section of `FLRunConfig`.
+    
+    Co-authored-by: BIGAUD Nathan <nathan.bigaud@inria.fr>
+    
+    Authors:
+    * Nathan Bigaud wrote the first implementation of PrivacyConfig.
+    * Paul Andrey polished it and articulated it with FLRunConfig.
+
+commit 05c9c6195319a29dc41672b8e8dcddb219171213
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Dec 23 11:32:15 2022 +0100
+
+    Minor type-hinting fix in Model tests code.
+
+commit 3b2cfdbd72b32094b608323f65ad8b860594aa76
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Fri Dec 23 11:28:57 2022 +0100
+
+    Refactor some optimizer unit test code, moving some to `declearn.test_utils`.
+    
+    * Move up the listing of frameworks and the mock-gradient-vectors-generating
+      util class to a new private submodule of `declearn.test_utils`.
+    * Add a shared framework-providing fixture to the optimizer tests' module.
+    * Harmonize relative imports' code (preserving the `sys.path` trick).
+    
+    Co-authored-by: Paul Andrey <paul.andrey@inria.fr>
+
+commit 7faf34ea8fc926e1d8a02da82a9f53dcbb22674e
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Fri Dec 23 11:26:56 2022 +0100
+
+    Implement functional tests for `NoiseModule` subclasses.
+
+commit a50b810f72d04701b55ac8d19ab2c854d01ff039
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Fri Dec 23 11:22:28 2022 +0100
+
+    Implement abstract and gaussian noise-addition optimizer modules.
+    
+    * Implement `GaussianNoiseModule`, to enable adding gaussian noise
+      to step-wise batch-averaged gradients as part of local DP-SGD or
+      to clients-averaged updates as part of central DP-SGD.
+    * Implement an abstract `NoiseModule` layer, paving the way for
+      other noise-addition mechanisms.
+    
+    This commit squashes some incremental work by multiple authors:
+    * Nathan Bigaud implemented `GaussianNoiseModule` after doing the
+      scientific and technical review of requirements, notably as to
+      the use of a cryptographically-safe RNG.
+    * Paul Andrey abstracted part of the code into the `NoiseModule`
+      class, fixed some pending todos, and adjusted unit tests.
+    
+    Co-authored-by: Paul Andrey <paul.andrey@inria.fr>
+
+commit b978cfaa15dd1a4cc7e3b186e99071cd37ddbece
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Fri Nov 25 19:10:17 2022 +0100
+
+    Add Poisson sampling option to `Dataset.generate_batches`.
+    
+    * Add `poisson` argument (bool, default=False) to `Dataset.generate_batches`.
+    * Implement Poisson sampling for `InMemoryDataset`.
+    * Add `poisson` parameter to the `TrainRequest` dataclass, enabling instructing
+      clients to use Poisson sampling rather than default batching in a FL process.
+    
+    Co-authored-by: Paul Andrey <paul.andrey@inria.fr>
+
+commit b8c969c1a9202c1894110b92bb398f18d7e8b7d0
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Dec 22 16:13:59 2022 +0100
+
+    Patch backend code for Python <3.9 compatibility.
+
+commit 04360a84c079867c5b911d399d0185f343329c21
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Dec 22 13:59:32 2022 +0100
+
+    Implement unit tests for `declearn.main.utils.TrainingManager`.
+
+commit a84f40aa0981bc414a0c24541a1eab7350912d35
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Dec 22 13:58:59 2022 +0100
+
+    Fix bug: infinite training round loop when `epochs=None`.
+
+commit 53cd2d775444710b8f86c001dcfe71f207e614c5
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Dec 13 16:38:13 2022 +0100
+
+    Refactor `FederatedClient`, splitting out training and evaluation loops.
+    
+    * Move local training and evaluation routine under a new class,
+      `TrainingManager`, that retains objects expected to have been
+      created based on server-issued instructions.
+    * Have `FederatedClient` use the former class, using an attribute
+      set during the initialization phase.
+    * As a result, this commit splits the client-side code between:
+      - training and evaluation orchestration, as synchronous methods
+        that may be used and tested locally (even outside of FL, even
+        though the signatures currently retain messaging features).
+      - initialization and message-based-processing orchestration,
+        that sets up the former and makes use of it based on server
+        instructions, and transmits replies over the network.
+
+commit bb133eb45b01b1af0b2f8877514a3db808fb4369
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Dec 21 16:03:54 2022 +0100
+
+    Clean up some FederatedServer backend code.
+
+commit 171b691b592cee1dea250332bc4e1ee2a1c063cc
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Dec 21 15:35:57 2022 +0100
+
+    Refactor `FederatedServer` by introducing `FLRunConfig`.
+    
+    * Add `declearn.main.config` submodule:
+      - Move dataclasses (`TrainingConfig`, `EvaluateConfig`
+        and `RegisterConfig`) to this new submodule.
+      - Implement `FLRunConfig`, that binds together all arguments and
+        hyper-parameters used by the `FederatedServer.run` method, and
+        provides with the possibility to write them up as a TOML config
+        file (by inheriting `declearn.utils.TomlConfig`).
+    * Deploy `FLRunConfig` to `FederatedServer`:
+      - Replace the argument to `run` and `async_run` by `FLRunConfig`,
+        adding the possibility to either provide (legacy-style) kwargs
+        or the path to a TOML file to the `run` one.
+      - Replace the argument to `initialize` by the full `FLRunConfig`,
+        to facilitate overriding by subclasses that may need to send or
+        use information on the process in addition to conducting client
+        registration.
+      - Preserve the use of targetted fields of hyper-parameters in the
+        `training_round` and `evaluation_round` methods.
+
+commit e85d1184104a5541698d14801c4e6183a4e2358e
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Dec 12 16:36:03 2022 +0100
+
+    Simplify server-side hyperparameters' collection into messages.
+
+commit f814d6c720dced91c99b3f970a3454e0928f9424
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Dec 12 11:18:10 2022 +0100
+
+    Use `dataclass_from_init` to implement `EarlyStopConfig`.
+
+commit ede01beb8a4b7e86ba57005abd6234ffdc1a5814
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Dec 9 17:26:00 2022 +0100
+
+    Implement dataclass-generation tools.
+
+commit c1e0bf9d13f69280413d47bb39ff754f1434da89
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Dec 21 15:01:39 2022 +0100
+
+    Implement `TomlConfig` util to define TOML-parsable configuration containers.
+
+commit b7969219953d453a3baf032acea51698f247489a
+Merge: d153178 c0340d9
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Wed Dec 21 09:28:19 2022 +0000
+
+    Merge branch 'clip-gradients' into 'main'
+    
+    Add sample-wise gradients clipping to the Model API
+    
+    See merge request magnet/declearn/declearn2!13
+
+commit c0340d910f92622d37d8b758f83e28c94b73a44d
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Dec 21 09:44:17 2022 +0100
+
+    Implement (batch-averaged) gradient clipping module.
+
+commit 8a5602de4c1e8f8f1088505955ea616cfb3777bb
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Dec 21 09:42:56 2022 +0100
+
+    Add and implement  to the API.
+
+commit 0db226a6070a1c017a1af7ddfb64cd95d3a923e6
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Dec 20 13:03:54 2022 +0100
+
+    Add `compute_updates_from_gradients` method to the `Optimizer` API.
+
+commit c9224fff362e025d0a62fb8751dfd593892b549a
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Dec 20 12:52:38 2022 +0100
+
+    Add `sclip` sample-wise clipping parameter to `Optimizer.run_train_step`.
+
+commit c51ae84d3f85601d38a18e0ebbaa2eb2de84506d
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Oct 5 12:30:57 2022 +0200
+
+    Implement unit tests for sample-wise gradients clipping.
+
+commit 35bdadd501f52692c188b417833ff491b59f7aa7
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Oct 5 12:30:39 2022 +0200
+
+    Add sample-wise gradients clipping to the Model API.
+
+commit 44accf61c16bfec1c46ec2ea3f937fe760435ee9
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Oct 5 12:30:26 2022 +0200
+
+    Add sample-wise gradients clipping to `TorchModel`.
+    
+    Note: to efficiently compute (and clip) sample-wise gradients
+    in Torch, the additional dependency `functorch` is used. This
+    poses a risk as to the maintainance of `declearn[torch]` due
+    to `functorch` still being presented as experimental by Meta;
+    however it is the best available solution to limit overheads,
+    and will probably become an important component of the torch
+    ecosystem in the future.
+
+commit 8528f8e200aedf896d2dcb8148deb5155b8b87b6
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Oct 5 12:27:29 2022 +0200
+
+    Add sample-wise gradients clipping to `TensorflowModel`.
+
+commit 56bb8da128856fe1d28e616f6b121a478d91d16a
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Oct 5 12:27:16 2022 +0200
+
+    Add sample-wise gradients clipping to `SklearnSGDModel`.
+
+commit d1531784155a2128265784f1215f8c74d682689d
+Merge: fa2adab dd4e4f6
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Wed Dec 14 08:54:14 2022 +0000
+
+    Merge branch 'gradient-masked-averaging' into 'main'
+    
+    Gradient Masked Averaging
+    
+    See merge request magnet/declearn/declearn2!12
+
+commit fa2adab3d86b96ca658ca636948450d090d40b46
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Dec 8 08:36:25 2022 +0100
+
+    Reformat extra dependencies' specifications.
+    
+    The previous version specified some recursive dependencies, to avoid
+    writing redundant dependency specifications. This is convenient, and
+    supported (as of versions 19.0 to 22.3) by pip. However, this is no
+    longer working with tox v4.0.2 (as opposed to v3.27), that was just
+    released.
+    
+    As a consequence, and since self-dependency is not part of PEP 631,
+    this commit removes it, and introduces some (documented) redundancy
+    in extra dependencies - which as of now make for a couple of lines
+    only.
+
+commit f42f7ed7b634b0ae94bc82dc90752415d76c26e0
+Merge: 01ead20 f2a2116
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Fri Dec 9 08:53:30 2022 +0000
+
+    Merge branch '12-chunk-large-messages-to-avoid-size-limitations' into 'main'
+    
+    Chunk large messages to avoid size limitations
+    
+    Closes #12
+    
+    See merge request magnet/declearn/declearn2!10
+
+commit f2a21161061885e66558349417eb7ee9d276b51b
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Fri Dec 9 08:53:30 2022 +0000
+
+    Chunk large messages to avoid size limitations
+    
+    This commit implements message-chunking in cases when large (usually, >1MiB)
+    messages are being exchanged via one of the current network communication
+    protocols (WebSockets or gRPC). The code additions are framework-dependent,
+    but are implemented in coherence, following these common specs:
+    
+    * When a (string-serialized) message reaches a size that exceeds the
+      communication protocol's (default) message-size limitation, it is sent
+      as a stream of ordered chunks, obtained by merely splitting the string
+      into fixed-size chunks.
+    * This may be used either on the client or server side, and should be
+      invisible to the user (including developers): chunking is automated as
+      part of the backend of public message-sending methods.
+    * When an unregistered client attempts to send a chunked message to the
+      server, its message should be refused, without collection nor parsing
+      of the actual message contents.
+    
+    The practical implementations are the following:
+    * WebSockets:
+      * When chunking, send a conventional flag as first message; expect an
+        acceptance (or denial) flag; sequentially send chunks; send a closing
+        flag.
+      * When receiving, check for the "stream start" flag; decide whether to
+        accept (based on registration status) and send a flag; receive and
+        assemble chunks until the ending flag is received.
+      * In practice, util functions have been implemented, that are shared by
+        the Client and Server classes (but not made available to the end-users).
+    * gRPC:
+      * Turn `send` into a server streaming RPC, enabling the server to send
+        replies as an ordered sequence of message chunks.
+      * Add the `send_large` bidirectional-streaming RPC, that is similar to
+        `send` but is used when the client performs message-chunking.
+      * Refuse `send_large` requests from unregistered clients (send back an
+        `Error` message).
+      * Automate the choice of `send_large` over `send` in the client backend.
+
+commit dd4e4f6622355aa8c2f3cadedc58415c7a1d81a4
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Dec 8 08:36:25 2022 +0100
+
+    Reformat extra dependencies' specifications.
+    
+    The previous version specified some recursive dependencies, to avoid
+    writing redundant dependency specifications. This is convenient, and
+    supported (as of versions 19.0 to 22.3) by pip. However, this is no
+    longer working with tox v4.0.2 (as opposed to v3.27), that was just
+    released.
+    
+    As a consequence, and since self-dependency is not part of PEP 631,
+    this commit removes it, and introduces some (documented) redundancy
+    in extra dependencies - which as of now make for a couple of lines
+    only.
+
+commit af10d54b5395858657d0def1c61385cb2c5bc08f
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Dec 7 17:57:11 2022 +0100
+
+    Fix `Vector.__rsub__` method.
+
+commit 0513abdd246377db96afd6ee8e8f1d2107ee71c4
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Dec 7 17:28:46 2022 +0100
+
+    Implement GradientMaskedAveraging aggregator.
+
+commit 01ead2049a8dffe005b59168d1d5067505fb1ece
+Merge: 750df01 8bee8cd
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Fri Dec 2 11:20:17 2022 +0000
+
+    Merge branch 'regularizers' into 'main'
+    
+    Implement loss regularizers & revise Optimizer API.
+    
+    See merge request magnet/declearn/declearn2!9
+
+commit 8bee8cd53cb45dcc630c83b3a5aa47b06f962ba5
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Dec 1 16:19:26 2022 +0100
+
+    Fix Lasso and Ridge regularizers.
+
+commit a46dc0ed8c152e914f1b0579fc856c6c23329547
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Nov 22 11:04:40 2022 +0100
+
+    Update CI/CD configuration.
+    
+    * Prevent automatic testing on Draft MRs.
+    * Prevent automatic testing on merge commits to main.
+    * Enable manual launch of "fulltest" case on Draft MRs and commits to
+    main.
+
+commit 57c30306ee2d8d613b445fb5e10fe726a1fab7dd
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Nov 21 17:19:20 2022 +0100
+
+    Increment version to "2.0.0.beta2".
+
+commit 5e2cda593aa10b63e33eee3872f3676c8001d254
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Nov 21 17:18:52 2022 +0100
+
+    Update Heart-UCI example using new `Optimizer` config syntax.
+
+commit c8c8a85d8962350c00d0ecca9985425f17dfd490
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Nov 21 17:16:43 2022 +0100
+
+    Document `Regularizer` API in the README file.
+
+commit 2beb9f2eb1614a8d3ae593b51f2d0c3ddd1ff921
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Nov 21 16:57:33 2022 +0100
+
+    Move `NumpyVector` from `model.api` to `model.sklearn` submodule.
+
+commit 750df01736bef60e6309958e295b43891a4c4881
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Nov 18 17:48:05 2022 +0100
+
+    Fix `InitRequest.to_string` with tensorflow 2.11.
+
+commit a63c27b41876c5f2f9bb65ce6b3388ac6cabfa94
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Nov 21 16:41:53 2022 +0100
+
+    Refactor `OptiModule` unit tests and implement `Regularizer` ones.
+
+commit c88c122bdd1a73cdae7ce476a35deb5e174a9c19
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Nov 21 12:09:42 2022 +0100
+
+    Apply minor docstring and type-hint corrections.
+
+commit 2ed8e450b1811f66dc2f5c087da20ed52b6ace95
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Nov 21 13:22:15 2022 +0100
+
+    Modularize `regularizers` and `modules` input types for `Optimizer`.
+
+commit 0887fdd36c49d15ec43040cee5b14bce755d9967
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Nov 21 13:13:56 2022 +0100
+
+    Revise `OptiModule` API.
+    
+    * Add `aux_name` class attribute, to distinguish between unique module
+      `name` and auxiliary-variables-tagging name that may be used to pair
+      up a couple of server/client modules (an example being Scaffold).
+    * Revise `Optimizer.process_aux_var` and `Optimizer.collect_aux_var`'s
+      backend in accordance with the addition of `aux_name`.
+    * Revise the (de)serialization of `OptiModule` by adding `from_specs`,
+      similarly to `Regularizers`. Previous (de)serialization methods may
+      be garbage-collected in the near future.
+    * Implement the automatic type-registration of `OptiModule` subclasses
+      using `__init_subclass__`, as was done with `Regularizer`.
+
+commit 04bf1448b054d190e7e29f14fc83b8c710d01854
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Nov 18 17:48:05 2022 +0100
+
+    Fix `InitRequest.to_string` with tensorflow 2.11.
+
+commit 53b27196686d21676b42ead5176050166d5b2efe
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Nov 18 15:56:50 2022 +0100
+
+    Use framework-specific Vector type as `Model` weights.
+    
+    * Prior to this commit, the API had `Model` subclasses
+      use `NumpyVector` as model weights' container. This
+      felt convenient as few computations were expected to
+      make use of these weights directly.
+    * However, this caused an asymmetry between calls to
+      the server-side and client-side optimizers, and was
+      the cause of implicit (or boilerplate-code-demanding)
+      explicit casting between frameworks as part of the
+      `apply_updates` method.
+    * With this commt, model weights are now wrapped in a
+      framework-dependent container, as are model gradients.
+
+commit fd1c012d2f937a5717aabbe5757cd07e714b5860
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Nov 17 17:52:34 2022 +0100
+
+    Added loss regularizers to `Optimizer`.
+
+commit e1479287cd60514d528fbe2d580b716896cbd533
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Nov 17 17:50:00 2022 +0100
+
+    Implement FedProx, Lasso and Ridge loss regularizers.
+    
+    On the side, alter `Regularizer` API: move name class attribute definition.
+
+commit 53dd9eafd8b1469bb1aa1f151deb3843d89ef84b
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Nov 17 17:49:30 2022 +0100
+
+    Implement `Regularizer` optimizer plug-ins API.
+
+commit bde421d1f4aa11dfb3e2d229e2f08d25d278ac67
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Nov 17 17:46:10 2022 +0100
+
+    Rename private `optimizer.modules._base` to `_api` for readability.
+
+commit 0a1d967f54af1cef402874bbdeabc5d3373b6771
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Nov 17 17:16:40 2022 +0100
+
+    Revise `create_types_registry`.
+    
+    * Invert the order of arguments `base` and `name`.
+    * Enable not specifying `name`.
+    * Enable class-decoraotr syntax use of the function.
+    * Propagate these changes throughout `declearn`.
+
+commit f07d18c209292aebe84ef40e6bd1666fb9e3955a
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Nov 16 11:13:33 2022 +0100
+
+    Marginally revise `generate_ssl_certificates`.
+
+commit f8663243956832fcd285ab9bb5192d4bc8fc62a5
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Nov 16 11:12:41 2022 +0100
+
+    Add logging to `WebsocketsClient` failed connection attempts.
+
+commit b1cd7907ac55d35dca84fa847c908193de3adb10
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Nov 14 17:23:09 2022 +0100
+
+    Fix `TorchModel` gradients' naming.
+    
+    Note: unproper naming had a potential nasty side-effect
+    of disabling model update on the server side due to key
+    mismatch between coefficients' names.
+
+commit cbc02c70e9aa97ad4331b74b6403cb9e6453e2b6
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Nov 9 18:58:50 2022 +0100
+
+    Implement and deploy `json_load` and `json_dump` utils.
+
+commit c3a20cbd80048537a2aadc702986ef5a55cb5646
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Nov 7 12:09:44 2022 +0100
+
+    Correct `Scaffold` client-state update computation.
+
+commit 41f937ab01962f9c3b907f49c08ef1e636683bb4
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Mon Nov 7 11:01:21 2022 +0000
+
+    Fix Momentum formulation and add Nesterov variant.
+
+commit 7fd99b75e11ae781c5569c5a85bbc729c97bcfec
+Author: BIGAUD Nathan <nathan.bigaud@inria.fr>
+Date:   Mon Oct 24 15:23:29 2022 +0000
+
+    Add tutorial on RMSProp implementation.
+
+commit aeba86495d1f198a493ff656805b371c2083b76c
+Merge: 6882651 144c0c3
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Mon Oct 24 15:22:31 2022 +0000
+
+    Merge branch 'use-mypy' into 'main'
+    
+    Automate code type-checking using mypy.
+    
+    See merge request magnet/declearn/declearn2!6
+
+commit 144c0c39b9a061dc747864d34d9bc0ebf750a4dc
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Oct 24 10:32:23 2022 +0200
+
+    Add some type checks and hints to model subclasses.
+
+commit 6882651c21a7297be01c6501e9a4b60f1ae099c8
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Oct 19 16:08:44 2022 +0200
+
+    Prevent the absence of effort constraints on training and validation.
+
+commit 537a326928febd8febfd3b8d7f462b9a210dbf26
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Tue Oct 18 08:08:42 2022 +0000
+
+    Update the README file.
+
+commit 03ec2cb658797018b07f73b11ade48715701c51f
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Oct 17 11:50:04 2022 +0200
+
+    Minor formatting fixes.
+
+commit 2e670270f0f8afb339804fe2ad34a96ed0dd67d1
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Oct 17 10:04:55 2022 +0200
+
+    Turn `Vector` operator class attributes into properties.
+    
+    The rationale behind this change is that assigning a function
+    to a class attribute results in it being bound as a method as
+    per the Python data model.
+    However, for unclear reasons that may have to do with the way
+    they are built, `operator.[op]`, `numpy.[op]` and `torch.[op]`
+    are not affected by this binding, which is not desirable in
+    the context of `Vector`.
+    Yet, to prevent this issue in future framework-specific classes
+    (which was hackily dealt with for tensorflow), and to improve
+    their documentation, these base operator attributes were turned
+    into properties.
+    Additionally, this commit extends the docstring of `Vector` to
+    provide developers with indications as to what should or may be
+    implemented, extended or overridden by concrete subclasses.
+
+commit ea984108719b2217cc3d9a6c0cf631e2e2924a3e
+Merge: 2e1c1d2 ae5b064
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Oct 14 19:12:00 2022 +0200
+
+    Merge branch 'main' into use-mypy
+
+commit ae5b064bf7b21959d5d5d041d9024965d8da14f2
+Merge: b2a4423 9e9efb3
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Fri Oct 14 16:45:52 2022 +0000
+
+    Merge branch 'heart-demo' into 'main'
+    
+    Add examples folder
+    
+    See merge request magnet/declearn/declearn2!5
+
+commit 9e9efb35120bd91c63cd44870c7edb0569d37865
+Author: Nathan Bigaud <nathan.bigaud@inria.fr>
+Date:   Fri Oct 14 18:31:24 2022 +0200
+
+    Implement UCI heart disease dataset example.
+    
+    Co-authored-by: Paul Andrey <paul.andrey@inria.fr>
+
+commit 06250995407784193c711b8e3055b21166827845
+Author: Nathan Bigaud <nathan.bigaud@inria.fr>
+Date:   Fri Oct 14 18:28:43 2022 +0200
+
+    Reformat README file.
+
+commit 4091c5405064c2f7bd6e2356c297c9417eff05b1
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Oct 14 18:01:20 2022 +0200
+
+    Implement and deploy `declearn.test_utils.run_as_processes`.
+
+commit c08c741f13d3e4d7ce813963433c678e391d2136
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Oct 14 18:00:49 2022 +0200
+
+    Add `declearn.test_utils` and move `generate_ssl_certificates` into it.
+
+commit 2e1c1d2aeeca23adf706ff6f81affa0a9d2df02e
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Oct 13 13:59:37 2022 +0200
+
+    Automate code type-checking using mypy.
+
+commit b2a44235ec0743d240504beaa0bf316b1f0d0ffe
+Merge: eeae8c6 6c33d9f
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Wed Oct 12 13:18:06 2022 +0000
+
+    Merge branch 'gardening' into 'main'
+    
+    Code Cleaning & Automation
+    
+    See merge request magnet/declearn/declearn2!3
+
+commit 6c33d9f5f80dfc3d4aed373f8be90e3b88b37375
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Oct 12 12:11:33 2022 +0200
+
+    Document `Vector.coefs` attribute in (sub)classes' main docstring.
+
+commit aebb9c3f98f7d937622a711fd8facec49f54cd4b
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Oct 12 12:07:01 2022 +0200
+
+    Revise rng seeding to generate data batches.
+
+commit 0fcedf3946c27196bfcfb0e20e3544ace803d71c
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Oct 12 11:48:43 2022 +0200
+
+    Raise if `InMemoryDataset.generate_batches` returns an empty iterator.
+
+commit b20071abc7daffee44c01f8d133c975b36cf5c65
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Oct 12 11:40:57 2022 +0200
+
+    Add `dtypes` and `shapes` methods to `Vector` and refactor `__repr__`.
+
+commit 27b0aa013bfcc7588784a1a1e9854e1bff32a81b
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Oct 12 10:18:27 2022 +0200
+
+    Extend README as to black, pylint and conda.
+
+commit 587c8c23546ddf98c713d7a115e30f8592f48971
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Oct 11 13:02:49 2022 +0200
+
+    Automate code verification using tox and CI/CD.
+    
+    * Add `black --check` and `pylint` code verification commands to the `tox.ini` file.
+    * Add the associated tools as extra dependencies for `declearn[tests]`.
+
+commit 4d793ac2768aed9f59a6d5641d59e6178fbe57a8
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Oct 11 14:43:24 2022 +0200
+
+    Add `Vector.compatible_vector_types` property and remove redundant code.
+
+commit cf2b41dc28184c6a812e71c80ec8d1031e24bf10
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Oct 11 14:22:53 2022 +0200
+
+    Refactor some redundant code in communication Server classes.
+
+commit 2af0234062ef55d81615b301935269a2e7c07f4f
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Oct 11 13:02:00 2022 +0200
+
+    Reformat code files using black.
+    
+    * Run [black](https://github.com/psf/black/) to reformat the existing codebase.
+    * Add a limited amount of `# fmt: off` comments to protect some code blocks that
+      are believed to achieve better readability in their previous form.
+    * Add (limited) black configuration parameters to `pyproject.toml` for their use
+      by any contributor to declearn.
+
+commit 995499c7abc5a901144ea75bd5d83633affd633d
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Oct 10 16:51:23 2022 +0200
+
+    Fix `pyproject.toml` installation and drop `setup.cfg`.
+    
+    * Fix setuptools instructions as part of `pyproject.toml`.
+    * Drop now-useless `setup.cfg` file.
+    * Add a missing dependency (installed by tensorflow, hence
+      unseen when running unit tests): `protobufs`.
+
+commit fb6d2109378287a63329e15df957c05ac1e3b7d0
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Oct 10 14:18:27 2022 +0200
+
+    Add `logger` argument to communication and orchestrating classes.
+    
+    * Remove former `logger` class attributes.
+    * Add `logger` optional argument to `Client`, `Server`, their subclasses and
+      the associated build tools.
+    * Add `logger` optional argument to `FederatedClient` and `FederatedServer`.
+    * The new `logger` argument enables passing an existing logger, or the name
+      of a logger to create or re-use. When left to None, a name is automatically
+      generated, which differs from client to client based on their name.
+    * As a consequence:
+      - Client loggers are now instance-specific by default, to ease debugging.
+      - End-users and developers can now configure logging as they wish, notably
+        to write down results to files.
+
+commit fda19ea5d986b8c97ae8b48ada3881387df60095
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Oct 10 12:08:43 2022 +0200
+
+    Disable time-out on websockets keep-alive pings.
+    
+    * Websockets (optionnally, by default) uses keep-alive ping/pong
+      messages to prevent connections from being deemed idle and thus
+      closed e.g. by network proxies.
+    * Previously, declearn had been written in the intention not to
+      use this feature, however it was indeed active, and made open
+      connections to shut down under a (short) timeout due to ping/
+      pong apparently not working properly, even on the localhost.
+    * This commit revises the code to enable keep-alive ping/pong,
+      but disable timeout associated with them (hence the requests
+      are attempted, can hopefully bring stability to connections,
+      but will not disrupt declearn in case they fail in spite of
+      the connection still being active).
+    * Note: the actual future solution will be to implement proper
+      authentication and therefore reconnection mechanisms.
+
+commit eeae8c670d9dd91e5b65288311bff6471c0711ee
+Merge: 435c2c5 049ddb3
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Wed Oct 5 10:07:23 2022 +0000
+
+    Merge branch 'optimize-model' into 'main'
+    
+    Improve Model and its subclasses.
+    
+    See merge request magnet/declearn/declearn2!2
+
+commit 049ddb32ef761fa5c742c488992c2c630b6fb266
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Wed Oct 5 10:07:22 2022 +0000
+
+    Improve Model and its subclasses.
+    
+    Clean-up Model and its subclasses:
+    * Improve documentation of Model methods.
+    * Harmonize `_unpack_batch` method name for the current Model subclasses.
+    * Harmonize loss-averaging behavior of the current Model subclasses.
+    
+    Improve TensorflowModel:
+    * Optimize gradients computation in `TensorflowModel` using `tf.function`.
+    * Improve the management and serialization of `loss` in `TensorflowModel`.
+    * Implement utilities to build keras Loss objects from strings or functions.
+
+commit 435c2c5326144d2913ecd344f34e3b129270ae92
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Oct 4 12:15:06 2022 +0200
+
+    Remove useless caching instructions from CI/CD config.
+
+commit 697dc900a7888344a5f287fab961741ae3b91c2b
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Oct 4 12:09:38 2022 +0200
+
+    Add some metadata to installation files.
+
+commit 8877b95c16d7f84c5d01452a057bafad9049d473
+Merge: 376c878 b004fc8
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Tue Oct 4 10:06:59 2022 +0000
+
+    Merge branch 'refactor-effort-constraints' into 'main'.
+    
+    See merge request magnet/declearn/declearn2!1
+
+commit b004fc823bfadc98de1b508ae4388210596261cd
+Author: ANDREY Paul <paul.andrey@inria.fr>
+Date:   Tue Oct 4 10:06:59 2022 +0000
+
+    Refactor and improve effort constraints applicable to clients.
+
+commit 376c8785b3a1ff4c157511ed95840182bbf75ff0
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Sep 29 17:15:47 2022 +0200
+
+    Minor docstring fix.
+
+commit 2f3c16a0a0df6ceab02ecdbbf68783a20dd1ec3e
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Sep 26 11:10:02 2022 +0200
+
+    Protect `TorchModel.compute_batch_gradients` outputs from side effects.
+
+commit 1726bae1b9199c6729131e026773e1c560b3f3fa
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Sep 26 11:09:08 2022 +0200
+
+    Refactor `TorchModel` backend loss computation.
+
+commit 7ff16191ef4ba432022fa6a9c7651f644b6bb595
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Sep 22 11:38:54 2022 +0200
+
+    Specify 'localhost' as '127.0.0.1' in tests to avoid CI failure.
+
+commit 2cd6995fdd85d8b445978e2e80e6bdd93f000394
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Sep 21 17:01:52 2022 +0200
+
+    Avoid `test_torch[RNN]` failure in py38.
+
+commit c7a431e1688b16da681eee7e0d25656969ec8f11
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Sep 21 15:33:43 2022 +0200
+
+    Add CI/CD tags to use shared inria runners.
+
+commit 7a1bca48345ffce294d6226b4dca82c07e070c89
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Sep 21 15:07:51 2022 +0200
+
+    Revise CI/CD configuration.
+    
+    Changes:
+    * Add some setup instructions, that should enable caching
+      installed packages rather than downloading them on each
+      and every pipeline call.
+    * Configure tests to run without '--fulltest' and on the
+      main branch only.
+    * Configure tests to run with '--fulltest' when a merge
+      request is created.
+    
+    Rationale:
+    * Avoid wasting resources on CI/CD jobs on _every_ commit:
+      trust developers to test their code when relevant.
+    * Ensure tests are run on the main branch as it is somewhat
+      more critical than development ones.
+    * Automate tests in the context of MR, which is nice.
+
+commit 1bf8fc837e5545e85f5d3434d2225567e45b4554
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Sep 21 14:56:33 2022 +0200
+
+    Add `--fulltest` commandline option and skip some tests by default.
+
+commit 6688db7e5934e9a0430c06f7d4eb3a0894ed50ed
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Sep 21 14:29:28 2022 +0200
+
+    Use validation datasets in `test_main.py`.
+
+commit f1106ec2e477b64e5a5af82a4b94193a26093fa0
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Sep 21 14:14:42 2022 +0200
+
+    Fix registration timeout use in tests.
+
+commit d5f6200b76f18e2c95d360b8e7f0bfadac18a849
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Sep 21 14:13:06 2022 +0200
+
+    Add default value for `RegisterConfig.min_clients`.
+
+commit 844b74100cd31436b7e0d96fb7ca972456dfeb5e
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Sep 21 12:56:28 2022 +0200
+
+    Add GitLab CI configuration file.
+
+commit 84aef330fdaa0f69c5962916fd29110128e4a433
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Sep 21 12:55:31 2022 +0200
+
+    Add some internal cross-references to README.
+
+commit 14881b9dc7a33e1ceb8005aa359b7917205b93a6
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Sep 21 12:51:02 2022 +0200
+
+    Add `tox.ini` configuration file.
+
+commit bcef11d9edf2c6a6decbf273c780feb9620a8a30
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Sep 21 12:50:38 2022 +0200
+
+    Update `pyproject.toml` file.
+
+commit 296f8045fa1f1ff28104d0b92f4442e761d4087e
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Sep 21 11:45:10 2022 +0200
+
+    Silence tensorflow-raised deprecation warnings.
+
+commit e77f9a352d2577984253aff61cdf912a1f121481
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Sep 21 11:05:59 2022 +0200
+
+    Improve GrpcServer-GrpcClient non-xfail unit tests.
+
+commit 7ef961cc76c593a0ac8a851b953c2fc3913dcc55
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Sep 21 11:05:10 2022 +0200
+
+    Add timeout for clients registration in tests.
+
+commit 21b1b48bc4f4c3ccb795dd27d98389e43972f2ce
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Sep 21 10:03:01 2022 +0200
+
+    Fix and document optional dependencies' installation.
+
+commit 628c7142cb8f3bc75a7444699fcb3da1fea1b173
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Sep 20 17:58:53 2022 +0200
+
+    Add a README file.
+
+commit ff4979a79db406c7298360629d2e12c4e0f3b0f5
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Sep 20 14:30:02 2022 +0200
+
+    Fix declearn imports in tests.
+
+commit a722a3cf59ec379275c5bc638101c37f2609e66b
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Sep 20 12:01:17 2022 +0200
+
+    Rename package to 'declearn'.
+
+commit c9068d1a63ceff853cc15afe32f3edb7f3ec4306
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Sep 20 11:56:27 2022 +0200
+
+    Rename 'test' folder.
+
+commit 47dd4c968674594e945e962de9851bc467b89834
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Sep 20 11:40:43 2022 +0200
+
+    Improve `test_routines.py` failure detection.
+
+commit e46b4f4307a1d3d2b6ee23b12737a87e9cd20490
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Sep 20 11:31:42 2022 +0200
+
+    Fix `grpc.protobufs` submodule import.
+
+commit ac4f533b697f077c632bb219c8ae0a8e5fd2e753
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Sep 20 10:49:00 2022 +0200
+
+    Update description and version in installation files.
+
+commit 916494342ec55341922eee14e7b0cde77dc19d63
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Sep 20 10:46:25 2022 +0200
+
+    Add main package docstring.
+
+commit 31a97c920da5d139342fc15a3cd378a6af731234
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Sep 20 10:26:55 2022 +0200
+
+    Fix a docstring typo.
+
+commit ab67e177f9b47cbfde26a9dcd3a410f9eedc3cfd
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Sep 20 10:26:47 2022 +0200
+
+    Modularize and document `FederatedClient`'s init parameters.
+
+commit 302e0588468ba898a1bae42f0e59054d1ef55d9e
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Sep 20 10:06:49 2022 +0200
+
+    Implement generic `load_dataset_from_json`.
+
+commit 118ea9536275fa655019014bde163c7f0cebb9b0
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Sep 19 17:12:07 2022 +0200
+
+    Improve code readability of batch-generation kwargs' handling.
+
+commit 18c1ebc31d158b356667dbe752ef223e6cb7b511
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Sep 19 17:10:26 2022 +0200
+
+    Deploy `Checkpointer` use in `FederatedClient`.
+
+commit a8d68bac42e8f495ca32a50b7bd2a9ecd0e9d4be
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Sep 19 16:36:25 2022 +0200
+
+    Fix `FederatedServer._keep_training`.
+
+commit dcb53b431131c949f4da66702c00b4e1699208bf
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Sep 19 16:15:07 2022 +0200
+
+    Ensure checkpoint folder is created.
+
+commit a947855196ece3dc12a28ef9e2564b705d350284
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Sep 19 16:14:42 2022 +0200
+
+    Redistribute `FederatedServer` parameters between init and `run`.
+    
+    Deploy `RegisterConfig` as part of this code refactoring.
+
+commit 212514e3ddfc400c6fdd6831051d648626b78b72
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Sep 19 16:12:50 2022 +0200
+
+    Add `RegisterConfig` dataclass.
+
+commit a1d350c2a38649c28702d8d2c28e1ac964c8ebd6
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Sep 19 14:22:43 2022 +0200
+
+    Modularize FL training and evaluation parameterization.
+    
+    * Implement dataclasses utils to wrap and parse training
+      and evaluation hyper-parameters.
+    * Expose and use these as part the `FederatedServer` API.
+    * Adjust information passed through messages.
+    * Adjust `FederatedClient` code to make use of the former.
+
+commit d73b65aa77b54179b6fed2b9ae4f1b44e1967ff8
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Sep 19 14:17:46 2022 +0200
+
+    Modularize and document `Server` init parameters.
+
+commit d1a6f9fc30830e28af0d4a943b01754badfe5291
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Sep 19 14:01:26 2022 +0200
+
+    Rename `EarlyStoppingCriterion` to `EarlyStopping`.
+
+commit 702801013f381a2f06d9381e10cc283e5a2ceebc
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Sep 19 11:42:44 2022 +0200
+
+    Add dataclasses to wrap and parse communication endpoint config dicts.
+
+commit 657306bb3167f6e8c90b543a5f0446be1bb7ee8d
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Sep 16 15:31:20 2022 +0200
+
+    Add checkpointing to "main" functional tests.
+
+commit 2753b2810a797e1329c66e28deedcc505445ef9c
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Sep 16 15:22:18 2022 +0200
+
+    Implement server-side model and loss checkpointing.
+
+commit 019608b0e5c4c518aef26376d88c00bdba4b0832
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Sep 15 10:53:15 2022 +0200
+
+    Fix `SklearnSGDModel` loss computation.
+
+commit dd288a0896a79cb3b74177f2182a9fe4162e19e5
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Sep 14 17:27:42 2022 +0200
+
+    Correct loss aggregation in `FederatedServer`.
+
+commit e3dc7bc36e3a0a1f0b1df035c68aeaacf1edfb7c
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Sep 14 17:20:32 2022 +0200
+
+    Correct `SklearnSGDModel` loss computation.
+
+commit 32bfca67a1a6e76435ba02a5186d3d213623c13f
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Sep 14 16:42:50 2022 +0200
+
+    Add `declearn.main` to load-time imports.
+
+commit b7200729a8b0404bd99e5133d4dd7cacdac5a2e1
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Sep 14 16:41:50 2022 +0200
+
+    Add optional validation data to `FederatedClient`.
+
+commit 10b401b2b1a16d3009aec264c9d8a6ef4b01af67
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Sep 14 14:27:31 2022 +0200
+
+    Fix `SklearnSGDModel` initialization.
+
+commit 0a7d455013982963b35137fa4c63b8c2e3c4867f
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Sep 14 13:33:17 2022 +0200
+
+    Fix various bugs in `InMemoryDataset`.
+
+commit 4efea666431cbf5c891b7b6f1f42e9f4629731b8
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Sep 14 13:32:43 2022 +0200
+
+    Fix Yogi optimization module's formula.
+
+commit ad5c4e0fd61e2871a5a50c42b5e8502378556f51
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Sep 13 15:27:58 2022 +0200
+
+    Extend documentation of communication `Client` and `Server`.
+
+commit adc08808cd7ff22951427a2e4ea16e76baf807d3
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Sep 13 12:38:11 2022 +0200
+
+    Remove unrequired `time.sleep` safeguards from `test_main.py`.
+
+commit 2b37a4b706ee5616ee617758cfcb2e9cc0396028
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Sep 13 12:30:23 2022 +0200
+
+    Fix `test_grpc.py` unit tests.
+
+commit 4353965a324b65ecc52edbc529a5ab9ca3603d57
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Sep 13 12:14:03 2022 +0200
+
+    Fix `GrpcClient.register` to catch connection failures.
+
+commit 03eb72398ea6794ab0e497fecdf32e35a092f200
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Sep 13 12:13:18 2022 +0200
+
+    Add `WebsocketsClient` reconnection upon registration failure.
+
+commit c81105fb664f696f816bca8844942ef7ba1b80b4
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Sep 13 12:12:39 2022 +0200
+
+    Add 10-seconds reconnect attempts to `WebsocketsClient.start`.
+
+commit 104ac195518d98c73eb8f52dff3ee0a6defef6aa
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Sep 13 12:11:18 2022 +0200
+
+    Expand `Client` start/stop methods' specifications.
+
+commit 94db32c6af190255b1584f55644a3111479eb5cd
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Sep 12 17:12:21 2022 +0200
+
+    Implement functional tests for declearn's main classes.
+
+commit 5c55524e3bad42e69eba642163b6346e8c74e0e5
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Sep 12 16:38:17 2022 +0200
+
+    Fix `aggregate_data_info` edge case `required_fields=set()`.
+
+commit 0ab4c461a33b9be9739b1f55ce6b16023c39c7a5
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Sep 12 13:55:59 2022 +0200
+
+    Add JSON support for built-in set objects.
+
+commit 217553f0600d354687fb5098b56b9a92743d41d3
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Sep 12 13:51:28 2022 +0200
+
+    Prevent `InMemoryDataset.classes` from storing `numpy.generic` objects.
+
+commit e85d6ba8de6159be7ece5c239bf80a707a795428
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Sep 12 13:40:09 2022 +0200
+
+    Remove port shifting from `communication/test_routines.py`.
+
+commit 42d1de49be9a131c7dfd841047fac03bf2c7293c
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Sep 12 13:34:11 2022 +0200
+
+    Improve auxiliary variables' specs in messaging.
+
+commit 32f367b0e436fc743c82f04be71c7179186d852d
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Sep 12 13:33:42 2022 +0200
+
+    Fix auxiliary variables' passing.
+
+commit 521faea4bbbfa73acc6411e8ec3bcaf66edcace2
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Sep 12 13:18:03 2022 +0200
+
+    Fix `FederatedClient.stop_training`.
+
+commit 89888ed3884c8cfaf6a8e4713d200e8dfe05237e
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Sep 12 12:57:30 2022 +0200
+
+    Deploy `EarlyStoppingCriterion` to `FederatedServer`.
+
+commit c88577bdf88d9d21ce4e5b6f2d701dc219eb5f4b
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Sep 12 12:33:46 2022 +0200
+
+    Implement `EarlyStoppingCriterion`.
+
+commit fadb322a178e944ff514753f02b2e7aed96aeab5
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Sep 12 12:33:01 2022 +0200
+
+    Refactor some code into `declearn2.main.utils` submodule.
+
+commit 68b1e50bd23d65f6bcd5c3a006cfc6071a4c160b
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Sep 12 12:30:44 2022 +0200
+
+    Improve documentation of FederatedServer data-info parsing code.
+
+commit 2ea3dccfdbfa167141b3e305398c12a43af50bb9
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Sep 9 15:32:09 2022 +0200
+
+    Implement `stop_training` routines in main classes.
+
+commit 6b1be7544fbba7c2b3364365af7df2b2af51975d
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Sep 9 14:02:08 2022 +0200
+
+    Fix type-hinting of exchanged model weights.
+
+commit f9317e55c67a904bf8145cdc2a9a4043cbf7eee8
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Sep 9 13:35:32 2022 +0200
+
+    Implement functional tests for communication Client/Server use.
+
+commit caccedddc3249b7535b3aba03e52db8b0b85e7f4
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Sep 9 11:31:23 2022 +0200
+
+    Implement loss evaluation rounds in main classes.
+
+commit 8b8e2ccb574c20abcba9d355a4ff1223d7c76d10
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Sep 8 17:27:18 2022 +0200
+
+    Fix optimizer auxiliary variables' parsing on server side.
+
+commit ac9883e498a2bfb4f74a0ee1dff88452e78cc478
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Sep 8 16:39:13 2022 +0200
+
+    Improved verbosity of main classes during initialization.
+
+commit 7d4c3f25dde6e02f03c91354d8a95ad8fac2a59d
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Sep 8 16:38:43 2022 +0200
+
+    Add `wait_for_clients` arguments to `FederatedServer.run`.
+
+commit 516428bb75732aaaa87961089185e658cd6bb306
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Sep 8 16:37:03 2022 +0200
+
+    Fix `FederatedClient` initialization success reporting.
+
+commit 71a85279078d24f839f57896f205c1a1d5642758
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Sep 8 16:36:28 2022 +0200
+
+    Fix communication messages' de-serialization.
+
+commit 6d1200865d7b9431f865376c9b1fe4f7b4da40dc
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Sep 8 15:43:32 2022 +0200
+
+    Add `expose_classes` parameter and attribute to `InMemoryDataset`.
+
+commit 762f9fe8c9669e2f116b95f6e6c9b70c36badc6d
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Sep 8 15:43:04 2022 +0200
+
+    Fix `SklearnSGDModel.from_parameters`.
+
+commit e3a4954b294cfc0009cf2649f26a1c3d6acae2ac
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Sep 7 16:47:36 2022 +0200
+
+    Deploy `Client` revision to `FederatedClient`.
+
+commit 12879d84e71f2e8dc5c863bcf80c57bfb9924527
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Sep 7 16:45:34 2022 +0200
+
+    Revise and improve communications `Client` API.
+    
+    * Modify `Client` in a similar way as `Server`:
+      - turn into an asynchronous context manager
+      - make `start` and `stop` methods asynchronous
+      - get rid of `loop` parameter and attribute
+      - add `_setup_ssl_context` abstract method to have
+        the parent class handle children' shared arguments
+
+commit 19efade6c6922ce2b9011d33cc5c8b2fb4486625
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Sep 7 16:29:22 2022 +0200
+
+    Deploy API revisions to fix `FederatedServer`.
+
+commit fae428cd95fff501935bd5985a0ee11aa28cd860
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Sep 7 16:28:48 2022 +0200
+
+    Revise and improve communication `Server` API and subclasses.
+    
+    [API]
+    * Make `start` and `stop` methods asynchronous, enabling to get
+      rid of `self.loop.run_until_complete(...)` calls.
+    * Turn `Server` classes into asynchronous context-managers, so as to
+      automate `await server.start()` and `await server.stop()` calls.
+    * Remove `loop` argument and parameter completely from `Server`.
+    * Add `_setup_ssl_context` abstract method to `Server` in order to
+      delegate all shared arguments' processing to super in children
+      classes.
+    
+    [GrpcServer]
+    * Refactor `MessageBoardServicer` subclass to ease readability.
+    * Delegate gRPC server creation to `start` method out of API
+      consistency, and to enable re-using the same `GrpcServer`
+      object multiple times.
+    * Make '8765' the default port (as with `WebsocketsServer`),
+      so that the runtime port-selection becomes a documented but
+      non-default feature (as it is unpractical for URI sharing).
+
+commit b44b1acdbd15bdfc45cce2bcce723a508c9b7b8a
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Sep 7 15:06:15 2022 +0200
+
+    Fix `declearn.communication.build_server`.
+
+commit 5b9ab599363a38376f61089d11b21ac74f69774a
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Sep 7 14:57:18 2022 +0200
+
+    Implement TorchModel (de)serialization.
+    
+    Note: unfortunately, this relies on pickling the model,
+    which is unsatisfactory from a security perspective but
+    is the simplest practical way available at the moment.
+
+commit 10f9195b27a92c1b76c3629da0c53e1792c2111e
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Sep 7 13:17:07 2022 +0200
+
+    Avoid `asyncio.get_event_loop()` DeprecationWarning (Py>=3.10).
+
+commit 2daf688e90f7c0e981421587b63ceb6c088c8364
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Sep 7 13:08:31 2022 +0200
+
+    Fix OptiModule unit tests.
+
+commit 305c7c09a0363d057e4918843db33ab754b12ff5
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Sep 7 12:05:03 2022 +0200
+
+    Add `compute_loss` method to the `Model` API.
+
+commit 8a9808949ef9b619f93c5dbbf2951ca7fd09c253
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Sep 7 11:59:30 2022 +0200
+
+    Implement `TorchModel.compute_loss`.
+
+commit c12b25fa57b124bcc25e0c28ee441355ff64a505
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Sep 7 11:59:12 2022 +0200
+
+    Implement `TensorflowModel.evaluate`.
+
+commit ebcd160616a02680c2d441c87b3e10c2c8762b00
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Sep 7 11:58:45 2022 +0200
+
+    Ensure proper training/evaluation behaviour is used with TensorFlow.
+
+commit 926255830a2b193b6bfa13014974703978c9e4ed
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Sep 6 15:10:05 2022 +0200
+
+    Improve documentation of FederatedClient.
+
+commit cbe33f1f0ae062839ebe028fbb6b0753c47f5a73
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Sep 6 12:50:11 2022 +0200
+
+    Update dependencies in declearn2 installation files.
+
+commit bd3130f831329cb5f0a4e20a0246a779d4d8ed96
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Sep 6 12:20:44 2022 +0200
+
+    Improve documentation of FederatedServer.
+
+commit 4110d2bb7607572de2ea3e13665d2b83a3ddf701
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Sep 6 12:20:23 2022 +0200
+
+    Enable partial clients' participation in training rounds.
+
+commit 406a1cdda8336178ce996e8de72c80c44da53b34
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Sep 5 17:17:49 2022 +0200
+
+    Modularize clients' training round effort.
+
+commit 2e597c4f5b92df67aea0cef669eec638d041a8bb
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Sep 5 16:41:12 2022 +0200
+
+    [WIP] Revise "main" classes' current rewrite.
+
+commit 98bde8718381d7c4cfc6a081df83d06d15215530
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Sep 5 16:40:40 2022 +0200
+
+    Add `CancelTraining` message class.
+
+commit 58c172543b7ba0a61d8bf303d7a7a315ae508db5
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Sep 5 15:46:13 2022 +0200
+
+    Rewrite communication submodule.
+
+commit 5dd1883078685d9f6debb37ee429bbd3dd0c5acf
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Sep 5 15:32:56 2022 +0200
+
+    Fix internal imports in `strategy` submodule.
+
+commit 3185243b179677b32dc9c173aaad7de2f55ff15a
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Aug 17 18:47:52 2022 +0200
+
+    [WIP] Start integrating "main" classes.
+
+commit 62bb504349f45949443c938b1aecbc1dba58e5e0
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Aug 16 18:48:43 2022 +0200
+
+    Implement (scratched) new `Strategy` API and subclasses.
+    
+    Notes:
+    * This commit has *not* been properly tested yet and will
+      most likely be patched soon.
+    * The current API is not to be considered stable~definitive
+      (although it may be kept for a while in order to finalize
+      the base re-integration of the main FL classes).
+
+commit c3575ab8b4e864d59369f81518d267e6ab284618
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Aug 12 17:42:34 2022 +0200
+
+    Improve OptiModule documentation.
+
+commit b96bba042b816254b48e71ba4e6f972c47b5a33b
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Aug 12 17:25:00 2022 +0200
+
+    Correct Scaffold algorithm correctness.
+    
+    * Rewrite local states' update:
+      - Simplify the formula to remove unrequired terms.
+        (previous version was correct but less effective)
+      - Raise in case state is set to be collected while
+        no optimization steps have been taken (otherwise
+        aggregation becomes wrong on the server side).
+    * Correct server-side behaviour: remove undue operation.
+      - No correction is to be applied on the server side to
+        the global updates; previous version was wrong.
+      - Thus the server-side module merely aggregates local
+        states and sends back information to all clients.
+    * Correct associated unit tests.
+
+commit a8f6e149106ec5ed7071260f5d016149713b65d6
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Aug 12 15:27:04 2022 +0200
+
+    Add `__repr__` methods to Vector subclasses.
+
+commit a59fcf1aa349fe3daf21a5d419a4f08a0234dc16
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Aug 12 15:10:17 2022 +0200
+
+    Added type-registration to Model classes.
+
+commit d4a27aaef3eb46e28c01e35af7a268b0b49edd72
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Aug 12 11:48:29 2022 +0200
+
+    Implemented 'data_info' requirements and initialization in Model API.
+    
+    Note: such a mechanism exists in declearn1, which is thereof restored
+          and expanded thanks to the new `declearn.data_info` module.
+
+commit 052acf5b607a2f323b42fc83b669cd2b35859dec
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Aug 12 11:26:46 2022 +0200
+
+    Add `InputShapeField` data_info specification.
+
+commit ee951ec80f0b8cc804d1ec0be9e6a628aa633fda
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Aug 12 09:48:38 2022 +0200
+
+    Patch some docstrings in `data_info`.
+
+commit eb57526f3afe59d784a40900fe78d87b65164d54
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Aug 11 18:17:49 2022 +0200
+
+    Implement `data_info` module to specify metadata fields.
+
+commit adb42ab76cd44bc7d0af1282887edddfc99326fc
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Aug 11 15:27:31 2022 +0200
+
+    Remove unrequired pylint comments.
+
+commit 4286a758a2204076da2a6b1f5ed1cf7cd612047a
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Aug 11 10:03:36 2022 +0200
+
+    Fix docstring typos.
+
+commit 885a479aef0c40c3e04a2efc6592f6b65cd0c3c5
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Aug 11 10:03:10 2022 +0200
+
+    Split some `test_grpc.py` code into `conftest.py` for re-use.
+
+commit 3685f242c3b0dcc29207de19529bcd8a4e0d2f54
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Aug 11 10:02:16 2022 +0200
+
+    Fix type-registration of communication subclasses.
+
+commit 6cef948fd47e6baf1af681c6c2359822cf0a4db2
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Aug 10 17:22:58 2022 +0200
+
+    Add exception in `GrpcClient.ping` when client is stopped.
+
+commit 027ee266bbc5ac937b124e8a2194ca64a6414a9a
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Aug 10 17:22:22 2022 +0200
+
+    Add revised tests for low-level gRPC communications.
+
+commit cf7333efc2a4dd18c6eaa31eb40e41ee5733a5b3
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Aug 10 13:33:59 2022 +0200
+
+    Fix SSL setup of `GrpcServer`.
+
+commit b9470bd58742982919c3bbff3b7644cd537922f8
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Aug 10 11:30:56 2022 +0200
+
+    Restore `GrpcClient.ping` method.
+
+commit 05467ab1a9bac217bbc951c9fd83db13e59e542f
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Aug 10 10:51:15 2022 +0200
+
+    Add `client_names` property to `Server` classes.
+
+commit af3a5020882ad35e8daa52b0c415817a6188c1e2
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Aug 10 10:39:35 2022 +0200
+
+    Add client name de-duplication in `WebsocketsServer`.
+
+commit d41806daf03bb4507d152dd07cd45ff747f257a6
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Aug 10 10:11:48 2022 +0200
+
+    Correct `GrpcServer.wait_for_clients`.
+    
+    The method previously returned the full `{ip: client_dict}` dict
+    stored by the dependent service, while the API specifies that it
+    should return `{name: data_info}`. This commit enforces that.
+
+commit 5ef8b9ddd5153f538aa7864be8b733ca81caa03b
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Aug 10 10:08:38 2022 +0200
+
+    Add `send_message` async method to `Server` classes.
+    
+    Rationale: the current `broadcast_message` method only enables
+    sending the _same_ message to all clients, whereas it is often
+    required to send distinct messages, be it to limit participants
+    to a training round, or to pass individual auxiliary variables.
+
+commit 68dcfa3c7af681aa8084290fa56f249e8d6fa67c
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Aug 9 18:40:27 2022 +0200
+
+    Enhance communications submodule's docstrings.
+
+commit 8affb88adad835f4fc4ff289679dc51e314f5bd0
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Aug 9 18:31:33 2022 +0200
+
+    Implement `build_client` and `build_server` utils.
+
+commit 2eb9d0062915c45c6562e25c035b6cac59ffa3cf
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Aug 9 18:28:30 2022 +0200
+
+    Split `communication.api._base.py` into client and server files.
+    
+    Note: this does not change _anything_ from the user's perspective
+          or to imports outside the submodule, as the classes are still
+          re-exposed at the `api` submodule level.
+
+commit e0049dcf73c457766ad2d9593bb00810f1d7f9b2
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Aug 9 17:56:12 2022 +0200
+
+    Revise gRPC backend code to improve clients' identification.
+    
+    * Add client names' aliasing in Service class, enabling client
+      names' de-duplication (while preserving the initial info).
+    * Use requests' provenance to identify clients, and retrieve
+      their associated alias on the server side.
+    * Remove newly-unrequired 'name' attribute in some messages.
+    * Note: this is probably not a definitive design, as we might
+      want to enable clients' address to change and prefer a token-
+      or key-based authentication and identification method.
+
+commit 1e5354e66dfcb58d7b093166bbaa05021be3c857
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Aug 9 16:52:58 2022 +0200
+
+    Patch some logger-related code in communication classes.
+
+commit 84fa86973022724419b096bfdfb474a1d4a43a09
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Aug 9 16:51:30 2022 +0200
+
+    Add `uri` parameter to communication `Server` classes.
+
+commit 3bc1252b7ae3e3df38a56c40cfc78af6b0c01433
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Aug 9 16:39:04 2022 +0200
+
+    Revise gRPC server-side backend code.
+
+commit 3b237e1011695a2df0df351c3486973eb398934a
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Aug 9 16:38:46 2022 +0200
+
+    Fix `GrpcServer.wait_for_clients` logging.
+
+commit 50e1e0f9536c4dae9614e243b302e1cf065dce51
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Aug 9 16:02:06 2022 +0200
+
+    Abstract some code into base communication `Client`.
+
+commit f5bd3628549449c4e37b4073268aea3b013c5b41
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Aug 9 15:57:53 2022 +0200
+
+    Integrate revised `GrpcClient`.
+
+commit ae972360094e8dd63644b9644edf128a9cd7ae0e
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Aug 9 15:53:13 2022 +0200
+
+    Patch gRPC server-side code on minor points.
+
+commit 723ebb2f18cfce83de6e934894c97fcd38c89444
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Aug 9 15:21:30 2022 +0200
+
+    Integrate revised `WebsocketsClient`.
+
+commit 38058ac28b3d480208f8f01c11d11a312f8816f2
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Aug 9 15:20:55 2022 +0200
+
+    Revise communication `Client` API.
+
+commit 0d7554289a9d8a5c7be41a42fc485d01d618ddab
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Aug 9 15:18:48 2022 +0200
+
+    Deploy `get_logger` to communication classes.
+
+commit 7ebb4201500fe08fa55c2d8239c91d794d16768a
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Aug 9 15:18:11 2022 +0200
+
+    Implement `get_logger` under `declearn.utils`.
+
+commit f65da040b8e46b933eb11924c0d95689f3c90a1b
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Aug 9 12:00:00 2022 +0200
+
+    Abstract some code into `Server` and harmonize children classes.
+
+commit 3c74516e2a082e6819dd0764801c7753ce790273
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Aug 9 11:58:55 2022 +0200
+
+    Fix websockets imports tracking and rename WebsocketsServer class.
+
+commit 5ba88238bb6efae796af30549dbb650d79a65447
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Aug 9 10:47:21 2022 +0200
+
+    Improve and harmonize password support in Server classes.
+
+commit 6fcccbe2cbcc36145bfb3e65c729d42efa217656
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Aug 5 21:01:50 2022 +0200
+
+    Integrate revised gRPC server-side code.
+
+commit 314418a7ce007554bffa84560b799fa6fd131330
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Aug 5 21:00:15 2022 +0200
+
+    Revise marginally the previous commit.
+
+commit 67ed275de0f2f7bcb4607bcda0953ddb5b611f92
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Aug 5 16:52:56 2022 +0200
+
+    Start integrating revised communication into declearn2.
+
+commit 5fd46ded5c205c5c96de3378acaa23d6bf9deca8
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Aug 5 11:25:22 2022 +0200
+
+    Revise docstring sections' formatting.
+
+commit 77ca114359a85dd38fe1b058d5455e333df797c3
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Sep 20 11:02:32 2022 +0200
+
+    Add `from_parameters` class constructor to `SklearnSGDModel`.
+
+commit c0565275250e536ef3e13a8f6d6d98779b1140ce
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Aug 4 14:58:14 2022 +0200
+
+    Refactor Model subclasses' test code.
+
+commit b7692f960634e0edc7ef0612c0c11cde30ea916b
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Aug 4 13:43:05 2022 +0200
+
+    Temporarily replace 'Self' type annotations in Vector.
+    
+    * Self should be the proper way to annotate return types
+      for Vector that are in fact subclass-dependent so that
+      they are properly type-checked by static linters.
+    * However, as of the current (0.971) version of mypy, it
+      is not yet well-linted, causing a lot of "type: ignore"
+      comments in code.
+    * For the moment, we therefore drop Self from Vector base
+      code (but preserve it in concrete implementations). As
+      soon as mypy supports Self, this will be changed back.
+
+commit 5faabbfddbf939130c69efc0df8205f1caa477cc
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Aug 4 13:22:49 2022 +0200
+
+    Fix some type annotations in `NumpyVector`.
+
+commit 29dabfdc86c438f46634b461f0c6057e5069cdaa
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Aug 4 11:46:24 2022 +0200
+
+    Fix unit tests' linting issues (code-only changes).
+
+commit fb86fdf5bbe34e5bb5251a9242a7c9252946fdbf
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Aug 4 11:30:54 2022 +0200
+
+    Revise Vector building and serialization API.
+    
+    * Replace `Vector.__new__` type-inference trick with `Vector.build`
+      staticmethod to ease code readability (as well as type checking).
+    * Extend the behaviour of `register_vector_type`: in addition to the
+      backing of `Vector.build`, this decorator now registers decorated
+      classes under the 'Vector' group name, and most importantly adds
+      JSON (de)serialization support based on the object's `pack` and
+      `unpack` methods.
+    * Note: among the three actions taken by `register_vector_type`,
+      the last one (JSON support) is probably the most desirable.
+    * Modify models' unit tests to take these changes into account;
+      the gain in concision in gradients' (de)serialization tests'
+      code is a direct result from those changes.
+
+commit fc7f91334a541c67e2ad9ea3b21591c52ae1ebad
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Aug 3 19:58:01 2022 +0200
+
+    Implement unit tests for Scaffold optimization modules.
+
+commit 91b916b49ff043e7d77fb866bdb4a95c470a1506
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Aug 3 19:56:45 2022 +0200
+
+    Remove Vector serialization from Scaffold modules.
+
+commit 99c607df414b7b365aff5efb747aefd59e137142
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Aug 3 19:31:38 2022 +0200
+
+    Fix `ScaffoldClientModule` state-update computation.
+
+commit 36a154ad5b317e31d610de7f5ad7a75e09ee02ec
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Aug 3 19:30:09 2022 +0200
+
+    Fix `ScaffoldServerModule.collect_aux_var`.
+
+commit 403a7a848f33ea99c00c5ceb2149133b94f5ac8e
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Aug 3 19:28:34 2022 +0200
+
+    Fix un-optimized equality checks in Vector subclasses.
+
+commit 56b94b231e73f323395d13254607ecaaddc6d644
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Aug 3 18:32:51 2022 +0200
+
+    Replace `Vector` (de)serialize methods with (un)pack ones.
+    
+    * The rationale behind this change is to delegate serialization
+      to classes that handle Vector instances while providing a way
+      to define Vector-subclass-specific conversion to/from a JSON-
+      serializable format (e.g. numpy thanks to declearn utils).
+    * This is not entirely satisfactory though and will probably be
+      further modified soon (before integration in declearn).
+    * Another point to alter is the "register_vector_type" function,
+      which could be removed in favor of "register_type" (in which
+      case (un)pack might become (get|from)_config, unless overall
+      serialization utils get revised as well).
+
+commit ab26a1ec368c215039a177528561ce21b508c47f
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Aug 3 18:10:19 2022 +0200
+
+    Refactor and correct Vector backend code.
+    
+    * Expose additionnal public and private methods at Vector
+      base class level.
+    * Add private-attributes-based operator overriding, using
+      stdlib `operator` to provide working dunders at Vector.
+    * Use Self type-hint and `type(self)` statements to make
+      code both abstract and applicable. Note: mypy does not
+      properly type-check 'Self' yet but should do so in the
+      upcoming months as it is integrated into Python 3.11.
+    * Remove a lot of redundant code in children classes.
+
+commit e03047ea437304a01e95d2fc7fa59141b99bd1d8
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Aug 3 14:37:19 2022 +0200
+
+    Implement generic unit tests for `OptiModule` subclasses.
+
+commit 53e52b5738b3a4c31549a1b85ed7fdcff2a69011
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Aug 3 14:28:15 2022 +0200
+
+    Correct `ScaffoldClientModule.collect_aux_var` behaviour.
+
+commit 33dcd88a907f77e98c7eaba533cadea2e03cec85
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Aug 3 11:33:58 2022 +0200
+
+    Implement unit tests for `utils._serialize` submodule.
+
+commit 8b3d45cc9e22d42a5833df8eab6562810efdce0d
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Aug 3 10:22:07 2022 +0200
+
+    Add `get_config` / `from_config` methods to `Optimizer`.
+
+commit 8292dcd44458c6615b5416789d54d7ce03c7937b
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Aug 3 10:21:39 2022 +0200
+
+    Improve `declearn.utils._serialize` tools' documentation.
+
+commit 371a566ee6c1e2ad977a6be9edb2fa0ded8fea5f
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Aug 3 10:21:16 2022 +0200
+
+    Add support for dict inputs to `deserialize_object`.
+
+commit cb8a55210f41c6c4f87eef52f37b3b848b51ae73
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Aug 2 17:58:30 2022 +0200
+
+    Deployed config-based (de)serialization to `OptiModule` classes.
+
+commit f6bb094b7820a367eadc7ddcc47dffe3da76e88e
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Aug 2 17:40:39 2022 +0200
+
+    Silenced tensorflow-import warnings in unit tests.
+
+commit 75e09c3364846e8ea03de86e8c52d28793cb29de
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Aug 2 17:37:13 2022 +0200
+
+    Implement unit tests for `utils._json` submodule.
+
+commit ccaf835d9feca2e14a05e2e6155608e1e289ee30
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Aug 2 16:39:49 2022 +0200
+
+    Implement unit tests for `utils._register` submodule.
+
+commit fdea21267e0de114032f7f998efcc598fbd90d00
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Aug 2 16:00:43 2022 +0200
+
+    Implement (de)serialization tools for `SupportsConfig` objects.
+
+commit 24eafb34b5f70ed0ff4f7b7b2998bcdde6f429e4
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Aug 2 15:59:32 2022 +0200
+
+    Repackage and register numpy-arrays-(un)packing utils.
+    
+    * Changes to the private import structure do not alter
+      users' access to the implemented functions.
+    * numpy arrays are now supported in JSON dump/load calls
+      provided the proper functions are used a object hooks.
+
+commit 76a9d49b1cf55eee17327633b73bc79bac07eae2
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Aug 2 15:55:33 2022 +0200
+
+    Implement JSON (un)packing utils.
+    
+    * Define and make public `add_json_support` to enable adding support
+      for arbitrary types' (un)packing in JSON load/dump calls.
+    * Define and make public `json_pack` and `json_unpack` functions,
+      which are to be deployed in declearn's backend JSON load/dump
+      calls and ensure registered (un)packing protocols are used.
+
+commit ad6c650ebc15b3b0c8fb8ecf8d2ba7e59ac7954b
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Aug 2 12:02:15 2022 +0200
+
+    Reorder `from typing_extensions import ...` statements.
+    
+    Although it provides with 'future' elements from the `typing` standard
+    library, `typing_extensions` is a third-party package. Statements were
+    therefore re-ordered to abide by PEP-8.
+
+commit 202b4f6e535176281884dbb19e592330160d739c
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Aug 2 11:56:44 2022 +0200
+
+    Implement `SupportsConfig` Protocol-type.
+
+commit ba7c798d91b4f9abf4a6074acf6953835a4d3290
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Aug 2 11:45:16 2022 +0200
+
+    Update installation files.
+    
+    * pyproject.toml is now compatible with setuptools'
+      toml-only installation; in the future, setup.cfg
+      (and legacy setup.py) may therefore be removed.
+    * toml-only install with setuptools does not (yet)
+      support editable install though, hence setup.cfg
+      is preserved for now (for declearn2 installation)
+    * At the moment, installing declearn2 without the
+      installation file for declearn interferring is
+      somewhat difficult; this will be resolved when
+      declearn2 revisions are integrated into the main
+      package.
+
+commit 0347605a7ce07002684265d4df83aac587738bfe
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Aug 2 10:49:28 2022 +0200
+
+    Fix tests' compatibility with Python 3.7.
+
+commit 2a0c5167c6aa5f674940cd6a1f8325eed1285d08
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Aug 2 10:48:56 2022 +0200
+
+    Correct setup.cfg
+
+commit 1c8d1129afe7ccb0f27a1b91e4a7572186f07e19
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Aug 1 18:03:47 2022 +0200
+
+    Implement reverse-lookup types-registration utils.
+
+commit 7b7e8ced71643ec5755206d7d7fbce04eb362b95
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Aug 1 17:14:11 2022 +0200
+
+    Deploy types-registration to OptiModule classes.
+
+commit 8e980649ea1b68fa6bfa78ff5f20fb5639d80682
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Aug 1 17:10:36 2022 +0200
+
+    Implement types-registration utils.
+
+commit a29a7053a5250629a381eb27b2e26ac7dabdae8a
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Aug 1 16:59:56 2022 +0200
+
+    Refactor `utils` submodule into a folder structure.
+
+commit 0a675009fc8ed0f675748ac960217e55de046c5b
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Aug 1 16:45:42 2022 +0200
+
+    Improve docstring formatting of some optimizer modules.
+
+commit 09020dc64fd1b5c7a9182ba5bcaf2709c046ad3d
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Aug 1 16:42:54 2022 +0200
+
+    Update main submodules' import rules.
+
+commit 2dfba8e9aceca550c6f0e6bcb61248a75fd4a9b5
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Aug 1 16:41:34 2022 +0200
+
+    Implement `Optimizer` API and base class.
+
+commit 40aea29075e41b1612f2806efe8668ab49935e2e
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Aug 1 16:41:14 2022 +0200
+
+    Improve and document `OptiModule` API.
+
+commit 03e3cc76706e2fd0f22496abc6b10ada3f28e495
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Aug 1 14:39:14 2022 +0200
+
+    Implement SCAFFOLD as a pair of `OptiModule` classes.
+    
+    Note: OptiModule and overall Optimizer APIs
+    need further consolidation for SCAFFOLD to
+    be effectively working, but the core of the
+    algorithm and its documentation are here.
+
+commit 8cfda044ad6ea5c590d46758d35526e96d647a28
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Mon Aug 1 14:34:53 2022 +0200
+
+    Trivial changes to backend optimizer modules' files.
+
+commit f3b475b156c3ba365d8fdc655a3543ca91e0d5ef
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Jul 29 17:30:09 2022 +0200
+
+    Repackage some code into `declearn.optimizer.modules`.
+
+commit cac92d9ae2df1c4676868408f64686984df46c4f
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Jul 29 16:37:00 2022 +0200
+
+    Implement PyTorch unit tests.
+    
+    Note: the tested neural network architectures
+    and declearn functionalities are the same for
+    PyTorch and TensorFlow save for features that
+    are still being implemented.
+
+commit 587cbc0010966b059fc2893b7ab9b50d8ae94d06
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Jul 29 16:35:36 2022 +0200
+
+    Alter TensorFlow unit tests marginally.
+
+commit c9be2facea395d3351249c47eb2e7e7274b77b65
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Jul 29 16:35:17 2022 +0200
+
+    Fix `TorchModel`'s handling of numpy inputs.
+
+commit b62af968dd520e77e517112f4ab0e3ba708856ff
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Jul 29 16:34:52 2022 +0200
+
+    Fix `TorchModel.apply_updates`.
+
+commit afd659a3fff476b251d0716f05d951ebb8d189f2
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Jul 29 16:34:33 2022 +0200
+
+    Fix `TorchModel` get/set weights.
+
+commit dc84469ecb33d5b90d3003c3c0bd8a9ca34bc8b7
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Jul 29 16:34:00 2022 +0200
+
+    Fix `TorchVector.deserialize` warning.
+
+commit eec7f413317dd1fef0fb6b3b61f6d2efcf784877
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Jul 29 14:41:04 2022 +0200
+
+    Add NumpyVector gradients (de)serialization unit test.
+
+commit ff28fd40dfe694bfc91a13c7e724eaa89b06fcf0
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Jul 29 14:40:45 2022 +0200
+
+    Add `TensorflowModel.compute_loss`.
+
+commit a764735f86d8b5b3542d1fbd64b9ae33ec7b8a00
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Jul 29 13:29:26 2022 +0200
+
+    Implement unit tests for TensorflowModel (and thus TensorflowVector).
+
+commit 9ded427582535aa2853645cc6128befb820114d8
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Jul 29 13:28:40 2022 +0200
+
+    Harmonize `apply_updates` formula between SklearnSGD and Tensorflow.
+
+commit da39226f7461983172f31967eb4c395ae965b5c5
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Jul 29 13:28:08 2022 +0200
+
+    Add numpy-inputs support for `TensorflowModel`.
+
+commit f46c16259389c0edf2014db867ec9ea05b5e8d32
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Jul 29 13:27:04 2022 +0200
+
+    Add full support for `tf.IndexedSlices` in `TensorflowVector`.
+
+commit d2f0754ad2c54e27bd58b0c09fc2030a34f9d4d9
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Jul 29 10:57:23 2022 +0200
+
+    Improved SklearnSGD tests' documentation.
+
+commit 9bb0ef2a1c0deaa22e0d841ed8f4ddacf580f1d3
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Jul 29 10:26:59 2022 +0200
+
+    Refactored SklearnSGD tests to make them unitary.
+
+commit fa22131ee2bede0391410a1de257df01c165faab
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Fri Jul 29 10:26:14 2022 +0200
+
+    Improved SklearnSGD test parametrization.
+
+commit e3f530f130518fe3c4d4607436acc794e9976810
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Jul 28 16:52:10 2022 +0200
+
+    Lighten optimization algorithms' documentation.
+
+commit 5d354188be017148beb87c72e88f1222c77335c1
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Jul 28 16:51:15 2022 +0200
+
+    Turn off the automatic import of `tensorflow` and `torch` submodules.
+
+commit 44b6215f059a562624b5ed5903e88a2e4ffcf511
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Jul 28 16:50:59 2022 +0200
+
+    Rename `SklearnDataset` to `InMemoryDataset`.
+
+commit 2bb61b785373e1001ea3ec36d4c8b80daf668171
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Jul 28 16:50:49 2022 +0200
+
+    Implement unit tests for `SklearnSGDModel`.
+
+commit e1bbe5050b3091bff0c192c06b1ef755a326fbf2
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Jul 28 14:35:02 2022 +0200
+
+    Fix `SklearnSGD` (de)serialization and classifier initialization.
+
+commit 9b867d01c6f521d324dfeb0e4cc7e3844cd6d1a7
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Jul 28 11:31:28 2022 +0200
+
+    Add updated installation files for declearn2.
+    
+    * Use pyproject.toml / setup.cfg files, as `python setup.py install`
+      has been deprecated for some time now.
+    * For now, install `declearn2` rather than `declearn` for revised API
+      testing purposes.
+    * Note that as `setup.py` exists, it will have side effects on the
+      installation. This will be resolved once revisions are merged into
+      the actual library.
+
+commit 337dc951d885d8c4f94c5deaeffc4423354781e0
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Jul 28 11:26:05 2022 +0200
+
+    Revise data batch specification and deploy new `Batch` type-hint alias.
+    
+    * Change the specification of data batches in the `Dataset` and `Model`
+      APIs: a batch is now a (x, y, w) tuple, where y and w may be None.
+    * As a side-effect, remove some boilerplate code and set `unpack_batch`
+      util for future garbage collection as it should now be useless.
+    * Implement a `Batch` type-hinting alias to ease code readability.
+    * Place the latter in a new `typing` submodule (as is done in numpy).
+
+commit bf6bbef2ba15f323d3410858f6e6c75743c4444b
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Thu Jul 28 11:16:23 2022 +0200
+
+    Add sample_weights support to `SklearnDataset`.
+
+commit d992051b35634d3ca6960c0f2ace40750b667965
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Jul 27 17:54:40 2022 +0200
+
+    Implement `SklearnSGDModel.compute_loss`.
+
+commit d3ba4c56e8d0ebed91366eb7d5eba16577c4f086
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Jul 27 17:53:57 2022 +0200
+
+    Fix SklearnSGDModel for regression models.
+
+commit 8f55af2913ba7776b6e94b87de8f078b36601b35
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Jul 27 16:13:00 2022 +0200
+
+    Fix SklearnSGDModel for classifier models.
+
+commit 1b30b51c7eb7561701534b2b856fb0e041a8406f
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Jul 27 15:00:20 2022 +0200
+
+    Correct TorchVector deserialization.
+
+commit e4c6ecc1de23abeb89d2b414a22bb82eb3169548
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Jul 27 15:00:02 2022 +0200
+
+    Improve Vector subclasses' minimum and maximum methods.
+
+commit 454f93268c308b124bcceb6824374f390c37133b
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Jul 27 13:46:27 2022 +0200
+
+    [WIP] Scratch optimizers' modular implementation.
+
+commit 6ed543704a8d9fc7a55930fae02b399a3bfb1f4a
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Jul 27 13:29:36 2022 +0200
+
+    Scratch the implementation of Dataset API.
+
+commit fbd3d397604f8b5079780803b48389496ed78332
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Jul 27 13:27:58 2022 +0200
+
+    Implement PyTorch Model and Vector interfaces.
+
+commit 6e3230a6cb9618cd7c0b3e3a4ff89ab97c44feee
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Jul 27 13:27:40 2022 +0200
+
+    Implement Tensorflow Model and Vector interfaces.
+
+commit c581633fc83732010ef82534d9dc8b221e646cd5
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Wed Jul 27 13:27:11 2022 +0200
+
+    Rewrite SklearnSGDModel.
+    
+    * Made a single class to wrap either a classifier
+      or regressor model.
+    * Abided by the design implemented at Model level.
+    * Note: classifier might need additional work for
+      proper initialization.
+
+commit d4f10c0c5a1b90d559fb480a6a45f66a214b1cad
+Author: Paul Andrey <paul.andrey@inria.fr>
+Date:   Tue Sep 20 10:58:45 2022 +0200
+
+    Rewrite Model and Vector API code.
+    
+    * Changed Vector to be a container for multiple
+      data structures by design.
+    * Skimmed and type-hinted Model API.
+    * Implemented generic NumpyVector container.
+    * Added (de)serialization functionalities to
+      the Vector API and its numpy implementation.
-- 
GitLab