Skip to content

fix Usage of a variable should initialise it #828#2680

Open
asukaminato0721 wants to merge 1 commit intofacebook:mainfrom
asukaminato0721:828
Open

fix Usage of a variable should initialise it #828#2680
asukaminato0721 wants to merge 1 commit intofacebook:mainfrom
asukaminato0721:828

Conversation

@asukaminato0721
Copy link
Contributor

Summary

Fixes #828

runtime name reads now update the current flow only when the name was Conditionally or DeferredCheck initialized. That means a successful read suppresses the duplicate follow-on "may be uninitialized" error on the surviving path, without changing definitely-uninitialized cases like exception-target cleanup.

Test Plan

a test

runtime name reads now update the current flow only when the name was
Conditionally or DeferredCheck initialized. That means a
  successful read suppresses the duplicate follow-on "may be
uninitialized" error on the surviving path, without changing
definitely-uninitialized cases like exception-target cleanup.
@meta-cla meta-cla bot added the cla signed label Mar 5, 2026
@asukaminato0721 asukaminato0721 marked this pull request as ready for review March 6, 2026 00:13
Copilot AI review requested due to automatic review settings March 6, 2026 00:13
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Adjusts flow-based uninitialized-variable diagnostics so that after a successful runtime read of a maybe-initialized name, subsequent reads in the same surviving flow don’t emit duplicate “may be uninitialized” errors (fixes #828).

Changes:

  • Update BindingsBuilder::lookup_name to mark names as initialized in the current flow after a read when initialization was previously conditional or deferred-check.
  • Add a regression test ensuring only the first read of a maybe-uninitialized local produces an error.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.

File Description
pyrefly/lib/binding/bindings.rs Updates name lookup/read behavior to “initialize on successful read” for conditional/deferred cases.
pyrefly/lib/test/scope.rs Adds a regression testcase covering suppression of duplicate follow-on uninitialized warnings.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

You can also share your feedback on Copilot code review. Take the survey.

Comment on lines +1174 to 1182
if may_prove_initialized
&& matches!(
initialized,
InitializedInFlow::Conditionally | InitializedInFlow::DeferredCheck(_)
)
{
self.scopes
.define_in_current_flow(name, idx, FlowStyle::Other);
}
Copy link

Copilot AI Mar 6, 2026

Choose a reason for hiding this comment

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

In NameReadInfo::Anywhere, initialized is only ever set to InitializedInFlow::Yes or InitializedInFlow::No by Scopes::look_up_name_for_read (see pyrefly/lib/binding/scope.rs:2549-2563). This makes the new matches!(initialized, InitializedInFlow::Conditionally | InitializedInFlow::DeferredCheck(_)) check in the Anywhere arm unreachable/dead code; consider removing it (and the associated define_in_current_flow call) or adjusting the lookup to actually propagate conditional/deferred initialization for Anywhere reads if that was the intent.

Suggested change
if may_prove_initialized
&& matches!(
initialized,
InitializedInFlow::Conditionally | InitializedInFlow::DeferredCheck(_)
)
{
self.scopes
.define_in_current_flow(name, idx, FlowStyle::Other);
}

Copilot uses AI. Check for mistakes.
@github-actions
Copy link

github-actions bot commented Mar 6, 2026

Diff from mypy_primer, showing the effect of this PR on open source code:

kornia (https://github.com/kornia/kornia)
- ERROR kornia/augmentation/container/augment.py:349:31-43: `invalid_data` may be uninitialized [unbound-name]
- ERROR kornia/augmentation/container/augment.py:483:31-43: `invalid_data` may be uninitialized [unbound-name]
- ERROR kornia/augmentation/container/augment.py:532:80-93: `original_keys` may be uninitialized [unbound-name]
- ERROR kornia/augmentation/container/augment.py:536:76-89: `original_keys` may be uninitialized [unbound-name]
- ERROR kornia/feature/disk/disk.py:120:45-46: `h` may be uninitialized [unbound-name]
- ERROR kornia/feature/disk/disk.py:120:49-50: `w` may be uninitialized [unbound-name]
- ERROR kornia/feature/lightglue.py:705:20-24: `ind1` may be uninitialized [unbound-name]
- ERROR kornia/feature/lightglue.py:705:54-58: `ind0` may be uninitialized [unbound-name]
- ERROR kornia/feature/lightglue.py:708:26-30: `ind0` may be uninitialized [unbound-name]
- ERROR kornia/feature/lightglue.py:709:26-30: `ind1` may be uninitialized [unbound-name]
- ERROR kornia/feature/loftr/utils/coarse_matching.py:182:45-56: `conf_matrix` may be uninitialized [unbound-name]
- ERROR kornia/feature/mkd.py:252:64-71: `coeffs_` may be uninitialized [unbound-name]
- ERROR kornia/feature/mkd.py:255:31-38: `params_` may be uninitialized [unbound-name]
- ERROR kornia/models/rt_detr/model.py:208:27-35: `backbone` may be uninitialized [unbound-name]
- ERROR kornia/models/rt_detr/model.py:213:30-45: `neck_hidden_dim` may be uninitialized [unbound-name]
- ERROR kornia/models/vit_mobile.py:303:34-42: `channels` may be uninitialized [unbound-name]
- ERROR kornia/models/vit_mobile.py:303:47-55: `channels` may be uninitialized [unbound-name]
- ERROR kornia/models/vit_mobile.py:304:34-42: `channels` may be uninitialized [unbound-name]
- ERROR kornia/models/vit_mobile.py:304:47-55: `channels` may be uninitialized [unbound-name]
- ERROR kornia/models/vit_mobile.py:304:63-72: `expansion` may be uninitialized [unbound-name]
- ERROR kornia/models/vit_mobile.py:305:34-42: `channels` may be uninitialized [unbound-name]
- ERROR kornia/models/vit_mobile.py:305:47-55: `channels` may be uninitialized [unbound-name]
- ERROR kornia/models/vit_mobile.py:305:63-72: `expansion` may be uninitialized [unbound-name]
- ERROR kornia/models/vit_mobile.py:306:34-42: `channels` may be uninitialized [unbound-name]
- ERROR kornia/models/vit_mobile.py:306:47-55: `channels` may be uninitialized [unbound-name]
- ERROR kornia/models/vit_mobile.py:306:63-72: `expansion` may be uninitialized [unbound-name]
- ERROR kornia/models/vit_mobile.py:307:34-42: `channels` may be uninitialized [unbound-name]
- ERROR kornia/models/vit_mobile.py:307:47-55: `channels` may be uninitialized [unbound-name]
- ERROR kornia/models/vit_mobile.py:307:63-72: `expansion` may be uninitialized [unbound-name]
- ERROR kornia/models/vit_mobile.py:308:34-42: `channels` may be uninitialized [unbound-name]
- ERROR kornia/models/vit_mobile.py:308:47-55: `channels` may be uninitialized [unbound-name]
- ERROR kornia/models/vit_mobile.py:308:63-72: `expansion` may be uninitialized [unbound-name]
- ERROR kornia/models/vit_mobile.py:309:34-42: `channels` may be uninitialized [unbound-name]
- ERROR kornia/models/vit_mobile.py:309:47-55: `channels` may be uninitialized [unbound-name]
- ERROR kornia/models/vit_mobile.py:309:63-72: `expansion` may be uninitialized [unbound-name]
- ERROR kornia/models/vit_mobile.py:313:47-55: `channels` may be uninitialized [unbound-name]
- ERROR kornia/models/vit_mobile.py:313:89-93: `dims` may be uninitialized [unbound-name]
- ERROR kornia/models/vit_mobile.py:316:28-32: `dims` may be uninitialized [unbound-name]
- ERROR kornia/models/vit_mobile.py:316:47-55: `channels` may be uninitialized [unbound-name]
- ERROR kornia/models/vit_mobile.py:316:89-93: `dims` may be uninitialized [unbound-name]
- ERROR kornia/models/vit_mobile.py:319:28-32: `dims` may be uninitialized [unbound-name]
- ERROR kornia/models/vit_mobile.py:319:47-55: `channels` may be uninitialized [unbound-name]
- ERROR kornia/models/vit_mobile.py:319:89-93: `dims` may be uninitialized [unbound-name]
- ERROR kornia/models/vit_mobile.py:322:34-42: `channels` may be uninitialized [unbound-name]
- ERROR kornia/models/vit_mobile.py:322:48-56: `channels` may be uninitialized [unbound-name]
- ERROR kornia/tracking/planar_tracker.py:133:30-35: `Hwarp` may be uninitialized [unbound-name]
- ERROR kornia/tracking/planar_tracker.py:134:9-14: `Hwarp` may be uninitialized [unbound-name]
- ERROR kornia/tracking/planar_tracker.py:135:30-35: `Hwarp` may be uninitialized [unbound-name]
- ERROR kornia/tracking/planar_tracker.py:145:39-44: `Hwarp` may be uninitialized [unbound-name]

urllib3 (https://github.com/urllib3/urllib3)
- ERROR test/test_ssltransport.py:31:12-26: `server_context` may be uninitialized [unbound-name]
- ERROR test/test_ssltransport.py:31:28-42: `client_context` may be uninitialized [unbound-name]
- ERROR src/urllib3/connectionpool.py:892:16-24: `response` may be uninitialized [unbound-name]
- ERROR src/urllib3/connectionpool.py:900:67-75: `response` may be uninitialized [unbound-name]
- ERROR src/urllib3/connectionpool.py:903:21-29: `response` may be uninitialized [unbound-name]
- ERROR src/urllib3/connectionpool.py:905:24-32: `response` may be uninitialized [unbound-name]
- ERROR src/urllib3/connectionpool.py:907:13-21: `response` may be uninitialized [unbound-name]
- ERROR src/urllib3/connectionpool.py:908:37-45: `response` may be uninitialized [unbound-name]
- ERROR src/urllib3/connectionpool.py:929:32-40: `response` may be uninitialized [unbound-name]
- ERROR src/urllib3/connectionpool.py:930:37-45: `response` may be uninitialized [unbound-name]
- ERROR src/urllib3/connectionpool.py:932:67-75: `response` may be uninitialized [unbound-name]
- ERROR src/urllib3/connectionpool.py:935:21-29: `response` may be uninitialized [unbound-name]
- ERROR src/urllib3/connectionpool.py:937:24-32: `response` may be uninitialized [unbound-name]
- ERROR src/urllib3/connectionpool.py:939:13-21: `response` may be uninitialized [unbound-name]
- ERROR src/urllib3/connectionpool.py:940:27-35: `response` may be uninitialized [unbound-name]
- ERROR src/urllib3/connectionpool.py:960:16-24: `response` may be uninitialized [unbound-name]

trio (https://github.com/python-trio/trio)
- ERROR src/trio/_core/_run.py:2907:31-34: `msg` may be uninitialized [unbound-name]
- ERROR src/trio/_core/_run.py:2909:44-47: `msg` may be uninitialized [unbound-name]
- ERROR src/trio/_core/_run.py:2915:31-34: `msg` may be uninitialized [unbound-name]
- ERROR src/trio/_core/_run.py:2917:50-53: `msg` may be uninitialized [unbound-name]
- ERROR src/trio/_core/_run.py:2920:77-80: `msg` may be uninitialized [unbound-name]
- ERROR src/trio/_core/_run.py:2933:25-28: `msg` may be uninitialized [unbound-name]
- ERROR src/trio/_tests/test_exports.py:401:24-37: `lookup_symbol` may be uninitialized [unbound-name]

aiortc (https://github.com/aiortc/aiortc)
- ERROR src/aiortc/contrib/media.py:253:45-54: `data_time` may be uninitialized [unbound-name]
- ERROR src/aiortc/contrib/media.py:255:38-47: `data_time` may be uninitialized [unbound-name]

hydpy (https://github.com/hydpy-dev/hydpy)
- ERROR hydpy/exe/xmltools.py:2382:13-17: `item` may be uninitialized [unbound-name]
- ERROR hydpy/exe/xmltools.py:2384:31-35: `item` may be uninitialized [unbound-name]
- ERROR hydpy/exe/xmltools.py:2385:13-17: `item` may be uninitialized [unbound-name]
- ERROR hydpy/exe/xmltools.py:2386:16-20: `item` may be uninitialized [unbound-name]
- ERROR hydpy/models/ga/ga_model.py:1880:38-50: `initmoisture` may be uninitialized [unbound-name]
- ERROR hydpy/models/lland/lland_model.py:6960:74-76: `c2` may be uninitialized [unbound-name]

dd-trace-py (https://github.com/DataDog/dd-trace-py)
- ERROR ddtrace/contrib/internal/botocore/services/kinesis.py:54:26-35: `data_json` may be uninitialized [unbound-name]
- ERROR ddtrace/profiling/_gevent.py:101:39-48: `target_id` may be uninitialized [unbound-name]

yarl (https://github.com/aio-libs/yarl)
- ERROR yarl/_url.py:827:24-27: `raw` may be uninitialized [unbound-name]
- ERROR yarl/_url.py:827:50-53: `raw` may be uninitialized [unbound-name]
- ERROR yarl/_url.py:828:20-23: `raw` may be uninitialized [unbound-name]
- ERROR yarl/_url.py:828:56-59: `raw` may be uninitialized [unbound-name]
- ERROR yarl/_url.py:1467:30-39: `join_path` may be uninitialized [unbound-name]

poetry (https://github.com/python-poetry/poetry)
- ERROR src/poetry/puzzle/transaction.py:155:36-53: `installed_package` may be uninitialized [unbound-name]
- ERROR src/poetry/puzzle/transaction.py:156:24-41: `installed_package` may be uninitialized [unbound-name]
- ERROR src/poetry/puzzle/transaction.py:157:53-70: `installed_package` may be uninitialized [unbound-name]

dragonchain (https://github.com/dragonchain/dragonchain)
- ERROR dragonchain/lib/broadcast.py:91:25-26: `r` may be uninitialized [unbound-name]

discord.py (https://github.com/Rapptz/discord.py)
- ERROR discord/app_commands/errors.py:484:72-78: `errors` may be uninitialized [unbound-name]

cloud-init (https://github.com/canonical/cloud-init)
- ERROR cloudinit/distros/opensuse.py:176:20-28: `hostname` may be uninitialized [unbound-name]
- ERROR cloudinit/net/freebsd.py:43:51-61: `net_config` may be uninitialized [unbound-name]
- ERROR cloudinit/net/netplan.py:460:20-34: `last_exception` may be uninitialized [unbound-name]
- ERROR cloudinit/netinfo.py:223:22-28: `curdev` may be uninitialized [unbound-name]
- ERROR cloudinit/netinfo.py:280:22-28: `curdev` may be uninitialized [unbound-name]
- ERROR cloudinit/util.py:2038:16-26: `mountpoint` may be uninitialized [unbound-name]
- ERROR cloudinit/util.py:2039:13-23: `mountpoint` may be uninitialized [unbound-name]
- ERROR cloudinit/util.py:2042:32-42: `mountpoint` may be uninitialized [unbound-name]
- ERROR cloudinit/util.py:2044:32-42: `mountpoint` may be uninitialized [unbound-name]
- ERROR cloudinit/util.py:2599:57-70: `mount_options` may be uninitialized [unbound-name]

core (https://github.com/home-assistant/core)
- ERROR homeassistant/auth/providers/homeassistant.py:111:22-26: `data` may be uninitialized [unbound-name]
- ERROR homeassistant/components/alarmdecoder/__init__.py:134:5-15: `controller` may be uninitialized [unbound-name]
- ERROR homeassistant/components/alarmdecoder/__init__.py:135:5-15: `controller` may be uninitialized [unbound-name]
- ERROR homeassistant/components/alarmdecoder/__init__.py:136:5-15: `controller` may be uninitialized [unbound-name]
- ERROR homeassistant/components/alarmdecoder/__init__.py:137:5-15: `controller` may be uninitialized [unbound-name]
- ERROR homeassistant/components/alarmdecoder/__init__.py:138:5-15: `controller` may be uninitialized [unbound-name]
- ERROR homeassistant/components/alarmdecoder/__init__.py:145:9-19: `controller` may be uninitialized [unbound-name]
- ERROR homeassistant/components/alarmdecoder/__init__.py:150:11-21: `controller` may be uninitialized [unbound-name]
- ERROR homeassistant/components/alexa/capabilities.py:651:27-41: `hue_saturation` may be uninitialized [unbound-name]
- ERROR homeassistant/components/alexa/handlers.py:187:10-16: `domain` may be uninitialized [unbound-name]
- ERROR homeassistant/components/alexa/handlers.py:189:10-16: `domain` may be uninitialized [unbound-name]
- ERROR homeassistant/components/alexa/handlers.py:191:10-16: `domain` may be uninitialized [unbound-name]
- ERROR homeassistant/components/alexa/handlers.py:193:10-16: `domain` may be uninitialized [unbound-name]
- ERROR homeassistant/components/alexa/handlers.py:195:10-16: `domain` may be uninitialized [unbound-name]
- ERROR homeassistant/components/alexa/handlers.py:202:10-16: `domain` may be uninitialized [unbound-name]
- ERROR homeassistant/components/alexa/handlers.py:204:10-16: `domain` may be uninitialized [unbound-name]
- ERROR homeassistant/components/alexa/handlers.py:214:9-15: `domain` may be uninitialized [unbound-name]
- ERROR homeassistant/components/analytics/analytics.py:452:35-50: `enabled_domains` may be uninitialized [unbound-name]
- ERROR homeassistant/components/api/__init__.py:452:12-30: `response_requested` may be uninitialized [unbound-name]
- ERROR homeassistant/components/arwn/sensor.py:157:17-22: `store` may be uninitialized [unbound-name]
- ERROR homeassistant/components/aws/__init__.py:102:76-80: `conf` may be uninitialized [unbound-name]
- ERROR homeassistant/components/bang_olufsen/media_player.py:251:17-27: `sw_version` may be uninitialized [unbound-name]
- ERROR homeassistant/components/bayesian/config_flow.py:558:57-66: `sub_entry` may be uninitialized [unbound-name]
- ERROR homeassistant/components/buienradar/sensor.py:877:47-56: `new_state` may be uninitialized [unbound-name]
- ERROR homeassistant/components/color_extractor/services.py:140:40-45: `color` may be uninitialized [unbound-name]
- ERROR homeassistant/components/config/entity_registry.py:288:36-48: `entity_entry` may be uninitialized [unbound-name]
- ERROR homeassistant/components/configurator/__init__.py:91:39-47: `instance` may be uninitialized [unbound-name]
- ERROR homeassistant/components/deconz/deconz_event.py:87:27-36: `new_event` may be uninitialized [unbound-name]
- ERROR homeassistant/components/derivative/sensor.py:553:30-44: `new_derivative` may be uninitialized [unbound-name]
- ERROR homeassistant/components/device_tracker/legacy.py:656:19-25: `device` may be uninitialized [unbound-name]
- ERROR homeassistant/components/device_tracker/legacy.py:666:16-22: `device` may be uninitialized [unbound-name]
- ERROR homeassistant/components/device_tracker/legacy.py:667:17-23: `device` may be uninitialized [unbound-name]
- ERROR homeassistant/components/dialogflow/__init__.py:127:18-21: `req` may be uninitialized [unbound-name]
- ERROR homeassistant/components/dlna_dms/util.py:28:12-31: `suggested_source_id` may be uninitialized [unbound-name]
- ERROR homeassistant/components/dremel_3d_printer/config_flow.py:58:46-49: `api` may be uninitialized [unbound-name]
- ERROR homeassistant/components/emulated_hue/hue_api.py:474:48-59: `color_modes` may be uninitialized [unbound-name]
- ERROR homeassistant/components/emulated_hue/hue_api.py:481:42-53: `color_modes` may be uninitialized [unbound-name]
- ERROR homeassistant/components/emulated_hue/hue_api.py:503:48-59: `color_modes` may be uninitialized [unbound-name]
- ERROR homeassistant/components/energy/sensor.py:480:54-65: `valid_units` may be uninitialized [unbound-name]
- ERROR homeassistant/components/environment_canada/config_flow.py:89:45-49: `info` may be uninitialized [unbound-name]
- ERROR homeassistant/components/environment_canada/config_flow.py:90:46-50: `info` may be uninitialized [unbound-name]
- ERROR homeassistant/components/environment_canada/config_flow.py:97:54-58: `info` may be uninitialized [unbound-name]
- ERROR homeassistant/components/ephember/climate.py:91:28-33: `ember` may be uninitialized [unbound-name]
- ERROR homeassistant/components/evohome/climate.py:271:32-37: `until` may be uninitialized [unbound-name]
- ERROR homeassistant/components/fritz/config_flow.py:187:78-82: `uuid` may be uninitialized [unbound-name]
- ERROR homeassistant/components/fritz/config_flow.py:296:56-61: `error` may be uninitialized [unbound-name]
- ERROR homeassistant/components/fronius/sensor.py:868:35-44: `meter_uid` may be uninitialized [unbound-name]
- ERROR homeassistant/components/frontend/__init__.py:656:23-33: `theme_data` may be uninitialized [unbound-name]
- ERROR homeassistant/components/go2rtc/__init__.py:379:20-33: `stream_source` may be uninitialized [unbound-name]
- ERROR homeassistant/components/go2rtc/__init__.py:380:49-62: `stream_source` may be uninitialized [unbound-name]
- ERROR homeassistant/components/go2rtc/__init__.py:381:13-26: `stream_source` may be uninitialized [unbound-name]
- ERROR homeassistant/components/go2rtc/__init__.py:403:13-26: `stream_source` may be uninitialized [unbound-name]
- ERROR homeassistant/components/go2rtc/__init__.py:408:21-34: `stream_source` may be uninitialized [unbound-name]
- ERROR homeassistant/components/google/calendar.py:170:13-19: `search` may be uninitialized [unbound-name]
- ERROR homeassistant/components/google_assistant/helpers.py:77:25-37: `entity_entry` may be uninitialized [unbound-name]
- ERROR homeassistant/components/google_assistant/helpers.py:78:19-31: `entity_entry` may be uninitialized [unbound-name]
- ERROR homeassistant/components/google_assistant/helpers.py:89:12-24: `entity_entry` may be uninitialized [unbound-name]
- ERROR homeassistant/components/google_assistant/http.py:336:17-21: `data` may be uninitialized [unbound-name]
- ERROR homeassistant/components/google_assistant/http.py:343:42-46: `data` may be uninitialized [unbound-name]
- ERROR homeassistant/components/google_assistant/http.py:345:22-26: `data` may be uninitialized [unbound-name]
- ERROR homeassistant/components/google_cloud/tts.py:65:13-21: `key_file` may be uninitialized [unbound-name]
- ERROR homeassistant/components/harmony/config_flow.py:90:21-30: `validated` may be uninitialized [unbound-name]
- ERROR homeassistant/components/hassio/__init__.py:553:33-37: `user` may be uninitialized [unbound-name]
- ERROR homeassistant/components/hdmi_cec/__init__.py:288:36-40: `addr` may be uninitialized [unbound-name]
- ERROR homeassistant/components/hdmi_cec/__init__.py:289:36-40: `addr` may be uninitialized [unbound-name]
- ERROR homeassistant/components/hdmi_cec/__init__.py:290:67-71: `addr` may be uninitialized [unbound-name]
- ERROR homeassistant/components/history/websocket_api.py:426:26-36: `start_time` may be uninitialized [unbound-name]
- ERROR homeassistant/components/history/websocket_api.py:437:23-33: `start_time` may be uninitialized [unbound-name]
- ERROR homeassistant/components/history/websocket_api.py:457:35-45: `start_time` may be uninitialized [unbound-name]
- ERROR homeassistant/components/history/websocket_api.py:460:60-70: `start_time` may be uninitialized [unbound-name]
- ERROR homeassistant/components/history/websocket_api.py:469:13-23: `start_time` may be uninitialized [unbound-name]
- ERROR homeassistant/components/history/websocket_api.py:533:9-19: `start_time` may be uninitialized [unbound-name]
- ERROR homeassistant/components/history/websocket_api.py:579:29-39: `start_time` may be uninitialized [unbound-name]
- ERROR homeassistant/components/home_connect/coordinator.py:168:27-48: `appliance_coordinator` may be uninitialized [unbound-name]
- ERROR homeassistant/components/homeassistant/triggers/time.py:249:45-51: `remove` may be uninitialized [unbound-name]
- ERROR homeassistant/components/homekit/__init__.py:1168:46-79: `current_humidity_sensor_entity_id` may be uninitialized [unbound-name]
- ERROR homeassistant/components/homekit_controller/cover.py:277:21-25: `char` may be uninitialized [unbound-name]
- ERROR homeassistant/components/homekit_controller/cover.py:293:47-51: `char` may be uninitialized [unbound-name]
- ERROR homeassistant/components/http/auth.py:131:47-51: `data` may be uninitialized [unbound-name]
- ERROR homeassistant/components/http/auth.py:140:9-13: `data` may be uninitialized [unbound-name]
- ERROR homeassistant/components/http/auth.py:141:32-36: `data` may be uninitialized [unbound-name]
- ERROR homeassistant/components/hvv_departures/sensor.py:134:48-52: `data` may be uninitialized [unbound-name]
- ERROR homeassistant/components/hvv_departures/sensor.py:143:21-25: `data` may be uninitialized [unbound-name]
- ERROR homeassistant/components/hvv_departures/sensor.py:169:26-30: `data` may be uninitialized [unbound-name]
- ERROR homeassistant/components/imap/coordinator.py:312:25-35: `message_id` may be uninitialized [unbound-name]
- ERROR homeassistant/components/imap/coordinator.py:343:17-27: `message_id` may be uninitialized [unbound-name]
- ERROR homeassistant/components/imeon_inverter/config_flow.py:74:40-46: `serial` may be uninitialized [unbound-name]
- ERROR homeassistant/components/immich/services.py:68:17-29: `target_album` may be uninitialized [unbound-name]
- ERROR homeassistant/components/incomfort/config_flow.py:194:20-34: `is_reconfigure` may be uninitialized [unbound-name]
- ERROR homeassistant/components/incomfort/config_flow.py:196:25-42: `reconfigure_entry` may be uninitialized [unbound-name]
- ERROR homeassistant/components/ios/notify.py:99:78-85: `targets` may be uninitialized [unbound-name]
- ERROR homeassistant/components/iqvia/sensor.py:250:37-41: `data` may be uninitialized [unbound-name]
- ERROR homeassistant/components/isy994/binary_sensor.py:147:17-30: `parent_entity` may be uninitialized [unbound-name]
- ERROR homeassistant/components/isy994/binary_sensor.py:153:27-40: `parent_entity` may be uninitialized [unbound-name]
- ERROR homeassistant/components/isy994/binary_sensor.py:155:17-30: `parent_entity` may be uninitialized [unbound-name]
- ERROR homeassistant/components/isy994/binary_sensor.py:169:37-50: `parent_entity` may be uninitialized [unbound-name]
- ERROR homeassistant/components/knx/light.py:489:12-16: `rgbw` may be uninitialized [unbound-name]
- ERROR homeassistant/components/knx/light.py:490:29-33: `rgbw` may be uninitialized [unbound-name]
- ERROR homeassistant/components/knx/light.py:490:39-43: `rgbw` may be uninitialized [unbound-name]
- ERROR homeassistant/components/knx/light.py:492:12-15: `rgb` may be uninitialized [unbound-name]
- ERROR homeassistant/components/knx/light.py:493:29-32: `rgb` may be uninitialized [unbound-name]
- ERROR homeassistant/components/knx/light.py:496:12-22: `color_temp` may be uninitialized [unbound-name]
- ERROR homeassistant/components/knx/light.py:499:55-65: `color_temp` may be uninitialized [unbound-name]
- ERROR homeassistant/components/knx/light.py:514:12-20: `xy_color` may be uninitialized [unbound-name]
- ERROR homeassistant/components/knx/light.py:516:32-40: `xy_color` may be uninitialized [unbound-name]
- ERROR homeassistant/components/knx/light.py:520:12-20: `hs_color` may be uninitialized [unbound-name]
- ERROR homeassistant/components/knx/light.py:522:25-33: `hs_color` may be uninitialized [unbound-name]
- ERROR homeassistant/components/knx/light.py:523:25-33: `hs_color` may be uninitialized [unbound-name]
- ERROR homeassistant/components/konnected/__init__.py:243:28-31: `cfg` may be uninitialized [unbound-name]
- ERROR homeassistant/components/konnected/__init__.py:355:66-73: `payload` may be uninitialized [unbound-name]
- ERROR homeassistant/components/konnected/__init__.py:356:13-20: `payload` may be uninitialized [unbound-name]
- ERROR homeassistant/components/konnected/__init__.py:377:21-28: `payload` may be uninitialized [unbound-name]
- ERROR homeassistant/components/konnected/__init__.py:380:65-72: `payload` may be uninitialized [unbound-name]
- ERROR homeassistant/components/konnected/__init__.py:429:42-50: `zone_num` may be uninitialized [unbound-name]
- ERROR homeassistant/components/lametric/notify.py:62:51-55: `data` may be uninitialized [unbound-name]
- ERROR homeassistant/components/lametric/notify.py:63:58-62: `data` may be uninitialized [unbound-name]
- ERROR homeassistant/components/lametric/notify.py:70:43-47: `data` may be uninitialized [unbound-name]
- ERROR homeassistant/components/lametric/notify.py:74:30-34: `data` may be uninitialized [unbound-name]
- ERROR homeassistant/components/lametric/notify.py:78:28-32: `data` may be uninitialized [unbound-name]
- ERROR homeassistant/components/lcn/helpers.py:275:8-16: `is_group` may be uninitialized [unbound-name]
- ERROR homeassistant/components/lcn/helpers.py:276:34-42: `is_group` may be uninitialized [unbound-name]
- ERROR homeassistant/components/lg_thinq/climate.py:331:26-35: `hvac_mode` may be uninitialized [unbound-name]
- ERROR homeassistant/components/lg_thinq/climate.py:332:53-62: `hvac_mode` may be uninitialized [unbound-name]
- ERROR homeassistant/components/livisi/config_flow.py:82:13-28: `controller_data` may be uninitialized [unbound-name]
- ERROR homeassistant/components/logbook/websocket_api.py:268:26-36: `start_time` may be uninitialized [unbound-name]
- ERROR homeassistant/components/logbook/websocket_api.py:279:23-33: `start_time` may be uninitialized [unbound-name]
- ERROR homeassistant/components/logbook/websocket_api.py:288:60-70: `start_time` may be uninitialized [unbound-name]
- ERROR homeassistant/components/logbook/websocket_api.py:311:13-23: `start_time` may be uninitialized [unbound-name]
- ERROR homeassistant/components/logbook/websocket_api.py:377:9-19: `start_time` may be uninitialized [unbound-name]
- ERROR homeassistant/components/logbook/websocket_api.py:424:29-39: `start_time` may be uninitialized [unbound-name]
- ERROR homeassistant/components/lutron/event.py:71:48-52: `name` may be uninitialized [unbound-name]
- ERROR homeassistant/components/lutron/event.py:72:28-32: `name` may be uninitialized [unbound-name]
- ERROR homeassistant/components/lutron_caseta/__init__.py:292:35-41: `keypad` may be uninitialized [unbound-name]
- ERROR homeassistant/components/lutron_caseta/__init__.py:303:9-15: `keypad` may be uninitialized [unbound-name]
- ERROR homeassistant/components/melcloud/config_flow.py:64:51-65: `acquired_token` may be uninitialized [unbound-name]
- ERROR homeassistant/components/mpd/media_player.py:186:74-82: `position` may be uninitialized [unbound-name]
- ERROR homeassistant/components/mpd/media_player.py:188:59-67: `position` may be uninitialized [unbound-name]
- ERROR homeassistant/components/mqtt/client.py:398:17-28: `certificate` may be uninitialized [unbound-name]
- ERROR homeassistant/components/mqtt/config_flow.py:1170:9-21: `device_class` may be uninitialized [unbound-name]
- ERROR homeassistant/components/mqtt/config_flow.py:1179:9-21: `device_class` may be uninitialized [unbound-name]
- ERROR homeassistant/components/mqtt/config_flow.py:1180:13-25: `device_class` may be uninitialized [unbound-name]
- ERROR homeassistant/components/mqtt/config_flow.py:1181:59-71: `device_class` may be uninitialized [unbound-name]
- ERROR homeassistant/components/mqtt/config_flow.py:4245:16-30: `is_reconfigure` may be uninitialized [unbound-name]
- ERROR homeassistant/components/mqtt/config_flow.py:4247:21-38: `reconfigure_entry` may be uninitialized [unbound-name]
- ERROR homeassistant/components/mqtt/config_flow.py:4256:20-34: `is_reconfigure` may be uninitialized [unbound-name]
- ERROR homeassistant/components/mqtt/config_flow.py:4258:25-42: `reconfigure_entry` may be uninitialized [unbound-name]
- ERROR homeassistant/components/mqtt/config_flow.py:5524:37-55: `client_certificate` may be uninitialized [unbound-name]
- ERROR homeassistant/components/mqtt/config_flow.py:5524:57-68: `private_key` may be uninitialized [unbound-name]
- ERROR homeassistant/components/mqtt/device_tracker.py:174:40-49: `longitude` may be uninitialized [unbound-name]
- ERROR homeassistant/components/mqtt/lock.py:156:41-51: `optimistic` may be uninitialized [unbound-name]
- ERROR homeassistant/components/mqtt/sensor.py:133:41-60: `unit_of_measurement` may be uninitialized [unbound-name]
- ERROR homeassistant/components/mqtt/sensor.py:141:9-28: `unit_of_measurement` may be uninitialized [unbound-name]
- ERROR homeassistant/components/mqtt/sensor.py:141:30-49: `unit_of_measurement` may be uninitialized [unbound-name]
- ERROR homeassistant/components/mqtt/sensor.py:219:29-39: `last_state` may be uninitialized [unbound-name]
- ERROR homeassistant/components/mqtt/sensor.py:227:39-55: `last_sensor_data` may be uninitialized [unbound-name]
- ERROR homeassistant/components/neato/camera.py:114:30-38: `map_data` may be uninitialized [unbound-name]
- ERROR homeassistant/components/nest/__init__.py:365:48-65: `subscription_name` may be uninitialized [unbound-name]
- ERROR homeassistant/components/nest/__init__.py:372:13-30: `subscription_name` may be uninitialized [unbound-name]
- ERROR homeassistant/components/netgear_lte/notify.py:58:23-30: `targets` may be uninitialized [unbound-name]
- ERROR homeassistant/components/nexia/config_flow.py:105:54-58: `info` may be uninitialized [unbound-name]
- ERROR homeassistant/components/nibe_heatpump/climate.py:239:74-85: `temperature` may be uninitialized [unbound-name]
- ERROR homeassistant/components/nintendo_parental_controls/services.py:69:22-34: `config_entry` may be uninitialized [unbound-name]
- ERROR homeassistant/components/notion/config_flow.py:62:51-57: `client` may be uninitialized [unbound-name]
- ERROR homeassistant/components/ntfy/config_flow.py:355:51-56: `token` may be uninitialized [unbound-name]
- ERROR homeassistant/components/ntfy/config_flow.py:367:37-42: `token` may be uninitialized [unbound-name]
- ERROR homeassistant/components/nuheat/config_flow.py:89:54-58: `info` may be uninitialized [unbound-name]
- ERROR homeassistant/components/nx584/alarm_control_panel.py:137:21-25: `part` may be uninitialized [unbound-name]
- ERROR homeassistant/components/onboarding/__init__.py:108:25-29: `data` may be uninitialized [unbound-name]
- ERROR homeassistant/components/onboarding/__init__.py:119:13-17: `data` may be uninitialized [unbound-name]
- ERROR homeassistant/components/onboarding/__init__.py:120:36-40: `data` may be uninitialized [unbound-name]
- ERROR homeassistant/components/onboarding/__init__.py:122:12-16: `data` may be uninitialized [unbound-name]
- ERROR homeassistant/components/onboarding/__init__.py:125:51-55: `data` may be uninitialized [unbound-name]
- ERROR homeassistant/components/onboarding/__init__.py:127:35-39: `data` may be uninitialized [unbound-name]
- ERROR homeassistant/components/otbr/config_flow.py:230:31-40: `unique_id` may be uninitialized [unbound-name]
- ERROR homeassistant/components/otbr/websocket_api.py:234:52-74: `thread_dataset_channel` may be uninitialized [unbound-name]
- ERROR homeassistant/components/overkiz/number.py:250:55-60: `state` may be uninitialized [unbound-name]
- ERROR homeassistant/components/plex/media_browser.py:181:67-79: `hub_location` may be uninitialized [unbound-name]
- ERROR homeassistant/components/portainer/__init__.py:107:27-52: `parent_device_identifiers` may be uninitialized [unbound-name]
- ERROR homeassistant/components/powerwall/__init__.py:208:19-28: `base_info` may be uninitialized [unbound-name]
- ERROR homeassistant/components/powerwall/__init__.py:240:56-65: `base_info` may be uninitialized [unbound-name]
- ERROR homeassistant/components/rainbird/__init__.py:162:23-34: `mac_address` may be uninitialized [unbound-name]
- ERROR homeassistant/components/rainforest_eagle/coordinator.py:92:35-49: `eagle200_meter` may be uninitialized [unbound-name]
- ERROR homeassistant/components/rainforest_eagle/coordinator.py:93:35-49: `eagle200_meter` may be uninitialized [unbound-name]
- ERROR homeassistant/components/recollect_waste/sensor.py:95:58-63: `event` may be uninitialized [unbound-name]
- ERROR homeassistant/components/recollect_waste/sensor.py:97:39-44: `event` may be uninitialized [unbound-name]
- ERROR homeassistant/components/rfxtrx/config_flow.py:227:47-57: `command_on` may be uninitialized [unbound-name]
- ERROR homeassistant/components/rfxtrx/config_flow.py:229:48-59: `command_off` may be uninitialized [unbound-name]
- ERROR homeassistant/components/ring/entity.py:154:33-48: `deprecated_info` may be uninitialized [unbound-name]
- ERROR homeassistant/components/screenlogic/config_flow.py:172:40-43: `mac` may be uninitialized [unbound-name]
- ERROR homeassistant/components/shelly/coordinator.py:249:39-55: `new_sleep_period` may be uninitialized [unbound-name]
- ERROR homeassistant/components/shelly/diagnostics.py:88:25-34: `ws_config` may be uninitialized [unbound-name]
- ERROR homeassistant/components/simplisafe/config_flow.py:144:64-74: `simplisafe` may be uninitialized [unbound-name]
- ERROR homeassistant/components/sonos/media.py:176:34-39: `ct_md` may be uninitialized [unbound-name]
- ERROR homeassistant/components/sonos/media.py:176:59-64: `ct_md` may be uninitialized [unbound-name]
- ERROR homeassistant/components/sonos/media.py:177:30-35: `ct_md` may be uninitialized [unbound-name]
- ERROR homeassistant/components/sql/util.py:94:16-24: `instance` may be uninitialized [unbound-name]
- ERROR homeassistant/components/sql/util.py:95:54-62: `instance` may be uninitialized [unbound-name]
- ERROR homeassistant/components/squeezebox/browse_media.py:365:13-24: `child_media` may be uninitialized [unbound-name]
- ERROR homeassistant/components/squeezebox/browse_media.py:375:29-40: `child_media` may be uninitialized [unbound-name]
- ERROR homeassistant/components/steam_online/config_flow.py:78:72-76: `name` may be uninitialized [unbound-name]
- ERROR homeassistant/components/stream/hls.py:323:27-39: `last_segment` may be uninitialized [unbound-name]
- ERROR homeassistant/components/stream/hls.py:326:25-37: `last_segment` may be uninitialized [unbound-name]
- ERROR homeassistant/components/synology_dsm/sensor.py:522:20-24: `attr` may be uninitialized [unbound-name]
- ERROR homeassistant/components/synology_dsm/sensor.py:523:12-16: `attr` may be uninitialized [unbound-name]
- ERROR homeassistant/components/system_log/__init__.py:304:39-43: `conf` may be uninitialized [unbound-name]
- ERROR homeassistant/components/systemnexa2/config_flow.py:100:24-28: `info` may be uninitialized [unbound-name]
- ERROR homeassistant/components/systemnexa2/config_flow.py:101:26-30: `info` may be uninitialized [unbound-name]
- ERROR homeassistant/components/systemnexa2/config_flow.py:112:18-22: `info` may be uninitialized [unbound-name]
- ERROR homeassistant/components/tado/sensor.py:261:17-33: `tado_sensor_data` may be uninitialized [unbound-name]
- ERROR homeassistant/components/tellstick/sensor.py:137:31-44: `named_sensors` may be uninitialized [unbound-name]
- ERROR homeassistant/components/tellstick/sensor.py:139:31-44: `named_sensors` may be uninitialized [unbound-name]
- ERROR homeassistant/components/tellstick/sensor.py:141:31-44: `named_sensors` may be uninitialized [unbound-name]
- ERROR homeassistant/components/template/binary_sensor.py:331:36-49: `auto_off_time` may be uninitialized [unbound-name]
- ERROR homeassistant/components/tesla_wall_connector/config_flow.py:116:50-54: `info` may be uninitialized [unbound-name]
- ERROR homeassistant/components/tplink/config_flow.py:460:40-42: `un` may be uninitialized [unbound-name]
- ERROR homeassistant/components/tplink/config_flow.py:460:54-56: `pw` may be uninitialized [unbound-name]
- ERROR homeassistant/components/tplink/config_flow.py:479:66-68: `un` may be uninitialized [unbound-name]
- ERROR homeassistant/components/tplink/config_flow.py:479:70-72: `pw` may be uninitialized [unbound-name]
- ERROR homeassistant/components/tplink/config_flow.py:486:62-64: `un` may be uninitialized [unbound-name]
- ERROR homeassistant/components/tplink/config_flow.py:486:66-68: `pw` may be uninitialized [unbound-name]

... (truncated 104 lines) ...

check-jsonschema (https://github.com/python-jsonschema/check-jsonschema)
- ERROR src/check_jsonschema/cli/param_types.py:123:63-69: `result` may be uninitialized [unbound-name]

tornado (https://github.com/tornadoweb/tornado)
- ERROR tornado/iostream.py:1279:39-42: `err` may be uninitialized [unbound-name]
- ERROR tornado/iostream.py:1279:56-59: `err` may be uninitialized [unbound-name]
- ERROR tornado/iostream.py:1288:37-40: `err` may be uninitialized [unbound-name]

mongo-python-driver (https://github.com/mongodb/mongo-python-driver)
- ERROR bson/__init__.py:1021:21-27: `_cbson` may be uninitialized [unbound-name]
- ERROR bson/__init__.py:1133:19-25: `_cbson` may be uninitialized [unbound-name]
- ERROR bson/__init__.py:1226:37-43: `_cbson` may be uninitialized [unbound-name]
- ERROR pymongo/asynchronous/auth_oidc.py:194:31-33: `cb` may be uninitialized [unbound-name]
- ERROR pymongo/asynchronous/auth_oidc.py:223:28-30: `cb` may be uninitialized [unbound-name]
- ERROR pymongo/message.py:493:27-36: `_cmessage` may be uninitialized [unbound-name]
- ERROR pymongo/message.py:549:30-39: `_cmessage` may be uninitialized [unbound-name]
- ERROR pymongo/message.py:855:30-39: `_cmessage` may be uninitialized [unbound-name]
- ERROR pymongo/message.py:905:23-32: `_cmessage` may be uninitialized [unbound-name]
- ERROR pymongo/message.py:1267:37-46: `_cmessage` may be uninitialized [unbound-name]
- ERROR pymongo/ssl_support.py:60:39-45: `_pyssl` may be uninitialized [unbound-name]
- ERROR pymongo/ssl_support.py:63:13-19: `_pyssl` may be uninitialized [unbound-name]
- ERROR pymongo/ssl_support.py:64:13-17: `_ssl` may be uninitialized [unbound-name]
- ERROR pymongo/ssl_support.py:67:13-19: `_pyssl` may be uninitialized [unbound-name]
- ERROR pymongo/ssl_support.py:68:13-17: `_ssl` may be uninitialized [unbound-name]
- ERROR pymongo/ssl_support.py:75:16-20: `_ssl` may be uninitialized [unbound-name]
- ERROR pymongo/synchronous/auth_oidc.py:194:31-33: `cb` may be uninitialized [unbound-name]
- ERROR pymongo/synchronous/auth_oidc.py:223:28-30: `cb` may be uninitialized [unbound-name]

pyodide (https://github.com/pyodide/pyodide)
- ERROR pyodide-build/pyodide_build/pywasmcross.py:356:31-35: `name` may be uninitialized [unbound-name]
- ERROR pyodide-build/pyodide_build/recipe/builder.py:374:33-41: `response` may be uninitialized [unbound-name]
- ERROR src/tests/test_jsproxy.py:1747:12-13: `x` may be uninitialized [unbound-name]
- ERROR src/tests/test_jsproxy.py:1748:12-13: `y` may be uninitialized [unbound-name]
- ERROR src/tests/test_jsproxy.py:1755:12-13: `x` may be uninitialized [unbound-name]
- ERROR src/tests/test_jsproxy.py:1756:12-13: `y` may be uninitialized [unbound-name]
- ERROR src/tests/test_jsproxy.py:1762:12-13: `x` may be uninitialized [unbound-name]
- ERROR src/tests/test_jsproxy.py:1763:12-13: `y` may be uninitialized [unbound-name]

pandera (https://github.com/pandera-dev/pandera)
- ERROR pandera/api/extensions.py:207:51-53: `pd` may be uninitialized [unbound-name]
- ERROR pandera/api/extensions.py:218:31-33: `pd` may be uninitialized [unbound-name]
- ERROR pandera/api/extensions.py:218:45-47: `pd` may be uninitialized [unbound-name]
- ERROR pandera/api/extensions.py:220:30-32: `ps` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1552:27-34: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1564:13-20: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1565:27-34: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1572:30-37: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1578:13-20: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1579:27-34: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1586:30-37: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1592:13-20: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1593:27-34: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1600:30-37: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1606:13-20: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1607:27-34: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1614:30-37: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1619:13-20: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1620:13-20: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1636:30-37: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1641:13-20: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1642:27-34: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1649:30-37: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1655:13-20: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1656:27-34: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1663:30-37: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1669:13-20: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1670:27-34: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1677:30-37: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1683:13-20: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1684:27-34: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1691:30-37: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1697:13-20: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1698:27-34: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1705:30-37: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1711:13-20: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1712:27-34: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1719:30-37: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1725:13-20: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1726:27-34: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1733:30-37: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1737:22-29: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1737:42-49: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1765:22-29: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1765:41-48: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1786:22-29: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1786:42-49: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1795:47-54: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1796:47-54: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1821:13-20: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1822:13-20: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1823:13-20: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1834:13-20: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1858:41-48: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1858:57-64: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1890:13-20: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1891:27-34: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1898:30-37: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1903:13-20: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1904:27-34: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1911:30-37: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1916:13-20: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1917:27-34: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1924:30-37: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1927:22-29: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1927:40-47: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1946:41-48: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1946:57-64: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1972:41-48: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1972:57-64: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1998:41-48: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:1998:55-62: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:2006:45-52: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:2007:46-53: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:2031:13-20: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:2032:13-20: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:2033:27-34: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:2065:13-20: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:2066:27-34: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:2073:30-37: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:2078:13-20: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:2079:13-20: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:2080:27-34: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:2081:27-34: `pyarrow` may be uninitialized [unbound-name]
- ERROR pandera/engines/pandas_engine.py:2088:30-37: `pyarrow` may be uninitialized [unbound-name]
- ERROR tests/conftest.py:22:9-19: `hypothesis` may be uninitialized [unbound-name]
- ERROR tests/conftest.py:23:9-19: `hypothesis` may be uninitialized [unbound-name]
- ERROR tests/conftest.py:32:5-13: `settings` may be uninitialized [unbound-name]
- ERROR tests/conftest.py:38:5-13: `settings` may be uninitialized [unbound-name]

PyGithub (https://github.com/PyGithub/PyGithub)
- ERROR tests/BadAttributes.py:306:26-35: `raisedexp` may be uninitialized [unbound-name]
- ERROR tests/BadAttributes.py:307:26-35: `raisedexp` may be uninitialized [unbound-name]

zulip (https://github.com/zulip/zulip)
- ERROR analytics/lib/counts.py:1020:9-32: `RemoteInstallationCount` may be uninitialized [unbound-name]
- ERROR corporate/lib/stripe.py:5808:34-49: `billing_session` may be uninitialized [unbound-name]
- ERROR corporate/lib/stripe.py:5814:13-28: `billing_session` may be uninitialized [unbound-name]
- ERROR corporate/lib/stripe.py:5882:66-78: `last_invoice` may be uninitialized [unbound-name]
- ERROR corporate/views/installation_activity.py:340:57-71: `estimated_arrs` may be uninitialized [unbound-name]
- ERROR corporate/views/support.py:885:58-71: `remote_server` may be uninitialized [unbound-name]
- ERROR corporate/views/support.py:890:39-52: `remote_server` may be uninitialized [unbound-name]
- ERROR corporate/views/support.py:900:43-56: `remote_server` may be uninitialized [unbound-name]
- ERROR corporate/views/support.py:904:61-74: `remote_server` may be uninitialized [unbound-name]
- ERROR zerver/actions/message_edit.py:1199:21-34: `target_stream` may be uninitialized [unbound-name]
- ERROR zerver/actions/message_edit.py:1200:21-38: `target_topic_name` may be uninitialized [unbound-name]
- ERROR zerver/actions/message_edit.py:1214:21-34: `target_stream` may be uninitialized [unbound-name]
- ERROR zerver/actions/message_edit.py:1215:21-38: `target_topic_name` may be uninitialized [unbound-name]
- ERROR zerver/actions/message_send.py:393:17-50: `wildcard_mentions_notify_user_ids` may be uninitialized [unbound-name]
- ERROR zerver/actions/message_send.py:397:21-69: `followed_topic_wildcard_mentions_notify_user_ids` may be uninitialized [unbound-name]
- ERROR zerver/actions/scheduled_messages.py:243:43-55: `send_request` may be uninitialized [unbound-name]
- ERROR zerver/actions/scheduled_messages.py:245:26-38: `send_request` may be uninitialized [unbound-name]
- ERROR zerver/actions/scheduled_messages.py:258:13-25: `send_request` may be uninitialized [unbound-name]
- ERROR zerver/actions/scheduled_messages.py:258:35-47: `send_request` may be uninitialized [unbound-name]
- ERROR zerver/actions/scheduled_messages.py:258:65-77: `send_request` may be uninitialized [unbound-name]
- ERROR zerver/actions/scheduled_messages.py:260:44-56: `send_request` may be uninitialized [unbound-name]
- ERROR zerver/data_import/slack.py:1185:12-34: `is_direct_message_type` may be uninitialized [unbound-name]
- ERROR zerver/data_import/slack.py:1197:36-58: `is_direct_message_type` may be uninitialized [unbound-name]
- ERROR zerver/data_import/slack.py:1201:36-58: `is_direct_message_type` may be uninitialized [unbound-name]
- ERROR zerver/data_import/slack.py:1208:26-38: `recipient_id` may be uninitialized [unbound-name]
- ERROR zerver/data_import/slack.py:1211:24-46: `is_direct_message_type` may be uninitialized [unbound-name]
- ERROR zerver/data_import/slack.py:1220:17-29: `recipient_id` may be uninitialized [unbound-name]
- ERROR zerver/data_import/slack.py:1225:30-49: `sender_recipient_id` may be uninitialized [unbound-name]
- ERROR zerver/data_import/slack.py:1228:28-50: `is_direct_message_type` may be uninitialized [unbound-name]
- ERROR zerver/lib/bulk_create.py:200:34-48: `recipient_type` may be uninitialized [unbound-name]
- ERROR zerver/lib/events.py:440:17-34: `realm_groups_data` may be uninitialized [unbound-name]
- ERROR zerver/lib/events.py:448:17-34: `realm_groups_data` may be uninitialized [unbound-name]
- ERROR zerver/lib/events.py:456:17-34: `realm_groups_data` may be uninitialized [unbound-name]
- ERROR zerver/lib/events.py:463:13-30: `realm_groups_data` may be uninitialized [unbound-name]
- ERROR zerver/lib/events.py:831:44-80: `anonymous_group_membership_data_dict` may be uninitialized [unbound-name]
- ERROR zerver/lib/events.py:834:51-87: `anonymous_group_membership_data_dict` may be uninitialized [unbound-name]
- ERROR zerver/lib/events.py:879:44-80: `anonymous_group_membership_data_dict` may be uninitialized [unbound-name]
- ERROR zerver/lib/events.py:887:24-60: `anonymous_group_membership_data_dict` may be uninitialized [unbound-name]
- ERROR zerver/lib/import_realm.py:2121:42-46: `tups` may be uninitialized [unbound-name]
- ERROR zerver/lib/message.py:1241:29-35: `others` may be uninitialized [unbound-name]
- ERROR zerver/lib/narrow.py:976:22-29: `message` may be uninitialized [unbound-name]
- ERROR zerver/lib/narrow.py:977:17-24: `message` may be uninitialized [unbound-name]
- ERROR zerver/lib/narrow.py:984:10-17: `message` may be uninitialized [unbound-name]
- ERROR zerver/lib/narrow.py:986:53-60: `message` may be uninitialized [unbound-name]
- ERROR zerver/lib/narrow.py:990:10-17: `message` may be uninitialized [unbound-name]
- ERROR zerver/lib/narrow.py:991:66-73: `message` may be uninitialized [unbound-name]
- ERROR zerver/lib/retention.py:411:41-58: `acting_user_event` may be uninitialized [unbound-name]
- ERROR zerver/lib/test_classes.py:2806:37-43: `result` may be uninitialized [unbound-name]
- ERROR zerver/lib/test_classes.py:2806:53-59: `result` may be uninitialized [unbound-name]
- ERROR zerver/migrations/0544_copy_avatar_images.py:133:29-37: `old_data` may be uninitialized [unbound-name]
- ERROR zerver/migrations/0544_copy_avatar_images.py:142:26-34: `metadata` may be uninitialized [unbound-name]
- ERROR zerver/migrations/0544_copy_avatar_images.py:147:36-50: `original_bytes` may be uninitialized [unbound-name]
- ERROR zerver/migrations/0544_copy_avatar_images.py:151:26-34: `metadata` may be uninitialized [unbound-name]
- ERROR zerver/tests/test_message_dict.py:439:26-37: `old_message` may be uninitialized [unbound-name]
- ERROR zerver/tests/test_message_dict.py:442:26-37: `new_message` may be uninitialized [unbound-name]
- ERROR zerver/views/message_edit.py:263:21-33: `user_message` may be uninitialized [unbound-name]
- ERROR zerver/webhooks/bitbucket/view.py:442:17-20: `tag` may be uninitialized [unbound-name]
- ERROR zerver/webhooks/harbor/view.py:105:35-51: `operator_profile` may be uninitialized [unbound-name]
- ERROR zerver/webhooks/jira/view.py:373:20-32: `content_func` may be uninitialized [unbound-name]
- ERROR zilencer/management/commands/populate_db.py:1028:75-84: `mit_realm` may be uninitialized [unbound-name]
- ERROR zilencer/management/commands/populate_db.py:1030:21-30: `mit_realm` may be uninitialized [unbound-name]
- ERROR zilencer/management/commands/populate_db.py:1039:79-88: `mit_realm` may be uninitialized [unbound-name]
- ERROR zilencer/management/commands/populate_db.py:1040:40-49: `mit_realm` may be uninitialized [unbound-name]
- ERROR zilencer/management/commands/populate_db.py:1050:73-83: `lear_realm` may be uninitialized [unbound-name]
- ERROR zilencer/management/commands/populate_db.py:1052:21-31: `lear_realm` may be uninitialized [unbound-name]
- ERROR zilencer/management/commands/populate_db.py:1060:79-89: `lear_realm` may be uninitialized [unbound-name]
- ERROR zilencer/management/commands/populate_db.py:1062:21-31: `lear_realm` may be uninitialized [unbound-name]
- ERROR zilencer/management/commands/populate_db.py:1366:53-67: `personals_pair` may be uninitialized [unbound-name]
- ERROR zilencer/management/commands/populate_db.py:1368:44-58: `personals_pair` may be uninitialized [unbound-name]
- ERROR zproject/backends.py:3487:71-84: `saml_document` may be uninitialized [unbound-name]
- ERROR zproject/backends.py:3517:23-36: `saml_document` may be uninitialized [unbound-name]
- ERROR zproject/backends.py:3519:25-38: `saml_document` may be uninitialized [unbound-name]
- ERROR zproject/backends.py:3519:58-71: `saml_document` may be uninitialized [unbound-name]
- ERROR zproject/backends.py:3520:66-79: `saml_document` may be uninitialized [unbound-name]
- ERROR zproject/backends.py:3526:27-40: `saml_document` may be uninitialized [unbound-name]
- ERROR zproject/backends.py:3538:29-42: `saml_document` may be uninitialized [unbound-name]

bokeh (https://github.com/bokeh/bokeh)
- ERROR src/bokeh/command/bootstrap.py:122:10-13: `ret` may be uninitialized [unbound-name]
- ERROR src/bokeh/command/bootstrap.py:122:41-44: `ret` may be uninitialized [unbound-name]
- ERROR src/bokeh/command/bootstrap.py:122:55-58: `ret` may be uninitialized [unbound-name]
- ERROR src/bokeh/command/bootstrap.py:123:18-21: `ret` may be uninitialized [unbound-name]
- ERROR src/bokeh/models/plots.py:436:29-46: `selected_provider` may be uninitialized [unbound-name]
- ERROR src/bokeh/models/plots.py:437:26-43: `selected_provider` may be uninitialized [unbound-name]
- ERROR src/bokeh/models/plots.py:438:26-43: `selected_provider` may be uninitialized [unbound-name]

typeshed-stats (https://github.com/AlexWaygood/typeshed-stats)
- ERROR tests/conftest.py:50:12-18: `result` may be uninitialized [unbound-name]

mkosi (https://github.com/systemd/mkosi)
- ERROR mkosi/bootloader.py:749:51-75: `want_bootctl_auto_enroll` may be uninitialized [unbound-name]
- ERROR mkosi/config.py:5075:44-45: `s` may be uninitialized [unbound-name]
- ERROR mkosi/config.py:5078:31-32: `s` may be uninitialized [unbound-name]
- ERROR mkosi/config.py:5080:87-88: `s` may be uninitialized [unbound-name]
- ERROR mkosi/config.py:5084:28-29: `s` may be uninitialized [unbound-name]
- ERROR mkosi/config.py:5086:88-89: `s` may be uninitialized [unbound-name]
- ERROR mkosi/config.py:5091:29-30: `s` may be uninitialized [unbound-name]
- ERROR mkosi/config.py:5091:39-40: `s` may be uninitialized [unbound-name]
- ERROR mkosi/config.py:5091:66-67: `s` may be uninitialized [unbound-name]
- ERROR mkosi/qemu.py:741:13-14: `p` may be uninitialized [unbound-name]

pyjwt (https://github.com/jpadilla/pyjwt)
- ERROR jwt/algorithms.py:400:56-62: `hashes` may be uninitialized [unbound-name]
- ERROR jwt/algorithms.py:401:56-62: `hashes` may be uninitialized [unbound-name]
- ERROR jwt/algorithms.py:588:56-62: `hashes` may be uninitialized [unbound-name]
- ERROR jwt/algorithms.py:589:56-62: `hashes` may be uninitialized [unbound-name]

mkdocs (https://github.com/mkdocs/mkdocs)
- ERROR mkdocs/config/base.py:329:13-31: `result_config_file` may be uninitialized [unbound-name]
- ERROR mkdocs/config/base.py:334:15-33: `result_config_file` may be uninitialized [unbound-name]
- ERROR mkdocs/config/base.py:336:20-38: `result_config_file` may be uninitialized [unbound-name]
- ERROR mkdocs/config/base.py:337:13-31: `result_config_file` may be uninitialized [unbound-name]
- ERROR mkdocs/utils/rendering.py:37:36-39: `end` may be uninitialized [unbound-name]

pyppeteer (https://github.com/pyppeteer/pyppeteer)
- ERROR pyppeteer/execution_context.py:95:28-32: `_obj` may be uninitialized [unbound-name]
- ERROR pyppeteer/execution_context.py:114:24-28: `_obj` may be uninitialized [unbound-name]

prefect (https://github.com/PrefectHQ/prefect)
- ERROR src/integrations/prefect-dask/prefect_dask/client.py:48:29-39: `parameters` may be uninitialized [unbound-name]
- ERROR src/integrations/prefect-gcp/prefect_gcp/workers/vertex.py:611:16-30: `custom_job_run` may be uninitialized [unbound-name]
- ERROR src/prefect/_vendor/croniter/croniter.py:458:39-45: `result` may be uninitialized [unbound-name]
- ERROR src/prefect/_vendor/croniter/croniter.py:460:24-30: `result` may be uninitialized [unbound-name]
- ERROR src/prefect/_vendor/croniter/croniter.py:463:16-22: `result` may be uninitialized [unbound-name]
- ERROR src/prefect/cli/deployment.py:526:44-52: `flow_run` may be uninitialized [unbound-name]
- ERROR src/prefect/cli/deployment.py:530:20-28: `flow_run` may be uninitialized [unbound-name]
- ERROR src/prefect/cli/deployment.py:531:26-34: `flow_run` may be uninitialized [unbound-name]
- ERROR src/prefect/cli/deployment.py:532:29-37: `flow_run` may be uninitialized [unbound-name]
- ERROR src/prefect/cli/deployment.py:550:13-21: `flow_run` may be uninitialized [unbound-name]
- ERROR src/prefect/flow_runs.py:300:59-75: `run_input_keyset` may be uninitialized [unbound-name]
- ERROR src/prefect/flow_runs.py:309:51-67: `run_input_keyset` may be uninitialized [unbound-name]
- ERROR src/prefect/flow_runs.py:454:48-64: `run_input_keyset` may be uninitialized [unbound-name]
- ERROR src/prefect/flow_runs.py:465:44-60: `run_input_keyset` may be uninitialized [unbound-name]
- ERROR src/prefect/flows.py:2576:24-28: `flow` may be uninitialized [unbound-name]
- ERROR src/prefect/flows.py:2577:29-33: `flow` may be uninitialized [unbound-name]
- ERROR src/prefect/flows.py:2587:17-21: `flow` may be uninitialized [unbound-name]
- ERROR src/prefect/flows.py:2588:28-32: `flow` may be uninitialized [unbound-name]
- ERROR src/prefect/flows.py:2597:54-58: `flow` may be uninitialized [unbound-name]
- ERROR src/prefect/testing/utilities.py:230:17-24: `exclude` may be uninitialized [unbound-name]

vision (https://github.com/pytorch/vision)
- ERROR torchvision/datasets/cityscapes.py:154:43-57: `target_dir_zip` may be uninitialized [unbound-name]

jinja (https://github.com/pallets/jinja)
- ERROR src/jinja2/loaders.py:144:13-19: `bucket` may be uninitialized [unbound-name]
- ERROR src/jinja2/loaders.py:145:28-34: `bucket` may be uninitialized [unbound-name]

sockeye (https://github.com/awslabs/sockeye)
- ERROR sockeye_contrib/plot_metrics.py:209:13-16: `ax2` may be uninitialized [unbound-name]

mitmproxy (https://github.com/mitmproxy/mitmproxy)
- ERROR mitmproxy/flowfilter.py:313:35-42: `content` may be uninitialized [unbound-name]
- ERROR test/mitmproxy/proxy/test_mode_servers.py:421:9-15: `stream` may be uninitialized [unbound-name]
- ERROR test/mitmproxy/proxy/test_mode_servers.py:422:15-21: `stream` may be uninitialized [unbound-name]

strawberry (https://github.com/strawberry-graphql/strawberry)
- ERROR strawberry/annotation.py:146:56-64: `resolved` may be uninitialized [unbound-name]
- ERROR strawberry/annotation.py:147:28-36: `resolved` may be uninitialized [unbound-name]
- ERROR strawberry/annotation.py:152:39-47: `resolved` may be uninitialized [unbound-name]
- ERROR strawberry/annotation.py:154:32-40: `resolved` may be uninitialized [unbound-name]
- ERROR strawberry/annotation.py:156:28-36: `resolved` may be uninitialized [unbound-name]
- ERROR strawberry/annotation.py:159:50-58: `resolved` may be uninitialized [unbound-name]
- ERROR strawberry/annotation.py:161:16-24: `resolved` may be uninitialized [unbound-name]
- ERROR strawberry/utils/inspect.py:97:36-42: `origin` may be uninitialized [unbound-name]
- ERROR strawberry/utils/inspect.py:108:34-40: `origin` may be uninitialized [unbound-name]

paasta (https://github.com/yelp/paasta)
- ERROR paasta_tools/contrib/is_pod_healthy_in_proxy.py:129:16-27: `envoy_ready` may be uninitialized [unbound-name]

isort (https://github.com/pycqa/isort)
- ERROR isort/api.py:574:20-23: `key` may be uninitialized [unbound-name]
- ERROR isort/api.py:575:22-25: `key` may be uninitialized [unbound-name]

setuptools (https://github.com/pypa/setuptools)
- ERROR setuptools/_distutils/command/bdist_rpm.py:387:33-40: `rpm_dir` may be uninitialized [unbound-name]
- ERROR setuptools/_distutils/command/bdist_rpm.py:395:36-43: `rpm_dir` may be uninitialized [unbound-name]
- ERROR setuptools/_vendor/wheel/_commands/convert.py:241:43-48: `match` may be uninitialized [unbound-name]
- ERROR setuptools/_vendor/wheel/_commands/convert.py:242:36-41: `match` may be uninitialized [unbound-name]
- ERROR setuptools/_vendor/wheel/_commands/convert.py:243:33-38: `match` may be uninitialized [unbound-name]
- ERROR setuptools/_vendor/wheel/_commands/convert.py:247:32-37: `match` may be uninitialized [unbound-name]
- ERROR setuptools/_vendor/wheel/_commands/convert.py:248:37-42: `match` may be uninitialized [unbound-name]

schema_salad (https://github.com/common-workflow-language/schema_salad)
- ERROR schema_salad/codegen.py:115:17-20: `gen` may be uninitialized [unbound-name]
- ERROR schema_salad/codegen.py:117:17-20: `gen` may be uninitialized [unbound-name]
- ERROR schema_salad/codegen.py:118:13-16: `gen` may be uninitialized [unbound-name]
- ERROR schema_salad/codegen.py:123:17-20: `gen` may be uninitialized [unbound-name]
- ERROR schema_salad/codegen.py:143:13-16: `gen` may be uninitialized [unbound-name]
- ERROR schema_salad/codegen.py:152:13-16: `gen` may be uninitialized [unbound-name]
- ERROR schema_salad/codegen.py:168:34-37: `gen` may be uninitialized [unbound-name]
- ERROR schema_salad/codegen.py:168:49-52: `gen` may be uninitialized [unbound-name]
- ERROR schema_salad/codegen.py:169:21-24: `gen` may be uninitialized [unbound-name]
- ERROR schema_salad/codegen.py:184:35-38: `gen` may be uninitialized [unbound-name]
- ERROR schema_salad/codegen.py:190:39-42: `gen` may be uninitialized [unbound-name]
- ERROR schema_salad/codegen.py:192:39-42: `gen` may be uninitialized [unbound-name]
- ERROR schema_salad/codegen.py:194:39-42: `gen` may be uninitialized [unbound-name]
- ERROR schema_salad/codegen.py:202:39-42: `gen` may be uninitialized [unbound-name]
- ERROR schema_salad/codegen.py:208:39-42: `gen` may be uninitialized [unbound-name]
- ERROR schema_salad/codegen.py:218:35-38: `gen` may be uninitialized [unbound-name]
- ERROR schema_salad/codegen.py:223:17-20: `gen` may be uninitialized [unbound-name]
- ERROR schema_salad/codegen.py:225:13-16: `gen` may be uninitialized [unbound-name]
- ERROR schema_salad/codegen.py:230:5-8: `gen` may be uninitialized [unbound-name]
- ERROR schema_salad/codegen.py:230:18-21: `gen` may be uninitialized [unbound-name]
- ERROR schema_salad/jsonld_context.py:156:20-22: `ns` may be uninitialized [unbound-name]
- ERROR schema_salad/jsonld_context.py:157:43-45: `ns` may be uninitialized [unbound-name]
- ERROR schema_salad/jsonld_context.py:157:53-55: `ln` may be uninitialized [unbound-name]

pycryptodome (https://github.com/Legrandin/pycryptodome)
- ERROR lib/Crypto/IO/_PBES.py:336:16-32: `pbkdf2_hmac_algo` may be uninitialized [unbound-name]
- ERROR lib/Crypto/PublicKey/DSA.py:413:22-26: `seed` may be uninitialized [unbound-name]
- ERROR lib/Crypto/PublicKey/RSA.py:532:16-17: `q` may be uninitialized [unbound-name]
- ERROR lib/Crypto/PublicKey/RSA.py:532:19-20: `p` may be uninitialized [unbound-name]
- ERROR lib/Crypto/PublicKey/RSA.py:536:36-37: `p` may be uninitialized [unbound-name]
- ERROR lib/Crypto/PublicKey/RSA.py:536:41-42: `q` may be uninitialized [unbound-name]
- ERROR lib/Crypto/PublicKey/RSA.py:632:22-23: `p` may be uninitialized [unbound-name]
- ERROR lib/Crypto/PublicKey/RSA.py:637:17-18: `p` may be uninitialized [unbound-name]
- ERROR lib/Crypto/PublicKey/RSA.py:640:39-40: `p` may be uninitialized [unbound-name]
- ERROR lib/Crypto/PublicKey/RSA.py:657:26-27: `d` may be uninitialized [unbound-name]
- ERROR lib/Crypto/PublicKey/RSA.py:670:27-28: `p` may be uninitialized [unbound-name]
- ERROR lib/Crypto/PublicKey/RSA.py:670:38-39: `q` may be uninitialized [unbound-name]
- ERROR lib/Crypto/PublicKey/RSA.py:675:30-31: `u` may be uninitialized [unbound-name]
- ERROR lib/Crypto/PublicKey/RSA.py:675:35-36: `q` may be uninitialized [unbound-name]
- ERROR lib/Crypto/PublicKey/RSA.py:677:21-22: `p` may be uninitialized [unbound-name]
- ERROR lib/Crypto/PublicKey/RSA.py:677:29-30: `q` may be uninitialized [unbound-name]
- ERROR lib/Crypto/SelfTest/Signature/test_dss.py:339:20-31: `hash_module` may be uninitialized [unbound-name]
- ERROR lib/Crypto/SelfTest/Signature/test_dss.py:341:20-31: `hash_module` may be uninitialized [unbound-name]
- ERROR lib/Crypto/SelfTest/Signature/test_dss.py:372:16-27: `hash_module` may be uninitialized [unbound-name]

jax (https://github.com/google/jax)
- ERROR jax/experimental/jax2tf/examples/saved_model_main.py:206:26-36: `tolerances` may be uninitialized [unbound-name]
- ERROR jax/experimental/jax2tf/tests/shape_poly_test.py:139:73-77: `args` may be uninitialized [unbound-name]
- ERROR jax/experimental/jax2tf/tests/shape_poly_test.py:140:47-51: `args` may be uninitialized [unbound-name]
- ERROR jax/experimental/jax2tf/tests/shape_poly_test.py:161:22-26: `args` may be uninitialized [unbound-name]
- ERROR jax/experimental/jax2tf/tests/shape_poly_test.py:185:24-28: `args` may be uninitialized [unbound-name]
- ERROR jax/experimental/mosaic/gpu/wgmma.py:217:6-15: `a_in_regs` may be uninitialized [unbound-name]
- ERROR jax/experimental/mosaic/gpu/wgmma.py:272:8-17: `a_in_regs` may be uninitialized [unbound-name]
- ERROR jax/experimental/mosaic/gpu/wgmma.py:447:6-15: `a_in_regs` may be uninitialized [unbound-name]
- ERROR jax/experimental/mosaic/gpu/wgmma.py:454:10-19: `a_in_regs` may be uninitialized [unbound-name]

optuna (https://github.com/optuna/optuna)
- ERROR optuna/storages/_grpc/servicer.py:118:59-63: `name` may be uninitialized [unbound-name]
- ERROR optuna/storages/_grpc/servicer.py:136:26-36: `directions` may be uninitialized [unbound-name]
- ERROR optuna/visualization/matplotlib/_rank.py:96:25-27: `pc` may be uninitialized [unbound-name]

mypy (https://github.com/python/mypy)
- ERROR mypy/build.py:1715:62-64: `t0` may be uninitialized [unbound-name]
- ERROR mypy/build.py:1715:96-98: `t1` may be uninitialized [unbound-name]
- ERROR mypy/checkexpr.py:2608:45-57: `actual_types` may be uninitialized [unbound-name]
- ERROR mypy/checkexpr.py:2609:24-36: `actual_types` may be uninitialized [unbound-name]
- ERROR mypy/checkexpr.py:2609:44-60: `callee_arg_types` may be uninitialized [unbound-name]
- ERROR mypy/checkexpr.py:2615:24-40: `callee_arg_types` may be uninitialized [unbound-name]
- ERROR mypy/checkexpr.py:2615:49-61: `actual_types` may be uninitialized [unbound-name]
- ERROR mypy/checkexpr.py:2616:24-40: `callee_arg_types` may be uninitialized [unbound-name]
- ERROR mypy/checkexpr.py:2618:26-38: `actual_types` may be uninitialized [unbound-name]
- ERROR mypy/checkexpr.py:2618:54-70: `callee_arg_types` may be uninitialized [unbound-name]
- ERROR mypy/checkexpr.py:2618:72-88: `callee_arg_kinds` may be uninitialized [unbound-name]
- ERROR mypy/checkexpr.py:4317:13-22: `right_map` may be uninitialized [unbound-name]
- ERROR mypy/checkexpr.py:4344:43-63: `restricted_left_type` may be uninitialized [unbound-name]
- ERROR mypy/stubgenc.py:478:33-39: `output` may be uninitialized [unbound-name]
- ERROR mypy/stubgenc.py:478:53-59: `output` may be uninitialized [unbound-name]
- ERROR mypy/test/testpep561.py:67:25-29: `proc` may be uninitialized [unbound-name]
- ERROR mypy/test/testpep561.py:67:55-59: `proc` may be uninitialized [unbound-name]
- ERROR mypyc/irbuild/statement.py:1179:32-45: `stop_iter_val` may be uninitialized [unbound-name]

static-frame (https://github.com/static-frame/static-frame)
- ERROR static_frame/core/container_util.py:772:37-44: `aligned` may be uninitialized [unbound-name]
- ERROR static_frame/core/container_util.py:776:43-50: `aligned` may be uninitialized [unbound-name]
- ERROR static_frame/core/container_util.py:814:37-44: `aligned` may be uninitialized [unbound-name]
- ERROR static_frame/core/container_util.py:821:43-50: `aligned` may be uninitialized [unbound-name]
- ERROR static_frame/core/display.py:756:42-51: `max_width` may be uninitialized [unbound-name]
- ERROR static_frame/core/frame.py:2655:32-44: `index_arrays` may be uninitialized [unbound-name]
- ERROR static_frame/core/frame.py:6691:55-60: `order` may be uninitialized [unbound-name]
- ERROR static_frame/core/frame.py:6703:48-53: `order` may be uninitialized [unbound-name]
- ERROR static_frame/core/index_correspondence.py:127:47-60: `common_labels` may be uninitialized [unbound-name]
- ERROR static_frame/core/index_correspondence.py:128:47-60: `common_labels` may be uninitialized [unbound-name]
- ERROR static_frame/core/index_hierarchy.py:668:73-82: `label_row` may be uninitialized [unbound-name]
- ERROR static_frame/core/index_hierarchy.py:688:24-33: `label_row` may be uninitialized [unbound-name]
- ERROR static_frame/core/index_hierarchy.py:2029:29-40: `unmatchable` may be uninitialized [unbound-name]
- ERROR static_frame/core/index_hierarchy.py:3200:26-30: `name` may be uninitialized [unbound-name]
- ERROR static_frame/core/index_hierarchy.py:3208:22-26: `name` may be uninitialized [unbound-name]
- ERROR static_frame/core/index_hierarchy.py:3220:22-26: `name` may be uninitialized [unbound-name]
- ERROR static_frame/core/index_hierarchy.py:3227:18-22: `name` may be uninitialized [unbound-name]
- ERROR static_frame/core/quilt.py:1186:24-43: `component_is_series` may be uninitialized [unbound-name]
- ERROR static_frame/core/store_filter.py:208:12-20: `is_float` may be uninitialized [unbound-name]
- ERROR static_frame/core/type_blocks.py:1414:25-28: `pos` may be uninitialized [unbound-name]
- ERROR static_frame/core/type_blocks.py:1417:25-28: `pos` may be uninitialized [unbound-name]
- ERROR static_frame/core/type_blocks.py:1422:29-32: `pos` may be uninitialized [unbound-name]
- ERROR static_frame/core/type_blocks.py:1424:58-61: `pos` may be uninitialized [unbound-name]
- ERROR static_frame/core/type_blocks.py:1696:66-76: `dtype_last` may be uninitialized [unbound-name]
- ERROR static_frame/core/type_blocks.py:2278:20-35: `target_is_slice` may be uninitialized [unbound-name]
- ERROR static_frame/core/type_blocks.py:2295:37-52: `target_is_slice` may be uninitialized [unbound-name]
- ERROR static_frame/core/type_clinic.py:946:38-43: `u_zom` may be uninitialized [unbound-name]
- ERROR static_frame/core/util.py:1402:32-36: `rows` may be uninitialized [unbound-name]
- ERROR static_frame/core/util.py:2068:37-48: `values_post` may be uninitialized [unbound-name]
- ERROR static_frame/core/util.py:2919:35-44: `shift_mod` may be uninitialized [unbound-name]
- ERROR static_frame/core/util.py:2920:31-40: `shift_mod` may be uninitialized [unbound-name]

cwltool (https://github.com/common-workflow-language/cwltool)
- ERROR cwltool/checker.py:66:39-47: `_srctype` may be uninitialized [unbound-name]
- ERROR cwltool/job.py:708:38-46: `new_file` may be uninitialized [unbound-name]
- ERROR cwltool/job.py:711:41-49: `new_file` may be uninitialized [unbound-name]
- ERROR cwltool/job.py:713:48-56: `new_file` may be uninitialized [unbound-name]
- ERROR cwltool/job.py:715:52-60: `new_file` may be uninitialized [unbound-name]
- ERROR cwltool/job.py:716:35-43: `new_file` may be uninitialized [unbound-name]
- ERROR cwltool/main.py:391:31-44: `input_basedir` may be uninitialized [unbound-name]
- ERROR cwltool/main.py:1193:25-29: `tool` may be uninitialized [unbound-name]
- ERROR cwltool/main.py:1195:21-25: `tool` may be uninitialized [unbound-name]
- ERROR cwltool/main.py:1224:20-24: `tool` may be uninitialized [unbound-name]
- ERROR cwltool/main.py:1262:27-31: `tool` may be uninitialized [unbound-name]
- ERROR cwltool/main.py:1268:49-53: `tool` may be uninitialized [unbound-name]
- ERROR cwltool/main.py:1271:42-46: `tool` may be uninitialized [unbound-name]
- ERROR cwltool/main.py:1278:21-25: `tool` may be uninitialized [unbound-name]
- ERROR cwltool/main.py:1317:17-21: `tool` may be uninitialized [unbound-name]
- ERROR cwltool/validate_js.py:186:42-53: `jshint_json` may be uninitialized [unbound-name]

pip (https://github.com/pypa/pip)
- ERROR src/pip/_internal/network/auth.py:368:34-57: `index_url_user_password` may be uninitialized [unbound-name]
- ERROR src/pip/_internal/network/auth.py:371:24-47: `index_url_user_password` may be uninitialized [unbound-name]
- ERROR src/pip/_vendor/requests/utils.py:752:40-49: `old_value` may be uninitialized [unbound-name]
- ERROR src/pip/_vendor/urllib3/connectionpool.py:484:13-29: `httplib_response` may be uninitialized [unbound-name]
- ERROR src/pip/_vendor/urllib3/connectionpool.py:488:35-51: `httplib_response` may be uninitialized [unbound-name]
- ERROR src/pip/_vendor/urllib3/connectionpool.py:497:16-32: `httplib_response` may be uninitialized [unbound-name]
- ERROR src/pip/_vendor/urllib3/connectionpool.py:849:16-24: `response` may be uninitialized [unbound-name]
- ERROR src/pip/_vendor/urllib3/connectionpool.py:857:67-75: `response` may be uninitialized [unbound-name]
- ERROR src/pip/_vendor/urllib3/connectionpool.py:860:21-29: `response` may be uninitialized [unbound-name]
- ERROR src/pip/_vendor/urllib3/connectionpool.py:862:24-32: `response` may be uninitialized [unbound-name]
- ERROR src/pip/_vendor/urllib3/connectionpool.py:864:13-21: `response` may be uninitialized [unbound-name]
- ERROR src/pip/_vendor/urllib3/connectionpool.py:865:37-45: `response` may be uninitialized [unbound-name]
- ERROR src/pip/_vendor/urllib3/connectionpool.py:884:32-40: `response` may be uninitialized [unbound-name]
- ERROR src/pip/_vendor/urllib3/connectionpool.py:885:37-45: `response` may be uninitialized [unbound-name]
- ERROR src/pip/_vendor/urllib3/connectionpool.py:887:67-75: `response` may be uninitialized [unbound-name]
- ERROR src/pip/_vendor/urllib3/connectionpool.py:890:21-29: `response` may be uninitialized [unbound-name]
- ERROR src/pip/_vendor/urllib3/connectionpool.py:892:24-32: `response` may be uninitialized [unbound-name]
- ERROR src/pip/_vendor/urllib3/connectionpool.py:894:13-21: `response` may be uninitialized [unbound-name]
- ERROR src/pip/_vendor/urllib3/connectionpool.py:895:27-35: `response` may be uninitialized [unbound-name]
- ERROR src/pip/_vendor/urllib3/connectionpool.py:913:16-24: `response` may be uninitialized [unbound-name]

cryptography (https://github.com/pyca/cryptography)
- ERROR tests/hazmat/primitives/utils.py:162:36-45: `plaintext` may be uninitialized [unbound-name]
- ERROR src/cryptography/hazmat/primitives/asymmetric/rsa.py:298:20-21: `p` may be uninitialized [unbound-name]
- ERROR src/cryptography/hazmat/primitives/serialization/ssh.py:1121:13-22: `cert_body` may be uninitialized [unbound-name]

pywin32 (https://github.com/mhammond/pywin32)
- ERROR Pythonwin/pywin/test/_exetestscript.py:19:12-17: `fnout` may be uninitialized [unbound-name]
- ERROR win32/scripts/VersionStamp/BrandProject.py:87:30-34: `args` may be uninitialized [unbound-name]
- ERROR win32/scripts/VersionStamp/BrandProject.py:88:16-20: `args` may be uninitialized [unbound-name]
- ERROR win32/scripts/VersionStamp/BrandProject.py:89:12-16: `args` may be uninitialized [unbound-name]

websockets (https://github.com/aaugustin/websockets)
- ERROR src/websockets/asyncio/connection.py:1243:51-61: `exceptions` may be uninitialized [unbound-name]
- ERROR src/websockets/client.py:319:54-62: `response` may be uninitialized [unbound-name]
- ERROR src/websockets/client.py:321:35-43: `response` may be uninitialized [unbound-name]
- ERROR src/websockets/client.py:323:20-28: `response` may be uninitialized [unbound-name]
- ERROR src/websockets/client.py:324:66-74: `response` may be uninitialized [unbound-name]
- ERROR src/websockets/client.py:327:39-47: `response` may be uninitialized [unbound-name]
- ERROR src/websockets/client.py:329:17-25: `response` may be uninitialized [unbound-name]
- ERROR src/websockets/client.py:330:36-44: `response` may be uninitialized [unbound-name]
- ERROR src/websockets/client.py:339:32-40: `response` may be uninitialized [unbound-name]
- ERROR src/websockets/legacy/protocol.py:1631:51-61: `exceptions` may be uninitialized [unbound-name]
- ERROR src/websockets/server.py:562:35-42: `request` may be uninitialized [unbound-name]
- ERROR src/websockets/server.py:565:32-39: `request` may be uninitialized [unbound-name]

CPython (Argument Clinic) (https://github.com/python/cpython)
- ERROR Tools/clinic/libclinic/parse_args.py:734:50-61: `argname_fmt` may be uninitialized [unbound-name]
- ERROR Tools/clinic/libclinic/parse_args.py:776:36-47: `argname_fmt` may be uninitialized [unbound-name]
- ERROR Tools/clinic/libclinic/parse_args.py:787:44-53: `add_label` may be uninitialized [unbound-name]

sphinx (https://github.com/sphinx-doc/sphinx)
- ERROR sphinx/builders/_epub_base.py:376:21-23: `nr` may be uninitialized [unbound-name]
- ERROR sphinx/builders/_epub_base.py:379:52-55: `doc` may be uninitialized [unbound-name]
- ERROR sphinx/builders/_epub_base.py:383:21-27: `fn_idx` may be uninitialized [unbound-name]
- ERROR sphinx/ext/autodoc/_dynamic/_member_finder.py:725:19-23: `item` may be uninitialized [unbound-name]
- ERROR sphinx/ext/autodoc/_legacy_class_based/_documenters.py:378:40-46: `retann` may be uninitialized [unbound-name]
- ERROR sphinx/ext/autodoc/_legacy_class_based/_documenters.py:378:51-57: `retann` may be uninitialized [unbound-name]
- ERROR sphinx/ext/autodoc/typehints.py:145:16-19: `arg` may be uninitialized [unbound-name]
- ERROR sphinx/pycode/__init__.py:123:16-19: `obj` may be uninitialized [unbound-name]
- ERROR sphinx/pycode/parser.py:227:16-19: `tok` may be uninitialized [unbound-name]
- ERROR sphinx/pycode/parser.py:230:12-15: `tok` may be uninitialized [unbound-name]
- ERROR sphinx/pycode/parser.py:235:12-15: `tok` may be uninitialized [unbound-name]
- ERROR sphinx/pycode/parser.py:236:28-31: `tok` may be uninitialized [unbound-name]
- ERROR sphinx/util/parallel.py:90:28-37: `collector` may be uninitialized [unbound-name]

meson (https://github.com/mesonbuild/meson)
- ERROR mesonbuild/compilers/cuda.py:457:66-69: `val` may be uninitialized [unbound-name]
- ERROR mesonbuild/compilers/cuda.py:458:82-85: `val` may be uninitialized [unbound-name]
- ERROR mesonbuild/compilers/cuda.py:464:61-64: `val` may be uninitialized [unbound-name]
- ERROR mesonbuild/compilers/cuda.py:467:20-23: `val` may be uninitialized [unbound-name]
- ERROR mesonbuild/compilers/cuda.py:471:40-43: `val` may be uninitialized [unbound-name]
- ERROR mesonbuild/compilers/cuda.py:472:22-25: `val` may be uninitialized [unbound-name]
- ERROR mesonbuild/compilers/cuda.py:474:40-43: `val` may be uninitialized [unbound-name]
- ERROR mesonbuild/compilers/cuda.py:476:40-43: `val` may be uninitialized [unbound-name]
- ERROR mesonbuild/compilers/cuda.py:478:36-39: `val` may be uninitialized [unbound-name]
- ERROR mesonbuild/compilers/cuda.py:480:40-43: `val` may be uninitialized [unbound-name]
- ERROR mesonbuild/compilers/cuda.py:483:31-34: `val` may be uninitialized [unbound-name]
- ERROR mesonbuild/compilers/detect.py:409:20-23: `cls` may be uninitialized [unbound-name]
- ERROR mesonbuild/modules/_qt.py:756:64-71: `results` may be uninitialized [unbound-name]
- ERROR mesonbuild/rewriter.py:747:57-69: `tgt_function` may be uninitialized [unbound-name]
- ERROR mesonbuild/rewriter.py:748:16-28: `tgt_function` may be uninitialized [unbound-name]
- ERROR mesonbuild/rewriter.py:749:41-53: `tgt_function` may be uninitialized [unbound-name]
- ERROR mesonbuild/rewriter.py:761:13-25: `tgt_function` may be uninitialized [unbound-name]
- ERROR mesonbuild/rewriter.py:764:101-104: `old` may be uninitialized [unbound-name]
- ERROR mesonbuild/scripts/clangtidy.py:69:16-24: `applyret` may be uninitialized [unbound-name]
- ERROR mesonbuild/scripts/coverage.py:58:51-64: `gcovr_version` may be uninitialized [unbound-name]
- ERROR mesonbuild/scripts/coverage.py:69:51-64: `gcovr_version` may be uninitialized [unbound-name]
- ERROR mesonbuild/scripts/coverage.py:80:51-64: `gcovr_version` may be uninitialized [unbound-name]
- ERROR mesonbuild/scripts/coverage.py:158:53-66: `gcovr_version` may be uninitialized [unbound-name]
- ERROR mesonbuild/scripts/coverage.py:165:41-54: `gcovr_version` may be uninitialized [unbound-name]
- ERROR mesonbuild/scripts/symbolextractor.py:136:35-40: `match` may be uninitialized [unbound-name]
- ERROR run_project_tests.py:1342:62-68: `result` may be uninitialized [unbound-name]
- ERROR run_project_tests.py:1367:13-19: `result` may be uninitialized [unbound-name]
- ERROR run_project_tests.py:1370:41-47: `result` may be uninitialized [unbound-name]
- ERROR run_project_tests.py:1372:64-70: `result` may be uninitialized [unbound-name]
- ERROR run_project_tests.py:1376:12-18: `result` may be uninitialized [unbound-name]
- ERROR run_project_tests.py:1378:41-47: `result` may be uninitialized [unbound-name]
- ERROR run_project_tests.py:1379:41-47: `result` may be uninitialized [unbound-name]
- ERROR run_project_tests.py:1393:46-52: `result` may be uninitialized [unbound-name]
- ERROR run_project_tests.py:1393:76-82: `result` may be uninitialized [unbound-name]
- ERROR run_project_tests.py:1394:16-22: `result` may be uninitialized [unbound-name]
- ERROR run_project_tests.py:1394:55-61: `result` may be uninitialized [unbound-name]
- ERROR run_project_tests.py:1398:37-43: `result` may be uninitialized [unbound-name]
- ERROR run_project_tests.py:1403:37-43: `result` may be uninitialized [unbound-name]
- ERROR run_project_tests.py:1404:37-43: `result` may be uninitialized [unbound-name]
- ERROR run_project_tests.py:1406:37-43: `result` may be uninitialized [unbound-name]
- ERROR run_project_tests.py:1407:28-34: `result` may be uninitialized [unbound-name]
- ERROR run_project_tests.py:1409:33-39: `result` may be uninitialized [unbound-name]
- ERROR run_project_tests.py:1424:22-28: `result` may be uninitialized [unbound-name]
- ERROR run_project_tests.py:1425:23-29: `result` may be uninitialized [unbound-name]
- ERROR run_project_tests.py:1426:22-28: `result` may be uninitialized [unbound-name]
- ERROR run_project_tests.py:1428:40-46: `result` may be uninitialized [unbound-name]
- ERROR run_project_tests.py:1434:12-18: `result` may be uninitialized [unbound-name]
- ERROR run_project_tests.py:1435:64-70: `result` may be uninitialized [unbound-name]
- ERROR run_project_tests.py:1437:23-29: `result` may be uninitialized [unbound-name]
- ERROR run_project_tests.py:1439:23-29: `result` may be uninitialized [unbound-name]
- ERROR run_project_tests.py:1719:43-56: `failing_tests` may be uninitialized [unbound-name]
- ERROR run_project_tests.py:1721:8-21: `failing_tests` may be uninitialized [unbound-name]
- ERROR run_project_tests.py:1732:22-35: `failing_tests` may be uninitialized [unbound-name]
- ERROR test cases/common/226 link depends indexed custom target/check_arch.py:28:6-10: `arch` may be uninitialized [unbound-name]
- ERROR test cases/common/226 link depends indexed custom target/check_arch.py:31:4-8: `arch` may be uninitialized [unbound-name]
- ERROR test cases/common/226 link depends indexed custom target/check_arch.py:32:64-68: `arch` may be uninitialized [unbound-name]
- ERROR unittests/linuxliketests.py:794:40-48: `c98_comp` may be uninitialized [unbound-name]
- ERROR unittests/linuxliketests.py:796:40-48: `c11_comp` may be uninitialized [unbound-name]
- ERROR unittests/linuxliketests.py:797:40-50: `plain_comp` may be uninitialized [unbound-name]
- ERROR unittests/linuxliketests.py:798:40-50: `plain_comp` may be uninitialized [unbound-name]
- ERROR unittests/linuxliketests.py:800:34-44: `plain_comp` may be uninitialized [unbound-name]
- ERROR unittests/linuxliketests.py:801:37-45: `c98_comp` may be uninitialized [unbound-name]

CPython (cases_generator) (https://github.com/python/cpython)
- ERROR Tools/cases_generator/optimizer_generator.py:416:56-63: `storage` may be uninitialized [unbound-name]
- ERROR Tools/cases_generator/plexer.py:84:50-53: `tkn` may be uninitialized [unbound-name]

cibuildwheel (https://github.com/pypa/cibuildwheel)
- ERROR cibuildwheel/platforms/pyodide.py:546:41-55: `repaired_wheel` may be uninitialized [unbound-name]
- ERROR cibuildwheel/platforms/pyodide.py:549:28-42: `repaired_wheel` may be uninitialized [unbound-name]

scrapy (https://github.com/scrapy/scrapy)
- ERROR scrapy/logformatter.py:126:38-43: `level` may be uninitialized [unbound-name]
- ERROR scrapy/logformatter.py:128:22-27: `level` may be uninitialized [unbound-name]
- ERROR tests/utils/cmdline.py:38:26-27: `p` may be uninitialized [unbound-name]
- ERROR tests/utils/cmdline.py:38:36-37: `p` may be uninitialized [unbound-name]

psycopg (https://github.com/psycopg/psycopg)
- ERROR psycopg/psycopg/_connection_base.py:267:45-51: `status` may be uninitialized [unbound-name]
- ERROR psycopg/psycopg/_copy_base.py:94:38-44: `result` may be uninitialized [unbound-name]
- ERROR psycopg/psycopg/_dns.py:151:64-72: `ports_in` may be uninitialized [unbound-name]
- ERROR psycopg/psycopg/_dns.py:156:41-49: `ports_in` may be uninitialized [unbound-name]
- ERROR psycopg/psycopg/connection.py:448:23-31: `pipeline` may be uninitialized [unbound-name]
- ERROR psycopg/psycopg/connection.py:450:16-24: `pipeline` may be uninitialized [unbound-name]
- ERROR psycopg/psycopg/connection.py:452:28-36: `pipeline` may be uninitialized [unbound-name]
- ERROR psycopg/psycopg/connection_async.py:483:23-31: `pipeline` may be uninitialized [unbound-name]
- ERROR psycopg/psycopg/connection_async.py:485:16-24: `pipeline` may be uninitialized [unbound-name]
- ERROR psycopg/psycopg/connection_async.py:487:28-36: `pipeline` may be uninitialized [unbound-name]
- ERROR psycopg/psycopg/generators.py:165:12-17: `ready` may be uninitialized [unbound-name]
- ERROR psycopg/psycopg/generators.py:254:12-17: `ready` may be uninitialized [unbound-name]
- ERROR psycopg/psycopg/generators.py:278:12-17: `ready` may be uninitialized [unbound-name]
- ERROR psycopg/psycopg/types/json.py:123:28-31: `key` may be uninitialized [unbound-name]
- ERROR psycopg/psycopg/types/json.py:143:28-31: `key` may be uninitialized [unbound-name]
- ERROR psycopg/psycopg/types/numeric.py:71:34-39: `value` may be uninitialized [unbound-name]
- ERROR psycopg/psycopg/types/numeric.py:73:16-21: `value` may be uninitialized [unbound-name]
- ERROR psycopg/psycopg/types/numeric.py:73:46-51: `value` may be uninitialized [unbound-name]
- ERROR psycopg/psycopg/types/range.py:480:22-26: `item` may be uninitialized [unbound-name]
- ERROR psycopg_pool/psycopg_pool/sched.py:83:24-28: `task` may be uninitialized [unbound-name]
- ERROR psycopg_pool/psycopg_pool/sched.py:86:21-25: `task` may be uninitialized [unbound-name]
- ERROR psycopg_pool/psycopg_pool/sched.py:90:25-29: `task` may be uninitialized [unbound-name]
- ERROR psycopg_pool/psycopg_pool/sched_async.py:86:24-28: `task` may be uninitialized [unbound-name]
- ERROR psycopg_pool/psycopg_pool/sched_async.py:89:27-31: `task` may be uninitialized [unbound-name]
- ERROR psycopg_pool/psycopg_pool/sched_async.py:93:25-29: `task` may be uninitialized [unbound-name]
- ERROR tests/test_adapt.py:452:35-38: `obj` may be uninitialized [unbound-name]
- ERROR tests/test_adapt.py:458:28-31: `obj` may be uninitialized [unbound-name]
- ERROR tests/test_rows.py:156:19-26: `factory` may be uninitialized [unbound-name]
- ERROR tests/test_rows.py:157:8-15: `factory` may be uninitialized [unbound-name]
- ERROR tests/test_rows.py:158:19-26: `factory` may be uninitialized [unbound-name]
- ERROR tests/test_rows.py:160:12-19: `factory` may be uninitialized [unbound-name]

stone (https://github.com/dropbox/stone)
- ERROR stone/backends/python_rsrc/stone_base.py:20:9-15: `typing` may be uninitialized [unbound-name]

alerta (https://github.com/alerta/alerta)
- ERROR alerta/utils/api.py:85:21-28: `updated` may be uninitialized [unbound-name]

Tanjun (https://github.com/FasterSpeeding/Tanjun)
- ERROR tanjun/_internal/cache.py:74:16-23: `channel` may be uninitialized [unbound-name]
- ERROR tanjun/_internal/cache.py:82:24-31: `channel` may be uninitialized [unbound-name]
- ERROR tanjun/parsing.py:585:75-80: `value` may be uninitialized [unbound-name]
- ERROR tanjun/parsing.py:588:112-118: `values` may be uninitialized [unbound-name]

apprise (https://github.com/caronc/apprise)
- ERROR apprise/plugins/msteams.py:490:17-27: `notify_url` may be uninitialized [unbound-name]
- ERROR apprise/plugins/sendpulse.py:564:47-51: `item` may be uninitialized [unbound-name]
- ERROR apprise/plugins/sendpulse.py:573:21-25: `item` may be uninitialized [unbound-name]
- ERROR apprise/plugins/sendpulse.py:575:48-52: `item` may be uninitialized [unbound-name]

@github-actions
Copy link

github-actions bot commented Mar 6, 2026

Primer Diff Classification

❌ 9 regression(s) | ✅ 45 improvement(s) | 54 project(s) total

9 regression(s) across urllib3, hydpy, dd-trace-py, cloud-init, mitmproxy, paasta, setuptools, static-frame, alerta. error kinds: unbound-name. caused by lookup_name(). 45 improvement(s) across kornia, trio, aiortc, yarl, poetry, dragonchain, discord.py, core, check-jsonschema, tornado, mongo-python-driver, pyodide, pandera, PyGithub, zulip, bokeh, typeshed-stats, mkosi, pyjwt, mkdocs, pyppeteer, prefect, vision, jinja, sockeye, strawberry, isort, schema_salad, pycryptodome, jax, optuna, mypy, cwltool, pip, cryptography, pywin32, websockets, sphinx, meson, cibuildwheel, scrapy, psycopg, stone, Tanjun, apprise.

Project Verdict Changes Error Kinds Root Cause
kornia ✅ Improvement -49 unbound-name lookup_name()
urllib3 ❌ Regression -16 unbound-name lookup_name()
trio ✅ Improvement -7 unbound-name lookup_name()
aiortc ✅ Improvement -2 unbound-name lookup_name()
hydpy ❌ Regression -6 unbound-name lookup_name()
dd-trace-py ❌ Regression -2 unbound-name lookup_name()
yarl ✅ Improvement -5 unbound-name lookup_name()
poetry ✅ Improvement -3 unbound-name lookup_name()
dragonchain ✅ Improvement -1 unbound-name lookup_name()
discord.py ✅ Improvement -1 unbound-name lookup_name()
cloud-init ❌ Regression -10 unbound-name lookup_name()
core ✅ Improvement -324 unbound-name lookup_name()
check-jsonschema ✅ Improvement -1 unbound-name lookup_name()
tornado ✅ Improvement -3 unbound-name lookup_name()
mongo-python-driver ✅ Improvement -18 unbound-name lookup_name()
pyodide ✅ Improvement -8 unbound-name lookup_name()
pandera ✅ Improvement -89 unbound-name lookup_name()
PyGithub ✅ Improvement -2 unbound-name lookup_name()
zulip ✅ Improvement -76 unbound-name lookup_name()
bokeh ✅ Improvement -7 unbound-name lookup_name()
typeshed-stats ✅ Improvement -1 unbound-name lookup_name()
mkosi ✅ Improvement -10 unbound-name lookup_name()
pyjwt ✅ Improvement -4 unbound-name lookup_name()
mkdocs ✅ Improvement -5 unbound-name lookup_name()
pyppeteer ✅ Improvement -2 unbound-name lookup_name()
prefect ✅ Improvement -20 unbound-name lookup_name()
vision ✅ Improvement -1 unbound-name lookup_name()
jinja ✅ Improvement -2 unbound-name lookup_name()
sockeye ✅ Improvement -1 unbound-name lookup_name()
mitmproxy ❌ Regression -3 unbound-name lookup_name()
strawberry ✅ Improvement -9 unbound-name lookup_name()
paasta ❌ Regression -1 unbound-name lookup_name()
isort ✅ Improvement -2 unbound-name lookup_name()
setuptools ❌ Regression -7 unbound-name lookup_name()
schema_salad ✅ Improvement -23 unbound-name lookup_name()
pycryptodome ✅ Improvement -19 unbound-name lookup_name()
jax ✅ Improvement -9 unbound-name lookup_name()
optuna ✅ Improvement -3 unbound-name lookup_name()
mypy ✅ Improvement -18 unbound-name lookup_name()
static-frame ❌ Regression -31 unbound-name lookup_name()
cwltool ✅ Improvement -16 unbound-name lookup_name()
pip ✅ Improvement -20 unbound-name lookup_name()
cryptography ✅ Improvement -3 unbound-name lookup_name()
pywin32 ✅ Improvement -4 unbound-name lookup_name()
websockets ✅ Improvement -12 unbound-name lookup_name()
sphinx ✅ Improvement -13 unbound-name lookup_name()
meson ✅ Improvement -59 unbound-name lookup_name()
cibuildwheel ✅ Improvement -2 unbound-name lookup_name()
scrapy ✅ Improvement -4 unbound-name lookup_name()
psycopg ✅ Improvement -31 unbound-name lookup_name()
stone ✅ Improvement -1 unbound-name lookup_name()
alerta ❌ Regression -1 unbound-name lookup_name()
Tanjun ✅ Improvement -4 unbound-name lookup_name()
apprise ✅ Improvement -4 unbound-name lookup_name()
Detailed analysis

❌ Regression (9)

urllib3 (-16)

The removed errors were catching genuine bugs in the urllib3 test code. In server_client_ssl_contexts(), both server_context and client_context are only assigned inside conditional if hasattr() blocks (lines 23-24 and 27-28), but are then used unconditionally (lines 25, 30, 31). If the hasattr() checks fail, these variables would be undefined at runtime, causing NameError. The PR change modified pyrefly's control flow analysis to suppress duplicate 'may be uninitialized' warnings after a successful read, but this removed detection of the actual bugs. This is a regression because pyrefly lost the ability to catch real initialization issues.
Attribution: The change to lookup_name() in pyrefly/lib/binding/bindings.rs modified how variable initialization tracking works. When a conditionally-initialized variable is successfully read, the new logic calls define_in_current_flow() to mark it as initialized in the current flow, which suppresses follow-on 'may be uninitialized' errors on subsequent uses of the same variable.

hydpy (-6)

This appears to be a regression. The PR changes pyrefly's flow analysis to suppress duplicate 'may be uninitialized' errors after a successful variable read, but this risks masking legitimate uninitialized variable warnings. The removed errors were flagging real potential runtime issues where variables might not be initialized in all code paths before use. While the intent is to reduce noise from duplicate errors on the same variable, the implementation may be too aggressive and could miss genuine initialization problems. The test case in the PR shows the intended behavior - after one 'may be uninitialized' error, subsequent uses of the same variable don't generate additional errors. However, without seeing the specific code contexts where errors were removed, it's concerning that legitimate initialization warnings may have been suppressed.
Attribution: The change in pyrefly/lib/binding/bindings.rs in the lookup_name() method now updates the flow state when a conditionally or deferred-check initialized variable is successfully read. Specifically, when may_prove_initialized is true and the variable has InitializedInFlow::Conditionally or InitializedInFlow::DeferredCheck(_) status, pyrefly now calls define_in_current_flow() to mark the variable as initialized in the current flow. This suppresses follow-on 'may be uninitialized' errors on the same variable in the surviving execution path.

dd-trace-py (-2)

This is a REGRESSION. Both removed errors were correctly identifying real bugs where variables could be accessed before initialization:

  1. ddtrace kinesis.py line 54: The variable data_json is assigned inside a try block (line 43) but used outside it (line 54). If json.dumps(data_obj) raises an exception, execution jumps to the except block (line 44-45) which only logs a warning, then continues to line 47 where data_json would be undefined. The code should either initialize data_json before the try block or handle the undefined case.

  2. ddtrace _gevent.py line 101: The variable target_id is assigned via walrus operator on line 81: if (target_id := thread.get_ident(target)) not in _tracked_greenlets:. If this assignment fails (e.g., thread.get_ident(target) raises an exception), target_id would be undefined when accessed on line 101. The code structure suggests this is a real possibility since there are try/except blocks around similar operations.

The PR change makes pyrefly assume that successfully reading a conditionally-initialized variable proves it's initialized on subsequent reads. However, this is incorrect for these cases where the variable genuinely might not be initialized due to exception handling or control flow. Removing these errors means pyrefly will no longer catch these potential NameError bugs.

Attribution: The change to lookup_name() in pyrefly/lib/binding/bindings.rs now updates the current flow when a conditionally/deferred-check initialized name is successfully read, suppressing follow-on 'may be uninitialized' errors on the surviving path.

cloud-init (-10)

These removed errors were catching genuine bugs where variables could be used before initialization. In opensuse.py line 176, hostname is only assigned inside a try block (line 171) but the return statement at line 176 executes regardless of whether the try succeeded. If the IOError exception occurs, hostname remains unbound when returned. In freebsd.py line 43, net_config is only assigned in the if/elif branches (lines 22-30) but used unconditionally at line 43 - if neither condition matches, net_config would be unbound. The PR change makes pyrefly suppress follow-on errors after the first read of a potentially uninitialized variable, but this masks real initialization bugs rather than fixing them. The test case in the diff shows this is intentional behavior ('print(x)' twice, only first flagged), but removing detection of genuine unbound variable usage in real codebases is a regression.
Attribution: The change to lookup_name() in pyrefly/lib/binding/bindings.rs now updates the current flow when a conditionally/deferred-check initialized name is read, effectively marking it as initialized after the first read. This suppresses subsequent 'may be uninitialized' errors on the same variable.

mitmproxy (-3)

These removed errors were catching genuine bugs where variables could be unbound at runtime. In mitmproxy/flowfilter.py:313, the walrus operator content := f.response.get_content(strict=False) only assigns to content if the result is not None, but the subsequent self.re.search(content) assumes content exists. In the test file, stream is only assigned in the TCP/UDP branches but used unconditionally afterward. The PR change makes pyrefly suppress these legitimate warnings by treating a successful read as proof of initialization, which is incorrect - a variable can still be unbound even if accessed. This reduces pyrefly's ability to catch real NameError bugs.
Attribution: The change to lookup_name() in pyrefly/lib/binding/bindings.rs now updates the current flow when a conditionally/deferred-initialized name is read, effectively marking it as initialized on the surviving path. This suppresses follow-on 'may be uninitialized' errors for the same variable.

paasta (-1)

This is a regression. The removed error was correctly identifying a real bug in the code. Looking at the control flow: if args.envoy_readiness_check_enabled is True (line 100) but args.envoy_check_mode is neither 'admin-port' nor 'eds-dir' (lines 101, 110), then neither branch of the if-elif statement executes, so envoy_ready is never assigned. However, line 129 unconditionally tries to access envoy_ready. This would cause a NameError at runtime. The PR change made pyrefly's flow analysis less precise by assuming that a successful read of a conditionally initialized variable proves it's initialized on subsequent accesses, but that's not always correct - the variable could still be uninitialized on some paths.
Attribution: The change to lookup_name() in pyrefly/lib/binding/bindings.rs now updates the current flow when a conditionally initialized name is successfully read, which suppresses the follow-on 'may be uninitialized' error on the surviving path. This removed the unbound-name error that was correctly flagging the potential NameError.

setuptools (-7)

This is a regression. The removed errors were correctly identifying real bugs where variables could be uninitialized on certain execution paths. In the first error, rpm_dir is only defined in the else branch (lines 291-295) when not self.spec_only, but it's used unconditionally later at line 387 in rpm_dir['SRPMS']. If self.spec_only is True, rpm_dir would be undefined, causing a NameError. The second error has the same issue at line 395. The PR change to suppress follow-on uninitialized errors after a successful read is overly aggressive - it's removing detection of genuine uninitialized variable bugs, not just duplicate error messages.
Attribution: The change to lookup_name() in pyrefly/lib/binding/bindings.rs now updates the current flow when a conditionally/deferred-check initialized name is successfully read. This suppresses follow-on 'may be uninitialized' errors on surviving paths, which removed these legitimate unbound-name detections.

static-frame (-31)

This appears to be a regression. The PR description states it fixes 'duplicate follow-on' errors, but the removed errors seem to be catching legitimate uninitialized variable bugs. In the matmul function, variables like aligned (line 751) and right (line 772) are conditionally assigned but then used unconditionally later. These represent real potential runtime errors where NameError could occur if the initialization conditions aren't met. While the PR aims to reduce noise from duplicate errors, it appears to be suppressing valid warnings about genuinely problematic code patterns. The static_frame project is well-tested, but uninitialized variable detection is a fundamental safety check that shouldn't be relaxed without careful consideration of whether the flagged patterns are actually safe.
Attribution: The change to lookup_name() in pyrefly/lib/binding/bindings.rs now updates the current flow when a name is successfully read and was previously marked as Conditionally or DeferredCheck initialized. This means that after a successful read, pyrefly assumes the variable is now initialized in the surviving execution path, suppressing follow-on 'may be uninitialized' errors for the same variable.

alerta (-1)

This is a regression. The removed error was correctly identifying a real bug where updated could be referenced before assignment. In the exception handling path (lines 79-83), if a plugin call throws an exception, updated is never assigned but execution continues to line 84 where it's referenced. The PR change appears to have made pyrefly too lenient about uninitialized variable detection, causing it to miss this legitimate issue.
Attribution: The change to lookup_name() in pyrefly/lib/binding/bindings.rs added logic to suppress 'may be uninitialized' errors when a name is read, treating the read as proof of initialization. However, this suppresses legitimate uninitialized variable detection.

✅ Improvement (45)

kornia (-49)

These were false positive unbound-name errors. The variable invalid_data is always initialized through tuple unpacking from _preproc_dict_data(), which returns a 4-tuple where the fourth element is either a dictionary or None. Pyrefly was incorrectly tracking initialization state and flagging the variable as potentially uninitialized on subsequent uses, even though tuple unpacking guarantees initialization. The PR fix correctly updates the flow analysis so that after a successful read of a conditionally-initialized variable, subsequent reads don't generate duplicate errors.
Attribution: The change to lookup_name() in pyrefly/lib/binding/bindings.rs now updates the current flow when a conditionally-initialized name is successfully read, marking it as initialized for subsequent uses. This prevents the false positive 'may be uninitialized' errors on the second reference to invalid_data.

trio (-7)

The removed errors were false positives. In the Trio code, msg is assigned on line 2875 and used on line 2907, while task._abort_func is assigned from msg.abort_func on line 2909. The control flow guarantees these variables are initialized before use - they're in the same else branch after checking if final_outcome is not None. The PR fix correctly recognizes that a successful read of a conditionally initialized variable proves it's initialized on that execution path, eliminating these false positive 'may be uninitialized' errors.
Attribution: The change to lookup_name() in pyrefly/lib/binding/bindings.rs now updates the current flow when a name read proves initialization for conditionally or deferred-check initialized variables. This allows the type checker to recognize that successful reads of potentially uninitialized variables actually prove they are initialized on the surviving execution path.

aiortc (-2)

These were false positive unbound-name errors. In the PlayerStreamTrack.recv() method, data_time is always initialized before use:

  1. Line 241-244: data_time gets assigned either data.time (if Frame) or float(data.pts * data.time_base) (if Packet)
  2. Lines 247-251: The conditional check ensures we only enter the throttling block when conditions are met
  3. Lines 253 and 255: data_time is used, but it's guaranteed to be initialized from step 1

The PR description confirms this fix: 'runtime name reads now update the current flow only when the name was Conditionally or DeferredCheck initialized. That means a successful read suppresses the duplicate follow-on "may be uninitialized" error on the surviving path.' The code shows data_time is definitely initialized before the conditional block, so the errors were incorrect.

Attribution: The change to lookup_name() in pyrefly/lib/binding/bindings.rs now updates the current flow when a conditionally/deferred-check initialized name is successfully read, which suppresses duplicate 'may be uninitialized' errors on surviving paths without affecting definitely-uninitialized cases.

yarl (-5)

The removed errors were false positives caused by pyrefly's flow analysis not properly tracking that successful variable reads prove initialization on the surviving execution path. In the host_port_subcomponent method, the walrus operator (raw := self.raw_host) assigns raw when self.raw_host is not None, and the function returns early when it is None. Therefore, lines 827-828 are only reachable when raw has been initialized. Similarly, in the join method, join_path is assigned via walrus operator and only used within the conditional block where it was assigned. The PR fix correctly updates the flow analysis to suppress these duplicate 'may be uninitialized' warnings after a successful read proves the variable is initialized.
Attribution: The change to lookup_name() in pyrefly/lib/binding/bindings.rs now updates the current flow when a conditionally initialized variable is successfully read, suppressing follow-on 'may be uninitialized' errors on the surviving execution path. This matches the PR description's intent to fix false positive unbound-name errors.

poetry (-3)

The removed errors were false positives. The walrus operator installed_package := self._installed_packages.get(current_package.name) on line 151 guarantees that installed_package is bound to a non-None value before the if block (lines 155-157) executes. Pyrefly's control flow analysis was incorrectly treating subsequent uses as potentially uninitialized. The PR fix correctly recognizes that a successful read of a conditionally-initialized variable proves it was initialized, suppressing duplicate warnings on the same flow path.
Attribution: The change to lookup_name() in pyrefly/lib/binding/bindings.rs now updates the current flow when a conditionally-initialized variable is successfully read, suppressing follow-on uninitialized errors in the same flow path.

dragonchain (-1)

This is an improvement. The original error was a false positive - if r were truly uninitialized, the code would crash on line 87 when accessing r.status_code, not on line 91. The successful execution of line 87 proves that r was initialized by the requests.get() call, making the error on line 91 incorrect. The PR fixed the control flow analysis to recognize that a successful read of a conditionally-initialized variable proves initialization for subsequent uses.
Attribution: The change to lookup_name() in pyrefly/lib/binding/bindings.rs now updates the current flow when a conditionally-initialized name is successfully read, marking it as initialized for subsequent uses. This eliminates the duplicate 'may be uninitialized' error on line 91 since the successful read on line 87 proves r is initialized.

discord.py (-1)

This is an improvement. The error was a false positive - errors is guaranteed to be initialized before line 484. Looking at the control flow: in the else branch starting at line 474, errors is assigned either on line 479 (errors = _flatten_error_dict(remaining, key=key)) or on line 481 (errors = {key: ' '.join(x.get('message', '') for x in inner_errors)}). Both assignment paths occur before the isinstance check on line 483 and the usage on line 484. The type checker was incorrectly flagging this as potentially uninitialized when the variable is actually always defined. Removing this false positive makes pyrefly more accurate.
Attribution: The change to lookup_name() in pyrefly/lib/binding/bindings.rs added logic to update the current flow when a conditionally/deferred-initialized name is successfully read. This suppresses follow-on 'may be uninitialized' errors on surviving paths, which fixed the false positive here where errors was actually initialized on all paths.

core (-324)

These were false positive 'unbound-name' errors being removed. The PR description explicitly states this fixes issue #828 about duplicate 'may be uninitialized' errors. The code change ensures that when a variable is successfully read (proving it was initialized), subsequent reads in the same flow don't generate redundant uninitialization warnings. Looking at the examples: data is assigned and immediately used on line 111, and controller is assigned on lines 128/131 before use on line 134. These are clearly initialized variables, so the errors were incorrect. Removing false positives is an improvement in type checker accuracy.
Attribution: The change to lookup_name() in pyrefly/lib/binding/bindings.rs added logic to update the current flow when a name is successfully read and was previously marked as Conditionally or DeferredCheck initialized. This prevents duplicate 'may be uninitialized' errors on subsequent uses of the same variable in the surviving execution path.

check-jsonschema (-1)

This is an improvement. The error was a false positive caused by pyrefly's flow analysis not recognizing that self.fail() terminates execution. The code has a clear control flow: if m is None (line 98), self.fail() raises an exception and execution stops. If m is not None, result gets initialized on line 107. The PR fixed pyrefly's flow analysis to properly track that a successful read of a conditionally-initialized variable proves it's initialized on the surviving execution path.
Attribution: The change to lookup_name() in pyrefly/lib/binding/bindings.rs added logic to update the current flow when a conditionally-initialized name is successfully read, which suppresses follow-on 'may be uninitialized' errors on the surviving path

tornado (-3)

The removed errors were false positives. In the _handle_connect() method, err is guaranteed to be initialized by the try/except block on lines 1271-1277: either it gets the value from getsockopt() in the try clause, or it's set to 0 in the except clause when getsockopt() fails with ENOPROTOOPT. By line 1278, err is definitely initialized in all execution paths. The PR fixed pyrefly's flow analysis to recognize that successfully reading a conditionally-initialized variable proves it's initialized, suppressing duplicate errors on subsequent uses of the same variable.
Attribution: The change to lookup_name() in pyrefly/lib/binding/bindings.rs now updates the current flow when a conditionally or deferred-check initialized variable is successfully read. This suppresses follow-on 'may be uninitialized' errors on the same variable in the surviving execution path, which is exactly what happened here - the first read of err proved it was initialized, eliminating the false positive errors on subsequent reads.

mongo-python-driver (-18)

The removed errors were false positives being fixed. The code follows a standard Python pattern: _cbson is conditionally imported in a try/except block (lines 146-151), and _USE_C is set to track whether the import succeeded. The variable is only used when _USE_C is True (lines 1021, 1133), which guarantees it's initialized. The PR fix correctly recognizes that after a successful read of a conditionally initialized variable, subsequent reads in the same flow should not generate 'may be uninitialized' errors. This is an improvement in flow analysis accuracy.
Attribution: The change to lookup_name() in pyrefly/lib/binding/bindings.rs now updates the current flow when a conditionally initialized variable is successfully read. This suppresses follow-on 'may be uninitialized' errors on the same variable in the surviving execution path, which explains why the duplicate errors on _cbson were removed.

pyodide (-8)

This is an improvement. The PR fixes pyrefly's flow analysis to be less conservative about unbound variable detection. The removed errors were false positives where pyrefly was incorrectly flagging variables as potentially uninitialized when they were actually initialized on all reachable paths. The code change specifically addresses 'duplicate follow-on' errors by updating flow state after successful variable reads, which is a more accurate model of Python's runtime behavior. Without seeing the source code, I cannot verify the specific cases, but the PR description and test case clearly indicate these were false positives being removed.
Attribution: The changes to lookup_name() in pyrefly/lib/binding/bindings.rs now update the current flow state when reading conditionally or deferred-check initialized variables. This suppresses follow-on 'may be uninitialized' errors on the same variable in the surviving execution path, which removed the 8 false positive unbound-name errors.

pandera (-89)

The removed errors were false positives on a standard Python pattern for optional dependencies. The code imports pandas as pd in a try/except block, sets PANDAS_INSTALLED = True on success, then only uses pd when PANDAS_INSTALLED is True. This ensures pd is never used uninitialized. Pyrefly's improvement correctly recognizes that successful reads of conditionally-initialized names prove initialization on the surviving execution path, eliminating duplicate error reports while preserving detection of genuine uninitialized usage.
Attribution: The change to lookup_name() in pyrefly/lib/binding/bindings.rs now updates the current flow when a conditionally initialized name is successfully read. This suppresses follow-on 'may be uninitialized' errors on the surviving path while preserving detection of genuinely uninitialized cases. The test case shows the intended behavior: the first use of x correctly reports an error, but subsequent uses don't repeat the error since the first use 'proves' initialization on that path.

PyGithub (-2)

These were false positive unbound-name errors. The variable raisedexp is properly initialized by the with self.assertRaises(...) context manager when the expected exception is raised on line 279. The successful usage of raisedexp.exception in lines 280-305 proves the variable was initialized. The PR fix correctly recognizes that once a conditionally-initialized variable is successfully read, subsequent reads in the same flow should not trigger 'may be uninitialized' errors. This matches the behavior shown in the test case where the second print(x) doesn't error after the first successful read.
Attribution: The change to lookup_name() in pyrefly/lib/binding/bindings.rs now calls define_in_current_flow() when a conditionally initialized name is successfully read, which updates the flow state to suppress duplicate 'may be uninitialized' errors on subsequent accesses to the same variable.

zulip (-76)

The removed errors were false positives. Variables like RemoteInstallationCount are conditionally imported (e.g., if settings.ZILENCER_ENABLED: from zilencer.models import RemoteInstallationCount) and then used within the same conditional context where they're guaranteed to be available. The PR description explicitly states this fix is for 'Usage of a variable should initialise it #828' and explains that 'runtime name reads now update the current flow only when the name was Conditionally or DeferredCheck initialized. That means a successful read suppresses the duplicate follow-on "may be uninitialized" error on the surviving path.' This is an improvement in flow analysis accuracy - after successfully reading a conditionally initialized variable, pyrefly now correctly understands that the variable is initialized in the current execution path, eliminating false positive warnings about the same variable being uninitialized in subsequent uses.
Attribution: The change to lookup_name() in pyrefly/lib/binding/bindings.rs now updates the current flow to mark conditionally/deferred-check initialized variables as initialized after a successful read, which suppresses the duplicate follow-on 'may be uninitialized' errors on the surviving path.

bokeh (-7)

These were false positive errors. The variable ret is always initialized on line 113 via ret = args.invoke(args) before any potential use. The control flow analysis was incorrectly flagging subsequent uses of ret on line 122 as potentially uninitialized, even though any execution path that reaches line 122 must have successfully executed line 113 (since exceptions cause program termination via die()). Removing these false positives is an improvement in analysis accuracy.
Attribution: The change to lookup_name() in pyrefly/lib/binding/bindings.rs now updates the current flow when a conditionally-initialized name is successfully read, which suppresses false positive uninitialized warnings on subsequent uses of the same variable.

typeshed-stats (-1)

This is an improvement. The removed error was a false positive - the walrus operator := in the while condition (result := random_string()) guarantees that result is assigned before the condition is evaluated. The variable cannot be uninitialized when the return result statement executes. The PR correctly fixed pyrefly's control flow analysis to understand that successful reads of conditionally-initialized variables prove initialization on the surviving execution path.
Attribution: The change to lookup_name() in pyrefly/lib/binding/bindings.rs now correctly recognizes that when a conditionally-initialized variable is successfully read, that read proves initialization on the current execution path, eliminating false positive unbound-name errors.

mkosi (-10)

This is an improvement. Pyrefly fixed false positive 'unbound-name' errors by implementing better flow-sensitive analysis. The change correctly recognizes that successfully reading a conditionally-initialized variable proves it was initialized on that execution path, eliminating duplicate error reports while preserving initial detection. The removed errors were incorrectly flagging properly initialized variables in contexts like walrus operator assignments and conditional initialization patterns.
Attribution: The change to lookup_name() in pyrefly/lib/binding/bindings.rs now updates the current flow when reading conditionally/deferred-check initialized variables, marking them as initialized in the surviving path and suppressing duplicate follow-on errors.

pyjwt (-4)

These were false positive unbound-name errors. The hashes variable is imported in a try-except block and only used within if has_crypto: guards that ensure the import succeeded. The PR fixed pyrefly's flow analysis to properly track that a successful read of a conditionally initialized variable proves it's available in the current execution path, eliminating these incorrect warnings.
Attribution: The change to lookup_name() in pyrefly/lib/binding/bindings.rs now updates the current flow when a conditionally initialized name is successfully read, which suppresses duplicate 'may be uninitialized' errors on subsequent uses of the same variable

mkdocs (-5)

The removed errors were false positives in pyrefly's flow analysis. In _open_config_file(), result_config_file is guaranteed to be initialized: either assigned on line 310 (when config_file is an open file descriptor) or on line 319 (when opening a file path). The else clause on line 324 raises an exception if no file is found, preventing execution from continuing with an uninitialized variable. The PR fix correctly identifies that successful reads of conditionally-initialized variables should suppress duplicate follow-on errors on the surviving execution path, improving the accuracy of unbound name detection.
Attribution: The change to lookup_name() in pyrefly/lib/binding/bindings.rs now updates the current flow when a conditionally/deferred-check initialized name is successfully read, which suppresses follow-on 'may be uninitialized' errors on the surviving path without affecting definitely-uninitialized cases

pyppeteer (-2)

The removed errors were false positives. In both cases, _obj is assigned in a try block, and if that assignment fails, _rewriteError() always raises an exception (either re-raising the original or raising a new one), so execution never reaches the lines where _obj is used. The control flow analysis was incorrectly flagging these as potentially uninitialized when they're actually guaranteed to be initialized on any execution path that reaches the usage sites. The PR fix correctly recognizes that a successful read of a conditionally initialized variable proves it was initialized on that path.
Attribution: The change to lookup_name() in pyrefly/lib/binding/bindings.rs now updates the current flow when a conditionally initialized name is successfully read, which correctly suppresses the false positive unbound-name errors on surviving execution paths.

prefect (-20)

Looking at the source code, these are all cases where variables are conditionally initialized but then used in contexts where they are guaranteed to be initialized. For example, in the prefect-dask file, line 40 shows if (parameters := kwargs.get("parameters")) is None: - this walrus operator assignment ensures parameters is bound regardless of the condition outcome. The error was on line 48 using parameters.items(), but at that point parameters is definitely initialized (either from the walrus operator or from line 44's assignment). The PR description confirms this fix: 'runtime name reads now update the current flow only when the name was Conditionally or DeferredCheck initialized. That means a successful read suppresses the duplicate follow-on "may be uninitialized" error on the surviving path.' These were false positive errors that pyrefly was incorrectly reporting.
Attribution: The change to lookup_name() in pyrefly/lib/binding/bindings.rs now updates the current flow when a conditionally/deferred-check initialized variable is successfully read, suppressing follow-on "may be uninitialized" errors on the same variable in the surviving execution path.

vision (-1)

This is an improvement. The removed error was a false positive - target_dir_zip is guaranteed to be initialized before line 154 because self.mode can only be 'gtFine' or 'gtCoarse' (validated earlier), making the if/elif chain on lines 147-150 exhaustive. Pyrefly's control flow analysis was previously too conservative and failed to recognize this guarantee. The PR fix correctly improves the analysis to suppress false positive 'may be uninitialized' errors when variables are provably initialized through exhaustive conditional branches.
Attribution: The change to lookup_name() in pyrefly/lib/binding/bindings.rs improved control flow analysis by updating the current flow when conditionally-initialized variables are successfully read, which prevents false positive uninitialized variable errors

jinja (-2)

The removed errors were false positives that pyrefly was incorrectly reporting. In the BaseLoader.load() method, bucket is assigned on line 132 inside if bcc is not None:. The uses on lines 144-145 are inside if bcc is not None and bucket.code is None:, which can only execute if bcc is not None was true, guaranteeing that bucket was initialized. The PR description confirms this was a fix for issue #828 about variable initialization tracking. The change improves pyrefly's flow analysis to recognize that a successful variable read proves the variable was initialized, suppressing duplicate errors on subsequent uses.
Attribution: The change to lookup_name() in pyrefly/lib/binding/bindings.rs now updates the current flow when a name read succeeds for conditionally/deferred-check initialized variables. This suppresses follow-on 'may be uninitialized' errors on the surviving path after a successful read, which fixed the false positive bucket errors.

sockeye (-1)

This is an improvement. The error was a false positive - ax2 is initialized on line 130 within if args.y2: and used on line 209, but the usage is also within the same conditional block (the if args.y2: block starts at line 207). The flow analysis was incorrectly flagging this as potentially uninitialized when the control flow guarantees initialization. The PR fix correctly recognizes that a successful read of a conditionally initialized variable proves it was initialized on that path, suppressing the false positive.
Attribution: The change to lookup_name() in pyrefly/lib/binding/bindings.rs now updates the current flow when a conditionally initialized name is successfully read, which suppresses follow-on 'may be uninitialized' errors on the surviving path. This fixed the false positive where ax2 was flagged as uninitialized despite being used within the same conditional block where it was defined.

strawberry (-9)

These were false positive unbound-name errors. The walrus operator pattern if (resolved := self.__resolve_cache__) is None: on line 136 guarantees that resolved is initialized regardless of which branch is taken - either with the cached value or with the result of self._resolve(). By lines 146-147, resolved is definitely bound and safe to use. The PR correctly fixed pyrefly's flow analysis to recognize that successful reads of conditionally-initialized variables prove they are initialized on the surviving execution path.
Attribution: The change to lookup_name() in pyrefly/lib/binding/bindings.rs now updates the current flow when a conditionally initialized name is successfully read (lines 1154-1166 and 1174-1182), which suppresses duplicate 'may be uninitialized' errors on subsequent uses of the same variable

isort (-2)

The removed errors were false positives. In the find_imports_in_stream function, the variable key is assigned in every branch of the if-elif chain (lines 565-572) before being used on lines 574-575. The control flow guarantees key is initialized, but pyrefly's previous analysis was too conservative. The PR improved the flow analysis to recognize that a successful read of a conditionally-initialized variable proves it's initialized on the surviving execution path, eliminating these false positive warnings.
Attribution: The change to lookup_name() in pyrefly/lib/binding/bindings.rs improved control flow analysis by updating the current flow when a conditionally-initialized variable is successfully read, which helps suppress false positive unbound-name errors on subsequent uses of the same variable

schema_salad (-23)

The removed unbound-name errors were false positives. The variable gen is declared on line 41 and then exhaustively initialized in the match statement (lines 57-105) before being used on lines 115-117. Every branch of the match either assigns to gen or raises an exception, so gen cannot be uninitialized at the usage sites. The PR improved pyrefly's control flow analysis to recognize that successful reads of conditionally-initialized variables prove they are initialized, eliminating these false positives.
Attribution: The change to lookup_name() in pyrefly/lib/binding/bindings.rs now updates the current flow when a conditionally-initialized name is successfully read, which allows pyrefly to recognize that gen is initialized after the match statement and suppresses the false positive unbound-name errors

pycryptodome (-19)

This is an improvement. The PR description explicitly states this fixes issue #828 about variable initialization tracking. The change ensures that when a variable is successfully read (proving it was initialized), subsequent reads in the same flow don't generate redundant 'may be uninitialized' warnings. Looking at the specific examples:

  1. In _PBES.py line 336, pbkdf2_hmac_algo is assigned on line 260 in the if protection.startswith('PBKDF') branch, and the error occurs in a nested condition within that same branch - the variable is definitely initialized.

  2. In DSA.py line 413, the seed variable is assigned in the _generate_domain function and returned as part of a tuple - it's definitely initialized when accessed.

These are classic false positives where the type checker's flow analysis was too conservative, flagging variables as potentially uninitialized when they were actually guaranteed to be initialized on the execution path. The fix improves the flow analysis to suppress these redundant warnings after the first successful read proves initialization.

Attribution: The change to lookup_name() in pyrefly/lib/binding/bindings.rs now updates the current flow when a conditionally initialized variable is successfully read, suppressing duplicate 'may be uninitialized' errors on subsequent uses of the same variable in the surviving execution path.

jax (-9)

These were false positive unbound-name errors where pyrefly's control flow analysis was too conservative. The variables were actually guaranteed to be initialized: (1) tolerances is set in all branches of an exhaustive if/elif/elif chain covering all possible device types, (2) args is accessed only in a branch where it was definitely assigned, (3) similar patterns in the third file. The PR improved pyrefly's flow analysis to better track that successful reads of conditionally-initialized variables prove initialization on the current path, eliminating these false positives. This brings pyrefly closer to the accuracy of mypy/pyright's control flow analysis.
Attribution: The change to lookup_name() in pyrefly/lib/binding/bindings.rs now updates the current flow when a conditionally-initialized variable is successfully read, which suppresses duplicate follow-on 'may be uninitialized' errors on the surviving path. This improves control flow tracking accuracy.

optuna (-3)

These removed errors were false positives. In all cases, the variables are assigned in try blocks, and if assignment fails, context.abort() is called which raises an exception and terminates execution. Therefore, the variables are guaranteed to be initialized when accessed later. Pyrefly's improved flow analysis now correctly recognizes that successful reads of conditionally-initialized variables prove they are initialized on the surviving execution path.
Attribution: The changes to lookup_name() in pyrefly/lib/binding/bindings.rs improved flow analysis by updating the current flow state when successfully reading variables that were marked as Conditionally or DeferredCheck initialized, which eliminated these false positive unbound-name errors.

mypy (-18)

This appears to be an intentional improvement to error reporting quality. The PR description states the goal was to fix duplicate 'may be uninitialized' errors - when a variable is successfully read once, subsequent reads of the same variable should not generate additional warnings since the first read would have already failed if the variable was truly uninitialized. The test case shows this pattern: print(x) # E: 'x' may be uninitialized followed by print(x) with no error. This reduces noise while preserving the important first detection of potentially uninitialized variables. The removed errors were likely these follow-on duplicates that added no value beyond the initial warning.
Attribution: The change in lookup_name() in pyrefly/lib/binding/bindings.rs now updates the current flow to mark conditionally/deferred-check initialized variables as initialized after a successful read, which suppresses subsequent 'may be uninitialized' errors on the same variable.

cwltool (-16)

The removed errors were false positives where pyrefly incorrectly claimed variables were uninitialized. Looking at the actual code:

  1. In checker.py line 39: _srctype := _get_type(srctype) - the walrus operator initializes _srctype before line 66 uses it
  2. In job.py line 708: new_file is initialized in the conditional block on lines 697-700 before being used on line 708

The PR description confirms this was intentional: 'runtime name reads now update the current flow only when the name was Conditionally or DeferredCheck initialized. That means a successful read suppresses the duplicate follow-on "may be uninitialized" error on the surviving path.' This is an improvement - pyrefly fixed its flow analysis to avoid duplicate false positive warnings after a variable has been proven initialized by a successful read.

Attribution: The change to lookup_name() in pyrefly/lib/binding/bindings.rs added logic to update the current flow when a name read proves initialization for conditionally/deferred-check initialized variables. This prevents duplicate 'may be uninitialized' errors on subsequent reads of the same variable in the surviving execution path.

pip (-20)

The removed errors were false positives. The code has a conditional check if index_url and index_url_user_password[0] is not None: on line 367 that can only succeed if index_url_user_password is initialized (since accessing [0] on an uninitialized variable would fail). The subsequent uses of index_url_user_password on lines 368 and 371 are within this conditional block, so they are guaranteed to be safe. Pyrefly's flow analysis was incorrectly flagging these as potentially uninitialized despite the conditional proof of initialization. The PR fix correctly recognizes that a successful read of a conditionally-initialized variable proves it's initialized in that flow, preventing duplicate errors.
Attribution: The changes to lookup_name() in pyrefly/lib/binding/bindings.rs now update the current flow when a conditionally-initialized name is successfully read, marking it as initialized (FlowStyle::assume_initialized) to prevent duplicate uninitialized errors on the same execution path.

cryptography (-3)

These removals represent an improvement in pyrefly's flow analysis. The errors were false positives - the variables were actually guaranteed to be initialized by the control flow, but pyrefly's analysis was too conservative. The PR fix allows successful variable reads to update the flow state, preventing duplicate errors on the same variable in cases where the first successful read proves initialization. This makes pyrefly's analysis more accurate and reduces noise from incorrect uninitialized variable warnings.
Attribution: The change to lookup_name() in pyrefly/lib/binding/bindings.rs now updates flow analysis when reading conditionally-initialized variables, marking them as definitely initialized for subsequent uses. This prevents false positive 'may be uninitialized' errors on variables that were already successfully accessed.

pywin32 (-4)

These removals are improvements. The errors were false positives caused by insufficient flow analysis:

  1. In _exetestscript.py, fnout is guaranteed to be initialized by line 19 because:

    • Line 15 tries to access fnout
    • If it exists, execution continues with the existing value
    • If it doesn't exist (NameError), line 17 initializes it with fnout = sys.argv[-1]
    • Either way, fnout is definitely bound when line 19 executes
  2. In BrandProject.py, args is guaranteed to be initialized by lines 87-89 because:

    • Line 69 executes opts, args = getopt.getopt(sys.argv[1:], "af:d:r")
    • If this succeeds, args is initialized
    • If this fails with getopt.GetoptError, line 71 calls usage(msg) which calls sys.exit(1) on line 62, terminating execution
    • Lines 87-89 are only reachable if line 69 succeeded, so args is definitely bound

The PR fixed pyrefly's flow analysis to properly track that successful reads of conditionally-initialized variables prove they are initialized on the surviving execution path, eliminating these false positive warnings.

Attribution: The changes to lookup_name() in pyrefly/lib/binding/bindings.rs added logic to update the current flow when a conditionally-initialized name is successfully read, which suppresses follow-on 'may be uninitialized' errors on the surviving execution path.

websockets (-12)

The removed errors were false positives where pyrefly incorrectly flagged properly initialized variables as potentially unbound. In the websockets code, exceptions is initialized as an empty list when raise_exceptions=True (line 1208), and response is assigned from the generator yield (lines 303-307). Both variables are definitely bound when accessed. The PR fixed pyrefly's flow analysis to correctly track that successful reads of conditionally-initialized variables prove they are initialized on the surviving execution path, eliminating these false positive warnings.
Attribution: The change to lookup_name() in pyrefly/lib/binding/bindings.rs added logic to update the current flow when a conditionally-initialized name is successfully read. When a variable that was marked as Conditionally or DeferredCheck initialized is accessed, it now calls define_in_current_flow() to mark it as initialized in the surviving execution path, preventing duplicate 'may be uninitialized' errors on subsequent reads.

sphinx (-13)

The removed errors were false positives in control flow analysis. The PR improved pyrefly's ability to track variable initialization across conditional branches. When a variable is conditionally initialized (like nr = 1 in an if block) and then successfully read, pyrefly now updates its flow analysis to mark that variable as initialized in the current path, preventing duplicate 'may be uninitialized' errors on subsequent reads. The specific variables flagged (nr, doc, footnote, etc.) were all properly initialized in their respective conditional contexts, making the original errors incorrect. This brings pyrefly's behavior closer to established type checkers like mypy and pyright, which handle these control flow patterns correctly.
Attribution: The change to lookup_name() in pyrefly/lib/binding/bindings.rs improved control flow analysis by updating the current flow when a conditionally-initialized variable is successfully read. The new logic on lines 1154-1166 and 1175-1182 calls define_in_current_flow() for variables that are Conditionally or DeferredCheck initialized, which suppresses duplicate 'may be uninitialized' errors on subsequent reads in the same flow path.

meson (-59)

This is an improvement. The PR fixed false positive 'unbound-name' errors where pyrefly was incorrectly claiming variables 'may be uninitialized' even when they were properly initialized through conditional logic. Looking at the source code, variables like 'val' in the CUDA compiler are clearly assigned values in multiple conditional branches (try/except blocks and if/elif chains) before being used. The assertion 'assert val is not None' on line 442 confirms the code expects 'val' to be initialized. The PR description explains this was fixing 'duplicate follow-on may be uninitialized errors on the surviving path' - meaning pyrefly was correctly detecting the first potential uninitialized use but then incorrectly flagging subsequent uses of the same variable even after it had been proven initialized by the first successful read. Removing these false positives makes pyrefly more accurate.
Attribution: The change to lookup_name() in pyrefly/lib/binding/bindings.rs added logic to update the current flow when a name is successfully read and was previously marked as Conditionally or DeferredCheck initialized. This suppresses false positive 'may be uninitialized' errors on subsequent reads of the same variable in the surviving execution path.

cibuildwheel (-2)

The removed errors were false positives. Analyzing the control flow: repaired_wheel is assigned on line 453 within an else block that runs when compatible_wheel is falsy. The flagged uses on lines 546 and 549 occur within if compatible_wheel is None: - the same condition that ensures the assignment happened. The PR description confirms this fix targets exactly this pattern: 'runtime name reads now update the current flow only when the name was Conditionally or DeferredCheck initialized. That means a successful read suppresses the duplicate follow-on "may be uninitialized" error on the surviving path.' This is an improvement in flow analysis accuracy.
Attribution: The change to lookup_name() in pyrefly/lib/binding/bindings.rs now updates the current flow when a name read succeeds for conditionally/deferred-check initialized variables. This allows pyrefly to track that a successful read of repaired_wheel proves it was initialized, suppressing the duplicate follow-on errors on the surviving execution path.

scrapy (-4)

These removed errors were false positives. In scrapy/logformatter.py, the level variable is guaranteed to be initialized: line 123 assigns it via walrus operator (either a value or None), line 124 reassigns it if None, so by line 126 it's definitely initialized. The PR fixed pyrefly's flow analysis to recognize that successfully reading a 'maybe uninitialized' variable proves it was actually initialized, eliminating duplicate warnings on subsequent uses in the same path. This makes pyrefly's analysis more precise and reduces false positive noise.
Attribution: The change to lookup_name() in pyrefly/lib/binding/bindings.rs added logic to update the current flow when a conditionally-initialized variable is successfully read, suppressing duplicate 'may be uninitialized' errors on the surviving path

psycopg (-31)

The removed errors were false positives where pyrefly incorrectly flagged variables as potentially uninitialized despite them being assigned earlier in the same function. The PR description explicitly states this fixes 'duplicate follow-on may be uninitialized errors on the surviving path' - meaning these were spurious errors after a variable had already been successfully read. Looking at the code, variables like status (assigned line 254, used line 267) and result (assigned line 83, used line 94) are clearly initialized before use. Removing these false positive unbound-name errors is an improvement in pyrefly's flow analysis accuracy.
Attribution: The change to lookup_name() in pyrefly/lib/binding/bindings.rs now updates the current flow when a name is successfully read and was previously marked as Conditionally or DeferredCheck initialized. This suppresses follow-on 'may be uninitialized' errors on the surviving path by marking the variable as initialized after a successful read.

stone (-1)

This is an improvement. The error was a false positive - pyrefly was incorrectly flagging typing as potentially uninitialized on line 20, even though it's imported on line 12 within the same if _MYPY: conditional block. The control flow analysis failed to recognize that if execution reaches line 20 (inside if _MYPY:), then the import on line 12 (also inside if _MYPY:) must have executed. The PR fix correctly updates the flow state when a conditionally-initialized name is successfully read, suppressing the duplicate follow-on error on the surviving execution path.
Attribution: The change to lookup_name() in pyrefly/lib/binding/bindings.rs now updates the current flow when a name read succeeds for conditionally initialized variables. This suppresses the false positive 'may be uninitialized' error on the surviving path where the variable is actually available.

Tanjun (-4)

These were false positives being correctly fixed. The walrus operator pattern if condition and (var := expression): guarantees that var is initialized when the if-block executes. Pyrefly's improved control flow analysis now correctly recognizes that a successful read of a conditionally initialized variable proves it was initialized on that execution path, eliminating the false 'may be uninitialized' warnings.
Attribution: The change to lookup_name() in pyrefly/lib/binding/bindings.rs added logic to update flow state when conditionally initialized variables are successfully read, fixing the false positive unbound-name errors.

apprise (-4)

These removed errors were false positives where pyrefly incorrectly flagged variables as potentially uninitialized despite them being properly initialized in all reachable code paths. The msteams.py case has notify_url set in a complete if/elif chain covering all version values, and the sendpulse.py cases have item initialized within the same loop scope where it's used. The PR fix improved flow analysis to recognize that successful reads of conditionally-initialized variables prove initialization on the surviving execution path.
Attribution: The change to lookup_name() in pyrefly/lib/binding/bindings.rs added logic to update the current flow when a conditionally/deferred-check initialized name is successfully read. This suppresses follow-on 'may be uninitialized' errors on the surviving path by marking the name as initialized after a successful read, which removed these false positive unbound-name errors.

Suggested Fix

Summary: The PR's change to suppress duplicate uninitialized variable errors is too aggressive and removes detection of genuine bugs where variables can be accessed before initialization due to exception handling or incomplete conditional assignment.

1. In lookup_name() in pyrefly/lib/binding/bindings.rs, add a guard condition before calling define_in_current_flow(): only update the flow state for variables that are guaranteed to be initialized on all paths reaching the read, not just conditionally initialized ones. Specifically, change the condition from matches!(initialized, InitializedInFlow::Conditionally | InitializedInFlow::DeferredCheck(_)) to only InitializedInFlow::DeferredCheck(_), excluding InitializedInFlow::Conditionally which represents variables that may genuinely be uninitialized on some execution paths.

Files: pyrefly/lib/binding/bindings.rs
Confidence: high
Affected projects: urllib3, hydpy, dd-trace-py, cloud-init, mitmproxy, paasta, setuptools, static-frame, alerta
Fixes: unbound-name
The current logic incorrectly assumes that successfully reading a conditionally-initialized variable proves it's initialized, but conditionally-initialized variables can still be unbound due to exception handling or incomplete conditional assignment. By only updating flow state for DeferredCheck cases (which are provably initialized but need flow-sensitive tracking), we preserve detection of genuine bugs while still fixing the intended duplicate error issue. Expected outcome: eliminates 54 genuine unbound-name errors across 9 projects while preserving the improvements in the other 45 projects.


Was this helpful? React with 👍 or 👎

Classification by primer-classifier (54 LLM)

@yangdanny97
Copy link
Contributor

at a high level this sounds useful to have, there might be a few conflicts with ongoing work, we'll have to be careful merging this one in.

@yangdanny97 yangdanny97 self-assigned this Mar 6, 2026
@meta-codesync
Copy link

meta-codesync bot commented Mar 6, 2026

@yangdanny97 has imported this pull request. If you are a Meta employee, you can view this in D95486455.

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Usage of a variable should initialise it

3 participants