)]}'
{
  "commit": "68a0b2dfd8cb3f5ac1846f22b6a8d0d539cb493c",
  "tree": "9e7cbb3c997385c133a9e1fd136fb175807de824",
  "parents": [
    "9a16e55ad226b5e387c1f3cf65f8d82e9b62e3c4"
  ],
  "author": {
    "name": "Ed Catmur",
    "email": "ed@catmur.uk",
    "time": "Thu May 05 20:09:56 2022 +0100"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Thu May 05 12:09:56 2022 -0700"
  },
  "message": "Add anyset \u0026 frozenset, enable copying (cast) to std::set (#3901)\n\n* Add frozenset, and allow it cast to std::set\r\n\r\nFor the reverse direction, std::set still casts to set. This is in concordance with the behavior for sequence containers, where e.g. tuple casts to std::vector but std::vector casts to list.\r\n\r\nExtracted from #3886.\r\n\r\n* Rename set_base to any_set to match Python C API\r\n\r\nsince this will be part of pybind11 public API\r\n\r\n* PR: static_cast, anyset\r\n\r\n* Add tests for frozenset\r\n\r\nand rename anyset methods\r\n\r\n* Remove frozenset default ctor, add tests\r\n\r\nMaking frozenset non-default constructible means that we need to adjust pyobject_caster to not require that its value is default constructible, by initializing value to a nil handle.  This also allows writing C++ functions taking anyset, and is arguably a performance improvement, since there is no need to allocate an object that will just be replaced by load.\r\n\r\nAdd some more tests, including anyset::empty, anyset::size, set::add and set::clear.\r\n\r\n* [pre-commit.ci] auto fixes from pre-commit.com hooks\r\n\r\nfor more information, see https://pre-commit.ci\r\n\r\n* Add rationale to `pyobject_caster` default ctor\r\n\r\n* Remove ineffectual protected: access control\r\n\r\nCo-authored-by: pre-commit-ci[bot] \u003c66853113+pre-commit-ci[bot]@users.noreply.github.com\u003e",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "22d2dba4ca4e1b8d3134b63ca68b22d9e9c186fd",
      "old_mode": 33188,
      "old_path": "include/pybind11/cast.h",
      "new_id": "376a679544de8e50f0c07c90a0d0ef48fcf3fe2b",
      "new_mode": 33188,
      "new_path": "include/pybind11/cast.h"
    },
    {
      "type": "modify",
      "old_id": "324fa932f170ed50eeec9c6c8d92cbd492146b64",
      "old_mode": 33188,
      "old_path": "include/pybind11/pytypes.h",
      "new_id": "256a2441b193de192d33c096e0675491d5e0a2ea",
      "new_mode": 33188,
      "new_path": "include/pybind11/pytypes.h"
    },
    {
      "type": "modify",
      "old_id": "51b57a92baef0906839faca468cd4edc42c549e3",
      "old_mode": 33188,
      "old_path": "include/pybind11/stl.h",
      "new_id": "625fb210fca5ba1575b6dad762b1a2b912439d08",
      "new_mode": 33188,
      "new_path": "include/pybind11/stl.h"
    },
    {
      "type": "modify",
      "old_id": "d1e9b81a73a965c650ed1062d2954a1806f82cd7",
      "old_mode": 33188,
      "old_path": "tests/test_pytypes.cpp",
      "new_id": "8d296f655a030ab5a8bfd8b277b559ad7a848952",
      "new_mode": 33188,
      "new_path": "tests/test_pytypes.cpp"
    },
    {
      "type": "modify",
      "old_id": "c740414aeec3b420e9679fb9042d6cf019019275",
      "old_mode": 33188,
      "old_path": "tests/test_pytypes.py",
      "new_id": "9afe62f4249c568064e9f85840185fb41559e284",
      "new_mode": 33188,
      "new_path": "tests/test_pytypes.py"
    },
    {
      "type": "modify",
      "old_id": "975860b85add58c1e3955047819e48b1468e2b21",
      "old_mode": 33188,
      "old_path": "tests/test_stl.py",
      "new_id": "d30c382113d1e44fddfcdab6535fb05cb10818ee",
      "new_mode": 33188,
      "new_path": "tests/test_stl.py"
    }
  ]
}
