code-towel 1.414__tar.gz → 1.732__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (616) hide show
  1. {code_towel-1.414 → code_towel-1.732}/.flake8 +4 -1
  2. {code_towel-1.414 → code_towel-1.732}/.pre-commit-config.yaml +4 -3
  3. code_towel-1.732/CHANGELOG.md +770 -0
  4. code_towel-1.732/CONTRIBUTING.md +209 -0
  5. {code_towel-1.414 → code_towel-1.732}/MANIFEST.in +2 -1
  6. code_towel-1.732/PKG-INFO +378 -0
  7. code_towel-1.732/README.md +333 -0
  8. code_towel-1.732/SECURITY.md +19 -0
  9. {code_towel-1.414 → code_towel-1.732}/docs/ADVERSARIAL_REVIEW.md +44 -2
  10. code_towel-1.732/docs/ARCHITECTURE.md +898 -0
  11. code_towel-1.732/docs/KNOWN_LIMITATIONS.md +565 -0
  12. code_towel-1.732/docs/PRODUCTION_READINESS.md +697 -0
  13. code_towel-1.732/docs/QUICKSTART.md +84 -0
  14. {code_towel-1.414 → code_towel-1.732}/docs/RELEASE_LOG.md +72 -5
  15. code_towel-1.732/docs/RELEASING.md +126 -0
  16. code_towel-1.732/docs/USAGE_GUIDE.md +467 -0
  17. code_towel-1.732/docs/proposals/dethunking.md +105 -0
  18. code_towel-1.732/docs/proposals/performance-roadmap.md +144 -0
  19. code_towel-1.732/docs/proposals/reuse-existing-function.md +171 -0
  20. code_towel-1.732/docs/proposals/template-method.md +157 -0
  21. code_towel-1.732/docs/proposals/type-parameters.md +322 -0
  22. {code_towel-1.414 → code_towel-1.732}/justfile +23 -6
  23. {code_towel-1.414 → code_towel-1.732}/pyproject.toml +38 -14
  24. {code_towel-1.414 → code_towel-1.732}/scripts/add_copyright_headers.py +1 -1
  25. code_towel-1.732/scripts/audit_dependencies.py +56 -0
  26. code_towel-1.732/scripts/bench_similar_blocks.py +116 -0
  27. code_towel-1.732/scripts/ecosystem/manifest.toml +1158 -0
  28. code_towel-1.732/scripts/ecosystem_check.py +1033 -0
  29. {code_towel-1.414 → code_towel-1.732}/scripts/promote_dry_helpers.py +1 -1
  30. code_towel-1.732/src/code_towel.egg-info/PKG-INFO +378 -0
  31. {code_towel-1.414 → code_towel-1.732}/src/code_towel.egg-info/SOURCES.txt +178 -48
  32. code_towel-1.732/src/code_towel.egg-info/entry_points.txt +2 -0
  33. {code_towel-1.414 → code_towel-1.732}/src/code_towel.egg-info/requires.txt +14 -1
  34. {code_towel-1.414 → code_towel-1.732}/src/towel/__init__.py +2 -2
  35. code_towel-1.732/src/towel/_mypy_worker.py +177 -0
  36. {code_towel-1.414 → code_towel-1.732}/src/towel/changes.py +99 -29
  37. code_towel-1.732/src/towel/checker_project.py +220 -0
  38. code_towel-1.732/src/towel/cli.py +1537 -0
  39. code_towel-1.732/src/towel/diagnostics.py +145 -0
  40. {code_towel-1.414 → code_towel-1.732}/src/towel/filesystem.py +27 -0
  41. code_towel-1.732/src/towel/formatting.py +437 -0
  42. {code_towel-1.414/src/towel/unification → code_towel-1.732/src/towel}/project_layout.py +300 -163
  43. code_towel-1.732/src/towel/project_tools.py +50 -0
  44. code_towel-1.732/src/towel/renaming.py +1326 -0
  45. code_towel-1.732/src/towel/source_files.py +70 -0
  46. code_towel-1.732/src/towel/source_text.py +94 -0
  47. code_towel-1.732/src/towel/type_inference.py +1081 -0
  48. code_towel-1.732/src/towel/unification/__init__.py +39 -0
  49. code_towel-1.732/src/towel/unification/annotation_wiring.py +303 -0
  50. code_towel-1.732/src/towel/unification/annotations.py +968 -0
  51. {code_towel-1.414 → code_towel-1.732}/src/towel/unification/assignment_analyzer.py +81 -162
  52. code_towel-1.732/src/towel/unification/binding_context.py +348 -0
  53. {code_towel-1.414 → code_towel-1.732}/src/towel/unification/binding_detector.py +40 -67
  54. code_towel-1.732/src/towel/unification/block_analysis.py +846 -0
  55. {code_towel-1.414 → code_towel-1.732}/src/towel/unification/block_signature.py +41 -51
  56. code_towel-1.732/src/towel/unification/bounded_cache.py +93 -0
  57. {code_towel-1.414 → code_towel-1.732}/src/towel/unification/builtins.py +27 -1
  58. code_towel-1.732/src/towel/unification/clustering.py +468 -0
  59. code_towel-1.732/src/towel/unification/constant_consistency.py +149 -0
  60. code_towel-1.732/src/towel/unification/defaults.py +33 -0
  61. code_towel-1.732/src/towel/unification/definite_assignment.py +343 -0
  62. code_towel-1.732/src/towel/unification/engine_state.py +301 -0
  63. code_towel-1.732/src/towel/unification/exceptions.py +39 -0
  64. code_towel-1.732/src/towel/unification/extractor.py +813 -0
  65. code_towel-1.732/src/towel/unification/fixed_point.py +637 -0
  66. code_towel-1.732/src/towel/unification/function_index.py +127 -0
  67. code_towel-1.732/src/towel/unification/hof_promotion.py +219 -0
  68. code_towel-1.732/src/towel/unification/import_graph.py +542 -0
  69. code_towel-1.732/src/towel/unification/insertion.py +315 -0
  70. {code_towel-1.414 → code_towel-1.732}/src/towel/unification/instantiation.py +166 -25
  71. code_towel-1.732/src/towel/unification/materialize.py +472 -0
  72. code_towel-1.732/src/towel/unification/models.py +392 -0
  73. code_towel-1.732/src/towel/unification/orphan_detector.py +105 -0
  74. code_towel-1.732/src/towel/unification/overlap.py +227 -0
  75. code_towel-1.732/src/towel/unification/pair_evaluation.py +1318 -0
  76. code_towel-1.732/src/towel/unification/parallel.py +339 -0
  77. code_towel-1.732/src/towel/unification/parameterization.py +313 -0
  78. code_towel-1.732/src/towel/unification/parameters.py +59 -0
  79. {code_towel-1.414 → code_towel-1.732}/src/towel/unification/pipeline.py +180 -176
  80. code_towel-1.732/src/towel/unification/placement.py +531 -0
  81. code_towel-1.732/src/towel/unification/progress.py +133 -0
  82. code_towel-1.732/src/towel/unification/project_layout.py +10 -0
  83. code_towel-1.732/src/towel/unification/refactor_engine.py +797 -0
  84. code_towel-1.732/src/towel/unification/reuse.py +560 -0
  85. code_towel-1.732/src/towel/unification/scope_analyzer.py +628 -0
  86. code_towel-1.732/src/towel/unification/semantic_safety.py +1128 -0
  87. code_towel-1.732/src/towel/unification/statement_facts.py +252 -0
  88. {code_towel-1.414 → code_towel-1.732}/src/towel/unification/structural_memo.py +24 -15
  89. code_towel-1.732/src/towel/unification/substitution.py +128 -0
  90. {code_towel-1.414 → code_towel-1.732}/src/towel/unification/thunk_inlining.py +129 -68
  91. code_towel-1.732/src/towel/unification/unifier.py +917 -0
  92. code_towel-1.732/src/towel/unification/unifier_state.py +65 -0
  93. code_towel-1.732/src/towel/unification/visitors.py +605 -0
  94. {code_towel-1.414 → code_towel-1.732}/test_examples/README.md +68 -19
  95. code_towel-1.732/test_examples/annotated_module.py +109 -0
  96. code_towel-1.732/test_examples/generators_async.py +108 -0
  97. {code_towel-1.414 → code_towel-1.732}/test_examples_crossfile/README.md +29 -14
  98. code_towel-1.732/test_examples_crossfile/class_hierarchy/base_record.py +20 -0
  99. code_towel-1.732/test_examples_crossfile/class_hierarchy/scored_record.py +23 -0
  100. code_towel-1.732/test_examples_crossfile/nested_structure/lib/report_generator.py +30 -0
  101. code_towel-1.732/test_examples_crossfile_expected_output/class_hierarchy/base_record.py +25 -0
  102. code_towel-1.732/test_examples_crossfile_expected_output/class_hierarchy/scored_record.py +21 -0
  103. {code_towel-1.414 → code_towel-1.732}/test_examples_crossfile_expected_output/multi_level/api/checkout.py +4 -12
  104. {code_towel-1.414 → code_towel-1.732}/test_examples_crossfile_expected_output/multi_level/core/services/payment.py +2 -2
  105. {code_towel-1.414 → code_towel-1.732}/test_examples_crossfile_expected_output/multi_level/utils/validators.py +2 -2
  106. code_towel-1.732/test_examples_crossfile_expected_output/nested_structure/lib/report_generator.py +30 -0
  107. {code_towel-1.414 → code_towel-1.732}/test_examples_crossfile_expected_output/nested_structure/src/data_processor.py +2 -8
  108. {code_towel-1.414 → code_towel-1.732}/test_examples_crossfile_expected_output/simple_crossfile/admin_service.py +5 -9
  109. {code_towel-1.414 → code_towel-1.732}/test_examples_crossfile_expected_output/simple_crossfile/user_service.py +2 -2
  110. code_towel-1.732/test_examples_expected_output/annotated_module.py +108 -0
  111. {code_towel-1.414 → code_towel-1.732}/test_examples_expected_output/binding_constructs_comprehensive.py +37 -61
  112. {code_towel-1.414 → code_towel-1.732}/test_examples_expected_output/bindings_for_loops.py +16 -28
  113. {code_towel-1.414/test_examples → code_towel-1.732/test_examples_expected_output}/closure_adversarial.py +1 -4
  114. {code_towel-1.414/test_examples → code_towel-1.732/test_examples_expected_output}/control_flow_adversarial.py +7 -48
  115. {code_towel-1.414 → code_towel-1.732}/test_examples_expected_output/example1_simple.py +9 -16
  116. {code_towel-1.414 → code_towel-1.732}/test_examples_expected_output/example4_complex.py +6 -9
  117. {code_towel-1.414/test_examples → code_towel-1.732/test_examples_expected_output}/exception_adversarial.py +6 -50
  118. {code_towel-1.414 → code_towel-1.732}/test_examples_expected_output/fstrings_constants.py +7 -11
  119. {code_towel-1.414 → code_towel-1.732}/test_examples_expected_output/functional_patterns.py +8 -6
  120. code_towel-1.732/test_examples_expected_output/generators_async.py +101 -0
  121. {code_towel-1.414 → code_towel-1.732}/test_examples_expected_output/hygienic_naming.py +14 -16
  122. {code_towel-1.414 → code_towel-1.732}/test_examples_expected_output/method_chains.py +21 -10
  123. {code_towel-1.414 → code_towel-1.732}/test_examples_expected_output/real_world_patterns.py +32 -35
  124. {code_towel-1.414/test_examples → code_towel-1.732/test_examples_expected_output}/return_values.py +5 -23
  125. {code_towel-1.414 → code_towel-1.732}/test_examples_expected_output/scoping_edge_cases.py +6 -10
  126. {code_towel-1.414/test_examples → code_towel-1.732/test_examples_expected_output}/side_effects_adversarial.py +5 -22
  127. {code_towel-1.414/test_examples → code_towel-1.732/test_examples_expected_output}/syntactic_coverage_comprehensive.py +63 -166
  128. {code_towel-1.414/test_examples → code_towel-1.732/test_examples_expected_output}/tricky_edge_cases_adversarial.py +12 -55
  129. {code_towel-1.414 → code_towel-1.732}/tests/OBSERVATIONAL_EQUIVALENCE.md +37 -80
  130. code_towel-1.732/tests/README.md +254 -0
  131. {code_towel-1.414 → code_towel-1.732}/tests/automatic_equivalence_tester.py +64 -57
  132. {code_towel-1.414 → code_towel-1.732}/tests/conftest.py +3 -1
  133. {code_towel-1.414 → code_towel-1.732}/tests/crossfile_equivalence_tester.py +2 -2
  134. {code_towel-1.414 → code_towel-1.732}/tests/edge_case_values.py +1 -1
  135. {code_towel-1.414 → code_towel-1.732}/tests/equivalence_targets.py +20 -10
  136. {code_towel-1.414 → code_towel-1.732}/tests/generate_baseline.py +21 -24
  137. code_towel-1.732/tests/hostile_cases/r102_whole_body_reuse.py +26 -0
  138. code_towel-1.732/tests/hostile_cases/r103_lambda_parameter_spelling.py +25 -0
  139. code_towel-1.732/tests/hostile_cases/r104_walrus_target_spelling.py +14 -0
  140. code_towel-1.732/tests/hostile_cases/r105_closure_over_block_bound_name_rebound_after.py +18 -0
  141. code_towel-1.732/tests/hostile_cases/r106_dir_reads_the_frame.py +13 -0
  142. code_towel-1.732/tests/hostile_cases/r107_unbound_global_argument.py +14 -0
  143. code_towel-1.732/tests/hostile_cases/r108_clustered_sites_assign_the_returned_name.py +23 -0
  144. code_towel-1.732/tests/hostile_cases/r109_eager_optional_import_failed.py +19 -0
  145. code_towel-1.732/tests/hostile_cases/r110_eager_type_checking_import.py +18 -0
  146. code_towel-1.732/tests/hostile_cases/r111_eager_module_except_as_name.py +22 -0
  147. code_towel-1.732/tests/hostile_cases/r112_eager_module_match_capture_unmatched.py +19 -0
  148. code_towel-1.732/tests/hostile_cases/r113_eager_class_attr_in_method.py +17 -0
  149. code_towel-1.732/tests/hostile_cases/r114_eager_nested_class_attr.py +19 -0
  150. code_towel-1.732/tests/hostile_cases/r115_eager_class_in_function_attr.py +20 -0
  151. code_towel-1.732/tests/hostile_cases/r116_eager_enclosing_bound_after_inner_call.py +19 -0
  152. code_towel-1.732/tests/hostile_cases/r117_eager_enclosing_deleted_before_inner_call.py +19 -0
  153. code_towel-1.732/tests/hostile_cases/r118_eager_enclosing_conditionally_bound.py +19 -0
  154. code_towel-1.732/tests/hostile_cases/r119_eager_module_def_and_class_after_call.py +19 -0
  155. code_towel-1.732/tests/hostile_cases/r120_eager_module_import_after_call.py +17 -0
  156. code_towel-1.732/tests/hostile_cases/r121_eager_comprehension_variable.py +16 -0
  157. code_towel-1.732/tests/hostile_cases/r122_eager_lambda_parameter.py +16 -0
  158. code_towel-1.732/tests/hostile_cases/r123_direct_eval_after_block.py +16 -0
  159. code_towel-1.732/tests/hostile_cases/r124_eval_alias_reads_preblock_name.py +46 -0
  160. code_towel-1.732/tests/hostile_cases/r125_locals_dir_after_block.py +40 -0
  161. code_towel-1.732/tests/hostile_cases/r126_locals_in_nested_scope.py +30 -0
  162. code_towel-1.732/tests/hostile_cases/r127_eval_alias_partial_block.py +53 -0
  163. code_towel-1.732/tests/hostile_cases/r128_warn_stacklevel_via_alias.py +31 -0
  164. code_towel-1.732/tests/hostile_cases/r129_warning_registry_dedup.py +18 -0
  165. code_towel-1.732/tests/hostile_cases/r130_resource_observed_after_block_differs.py +20 -0
  166. code_towel-1.732/tests/hostile_cases/r131_weakref_and_id_identity.py +27 -0
  167. code_towel-1.732/tests/hostile_cases/r132_async_comprehension_in_block.py +16 -0
  168. code_towel-1.732/tests/hostile_cases/r133_formfeed.py +13 -0
  169. code_towel-1.732/tests/hostile_cases/r134_u2028_in_comment_shifts_splice.py +17 -0
  170. code_towel-1.732/tests/hostile_cases/r135_formfeed_line_shifts_splice.py +18 -0
  171. code_towel-1.732/tests/hostile_cases/r136_u2028_in_string_literal.py +17 -0
  172. code_towel-1.732/tests/hostile_cases/r137_x1c_x85_in_comment.py +17 -0
  173. code_towel-1.732/tests/hostile_cases/r138_u2028_comment_same_indent_neighbours.py +24 -0
  174. code_towel-1.732/tests/hostile_cases/r139_literal_roundtrip.py +18 -0
  175. code_towel-1.732/tests/hostile_cases/r140_unbound_name_on_untaken_branch.py +21 -0
  176. code_towel-1.732/tests/hostile_cases/r141_module_name_bound_after_an_early_call.py +24 -0
  177. code_towel-1.732/tests/hostile_cases/r142_module_data_rebound_by_callback.py +22 -0
  178. code_towel-1.732/tests/hostile_cases/r143_module_name_shadowed_by_a_local_elsewhere.py +22 -0
  179. code_towel-1.732/tests/hostile_cases/r144_class_cell_in_a_method_helper.py +32 -0
  180. code_towel-1.732/tests/hostile_cases/r145_getframe_assigned_alias.py +47 -0
  181. code_towel-1.732/tests/hostile_cases/r146_module_function_reads_caller_frame.py +37 -0
  182. code_towel-1.732/tests/hostile_crossfile/xf10_reuse_existing_function/pkg/a.py +6 -0
  183. code_towel-1.732/tests/hostile_crossfile/xf10_reuse_existing_function/pkg/b.py +12 -0
  184. code_towel-1.732/tests/hostile_crossfile/xf10_reuse_existing_function/run.py +3 -0
  185. code_towel-1.732/tests/hostile_crossfile/xf11_package_init_reaches_back/pkg/__init__.py +9 -0
  186. code_towel-1.732/tests/hostile_crossfile/xf11_package_init_reaches_back/pkg/detail.py +7 -0
  187. code_towel-1.732/tests/hostile_crossfile/xf11_package_init_reaches_back/run.py +3 -0
  188. code_towel-1.732/tests/hostile_crossfile/xf12_cycle_through_package_init/pkg/__init__.py +1 -0
  189. code_towel-1.732/tests/hostile_crossfile/xf12_cycle_through_package_init/pkg/core.py +3 -0
  190. code_towel-1.732/tests/hostile_crossfile/xf12_cycle_through_package_init/pkg/sub/__init__.py +2 -0
  191. code_towel-1.732/tests/hostile_crossfile/xf12_cycle_through_package_init/pkg/sub/leaf.py +6 -0
  192. code_towel-1.732/tests/hostile_crossfile/xf12_cycle_through_package_init/pkg/vendor/tool.py +6 -0
  193. code_towel-1.732/tests/hostile_crossfile/xf12_cycle_through_package_init/run.py +4 -0
  194. code_towel-1.732/tests/hostile_crossfile/xf13_import_time_effects/pkg/a.py +8 -0
  195. code_towel-1.732/tests/hostile_crossfile/xf13_import_time_effects/pkg/b.py +10 -0
  196. code_towel-1.732/tests/hostile_crossfile/xf13_import_time_effects/run.py +4 -0
  197. code_towel-1.732/tests/hostile_crossfile/xf14_script_with_leading_statement/pkg/app.py +9 -0
  198. code_towel-1.732/tests/hostile_crossfile/xf14_script_with_leading_statement/pkg/util.py +8 -0
  199. code_towel-1.732/tests/hostile_crossfile/xf14_script_with_leading_statement/run.py +3 -0
  200. code_towel-1.732/tests/hostile_crossfile/xf15_ancestor_in_another_module/pkg/base.py +4 -0
  201. code_towel-1.732/tests/hostile_crossfile/xf15_ancestor_in_another_module/pkg/servers.py +22 -0
  202. code_towel-1.732/tests/hostile_crossfile/xf15_ancestor_in_another_module/pkg/tokens.py +7 -0
  203. code_towel-1.732/tests/hostile_crossfile/xf15_ancestor_in_another_module/run.py +5 -0
  204. code_towel-1.732/tests/hostile_crossfile/xf7_docstring_import/pkg/__init__.py +0 -0
  205. code_towel-1.732/tests/hostile_crossfile/xf8_helper_name_collision/pkg/__init__.py +0 -0
  206. code_towel-1.732/tests/hostile_crossfile/xf9_same_named_base_class/pkg/__init__.py +0 -0
  207. code_towel-1.732/tests/hostile_crossfile/xf9_same_named_base_class/pkg/one/__init__.py +0 -0
  208. code_towel-1.732/tests/hostile_crossfile/xf9_same_named_base_class/pkg/two/__init__.py +0 -0
  209. code_towel-1.732/tests/hostile_execution.py +31 -0
  210. {code_towel-1.414 → code_towel-1.732}/tests/test_adversarial_renaming.py +86 -0
  211. {code_towel-1.414 → code_towel-1.732}/tests/test_adversarial_semantics.py +21 -24
  212. code_towel-1.732/tests/test_analysis_edge_paths.py +165 -0
  213. {code_towel-1.414 → code_towel-1.732}/tests/test_analysis_sessions.py +75 -7
  214. code_towel-1.732/tests/test_ancestor_insertion.py +76 -0
  215. {code_towel-1.414 → code_towel-1.732}/tests/test_assignment_analyzer_comprehensive.py +45 -12
  216. code_towel-1.732/tests/test_audit_io_safety.py +306 -0
  217. {code_towel-1.414 → code_towel-1.732}/tests/test_backend_layouts.py +61 -3
  218. code_towel-1.732/tests/test_binding_context_memo.py +58 -0
  219. {code_towel-1.414 → code_towel-1.732}/tests/test_binding_detector.py +1 -2
  220. {code_towel-1.414 → code_towel-1.732}/tests/test_binding_detector_edge_cases.py +3 -1
  221. {code_towel-1.414 → code_towel-1.732}/tests/test_bindings.py +101 -13
  222. {code_towel-1.414 → code_towel-1.732}/tests/test_breakers.py +1 -1
  223. {code_towel-1.414 → code_towel-1.732}/tests/test_builtins_comprehensive.py +1 -1
  224. code_towel-1.732/tests/test_cache_lifetimes.py +71 -0
  225. {code_towel-1.414 → code_towel-1.732}/tests/test_candidate_index.py +23 -20
  226. {code_towel-1.414 → code_towel-1.732}/tests/test_change_transactions.py +7 -4
  227. code_towel-1.732/tests/test_cli_dispatch_paths.py +83 -0
  228. code_towel-1.732/tests/test_cli_input_errors.py +86 -0
  229. {code_towel-1.414 → code_towel-1.732}/tests/test_cli_integration.py +62 -27
  230. code_towel-1.732/tests/test_cli_oracle_lifecycle.py +88 -0
  231. {code_towel-1.414 → code_towel-1.732}/tests/test_cli_output_safety.py +4 -9
  232. {code_towel-1.414 → code_towel-1.732}/tests/test_comprehensive_coverage.py +15 -48
  233. {code_towel-1.414 → code_towel-1.732}/tests/test_crossfile_integration.py +142 -77
  234. {code_towel-1.414 → code_towel-1.732}/tests/test_crossfile_observational_equivalence.py +1 -1
  235. {code_towel-1.414 → code_towel-1.732}/tests/test_definite_assignment.py +42 -0
  236. code_towel-1.732/tests/test_dependency_audit_export.py +81 -0
  237. code_towel-1.732/tests/test_distinct_proposals.py +88 -0
  238. code_towel-1.732/tests/test_ecosystem_manifest_regressions.py +89 -0
  239. code_towel-1.732/tests/test_ecosystem_verdicts.py +1233 -0
  240. {code_towel-1.414 → code_towel-1.732}/tests/test_engine_adversarial.py +61 -41
  241. code_towel-1.732/tests/test_environment_independence.py +223 -0
  242. {code_towel-1.414 → code_towel-1.732}/tests/test_equivalence_harness_regressions.py +8 -2
  243. {code_towel-1.414 → code_towel-1.732}/tests/test_equivalence_target_selection.py +20 -12
  244. code_towel-1.732/tests/test_error_paths.py +275 -0
  245. code_towel-1.732/tests/test_exceptions.py +16 -0
  246. {code_towel-1.414 → code_towel-1.732}/tests/test_extractor_additional_branches.py +17 -15
  247. {code_towel-1.414 → code_towel-1.732}/tests/test_extractor_augassign_and_fstrings.py +7 -10
  248. {code_towel-1.414 → code_towel-1.732}/tests/test_extractor_callee_and_multi_return.py +9 -9
  249. {code_towel-1.414 → code_towel-1.732}/tests/test_extractor_comprehensive.py +87 -46
  250. {code_towel-1.414 → code_towel-1.732}/tests/test_extractor_edge_cases.py +23 -17
  251. {code_towel-1.414 → code_towel-1.732}/tests/test_extractor_final_lines.py +22 -18
  252. {code_towel-1.414 → code_towel-1.732}/tests/test_extractor_generate_call_variants.py +10 -16
  253. {code_towel-1.414 → code_towel-1.732}/tests/test_extractor_more_paths.py +4 -4
  254. {code_towel-1.414 → code_towel-1.732}/tests/test_extractor_preamble_and_call_mapping.py +33 -25
  255. {code_towel-1.414 → code_towel-1.732}/tests/test_extractor_remaining_branches.py +41 -35
  256. {code_towel-1.414 → code_towel-1.732}/tests/test_extractor_return_statements.py +28 -17
  257. {code_towel-1.414 → code_towel-1.732}/tests/test_extractor_substituter_and_helpers.py +68 -67
  258. code_towel-1.732/tests/test_filesystem_guards.py +73 -0
  259. {code_towel-1.414 → code_towel-1.732}/tests/test_final_coverage_push.py +37 -47
  260. code_towel-1.732/tests/test_fixed_point_refusals.py +141 -0
  261. code_towel-1.732/tests/test_forwarder_chains.py +264 -0
  262. {code_towel-1.414 → code_towel-1.732}/tests/test_frame_sensitivity_scan.py +14 -6
  263. {code_towel-1.414 → code_towel-1.732}/tests/test_free_variable_correspondence.py +15 -14
  264. {code_towel-1.414 → code_towel-1.732}/tests/test_fstrings.py +44 -11
  265. code_towel-1.732/tests/test_function_facts_equivalence.py +78 -0
  266. code_towel-1.732/tests/test_function_index.py +76 -0
  267. code_towel-1.732/tests/test_generated_code_formatting.py +282 -0
  268. code_towel-1.732/tests/test_helper_annotations.py +436 -0
  269. {code_towel-1.414 → code_towel-1.732}/tests/test_helper_inventory.py +71 -2
  270. {code_towel-1.414 → code_towel-1.732}/tests/test_helpers.py +111 -4
  271. {code_towel-1.414 → code_towel-1.732}/tests/test_hostile_battery.py +57 -12
  272. code_towel-1.732/tests/test_hostile_crossfile_battery.py +77 -0
  273. {code_towel-1.414 → code_towel-1.732}/tests/test_import_bindings.py +7 -11
  274. code_towel-1.732/tests/test_import_cycle_package_init.py +74 -0
  275. {code_towel-1.414 → code_towel-1.732}/tests/test_import_resolution.py +7 -6
  276. code_towel-1.732/tests/test_incremental_global_passes.py +122 -0
  277. {code_towel-1.414 → code_towel-1.732}/tests/test_instantiation_check.py +70 -19
  278. code_towel-1.732/tests/test_lazy_engine_import.py +35 -0
  279. code_towel-1.732/tests/test_lexical_binding_regressions.py +203 -0
  280. {code_towel-1.414 → code_towel-1.732}/tests/test_method_level_and_attributes.py +3 -7
  281. {code_towel-1.414 → code_towel-1.732}/tests/test_method_receiver_arguments.py +3 -2
  282. code_towel-1.732/tests/test_module_names_stay_free.py +119 -0
  283. {code_towel-1.414 → code_towel-1.732}/tests/test_observational_equivalence.py +135 -90
  284. {code_towel-1.414 → code_towel-1.732}/tests/test_orphan_detection.py +30 -24
  285. {code_towel-1.414 → code_towel-1.732}/tests/test_orphan_detector_comprehensive.py +92 -166
  286. code_towel-1.732/tests/test_out_of_place_cycle_regression.py +166 -0
  287. {code_towel-1.414 → code_towel-1.732}/tests/test_overlap_filtering.py +30 -22
  288. code_towel-1.732/tests/test_pair_budget.py +111 -0
  289. code_towel-1.732/tests/test_parallel_evaluation.py +222 -0
  290. code_towel-1.732/tests/test_parameters.py +31 -0
  291. {code_towel-1.414 → code_towel-1.732}/tests/test_parent_watchdog.py +45 -7
  292. code_towel-1.732/tests/test_perf_memos.py +237 -0
  293. {code_towel-1.414 → code_towel-1.732}/tests/test_pipeline_api.py +16 -19
  294. {code_towel-1.414 → code_towel-1.732}/tests/test_pipeline_phases.py +66 -70
  295. code_towel-1.732/tests/test_progress_modes.py +162 -0
  296. code_towel-1.732/tests/test_project_layout_and_imports.py +266 -0
  297. {code_towel-1.414 → code_towel-1.732}/tests/test_project_layout_behavior.py +12 -7
  298. code_towel-1.732/tests/test_project_layout_shim.py +19 -0
  299. {code_towel-1.414 → code_towel-1.732}/tests/test_promotion_and_mangling.py +37 -5
  300. code_towel-1.732/tests/test_properties.py +1187 -0
  301. code_towel-1.732/tests/test_recovery_journal.py +413 -0
  302. {code_towel-1.414 → code_towel-1.732}/tests/test_refactor_engine_comprehensive.py +92 -120
  303. {code_towel-1.414 → code_towel-1.732}/tests/test_refactor_engine_edge_cases.py +38 -70
  304. {code_towel-1.414 → code_towel-1.732}/tests/test_refactor_engine_more.py +11 -10
  305. {code_towel-1.414 → code_towel-1.732}/tests/test_refactor_engine_targeted_branches.py +120 -129
  306. {code_towel-1.414 → code_towel-1.732}/tests/test_refactoring_engine.py +6 -6
  307. {code_towel-1.414 → code_towel-1.732}/tests/test_regression.py +107 -5
  308. {code_towel-1.414 → code_towel-1.732}/tests/test_regressions_broader.py +17 -13
  309. {code_towel-1.414 → code_towel-1.732}/tests/test_release_regressions.py +27 -7
  310. code_towel-1.732/tests/test_rename_audit_regressions.py +225 -0
  311. code_towel-1.732/tests/test_rename_discovery_regressions.py +175 -0
  312. code_towel-1.732/tests/test_return_alignment.py +44 -0
  313. {code_towel-1.414 → code_towel-1.732}/tests/test_return_values.py +5 -5
  314. code_towel-1.732/tests/test_returned_variables_not_orphaned.py +98 -0
  315. code_towel-1.732/tests/test_reuse_existing_function.py +578 -0
  316. code_towel-1.732/tests/test_reuse_type_checks.py +125 -0
  317. code_towel-1.732/tests/test_robustness_paths.py +178 -0
  318. {code_towel-1.414 → code_towel-1.732}/tests/test_scope_analyzer.py +22 -8
  319. {code_towel-1.414 → code_towel-1.732}/tests/test_scope_analyzer_comprehensive.py +31 -25
  320. code_towel-1.732/tests/test_semantic_guard_traces.py +186 -0
  321. {code_towel-1.414 → code_towel-1.732}/tests/test_semantic_guards_extended.py +42 -28
  322. {code_towel-1.414 → code_towel-1.732}/tests/test_semantic_safety_regressions.py +68 -11
  323. {code_towel-1.414 → code_towel-1.732}/tests/test_signature_prefilter.py +10 -23
  324. code_towel-1.732/tests/test_source_encoding.py +86 -0
  325. code_towel-1.732/tests/test_stale_proposal_recovery.py +209 -0
  326. code_towel-1.732/tests/test_statement_facts.py +267 -0
  327. {code_towel-1.414 → code_towel-1.732}/tests/test_structural_memo.py +6 -2
  328. code_towel-1.732/tests/test_substitution_keys.py +25 -0
  329. code_towel-1.732/tests/test_symlinked_input_directory.py +118 -0
  330. {code_towel-1.414 → code_towel-1.732}/tests/test_thunk_inlining.py +45 -7
  331. code_towel-1.732/tests/test_trivial_helper_filter.py +116 -0
  332. code_towel-1.732/tests/test_type_inference.py +656 -0
  333. code_towel-1.732/tests/test_type_oracle_projects.py +555 -0
  334. code_towel-1.732/tests/test_type_run_policy.py +408 -0
  335. {code_towel-1.414 → code_towel-1.732}/tests/test_unifier_additional_branches.py +25 -4
  336. {code_towel-1.414 → code_towel-1.732}/tests/test_unifier_batch2.py +1 -6
  337. {code_towel-1.414 → code_towel-1.732}/tests/test_unifier_batch3.py +2 -7
  338. {code_towel-1.414 → code_towel-1.732}/tests/test_unifier_batch4.py +1 -6
  339. {code_towel-1.414 → code_towel-1.732}/tests/test_unifier_batch5.py +2 -7
  340. {code_towel-1.414 → code_towel-1.732}/tests/test_unifier_bound_variables.py +8 -8
  341. {code_towel-1.414 → code_towel-1.732}/tests/test_unifier_comprehensions.py +4 -2
  342. {code_towel-1.414 → code_towel-1.732}/tests/test_unifier_comprehensive.py +11 -1
  343. {code_towel-1.414 → code_towel-1.732}/tests/test_unifier_core.py +12 -17
  344. {code_towel-1.414 → code_towel-1.732}/tests/test_unifier_edge_cases.py +21 -22
  345. {code_towel-1.414 → code_towel-1.732}/tests/test_unifier_state_reset.py +1 -0
  346. code_towel-1.732/tests/test_unsupported_layout.py +84 -0
  347. {code_towel-1.414 → code_towel-1.732}/tests/test_validation_partial_lifetime.py +8 -7
  348. {code_towel-1.414 → code_towel-1.732}/tests/test_variable_capture_bug.py +8 -6
  349. code_towel-1.732/tests/test_visitors.py +405 -0
  350. {code_towel-1.414 → code_towel-1.732}/uv.lock +632 -4
  351. code_towel-1.414/.templates/README.md +0 -406
  352. code_towel-1.414/CHANGELOG.md +0 -48
  353. code_towel-1.414/CONTRIBUTING.md +0 -175
  354. code_towel-1.414/PKG-INFO +0 -175
  355. code_towel-1.414/README.md +0 -141
  356. code_towel-1.414/SECURITY.md +0 -13
  357. code_towel-1.414/docs/ARCHITECTURE.md +0 -347
  358. code_towel-1.414/docs/BUG_HANDOFF_2025-12-03.md +0 -278
  359. code_towel-1.414/docs/CROSS_FILE_REFACTORING.md +0 -233
  360. code_towel-1.414/docs/JUSTFILE_REFERENCE.md +0 -361
  361. code_towel-1.414/docs/KNOWN_LIMITATIONS.md +0 -224
  362. code_towel-1.414/docs/PRODUCTION_READINESS.md +0 -295
  363. code_towel-1.414/docs/README_DIRECTORY_USAGE.md +0 -265
  364. code_towel-1.414/docs/RELEASING.md +0 -36
  365. code_towel-1.414/docs/TESTING_AUDIT.md +0 -281
  366. code_towel-1.414/docs/TROUBLESHOOTING.md +0 -284
  367. code_towel-1.414/docs/UNIFICATION_IMPLEMENTATION.md +0 -257
  368. code_towel-1.414/docs/USAGE_GUIDE.md +0 -388
  369. code_towel-1.414/scripts/debug_pair.py +0 -119
  370. code_towel-1.414/scripts/dry +0 -7
  371. code_towel-1.414/scripts/ecosystem/manifest.toml +0 -720
  372. code_towel-1.414/scripts/ecosystem_check.py +0 -499
  373. code_towel-1.414/scripts/preview +0 -162
  374. code_towel-1.414/src/code_towel.egg-info/PKG-INFO +0 -175
  375. code_towel-1.414/src/code_towel.egg-info/entry_points.txt +0 -4
  376. code_towel-1.414/src/towel/cli.py +0 -987
  377. code_towel-1.414/src/towel/renaming.py +0 -877
  378. code_towel-1.414/src/towel/unification/__init__.py +0 -24
  379. code_towel-1.414/src/towel/unification/ast_normalizer.py +0 -237
  380. code_towel-1.414/src/towel/unification/ast_pretty_printer.py +0 -133
  381. code_towel-1.414/src/towel/unification/definite_assignment.py +0 -231
  382. code_towel-1.414/src/towel/unification/exceptions.py +0 -113
  383. code_towel-1.414/src/towel/unification/extractor.py +0 -878
  384. code_towel-1.414/src/towel/unification/models.py +0 -195
  385. code_towel-1.414/src/towel/unification/nominal_unifier.py +0 -375
  386. code_towel-1.414/src/towel/unification/orphan_detector.py +0 -188
  387. code_towel-1.414/src/towel/unification/refactor_engine.py +0 -4582
  388. code_towel-1.414/src/towel/unification/scope_analyzer.py +0 -744
  389. code_towel-1.414/src/towel/unification/semantic_safety.py +0 -741
  390. code_towel-1.414/src/towel/unification/unifier.py +0 -2190
  391. code_towel-1.414/src/towel/unification/visitor_utils.py +0 -83
  392. code_towel-1.414/src/towel/unification/visitors.py +0 -399
  393. code_towel-1.414/test_examples/binding_constructs_comprehensive.py +0 -137
  394. code_towel-1.414/test_examples/bindings_for_loops.py +0 -61
  395. code_towel-1.414/test_examples/complex_expressions.py +0 -80
  396. code_towel-1.414/test_examples/edge_cases_stress_test.py +0 -328
  397. code_towel-1.414/test_examples/example1_simple.py +0 -56
  398. code_towel-1.414/test_examples/example2_classes.py +0 -65
  399. code_towel-1.414/test_examples/example4_complex.py +0 -56
  400. code_towel-1.414/test_examples/fstrings_constants.py +0 -84
  401. code_towel-1.414/test_examples/functional_patterns.py +0 -288
  402. code_towel-1.414/test_examples/global_nonlocal_examples.py +0 -129
  403. code_towel-1.414/test_examples/hygienic_naming.py +0 -152
  404. code_towel-1.414/test_examples/method_chains.py +0 -240
  405. code_towel-1.414/test_examples/nested_structures.py +0 -206
  406. code_towel-1.414/test_examples/real_world_patterns.py +0 -312
  407. code_towel-1.414/test_examples/referential_transparency.py +0 -258
  408. code_towel-1.414/test_examples/scoping_edge_cases.py +0 -117
  409. code_towel-1.414/test_examples_expected_output/bindings_comprehensions.py +0 -61
  410. code_towel-1.414/test_examples_expected_output/closure_adversarial.py +0 -119
  411. code_towel-1.414/test_examples_expected_output/control_flow_adversarial.py +0 -145
  412. code_towel-1.414/test_examples_expected_output/example3_file1.py +0 -26
  413. code_towel-1.414/test_examples_expected_output/example3_file2.py +0 -26
  414. code_towel-1.414/test_examples_expected_output/exception_adversarial.py +0 -156
  415. code_towel-1.414/test_examples_expected_output/return_values.py +0 -96
  416. code_towel-1.414/test_examples_expected_output/side_effects_adversarial.py +0 -122
  417. code_towel-1.414/test_examples_expected_output/syntactic_coverage_comprehensive.py +0 -709
  418. code_towel-1.414/test_examples_expected_output/tricky_edge_cases_adversarial.py +0 -217
  419. code_towel-1.414/tests/README.md +0 -87
  420. code_towel-1.414/tests/test_ancestor_insertion.py +0 -86
  421. code_towel-1.414/tests/test_ast_normalizer_comprehensive.py +0 -644
  422. code_towel-1.414/tests/test_ast_pretty_printer.py +0 -77
  423. code_towel-1.414/tests/test_ast_pretty_printer_comprehensive.py +0 -550
  424. code_towel-1.414/tests/test_ast_pretty_printer_more.py +0 -26
  425. code_towel-1.414/tests/test_exceptions.py +0 -193
  426. code_towel-1.414/tests/test_hostile_crossfile_battery.py +0 -52
  427. code_towel-1.414/tests/test_legacy_normalizers.py +0 -69
  428. code_towel-1.414/tests/test_nominal_unifier.py +0 -143
  429. code_towel-1.414/tests/test_progress_modes.py +0 -81
  430. code_towel-1.414/tests/test_project_layout_and_imports.py +0 -145
  431. code_towel-1.414/tests/test_visitor_utils_comprehensive.py +0 -363
  432. {code_towel-1.414 → code_towel-1.732}/CODE_OF_CONDUCT.md +0 -0
  433. {code_towel-1.414 → code_towel-1.732}/LICENSE +0 -0
  434. {code_towel-1.414 → code_towel-1.732}/docs/OPEN_SOURCE_AUDIT.md +0 -0
  435. {code_towel-1.414 → code_towel-1.732}/scripts/bench_refactor.py +0 -0
  436. {code_towel-1.414 → code_towel-1.732}/scripts/report_net_benefit_diff.py +0 -0
  437. {code_towel-1.414 → code_towel-1.732}/scripts/run_crossfile_coverage.py +0 -0
  438. {code_towel-1.414 → code_towel-1.732}/scripts/set_version.py +0 -0
  439. {code_towel-1.414 → code_towel-1.732}/scripts/trace_proposals.py +0 -0
  440. {code_towel-1.414 → code_towel-1.732}/scripts/verify-examples +0 -0
  441. {code_towel-1.414 → code_towel-1.732}/setup.cfg +0 -0
  442. {code_towel-1.414 → code_towel-1.732}/src/code_towel.egg-info/dependency_links.txt +0 -0
  443. {code_towel-1.414 → code_towel-1.732}/src/code_towel.egg-info/top_level.txt +0 -0
  444. {code_towel-1.414 → code_towel-1.732}/src/towel/py.typed +0 -0
  445. {code_towel-1.414/.templates → code_towel-1.732/test_examples}/binding_constructs_comprehensive.py +0 -0
  446. {code_towel-1.414/.templates → code_towel-1.732/test_examples}/bindings_comprehensions.py +0 -0
  447. {code_towel-1.414/.templates → code_towel-1.732/test_examples}/bindings_for_loops.py +0 -0
  448. {code_towel-1.414/.templates → code_towel-1.732/test_examples}/closure_adversarial.py +0 -0
  449. {code_towel-1.414/.templates → code_towel-1.732/test_examples}/complex_expressions.py +0 -0
  450. {code_towel-1.414/.templates → code_towel-1.732/test_examples}/control_flow_adversarial.py +0 -0
  451. {code_towel-1.414/.templates → code_towel-1.732/test_examples}/edge_cases_stress_test.py +0 -0
  452. {code_towel-1.414/.templates → code_towel-1.732/test_examples}/example1_simple.py +0 -0
  453. {code_towel-1.414/.templates → code_towel-1.732/test_examples}/example2_classes.py +0 -0
  454. {code_towel-1.414/.templates → code_towel-1.732/test_examples}/example3_file1.py +0 -0
  455. {code_towel-1.414/.templates → code_towel-1.732/test_examples}/example3_file2.py +0 -0
  456. {code_towel-1.414/.templates → code_towel-1.732/test_examples}/example4_complex.py +0 -0
  457. {code_towel-1.414/.templates → code_towel-1.732/test_examples}/exception_adversarial.py +0 -0
  458. {code_towel-1.414/.templates → code_towel-1.732/test_examples}/fstrings_constants.py +0 -0
  459. {code_towel-1.414/.templates → code_towel-1.732/test_examples}/functional_patterns.py +0 -0
  460. {code_towel-1.414/.templates → code_towel-1.732/test_examples}/global_nonlocal_examples.py +0 -0
  461. {code_towel-1.414/.templates → code_towel-1.732/test_examples}/hygienic_naming.py +0 -0
  462. {code_towel-1.414/.templates → code_towel-1.732/test_examples}/method_chains.py +0 -0
  463. {code_towel-1.414/.templates → code_towel-1.732/test_examples}/nested_structures.py +0 -0
  464. {code_towel-1.414/.templates → code_towel-1.732/test_examples}/real_world_patterns.py +0 -0
  465. {code_towel-1.414/.templates → code_towel-1.732/test_examples}/referential_transparency.py +0 -0
  466. {code_towel-1.414/.templates → code_towel-1.732/test_examples}/return_values.py +0 -0
  467. {code_towel-1.414/.templates → code_towel-1.732/test_examples}/scoping_edge_cases.py +0 -0
  468. {code_towel-1.414/.templates → code_towel-1.732/test_examples}/side_effects_adversarial.py +0 -0
  469. {code_towel-1.414/.templates → code_towel-1.732/test_examples}/syntactic_coverage_comprehensive.py +0 -0
  470. {code_towel-1.414/.templates → code_towel-1.732/test_examples}/tricky_edge_cases_adversarial.py +0 -0
  471. {code_towel-1.414 → code_towel-1.732}/test_examples_crossfile/multi_level/api/checkout.py +0 -0
  472. {code_towel-1.414 → code_towel-1.732}/test_examples_crossfile/multi_level/core/services/payment.py +0 -0
  473. {code_towel-1.414 → code_towel-1.732}/test_examples_crossfile/multi_level/utils/validators.py +0 -0
  474. {code_towel-1.414 → code_towel-1.732}/test_examples_crossfile/nested_structure/src/data_processor.py +0 -0
  475. {code_towel-1.414 → code_towel-1.732}/test_examples_crossfile/simple_crossfile/admin_service.py +0 -0
  476. {code_towel-1.414 → code_towel-1.732}/test_examples_crossfile/simple_crossfile/user_service.py +0 -0
  477. {code_towel-1.414/test_examples → code_towel-1.732/test_examples_expected_output}/bindings_comprehensions.py +0 -0
  478. {code_towel-1.414 → code_towel-1.732}/test_examples_expected_output/complex_expressions.py +0 -0
  479. {code_towel-1.414 → code_towel-1.732}/test_examples_expected_output/edge_cases_stress_test.py +0 -0
  480. {code_towel-1.414 → code_towel-1.732}/test_examples_expected_output/example2_classes.py +0 -0
  481. {code_towel-1.414/test_examples → code_towel-1.732/test_examples_expected_output}/example3_file1.py +0 -0
  482. {code_towel-1.414/test_examples → code_towel-1.732/test_examples_expected_output}/example3_file2.py +0 -0
  483. {code_towel-1.414 → code_towel-1.732}/test_examples_expected_output/global_nonlocal_examples.py +0 -0
  484. {code_towel-1.414 → code_towel-1.732}/test_examples_expected_output/nested_structures.py +0 -0
  485. {code_towel-1.414 → code_towel-1.732}/test_examples_expected_output/referential_transparency.py +0 -0
  486. {code_towel-1.414 → code_towel-1.732}/tests/__init__.py +0 -0
  487. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/h01_side_effect_order.py +0 -0
  488. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/h02_conditional_eval.py +0 -0
  489. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/h03_loop_reeval.py +0 -0
  490. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/h04_closure_freevar.py +0 -0
  491. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/h05_cond_return_plus_retvar.py +0 -0
  492. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/h06_del_in_block.py +0 -0
  493. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/h07_except_unbind.py +0 -0
  494. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/h08_late_binding_closure.py +0 -0
  495. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/h10_short_circuit.py +0 -0
  496. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/h13_dunder_file.py +0 -0
  497. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/h26_match_capture.py +0 -0
  498. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/h38_closure_after_block.py +0 -0
  499. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/h39_augassign_after_block.py +0 -0
  500. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/h51_semicolons.py +0 -0
  501. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/h52_del_after_block.py +0 -0
  502. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/h53_nested_func_reads_retvar.py +0 -0
  503. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/h54_attr_param_property.py +0 -0
  504. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/h55_walrus_used_after.py +0 -0
  505. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/h56_global_write.py +0 -0
  506. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/h57_exception_in_param.py +0 -0
  507. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/h58_nested_def_freevar_reassigned.py +0 -0
  508. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/h59_retvar_conditional_unbound.py +0 -0
  509. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/h60_finally_return.py +0 -0
  510. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/h61_str_method_param.py +0 -0
  511. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r01_property_thunk_order.py +0 -0
  512. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r02_cluster_attrs.py +0 -0
  513. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r07_attr_two_positions.py +0 -0
  514. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r100_clustered_site_with_live_binding.py +0 -0
  515. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r101_same_named_method_forces_module_helper.py +0 -0
  516. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r11_same_function_pair.py +0 -0
  517. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r14_starred_param.py +0 -0
  518. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r22_fstring_attr.py +0 -0
  519. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r26_attr_store_param.py +0 -0
  520. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r27_del_subscript.py +0 -0
  521. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r32_method_callee.py +0 -0
  522. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r38_name_two_positions.py +0 -0
  523. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r39_cluster_alpha.py +0 -0
  524. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r40_class_hierarchy.py +0 -0
  525. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r41_conditional_call_param.py +0 -0
  526. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r42_loop_call_param.py +0 -0
  527. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r43_opaque_decorator_receiver.py +0 -0
  528. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r44_cluster_nested_overlap.py +0 -0
  529. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r45_async_no_await.py +0 -0
  530. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r46_nonlocal_counter.py +0 -0
  531. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r47_lru_cache_method.py +0 -0
  532. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r50_helper_name_collision.py +0 -0
  533. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r53_try_else_binding.py +0 -0
  534. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r54_with_binding_used_after.py +0 -0
  535. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r55_chained_assign.py +0 -0
  536. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r57_star_unpack.py +0 -0
  537. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r58_escaping_closure.py +0 -0
  538. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r60_local_import.py +0 -0
  539. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r61_same_function_clean.py +0 -0
  540. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r62_recursion.py +0 -0
  541. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r63_except_var_used_in_handler.py +0 -0
  542. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r66_conditional_callee.py +0 -0
  543. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r69_annassign.py +0 -0
  544. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r72_global_promoted.py +0 -0
  545. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r73_slice_vs_index.py +0 -0
  546. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r74_starred_vs_plain.py +0 -0
  547. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r75_prior_helper_param_names.py +0 -0
  548. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r76_return_order.py +0 -0
  549. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r77_mixed_return_and_variables.py +0 -0
  550. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r78_walrus_in_parameter.py +0 -0
  551. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r79_list_display_in_loop.py +0 -0
  552. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r80_inlined_leading_thunk.py +0 -0
  553. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r81_conditionally_bound_free_variable.py +0 -0
  554. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r82_local_classes_same_name.py +0 -0
  555. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r83_tab_indented_class.py +0 -0
  556. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r84_warn_stacklevel.py +0 -0
  557. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r85_conditionally_bound_parameter.py +0 -0
  558. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r86_annotated_assignment_live.py +0 -0
  559. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r87_nested_function_in_method.py +0 -0
  560. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r88_elif_branch.py +0 -0
  561. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r89_conditionally_bound_return.py +0 -0
  562. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r90_cluster_across_classes.py +0 -0
  563. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r91_class_body_helper.py +0 -0
  564. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r92_parameterless_class_body_helper.py +0 -0
  565. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r93_import_name_differs.py +0 -0
  566. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r94_import_binds_live_name.py +0 -0
  567. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r95_type_checking_annotation.py +0 -0
  568. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r96_unpacked_targets_live.py +0 -0
  569. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r97_helper_in_function_with_outside_site.py +0 -0
  570. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r98_same_named_methods_nested_helpers.py +0 -0
  571. {code_towel-1.414 → code_towel-1.732}/tests/hostile_cases/r99_partial_return_branches.py +0 -0
  572. {code_towel-1.414/tests/hostile_crossfile/xf3_same_named_local_function → code_towel-1.732/tests/hostile_crossfile/xf10_reuse_existing_function}/pkg/__init__.py +0 -0
  573. {code_towel-1.414/tests/hostile_crossfile/xf4_same_named_class/pkg → code_towel-1.732/tests/hostile_crossfile/xf12_cycle_through_package_init/pkg/vendor}/__init__.py +0 -0
  574. {code_towel-1.414/tests/hostile_crossfile/xf5_dunder_file → code_towel-1.732/tests/hostile_crossfile/xf13_import_time_effects}/pkg/__init__.py +0 -0
  575. {code_towel-1.414/tests/hostile_crossfile/xf6_same_alias_different_import → code_towel-1.732/tests/hostile_crossfile/xf14_script_with_leading_statement}/pkg/__init__.py +0 -0
  576. {code_towel-1.414/tests/hostile_crossfile/xf7_docstring_import → code_towel-1.732/tests/hostile_crossfile/xf15_ancestor_in_another_module}/pkg/__init__.py +0 -0
  577. {code_towel-1.414/tests/hostile_crossfile/xf8_helper_name_collision → code_towel-1.732/tests/hostile_crossfile/xf3_same_named_local_function}/pkg/__init__.py +0 -0
  578. {code_towel-1.414 → code_towel-1.732}/tests/hostile_crossfile/xf3_same_named_local_function/pkg/a.py +0 -0
  579. {code_towel-1.414 → code_towel-1.732}/tests/hostile_crossfile/xf3_same_named_local_function/pkg/b.py +0 -0
  580. {code_towel-1.414 → code_towel-1.732}/tests/hostile_crossfile/xf3_same_named_local_function/run.py +0 -0
  581. {code_towel-1.414/tests/hostile_crossfile/xf9_same_named_base_class → code_towel-1.732/tests/hostile_crossfile/xf4_same_named_class}/pkg/__init__.py +0 -0
  582. {code_towel-1.414 → code_towel-1.732}/tests/hostile_crossfile/xf4_same_named_class/pkg/a.py +0 -0
  583. {code_towel-1.414 → code_towel-1.732}/tests/hostile_crossfile/xf4_same_named_class/pkg/b.py +0 -0
  584. {code_towel-1.414 → code_towel-1.732}/tests/hostile_crossfile/xf4_same_named_class/run.py +0 -0
  585. {code_towel-1.414/tests/hostile_crossfile/xf9_same_named_base_class/pkg/one → code_towel-1.732/tests/hostile_crossfile/xf5_dunder_file/pkg}/__init__.py +0 -0
  586. {code_towel-1.414 → code_towel-1.732}/tests/hostile_crossfile/xf5_dunder_file/pkg/a.py +0 -0
  587. {code_towel-1.414 → code_towel-1.732}/tests/hostile_crossfile/xf5_dunder_file/pkg/b.py +0 -0
  588. {code_towel-1.414 → code_towel-1.732}/tests/hostile_crossfile/xf5_dunder_file/run.py +0 -0
  589. {code_towel-1.414/tests/hostile_crossfile/xf9_same_named_base_class/pkg/two → code_towel-1.732/tests/hostile_crossfile/xf6_same_alias_different_import/pkg}/__init__.py +0 -0
  590. {code_towel-1.414 → code_towel-1.732}/tests/hostile_crossfile/xf6_same_alias_different_import/pkg/a.py +0 -0
  591. {code_towel-1.414 → code_towel-1.732}/tests/hostile_crossfile/xf6_same_alias_different_import/pkg/b.py +0 -0
  592. {code_towel-1.414 → code_towel-1.732}/tests/hostile_crossfile/xf6_same_alias_different_import/pkg/util1.py +0 -0
  593. {code_towel-1.414 → code_towel-1.732}/tests/hostile_crossfile/xf6_same_alias_different_import/pkg/util2.py +0 -0
  594. {code_towel-1.414 → code_towel-1.732}/tests/hostile_crossfile/xf6_same_alias_different_import/run.py +0 -0
  595. {code_towel-1.414 → code_towel-1.732}/tests/hostile_crossfile/xf7_docstring_import/pkg/a.py +0 -0
  596. {code_towel-1.414 → code_towel-1.732}/tests/hostile_crossfile/xf7_docstring_import/pkg/b.py +0 -0
  597. {code_towel-1.414 → code_towel-1.732}/tests/hostile_crossfile/xf7_docstring_import/run.py +0 -0
  598. {code_towel-1.414 → code_towel-1.732}/tests/hostile_crossfile/xf8_helper_name_collision/pkg/a.py +0 -0
  599. {code_towel-1.414 → code_towel-1.732}/tests/hostile_crossfile/xf8_helper_name_collision/pkg/b.py +0 -0
  600. {code_towel-1.414 → code_towel-1.732}/tests/hostile_crossfile/xf8_helper_name_collision/pkg/c.py +0 -0
  601. {code_towel-1.414 → code_towel-1.732}/tests/hostile_crossfile/xf8_helper_name_collision/pkg/d.py +0 -0
  602. {code_towel-1.414 → code_towel-1.732}/tests/hostile_crossfile/xf8_helper_name_collision/pkg/e.py +0 -0
  603. {code_towel-1.414 → code_towel-1.732}/tests/hostile_crossfile/xf8_helper_name_collision/run.py +0 -0
  604. {code_towel-1.414 → code_towel-1.732}/tests/hostile_crossfile/xf9_same_named_base_class/pkg/one/base.py +0 -0
  605. {code_towel-1.414 → code_towel-1.732}/tests/hostile_crossfile/xf9_same_named_base_class/pkg/one/introspect.py +0 -0
  606. {code_towel-1.414 → code_towel-1.732}/tests/hostile_crossfile/xf9_same_named_base_class/pkg/one/revoke.py +0 -0
  607. {code_towel-1.414 → code_towel-1.732}/tests/hostile_crossfile/xf9_same_named_base_class/pkg/two/access.py +0 -0
  608. {code_towel-1.414 → code_towel-1.732}/tests/hostile_crossfile/xf9_same_named_base_class/pkg/two/base.py +0 -0
  609. {code_towel-1.414 → code_towel-1.732}/tests/hostile_crossfile/xf9_same_named_base_class/pkg/two/request.py +0 -0
  610. {code_towel-1.414 → code_towel-1.732}/tests/hostile_crossfile/xf9_same_named_base_class/run.py +0 -0
  611. {code_towel-1.414 → code_towel-1.732}/tests/run_tests.py +0 -0
  612. {code_towel-1.414 → code_towel-1.732}/tests/test_bindings_additional.py +0 -0
  613. {code_towel-1.414 → code_towel-1.732}/tests/test_copy_preservation.py +0 -0
  614. {code_towel-1.414 → code_towel-1.732}/tests/test_engine_failure_visibility.py +0 -0
  615. {code_towel-1.414 → code_towel-1.732}/tests/test_rename_parameters_and_methods.py +0 -0
  616. {code_towel-1.414 → code_towel-1.732}/tests/test_unifier_more_branches.py +0 -0
@@ -1,6 +1,9 @@
1
1
  [flake8]
2
2
  max-line-length = 100
3
- exclude = venv,env,__pycache__,tests
3
+ exclude = venv,env,__pycache__,tests/hostile_cases,tests/hostile_crossfile
4
+ # Tests are checked for pyflakes errors (unused names, duplicates, undefined names) only.
5
+ per-file-ignores =
6
+ tests/*:E,W,C90
4
7
  # E501: Line too long (we use Black's 100 char limit, not PEP8's 79)
5
8
  # W503: Line break before binary operator (Black style)
6
9
  # E203: Whitespace before ':' (Black vs flake8 conflict in slices)
@@ -16,7 +16,8 @@ repos:
16
16
  entry: python -m flake8 --config=.flake8
17
17
  language: system
18
18
  types: [python]
19
- files: ^(src/towel/|scripts/)
19
+ files: ^(src/towel/|scripts/|tests/)
20
+ exclude: ^tests/(hostile_cases|hostile_crossfile)/
20
21
  - id: mypy
21
22
  name: Mypy
22
23
  entry: python -m mypy
@@ -36,11 +37,11 @@ repos:
36
37
  hooks:
37
38
  # Remove trailing whitespace
38
39
  - id: trailing-whitespace
39
- exclude: ^test_examples.*_expected_output/
40
+ exclude: ^(test_examples.*_expected_output/|tests/(hostile_cases|hostile_crossfile)/)
40
41
 
41
42
  # Ensure files end with newline
42
43
  - id: end-of-file-fixer
43
- exclude: ^test_examples.*_expected_output/
44
+ exclude: ^(test_examples.*_expected_output/|tests/(hostile_cases|hostile_crossfile)/)
44
45
 
45
46
  # Check YAML syntax
46
47
  - id: check-yaml