)]}'
{
  "commit": "5febeb36e2cac4ad15aab51fe1671957a3ff7dbe",
  "tree": "9ec63ecc34abd000da007fb25d3fbb87ee6f15e1",
  "parents": [
    "6c5d9fff14f0df84a657bee1d889bafc9e95a58b"
  ],
  "author": {
    "name": "Tim Saucer",
    "email": "timsaucer@gmail.com",
    "time": "Thu Oct 08 13:44:29 2026 -0400"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Thu Oct 08 13:44:29 2026 -0400"
  },
  "message": "ci: add ty type checker and fix existing type errors (#1786)\n\nAdd ty (pinned to 0.0.84, since it is pre-1.0) to the dev dependency\ngroup, configure it in pyproject.toml to check python/datafusion, and\nrun it in the lint-python CI job and as a local pre-commit hook.\ndatafusion._internal ships no stubs, and pandas/polars are optional\nTYPE_CHECKING-only imports, so they are allowed to stay unresolved.\n\nFix the diagnostics ty reported:\n\n- Make the internal udtf decorator helper require `name`, matching the\n  public overloads. `@udtf()` previously passed None into Rust and\n  failed with \"\u0027None\u0027 is not an instance of \u0027str\u0027\".\n- Give AggregateUDF.__init__ defaults matching its FFI overload, and add\n  the same FFI overload to ScalarUDF and WindowUDF.\n- Add None/non-None overloads to expr_list_to_raw_expr_list and\n  sort_list_to_raw_sort_list so callers that unpack the result type\n  check.\n- Stop rebinding typed *args and parameters to values of other types.\n- Import warnings.deprecated behind a sys.version_info check and drop\n  the unreachable importlib_metadata fallback.\n- Fix smaller annotation mismatches (LogicalPlan.__eq__,\n  spark._coerce_i32, CSV file_compression_type).\n\nCo-authored-by: Claude Opus 5.5 (1M context) \u003cnoreply@anthropic.com\u003e",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "e3733344090c3eff9498730f961268268f718832",
      "old_mode": 33188,
      "old_path": ".github/workflows/build.yml",
      "new_id": "7b926a9ef9c5ddb5517fb6939c4796619e2bd6c9",
      "new_mode": 33188,
      "new_path": ".github/workflows/build.yml"
    },
    {
      "type": "modify",
      "old_id": "0a212480bb2cdf26821bcd4c8e2491c27add9b19",
      "old_mode": 33188,
      "old_path": ".pre-commit-config.yaml",
      "new_id": "9419fc3cd8420f572ca6e5f0a4b871c300f90ee3",
      "new_mode": 33188,
      "new_path": ".pre-commit-config.yaml"
    },
    {
      "type": "modify",
      "old_id": "604d3f847018438b22ba2769e32b79e81081dcaf",
      "old_mode": 33188,
      "old_path": "pyproject.toml",
      "new_id": "b115b1198e5cee40ae90cd3c3ce27fbc32a52cdc",
      "new_mode": 33188,
      "new_path": "pyproject.toml"
    },
    {
      "type": "modify",
      "old_id": "76f647796472c644483650671cc6f17c70cfb663",
      "old_mode": 33188,
      "old_path": "python/datafusion/__init__.py",
      "new_id": "087b276727a3b961e7adddd7b30d970d5243267e",
      "new_mode": 33188,
      "new_path": "python/datafusion/__init__.py"
    },
    {
      "type": "modify",
      "old_id": "d1d50117256f52414b6051b928dbd2c31021e75a",
      "old_mode": 33188,
      "old_path": "python/datafusion/catalog.py",
      "new_id": "9161c62fe9ec5d76d09c4680f6b824154008c70f",
      "new_mode": 33188,
      "new_path": "python/datafusion/catalog.py"
    },
    {
      "type": "modify",
      "old_id": "c663dea2b89c9c9ed101e8a9c0cf1ea9120021b0",
      "old_mode": 33188,
      "old_path": "python/datafusion/context.py",
      "new_id": "08dbc4400ffed3bb03cf4431cf3ebbb67cf229fb",
      "new_mode": 33188,
      "new_path": "python/datafusion/context.py"
    },
    {
      "type": "modify",
      "old_id": "8a867a8c61d400cbf9b1c3a566a311e82d0ef781",
      "old_mode": 33188,
      "old_path": "python/datafusion/dataframe.py",
      "new_id": "12ab0a3c3b530ce10da4963701f89f19a7a66e11",
      "new_mode": 33188,
      "new_path": "python/datafusion/dataframe.py"
    },
    {
      "type": "modify",
      "old_id": "bfa124ff00a53956bd6e416639f3ac968ff5f27b",
      "old_mode": 33188,
      "old_path": "python/datafusion/expr.py",
      "new_id": "d6cf85bc1fffd58d80bcbb061bb0eb0e393a73ea",
      "new_mode": 33188,
      "new_path": "python/datafusion/expr.py"
    },
    {
      "type": "modify",
      "old_id": "d5e146bd5cfab496ce87ea990e5c683040fef708",
      "old_mode": 33188,
      "old_path": "python/datafusion/functions/__init__.py",
      "new_id": "c7d99f786051cc930232f3b9677324028614e1b3",
      "new_mode": 33188,
      "new_path": "python/datafusion/functions/__init__.py"
    },
    {
      "type": "modify",
      "old_id": "c4002670d7a82e36ee64a3f4d916428f33d41f35",
      "old_mode": 33188,
      "old_path": "python/datafusion/functions/spark.py",
      "new_id": "74315fb40d67ac8eee0b59550ce077d6b1a38074",
      "new_mode": 33188,
      "new_path": "python/datafusion/functions/spark.py"
    },
    {
      "type": "modify",
      "old_id": "8b61c09797160791d09e3f274366a5c4f07bded5",
      "old_mode": 33188,
      "old_path": "python/datafusion/plan.py",
      "new_id": "ffad3862d4b631b10ccb8ca9b7ec559fd5c77a3e",
      "new_mode": 33188,
      "new_path": "python/datafusion/plan.py"
    },
    {
      "type": "modify",
      "old_id": "1d8ccbe3f49216219a737598e9a77f3817f2be24",
      "old_mode": 33188,
      "old_path": "python/datafusion/user_defined.py",
      "new_id": "c2624f613f12bbbafc700d92ba00e7f6285f770d",
      "new_mode": 33188,
      "new_path": "python/datafusion/user_defined.py"
    },
    {
      "type": "modify",
      "old_id": "49982971073dacb9a268b138d2df3606136eb378",
      "old_mode": 33188,
      "old_path": "uv.lock",
      "new_id": "b1bf3c5e6e2d475784228ae28fd4924b2fd4ae99",
      "new_mode": 33188,
      "new_path": "uv.lock"
    }
  ]
}
