a3-python 0.1.17__tar.gz → 0.1.18__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 (224) hide show
  1. {a3_python-0.1.17 → a3_python-0.1.18}/PKG-INFO +1 -1
  2. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/cfg/call_graph.py +18 -2
  3. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/ci/templates/a3-pr-scan.yml +1 -1
  4. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/cli.py +12 -1
  5. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python.egg-info/PKG-INFO +1 -1
  6. {a3_python-0.1.17 → a3_python-0.1.18}/pyproject.toml +1 -1
  7. {a3_python-0.1.17 → a3_python-0.1.18}/MANIFEST.in +0 -0
  8. {a3_python-0.1.17 → a3_python-0.1.18}/README.md +0 -0
  9. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/__init__.py +0 -0
  10. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/__main__.py +0 -0
  11. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/analyzer.py +0 -0
  12. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/barriers/__init__.py +0 -0
  13. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/barriers/abstraction.py +0 -0
  14. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/barriers/advanced.py +0 -0
  15. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/barriers/assume_guarantee.py +0 -0
  16. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/barriers/bayesian_fp_scorer.py +0 -0
  17. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/barriers/boolean_programs.py +0 -0
  18. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/barriers/cegar_refinement.py +0 -0
  19. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/barriers/cegis.py +0 -0
  20. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/barriers/certificate_core.py +0 -0
  21. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/barriers/context_aware_verification.py +0 -0
  22. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/barriers/deep_barrier_theory.py +0 -0
  23. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/barriers/dsos_sdsos.py +0 -0
  24. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/barriers/enhanced_barrier_theory.py +0 -0
  25. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/barriers/extreme_verification.py +0 -0
  26. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/barriers/fast_barrier_filters.py +0 -0
  27. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/barriers/foundations.py +0 -0
  28. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/barriers/guard_to_barrier.py +0 -0
  29. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/barriers/houdini.py +0 -0
  30. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/barriers/hscc2004.py +0 -0
  31. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/barriers/hybrid_barrier.py +0 -0
  32. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/barriers/ic3_pdr.py +0 -0
  33. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/barriers/ice.py +0 -0
  34. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/barriers/ice_learning.py +0 -0
  35. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/barriers/impact_lazy.py +0 -0
  36. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/barriers/int_bmc.py +0 -0
  37. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/barriers/interpolation_imc.py +0 -0
  38. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/barriers/invariants.py +0 -0
  39. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/barriers/kitchensink_taxonomy.py +0 -0
  40. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/barriers/lasserre_hierarchy.py +0 -0
  41. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/barriers/learned_invariants.py +0 -0
  42. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/barriers/learning.py +0 -0
  43. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/barriers/papers_11_to_15_complete.py +0 -0
  44. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/barriers/papers_16_to_20_complete.py +0 -0
  45. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/barriers/papers_1_to_5_complete.py +0 -0
  46. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/barriers/papers_6_to_10_complete.py +0 -0
  47. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/barriers/parrilo_sos_sdp.py +0 -0
  48. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/barriers/path_validation.py +0 -0
  49. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/barriers/pdr_spacer.py +0 -0
  50. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/barriers/positivstellensatz.py +0 -0
  51. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/barriers/predicate_abstraction.py +0 -0
  52. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/barriers/program_analysis.py +0 -0
  53. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/barriers/quick_precheck.py +0 -0
  54. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/barriers/ranking.py +0 -0
  55. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/barriers/ranking_synthesis.py +0 -0
  56. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/barriers/sos_safety.py +0 -0
  57. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/barriers/sos_toolbox.py +0 -0
  58. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/barriers/sos_unified.py +0 -0
  59. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/barriers/sostools.py +0 -0
  60. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/barriers/spacer_chc.py +0 -0
  61. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/barriers/sparse_sos.py +0 -0
  62. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/barriers/step_relation.py +0 -0
  63. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/barriers/stochastic_barrier.py +0 -0
  64. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/barriers/sygus_synthesis.py +0 -0
  65. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/barriers/synthesis.py +0 -0
  66. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/barriers/synthesis_engine.py +0 -0
  67. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/barriers/templates.py +0 -0
  68. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/barriers/type_inference_verification.py +0 -0
  69. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/barriers/unified_sota_912.py +0 -0
  70. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/cfg/__init__.py +0 -0
  71. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/cfg/affine_loop_model.py +0 -0
  72. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/cfg/control_flow.py +0 -0
  73. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/cfg/dataflow.py +0 -0
  74. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/cfg/loop_analysis.py +0 -0
  75. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/ci/__init__.py +0 -0
  76. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/ci/agentic_triage.py +0 -0
  77. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/ci/baseline.py +0 -0
  78. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/ci/config.py +0 -0
  79. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/ci/init_cmd.py +0 -0
  80. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/ci/sarif.py +0 -0
  81. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/ci/templates/a3-scheduled-scan.yml +0 -0
  82. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/ci/triage.py +0 -0
  83. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/confidence_interval.py +0 -0
  84. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/confidence_scoring.py +0 -0
  85. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/contracts/__init__.py +0 -0
  86. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/contracts/barriers/__init__.py +0 -0
  87. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/contracts/barriers/abstract_values.py +0 -0
  88. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/contracts/barriers/contracts.py +0 -0
  89. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/contracts/barriers/deferred.py +0 -0
  90. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/contracts/barriers/device_analyzer.py +0 -0
  91. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/contracts/barriers/intervals.py +0 -0
  92. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/contracts/barriers/torch/__init__.py +0 -0
  93. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/contracts/barriers/torch/accelerators.py +0 -0
  94. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/contracts/barriers/torch/amp.py +0 -0
  95. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/contracts/barriers/torch/autograd.py +0 -0
  96. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/contracts/barriers/torch/backends.py +0 -0
  97. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/contracts/barriers/torch/core.py +0 -0
  98. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/contracts/barriers/torch/cuda.py +0 -0
  99. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/contracts/barriers/torch/data.py +0 -0
  100. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/contracts/barriers/torch/distributed.py +0 -0
  101. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/contracts/barriers/torch/distributions.py +0 -0
  102. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/contracts/barriers/torch/experimental.py +0 -0
  103. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/contracts/barriers/torch/export_compile.py +0 -0
  104. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/contracts/barriers/torch/fft.py +0 -0
  105. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/contracts/barriers/torch/hub_package.py +0 -0
  106. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/contracts/barriers/torch/jit.py +0 -0
  107. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/contracts/barriers/torch/linalg.py +0 -0
  108. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/contracts/barriers/torch/nn_functional.py +0 -0
  109. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/contracts/barriers/torch/nn_modules.py +0 -0
  110. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/contracts/barriers/torch/onnx.py +0 -0
  111. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/contracts/barriers/torch/optim.py +0 -0
  112. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/contracts/barriers/torch/profiler.py +0 -0
  113. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/contracts/barriers/torch/quantization.py +0 -0
  114. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/contracts/barriers/torch/registry.py +0 -0
  115. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/contracts/barriers/torch/sparse.py +0 -0
  116. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/contracts/barriers/torch/special.py +0 -0
  117. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/contracts/barriers/torch/tensor.py +0 -0
  118. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/contracts/barriers/torch/utils.py +0 -0
  119. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/contracts/base.py +0 -0
  120. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/contracts/builtin_relations.py +0 -0
  121. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/contracts/checker.py +0 -0
  122. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/contracts/relations.py +0 -0
  123. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/contracts/schema.py +0 -0
  124. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/contracts/security.py +0 -0
  125. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/contracts/security_lattice.py +0 -0
  126. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/contracts/stdlib.py +0 -0
  127. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/contracts/stdlib_module_relations.py +0 -0
  128. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/contracts/stdlib_stubs.py +0 -0
  129. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/contracts/torch_contracts.py +0 -0
  130. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/dse/__init__.py +0 -0
  131. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/dse/concolic.py +0 -0
  132. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/dse/constraint_solver.py +0 -0
  133. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/dse/hybrid.py +0 -0
  134. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/dse/lockstep.py +0 -0
  135. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/dse/path_condition.py +0 -0
  136. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/dse/selective_concolic.py +0 -0
  137. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/dse/stochastic_replay.py +0 -0
  138. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/dse/value_flow.py +0 -0
  139. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/evaluation/__init__.py +0 -0
  140. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/evaluation/deduplication.py +0 -0
  141. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/evaluation/repo_list.py +0 -0
  142. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/evaluation/scanner.py +0 -0
  143. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/fp_context.py +0 -0
  144. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/frontend/__init__.py +0 -0
  145. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/frontend/entry_points.py +0 -0
  146. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/frontend/loader.py +0 -0
  147. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/semantics/__init__.py +0 -0
  148. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/semantics/ast_guard_analysis.py +0 -0
  149. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/semantics/bmc.py +0 -0
  150. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/semantics/bytecode_summaries.py +0 -0
  151. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/semantics/concrete_vm.py +0 -0
  152. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/semantics/crash_summaries.py +0 -0
  153. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/semantics/framework_mocks.py +0 -0
  154. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/semantics/intent_detector.py +0 -0
  155. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/semantics/interprocedural_barriers.py +0 -0
  156. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/semantics/interprocedural_bugs.py +0 -0
  157. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/semantics/interprocedural_guards.py +0 -0
  158. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/semantics/interprocedural_taint.py +0 -0
  159. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/semantics/intraprocedural_taint.py +0 -0
  160. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/semantics/invariant_integration.py +0 -0
  161. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/semantics/oracles.py +0 -0
  162. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/semantics/security_tracker.py +0 -0
  163. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/semantics/security_tracker_lattice.py +0 -0
  164. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/semantics/sota_interprocedural.py +0 -0
  165. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/semantics/sota_intraprocedural.py +0 -0
  166. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/semantics/state.py +0 -0
  167. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/semantics/summaries.py +0 -0
  168. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/semantics/symbolic_vm.py +0 -0
  169. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/semantics/termination_integration.py +0 -0
  170. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/stochastic_risk.py +0 -0
  171. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/unsafe/__init__.py +0 -0
  172. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/unsafe/assert_fail.py +0 -0
  173. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/unsafe/bounds.py +0 -0
  174. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/unsafe/collection_bugs.py +0 -0
  175. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/unsafe/data_race.py +0 -0
  176. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/unsafe/deadlock.py +0 -0
  177. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/unsafe/div_zero.py +0 -0
  178. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/unsafe/double_free.py +0 -0
  179. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/unsafe/exception_bugs.py +0 -0
  180. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/unsafe/fp_domain.py +0 -0
  181. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/unsafe/info_leak.py +0 -0
  182. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/unsafe/integer_overflow.py +0 -0
  183. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/unsafe/iterator_invalid.py +0 -0
  184. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/unsafe/memory_leak.py +0 -0
  185. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/unsafe/non_termination.py +0 -0
  186. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/unsafe/null_ptr.py +0 -0
  187. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/unsafe/panic.py +0 -0
  188. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/unsafe/registry.py +0 -0
  189. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/unsafe/security/__init__.py +0 -0
  190. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/unsafe/security/cleartext.py +0 -0
  191. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/unsafe/security/code_injection.py +0 -0
  192. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/unsafe/security/command_injection.py +0 -0
  193. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/unsafe/security/config.py +0 -0
  194. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/unsafe/security/crypto.py +0 -0
  195. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/unsafe/security/deserialization.py +0 -0
  196. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/unsafe/security/filesystem.py +0 -0
  197. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/unsafe/security/injection.py +0 -0
  198. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/unsafe/security/lattice_detectors.py +0 -0
  199. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/unsafe/security/path_injection.py +0 -0
  200. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/unsafe/security/regex.py +0 -0
  201. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/unsafe/security/sql_injection.py +0 -0
  202. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/unsafe/security/ssrf.py +0 -0
  203. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/unsafe/security/webapp.py +0 -0
  204. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/unsafe/security/xml.py +0 -0
  205. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/unsafe/security/xss.py +0 -0
  206. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/unsafe/security/xxe.py +0 -0
  207. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/unsafe/send_sync.py +0 -0
  208. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/unsafe/stack_overflow.py +0 -0
  209. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/unsafe/timing_channel.py +0 -0
  210. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/unsafe/type_confusion.py +0 -0
  211. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/unsafe/uninit_memory.py +0 -0
  212. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/unsafe/use_after_free.py +0 -0
  213. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/z3model/__init__.py +0 -0
  214. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/z3model/heap.py +0 -0
  215. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/z3model/taint.py +0 -0
  216. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/z3model/taint_lattice.py +0 -0
  217. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/z3model/type_tracking.py +0 -0
  218. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python/z3model/values.py +0 -0
  219. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python.egg-info/SOURCES.txt +0 -0
  220. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python.egg-info/dependency_links.txt +0 -0
  221. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python.egg-info/entry_points.txt +0 -0
  222. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python.egg-info/requires.txt +0 -0
  223. {a3_python-0.1.17 → a3_python-0.1.18}/a3_python.egg-info/top_level.txt +0 -0
  224. {a3_python-0.1.17 → a3_python-0.1.18}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: a3-python
3
- Version: 0.1.17
3
+ Version: 0.1.18
4
4
  Summary: Catch real Python bugs before production — 99%+ accuracy, Z3 symbolic execution, LLM-powered false-positive filtering, zero-config GitHub CI
5
5
  Requires-Python: >=3.11
6
6
  Description-Content-Type: text/markdown
@@ -645,11 +645,27 @@ def build_call_graph_from_directory(
645
645
  """Build call graph from all Python files in a directory."""
646
646
  exclude_patterns = exclude_patterns or ['__pycache__', '.git', 'venv', '.venv', 'node_modules']
647
647
 
648
+ import fnmatch
649
+
648
650
  combined = CallGraph()
649
651
 
650
652
  for py_file in root_path.rglob('*.py'):
651
- # Check exclusions
652
- if any(p in str(py_file) for p in exclude_patterns):
653
+ # Check exclusions using both substring and glob matching
654
+ rel_str = str(py_file.relative_to(root_path))
655
+ abs_str = str(py_file)
656
+ excluded = False
657
+ for p in exclude_patterns:
658
+ # Glob-style patterns (contain *, ?, [)
659
+ if any(c in p for c in ('*', '?', '[')):
660
+ if fnmatch.fnmatch(rel_str, p):
661
+ excluded = True
662
+ break
663
+ else:
664
+ # Simple substring match (for __pycache__, .git, etc.)
665
+ if p in abs_str:
666
+ excluded = True
667
+ break
668
+ if excluded:
653
669
  continue
654
670
 
655
671
  # Compute module name from path
@@ -40,7 +40,7 @@ jobs:
40
40
  - uses: actions/setup-python@v5
41
41
  with:
42
42
  python-version: "3.12"
43
-
43
+ cache: pip
44
44
 
45
45
  # ── Install a3 ────────────────────────────────────────
46
46
  - name: Install a3
@@ -192,6 +192,12 @@ def _apply_config_defaults(args: argparse.Namespace) -> None:
192
192
  if args.max_dse_steps == 100 and cfg.analysis.max_dse_steps != 100:
193
193
  args.max_dse_steps = cfg.analysis.max_dse_steps
194
194
 
195
+ # Store scan exclude/include patterns so _analyze_project can use them
196
+ if not hasattr(args, '_scan_excludes') or not args._scan_excludes:
197
+ args._scan_excludes = cfg.scan.exclude
198
+ if not hasattr(args, '_scan_includes') or not args._scan_includes:
199
+ args._scan_includes = cfg.scan.include
200
+
195
201
 
196
202
  # ── Subcommand handlers ─────────────────────────────────────────────────────
197
203
 
@@ -666,8 +672,13 @@ def _analyze_project(args):
666
672
 
667
673
  from .cfg.call_graph import build_call_graph_from_directory
668
674
 
675
+ # Collect exclude patterns from .a3.yml config
676
+ exclude_patterns = ['__pycache__', '.git', 'venv', '.venv', 'node_modules']
677
+ if hasattr(args, '_scan_excludes') and args._scan_excludes:
678
+ exclude_patterns.extend(args._scan_excludes)
679
+
669
680
  t0 = time.time()
670
- call_graph = build_call_graph_from_directory(project_path)
681
+ call_graph = build_call_graph_from_directory(project_path, exclude_patterns=exclude_patterns)
671
682
  n_funcs = len(call_graph.functions)
672
683
  print(f" Functions: {n_funcs} ({time.time() - t0:.1f}s)")
673
684
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: a3-python
3
- Version: 0.1.17
3
+ Version: 0.1.18
4
4
  Summary: Catch real Python bugs before production — 99%+ accuracy, Z3 symbolic execution, LLM-powered false-positive filtering, zero-config GitHub CI
5
5
  Requires-Python: >=3.11
6
6
  Description-Content-Type: text/markdown
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "a3-python"
7
- version = "0.1.17"
7
+ version = "0.1.18"
8
8
  description = "Catch real Python bugs before production — 99%+ accuracy, Z3 symbolic execution, LLM-powered false-positive filtering, zero-config GitHub CI"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
File without changes
File without changes
File without changes