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