)]}'
{
  "log": [
    {
      "commit": "a70b6c5d040643d13fbf86a9e7cdf6aad4b75c61",
      "tree": "358eee23b147384ca6a2b625412312f49f9441e2",
      "parents": [
        "16164f8d85ba2957bc87ed087cd665a88cd10219"
      ],
      "author": {
        "name": "Zachary Garrett",
        "email": "zachgarrett@google.com",
        "time": "Mon Jun 08 15:07:23 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Jun 08 15:07:53 2026"
      },
      "message": "Find hermetic Python interpreter dynamically in test_python_package.\n\nPiperOrigin-RevId: 928569049\n"
    },
    {
      "commit": "16164f8d85ba2957bc87ed087cd665a88cd10219",
      "tree": "d809018c7dce04eadaa9ed01b04a511729fe62ec",
      "parents": [
        "d0ddabc85d17faa9f6ab8e4d0d22ac0ada103f4f"
      ],
      "author": {
        "name": "Stanislav Chiknavaryan",
        "email": "stanisc@google.com",
        "time": "Thu Jun 04 02:48:45 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jun 04 02:49:11 2026"
      },
      "message": "Optimize memory use when partitioning aggregators and serializing string tensors.\n\nPiperOrigin-RevId: 926411392\n"
    },
    {
      "commit": "d0ddabc85d17faa9f6ab8e4d0d22ac0ada103f4f",
      "tree": "44d2a11b162025ead0563e1ef8632dc150333e8f",
      "parents": [
        "2bc424f4e63d15d21c45d3b5e18e0856edf90f17"
      ],
      "author": {
        "name": "Matej Aleksandrov",
        "email": "maleksandrov@google.com",
        "time": "Mon Jun 01 22:42:00 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Jun 01 22:42:21 2026"
      },
      "message": "Automated Code Change\n\nPiperOrigin-RevId: 924951315\n"
    },
    {
      "commit": "2bc424f4e63d15d21c45d3b5e18e0856edf90f17",
      "tree": "d49167f181740155b207639e33d731645bf30978",
      "parents": [
        "a955e8690a4380377475b406379b903e800e79c0"
      ],
      "author": {
        "name": "TensorFlow Federated Team",
        "email": "no-reply@google.com",
        "time": "Thu May 28 01:54:04 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu May 28 01:54:32 2026"
      },
      "message": "Add InMemoryCheckpointParser.\n\nPiperOrigin-RevId: 922467417\n"
    },
    {
      "commit": "a955e8690a4380377475b406379b903e800e79c0",
      "tree": "ef702f0c2e6c525f61a14d37bfab948da6377a9a",
      "parents": [
        "8f0a2d9fad426763e9df64b6d1bf845eaed3c9a8"
      ],
      "author": {
        "name": "Stanislav Chiknavaryan",
        "email": "stanisc@google.com",
        "time": "Thu May 21 21:47:18 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu May 21 21:48:30 2026"
      },
      "message": "Optimization of DpGroupByAggregator\n\nPiperOrigin-RevId: 919265818\n"
    },
    {
      "commit": "8f0a2d9fad426763e9df64b6d1bf845eaed3c9a8",
      "tree": "4bccc3d8c3a304f20b7a6d7185cf3828442fb021",
      "parents": [
        "189fb8e13aa97ff11653a95de631b305420f9a5a"
      ],
      "author": {
        "name": "TensorFlow Federated Team",
        "email": "no-reply@google.com",
        "time": "Thu May 21 03:15:37 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu May 21 03:16:02 2026"
      },
      "message": "Fix crash in `GroupByAggregator::Partition` when there are no keys.\n\nAlso, update `Partitioner::Create` to handle partitioning when there are no keys. This change routes the input to partition 0 when there are no keys defined, leaving all other partitions empty.\n\nPiperOrigin-RevId: 918787321\n"
    },
    {
      "commit": "189fb8e13aa97ff11653a95de631b305420f9a5a",
      "tree": "6659a6cafcc0b961a521d616bf7dfd363ed84d47",
      "parents": [
        "607fc75107251ff4be79e95bf5a1f6ec818052ae"
      ],
      "author": {
        "name": "Zachary Garrett",
        "email": "zachgarrett@google.com",
        "time": "Mon May 18 22:43:34 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon May 18 22:44:07 2026"
      },
      "message": "Adopt TensorFlow-like strategy for TFF wheel building, upgrade to federated_language 0.5.3, and clean up typing-extensions.\n\nThis change updates TFF\u0027s build configuration to use a modern environment for GitHub Actions while targeting an older GLIBC version for wheel compatibility, upgrades the federated_language dependency to v0.5.3, and completely cleans up the direct typing-extensions dependency.\n\nWheel building updates:\n- Update .bazelrc to target GLIBC 2.27 via hermetic toolchain.\n- Update pyproject.toml to target manylinux_2_27_x86_64.\n- Relax GLIBC check in build_python_package.sh to allow version 2.27 or newer.\n- Update publish.yaml to use ubuntu:22.04 container and Python 3.12.\n\nFederated Language upgrade:\n- Upgrade federated_language to 0.5.3 in WORKSPACE, requirements.in, and pyproject.toml.\n- Re-compile pip lock files requirements_lock_3_12.txt and requirements_lock_3_13.txt using uv.\n- Regenerate python_deps.patch, structure_visibility.patch, and remove_compile_pip_requirements.patch to support v0.5.3 cleanly.\n\nTyping Extensions cleanup:\n- Refactor python imports in py_typecheck.py and executors_errors.py to standard library\u0027s typing.TypeGuard (supported natively in Python 3.12+).\n- Clean up TFF\u0027s internal BUILD files to completely remove direct dependencies on //third_party/py/typing_extensions.\n- Remove typing-extensions from pyproject.toml and requirements.in packaging files.\n- Update requirements-test.txt to remove the legacy pinned typing-extensions line.\n- Clean up copy.bara.sky to remove obsolete typing_extensions replacements and insertions.\n\nPiperOrigin-RevId: 917466152\n"
    },
    {
      "commit": "607fc75107251ff4be79e95bf5a1f6ec818052ae",
      "tree": "93300b597e1a79f81fe90957ee2d04ca36ec7892",
      "parents": [
        "6137cc81dc6b534418bcd14a210b32ac577e0fe2"
      ],
      "author": {
        "name": "Zachary Garrett",
        "email": "zachgarrett@google.com",
        "time": "Thu May 14 20:04:59 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu May 14 20:05:22 2026"
      },
      "message": "Add client timing metrics to Federated Averaging via compose_learning_process.\n\nThis change adds a `measure_timing` parameter to `compose_learning_process` in TensorFlow Federated, allowing it to measure the full on-device execution time of client work using data dependencies. The metrics (min, max, mean) are aggregated at the server.\n\nPiperOrigin-RevId: 915575603\n"
    },
    {
      "commit": "6137cc81dc6b534418bcd14a210b32ac577e0fe2",
      "tree": "5d660119d89eaf20f151fb30f8cfbf18dfbb7ebf",
      "parents": [
        "4e4b3db3c5b160c69de4055052fb7be4a06d4f5a"
      ],
      "author": {
        "name": "Zachary Garrett",
        "email": "zachgarrett@google.com",
        "time": "Thu May 14 19:13:38 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu May 14 19:14:11 2026"
      },
      "message": "Improve error message for Python version check.\n\nThe error message now includes the Python version being used when it\u0027s older than the required 3.12.\n\nPiperOrigin-RevId: 915550679\n"
    },
    {
      "commit": "4e4b3db3c5b160c69de4055052fb7be4a06d4f5a",
      "tree": "e018e217b63a217ff3244c090f938a14db75714b",
      "parents": [
        "ae1d1730a92953d2b27787a6bce5d217c541093f"
      ],
      "author": {
        "name": "Zachary Garrett",
        "email": "zachgarrett@google.com",
        "time": "Wed May 13 22:50:15 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed May 13 22:50:41 2026"
      },
      "message": "Extend support for Keras 3 APIs in tff.learning.\n\nPiperOrigin-RevId: 915101891\n"
    },
    {
      "commit": "ae1d1730a92953d2b27787a6bce5d217c541093f",
      "tree": "524016a47950dc79574f44555ba75d0e38d407c5",
      "parents": [
        "94e744beb84a6ce4fa65c52159a3d4caf1a74bbd"
      ],
      "author": {
        "name": "Zachary Garrett",
        "email": "zachgarrett@google.com",
        "time": "Wed May 13 21:19:26 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed May 13 21:20:04 2026"
      },
      "message": "Tooling change\n\nPiperOrigin-RevId: 915055035\n"
    },
    {
      "commit": "94e744beb84a6ce4fa65c52159a3d4caf1a74bbd",
      "tree": "8a60cb798fc6686d516135742e1130ea78e78db3",
      "parents": [
        "8b8f2eb89d04fd607a5616e2b18ecce271baad3d"
      ],
      "author": {
        "name": "Zachary Garrett",
        "email": "zachgarrett@google.com",
        "time": "Mon May 11 18:43:05 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon May 11 18:43:28 2026"
      },
      "message": "Extend TFF to accept Keras 3 losses and metrics.\n\nPiperOrigin-RevId: 913805333\n"
    },
    {
      "commit": "8b8f2eb89d04fd607a5616e2b18ecce271baad3d",
      "tree": "082a1982c3e0fbd234f74a8ee44169bb1f27e7e9",
      "parents": [
        "ee7728a5c1c0883aa20359d37ae7982b41416af1"
      ],
      "author": {
        "name": "Zachary Garrett",
        "email": "zachgarrett@google.com",
        "time": "Mon May 11 18:08:21 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon May 11 18:10:25 2026"
      },
      "message": "Internal change\n\nPiperOrigin-RevId: 913787729\n"
    },
    {
      "commit": "ee7728a5c1c0883aa20359d37ae7982b41416af1",
      "tree": "11af66e8334b16b67f40ad87062e9507eac44530",
      "parents": [
        "66bb66edc86137131dc109e043dcc2a77658130a"
      ],
      "author": {
        "name": "Hana Joo",
        "email": "hanajoo@google.com",
        "time": "Sat May 09 13:31:51 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sat May 09 13:32:32 2026"
      },
      "message": "No public description\n\nPiperOrigin-RevId: 912966712\n"
    },
    {
      "commit": "66bb66edc86137131dc109e043dcc2a77658130a",
      "tree": "c13bb962bb5c2538bcbcf41a9d19c2327f5c5ee7",
      "parents": [
        "db0b473533e885562142b64c756f3db4f5ccc887"
      ],
      "author": {
        "name": "Albert Cheu",
        "email": "cheu@google.com",
        "time": "Mon May 04 21:05:07 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon May 04 21:05:41 2026"
      },
      "message": "Name the Tensor created in SetParameterIfUnset, to ensure consistency with DPGroupByFactory.\n\nThe factory uses the `name` field of parameter Tensors to validate that the correct parameters are set. Omitting the name will cause validation to fail.\n\nPiperOrigin-RevId: 910231002\n"
    },
    {
      "commit": "db0b473533e885562142b64c756f3db4f5ccc887",
      "tree": "b605136176685989795fe1fca5e7e8dde80c03c6",
      "parents": [
        "4003543e9ef0f9ccf1207b70b9aa588c63015fce"
      ],
      "author": {
        "name": "Albert Cheu",
        "email": "cheu@google.com",
        "time": "Fri Apr 24 15:53:40 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Apr 24 15:54:16 2026"
      },
      "message": "Add GetNoiseDescription to DPGroupByAggregator and DPThresholdingHistogram.\n\nThis change introduces a new method, GetNoiseDescription, to DPGroupByAggregator. This method provides a human-readable description of the differential privacy noise added during aggregation. The description includes the 90% confidence interval for the DP error, the type of noise distribution (Laplace or Gaussian) and its standard deviation, and any thresholds applied to noisy sums.\n\nDPThresholdingHistogram overrides this method to also include information about the minimum number of contributors required for a group to be included in the output.\n\nPiperOrigin-RevId: 905055280\n"
    },
    {
      "commit": "4003543e9ef0f9ccf1207b70b9aa588c63015fce",
      "tree": "a31b87c7d7226cbb842cdeb352d3f91224d6712a",
      "parents": [
        "0ae16ad64fd482fc7068f4d885b4dd67c6c19efb"
      ],
      "author": {
        "name": "Stanislav Chiknavaryan",
        "email": "stanisc@google.com",
        "time": "Thu Apr 23 20:31:19 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Apr 23 20:31:51 2026"
      },
      "message": "Code cleanup: dp_quntile_aggregator.cc\n\nPiperOrigin-RevId: 904611129\n"
    },
    {
      "commit": "0ae16ad64fd482fc7068f4d885b4dd67c6c19efb",
      "tree": "2359a4527bb5f95687691f7eaad848c04e98c075",
      "parents": [
        "34a6318a27c6da0efb99abc04f231dfa56231374"
      ],
      "author": {
        "name": "Stanislav Chiknavaryan",
        "email": "stanisc@google.com",
        "time": "Tue Apr 21 01:58:52 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Apr 21 01:59:29 2026"
      },
      "message": "Introduce dp_fedsql_util for applying auto-tuning DP parameters to the intrinsics configuration\n\nPiperOrigin-RevId: 902929812\n"
    },
    {
      "commit": "34a6318a27c6da0efb99abc04f231dfa56231374",
      "tree": "9b37ab9c1084953df1e56b75df1ebe8a9dab2de8",
      "parents": [
        "672e08b6b3d73ccf86965a12ea9afe0bb8e1cdfa"
      ],
      "author": {
        "name": "Zachary Garrett",
        "email": "zachgarrett@google.com",
        "time": "Wed Apr 08 13:32:39 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Apr 08 13:33:13 2026"
      },
      "message": "Optimize: Use absl::InlinedVector for TensorShape dimension sizes.\n\nPiperOrigin-RevId: 896465002\n"
    },
    {
      "commit": "672e08b6b3d73ccf86965a12ea9afe0bb8e1cdfa",
      "tree": "b05550324d0ab0353aa66688521a7c20d096952d",
      "parents": [
        "5185729975f99d8f5f719ee066f81672ca48352e"
      ],
      "author": {
        "name": "TensorFlow Federated Team",
        "email": "no-reply@google.com",
        "time": "Tue Apr 07 14:42:42 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Apr 07 14:43:19 2026"
      },
      "message": "Change factory construction of DPGroupByAggregators to enable filtering of out-of-domain contributions during Accumulation.\n\nPiperOrigin-RevId: 895895588\n"
    },
    {
      "commit": "5185729975f99d8f5f719ee066f81672ca48352e",
      "tree": "91abf3ed4aa56fc72c5438ac437b7dda0b771492",
      "parents": [
        "0cfd4cbd4e231f1ed60bf40a0713c3334323acba"
      ],
      "author": {
        "name": "Albert Cheu",
        "email": "cheu@google.com",
        "time": "Wed Apr 01 19:04:32 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Apr 01 19:05:04 2026"
      },
      "message": "Refactor DPGroupByAggregators to create their DPHistogramBundles upon creation.\n\nThis will allow us to query the details of the noise mechanism before Accumulating any input or requesting a Report.\n\nAlong the way, introduce a Create method to DPExhaustiveReportHistogram.\n\nPiperOrigin-RevId: 893047388\n"
    },
    {
      "commit": "0cfd4cbd4e231f1ed60bf40a0713c3334323acba",
      "tree": "ad0bbcdcc9bdb705a897cf9e52e044821fd2209c",
      "parents": [
        "bfe964f86dcbf096bdc06e1113073622b6e972ee"
      ],
      "author": {
        "name": "TensorFlow Federated Team",
        "email": "no-reply@google.com",
        "time": "Mon Mar 30 17:16:24 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Mar 30 17:16:57 2026"
      },
      "message": "Add DomainSpec support to DPCompositeKeyCombiner.\n\nThis change allows DPCompositeKeyCombiner to filter out keys that are not present in a provided DomainSpec during the accumulation process. Out-of-domain keys are mapped to kNoOrdinal.\n\nPiperOrigin-RevId: 891781590\n"
    },
    {
      "commit": "bfe964f86dcbf096bdc06e1113073622b6e972ee",
      "tree": "0a5fe937889add7329e1f2bd4e1327c624cba72a",
      "parents": [
        "949948a8b6e730f9f0d57ef9fb4479005af2dc3e"
      ],
      "author": {
        "name": "Albert Cheu",
        "email": "cheu@google.com",
        "time": "Thu Mar 26 15:34:06 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Mar 26 15:34:41 2026"
      },
      "message": "Apply the same padding logic done in DPGroupByAggregator::Serialize() to an overridden Partition method.\n\nFor each serialized state emitted by Partition, we add a random amount of extra characters. The length is calculated the same way as Serialize(), except we scale epsilon and delta for \u003e1 outputs.\n\nAlong the way, make DPGroupByAggregator::Serialize() a protected member instead of a public one, in line with GroupByAggregator.\n\nPiperOrigin-RevId: 889859778\n"
    },
    {
      "commit": "949948a8b6e730f9f0d57ef9fb4479005af2dc3e",
      "tree": "2a47fd7376c95739511669407445ba6b8cf8c917",
      "parents": [
        "f2f7cd8a82938b256d07d617857a969d5124543a"
      ],
      "author": {
        "name": "TensorFlow Federated Team",
        "email": "no-reply@google.com",
        "time": "Wed Mar 25 15:15:35 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Mar 25 15:15:59 2026"
      },
      "message": "Introduce DomainSpec class and supporting classes.\n\nThe DomainSpec class exists to allow searching for membership in each of a vector of tensors in constant rather than linear time (after creation). This will be useful for filtering inputs according to whether they contain a key in a preprovided list of allowed keys.\n\nPiperOrigin-RevId: 889253220\n"
    },
    {
      "commit": "f2f7cd8a82938b256d07d617857a969d5124543a",
      "tree": "c2b32118132f742cf31039e8eb333d6d2b3e4d04",
      "parents": [
        "07e6238ef0899917b4c8ebd249b519761b64f105"
      ],
      "author": {
        "name": "TensorFlow Federated Team",
        "email": "no-reply@google.com",
        "time": "Wed Mar 25 14:03:59 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Mar 25 14:04:33 2026"
      },
      "message": "No public description\n\nPiperOrigin-RevId: 889221761\n"
    },
    {
      "commit": "07e6238ef0899917b4c8ebd249b519761b64f105",
      "tree": "c0e9a607cd7831a89fe91aaa5dd8f94d179913de",
      "parents": [
        "aa2fa7677dd25cc433e5539060bd138bd4e96d02"
      ],
      "author": {
        "name": "Albert Cheu",
        "email": "cheu@google.com",
        "time": "Fri Mar 20 19:50:39 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Mar 20 19:51:10 2026"
      },
      "message": "Correct the implementation of reservoir sampling inside DPQuantileAggregator during a merge.\n\nPreviously we did not weigh the sizes of the `other` aggregator correctly: those that were fed many inputs should have a greater probability of contributing to the merged list of values than smaller ones.\n\nAlong the way, update `PrefixSumAboveThreshold` to call `NoisedValueAboveThreshold` in lieu of explicitly sampling noise and performing the comparison.\n\nPiperOrigin-RevId: 886932106\n"
    },
    {
      "commit": "aa2fa7677dd25cc433e5539060bd138bd4e96d02",
      "tree": "b28daae178a6a131460c05acc851984c5146e68e",
      "parents": [
        "a73f1d92d4616a7ac3ce7e5e04fd0430326df201"
      ],
      "author": {
        "name": "Zachary Garrett",
        "email": "zachgarrett@google.com",
        "time": "Thu Mar 19 22:48:21 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Mar 19 22:48:56 2026"
      },
      "message": "Remove nokokoro tags and switch to pybind11 extensions for C++ execution in OSS.\n\nAll pybind11 extension targets now build and pass tests in the OSS\nenvironment after fixing the pybind11 version mismatch (v2.9.2 -\u003e v2.13.4)\nand numpy_headers reference issue.\n\nPiperOrigin-RevId: 886415345\n"
    },
    {
      "commit": "a73f1d92d4616a7ac3ce7e5e04fd0430326df201",
      "tree": "2b1a3d040d7e844eabe35d8c7f64523e531815af",
      "parents": [
        "9b1b48774a9851f99cc34b67465d7e90bbe1430b"
      ],
      "author": {
        "name": "Zachary Garrett",
        "email": "zachgarrett@google.com",
        "time": "Wed Mar 18 17:16:59 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Mar 18 17:17:25 2026"
      },
      "message": "Vendor checkpoint_reader.h into TFF.\n\nThe tensorflow/c/checkpoint_reader.h header is not shipped with the\nTensorFlow pip package, but all its transitive dependencies are.\nVendor a copy as tf_checkpoint_reader.{h,cc} and update all consumers\nto use the vendored copy.\n\nPiperOrigin-RevId: 885662384\n"
    },
    {
      "commit": "9b1b48774a9851f99cc34b67465d7e90bbe1430b",
      "tree": "5103b2c9f64abc67ab31c0a2202ec5055ba69a8e",
      "parents": [
        "b2ef5ad2ffac10d5054271dc34760bad0b0327e0"
      ],
      "author": {
        "name": "Zachary Garrett",
        "email": "zachgarrett@google.com",
        "time": "Wed Mar 18 14:43:06 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Mar 18 14:43:40 2026"
      },
      "message": "Change dataset materialization to use Session-based iteration.\n\nReplace the standalone.h dependency with a Session-based approach using\nDatasetFromGraph, IteratorV2, MakeIterator, and IteratorGetNext ops to\niterate datasets from serialized GraphDefs.\n\n- Add IterateDatasetFromGraphDef and ExtractOutputTypesAndShapesFromGraphDef\n  to dataset_utils.\n- Extend SequenceTensor with output types/shapes metadata.\n\nPiperOrigin-RevId: 885587905\n"
    },
    {
      "commit": "b2ef5ad2ffac10d5054271dc34760bad0b0327e0",
      "tree": "a574d71e819d221131b3478a10f44fbe9ecaaa00",
      "parents": [
        "f808ffee136ec5cadd6119bfb2e66e648a364491"
      ],
      "author": {
        "name": "Brett McLarnon",
        "email": "bmclarnon@google.com",
        "time": "Tue Mar 17 21:43:03 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Mar 17 21:43:40 2026"
      },
      "message": "Move agg core tensorflow test utils to a separate file\n\nPiperOrigin-RevId: 885218716\n"
    },
    {
      "commit": "f808ffee136ec5cadd6119bfb2e66e648a364491",
      "tree": "53a68e91bf7d64070d58079ec572ce9645a1e087",
      "parents": [
        "b7bfdace65d6dab567e4a2bc56a57ec4e70ab476"
      ],
      "author": {
        "name": "Brett McLarnon",
        "email": "bmclarnon@google.com",
        "time": "Tue Mar 17 19:56:10 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Mar 17 19:56:51 2026"
      },
      "message": "Use proto_library paths from @com_google_protobuf\n\nPiperOrigin-RevId: 885165824\n"
    },
    {
      "commit": "b7bfdace65d6dab567e4a2bc56a57ec4e70ab476",
      "tree": "9c3f2531c3e940150171e61d5f8b8bf43179a547",
      "parents": [
        "77644f808b2ecdd5004a94a5b9d535335d9d4483"
      ],
      "author": {
        "name": "TensorFlow Federated Team",
        "email": "no-reply@google.com",
        "time": "Tue Mar 17 19:35:53 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Mar 17 19:36:46 2026"
      },
      "message": "No public description\n\nPiperOrigin-RevId: 885155352\n"
    },
    {
      "commit": "77644f808b2ecdd5004a94a5b9d535335d9d4483",
      "tree": "a2d1882c8d84d51f19e9599d99241ee8868d7862",
      "parents": [
        "3490aa80819080013d7221c3bba3b6ae4f086fae"
      ],
      "author": {
        "name": "Zachary Garrett",
        "email": "zachgarrett@google.com",
        "time": "Tue Mar 17 17:47:35 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Mar 17 17:48:35 2026"
      },
      "message": "Vendor checkpoint_reader.h into TFF.\n\nThe tensorflow/c/checkpoint_reader.h header is not shipped with the\nTensorFlow pip package, but all its transitive dependencies are.\nVendor a copy as tf_checkpoint_reader.{h,cc} and update all consumers\nto use the vendored copy.\n\nPiperOrigin-RevId: 885102362\n"
    },
    {
      "commit": "3490aa80819080013d7221c3bba3b6ae4f086fae",
      "tree": "9c3f2531c3e940150171e61d5f8b8bf43179a547",
      "parents": [
        "1c3eef0c8f8d15e7d13296bb26e1d89b79a2f64a"
      ],
      "author": {
        "name": "Zachary Garrett",
        "email": "zachgarrett@google.com",
        "time": "Tue Mar 17 15:54:30 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Mar 17 15:55:05 2026"
      },
      "message": "Delete unused eager_computation code.\n\neager_computation.{h,cc} and eager_computation_test.cc are unused code\nthat is not referenced by any other target in the repository. Removing\nthem to reduce maintenance burden and simplify the dependency graph.\n\nPiperOrigin-RevId: 885048341\n"
    },
    {
      "commit": "1c3eef0c8f8d15e7d13296bb26e1d89b79a2f64a",
      "tree": "b447cf8019182ba2d49a5bfb5631afbccfe40738",
      "parents": [
        "89fdc38e9d4b0b09b2f692f34614a01306181592"
      ],
      "author": {
        "name": "Zachary Garrett",
        "email": "zachgarrett@google.com",
        "time": "Mon Mar 16 17:13:13 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Mar 16 17:13:45 2026"
      },
      "message": "Update TensorFlow Federated to TensorFlow 2.21.0\n\nUpdate TFF\u0027s dependency on TensorFlow from 2.20.0 to 2.21.0. This includes:\n\n- Bump org_tensorflow to v2.21.0\n- Update rules_python from 0.39.0 to 1.6.0 with TF 2.21 patches\n- Update bazel_skylib from 1.3.0 to 1.7.1\n- Update gRPC from 1.68.2 to 1.74.0\n- Update keras from ~\u003d3.11.3 to ~\u003d3.12.0\n- Remove com_google_protobuf definition (now provided by TF\u0027s python_init_rules)\n- Restructure WORKSPACE Python init to follow TF 2.21 pattern\n  (python_init_rules/repositories/toolchains instead of direct rules_python)\n- Update @local_xla -\u003e @xla and @local_tsl -\u003e @tsl references\n  (TF 2.21 renamed vendored repos)\n- Update internal_visibility.patch for TF 2.21\n- Remove tensor_testutil.patch (fixed upstream in TF 2.21)\n- Regenerate requirements lock files\n\nPiperOrigin-RevId: 884507763\n"
    },
    {
      "commit": "89fdc38e9d4b0b09b2f692f34614a01306181592",
      "tree": "dc06711c62efe93ca2ebf242a7ed194263de94c6",
      "parents": [
        "6d87d0b89977262d78b05a5873e837962fbbd85e"
      ],
      "author": {
        "name": "Stanislav Chiknavaryan",
        "email": "stanisc@google.com",
        "time": "Fri Mar 13 00:26:24 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Mar 13 00:27:22 2026"
      },
      "message": "Optimize CompositeKey storage\n\nPiperOrigin-RevId: 882863522\n"
    },
    {
      "commit": "6d87d0b89977262d78b05a5873e837962fbbd85e",
      "tree": "cae7ab9e27224a245346be72cb7f564c6d422a88",
      "parents": [
        "3e82bbac418bcd73b3352b63801a14d382675928"
      ],
      "author": {
        "name": "TensorFlow Federated Team",
        "email": "no-reply@google.com",
        "time": "Wed Mar 11 20:35:35 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Mar 11 20:35:57 2026"
      },
      "message": "reverting a CL that accidentally got submitted.\n\nPiperOrigin-RevId: 882172394\n"
    },
    {
      "commit": "3e82bbac418bcd73b3352b63801a14d382675928",
      "tree": "77644c7d42072e97ba6ffcc44c6661c5ea089463",
      "parents": [
        "2417d72c9df5be8bdabce2a67a93ee2aada5d4fb"
      ],
      "author": {
        "name": "TensorFlow Federated Team",
        "email": "no-reply@google.com",
        "time": "Wed Mar 11 18:07:26 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Mar 11 18:09:13 2026"
      },
      "message": "Automated Code Change\n\nPiperOrigin-RevId: 882104291\n"
    },
    {
      "commit": "2417d72c9df5be8bdabce2a67a93ee2aada5d4fb",
      "tree": "cae7ab9e27224a245346be72cb7f564c6d422a88",
      "parents": [
        "6b4623e478b6c1bc82d49602bfe0426bd28b37f6"
      ],
      "author": {
        "name": "Stanislav Chiknavaryan",
        "email": "stanisc@google.com",
        "time": "Tue Mar 10 01:32:02 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Mar 10 01:32:28 2026"
      },
      "message": "Add LoadAllTensors to CheckpointParser interface and FC CheckpointParser implementation.\n\nPiperOrigin-RevId: 881138186\n"
    },
    {
      "commit": "6b4623e478b6c1bc82d49602bfe0426bd28b37f6",
      "tree": "a2590369427430ebaf7c12ec0ca79ba46054a828",
      "parents": [
        "1dc6144b5584b79a895935b7569a8f7ef8ef8d47"
      ],
      "author": {
        "name": "TensorFlow Federated Team",
        "email": "no-reply@google.com",
        "time": "Mon Mar 09 16:53:08 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Mar 09 16:53:36 2026"
      },
      "message": "Rename DP histogram implementations for clarity.\n\nThis change renames `dp_open_domain_histogram` to `dp_thresholding_histogram` and `dp_closed_domain_histogram` to `dp_exhaustive_report_histogram`. These new names better reflect the mechanisms that will be includied in each after upcoming changes. Specifically the parts formally called OpenDomain will deal with thresholding within a closed domain. All references in BUILD files, includes, and tests have been updated accordingly.\n\nPiperOrigin-RevId: 880906117\n"
    },
    {
      "commit": "1dc6144b5584b79a895935b7569a8f7ef8ef8d47",
      "tree": "2fb771aa87483eb9164985f6cee72a700a736e3e",
      "parents": [
        "a544acc55405a758cb45908665984a3e7069de27"
      ],
      "author": {
        "name": "Amer Elsheikh",
        "email": "amere@google.com",
        "time": "Sat Mar 07 14:34:49 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sat Mar 07 14:35:23 2026"
      },
      "message": "Remove obsolete `...` annotations from all python files.\n\nPiperOrigin-RevId: 880109243\n"
    },
    {
      "commit": "a544acc55405a758cb45908665984a3e7069de27",
      "tree": "3751ae7c99cc748764d67be2f004b774c5c0d2d9",
      "parents": [
        "f51719385a77e397c9f2621f7cd04990e6d112ee"
      ],
      "author": {
        "name": "Zachary Garrett",
        "email": "zachgarrett@google.com",
        "time": "Fri Mar 06 14:28:35 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Mar 06 14:29:01 2026"
      },
      "message": "Update TFF to TF 2.20.0.\n\nAdditionally:\n- Update transitive dependencies absl-py, dm-tree, grpcio, ml_dtypes, numpy, scipy, tqdm, and typing extensions.\n- Use Python 3.12 for building.\n- Use pypi depdenencies in BUILD files, rather than system installations.\n- Updates some Keras code to use `tf.identity(v)` in places that previously used `tf.Variable.read_value()` and unwrap `keras.Variable` objects when encountered.\nPiperOrigin-RevId: 879602059\n"
    },
    {
      "commit": "f51719385a77e397c9f2621f7cd04990e6d112ee",
      "tree": "0999dcc0a936335718e5fa57dd023bc6feca5087",
      "parents": [
        "7740ea3acefcda8c650ddb99b9e01ce31388b69f"
      ],
      "author": {
        "name": "TensorFlow Federated Team",
        "email": "no-reply@google.com",
        "time": "Thu Mar 05 02:43:13 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Mar 05 02:43:36 2026"
      },
      "message": "No public description\n\nPiperOrigin-RevId: 878766908\n"
    },
    {
      "commit": "7740ea3acefcda8c650ddb99b9e01ce31388b69f",
      "tree": "f2f780075d2a40552645cf608762de15a60aaed6",
      "parents": [
        "e18fdf5e51736e74e6882ac6f89e62ce972402ba"
      ],
      "author": {
        "name": "Zachary Garrett",
        "email": "zachgarrett@google.com",
        "time": "Thu Mar 05 00:21:37 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Mar 05 00:22:25 2026"
      },
      "message": "Update TFF to TF 2.20.0.\n\nAdditionally:\n- Update transitive dependencies absl-py, dm-tree, grpcio, ml_dtypes, numpy, scipy, tqdm, and typing extensions.\n- Use Python 3.12 for building.\n- Use pypi depdenencies in BUILD files, rather than system installations.\n- Updates some Keras code to use `tf.identity(v)` in places that previously used `tf.Variable.read_value()` and unwrap `keras.Variable` objects when encountered.\nPiperOrigin-RevId: 878718277\n"
    },
    {
      "commit": "e18fdf5e51736e74e6882ac6f89e62ce972402ba",
      "tree": "0999dcc0a936335718e5fa57dd023bc6feca5087",
      "parents": [
        "7c3d88d1bd8b473e3a770540faf0c80430d64eee"
      ],
      "author": {
        "name": "Zachary Garrett",
        "email": "zachgarrett@google.com",
        "time": "Wed Feb 25 22:24:21 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Feb 25 22:25:12 2026"
      },
      "message": "Remove Federated Reconstruction tutorial and related code.\n\nThis change removes the `federated_reconstruction_for_matrix_factorization.ipynb` tutorial, along with all references to it in the documentation and the associated `fed_recon` and `reconstruction_model` implementations from `tff.learning`. This is an ongoing effort to decompose TFF into core components.\n\nPiperOrigin-RevId: 875335830\n"
    },
    {
      "commit": "7c3d88d1bd8b473e3a770540faf0c80430d64eee",
      "tree": "903693a476f47f2ecd7dce7e2bbfdf8dfa6b550d",
      "parents": [
        "b666bf0a992d4503b54e023fe5e6a5f46df106d8"
      ],
      "author": {
        "name": "Stanislav Chiknavaryan",
        "email": "stanisc@google.com",
        "time": "Mon Feb 23 05:26:28 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Feb 23 05:27:07 2026"
      },
      "message": "Test to verify that Aggregation string tensor supports serialization of non UTF-8 bytes\n\nPiperOrigin-RevId: 873853146\n"
    },
    {
      "commit": "b666bf0a992d4503b54e023fe5e6a5f46df106d8",
      "tree": "bc3e38416360522c4df86e6c614c7f8b1f7e8d25",
      "parents": [
        "f878c97da08259ca4029a52d3b91065e51af9e86"
      ],
      "author": {
        "name": "Zachary Garrett",
        "email": "zachgarrett@google.com",
        "time": "Thu Feb 12 23:44:50 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Feb 12 23:45:30 2026"
      },
      "message": "Update EMNIST synthetic data generation to use numpy.\n\nPiperOrigin-RevId: 869419053\n"
    },
    {
      "commit": "f878c97da08259ca4029a52d3b91065e51af9e86",
      "tree": "45e86e576505202ec2125d7aa10f23b74fff71be",
      "parents": [
        "71d59f560807b2d2ef1a5cf31eac45c64964eedf"
      ],
      "author": {
        "name": "Albert Cheu",
        "email": "cheu@google.com",
        "time": "Wed Feb 11 19:58:29 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Feb 11 19:59:28 2026"
      },
      "message": "Enable the use of `L_1` norm bound when `min_contributors_to_group` is given. Previously, an error would have been thrown when the `L_inf` bound was absent.\n\nAlso, make explicit that we do not currently support the use of both `min_contributors_to_group` and closed domain key files.\n\nPiperOrigin-RevId: 868780248\n"
    },
    {
      "commit": "71d59f560807b2d2ef1a5cf31eac45c64964eedf",
      "tree": "4422613cc1c6c2a2d243302711554501fa85d5ab",
      "parents": [
        "8f384365370a321bcca1dc88677f087f87b31ecc"
      ],
      "author": {
        "name": "Zachary Garrett",
        "email": "zachgarrett@google.com",
        "time": "Tue Feb 10 03:01:53 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Feb 10 03:03:10 2026"
      },
      "message": "Remove Vizier integration and example.\n\nThis change removes the `tff.learning.programs.train_model_with_vizier` and the associated example in `examples/learning/federated_program/vizier`. The `google-vizier` dependency is also removed from the project requirements.\n\nVizier has not been updated since Feb 2025 and is making it prohibitive to update to newer versions of TensorFlow.\n\nPiperOrigin-RevId: 867874128\n"
    },
    {
      "commit": "8f384365370a321bcca1dc88677f087f87b31ecc",
      "tree": "de8597739e1ab120d57cf42e3900dccc071ae00d",
      "parents": [
        "864d91cee5d091d4f1d046e51744fd5f5c6dc8a6"
      ],
      "author": {
        "name": "Galen Andrew",
        "email": "galenandrew@google.com",
        "time": "Mon Feb 09 23:15:01 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Feb 09 23:15:57 2026"
      },
      "message": "Use implementation of Gaussian calibration from dp_accounting.\n\nUpdates dp_accounting dependency to 0.6.0.\n\nPiperOrigin-RevId: 867795564\n"
    },
    {
      "commit": "864d91cee5d091d4f1d046e51744fd5f5c6dc8a6",
      "tree": "74d0369515a706fc6084f187f96797c274bd4c47",
      "parents": [
        "0040bea4c4ccd37f6e16feafac7ae433dd8bc279"
      ],
      "author": {
        "name": "Albert Cheu",
        "email": "cheu@google.com",
        "time": "Fri Feb 06 22:32:41 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Feb 06 22:33:25 2026"
      },
      "message": "When creating Intrinsics in dp_histogram_test_utils, allow for custom key types without appending the domain specification to the parameter list.\n\nPreviously, specifying non-empty key_types to `CreateIntrinsicWithKeyTypes` would automatically trigger the addition of the domain specification in the top-level intrinsic. Here, we introduce a boolean flag `add_spec` to the function (defaulting to `false`) and a separate `CreateIntrinsicWithKeyTypes_ClosedDomain` function that sets the flag to `true`.\n\nPiperOrigin-RevId: 866617783\n"
    },
    {
      "commit": "0040bea4c4ccd37f6e16feafac7ae433dd8bc279",
      "tree": "cfd19f85e0d13258ca68a1d9c344ac332d53bd25",
      "parents": [
        "3bcc48944dc1a89fbde2241f9c94b5559b26d13e"
      ],
      "author": {
        "name": "Albert Cheu",
        "email": "cheu@google.com",
        "time": "Fri Feb 06 22:06:33 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Feb 06 22:07:31 2026"
      },
      "message": "Add validation of keys to GroupByAggregator::ValidateInputs\n\nPreviously, type of the grouping keys given to GroupByAggregator::ValidateInputs could have been incorrect. Now, we call CompositeKeyCombiner::CheckValidAndGetShape to close that gap.\n\nPiperOrigin-RevId: 866607360\n"
    },
    {
      "commit": "3bcc48944dc1a89fbde2241f9c94b5559b26d13e",
      "tree": "e45d9f3ad7153d1773f6e2d5ee9a80bae0ec634d",
      "parents": [
        "8cce210e80a7efdb047643f084ef783e8b4503ec"
      ],
      "author": {
        "name": "TensorFlow Federated Team",
        "email": "no-reply@google.com",
        "time": "Tue Feb 03 21:23:19 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Feb 03 21:24:02 2026"
      },
      "message": "Remove SubsampleProcess.\n\nPiperOrigin-RevId: 865018294\n"
    },
    {
      "commit": "8cce210e80a7efdb047643f084ef783e8b4503ec",
      "tree": "4d1471b7bea969e7b2ba81a6405cff43e94b41ee",
      "parents": [
        "196926fb9dfb8bfc3bab579afc5225cfab16bbc1"
      ],
      "author": {
        "name": "Zachary Garrett",
        "email": "zachgarrett@google.com",
        "time": "Tue Jan 27 01:05:57 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jan 27 01:07:02 2026"
      },
      "message": "Remove dependency on `tensorflow_privacy` by inlining.\n\nPiperOrigin-RevId: 861418523\n"
    },
    {
      "commit": "196926fb9dfb8bfc3bab579afc5225cfab16bbc1",
      "tree": "fbbc87e5d8ab9765e57e06bacf914bb4abcb75b5",
      "parents": [
        "aa505bf4a0eebd7fe190d8f2ff57404ff8098ef8"
      ],
      "author": {
        "name": "Zachary Garrett",
        "email": "zachgarrett@google.com",
        "time": "Sat Jan 24 19:34:18 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sat Jan 24 19:35:05 2026"
      },
      "message": "Remove distributed DP aggregator and related code.\n\nPiperOrigin-RevId: 860569230\n"
    },
    {
      "commit": "aa505bf4a0eebd7fe190d8f2ff57404ff8098ef8",
      "tree": "6501d7f1b95060274bbcfda9fb1c23d34caddd79",
      "parents": [
        "11ad3d70fdb75e7d35fec394812a1202cc060677"
      ],
      "author": {
        "name": "Zachary Garrett",
        "email": "zachgarrett@google.com",
        "time": "Tue Jan 06 18:04:37 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jan 06 18:05:32 2026"
      },
      "message": "Expose TensorFlow backend utilities in `tff.tensorflow`.\n\nPiperOrigin-RevId: 852827152\n"
    },
    {
      "commit": "11ad3d70fdb75e7d35fec394812a1202cc060677",
      "tree": "540e8a8ed30e1198b83784668a41b2bcf8864e7f",
      "parents": [
        "2107a62ebd797b0f65d7cdd3e75e08c52b5e2f5a"
      ],
      "author": {
        "name": "Albert Cheu",
        "email": "cheu@google.com",
        "time": "Tue Jan 06 17:03:48 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jan 06 17:04:39 2026"
      },
      "message": "Use PositiveLaplaceMechanism in overridden DPGroupByAggregator::Serialize to add a noisy amount of padding and update Deserialize to match.\n\nAlso migrate the Deserialize test from the open domain test suite to the factory test suite.\n\nPiperOrigin-RevId: 852803743\n"
    },
    {
      "commit": "2107a62ebd797b0f65d7cdd3e75e08c52b5e2f5a",
      "tree": "9713721b61b905bd1b5900aaa99cd51ec7f80ca4",
      "parents": [
        "0559e2ceeef97a10147e7a3b9271ab0393ad1bb8"
      ],
      "author": {
        "name": "Yu Xiao",
        "email": "xiaoyux@google.com",
        "time": "Tue Dec 23 21:48:42 2025"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Dec 23 21:49:45 2025"
      },
      "message": "Support nesterov in the TFF SGD optimizer.\n\nPiperOrigin-RevId: 848286929\n"
    },
    {
      "commit": "0559e2ceeef97a10147e7a3b9271ab0393ad1bb8",
      "tree": "f0408c40b106226022fb3dcf893f2fd6f4d36ab3",
      "parents": [
        "ade95e49db03c21fc586948aa3d0a1c4969d93ae"
      ],
      "author": {
        "name": "TensorFlow Federated Team",
        "email": "no-reply@google.com",
        "time": "Thu Dec 18 15:02:52 2025"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Dec 18 15:03:37 2025"
      },
      "message": "Switch the storage of group contributions onto the ContributorsToGroups class, ready to add priv_id checking code.\n\nPiperOrigin-RevId: 846251013\n"
    },
    {
      "commit": "ade95e49db03c21fc586948aa3d0a1c4969d93ae",
      "tree": "3b251580dc21dc69e4263f178c3e52faae3c6c53",
      "parents": [
        "590104cb7c358ee5c4efa8937e0ccf93a5925265"
      ],
      "author": {
        "name": "Albert Cheu",
        "email": "cheu@google.com",
        "time": "Thu Dec 11 02:03:52 2025"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Dec 11 02:04:43 2025"
      },
      "message": "Add PositiveLaplaceMechanism.\n\nThis change introduces a `PositiveLaplaceMechanism` class, which post-processes the result of `LaplaceMechanism::AddNoise` to ensure that values are only ever shifted upward.\n\nPiperOrigin-RevId: 842966097\n"
    },
    {
      "commit": "590104cb7c358ee5c4efa8937e0ccf93a5925265",
      "tree": "1ac42bf183c3492130652ff68e629cf615046085",
      "parents": [
        "7cbcfabbb0820aba3a2311e11fa29ebdf124bd72"
      ],
      "author": {
        "name": "Stanislav Chiknavaryan",
        "email": "stanisc@google.com",
        "time": "Fri Dec 05 18:27:02 2025"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Dec 05 18:27:40 2025"
      },
      "message": "Add Tensor constructors for scalar tensors and one-dimensional tensors.\n\nThis adds an ability to construct a tensor from a numeric or string scalar value, or from a vector, or from an initializer_list. The type of the tensor and the shape is deducted from the argument. Please note that construction will always succeed in these cases except when the type is unsupported, but since the type is known at compile time there is no need to return StatusOr. The more general construction method via Tensor::Create is still available for the cases when the simple construction is insufficient. But using these new constructors will make the code more concise and readable.\n\nExamples:\n\n// Scalar tensors\nTensor t1(123);\nTensor t2(123.4f);\nTensor t3(\"abc\");  // string_view or string\u0026, or string\u0026\u0026 are accepted too\n\n// One dimensional tensors\nTensor t4({1, 2, 3}); // std::vector\u003cT\u003e\u0026\u0026 is accepted too\nTensor t5({\"a\", \"b\", \"c\"}); // std::vector\u003cstd::string\u003e\u0026\u0026 is accepted too\n\nPiperOrigin-RevId: 840782940\n"
    },
    {
      "commit": "7cbcfabbb0820aba3a2311e11fa29ebdf124bd72",
      "tree": "e29ed1366cb8f23d890e8aac3d6eca782fdc4ae1",
      "parents": [
        "5af363b0f05e779666deb6f858822f933e060cf6"
      ],
      "author": {
        "name": "TensorFlow Federated Team",
        "email": "no-reply@google.com",
        "time": "Thu Dec 04 20:57:01 2025"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Dec 04 20:57:43 2025"
      },
      "message": "Allow Tensor names to be updated after creation.\n\nPreviously set_name could only be used on unnamed Tensors.\n\nPiperOrigin-RevId: 840364212\n"
    },
    {
      "commit": "5af363b0f05e779666deb6f858822f933e060cf6",
      "tree": "032a8173b67487eedf71077bc0a13f87004b804b",
      "parents": [
        "662e1be56dc3a37812cc3c92860dca6aea02a16f"
      ],
      "author": {
        "name": "Albert Cheu",
        "email": "cheu@google.com",
        "time": "Thu Dec 04 17:35:35 2025"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Dec 04 17:36:32 2025"
      },
      "message": "Add Serialize sensitivity calculation.\n\nThis change introduces `CalculateSerializeSensitivity`, a method to compute the sensitivity of the serialized output size to a single `Accumulate` call, considering the byte sizes of different data types and varint encoding.\n\nAlong the way, update StringLengthCheck to create a default inner intrinsic instead of making one inline and remove unneeded `using` declarations in contributors_to_group_test.cc\n\nPiperOrigin-RevId: 840281117\n"
    },
    {
      "commit": "662e1be56dc3a37812cc3c92860dca6aea02a16f",
      "tree": "18790ff8446043f920e598afbc304383e3f59045",
      "parents": [
        "9eb9169473c67dc453507e708d487e3545a149c0"
      ],
      "author": {
        "name": "TensorFlow Federated Team",
        "email": "no-reply@google.com",
        "time": "Thu Dec 04 11:48:36 2025"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Dec 04 11:49:30 2025"
      },
      "message": "Create first version of a ContributorsToGroups class to store the contributors to an aggregation during k-thresholding.\n\nPiperOrigin-RevId: 840169884\n"
    },
    {
      "commit": "9eb9169473c67dc453507e708d487e3545a149c0",
      "tree": "3684c79daa5811b72c6b8447decc513a3bf130f9",
      "parents": [
        "4f12c96e1ca4561b82b7a232540dc94447e03da0"
      ],
      "author": {
        "name": "TensorFlow Federated Team",
        "email": "no-reply@google.com",
        "time": "Fri Nov 21 22:50:57 2025"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Nov 21 22:51:52 2025"
      },
      "message": "Add `is_scalar()` method to Tensor.\n\nThis method returns true if the tensor contains a single element.\n\nPiperOrigin-RevId: 835367507\n"
    },
    {
      "commit": "4f12c96e1ca4561b82b7a232540dc94447e03da0",
      "tree": "2d371cca3a53b69af9dda5205f0ff055b2ef404e",
      "parents": [
        "3d193140ccdd3580dcf0fd8d6f90fa56fa85dd2e"
      ],
      "author": {
        "name": "Albert Cheu",
        "email": "cheu@google.com",
        "time": "Fri Nov 21 20:37:05 2025"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Nov 21 20:37:44 2025"
      },
      "message": "Correctly update the contribution counts in DPOpenDomainHistogram: ignore ordinals that have negative value.\n\nThe result of DPCompositeKeyCombiner::Accumulate will include negative numbers to represent dropped contributions. Prior to this CL, an index error would have been thrown.\n\nPiperOrigin-RevId: 835321978\n"
    },
    {
      "commit": "3d193140ccdd3580dcf0fd8d6f90fa56fa85dd2e",
      "tree": "6181566f0143c68b56ae71697e3aad9c2f5472a6",
      "parents": [
        "c838f22e5703b17e23b1e98a43e057a16474065a"
      ],
      "author": {
        "name": "Albert Cheu",
        "email": "cheu@google.com",
        "time": "Thu Nov 13 19:32:40 2025"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Nov 13 19:33:33 2025"
      },
      "message": "Change the criteria for valid Intrinsics that encode DPGroupByAggregators: `delta` and `max_groups_contributed` (a.k.a. L0 bound) must both be positive.\n\nThe new criteria hold regardless of whether we are in the open or closed domain case. With these assurances, we will be able to randomly lengthen the outcome of Serialize()---via a new padding field---in a DP manner.\n\nPiperOrigin-RevId: 831941387\n"
    },
    {
      "commit": "c838f22e5703b17e23b1e98a43e057a16474065a",
      "tree": "d649d77f0b965da05ba4f6a027fdccf935cfd40c",
      "parents": [
        "5e8d352ce119dde61eb97f6f49341d2056fae6eb"
      ],
      "author": {
        "name": "Chris Kennelly",
        "email": "ckennelly@google.com",
        "time": "Thu Nov 13 00:34:10 2025"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Nov 13 00:35:04 2025"
      },
      "message": "No public description\n\nPiperOrigin-RevId: 831586662\n"
    },
    {
      "commit": "5e8d352ce119dde61eb97f6f49341d2056fae6eb",
      "tree": "3ec123c0e6d97a04a0da9816a29be285201fe587",
      "parents": [
        "f9b451b46a39c540266a752bbf2dd2b4ff16e229"
      ],
      "author": {
        "name": "Galen Andrew",
        "email": "galenandrew@google.com",
        "time": "Wed Nov 12 23:52:48 2025"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Nov 12 23:53:44 2025"
      },
      "message": "Improved numerical stability, speed, and code clarity in Gaussian mechanism calibration.\n\nPiperOrigin-RevId: 831572175\n"
    },
    {
      "commit": "f9b451b46a39c540266a752bbf2dd2b4ff16e229",
      "tree": "5c29bf24d092bb2313e6833f60dad1836e6520d0",
      "parents": [
        "e4b11a9221de721917704f71b8b50795e0db93d6"
      ],
      "author": {
        "name": "TensorFlow Federated Team",
        "email": "no-reply@google.com",
        "time": "Wed Nov 12 16:08:21 2025"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Nov 12 16:09:05 2025"
      },
      "message": "Support compatible array shapes during serialization.\n\nPiperOrigin-RevId: 831393353\n"
    },
    {
      "commit": "e4b11a9221de721917704f71b8b50795e0db93d6",
      "tree": "4889746814a399a9ea9b509c054ed12179af087b",
      "parents": [
        "548eb85480a07423ed52f80461761e6a8f658bbc"
      ],
      "author": {
        "name": "Zachary Garrett",
        "email": "zachgarrett@google.com",
        "time": "Wed Nov 05 16:56:55 2025"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Nov 05 16:57:44 2025"
      },
      "message": "Remove tensorflow-model-optimization dependency from TFF.\n\nThis package has not been updated since Feb 2024.\n\nPiperOrigin-RevId: 828491280\n"
    },
    {
      "commit": "548eb85480a07423ed52f80461761e6a8f658bbc",
      "tree": "5f6e0aa8adc06692381bdaab725a47c2d1b5cf34",
      "parents": [
        "b79895f075fe8957b6b34c0717b4f8034e8d849c"
      ],
      "author": {
        "name": "TensorFlow Federated Team",
        "email": "no-reply@google.com",
        "time": "Mon Nov 03 16:53:14 2025"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Nov 03 16:54:03 2025"
      },
      "message": "Add value serialization support for Array protos.\n\nPiperOrigin-RevId: 827518197\n"
    },
    {
      "commit": "b79895f075fe8957b6b34c0717b4f8034e8d849c",
      "tree": "ba3263c905c92a0229af2d7ad01fd070ab4482e5",
      "parents": [
        "2bb929861c89378465ecd0933b5fb358e7db4551"
      ],
      "author": {
        "name": "Albert Cheu",
        "email": "cheu@google.com",
        "time": "Wed Oct 22 14:02:21 2025"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Oct 22 14:03:18 2025"
      },
      "message": "In AggVectorAggregator and FederatedMean, migrate input validation from AggregateTensors to overridden ValidateInputs.\n\nAlso replace `TFF_CHECK` in OneDimBaseGroupingAggregator::ValidateInputs with `if...then TFF_STATUS(INVALID_ARGUMENT)` for consistency.\n\nPiperOrigin-RevId: 822571406\n"
    },
    {
      "commit": "2bb929861c89378465ecd0933b5fb358e7db4551",
      "tree": "8b4ff2be811bb4ed94b691489ba2f8790adaeaed",
      "parents": [
        "bfa1fc0b487374ff9bb638e8362654d963d70d7e"
      ],
      "author": {
        "name": "Albert Cheu",
        "email": "cheu@google.com",
        "time": "Mon Oct 20 18:21:09 2025"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Oct 20 18:22:08 2025"
      },
      "message": "Centralize input validation in `TensorAggregator::Accumulate` and introduce `TensorAggregator::AccumulateWithoutValidation`.\n\nThis change moves the `ValidateInputs` call from individual `AggregateTensors` implementations in derived classes to the base `TensorAggregator::Accumulate` method. A new `AccumulateWithoutValidation` method is introduced to handle the aggregation logic after validation; it is called by `CheckpointAggregator` after calling `ValidateInputs`.\n\n`AggregateTensorsInternal` is also removed from `DPTensorAggregator`.\n\nPiperOrigin-RevId: 821727331\n"
    },
    {
      "commit": "bfa1fc0b487374ff9bb638e8362654d963d70d7e",
      "tree": "b4d7df634522a00499a355db75fb6b09763bba1b",
      "parents": [
        "36702ff24420637585f71ff56b449bcd8f197432"
      ],
      "author": {
        "name": "Albert Cheu",
        "email": "cheu@google.com",
        "time": "Mon Oct 20 14:48:09 2025"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Oct 20 14:48:53 2025"
      },
      "message": "Add an input validation pass to `CheckpointAggregator::Accumulate`.\n\nAlong the way, add detail to the error messages in AddInputsToMap and replace deprecated syntax `Invoke([]...)` with `[]...`\n\nPiperOrigin-RevId: 821646061\n"
    },
    {
      "commit": "36702ff24420637585f71ff56b449bcd8f197432",
      "tree": "bde75c27243f3a3568e4c445a3c4a56dc236862b",
      "parents": [
        "4609485c60001c12f87ca50c55648486169e630f"
      ],
      "author": {
        "name": "Albert Cheu",
        "email": "cheu@google.com",
        "time": "Fri Oct 10 20:20:29 2025"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Oct 10 20:21:18 2025"
      },
      "message": "Refactor: move input validation in DPTensorAggregatorBundle to `ValidateInputs`.\n\nAlso rename `DPTensorAggregator::InputMatchesSpec` to `ValidateInputs`.\n\nPiperOrigin-RevId: 817765160\n"
    },
    {
      "commit": "4609485c60001c12f87ca50c55648486169e630f",
      "tree": "2957b1a41f499a7d1c549148206a09faebeb3ea9",
      "parents": [
        "a89af529acc2a7619609653283e77a22059d1a3d"
      ],
      "author": {
        "name": "Albert Cheu",
        "email": "cheu@google.com",
        "time": "Fri Oct 10 18:33:32 2025"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Oct 10 18:34:30 2025"
      },
      "message": "Enforce `max_string_length_` in overriden `DPGroupByAggregator::ValidateInputs`.\n\nPiperOrigin-RevId: 817725081\n"
    },
    {
      "commit": "a89af529acc2a7619609653283e77a22059d1a3d",
      "tree": "c16c9d02302793cc2e47c7f08352ef813c1d84b5",
      "parents": [
        "d0f392c49e826d69980c7cbe3a2f58cd9f187608"
      ],
      "author": {
        "name": "Albert Cheu",
        "email": "cheu@google.com",
        "time": "Fri Oct 10 17:33:20 2025"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Oct 10 17:34:10 2025"
      },
      "message": "Refactor GroupByAggregator: the validation performed in `AggregateTensorsInternal` is now done in overriden `ValidateInputs`.\n\nPiperOrigin-RevId: 817700726\n"
    },
    {
      "commit": "d0f392c49e826d69980c7cbe3a2f58cd9f187608",
      "tree": "8bf67e4d5fe86f8c61b898b21ba01a3489a61173",
      "parents": [
        "3a3417f81a6714339cc77fd68ba8f74019990e8c"
      ],
      "author": {
        "name": "Albert Cheu",
        "email": "cheu@google.com",
        "time": "Fri Oct 10 00:16:57 2025"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Oct 10 00:19:01 2025"
      },
      "message": "Introduce `ValidateInputs` to TensorAggregator, in order to allow calling code to verify an input before invoking `Accumulate`.\n\nAlso refactor OneDimBaseGroupingAggregator: override `ValidateInputs` to do what `ValidateTensorInputs` currently does before checking the type of `tensor[1]`.\n\nPiperOrigin-RevId: 817398053\n"
    },
    {
      "commit": "3a3417f81a6714339cc77fd68ba8f74019990e8c",
      "tree": "639f6cf380765fb0a08f567cba5cd0af6d3a428d",
      "parents": [
        "4e8cfc8d38bdae1b4a05d6f883aa2917733808c6"
      ],
      "author": {
        "name": "Michael Reneer",
        "email": "michaelreneer@google.com",
        "time": "Thu Oct 09 14:34:55 2025"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 09 14:35:46 2025"
      },
      "message": "Add public visibility in preparation for moving these files in Federated Language Executor project.\n\nPiperOrigin-RevId: 817179093\n"
    },
    {
      "commit": "4e8cfc8d38bdae1b4a05d6f883aa2917733808c6",
      "tree": "d3f097090716c28c4b56082ca20ff8f29ef9aa19",
      "parents": [
        "680e1519da7c79b12bb70f15dc3a09f9ba4680f3"
      ],
      "author": {
        "name": "Michael Reneer",
        "email": "michaelreneer@google.com",
        "time": "Wed Oct 08 17:33:36 2025"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Oct 08 17:34:37 2025"
      },
      "message": "Remove unused import.\n\nPiperOrigin-RevId: 816768045\n"
    },
    {
      "commit": "680e1519da7c79b12bb70f15dc3a09f9ba4680f3",
      "tree": "339eda1ab1aa6259951f4be3e1b46a6df6c49544",
      "parents": [
        "ca7ae6096a9ffd741d9814bae09e9c3fff13eab2"
      ],
      "author": {
        "name": "Michael Reneer",
        "email": "michaelreneer@google.com",
        "time": "Mon Oct 06 16:37:34 2025"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Oct 06 16:38:28 2025"
      },
      "message": "Update `executor_test_utils_bindings` to be public.\n\nThis change allows the python bindings to move to federated_language_executor before the cc files move and the entire migration to be incremental.\n\nPiperOrigin-RevId: 815763681\n"
    },
    {
      "commit": "ca7ae6096a9ffd741d9814bae09e9c3fff13eab2",
      "tree": "5e71f4ae9a3deda14ac95813949f9828b4318258",
      "parents": [
        "e2062e59d801fecc3beb9dbf094eda3712d162e5"
      ],
      "author": {
        "name": "TensorFlow Federated Team",
        "email": "no-reply@google.com",
        "time": "Wed Oct 01 14:21:31 2025"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Oct 01 14:22:48 2025"
      },
      "message": "Fix DPClosedDomainHistogram constructor call.\n\nPiperOrigin-RevId: 813742103\n"
    },
    {
      "commit": "e2062e59d801fecc3beb9dbf094eda3712d162e5",
      "tree": "5b3871d6d5322c48d7348dae01dc17ff608941f6",
      "parents": [
        "af3c0f4df85884f140ffb8b7b32153ef31109db4"
      ],
      "author": {
        "name": "TensorFlow Federated Team",
        "email": "no-reply@google.com",
        "time": "Tue Sep 30 18:32:48 2025"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Sep 30 18:33:51 2025"
      },
      "message": "Implement partitioning of contributors in GroupByAggregator.\n\nPiperOrigin-RevId: 813355554\n"
    },
    {
      "commit": "af3c0f4df85884f140ffb8b7b32153ef31109db4",
      "tree": "e26ee68d43a34ee9a30e9a1190bbd2fb56fabe50",
      "parents": [
        "455f0052dc3e327f0ee9c1afca1eca6897adc634"
      ],
      "author": {
        "name": "TensorFlow Federated Team",
        "email": "no-reply@google.com",
        "time": "Mon Sep 29 17:44:10 2025"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Sep 29 17:45:01 2025"
      },
      "message": "Implement CheckpointAggregator::Partition functionality.\n\nThe implementation loops through all the top-level tensor aggregators, partitions it and adds it to the relevant CheckpointAggregator partition.\n\nPiperOrigin-RevId: 812854192\n"
    },
    {
      "commit": "455f0052dc3e327f0ee9c1afca1eca6897adc634",
      "tree": "a43f39d47fe22b4c66e0603f2453567900aad22a",
      "parents": [
        "54a477d751a2993cc16310faa357e58c215bb027"
      ],
      "author": {
        "name": "Stanislav Chiknavaryan",
        "email": "stanisc@google.com",
        "time": "Sun Sep 28 04:02:39 2025"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sun Sep 28 04:03:31 2025"
      },
      "message": "Don\u0027t return an error on SimpleAggregationProtocol::Abort() if the protocol is already aborted\n\nPiperOrigin-RevId: 812343834\n"
    },
    {
      "commit": "54a477d751a2993cc16310faa357e58c215bb027",
      "tree": "7f07feae0f9bfa6fe4df50d901a35ec22367b43d",
      "parents": [
        "214c9489786e4849423d741cf432c1952f2a0683"
      ],
      "author": {
        "name": "Stanislav Chiknavaryan",
        "email": "stanisc@google.com",
        "time": "Fri Sep 26 17:39:44 2025"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Sep 26 17:40:28 2025"
      },
      "message": "Optimize peak memory usage of CompositeKeyCombiner\n\nPiperOrigin-RevId: 811873971\n"
    },
    {
      "commit": "214c9489786e4849423d741cf432c1952f2a0683",
      "tree": "c579b74ffb486c4a102b2f3bd99a29c56ed6a11c",
      "parents": [
        "d9bea962a42a83915bc8e9529e16917330e727b6"
      ],
      "author": {
        "name": "TensorFlow Federated Team",
        "email": "no-reply@google.com",
        "time": "Fri Sep 26 13:44:57 2025"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Sep 26 13:45:51 2025"
      },
      "message": "Calculate and reserve the size of each slice\n\nPiperOrigin-RevId: 811797557\n"
    },
    {
      "commit": "d9bea962a42a83915bc8e9529e16917330e727b6",
      "tree": "6264bcc20856ddf057dd8c7d470f854c4a4a57b4",
      "parents": [
        "6f4e83fbad975880a1112651e101d63511dd60dc"
      ],
      "author": {
        "name": "Stanislav Chiknavaryan",
        "email": "stanisc@google.com",
        "time": "Thu Sep 25 23:20:54 2025"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Sep 25 23:22:00 2025"
      },
      "message": "Change SimpleAggregationProtocol::Complete() logic to avoid contention with late arriving messages\n\nPiperOrigin-RevId: 811542064\n"
    },
    {
      "commit": "6f4e83fbad975880a1112651e101d63511dd60dc",
      "tree": "f23f46c76b2030cea4002f97e0f1bd2d6b115695",
      "parents": [
        "e5bc4132b1223997887443273f9676382edce9a4"
      ],
      "author": {
        "name": "Stanislav Chiknavaryan",
        "email": "stanisc@google.com",
        "time": "Thu Sep 25 20:52:42 2025"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Sep 25 20:53:28 2025"
      },
      "message": "Reserve vector of strings in the CompositeKeyCombiner output\n\nPiperOrigin-RevId: 811487998\n"
    },
    {
      "commit": "e5bc4132b1223997887443273f9676382edce9a4",
      "tree": "11d49918ef29a432218f856df785485e7bce8299",
      "parents": [
        "fa01ec68422c9dfc1772ef51aaff663958512967"
      ],
      "author": {
        "name": "Albert Cheu",
        "email": "cheu@google.com",
        "time": "Thu Sep 25 19:41:16 2025"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Sep 25 19:42:02 2025"
      },
      "message": "Refactor both DPClosedDomainHistogram and DPOpenDomainHistogram to be concrete children of DPGroupByAggregator. For each, the code in `Report()` now implements the abstract `NoisyReport()`.\n\nAlong the way, rename `l0_bound` to `max_groups_contributed` in the associated files, to be more consistent with the named Tensor.\n\nPiperOrigin-RevId: 811461166\n"
    },
    {
      "commit": "fa01ec68422c9dfc1772ef51aaff663958512967",
      "tree": "ef424ca9da05b9db94f61fa6898968cda3b8646a",
      "parents": [
        "b6383866920201f59a359aa8875e783b01ddf89f"
      ],
      "author": {
        "name": "TensorFlow Federated Team",
        "email": "no-reply@google.com",
        "time": "Thu Sep 25 18:45:26 2025"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Sep 25 18:46:23 2025"
      },
      "message": "Implement partitioning for nested aggregators in GroupByAggregator.\n\nPiperOrigin-RevId: 811438152\n"
    },
    {
      "commit": "b6383866920201f59a359aa8875e783b01ddf89f",
      "tree": "46a37683f91b88d6a440b4605d57d2f367642d7b",
      "parents": [
        "1e57cdbc7df2b5e591b0f222bfb48cd5edb9bc27"
      ],
      "author": {
        "name": "TensorFlow Federated Team",
        "email": "no-reply@google.com",
        "time": "Thu Sep 25 18:14:21 2025"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Sep 25 18:15:35 2025"
      },
      "message": "Implement `ToProtoWithPartition` for `OneDimGroupingAggregator`.\n\nPiperOrigin-RevId: 811425685\n"
    },
    {
      "commit": "1e57cdbc7df2b5e591b0f222bfb48cd5edb9bc27",
      "tree": "0dfe757e854d388d170ea8eeea3b0bf845405908",
      "parents": [
        "283a9dc5f71f54aa8e6b45843124e11a33851281"
      ],
      "author": {
        "name": "Albert Cheu",
        "email": "cheu@google.com",
        "time": "Thu Sep 25 15:37:54 2025"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Sep 25 15:38:40 2025"
      },
      "message": "Introduces `DPGroupByAggregator`, an abstract base class for DP-enabled group-by aggregations.\n\n`DPGroupByAggregator` extends `GroupByAggregator` with differential privacy parameters such as epsilon, delta, and max_groups_contributed. It handles the splitting of the privacy budget across multiple intrinsics and defines a pure virtual `NoisyReport()` method to be implemented by concrete DP aggregation algorithms. Tests  verify the budget splitting logic.\n\nPiperOrigin-RevId: 811364672\n"
    },
    {
      "commit": "283a9dc5f71f54aa8e6b45843124e11a33851281",
      "tree": "c76caf45d3d73e51240d0ee4aaeb323ba63b1c5b",
      "parents": [
        "6fb42e42081318a5ef791d6950f92f5dd1b8ca1c"
      ],
      "author": {
        "name": "Michael Reneer",
        "email": "michaelreneer@google.com",
        "time": "Wed Sep 24 18:36:55 2025"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Sep 24 18:37:44 2025"
      },
      "message": "Disable lint failure.\n\nPiperOrigin-RevId: 810967381\n"
    },
    {
      "commit": "6fb42e42081318a5ef791d6950f92f5dd1b8ca1c",
      "tree": "de3fa3430037b88b83c2f69359046594c939f14a",
      "parents": [
        "126f6c7fd4695fa5cee77bd34efe77f78330fb26"
      ],
      "author": {
        "name": "TensorFlow Federated Team",
        "email": "no-reply@google.com",
        "time": "Wed Sep 24 17:23:17 2025"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Sep 24 17:24:10 2025"
      },
      "message": "Add PartitionData func to Partitioner\n\nPiperOrigin-RevId: 810936581\n"
    },
    {
      "commit": "126f6c7fd4695fa5cee77bd34efe77f78330fb26",
      "tree": "a08924eef91f71678d050fa13d744e8409dab4c5",
      "parents": [
        "32ff551c108b1156d3f50815d21886da9a86777b"
      ],
      "author": {
        "name": "TensorFlow Federated Team",
        "email": "no-reply@google.com",
        "time": "Mon Sep 22 14:31:25 2025"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Sep 22 14:32:37 2025"
      },
      "message": "dds a `Partition` method to `GroupByAggregator`\n\nPiperOrigin-RevId: 810005924\n"
    },
    {
      "commit": "32ff551c108b1156d3f50815d21886da9a86777b",
      "tree": "2cc80a7e5ab84c7f4a45bf74e32b68f36aadc35d",
      "parents": [
        "26e6e3918a1328b51ff9ae31614babd83a58183f"
      ],
      "author": {
        "name": "TensorFlow Federated Team",
        "email": "no-reply@google.com",
        "time": "Mon Sep 22 14:06:44 2025"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Sep 22 14:08:26 2025"
      },
      "message": "Add PartitionKeys func to Partitioner\n\nPiperOrigin-RevId: 809998778\n"
    },
    {
      "commit": "26e6e3918a1328b51ff9ae31614babd83a58183f",
      "tree": "0ff75f96f16f49dda7ca98f2503ffce2b29c45d7",
      "parents": [
        "3f4065d4ec5cfa9a1b6afc8166b1485aa822f2da"
      ],
      "author": {
        "name": "Michael Reneer",
        "email": "michaelreneer@google.com",
        "time": "Fri Sep 19 21:14:44 2025"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Sep 19 21:15:40 2025"
      },
      "message": "Add `federated_language.framework.structure_with_type` function to Federated Language.\n\n* Added `federated_language.framework.structure_with_type` function to Federated Language.\n* Deprecated `tff.tensorflow.structure_from_tensor_type_tree`.\n\nPiperOrigin-RevId: 809184064\n"
    },
    {
      "commit": "3f4065d4ec5cfa9a1b6afc8166b1485aa822f2da",
      "tree": "ea12f57ca0c4b4c14ab47c048e8a637034b4ce71",
      "parents": [
        "48988448b619161f79fb9544a35d6128b83d9c6b"
      ],
      "author": {
        "name": "Michael Reneer",
        "email": "michaelreneer@google.com",
        "time": "Tue Sep 16 22:12:30 2025"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Sep 16 22:13:12 2025"
      },
      "message": "Remove usage of deprecated `tff.structure` API.\n\nThis change additionally removes dependencies on TFF, making it easier to move the CppToPythonExecutorBridge out of TFF.\n\nPiperOrigin-RevId: 807867408\n"
    }
  ],
  "next": "48988448b619161f79fb9544a35d6128b83d9c6b"
}
