⬆ Bump mypy from 1.4.1 to 1.18.2 - #1560

Merged
svlandeg merged 21 commits into
mainfrom
dependabot/pip/mypy-1.18.1
Oct 8, 2025
Merged

⬆ Bump mypy from 1.4.1 to 1.18.2#1560
svlandeg merged 21 commits into
mainfrom
dependabot/pip/mypy-1.18.1

Conversation

@dependabot

@dependabotdependabotBot commented on behalf of githubSep 12, 2025

Copy link
Copy Markdown
Contributor

Bumps mypy from 1.4.1 to 1.18.1.

Changelog

Sourced from mypy's changelog.

Mypy Release Notes

Next Release

Mypy 1.18

We’ve just uploaded mypy 1.18 to the Python Package Index (PyPI). Mypy is a static type checker for Python. This release includes new features, performance improvements and bug fixes. You can install it as follows:

python3 -m pip install -U mypy

You can read the full documentation for this release on Read the Docs.

Mypy Performance Improvements

Mypy 1.18 includes numerous performance improvements, resulting in about 40% speedup compared to 1.17 when type checking mypy itself. In extreme cases, the improvement can be 10x or higher. The list below is an overview of the various mypy optimizations. Many mypyc improvements (discussed in a separate section below) also improve performance.

Type caching optimizations have a small risk of causing regressions. When reporting issues with unexpected inferred types, please also check if --disable-expression-cache will work around the issue, as it turns off some of these optimizations.

  • Improve self check performance by 1.8% (Jukka Lehtosalo, PR 19768, 19769, 19770)
  • Optimize fixed-format deserialization (Ivan Levkivskyi, PR 19765)
  • Use macros to optimize fixed-format deserialization (Ivan Levkivskyi, PR 19757)
  • Two additional micro‑optimizations (Ivan Levkivskyi, PR 19627)
  • Another set of micro‑optimizations (Ivan Levkivskyi, PR 19633)
  • Cache common types (Ivan Levkivskyi, PR 19621)
  • Skip more method bodies in third‑party libraries for speed (Ivan Levkivskyi, PR 19586)
  • Simplify the representation of callable types (Ivan Levkivskyi, PR 19580)
  • Add cache for types of some expressions (Ivan Levkivskyi, PR 19505)
  • Use cache for dictionary expressions (Ivan Levkivskyi, PR 19536)
  • Use cache for binary operations (Ivan Levkivskyi, PR 19523)
  • Cache types of type objects (Ivan Levkivskyi, PR 19514)
  • Avoid duplicate work when checking boolean operations (Ivan Levkivskyi, PR 19515)
  • Optimize generic inference passes (Ivan Levkivskyi, PR 19501)
  • Speed up the default plugin (Jukka Lehtosalo, PRs 19385 and 19462)
  • Remove nested imports from the default plugin (Ivan Levkivskyi, PR 19388)
  • Micro‑optimize type expansion (Jukka Lehtosalo, PR 19461)
  • Micro‑optimize type indirection (Jukka Lehtosalo, PR 19460)
  • Micro‑optimize the plugin framework (Jukka Lehtosalo, PR 19464)
  • Avoid temporary set creation in subtype checking (Jukka Lehtosalo, PR 19463)
  • Subtype checking micro‑optimization (Jukka Lehtosalo, PR 19384)
  • Return early where possible in subtype check (Stanislav Terliakov, PR 19400)
  • Deduplicate some types before joining (Stanislav Terliakov, PR 19409)
  • Speed up type checking by caching argument inference context (Jukka Lehtosalo, PR 19323)

... (truncated)

Commits

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot merge will merge this PR after your CI passes on it
  • @dependabot squash and merge will squash and merge this PR after your CI passes on it
  • @dependabot cancel merge will cancel a previously requested merge and block automerging
  • @dependabot reopen will reopen this PR if it is closed
  • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

@dependabotdependabotBot added dependencies Pull requests that update a dependency file python Pull requests that update Python code labels Sep 12, 2025
@github-actionsgithub-actionsBot added the internal Internal changes label Sep 12, 2025
Bumps [mypy](https://github.com/python/mypy) from 1.4.1 to 1.18.1.
- [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md)
- [Commits](python/mypy@v1.4.1...v1.18.1)
---
updated-dependencies:
- dependency-name: mypy
dependency-version: 1.18.1
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot] <support@github.com>
@dependabot
dependabotBotforce-pushed the dependabot/pip/mypy-1.18.1 branch from f54feaf to 744954bCompareSeptember 16, 2025 08:57
@svlandegsvlandeg self-assigned this Sep 16, 2025
Comment threadrequirements-tests.txt Outdated
@svlandegsvlandeg changed the title ⬆ Bump mypy from 1.4.1 to 1.18.1⬆ Bump mypy from 1.4.1 to 1.14.1Sep 16, 2025
Comment threadsqlmodel/_compat.py

def get_annotations(class_dict: Dict[str, Any]) -> Dict[str, Any]:
return class_dict.get("__annotations__", {})
return class_dict.get("__annotations__", {}) # type: ignore[no-any-return]

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As on L425, where we're already ignoring it, the error is

Returning Any from function declared to return "dict[str, Any]" [no-any-return]

@svlandeg

Copy link
Copy Markdown
Member

Huh. On Python 3.9 the CI is failing with

sqlmodel/main.py:39: error: X | Y syntax for unions requires Python 3.10 [syntax]

But I don't see a single X | Y in main.py 🤔

@svlandeg

Copy link
Copy Markdown
Member

The mypy check also takes super long, both on CI as locally. Weird - I keep investigating.

@svlandeg
svlandeg marked this pull request as draft September 16, 2025 18:51
svlandeg
svlandeg previously requested changes Sep 16, 2025

@svlandegsvlandeg left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The false positive notifications of the X | Y syntax go away when specifying from __future__ import annotations at the top of the file, as suggested here.

But even if this PR goes green, we shouldn't merge it. The mypy runs are still taking a ridiculous amount of time, something like 12-13 minutes. Each full CI run usually takes less than 1 minute when looking at current open PRs.

@dependabot@github

This comment was marked as outdated.

@github-actionsgithub-actionsBot added the conflicts Automatically generated when a PR has a merge conflict label Sep 26, 2025
@github-actions

This comment was marked as resolved.

@github-actionsgithub-actionsBot removed the conflicts Automatically generated when a PR has a merge conflict label Sep 26, 2025
@svlandeg

svlandeg commented Sep 29, 2025

Copy link
Copy Markdown
Member

With mypy 1.10.0 the execution time is still reasonable (but it's still a pretty old version of mypy - I'll keep investigating)

Update: ignoring sqlmodel.sql._expression_select_gen.py from the mypy checks avoids the minute-long run.

@github-actions

This comment was marked as outdated.

@github-actions

This comment was marked as outdated.

@svlandegsvlandeg changed the title ⬆ Bump mypy from 1.4.1 to 1.14.1⬆ Bump mypy from 1.4.1 to 1.18.2Sep 29, 2025
@github-actions

This comment was marked as outdated.

@github-actions

Copy link
Copy Markdown
Contributor

📝 Docs preview for commit f30beb2 at: https://d085961e.sqlmodel.pages.dev

@svlandeg
svlandeg marked this pull request as ready for review September 29, 2025 15:00
@svlandegsvlandeg removed their assignment Sep 29, 2025
@svlandeg
svlandeg marked this pull request as draft October 7, 2025 08:06
@github-actions

Copy link
Copy Markdown
Contributor

📝 Docs preview

Last commit d787c3f at: https://76cacab2.sqlmodel.pages.dev

@svlandeg
svlandeg marked this pull request as ready for review October 8, 2025 11:09

@tiangolotiangolo left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks good to me, feel free to merge when ready @svlandeg 🚀

@svlandeg

Copy link
Copy Markdown
Member

🎉

@svlandeg
svlandeg merged commit f751e1c into mainOct 8, 2025
28 checks passed
@svlandeg
svlandeg deleted the dependabot/pip/mypy-1.18.1 branch October 8, 2025 11:10
@YuriiMotov

Copy link
Copy Markdown
Member

from __future__ import annotations added by this PR causes Pyright in strict mode to show Type of "Field" is partially unknown error: #1598

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependenciesPull requests that update a dependency fileinternalInternal changespythonPull requests that update Python code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@svlandeg@YuriiMotov@tiangolo
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

⬆ Bump mypy from 1.4.1 to 1.18.2 - #1560

Merged
svlandeg merged 21 commits into
mainfrom
dependabot/pip/mypy-1.18.1
Oct 8, 2025
Merged

⬆ Bump mypy from 1.4.1 to 1.18.2#1560
svlandeg merged 21 commits into
mainfrom
dependabot/pip/mypy-1.18.1

Conversation

@dependabot

@dependabotdependabotBot commented on behalf of githubSep 12, 2025

Copy link
Copy Markdown
Contributor

Bumps mypy from 1.4.1 to 1.18.1.

Changelog

Sourced from mypy's changelog.

Mypy Release Notes

Next Release

Mypy 1.18

We’ve just uploaded mypy 1.18 to the Python Package Index (PyPI). Mypy is a static type checker for Python. This release includes new features, performance improvements and bug fixes. You can install it as follows:

python3 -m pip install -U mypy

You can read the full documentation for this release on Read the Docs.

Mypy Performance Improvements

Mypy 1.18 includes numerous performance improvements, resulting in about 40% speedup compared to 1.17 when type checking mypy itself. In extreme cases, the improvement can be 10x or higher. The list below is an overview of the various mypy optimizations. Many mypyc improvements (discussed in a separate section below) also improve performance.

Type caching optimizations have a small risk of causing regressions. When reporting issues with unexpected inferred types, please also check if --disable-expression-cache will work around the issue, as it turns off some of these optimizations.

  • Improve self check performance by 1.8% (Jukka Lehtosalo, PR 19768, 19769, 19770)
  • Optimize fixed-format deserialization (Ivan Levkivskyi, PR 19765)
  • Use macros to optimize fixed-format deserialization (Ivan Levkivskyi, PR 19757)
  • Two additional micro‑optimizations (Ivan Levkivskyi, PR 19627)
  • Another set of micro‑optimizations (Ivan Levkivskyi, PR 19633)
  • Cache common types (Ivan Levkivskyi, PR 19621)
  • Skip more method bodies in third‑party libraries for speed (Ivan Levkivskyi, PR 19586)
  • Simplify the representation of callable types (Ivan Levkivskyi, PR 19580)
  • Add cache for types of some expressions (Ivan Levkivskyi, PR 19505)
  • Use cache for dictionary expressions (Ivan Levkivskyi, PR 19536)
  • Use cache for binary operations (Ivan Levkivskyi, PR 19523)
  • Cache types of type objects (Ivan Levkivskyi, PR 19514)
  • Avoid duplicate work when checking boolean operations (Ivan Levkivskyi, PR 19515)
  • Optimize generic inference passes (Ivan Levkivskyi, PR 19501)
  • Speed up the default plugin (Jukka Lehtosalo, PRs 19385 and 19462)
  • Remove nested imports from the default plugin (Ivan Levkivskyi, PR 19388)
  • Micro‑optimize type expansion (Jukka Lehtosalo, PR 19461)
  • Micro‑optimize type indirection (Jukka Lehtosalo, PR 19460)
  • Micro‑optimize the plugin framework (Jukka Lehtosalo, PR 19464)
  • Avoid temporary set creation in subtype checking (Jukka Lehtosalo, PR 19463)
  • Subtype checking micro‑optimization (Jukka Lehtosalo, PR 19384)
  • Return early where possible in subtype check (Stanislav Terliakov, PR 19400)
  • Deduplicate some types before joining (Stanislav Terliakov, PR 19409)
  • Speed up type checking by caching argument inference context (Jukka Lehtosalo, PR 19323)

... (truncated)

Commits

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot merge will merge this PR after your CI passes on it
  • @dependabot squash and merge will squash and merge this PR after your CI passes on it
  • @dependabot cancel merge will cancel a previously requested merge and block automerging
  • @dependabot reopen will reopen this PR if it is closed
  • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

@dependabotdependabotBot added dependencies Pull requests that update a dependency file python Pull requests that update Python code labels Sep 12, 2025
@github-actionsgithub-actionsBot added the internal Internal changes label Sep 12, 2025
Bumps [mypy](https://github.com/python/mypy) from 1.4.1 to 1.18.1.
- [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md)
- [Commits](python/mypy@v1.4.1...v1.18.1)
---
updated-dependencies:
- dependency-name: mypy
dependency-version: 1.18.1
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot] <support@github.com>
@dependabot
dependabotBotforce-pushed the dependabot/pip/mypy-1.18.1 branch from f54feaf to 744954bCompareSeptember 16, 2025 08:57
@svlandegsvlandeg self-assigned this Sep 16, 2025
Comment threadrequirements-tests.txt Outdated
@svlandegsvlandeg changed the title ⬆ Bump mypy from 1.4.1 to 1.18.1⬆ Bump mypy from 1.4.1 to 1.14.1Sep 16, 2025
Comment threadsqlmodel/_compat.py

def get_annotations(class_dict: Dict[str, Any]) -> Dict[str, Any]:
return class_dict.get("__annotations__", {})
return class_dict.get("__annotations__", {}) # type: ignore[no-any-return]

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As on L425, where we're already ignoring it, the error is

Returning Any from function declared to return "dict[str, Any]" [no-any-return]

@svlandeg

Copy link
Copy Markdown
Member

Huh. On Python 3.9 the CI is failing with

sqlmodel/main.py:39: error: X | Y syntax for unions requires Python 3.10 [syntax]

But I don't see a single X | Y in main.py 🤔

@svlandeg

Copy link
Copy Markdown
Member

The mypy check also takes super long, both on CI as locally. Weird - I keep investigating.

@svlandeg
svlandeg marked this pull request as draft September 16, 2025 18:51
svlandeg
svlandeg previously requested changes Sep 16, 2025

@svlandegsvlandeg left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The false positive notifications of the X | Y syntax go away when specifying from __future__ import annotations at the top of the file, as suggested here.

But even if this PR goes green, we shouldn't merge it. The mypy runs are still taking a ridiculous amount of time, something like 12-13 minutes. Each full CI run usually takes less than 1 minute when looking at current open PRs.

@dependabot@github

This comment was marked as outdated.

@github-actionsgithub-actionsBot added the conflicts Automatically generated when a PR has a merge conflict label Sep 26, 2025
@github-actions

This comment was marked as resolved.

@github-actionsgithub-actionsBot removed the conflicts Automatically generated when a PR has a merge conflict label Sep 26, 2025
@svlandeg

svlandeg commented Sep 29, 2025

Copy link
Copy Markdown
Member

With mypy 1.10.0 the execution time is still reasonable (but it's still a pretty old version of mypy - I'll keep investigating)

Update: ignoring sqlmodel.sql._expression_select_gen.py from the mypy checks avoids the minute-long run.

@github-actions

This comment was marked as outdated.

@github-actions

This comment was marked as outdated.

@svlandegsvlandeg changed the title ⬆ Bump mypy from 1.4.1 to 1.14.1⬆ Bump mypy from 1.4.1 to 1.18.2Sep 29, 2025
@github-actions

This comment was marked as outdated.

@github-actions

Copy link
Copy Markdown
Contributor

📝 Docs preview for commit f30beb2 at: https://d085961e.sqlmodel.pages.dev

@svlandeg
svlandeg marked this pull request as ready for review September 29, 2025 15:00
@svlandegsvlandeg removed their assignment Sep 29, 2025
@svlandeg
svlandeg marked this pull request as draft October 7, 2025 08:06
@github-actions

Copy link
Copy Markdown
Contributor

📝 Docs preview

Last commit d787c3f at: https://76cacab2.sqlmodel.pages.dev

@svlandeg
svlandeg marked this pull request as ready for review October 8, 2025 11:09

@tiangolotiangolo left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks good to me, feel free to merge when ready @svlandeg 🚀

@svlandeg

Copy link
Copy Markdown
Member

🎉

@svlandeg
svlandeg merged commit f751e1c into mainOct 8, 2025
28 checks passed
@svlandeg
svlandeg deleted the dependabot/pip/mypy-1.18.1 branch October 8, 2025 11:10
@YuriiMotov

Copy link
Copy Markdown
Member

from __future__ import annotations added by this PR causes Pyright in strict mode to show Type of "Field" is partially unknown error: #1598

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependenciesPull requests that update a dependency fileinternalInternal changespythonPull requests that update Python code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@svlandeg@YuriiMotov@tiangolo
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

⬆ Bump mypy from 1.4.1 to 1.18.2 - #1560

Merged
svlandeg merged 21 commits into
mainfrom
dependabot/pip/mypy-1.18.1
Oct 8, 2025
Merged

⬆ Bump mypy from 1.4.1 to 1.18.2#1560
svlandeg merged 21 commits into
mainfrom
dependabot/pip/mypy-1.18.1

Conversation

@dependabot

@dependabotdependabotBot commented on behalf of githubSep 12, 2025

Copy link
Copy Markdown
Contributor

Bumps mypy from 1.4.1 to 1.18.1.

Changelog

Sourced from mypy's changelog.

Mypy Release Notes

Next Release

Mypy 1.18

We’ve just uploaded mypy 1.18 to the Python Package Index (PyPI). Mypy is a static type checker for Python. This release includes new features, performance improvements and bug fixes. You can install it as follows:

python3 -m pip install -U mypy

You can read the full documentation for this release on Read the Docs.

Mypy Performance Improvements

Mypy 1.18 includes numerous performance improvements, resulting in about 40% speedup compared to 1.17 when type checking mypy itself. In extreme cases, the improvement can be 10x or higher. The list below is an overview of the various mypy optimizations. Many mypyc improvements (discussed in a separate section below) also improve performance.

Type caching optimizations have a small risk of causing regressions. When reporting issues with unexpected inferred types, please also check if --disable-expression-cache will work around the issue, as it turns off some of these optimizations.

  • Improve self check performance by 1.8% (Jukka Lehtosalo, PR 19768, 19769, 19770)
  • Optimize fixed-format deserialization (Ivan Levkivskyi, PR 19765)
  • Use macros to optimize fixed-format deserialization (Ivan Levkivskyi, PR 19757)
  • Two additional micro‑optimizations (Ivan Levkivskyi, PR 19627)
  • Another set of micro‑optimizations (Ivan Levkivskyi, PR 19633)
  • Cache common types (Ivan Levkivskyi, PR 19621)
  • Skip more method bodies in third‑party libraries for speed (Ivan Levkivskyi, PR 19586)
  • Simplify the representation of callable types (Ivan Levkivskyi, PR 19580)
  • Add cache for types of some expressions (Ivan Levkivskyi, PR 19505)
  • Use cache for dictionary expressions (Ivan Levkivskyi, PR 19536)
  • Use cache for binary operations (Ivan Levkivskyi, PR 19523)
  • Cache types of type objects (Ivan Levkivskyi, PR 19514)
  • Avoid duplicate work when checking boolean operations (Ivan Levkivskyi, PR 19515)
  • Optimize generic inference passes (Ivan Levkivskyi, PR 19501)
  • Speed up the default plugin (Jukka Lehtosalo, PRs 19385 and 19462)
  • Remove nested imports from the default plugin (Ivan Levkivskyi, PR 19388)
  • Micro‑optimize type expansion (Jukka Lehtosalo, PR 19461)
  • Micro‑optimize type indirection (Jukka Lehtosalo, PR 19460)
  • Micro‑optimize the plugin framework (Jukka Lehtosalo, PR 19464)
  • Avoid temporary set creation in subtype checking (Jukka Lehtosalo, PR 19463)
  • Subtype checking micro‑optimization (Jukka Lehtosalo, PR 19384)
  • Return early where possible in subtype check (Stanislav Terliakov, PR 19400)
  • Deduplicate some types before joining (Stanislav Terliakov, PR 19409)
  • Speed up type checking by caching argument inference context (Jukka Lehtosalo, PR 19323)

... (truncated)

Commits

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot merge will merge this PR after your CI passes on it
  • @dependabot squash and merge will squash and merge this PR after your CI passes on it
  • @dependabot cancel merge will cancel a previously requested merge and block automerging
  • @dependabot reopen will reopen this PR if it is closed
  • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

@dependabotdependabotBot added dependencies Pull requests that update a dependency file python Pull requests that update Python code labels Sep 12, 2025
@github-actionsgithub-actionsBot added the internal Internal changes label Sep 12, 2025
Bumps [mypy](https://github.com/python/mypy) from 1.4.1 to 1.18.1.
- [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md)
- [Commits](python/mypy@v1.4.1...v1.18.1)
---
updated-dependencies:
- dependency-name: mypy
dependency-version: 1.18.1
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot] <support@github.com>
@dependabot
dependabotBotforce-pushed the dependabot/pip/mypy-1.18.1 branch from f54feaf to 744954bCompareSeptember 16, 2025 08:57
@svlandegsvlandeg self-assigned this Sep 16, 2025
Comment threadrequirements-tests.txt Outdated
@svlandegsvlandeg changed the title ⬆ Bump mypy from 1.4.1 to 1.18.1⬆ Bump mypy from 1.4.1 to 1.14.1Sep 16, 2025
Comment threadsqlmodel/_compat.py

def get_annotations(class_dict: Dict[str, Any]) -> Dict[str, Any]:
return class_dict.get("__annotations__", {})
return class_dict.get("__annotations__", {}) # type: ignore[no-any-return]

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As on L425, where we're already ignoring it, the error is

Returning Any from function declared to return "dict[str, Any]" [no-any-return]

@svlandeg

Copy link
Copy Markdown
Member

Huh. On Python 3.9 the CI is failing with

sqlmodel/main.py:39: error: X | Y syntax for unions requires Python 3.10 [syntax]

But I don't see a single X | Y in main.py 🤔

@svlandeg

Copy link
Copy Markdown
Member

The mypy check also takes super long, both on CI as locally. Weird - I keep investigating.

@svlandeg
svlandeg marked this pull request as draft September 16, 2025 18:51
svlandeg
svlandeg previously requested changes Sep 16, 2025

@svlandegsvlandeg left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The false positive notifications of the X | Y syntax go away when specifying from __future__ import annotations at the top of the file, as suggested here.

But even if this PR goes green, we shouldn't merge it. The mypy runs are still taking a ridiculous amount of time, something like 12-13 minutes. Each full CI run usually takes less than 1 minute when looking at current open PRs.

@dependabot@github

This comment was marked as outdated.

@github-actionsgithub-actionsBot added the conflicts Automatically generated when a PR has a merge conflict label Sep 26, 2025
@github-actions

This comment was marked as resolved.

@github-actionsgithub-actionsBot removed the conflicts Automatically generated when a PR has a merge conflict label Sep 26, 2025
@svlandeg

svlandeg commented Sep 29, 2025

Copy link
Copy Markdown
Member

With mypy 1.10.0 the execution time is still reasonable (but it's still a pretty old version of mypy - I'll keep investigating)

Update: ignoring sqlmodel.sql._expression_select_gen.py from the mypy checks avoids the minute-long run.

@github-actions

This comment was marked as outdated.

@github-actions

This comment was marked as outdated.

@svlandegsvlandeg changed the title ⬆ Bump mypy from 1.4.1 to 1.14.1⬆ Bump mypy from 1.4.1 to 1.18.2Sep 29, 2025
@github-actions

This comment was marked as outdated.

@github-actions

Copy link
Copy Markdown
Contributor

📝 Docs preview for commit f30beb2 at: https://d085961e.sqlmodel.pages.dev

@svlandeg
svlandeg marked this pull request as ready for review September 29, 2025 15:00
@svlandegsvlandeg removed their assignment Sep 29, 2025
@svlandeg
svlandeg marked this pull request as draft October 7, 2025 08:06
@github-actions

Copy link
Copy Markdown
Contributor

📝 Docs preview

Last commit d787c3f at: https://76cacab2.sqlmodel.pages.dev

@svlandeg
svlandeg marked this pull request as ready for review October 8, 2025 11:09

@tiangolotiangolo left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks good to me, feel free to merge when ready @svlandeg 🚀

@svlandeg

Copy link
Copy Markdown
Member

🎉

@svlandeg
svlandeg merged commit f751e1c into mainOct 8, 2025
28 checks passed
@svlandeg
svlandeg deleted the dependabot/pip/mypy-1.18.1 branch October 8, 2025 11:10
@YuriiMotov

Copy link
Copy Markdown
Member

from __future__ import annotations added by this PR causes Pyright in strict mode to show Type of "Field" is partially unknown error: #1598

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependenciesPull requests that update a dependency fileinternalInternal changespythonPull requests that update Python code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@svlandeg@YuriiMotov@tiangolo
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

⬆ Bump mypy from 1.4.1 to 1.18.2 - #1560

Merged
svlandeg merged 21 commits into
mainfrom
dependabot/pip/mypy-1.18.1
Oct 8, 2025
Merged

⬆ Bump mypy from 1.4.1 to 1.18.2#1560
svlandeg merged 21 commits into
mainfrom
dependabot/pip/mypy-1.18.1

Conversation

@dependabot

@dependabotdependabotBot commented on behalf of githubSep 12, 2025

Copy link
Copy Markdown
Contributor

Bumps mypy from 1.4.1 to 1.18.1.

Changelog

Sourced from mypy's changelog.

Mypy Release Notes

Next Release

Mypy 1.18

We’ve just uploaded mypy 1.18 to the Python Package Index (PyPI). Mypy is a static type checker for Python. This release includes new features, performance improvements and bug fixes. You can install it as follows:

python3 -m pip install -U mypy

You can read the full documentation for this release on Read the Docs.

Mypy Performance Improvements

Mypy 1.18 includes numerous performance improvements, resulting in about 40% speedup compared to 1.17 when type checking mypy itself. In extreme cases, the improvement can be 10x or higher. The list below is an overview of the various mypy optimizations. Many mypyc improvements (discussed in a separate section below) also improve performance.

Type caching optimizations have a small risk of causing regressions. When reporting issues with unexpected inferred types, please also check if --disable-expression-cache will work around the issue, as it turns off some of these optimizations.

  • Improve self check performance by 1.8% (Jukka Lehtosalo, PR 19768, 19769, 19770)
  • Optimize fixed-format deserialization (Ivan Levkivskyi, PR 19765)
  • Use macros to optimize fixed-format deserialization (Ivan Levkivskyi, PR 19757)
  • Two additional micro‑optimizations (Ivan Levkivskyi, PR 19627)
  • Another set of micro‑optimizations (Ivan Levkivskyi, PR 19633)
  • Cache common types (Ivan Levkivskyi, PR 19621)
  • Skip more method bodies in third‑party libraries for speed (Ivan Levkivskyi, PR 19586)
  • Simplify the representation of callable types (Ivan Levkivskyi, PR 19580)
  • Add cache for types of some expressions (Ivan Levkivskyi, PR 19505)
  • Use cache for dictionary expressions (Ivan Levkivskyi, PR 19536)
  • Use cache for binary operations (Ivan Levkivskyi, PR 19523)
  • Cache types of type objects (Ivan Levkivskyi, PR 19514)
  • Avoid duplicate work when checking boolean operations (Ivan Levkivskyi, PR 19515)
  • Optimize generic inference passes (Ivan Levkivskyi, PR 19501)
  • Speed up the default plugin (Jukka Lehtosalo, PRs 19385 and 19462)
  • Remove nested imports from the default plugin (Ivan Levkivskyi, PR 19388)
  • Micro‑optimize type expansion (Jukka Lehtosalo, PR 19461)
  • Micro‑optimize type indirection (Jukka Lehtosalo, PR 19460)
  • Micro‑optimize the plugin framework (Jukka Lehtosalo, PR 19464)
  • Avoid temporary set creation in subtype checking (Jukka Lehtosalo, PR 19463)
  • Subtype checking micro‑optimization (Jukka Lehtosalo, PR 19384)
  • Return early where possible in subtype check (Stanislav Terliakov, PR 19400)
  • Deduplicate some types before joining (Stanislav Terliakov, PR 19409)
  • Speed up type checking by caching argument inference context (Jukka Lehtosalo, PR 19323)

... (truncated)

Commits

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot merge will merge this PR after your CI passes on it
  • @dependabot squash and merge will squash and merge this PR after your CI passes on it
  • @dependabot cancel merge will cancel a previously requested merge and block automerging
  • @dependabot reopen will reopen this PR if it is closed
  • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

@dependabotdependabotBot added dependencies Pull requests that update a dependency file python Pull requests that update Python code labels Sep 12, 2025
@github-actionsgithub-actionsBot added the internal Internal changes label Sep 12, 2025
Bumps [mypy](https://github.com/python/mypy) from 1.4.1 to 1.18.1.
- [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md)
- [Commits](python/mypy@v1.4.1...v1.18.1)
---
updated-dependencies:
- dependency-name: mypy
dependency-version: 1.18.1
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot] <support@github.com>
@dependabot
dependabotBotforce-pushed the dependabot/pip/mypy-1.18.1 branch from f54feaf to 744954bCompareSeptember 16, 2025 08:57
@svlandegsvlandeg self-assigned this Sep 16, 2025
Comment threadrequirements-tests.txt Outdated
@svlandegsvlandeg changed the title ⬆ Bump mypy from 1.4.1 to 1.18.1⬆ Bump mypy from 1.4.1 to 1.14.1Sep 16, 2025
Comment threadsqlmodel/_compat.py

def get_annotations(class_dict: Dict[str, Any]) -> Dict[str, Any]:
return class_dict.get("__annotations__", {})
return class_dict.get("__annotations__", {}) # type: ignore[no-any-return]

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As on L425, where we're already ignoring it, the error is

Returning Any from function declared to return "dict[str, Any]" [no-any-return]

@svlandeg

Copy link
Copy Markdown
Member

Huh. On Python 3.9 the CI is failing with

sqlmodel/main.py:39: error: X | Y syntax for unions requires Python 3.10 [syntax]

But I don't see a single X | Y in main.py 🤔

@svlandeg

Copy link
Copy Markdown
Member

The mypy check also takes super long, both on CI as locally. Weird - I keep investigating.

@svlandeg
svlandeg marked this pull request as draft September 16, 2025 18:51
svlandeg
svlandeg previously requested changes Sep 16, 2025

@svlandegsvlandeg left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The false positive notifications of the X | Y syntax go away when specifying from __future__ import annotations at the top of the file, as suggested here.

But even if this PR goes green, we shouldn't merge it. The mypy runs are still taking a ridiculous amount of time, something like 12-13 minutes. Each full CI run usually takes less than 1 minute when looking at current open PRs.

@dependabot@github

This comment was marked as outdated.

@github-actionsgithub-actionsBot added the conflicts Automatically generated when a PR has a merge conflict label Sep 26, 2025
@github-actions

This comment was marked as resolved.

@github-actionsgithub-actionsBot removed the conflicts Automatically generated when a PR has a merge conflict label Sep 26, 2025
@svlandeg

svlandeg commented Sep 29, 2025

Copy link
Copy Markdown
Member

With mypy 1.10.0 the execution time is still reasonable (but it's still a pretty old version of mypy - I'll keep investigating)

Update: ignoring sqlmodel.sql._expression_select_gen.py from the mypy checks avoids the minute-long run.

@github-actions

This comment was marked as outdated.

@github-actions

This comment was marked as outdated.

@svlandegsvlandeg changed the title ⬆ Bump mypy from 1.4.1 to 1.14.1⬆ Bump mypy from 1.4.1 to 1.18.2Sep 29, 2025
@github-actions

This comment was marked as outdated.

@github-actions

Copy link
Copy Markdown
Contributor

📝 Docs preview for commit f30beb2 at: https://d085961e.sqlmodel.pages.dev

@svlandeg
svlandeg marked this pull request as ready for review September 29, 2025 15:00
@svlandegsvlandeg removed their assignment Sep 29, 2025
@svlandeg
svlandeg marked this pull request as draft October 7, 2025 08:06
@github-actions

Copy link
Copy Markdown
Contributor

📝 Docs preview

Last commit d787c3f at: https://76cacab2.sqlmodel.pages.dev

@svlandeg
svlandeg marked this pull request as ready for review October 8, 2025 11:09

@tiangolotiangolo left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks good to me, feel free to merge when ready @svlandeg 🚀

@svlandeg

Copy link
Copy Markdown
Member

🎉

@svlandeg
svlandeg merged commit f751e1c into mainOct 8, 2025
28 checks passed
@svlandeg
svlandeg deleted the dependabot/pip/mypy-1.18.1 branch October 8, 2025 11:10
@YuriiMotov

Copy link
Copy Markdown
Member

from __future__ import annotations added by this PR causes Pyright in strict mode to show Type of "Field" is partially unknown error: #1598

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependenciesPull requests that update a dependency fileinternalInternal changespythonPull requests that update Python code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@svlandeg@YuriiMotov@tiangolo
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

⬆ Bump mypy from 1.4.1 to 1.18.2 - #1560

Merged
svlandeg merged 21 commits into
mainfrom
dependabot/pip/mypy-1.18.1
Oct 8, 2025
Merged

⬆ Bump mypy from 1.4.1 to 1.18.2#1560
svlandeg merged 21 commits into
mainfrom
dependabot/pip/mypy-1.18.1

Conversation

@dependabot

@dependabotdependabotBot commented on behalf of githubSep 12, 2025

Copy link
Copy Markdown
Contributor

Bumps mypy from 1.4.1 to 1.18.1.

Changelog

Sourced from mypy's changelog.

Mypy Release Notes

Next Release

Mypy 1.18

We’ve just uploaded mypy 1.18 to the Python Package Index (PyPI). Mypy is a static type checker for Python. This release includes new features, performance improvements and bug fixes. You can install it as follows:

python3 -m pip install -U mypy

You can read the full documentation for this release on Read the Docs.

Mypy Performance Improvements

Mypy 1.18 includes numerous performance improvements, resulting in about 40% speedup compared to 1.17 when type checking mypy itself. In extreme cases, the improvement can be 10x or higher. The list below is an overview of the various mypy optimizations. Many mypyc improvements (discussed in a separate section below) also improve performance.

Type caching optimizations have a small risk of causing regressions. When reporting issues with unexpected inferred types, please also check if --disable-expression-cache will work around the issue, as it turns off some of these optimizations.

  • Improve self check performance by 1.8% (Jukka Lehtosalo, PR 19768, 19769, 19770)
  • Optimize fixed-format deserialization (Ivan Levkivskyi, PR 19765)
  • Use macros to optimize fixed-format deserialization (Ivan Levkivskyi, PR 19757)
  • Two additional micro‑optimizations (Ivan Levkivskyi, PR 19627)
  • Another set of micro‑optimizations (Ivan Levkivskyi, PR 19633)
  • Cache common types (Ivan Levkivskyi, PR 19621)
  • Skip more method bodies in third‑party libraries for speed (Ivan Levkivskyi, PR 19586)
  • Simplify the representation of callable types (Ivan Levkivskyi, PR 19580)
  • Add cache for types of some expressions (Ivan Levkivskyi, PR 19505)
  • Use cache for dictionary expressions (Ivan Levkivskyi, PR 19536)
  • Use cache for binary operations (Ivan Levkivskyi, PR 19523)
  • Cache types of type objects (Ivan Levkivskyi, PR 19514)
  • Avoid duplicate work when checking boolean operations (Ivan Levkivskyi, PR 19515)
  • Optimize generic inference passes (Ivan Levkivskyi, PR 19501)
  • Speed up the default plugin (Jukka Lehtosalo, PRs 19385 and 19462)
  • Remove nested imports from the default plugin (Ivan Levkivskyi, PR 19388)
  • Micro‑optimize type expansion (Jukka Lehtosalo, PR 19461)
  • Micro‑optimize type indirection (Jukka Lehtosalo, PR 19460)
  • Micro‑optimize the plugin framework (Jukka Lehtosalo, PR 19464)
  • Avoid temporary set creation in subtype checking (Jukka Lehtosalo, PR 19463)
  • Subtype checking micro‑optimization (Jukka Lehtosalo, PR 19384)
  • Return early where possible in subtype check (Stanislav Terliakov, PR 19400)
  • Deduplicate some types before joining (Stanislav Terliakov, PR 19409)
  • Speed up type checking by caching argument inference context (Jukka Lehtosalo, PR 19323)

... (truncated)

Commits

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot merge will merge this PR after your CI passes on it
  • @dependabot squash and merge will squash and merge this PR after your CI passes on it
  • @dependabot cancel merge will cancel a previously requested merge and block automerging
  • @dependabot reopen will reopen this PR if it is closed
  • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

@dependabotdependabotBot added dependencies Pull requests that update a dependency file python Pull requests that update Python code labels Sep 12, 2025
@github-actionsgithub-actionsBot added the internal Internal changes label Sep 12, 2025
Bumps [mypy](https://github.com/python/mypy) from 1.4.1 to 1.18.1.
- [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md)
- [Commits](python/mypy@v1.4.1...v1.18.1)
---
updated-dependencies:
- dependency-name: mypy
dependency-version: 1.18.1
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot] <support@github.com>
@dependabot
dependabotBotforce-pushed the dependabot/pip/mypy-1.18.1 branch from f54feaf to 744954bCompareSeptember 16, 2025 08:57
@svlandegsvlandeg self-assigned this Sep 16, 2025
Comment threadrequirements-tests.txt Outdated
@svlandegsvlandeg changed the title ⬆ Bump mypy from 1.4.1 to 1.18.1⬆ Bump mypy from 1.4.1 to 1.14.1Sep 16, 2025
Comment threadsqlmodel/_compat.py

def get_annotations(class_dict: Dict[str, Any]) -> Dict[str, Any]:
return class_dict.get("__annotations__", {})
return class_dict.get("__annotations__", {}) # type: ignore[no-any-return]

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As on L425, where we're already ignoring it, the error is

Returning Any from function declared to return "dict[str, Any]" [no-any-return]

@svlandeg

Copy link
Copy Markdown
Member

Huh. On Python 3.9 the CI is failing with

sqlmodel/main.py:39: error: X | Y syntax for unions requires Python 3.10 [syntax]

But I don't see a single X | Y in main.py 🤔

@svlandeg

Copy link
Copy Markdown
Member

The mypy check also takes super long, both on CI as locally. Weird - I keep investigating.

@svlandeg
svlandeg marked this pull request as draft September 16, 2025 18:51
svlandeg
svlandeg previously requested changes Sep 16, 2025

@svlandegsvlandeg left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The false positive notifications of the X | Y syntax go away when specifying from __future__ import annotations at the top of the file, as suggested here.

But even if this PR goes green, we shouldn't merge it. The mypy runs are still taking a ridiculous amount of time, something like 12-13 minutes. Each full CI run usually takes less than 1 minute when looking at current open PRs.

@dependabot@github

This comment was marked as outdated.

@github-actionsgithub-actionsBot added the conflicts Automatically generated when a PR has a merge conflict label Sep 26, 2025
@github-actions

This comment was marked as resolved.

@github-actionsgithub-actionsBot removed the conflicts Automatically generated when a PR has a merge conflict label Sep 26, 2025
@svlandeg

svlandeg commented Sep 29, 2025

Copy link
Copy Markdown
Member

With mypy 1.10.0 the execution time is still reasonable (but it's still a pretty old version of mypy - I'll keep investigating)

Update: ignoring sqlmodel.sql._expression_select_gen.py from the mypy checks avoids the minute-long run.

@github-actions

This comment was marked as outdated.

@github-actions

This comment was marked as outdated.

@svlandegsvlandeg changed the title ⬆ Bump mypy from 1.4.1 to 1.14.1⬆ Bump mypy from 1.4.1 to 1.18.2Sep 29, 2025
@github-actions

This comment was marked as outdated.

@github-actions

Copy link
Copy Markdown
Contributor

📝 Docs preview for commit f30beb2 at: https://d085961e.sqlmodel.pages.dev

@svlandeg
svlandeg marked this pull request as ready for review September 29, 2025 15:00
@svlandegsvlandeg removed their assignment Sep 29, 2025
@svlandeg
svlandeg marked this pull request as draft October 7, 2025 08:06
@github-actions

Copy link
Copy Markdown
Contributor

📝 Docs preview

Last commit d787c3f at: https://76cacab2.sqlmodel.pages.dev

@svlandeg
svlandeg marked this pull request as ready for review October 8, 2025 11:09

@tiangolotiangolo left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks good to me, feel free to merge when ready @svlandeg 🚀

@svlandeg

Copy link
Copy Markdown
Member

🎉

@svlandeg
svlandeg merged commit f751e1c into mainOct 8, 2025
28 checks passed
@svlandeg
svlandeg deleted the dependabot/pip/mypy-1.18.1 branch October 8, 2025 11:10
@YuriiMotov

Copy link
Copy Markdown
Member

from __future__ import annotations added by this PR causes Pyright in strict mode to show Type of "Field" is partially unknown error: #1598

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependenciesPull requests that update a dependency fileinternalInternal changespythonPull requests that update Python code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@svlandeg@YuriiMotov@tiangolo
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

⬆ Bump mypy from 1.4.1 to 1.18.2 - #1560

Merged
svlandeg merged 21 commits into
mainfrom
dependabot/pip/mypy-1.18.1
Oct 8, 2025
Merged

⬆ Bump mypy from 1.4.1 to 1.18.2#1560
svlandeg merged 21 commits into
mainfrom
dependabot/pip/mypy-1.18.1

Conversation

@dependabot

@dependabotdependabotBot commented on behalf of githubSep 12, 2025

Copy link
Copy Markdown
Contributor

Bumps mypy from 1.4.1 to 1.18.1.

Changelog

Sourced from mypy's changelog.

Mypy Release Notes

Next Release

Mypy 1.18

We’ve just uploaded mypy 1.18 to the Python Package Index (PyPI). Mypy is a static type checker for Python. This release includes new features, performance improvements and bug fixes. You can install it as follows:

python3 -m pip install -U mypy

You can read the full documentation for this release on Read the Docs.

Mypy Performance Improvements

Mypy 1.18 includes numerous performance improvements, resulting in about 40% speedup compared to 1.17 when type checking mypy itself. In extreme cases, the improvement can be 10x or higher. The list below is an overview of the various mypy optimizations. Many mypyc improvements (discussed in a separate section below) also improve performance.

Type caching optimizations have a small risk of causing regressions. When reporting issues with unexpected inferred types, please also check if --disable-expression-cache will work around the issue, as it turns off some of these optimizations.

  • Improve self check performance by 1.8% (Jukka Lehtosalo, PR 19768, 19769, 19770)
  • Optimize fixed-format deserialization (Ivan Levkivskyi, PR 19765)
  • Use macros to optimize fixed-format deserialization (Ivan Levkivskyi, PR 19757)
  • Two additional micro‑optimizations (Ivan Levkivskyi, PR 19627)
  • Another set of micro‑optimizations (Ivan Levkivskyi, PR 19633)
  • Cache common types (Ivan Levkivskyi, PR 19621)
  • Skip more method bodies in third‑party libraries for speed (Ivan Levkivskyi, PR 19586)
  • Simplify the representation of callable types (Ivan Levkivskyi, PR 19580)
  • Add cache for types of some expressions (Ivan Levkivskyi, PR 19505)
  • Use cache for dictionary expressions (Ivan Levkivskyi, PR 19536)
  • Use cache for binary operations (Ivan Levkivskyi, PR 19523)
  • Cache types of type objects (Ivan Levkivskyi, PR 19514)
  • Avoid duplicate work when checking boolean operations (Ivan Levkivskyi, PR 19515)
  • Optimize generic inference passes (Ivan Levkivskyi, PR 19501)
  • Speed up the default plugin (Jukka Lehtosalo, PRs 19385 and 19462)
  • Remove nested imports from the default plugin (Ivan Levkivskyi, PR 19388)
  • Micro‑optimize type expansion (Jukka Lehtosalo, PR 19461)
  • Micro‑optimize type indirection (Jukka Lehtosalo, PR 19460)
  • Micro‑optimize the plugin framework (Jukka Lehtosalo, PR 19464)
  • Avoid temporary set creation in subtype checking (Jukka Lehtosalo, PR 19463)
  • Subtype checking micro‑optimization (Jukka Lehtosalo, PR 19384)
  • Return early where possible in subtype check (Stanislav Terliakov, PR 19400)
  • Deduplicate some types before joining (Stanislav Terliakov, PR 19409)
  • Speed up type checking by caching argument inference context (Jukka Lehtosalo, PR 19323)

... (truncated)

Commits

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot merge will merge this PR after your CI passes on it
  • @dependabot squash and merge will squash and merge this PR after your CI passes on it
  • @dependabot cancel merge will cancel a previously requested merge and block automerging
  • @dependabot reopen will reopen this PR if it is closed
  • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

@dependabotdependabotBot added dependencies Pull requests that update a dependency file python Pull requests that update Python code labels Sep 12, 2025
@github-actionsgithub-actionsBot added the internal Internal changes label Sep 12, 2025
Bumps [mypy](https://github.com/python/mypy) from 1.4.1 to 1.18.1.
- [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md)
- [Commits](python/mypy@v1.4.1...v1.18.1)
---
updated-dependencies:
- dependency-name: mypy
dependency-version: 1.18.1
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot] <support@github.com>
@dependabot
dependabotBotforce-pushed the dependabot/pip/mypy-1.18.1 branch from f54feaf to 744954bCompareSeptember 16, 2025 08:57
@svlandegsvlandeg self-assigned this Sep 16, 2025
Comment threadrequirements-tests.txt Outdated
@svlandegsvlandeg changed the title ⬆ Bump mypy from 1.4.1 to 1.18.1⬆ Bump mypy from 1.4.1 to 1.14.1Sep 16, 2025
Comment threadsqlmodel/_compat.py

def get_annotations(class_dict: Dict[str, Any]) -> Dict[str, Any]:
return class_dict.get("__annotations__", {})
return class_dict.get("__annotations__", {}) # type: ignore[no-any-return]

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As on L425, where we're already ignoring it, the error is

Returning Any from function declared to return "dict[str, Any]" [no-any-return]

@svlandeg

Copy link
Copy Markdown
Member

Huh. On Python 3.9 the CI is failing with

sqlmodel/main.py:39: error: X | Y syntax for unions requires Python 3.10 [syntax]

But I don't see a single X | Y in main.py 🤔

@svlandeg

Copy link
Copy Markdown
Member

The mypy check also takes super long, both on CI as locally. Weird - I keep investigating.

@svlandeg
svlandeg marked this pull request as draft September 16, 2025 18:51
svlandeg
svlandeg previously requested changes Sep 16, 2025

@svlandegsvlandeg left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The false positive notifications of the X | Y syntax go away when specifying from __future__ import annotations at the top of the file, as suggested here.

But even if this PR goes green, we shouldn't merge it. The mypy runs are still taking a ridiculous amount of time, something like 12-13 minutes. Each full CI run usually takes less than 1 minute when looking at current open PRs.

@dependabot@github

This comment was marked as outdated.

@github-actionsgithub-actionsBot added the conflicts Automatically generated when a PR has a merge conflict label Sep 26, 2025
@github-actions

This comment was marked as resolved.

@github-actionsgithub-actionsBot removed the conflicts Automatically generated when a PR has a merge conflict label Sep 26, 2025
@svlandeg

svlandeg commented Sep 29, 2025

Copy link
Copy Markdown
Member

With mypy 1.10.0 the execution time is still reasonable (but it's still a pretty old version of mypy - I'll keep investigating)

Update: ignoring sqlmodel.sql._expression_select_gen.py from the mypy checks avoids the minute-long run.

@github-actions

This comment was marked as outdated.

@github-actions

This comment was marked as outdated.

@svlandegsvlandeg changed the title ⬆ Bump mypy from 1.4.1 to 1.14.1⬆ Bump mypy from 1.4.1 to 1.18.2Sep 29, 2025
@github-actions

This comment was marked as outdated.

@github-actions

Copy link
Copy Markdown
Contributor

📝 Docs preview for commit f30beb2 at: https://d085961e.sqlmodel.pages.dev

@svlandeg
svlandeg marked this pull request as ready for review September 29, 2025 15:00
@svlandegsvlandeg removed their assignment Sep 29, 2025
@svlandeg
svlandeg marked this pull request as draft October 7, 2025 08:06
@github-actions

Copy link
Copy Markdown
Contributor

📝 Docs preview

Last commit d787c3f at: https://76cacab2.sqlmodel.pages.dev

@svlandeg
svlandeg marked this pull request as ready for review October 8, 2025 11:09

@tiangolotiangolo left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks good to me, feel free to merge when ready @svlandeg 🚀

@svlandeg

Copy link
Copy Markdown
Member

🎉

@svlandeg
svlandeg merged commit f751e1c into mainOct 8, 2025
28 checks passed
@svlandeg
svlandeg deleted the dependabot/pip/mypy-1.18.1 branch October 8, 2025 11:10
@YuriiMotov

Copy link
Copy Markdown
Member

from __future__ import annotations added by this PR causes Pyright in strict mode to show Type of "Field" is partially unknown error: #1598

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependenciesPull requests that update a dependency fileinternalInternal changespythonPull requests that update Python code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@svlandeg@YuriiMotov@tiangolo
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

⬆ Bump mypy from 1.4.1 to 1.18.2 - #1560

Merged
svlandeg merged 21 commits into
mainfrom
dependabot/pip/mypy-1.18.1
Oct 8, 2025
Merged

⬆ Bump mypy from 1.4.1 to 1.18.2#1560
svlandeg merged 21 commits into
mainfrom
dependabot/pip/mypy-1.18.1

Conversation

@dependabot

@dependabotdependabotBot commented on behalf of githubSep 12, 2025

Copy link
Copy Markdown
Contributor

Bumps mypy from 1.4.1 to 1.18.1.

Changelog

Sourced from mypy's changelog.

Mypy Release Notes

Next Release

Mypy 1.18

We’ve just uploaded mypy 1.18 to the Python Package Index (PyPI). Mypy is a static type checker for Python. This release includes new features, performance improvements and bug fixes. You can install it as follows:

python3 -m pip install -U mypy

You can read the full documentation for this release on Read the Docs.

Mypy Performance Improvements

Mypy 1.18 includes numerous performance improvements, resulting in about 40% speedup compared to 1.17 when type checking mypy itself. In extreme cases, the improvement can be 10x or higher. The list below is an overview of the various mypy optimizations. Many mypyc improvements (discussed in a separate section below) also improve performance.

Type caching optimizations have a small risk of causing regressions. When reporting issues with unexpected inferred types, please also check if --disable-expression-cache will work around the issue, as it turns off some of these optimizations.

  • Improve self check performance by 1.8% (Jukka Lehtosalo, PR 19768, 19769, 19770)
  • Optimize fixed-format deserialization (Ivan Levkivskyi, PR 19765)
  • Use macros to optimize fixed-format deserialization (Ivan Levkivskyi, PR 19757)
  • Two additional micro‑optimizations (Ivan Levkivskyi, PR 19627)
  • Another set of micro‑optimizations (Ivan Levkivskyi, PR 19633)
  • Cache common types (Ivan Levkivskyi, PR 19621)
  • Skip more method bodies in third‑party libraries for speed (Ivan Levkivskyi, PR 19586)
  • Simplify the representation of callable types (Ivan Levkivskyi, PR 19580)
  • Add cache for types of some expressions (Ivan Levkivskyi, PR 19505)
  • Use cache for dictionary expressions (Ivan Levkivskyi, PR 19536)
  • Use cache for binary operations (Ivan Levkivskyi, PR 19523)
  • Cache types of type objects (Ivan Levkivskyi, PR 19514)
  • Avoid duplicate work when checking boolean operations (Ivan Levkivskyi, PR 19515)
  • Optimize generic inference passes (Ivan Levkivskyi, PR 19501)
  • Speed up the default plugin (Jukka Lehtosalo, PRs 19385 and 19462)
  • Remove nested imports from the default plugin (Ivan Levkivskyi, PR 19388)
  • Micro‑optimize type expansion (Jukka Lehtosalo, PR 19461)
  • Micro‑optimize type indirection (Jukka Lehtosalo, PR 19460)
  • Micro‑optimize the plugin framework (Jukka Lehtosalo, PR 19464)
  • Avoid temporary set creation in subtype checking (Jukka Lehtosalo, PR 19463)
  • Subtype checking micro‑optimization (Jukka Lehtosalo, PR 19384)
  • Return early where possible in subtype check (Stanislav Terliakov, PR 19400)
  • Deduplicate some types before joining (Stanislav Terliakov, PR 19409)
  • Speed up type checking by caching argument inference context (Jukka Lehtosalo, PR 19323)

... (truncated)

Commits

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot merge will merge this PR after your CI passes on it
  • @dependabot squash and merge will squash and merge this PR after your CI passes on it
  • @dependabot cancel merge will cancel a previously requested merge and block automerging
  • @dependabot reopen will reopen this PR if it is closed
  • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

@dependabotdependabotBot added dependencies Pull requests that update a dependency file python Pull requests that update Python code labels Sep 12, 2025
@github-actionsgithub-actionsBot added the internal Internal changes label Sep 12, 2025
Bumps [mypy](https://github.com/python/mypy) from 1.4.1 to 1.18.1.
- [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md)
- [Commits](python/mypy@v1.4.1...v1.18.1)
---
updated-dependencies:
- dependency-name: mypy
dependency-version: 1.18.1
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot] <support@github.com>
@dependabot
dependabotBotforce-pushed the dependabot/pip/mypy-1.18.1 branch from f54feaf to 744954bCompareSeptember 16, 2025 08:57
@svlandegsvlandeg self-assigned this Sep 16, 2025
Comment threadrequirements-tests.txt Outdated
@svlandegsvlandeg changed the title ⬆ Bump mypy from 1.4.1 to 1.18.1⬆ Bump mypy from 1.4.1 to 1.14.1Sep 16, 2025
Comment threadsqlmodel/_compat.py

def get_annotations(class_dict: Dict[str, Any]) -> Dict[str, Any]:
return class_dict.get("__annotations__", {})
return class_dict.get("__annotations__", {}) # type: ignore[no-any-return]

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As on L425, where we're already ignoring it, the error is

Returning Any from function declared to return "dict[str, Any]" [no-any-return]

@svlandeg

Copy link
Copy Markdown
Member

Huh. On Python 3.9 the CI is failing with

sqlmodel/main.py:39: error: X | Y syntax for unions requires Python 3.10 [syntax]

But I don't see a single X | Y in main.py 🤔

@svlandeg

Copy link
Copy Markdown
Member

The mypy check also takes super long, both on CI as locally. Weird - I keep investigating.

@svlandeg
svlandeg marked this pull request as draft September 16, 2025 18:51
svlandeg
svlandeg previously requested changes Sep 16, 2025

@svlandegsvlandeg left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The false positive notifications of the X | Y syntax go away when specifying from __future__ import annotations at the top of the file, as suggested here.

But even if this PR goes green, we shouldn't merge it. The mypy runs are still taking a ridiculous amount of time, something like 12-13 minutes. Each full CI run usually takes less than 1 minute when looking at current open PRs.

@dependabot@github

This comment was marked as outdated.

@github-actionsgithub-actionsBot added the conflicts Automatically generated when a PR has a merge conflict label Sep 26, 2025
@github-actions

This comment was marked as resolved.

@github-actionsgithub-actionsBot removed the conflicts Automatically generated when a PR has a merge conflict label Sep 26, 2025
@svlandeg

svlandeg commented Sep 29, 2025

Copy link
Copy Markdown
Member

With mypy 1.10.0 the execution time is still reasonable (but it's still a pretty old version of mypy - I'll keep investigating)

Update: ignoring sqlmodel.sql._expression_select_gen.py from the mypy checks avoids the minute-long run.

@github-actions

This comment was marked as outdated.

@github-actions

This comment was marked as outdated.

@svlandegsvlandeg changed the title ⬆ Bump mypy from 1.4.1 to 1.14.1⬆ Bump mypy from 1.4.1 to 1.18.2Sep 29, 2025
@github-actions

This comment was marked as outdated.

@github-actions

Copy link
Copy Markdown
Contributor

📝 Docs preview for commit f30beb2 at: https://d085961e.sqlmodel.pages.dev

@svlandeg
svlandeg marked this pull request as ready for review September 29, 2025 15:00
@svlandegsvlandeg removed their assignment Sep 29, 2025
@svlandeg
svlandeg marked this pull request as draft October 7, 2025 08:06
@github-actions

Copy link
Copy Markdown
Contributor

📝 Docs preview

Last commit d787c3f at: https://76cacab2.sqlmodel.pages.dev

@svlandeg
svlandeg marked this pull request as ready for review October 8, 2025 11:09

@tiangolotiangolo left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks good to me, feel free to merge when ready @svlandeg 🚀

@svlandeg

Copy link
Copy Markdown
Member

🎉

@svlandeg
svlandeg merged commit f751e1c into mainOct 8, 2025
28 checks passed
@svlandeg
svlandeg deleted the dependabot/pip/mypy-1.18.1 branch October 8, 2025 11:10
@YuriiMotov

Copy link
Copy Markdown
Member

from __future__ import annotations added by this PR causes Pyright in strict mode to show Type of "Field" is partially unknown error: #1598

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependenciesPull requests that update a dependency fileinternalInternal changespythonPull requests that update Python code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@svlandeg@YuriiMotov@tiangolo
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

⬆ Bump mypy from 1.4.1 to 1.18.2 - #1560

Merged
svlandeg merged 21 commits into
mainfrom
dependabot/pip/mypy-1.18.1
Oct 8, 2025
Merged

⬆ Bump mypy from 1.4.1 to 1.18.2#1560
svlandeg merged 21 commits into
mainfrom
dependabot/pip/mypy-1.18.1

Conversation

@dependabot

@dependabotdependabotBot commented on behalf of githubSep 12, 2025

Copy link
Copy Markdown
Contributor

Bumps mypy from 1.4.1 to 1.18.1.

Changelog

Sourced from mypy's changelog.

Mypy Release Notes

Next Release

Mypy 1.18

We’ve just uploaded mypy 1.18 to the Python Package Index (PyPI). Mypy is a static type checker for Python. This release includes new features, performance improvements and bug fixes. You can install it as follows:

python3 -m pip install -U mypy

You can read the full documentation for this release on Read the Docs.

Mypy Performance Improvements

Mypy 1.18 includes numerous performance improvements, resulting in about 40% speedup compared to 1.17 when type checking mypy itself. In extreme cases, the improvement can be 10x or higher. The list below is an overview of the various mypy optimizations. Many mypyc improvements (discussed in a separate section below) also improve performance.

Type caching optimizations have a small risk of causing regressions. When reporting issues with unexpected inferred types, please also check if --disable-expression-cache will work around the issue, as it turns off some of these optimizations.

  • Improve self check performance by 1.8% (Jukka Lehtosalo, PR 19768, 19769, 19770)
  • Optimize fixed-format deserialization (Ivan Levkivskyi, PR 19765)
  • Use macros to optimize fixed-format deserialization (Ivan Levkivskyi, PR 19757)
  • Two additional micro‑optimizations (Ivan Levkivskyi, PR 19627)
  • Another set of micro‑optimizations (Ivan Levkivskyi, PR 19633)
  • Cache common types (Ivan Levkivskyi, PR 19621)
  • Skip more method bodies in third‑party libraries for speed (Ivan Levkivskyi, PR 19586)
  • Simplify the representation of callable types (Ivan Levkivskyi, PR 19580)
  • Add cache for types of some expressions (Ivan Levkivskyi, PR 19505)
  • Use cache for dictionary expressions (Ivan Levkivskyi, PR 19536)
  • Use cache for binary operations (Ivan Levkivskyi, PR 19523)
  • Cache types of type objects (Ivan Levkivskyi, PR 19514)
  • Avoid duplicate work when checking boolean operations (Ivan Levkivskyi, PR 19515)
  • Optimize generic inference passes (Ivan Levkivskyi, PR 19501)
  • Speed up the default plugin (Jukka Lehtosalo, PRs 19385 and 19462)
  • Remove nested imports from the default plugin (Ivan Levkivskyi, PR 19388)
  • Micro‑optimize type expansion (Jukka Lehtosalo, PR 19461)
  • Micro‑optimize type indirection (Jukka Lehtosalo, PR 19460)
  • Micro‑optimize the plugin framework (Jukka Lehtosalo, PR 19464)
  • Avoid temporary set creation in subtype checking (Jukka Lehtosalo, PR 19463)
  • Subtype checking micro‑optimization (Jukka Lehtosalo, PR 19384)
  • Return early where possible in subtype check (Stanislav Terliakov, PR 19400)
  • Deduplicate some types before joining (Stanislav Terliakov, PR 19409)
  • Speed up type checking by caching argument inference context (Jukka Lehtosalo, PR 19323)

... (truncated)

Commits

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot merge will merge this PR after your CI passes on it
  • @dependabot squash and merge will squash and merge this PR after your CI passes on it
  • @dependabot cancel merge will cancel a previously requested merge and block automerging
  • @dependabot reopen will reopen this PR if it is closed
  • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

@dependabotdependabotBot added dependencies Pull requests that update a dependency file python Pull requests that update Python code labels Sep 12, 2025
@github-actionsgithub-actionsBot added the internal Internal changes label Sep 12, 2025
Bumps [mypy](https://github.com/python/mypy) from 1.4.1 to 1.18.1.
- [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md)
- [Commits](python/mypy@v1.4.1...v1.18.1)
---
updated-dependencies:
- dependency-name: mypy
dependency-version: 1.18.1
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot] <support@github.com>
@dependabot
dependabotBotforce-pushed the dependabot/pip/mypy-1.18.1 branch from f54feaf to 744954bCompareSeptember 16, 2025 08:57
@svlandegsvlandeg self-assigned this Sep 16, 2025
Comment threadrequirements-tests.txt Outdated
@svlandegsvlandeg changed the title ⬆ Bump mypy from 1.4.1 to 1.18.1⬆ Bump mypy from 1.4.1 to 1.14.1Sep 16, 2025
Comment threadsqlmodel/_compat.py

def get_annotations(class_dict: Dict[str, Any]) -> Dict[str, Any]:
return class_dict.get("__annotations__", {})
return class_dict.get("__annotations__", {}) # type: ignore[no-any-return]

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As on L425, where we're already ignoring it, the error is

Returning Any from function declared to return "dict[str, Any]" [no-any-return]

@svlandeg

Copy link
Copy Markdown
Member

Huh. On Python 3.9 the CI is failing with

sqlmodel/main.py:39: error: X | Y syntax for unions requires Python 3.10 [syntax]

But I don't see a single X | Y in main.py 🤔

@svlandeg

Copy link
Copy Markdown
Member

The mypy check also takes super long, both on CI as locally. Weird - I keep investigating.

@svlandeg
svlandeg marked this pull request as draft September 16, 2025 18:51
svlandeg
svlandeg previously requested changes Sep 16, 2025

@svlandegsvlandeg left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The false positive notifications of the X | Y syntax go away when specifying from __future__ import annotations at the top of the file, as suggested here.

But even if this PR goes green, we shouldn't merge it. The mypy runs are still taking a ridiculous amount of time, something like 12-13 minutes. Each full CI run usually takes less than 1 minute when looking at current open PRs.

@dependabot@github

This comment was marked as outdated.

@github-actionsgithub-actionsBot added the conflicts Automatically generated when a PR has a merge conflict label Sep 26, 2025
@github-actions

This comment was marked as resolved.

@github-actionsgithub-actionsBot removed the conflicts Automatically generated when a PR has a merge conflict label Sep 26, 2025
@svlandeg

svlandeg commented Sep 29, 2025

Copy link
Copy Markdown
Member

With mypy 1.10.0 the execution time is still reasonable (but it's still a pretty old version of mypy - I'll keep investigating)

Update: ignoring sqlmodel.sql._expression_select_gen.py from the mypy checks avoids the minute-long run.

@github-actions

This comment was marked as outdated.

@github-actions

This comment was marked as outdated.

@svlandegsvlandeg changed the title ⬆ Bump mypy from 1.4.1 to 1.14.1⬆ Bump mypy from 1.4.1 to 1.18.2Sep 29, 2025
@github-actions

This comment was marked as outdated.

@github-actions

Copy link
Copy Markdown
Contributor

📝 Docs preview for commit f30beb2 at: https://d085961e.sqlmodel.pages.dev

@svlandeg
svlandeg marked this pull request as ready for review September 29, 2025 15:00
@svlandegsvlandeg removed their assignment Sep 29, 2025
@svlandeg
svlandeg marked this pull request as draft October 7, 2025 08:06
@github-actions

Copy link
Copy Markdown
Contributor

📝 Docs preview

Last commit d787c3f at: https://76cacab2.sqlmodel.pages.dev

@svlandeg
svlandeg marked this pull request as ready for review October 8, 2025 11:09

@tiangolotiangolo left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks good to me, feel free to merge when ready @svlandeg 🚀

@svlandeg

Copy link
Copy Markdown
Member

🎉

@svlandeg
svlandeg merged commit f751e1c into mainOct 8, 2025
28 checks passed
@svlandeg
svlandeg deleted the dependabot/pip/mypy-1.18.1 branch October 8, 2025 11:10
@YuriiMotov

Copy link
Copy Markdown
Member

from __future__ import annotations added by this PR causes Pyright in strict mode to show Type of "Field" is partially unknown error: #1598

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependenciesPull requests that update a dependency fileinternalInternal changespythonPull requests that update Python code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@svlandeg@YuriiMotov@tiangolo