modelaudit 0.2.32__tar.gz → 0.2.34__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 (632) hide show
  1. {modelaudit-0.2.32 → modelaudit-0.2.34}/.github/PULL_REQUEST_TEMPLATE.md +3 -3
  2. {modelaudit-0.2.32 → modelaudit-0.2.34}/.github/workflows/perf.yml +1 -1
  3. {modelaudit-0.2.32 → modelaudit-0.2.34}/.github/workflows/release-please.yml +132 -25
  4. {modelaudit-0.2.32 → modelaudit-0.2.34}/.github/workflows/test.yml +129 -12
  5. modelaudit-0.2.34/.release-please-manifest.json +3 -0
  6. {modelaudit-0.2.32 → modelaudit-0.2.34}/AGENTS.md +14 -13
  7. {modelaudit-0.2.32 → modelaudit-0.2.34}/CHANGELOG.md +32 -0
  8. {modelaudit-0.2.32 → modelaudit-0.2.34}/Dockerfile +1 -1
  9. {modelaudit-0.2.32 → modelaudit-0.2.34}/Dockerfile.full +5 -1
  10. {modelaudit-0.2.32 → modelaudit-0.2.34}/Dockerfile.tensorflow +1 -1
  11. {modelaudit-0.2.32 → modelaudit-0.2.34}/PKG-INFO +1 -1
  12. {modelaudit-0.2.32 → modelaudit-0.2.34}/SECURITY.md +13 -13
  13. {modelaudit-0.2.32 → modelaudit-0.2.34}/docs/agents/architecture.md +15 -3
  14. {modelaudit-0.2.32 → modelaudit-0.2.34}/docs/agents/new-scanner-quickstart.md +12 -11
  15. modelaudit-0.2.34/docs/agents/picklescan-package-split.md +115 -0
  16. {modelaudit-0.2.32 → modelaudit-0.2.34}/docs/maintainers/cve-process.md +2 -1
  17. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/__init__.py +3 -15
  18. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/auth/config.py +7 -48
  19. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/cache/optimized_config.py +1 -0
  20. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/cache/trusted_config_store.py +1 -40
  21. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/cli.py +1383 -1305
  22. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/config/explanations.py +53 -21
  23. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/core.py +11 -82
  24. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/detectors/cve_patterns.py +11 -80
  25. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/detectors/suspicious_symbols.py +4 -0
  26. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/integrations/sarif_formatter.py +1 -1
  27. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/integrations/sbom_generator.py +1 -1
  28. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/models.py +2 -16
  29. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/progress/base.py +45 -24
  30. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/progress/hooks.py +37 -40
  31. modelaudit-0.2.34/modelaudit/rule_catalog.py +788 -0
  32. modelaudit-0.2.34/modelaudit/rules.py +115 -0
  33. modelaudit-0.2.34/modelaudit/scanner_registry_metadata.py +461 -0
  34. modelaudit-0.2.34/modelaudit/scanner_results.py +357 -0
  35. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/__init__.py +110 -68
  36. modelaudit-0.2.34/modelaudit/scanners/_archive_config.py +16 -0
  37. modelaudit-0.2.34/modelaudit/scanners/_archive_locations.py +30 -0
  38. modelaudit-0.2.34/modelaudit/scanners/_string_extraction.py +24 -0
  39. modelaudit-0.2.34/modelaudit/scanners/archive_dispatch.py +115 -0
  40. modelaudit-0.2.34/modelaudit/scanners/archive_member_security.py +26 -0
  41. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/base.py +84 -368
  42. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/cntk_scanner.py +51 -1
  43. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/compressed_scanner.py +11 -27
  44. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/executorch_scanner.py +14 -16
  45. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/joblib_scanner.py +3 -3
  46. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/keras_h5_scanner.py +4 -41
  47. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/keras_utils.py +59 -1
  48. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/keras_zip_scanner.py +6 -42
  49. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/metadata_scanner.py +2 -0
  50. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/numpy_scanner.py +5 -2
  51. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/oci_layer_scanner.py +30 -7
  52. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/openvino_scanner.py +21 -9
  53. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/pickle_scanner.py +627 -848
  54. modelaudit-0.2.34/modelaudit/scanners/pickle_support/__init__.py +131 -0
  55. modelaudit-0.2.34/modelaudit/scanners/pickle_support/opcode_stream.py +763 -0
  56. modelaudit-0.2.34/modelaudit/scanners/picklescan_adapter.py +474 -0
  57. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/pytorch_zip_scanner.py +224 -392
  58. modelaudit-0.2.34/modelaudit/scanners/pytorch_zip_support/__init__.py +23 -0
  59. modelaudit-0.2.34/modelaudit/scanners/pytorch_zip_support/archive_members.py +253 -0
  60. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/rknn_scanner.py +6 -9
  61. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/sevenzip_scanner.py +15 -20
  62. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/tar_scanner.py +7 -10
  63. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/tensorrt_scanner.py +91 -1
  64. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/text_scanner.py +3 -5
  65. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/tf_metagraph_scanner.py +3 -14
  66. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/tf_savedmodel_scanner.py +4 -15
  67. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/tflite_scanner.py +3 -8
  68. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/torch7_scanner.py +6 -9
  69. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/torchserve_mar_scanner.py +13 -14
  70. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/zip_scanner.py +36 -39
  71. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/telemetry.py +1 -1
  72. modelaudit-0.2.34/modelaudit/utils/_path_hardening.py +65 -0
  73. modelaudit-0.2.34/modelaudit/utils/file/_compression.py +19 -0
  74. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/file/detection.py +4 -15
  75. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/file/handlers.py +8 -8
  76. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/file/large_file_handler.py +3 -3
  77. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/file/streaming.py +29 -3
  78. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/helpers/assets.py +1 -1
  79. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/helpers/result_conversion.py +2 -2
  80. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/model_extensions.py +3 -3
  81. modelaudit-0.2.34/modelaudit/utils/sources/_huggingface_cache.py +70 -0
  82. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/sources/huggingface.py +21 -192
  83. modelaudit-0.2.34/modelaudit/utils/sources/huggingface_paths.py +135 -0
  84. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/tensorflow_compat.py +17 -3
  85. modelaudit-0.2.34/modelaudit/version.py +8 -0
  86. modelaudit-0.2.34/packages/modelaudit-picklescan/README.md +47 -0
  87. modelaudit-0.2.34/packages/modelaudit-picklescan/pyproject.toml +104 -0
  88. modelaudit-0.2.34/packages/modelaudit-picklescan/src/modelaudit_picklescan/__init__.py +21 -0
  89. modelaudit-0.2.34/packages/modelaudit-picklescan/src/modelaudit_picklescan/api.py +125 -0
  90. modelaudit-0.2.34/packages/modelaudit-picklescan/src/modelaudit_picklescan/engine/__init__.py +5 -0
  91. modelaudit-0.2.34/packages/modelaudit-picklescan/src/modelaudit_picklescan/engine/scanner.py +1093 -0
  92. modelaudit-0.2.34/packages/modelaudit-picklescan/src/modelaudit_picklescan/options.py +40 -0
  93. modelaudit-0.2.34/packages/modelaudit-picklescan/src/modelaudit_picklescan/py.typed +1 -0
  94. modelaudit-0.2.34/packages/modelaudit-picklescan/src/modelaudit_picklescan/report.py +162 -0
  95. modelaudit-0.2.34/packages/modelaudit-picklescan/tests/conftest.py +8 -0
  96. modelaudit-0.2.34/packages/modelaudit-picklescan/tests/test_api.py +515 -0
  97. modelaudit-0.2.34/packages/modelaudit-picklescan/tests/test_import_boundary.py +36 -0
  98. modelaudit-0.2.34/packages/modelaudit-picklescan/tests/test_options.py +39 -0
  99. modelaudit-0.2.34/packages/modelaudit-picklescan/tests/test_report.py +106 -0
  100. modelaudit-0.2.34/packages/modelaudit-picklescan/uv.lock +8 -0
  101. {modelaudit-0.2.32 → modelaudit-0.2.34}/pyproject.toml +9 -3
  102. {modelaudit-0.2.32 → modelaudit-0.2.34}/scripts/README.md +8 -0
  103. modelaudit-0.2.34/scripts/compare_pickle_scanners.py +340 -0
  104. modelaudit-0.2.34/scripts/compare_pickle_scanners_fixture_labels.json +36 -0
  105. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/cache/test_cache_correctness.py +13 -0
  106. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/conftest.py +7 -0
  107. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/detectors/test_suspicious_symbols.py +1 -1
  108. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/helpers/__init__.py +2 -0
  109. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/helpers/file_creators.py +18 -3
  110. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_base_scanner.py +45 -3
  111. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_cntk_scanner.py +28 -0
  112. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_compressed_scanner.py +22 -0
  113. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_executorch_scanner.py +35 -0
  114. modelaudit-0.2.34/tests/scanners/test_joblib_scanner.py +74 -0
  115. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_keras_h5_scanner.py +33 -0
  116. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_keras_zip_scanner.py +68 -18
  117. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_numpy_scanner.py +8 -2
  118. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_oci_layer_scanner.py +100 -0
  119. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_openvino_scanner.py +40 -1
  120. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_pickle_scanner.py +730 -17
  121. modelaudit-0.2.34/tests/scanners/test_picklescan_adapter.py +701 -0
  122. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_pytorch_zip_scanner.py +123 -0
  123. modelaudit-0.2.34/tests/scanners/test_scanner_registry.py +490 -0
  124. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_tensorrt_scanner.py +119 -0
  125. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_tf_metagraph_scanner.py +27 -7
  126. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_tf_savedmodel_scanner.py +21 -8
  127. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_zip_scanner.py +148 -24
  128. modelaudit-0.2.34/tests/scripts/test_compare_pickle_scanners.py +197 -0
  129. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_auth_config.py +1 -0
  130. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_core.py +67 -0
  131. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_directory_file_filtering.py +28 -12
  132. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_false_positive_fixes.py +15 -16
  133. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_huggingface_extensions.py +24 -0
  134. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_huggingface_symlinks.py +38 -6
  135. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_lazy_loading.py +59 -7
  136. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_lazy_loading_integration.py +1 -0
  137. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_metadata_extractor.py +13 -2
  138. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_progress.py +6 -2
  139. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_pytorch_zip_detection.py +10 -0
  140. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_real_world_dill_joblib.py +14 -4
  141. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_rules.py +24 -0
  142. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_streaming_scan.py +57 -17
  143. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_why_explanations.py +18 -0
  144. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/utils/file/test_filetype.py +10 -6
  145. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/utils/file/test_streaming_analysis.py +54 -7
  146. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/utils/sources/test_huggingface.py +77 -9
  147. {modelaudit-0.2.32 → modelaudit-0.2.34}/uv.lock +62 -61
  148. modelaudit-0.2.32/.release-please-manifest.json +0 -3
  149. modelaudit-0.2.32/modelaudit/rules.py +0 -978
  150. modelaudit-0.2.32/tests/scanners/test_joblib_scanner.py +0 -42
  151. modelaudit-0.2.32/tests/scanners/test_scanner_registry.py +0 -161
  152. {modelaudit-0.2.32 → modelaudit-0.2.34}/.dockerignore +0 -0
  153. {modelaudit-0.2.32 → modelaudit-0.2.34}/.editorconfig +0 -0
  154. {modelaudit-0.2.32 → modelaudit-0.2.34}/.gitattributes +0 -0
  155. {modelaudit-0.2.32 → modelaudit-0.2.34}/.github/CODEOWNERS +0 -0
  156. {modelaudit-0.2.32 → modelaudit-0.2.34}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  157. {modelaudit-0.2.32 → modelaudit-0.2.34}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  158. {modelaudit-0.2.32 → modelaudit-0.2.34}/.github/markdown-link-check-config.json +0 -0
  159. {modelaudit-0.2.32 → modelaudit-0.2.34}/.github/workflows/README.md +0 -0
  160. {modelaudit-0.2.32 → modelaudit-0.2.34}/.github/workflows/codeql.yml +0 -0
  161. {modelaudit-0.2.32 → modelaudit-0.2.34}/.github/workflows/docker-image-test.yml +0 -0
  162. {modelaudit-0.2.32 → modelaudit-0.2.34}/.github/workflows/docker-publish.yml +0 -0
  163. {modelaudit-0.2.32 → modelaudit-0.2.34}/.github/workflows/docs-check.yml +0 -0
  164. {modelaudit-0.2.32 → modelaudit-0.2.34}/.github/workflows/nightly.yml +0 -0
  165. {modelaudit-0.2.32 → modelaudit-0.2.34}/.github/workflows/validate-pr-title.yml +0 -0
  166. {modelaudit-0.2.32 → modelaudit-0.2.34}/.gitignore +0 -0
  167. {modelaudit-0.2.32 → modelaudit-0.2.34}/.mailmap +0 -0
  168. {modelaudit-0.2.32 → modelaudit-0.2.34}/.modelaudit.toml.example +0 -0
  169. {modelaudit-0.2.32 → modelaudit-0.2.34}/.prettierignore +0 -0
  170. {modelaudit-0.2.32 → modelaudit-0.2.34}/CLAUDE.md +0 -0
  171. {modelaudit-0.2.32 → modelaudit-0.2.34}/CODE_OF_CONDUCT.md +0 -0
  172. {modelaudit-0.2.32 → modelaudit-0.2.34}/CONTRIBUTING.md +0 -0
  173. {modelaudit-0.2.32 → modelaudit-0.2.34}/LICENSE +0 -0
  174. {modelaudit-0.2.32 → modelaudit-0.2.34}/MAINTAINERS.md +0 -0
  175. {modelaudit-0.2.32 → modelaudit-0.2.34}/MANIFEST.in +0 -0
  176. {modelaudit-0.2.32 → modelaudit-0.2.34}/README.md +0 -0
  177. {modelaudit-0.2.32 → modelaudit-0.2.34}/RULES.md +0 -0
  178. {modelaudit-0.2.32 → modelaudit-0.2.34}/SUPPORT.md +0 -0
  179. {modelaudit-0.2.32 → modelaudit-0.2.34}/THIRD_PARTY_NOTICES.md +0 -0
  180. {modelaudit-0.2.32 → modelaudit-0.2.34}/codecov.yml +0 -0
  181. {modelaudit-0.2.32 → modelaudit-0.2.34}/docker-compose.yml +0 -0
  182. {modelaudit-0.2.32 → modelaudit-0.2.34}/docker-entrypoint.sh +0 -0
  183. {modelaudit-0.2.32 → modelaudit-0.2.34}/docs/agents/dependencies.md +0 -0
  184. {modelaudit-0.2.32 → modelaudit-0.2.34}/docs/agents/release-process.md +0 -0
  185. {modelaudit-0.2.32 → modelaudit-0.2.34}/docs/maintainers/cve-gap-pr-plan-2026-03-20.md +0 -0
  186. {modelaudit-0.2.32 → modelaudit-0.2.34}/docs/maintainers/dependency-policy.md +0 -0
  187. {modelaudit-0.2.32 → modelaudit-0.2.34}/docs/maintainers/format-gap-plans/coreml-mlmodel.md +0 -0
  188. {modelaudit-0.2.32 → modelaudit-0.2.34}/docs/maintainers/format-gap-plans/mxnet-models.md +0 -0
  189. {modelaudit-0.2.32 → modelaudit-0.2.34}/docs/maintainers/format-gap-plans/tensorflow-metagraph.md +0 -0
  190. {modelaudit-0.2.32 → modelaudit-0.2.34}/docs/maintainers/format-gap-plans/torchserve-mar.md +0 -0
  191. {modelaudit-0.2.32 → modelaudit-0.2.34}/docs/maintainers/triage-playbook.md +0 -0
  192. {modelaudit-0.2.32 → modelaudit-0.2.34}/docs/security/threat-model.md +0 -0
  193. {modelaudit-0.2.32 → modelaudit-0.2.34}/docs/user/compatibility-matrix.md +0 -0
  194. {modelaudit-0.2.32 → modelaudit-0.2.34}/docs/user/metadata-extraction.md +0 -0
  195. {modelaudit-0.2.32 → modelaudit-0.2.34}/docs/user/offline-air-gapped.md +0 -0
  196. {modelaudit-0.2.32 → modelaudit-0.2.34}/docs/user/security-model.md +0 -0
  197. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/__main__.py +0 -0
  198. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/analysis/__init__.py +0 -0
  199. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/analysis/anomaly_detector.py +0 -0
  200. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/analysis/enhanced_pattern_detector.py +0 -0
  201. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/analysis/entropy_analyzer.py +0 -0
  202. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/analysis/framework_patterns.py +0 -0
  203. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/analysis/integrated_analyzer.py +0 -0
  204. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/analysis/ml_context_analyzer.py +0 -0
  205. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/analysis/opcode_sequence_analyzer.py +0 -0
  206. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/analysis/semantic_analyzer.py +0 -0
  207. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/analysis/unified_context.py +0 -0
  208. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/auth/__init__.py +0 -0
  209. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/auth/client.py +0 -0
  210. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/cache/__init__.py +0 -0
  211. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/cache/adaptive_cache_keys.py +0 -0
  212. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/cache/batch_operations.py +0 -0
  213. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/cache/cache_manager.py +0 -0
  214. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/cache/cache_policy.py +0 -0
  215. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/cache/scan_results_cache.py +0 -0
  216. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/config/__init__.py +0 -0
  217. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/config/constants.py +0 -0
  218. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/config/data/spdx_licenses.json +0 -0
  219. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/config/generated_keras_layers.py +0 -0
  220. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/config/local_config.py +0 -0
  221. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/config/name_blacklist.py +0 -0
  222. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/config/rule_config.py +0 -0
  223. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/detectors/__init__.py +0 -0
  224. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/detectors/jit_script.py +0 -0
  225. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/detectors/network_comm.py +0 -0
  226. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/detectors/secrets.py +0 -0
  227. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/integrations/__init__.py +0 -0
  228. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/integrations/jfrog.py +0 -0
  229. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/integrations/license_checker.py +0 -0
  230. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/integrations/mlflow.py +0 -0
  231. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/metadata_extractor.py +0 -0
  232. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/progress/__init__.py +0 -0
  233. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/progress/console.py +0 -0
  234. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/progress/file.py +0 -0
  235. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/progress/multi_phase.py +0 -0
  236. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/LICENSE +0 -0
  237. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/NOTICE +0 -0
  238. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/__init__.py +0 -0
  239. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/py.typed +0 -0
  240. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/__init__.py +0 -0
  241. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/__init__.py +0 -0
  242. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/__init__.py +0 -0
  243. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/allocation_description_pb2.py +0 -0
  244. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/api_def_pb2.py +0 -0
  245. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/attr_value_pb2.py +0 -0
  246. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/cost_graph_pb2.py +0 -0
  247. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/cpp_shape_inference_pb2.py +0 -0
  248. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/dataset_metadata_pb2.py +0 -0
  249. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/dataset_options_pb2.py +0 -0
  250. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/dataset_pb2.py +0 -0
  251. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/device_attributes_pb2.py +0 -0
  252. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/full_type_pb2.py +0 -0
  253. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/function_pb2.py +0 -0
  254. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/graph_debug_info_pb2.py +0 -0
  255. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/graph_pb2.py +0 -0
  256. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/graph_transfer_info_pb2.py +0 -0
  257. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/kernel_def_pb2.py +0 -0
  258. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/log_memory_pb2.py +0 -0
  259. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/model_pb2.py +0 -0
  260. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/node_def_pb2.py +0 -0
  261. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/op_def_pb2.py +0 -0
  262. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/optimized_function_graph_pb2.py +0 -0
  263. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/reader_base_pb2.py +0 -0
  264. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/resource_handle_pb2.py +0 -0
  265. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/step_stats_pb2.py +0 -0
  266. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/tensor_description_pb2.py +0 -0
  267. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/tensor_pb2.py +0 -0
  268. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/tensor_shape_pb2.py +0 -0
  269. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/tensor_slice_pb2.py +0 -0
  270. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/types_pb2.py +0 -0
  271. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/variable_pb2.py +0 -0
  272. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/framework/versions_pb2.py +0 -0
  273. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/protobuf/__init__.py +0 -0
  274. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/protobuf/cluster_pb2.py +0 -0
  275. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/protobuf/composite_tensor_variant_pb2.py +0 -0
  276. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/protobuf/control_flow_pb2.py +0 -0
  277. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/protobuf/core_platform_payloads_pb2.py +0 -0
  278. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/protobuf/critical_section_pb2.py +0 -0
  279. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/protobuf/data_service_pb2.py +0 -0
  280. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/protobuf/debug_event_pb2.py +0 -0
  281. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/protobuf/debug_pb2.py +0 -0
  282. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/protobuf/device_filters_pb2.py +0 -0
  283. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/protobuf/device_properties_pb2.py +0 -0
  284. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/protobuf/fingerprint_pb2.py +0 -0
  285. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/protobuf/meta_graph_pb2.py +0 -0
  286. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/protobuf/named_tensor_pb2.py +0 -0
  287. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/protobuf/remote_tensor_handle_pb2.py +0 -0
  288. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/protobuf/rewriter_config_pb2.py +0 -0
  289. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/protobuf/saved_model_pb2.py +0 -0
  290. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/protobuf/saved_object_graph_pb2.py +0 -0
  291. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/protobuf/saver_pb2.py +0 -0
  292. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/protobuf/service_config_pb2.py +0 -0
  293. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/protobuf/snapshot_pb2.py +0 -0
  294. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/protobuf/struct_pb2.py +0 -0
  295. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/protobuf/tensor_bundle_pb2.py +0 -0
  296. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/protobuf/trackable_object_graph_pb2.py +0 -0
  297. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/protobuf/transport_options_pb2.py +0 -0
  298. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/protos/tensorflow/core/protobuf/verifier_config_pb2.py +0 -0
  299. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/py.typed +0 -0
  300. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/catboost_scanner.py +0 -0
  301. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/coreml_scanner.py +0 -0
  302. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/flax_msgpack_scanner.py +0 -0
  303. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/gguf_scanner.py +0 -0
  304. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/jax_checkpoint_scanner.py +0 -0
  305. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/jinja2_template_scanner.py +0 -0
  306. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/lightgbm_scanner.py +0 -0
  307. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/llamafile_scanner.py +0 -0
  308. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/manifest_scanner.py +0 -0
  309. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/mxnet_scanner.py +0 -0
  310. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/nemo_scanner.py +0 -0
  311. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/onnx_scanner.py +0 -0
  312. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/paddle_scanner.py +0 -0
  313. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/pmml_scanner.py +0 -0
  314. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/pytorch_binary_scanner.py +0 -0
  315. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/r_serialized_scanner.py +0 -0
  316. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/rule_mapper.py +0 -0
  317. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/safetensors_scanner.py +0 -0
  318. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/skops_scanner.py +0 -0
  319. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/weight_distribution_scanner.py +0 -0
  320. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/scanners/xgboost_scanner.py +0 -0
  321. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/__init__.py +0 -0
  322. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/auto_defaults.py +0 -0
  323. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/file/__init__.py +0 -0
  324. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/file/filtering.py +0 -0
  325. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/helpers/__init__.py +0 -0
  326. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/helpers/auto_defaults.py +0 -0
  327. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/helpers/cache_decorator.py +0 -0
  328. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/helpers/code_validation.py +0 -0
  329. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/helpers/disk_space.py +0 -0
  330. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/helpers/file_hash.py +0 -0
  331. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/helpers/file_iterator.py +0 -0
  332. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/helpers/interrupt_handler.py +0 -0
  333. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/helpers/ml_context.py +0 -0
  334. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/helpers/retry.py +0 -0
  335. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/helpers/secure_hasher.py +0 -0
  336. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/helpers/types.py +0 -0
  337. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/lfs.py +0 -0
  338. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/sources/__init__.py +0 -0
  339. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/sources/cloud_storage.py +0 -0
  340. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/sources/dvc.py +0 -0
  341. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/sources/jfrog.py +0 -0
  342. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/utils/sources/pytorch_hub.py +0 -0
  343. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/whitelists/__init__.py +0 -0
  344. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/whitelists/huggingface_organizations.py +0 -0
  345. {modelaudit-0.2.32 → modelaudit-0.2.34}/modelaudit/whitelists/huggingface_popular.py +0 -0
  346. {modelaudit-0.2.32 → modelaudit-0.2.34}/package-lock.json +0 -0
  347. {modelaudit-0.2.32 → modelaudit-0.2.34}/package.json +0 -0
  348. {modelaudit-0.2.32 → modelaudit-0.2.34}/pyproject.toml.example +0 -0
  349. {modelaudit-0.2.32 → modelaudit-0.2.34}/release-please-config.json +0 -0
  350. {modelaudit-0.2.32 → modelaudit-0.2.34}/renovate.json +0 -0
  351. {modelaudit-0.2.32 → modelaudit-0.2.34}/scripts/benchmark_report.py +0 -0
  352. {modelaudit-0.2.32 → modelaudit-0.2.34}/scripts/check_circular_imports.py +0 -0
  353. {modelaudit-0.2.32 → modelaudit-0.2.34}/scripts/compile_tensorflow_protos.sh +0 -0
  354. {modelaudit-0.2.32 → modelaudit-0.2.34}/scripts/fetch_hf_org_models.py +0 -0
  355. {modelaudit-0.2.32 → modelaudit-0.2.34}/scripts/fetch_hf_top_models.py +0 -0
  356. {modelaudit-0.2.32 → modelaudit-0.2.34}/scripts/generate_keras_layer_inventory.py +0 -0
  357. {modelaudit-0.2.32 → modelaudit-0.2.34}/scripts/jax_flax_scanning_demo.py +0 -0
  358. {modelaudit-0.2.32 → modelaudit-0.2.34}/scripts/minimal_circular_check.py +0 -0
  359. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/__init__.py +0 -0
  360. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/analysis/test_analysis_modules.py +0 -0
  361. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/analysis/test_anomaly_detector.py +0 -0
  362. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/analysis/test_enhanced_pattern_detector.py +0 -0
  363. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/analysis/test_entropy_analyzer.py +0 -0
  364. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/analysis/test_framework_patterns.py +0 -0
  365. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/analysis/test_ml_context_analyzer.py +0 -0
  366. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/analysis/test_opcode_sequence_analyzer.py +0 -0
  367. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/analysis/test_unified_context.py +0 -0
  368. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/exploits/exploit1_basic_torch_bypass.pkl +0 -0
  369. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/exploits/exploit2_advanced_torch_bypass.pkl +0 -0
  370. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/exploits/exploit3_sophisticated_hybrid.pkl +0 -0
  371. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/exploits/exploit4_supply_chain_attack.pkl +0 -0
  372. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/exploits/exploit5_ultra_high_confidence.pkl +0 -0
  373. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/exploits/exploit6_ordereddict_bypass.pkl +0 -0
  374. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/exploits/exploit7_nested_collections.pkl +0 -0
  375. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/exploits/exploit9_manual_construction.pkl +0 -0
  376. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/exploits/exploit_ultimate_50pct.pkl +0 -0
  377. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/generators/generate_7z_test_assets.py +0 -0
  378. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/generators/generate_advanced_pickle_tests.py +0 -0
  379. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/generators/generate_evil_pickle.py +0 -0
  380. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/generators/generate_jinja2_test_assets.py +0 -0
  381. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/generators/generate_nested_pickle_assets.py +0 -0
  382. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/generators/generate_os_alias_tests.py +0 -0
  383. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/generators/generate_safe_nested_assets.py +0 -0
  384. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/generators/generate_safetensors_assets.py +0 -0
  385. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/generators/generate_security_assets.py +0 -0
  386. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/pickles/bypass_pocs/gen_bypass_v4.py +0 -0
  387. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/pickles/memo_attack.pkl +0 -0
  388. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/pickles/multiple_stream_attack.pkl +0 -0
  389. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/pickles/nt_alias_attack.pkl +0 -0
  390. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/pickles/posix_alias_attack.pkl +0 -0
  391. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/pickles/stack_global_attack.pkl +0 -0
  392. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/archives/path_traversal.zip +0 -0
  393. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/archives/safe_model.zip +0 -0
  394. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/benign/chatml_format.json +0 -0
  395. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/benign/complex_legitimate.json +0 -0
  396. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/benign/conditional_system.json +0 -0
  397. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/benign/huggingface_llama.json +0 -0
  398. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/benign/simple_roles.json +0 -0
  399. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/benign/special_tokens.json +0 -0
  400. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/benign_conditional_format.json +0 -0
  401. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/benign_huggingface_chat.json +0 -0
  402. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/benign_simple_template.json +0 -0
  403. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/benign_template.j2 +0 -0
  404. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/edge_cases/empty_template.json +0 -0
  405. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/edge_cases/malformed_template.json +0 -0
  406. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/edge_cases/multiple_templates.json +0 -0
  407. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/edge_cases/no_template.json +0 -0
  408. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/edge_cases/oversized_template.json +0 -0
  409. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/malicious/attr_bypass.json +0 -0
  410. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/malicious/combined_attack.json +0 -0
  411. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/malicious/config_exploit.json +0 -0
  412. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/malicious/cve_2024_34359_original.json +0 -0
  413. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/malicious/direct_eval.json +0 -0
  414. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/malicious/env_extraction.json +0 -0
  415. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/malicious/file_access.json +0 -0
  416. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/malicious/hex_bypass.json +0 -0
  417. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/malicious/loop_discovery.json +0 -0
  418. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/malicious/network_exfil.json +0 -0
  419. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/malicious/request_exploit.json +0 -0
  420. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/malicious/subprocess_injection.json +0 -0
  421. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/malicious_cve_2024_34359.json +0 -0
  422. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/malicious_env_vars.json +0 -0
  423. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/malicious_file_read.json +0 -0
  424. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/malicious_loop_exploit.json +0 -0
  425. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/malicious_obfuscated.json +0 -0
  426. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/malicious_subprocess.template +0 -0
  427. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/obfuscated/base64_payload.json +0 -0
  428. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/obfuscated/char_construction.json +0 -0
  429. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/obfuscated/format_bypass.json +0 -0
  430. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/obfuscated/getattr_bypass.json +0 -0
  431. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/standalone/benign_chat.j2 +0 -0
  432. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/standalone/malicious_standalone.jinja +0 -0
  433. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/standalone/suspicious_benign.template +0 -0
  434. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/tokenizer_config.json +0 -0
  435. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/yaml/malicious_config.yaml +0 -0
  436. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/jinja2/yaml/model_config.yaml +0 -0
  437. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/keras/basic_lambda_layer.h5 +0 -0
  438. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/keras/custom_layer_attack.h5 +0 -0
  439. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/keras/keras_zip_format.keras +0 -0
  440. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/keras/lambda_exfiltration.h5 +0 -0
  441. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/keras/lambda_with_imports.h5 +0 -0
  442. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/keras/loss_injection.h5 +0 -0
  443. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/keras/malicious_lambda.h5 +0 -0
  444. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/keras/metric_injection.h5 +0 -0
  445. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/keras/safe_model.h5 +0 -0
  446. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/manifests/safe_config.json +0 -0
  447. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/manifests/suspicious_config.json +0 -0
  448. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/pickles/decode_exec_chain.pkl +0 -0
  449. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/pickles/dill_func.pkl +0 -0
  450. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/pickles/malicious_model_realistic.pkl +0 -0
  451. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/pickles/malicious_system_call.pkl +0 -0
  452. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/pickles/nested_pickle_base64.pkl +0 -0
  453. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/pickles/nested_pickle_hex.pkl +0 -0
  454. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/pickles/nested_pickle_multistage.pkl +0 -0
  455. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/pickles/nested_pickle_raw.pkl +0 -0
  456. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/pickles/safe_data.pkl +0 -0
  457. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/pickles/safe_large_model.pkl +0 -0
  458. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/pickles/safe_model_with_binary.pkl +0 -0
  459. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/pickles/safe_model_with_encoding.pkl +0 -0
  460. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/pickles/safe_model_with_tokens.pkl +0 -0
  461. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/pickles/safe_nested_structure.pkl +0 -0
  462. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/pickles/simple_nested.pkl +0 -0
  463. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/pipeline.skops +0 -0
  464. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/pytorch/malicious_eval.pt +0 -0
  465. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/pytorch/safe_model.pt +0 -0
  466. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/safetensors/malicious_import.safetensors +0 -0
  467. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/safetensors/multiple_patterns.safetensors +0 -0
  468. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/safetensors/obfuscated_metadata.safetensors +0 -0
  469. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/safetensors/safe_model.safetensors +0 -0
  470. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/safetensors/script_injection.safetensors +0 -0
  471. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/safetensors/shell_commands.safetensors +0 -0
  472. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/safetensors/suspicious_url.safetensors +0 -0
  473. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/tensorflow/malicious_pyfunc/saved_model.pb +0 -0
  474. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/samples/tensorflow/safe_savedmodel/saved_model.pb +0 -0
  475. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/scenarios/license_scenarios/agpl_component/agpl_model.pkl +0 -0
  476. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/scenarios/license_scenarios/agpl_component/neural_network.py +0 -0
  477. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/scenarios/license_scenarios/mit_model/config.json +0 -0
  478. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/scenarios/license_scenarios/mit_model/model.py +0 -0
  479. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/scenarios/license_scenarios/mit_model/model_weights.pkl +0 -0
  480. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/scenarios/license_scenarios/mixed_licenses/LICENSE +0 -0
  481. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/scenarios/license_scenarios/mixed_licenses/apache_component.py +0 -0
  482. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/scenarios/license_scenarios/mixed_licenses/dataset_cc_nc.json +0 -0
  483. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/scenarios/license_scenarios/mixed_licenses/gpl_utility.py +0 -0
  484. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/scenarios/license_scenarios/mixed_licenses/mixed_model.pkl +0 -0
  485. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/scenarios/license_scenarios/unlicensed_dataset/embeddings.npy +0 -0
  486. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/scenarios/license_scenarios/unlicensed_dataset/features.csv +0 -0
  487. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/scenarios/license_scenarios/unlicensed_dataset/training_data.json +0 -0
  488. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/scenarios/security_scenarios/mixed_malicious_model/config.json +0 -0
  489. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/assets/scenarios/security_scenarios/mixed_malicious_model/model.pkl +0 -0
  490. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/benchmarks/test_scan_benchmarks.py +0 -0
  491. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/cache/__init__.py +0 -0
  492. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/cache/test_optimized_config.py +0 -0
  493. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/cli_output.py +0 -0
  494. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/config/__init__.py +0 -0
  495. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/config/test_name_blacklist.py +0 -0
  496. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/demo_license_functionality.py +0 -0
  497. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/detectors/test_builtin_detection.py +0 -0
  498. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/detectors/test_compile_eval_variants.py +0 -0
  499. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/detectors/test_cve_detection.py +0 -0
  500. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/detectors/test_jit_script_detector.py +0 -0
  501. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/detectors/test_network_comm_detector.py +0 -0
  502. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/detectors/test_runpy_detection.py +0 -0
  503. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/detectors/test_secrets_detector.py +0 -0
  504. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/helpers/frameworks.py +0 -0
  505. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/integrations/test_jfrog.py +0 -0
  506. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/integrations/test_jfrog_integration.py +0 -0
  507. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/integrations/test_license_checker.py +0 -0
  508. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/integrations/test_license_integration.py +0 -0
  509. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/integrations/test_mlflow_integration.py +0 -0
  510. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/integrations/test_sarif_formatter.py +0 -0
  511. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/integrations/test_sbom_license_integration.py +0 -0
  512. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/integrations/test_sbom_url_fixes.py +0 -0
  513. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/progress/__init__.py +0 -0
  514. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/progress/test_base.py +0 -0
  515. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_catboost_scanner.py +0 -0
  516. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_coreml_scanner.py +0 -0
  517. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_flax_msgpack_scanner.py +0 -0
  518. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_gguf_scanner.py +0 -0
  519. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_jax_checkpoint_scanner.py +0 -0
  520. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_jinja2_template_scanner.py +0 -0
  521. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_joblib_scanner_codecs.py +0 -0
  522. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_lightgbm_scanner.py +0 -0
  523. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_llamafile_scanner.py +0 -0
  524. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_manifest_scanner.py +0 -0
  525. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_metadata_scanner.py +0 -0
  526. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_mxnet_scanner.py +0 -0
  527. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_nemo_scanner.py +0 -0
  528. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_onnx_dependency_handling.py +0 -0
  529. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_onnx_scanner.py +0 -0
  530. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_paddle_scanner.py +0 -0
  531. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_pmml_scanner.py +0 -0
  532. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_pytorch_binary_scanner.py +0 -0
  533. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_r_serialized_scanner.py +0 -0
  534. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_rknn_scanner.py +0 -0
  535. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_rule_code_registry_consistency.py +0 -0
  536. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_rule_mapper.py +0 -0
  537. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_safetensors_scanner.py +0 -0
  538. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_sevenzip_scanner.py +0 -0
  539. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_skops_content_analysis.py +0 -0
  540. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_skops_scanner.py +0 -0
  541. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_tar_scanner.py +0 -0
  542. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_tflite_scanner.py +0 -0
  543. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_torch7_scanner.py +0 -0
  544. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_torchserve_mar_scanner.py +0 -0
  545. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_weight_distribution_scanner.py +0 -0
  546. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/scanners/test_xgboost_scanner.py +0 -0
  547. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_asset_inventory_integration.py +0 -0
  548. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_asset_list.py +0 -0
  549. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_basic.py +0 -0
  550. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_benchmark_report.py +0 -0
  551. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_bug1_confidence_exploit.py +0 -0
  552. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_cache_cli.py +0 -0
  553. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_cache_optimizations.py +0 -0
  554. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_checks_recording.py +0 -0
  555. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_cli.py +0 -0
  556. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_cli_cache_dir.py +0 -0
  557. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_cli_default_command.py +0 -0
  558. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_cli_file_filtering.py +0 -0
  559. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_cli_license_integration.py +0 -0
  560. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_cli_logging_handlers.py +0 -0
  561. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_cli_output.py +0 -0
  562. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_cloud_url_detection.py +0 -0
  563. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_core_asset_extraction.py +0 -0
  564. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_cve_2025_10155_bin_pickle.py +0 -0
  565. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_debug_command.py +0 -0
  566. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_dill_joblib_enhanced.py +0 -0
  567. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_double_interrupt.py +0 -0
  568. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_exit_codes.py +0 -0
  569. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_file_hash.py +0 -0
  570. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_gguf_sbom_integration.py +0 -0
  571. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_graceful_degradation.py +0 -0
  572. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_header_discrepancy.py +0 -0
  573. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_importlib_detection.py +0 -0
  574. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_integration.py +0 -0
  575. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_jax_flax_integration.py +0 -0
  576. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_jit_script_integration.py +0 -0
  577. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_manifest_name_policy.py +0 -0
  578. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_models.py +0 -0
  579. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_nested_pickle_integration.py +0 -0
  580. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_network_comm_integration.py +0 -0
  581. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_os_alias_detection.py +0 -0
  582. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_os_subprocess_detection.py +0 -0
  583. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_path_traversal.py +0 -0
  584. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_performance_benchmarks.py +0 -0
  585. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_pickle_context_filtering.py +0 -0
  586. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_pydantic_models.py +0 -0
  587. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_python_version_warning.py +0 -0
  588. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_regression_corpus.py +0 -0
  589. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_regular_scan_hash.py +0 -0
  590. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_safetensors_optimization.py +0 -0
  591. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_secure_hasher.py +0 -0
  592. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_security_asset_integration.py +0 -0
  593. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_security_enhancements.py +0 -0
  594. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_shebang_context.py +0 -0
  595. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_simple_jinja2.py +0 -0
  596. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_sklearn_joblib_false_positive.py +0 -0
  597. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_telemetry.py +0 -0
  598. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_telemetry_decoupling.py +0 -0
  599. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_tensorflow_lambda_detection.py +0 -0
  600. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_timeout_configuration.py +0 -0
  601. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_utils.py +0 -0
  602. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_weak_hash_detection.py +0 -0
  603. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_webbrowser_detection.py +0 -0
  604. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/test_xdist_status.py +0 -0
  605. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/utils/__init__.py +0 -0
  606. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/utils/file/__init__.py +0 -0
  607. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/utils/file/test_advanced_file_handler.py +0 -0
  608. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/utils/file/test_advanced_size_limits.py +0 -0
  609. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/utils/file/test_file_filter.py +0 -0
  610. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/utils/file/test_file_type_validation_integration.py +0 -0
  611. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/utils/file/test_integration_file_type_demo.py +0 -0
  612. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/utils/file/test_large_file_handler.py +0 -0
  613. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/utils/file/test_streaming_preview.py +0 -0
  614. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/utils/helpers/test_asset_from_scan_result.py +0 -0
  615. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/utils/helpers/test_auto_defaults.py +0 -0
  616. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/utils/helpers/test_code_validation.py +0 -0
  617. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/utils/helpers/test_disk_space.py +0 -0
  618. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/utils/helpers/test_file_iterator.py +0 -0
  619. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/utils/helpers/test_interrupt_handling.py +0 -0
  620. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/utils/helpers/test_ml_context_false_positives.py +0 -0
  621. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/utils/helpers/test_py_compile_improvements.py +0 -0
  622. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/utils/helpers/test_secure_hasher.py +0 -0
  623. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/utils/sources/test_cloud_storage.py +0 -0
  624. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/utils/sources/test_dvc_integration.py +0 -0
  625. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/utils/sources/test_pytorch_hub.py +0 -0
  626. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/utils/test_lfs.py +0 -0
  627. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/utils/test_result_conversion.py +0 -0
  628. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/whitelists/__init__.py +0 -0
  629. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/whitelists/test_combined.py +0 -0
  630. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/whitelists/test_huggingface_popular.py +0 -0
  631. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/whitelists/test_organizations.py +0 -0
  632. {modelaudit-0.2.32 → modelaudit-0.2.34}/tests/xdist_status.py +0 -0
@@ -4,9 +4,9 @@ Describe the change and user impact.
4
4
 
5
5
  ## Validation
6
6
 
7
- - [ ] `uv run ruff format --check modelaudit/ tests/`
8
- - [ ] `uv run ruff check modelaudit/ tests/`
9
- - [ ] `uv run mypy modelaudit/`
7
+ - [ ] `uv run ruff format --check modelaudit/ packages/modelaudit-picklescan/src packages/modelaudit-picklescan/tests tests/`
8
+ - [ ] `uv run ruff check modelaudit/ packages/modelaudit-picklescan/src packages/modelaudit-picklescan/tests tests/`
9
+ - [ ] `uv run mypy modelaudit/ packages/modelaudit-picklescan/src packages/modelaudit-picklescan/tests`
10
10
  - [ ] `uv run pytest -n auto -m "not slow and not integration" --maxfail=1`
11
11
 
12
12
  ## Checklist
@@ -139,7 +139,7 @@ jobs:
139
139
  always() &&
140
140
  github.event_name == 'pull_request' &&
141
141
  github.event.pull_request.head.repo.full_name == github.repository
142
- uses: actions/github-script@v8
142
+ uses: actions/github-script@v9
143
143
  env:
144
144
  COMMENT_BODY_PATH: ${{ steps.paths.outputs.artifact_dir }}/benchmark-comment.md
145
145
  with:
@@ -68,6 +68,23 @@ jobs:
68
68
  echo "✓ uv.lock committed and pushed"
69
69
  fi
70
70
 
71
+ - name: Sync standalone package lock with pyproject.toml
72
+ if: steps.check-pr.outputs.has_pr == 'true'
73
+ working-directory: packages/modelaudit-picklescan
74
+ run: |
75
+ uv lock
76
+ if git diff --quiet uv.lock; then
77
+ echo "✓ packages/modelaudit-picklescan/uv.lock already in sync"
78
+ else
79
+ echo "→ packages/modelaudit-picklescan/uv.lock updated to match pyproject.toml"
80
+ git config user.name "github-actions[bot]"
81
+ git config user.email "github-actions[bot]@users.noreply.github.com"
82
+ git add uv.lock
83
+ git commit -m "chore: sync standalone package lock"
84
+ git push
85
+ echo "✓ packages/modelaudit-picklescan/uv.lock committed and pushed"
86
+ fi
87
+
71
88
  - name: Setup Node.js
72
89
  if: steps.check-pr.outputs.has_pr == 'true'
73
90
  uses: actions/setup-node@v6
@@ -115,18 +132,18 @@ jobs:
115
132
  - name: Sync dependencies
116
133
  run: uv sync --extra all-ci
117
134
 
118
- - name: Lint with Ruff
135
+ - name: Lint root package with Ruff
119
136
  run: uv run ruff check modelaudit/ tests/
120
137
 
121
- - name: Check formatting with Ruff
138
+ - name: Check root package formatting with Ruff
122
139
  run: uv run ruff format --check modelaudit/ tests/
123
140
 
124
- - name: Type check with mypy
125
- run: uv run mypy modelaudit/
141
+ - name: Type check root package with mypy
142
+ run: uv run mypy modelaudit/ tests/
126
143
 
127
- - name: Run tests
144
+ - name: Run root package tests
128
145
  run: |
129
- uv run pytest -n auto -m "not slow and not integration and not performance" --tb=short
146
+ uv run pytest tests -n auto -m "not slow and not integration and not performance" --tb=short
130
147
 
131
148
  - name: Build package
132
149
  run: uv build
@@ -231,20 +248,20 @@ jobs:
231
248
  fi
232
249
  WHEEL_ARTIFACT="${wheel_artifacts[0]}"
233
250
 
234
- python -m venv /tmp/modelaudit-wheel-smoke
235
- source /tmp/modelaudit-wheel-smoke/bin/activate
251
+ uv venv /tmp/modelaudit-wheel-smoke
236
252
 
237
- python -m pip install --upgrade pip
238
- python -m pip install "${WHEEL_ARTIFACT}"
253
+ uv pip install --python /tmp/modelaudit-wheel-smoke/bin/python "${WHEEL_ARTIFACT}"
239
254
 
240
- INSTALLED_VERSION="$(python -c "import importlib.metadata as m; print(m.version('modelaudit'))")"
255
+ INSTALLED_VERSION="$(
256
+ /tmp/modelaudit-wheel-smoke/bin/python -c "import importlib.metadata as m; print(m.version('modelaudit'))"
257
+ )"
241
258
  if [[ "$INSTALLED_VERSION" != "$EXPECTED_VERSION" ]]; then
242
259
  echo "ERROR: Wheel install version mismatch: expected $EXPECTED_VERSION, got $INSTALLED_VERSION"
243
260
  exit 1
244
261
  fi
245
262
 
246
263
  # Validate required project URLs in installed metadata.
247
- python - <<'PY'
264
+ /tmp/modelaudit-wheel-smoke/bin/python - <<'PY'
248
265
  import importlib.metadata as md
249
266
 
250
267
  # Keep these expected URLs in sync with [project.urls] in pyproject.toml.
@@ -269,10 +286,18 @@ jobs:
269
286
  print("Project URL metadata validated.")
270
287
  PY
271
288
 
272
- modelaudit --version
289
+ /tmp/modelaudit-wheel-smoke/bin/modelaudit --version
290
+
291
+ /tmp/modelaudit-wheel-smoke/bin/python - <<'PY'
292
+ import modelaudit_picklescan
293
+
294
+ report = modelaudit_picklescan.scan_bytes(b"\x80\x04}q\x00.")
295
+ assert report.status.value == "complete", report
296
+ print("modelaudit_picklescan import and scan smoke test passed.")
297
+ PY
273
298
 
274
299
  # Basic CLI smoke run from the installed wheel.
275
- python - <<'PY'
300
+ /tmp/modelaudit-wheel-smoke/bin/python - <<'PY'
276
301
  import pathlib
277
302
  import pickle
278
303
  import subprocess
@@ -285,7 +310,7 @@ jobs:
285
310
  pickle.dump({"smoke": True}, f)
286
311
 
287
312
  completed = subprocess.run(
288
- ["modelaudit", str(test_file), "--format", "json"],
313
+ ["/tmp/modelaudit-wheel-smoke/bin/modelaudit", str(test_file), "--format", "json"],
289
314
  capture_output=True,
290
315
  text=True,
291
316
  check=False,
@@ -309,22 +334,30 @@ jobs:
309
334
  fi
310
335
  SDIST_ARTIFACT="${sdist_artifacts[0]}"
311
336
 
312
- python -m venv /tmp/modelaudit-sdist-smoke
313
- source /tmp/modelaudit-sdist-smoke/bin/activate
337
+ uv venv /tmp/modelaudit-sdist-smoke
314
338
 
315
- python -m pip install --upgrade pip
316
- python -m pip install "${SDIST_ARTIFACT}"
339
+ uv pip install --python /tmp/modelaudit-sdist-smoke/bin/python "${SDIST_ARTIFACT}"
317
340
 
318
- INSTALLED_VERSION="$(python -c "import importlib.metadata as m; print(m.version('modelaudit'))")"
341
+ INSTALLED_VERSION="$(
342
+ /tmp/modelaudit-sdist-smoke/bin/python -c "import importlib.metadata as m; print(m.version('modelaudit'))"
343
+ )"
319
344
  if [[ "$INSTALLED_VERSION" != "$EXPECTED_VERSION" ]]; then
320
345
  echo "ERROR: sdist install version mismatch: expected $EXPECTED_VERSION, got $INSTALLED_VERSION"
321
346
  exit 1
322
347
  fi
323
348
 
324
- modelaudit --version
349
+ /tmp/modelaudit-sdist-smoke/bin/modelaudit --version
350
+
351
+ /tmp/modelaudit-sdist-smoke/bin/python - <<'PY'
352
+ import modelaudit_picklescan
353
+
354
+ report = modelaudit_picklescan.scan_bytes(b"\x80\x04}q\x00.")
355
+ assert report.status.value == "complete", report
356
+ print("modelaudit_picklescan import and scan smoke test passed.")
357
+ PY
325
358
 
326
359
  # Basic CLI smoke run from the installed sdist.
327
- python - <<'PY'
360
+ /tmp/modelaudit-sdist-smoke/bin/python - <<'PY'
328
361
  import pathlib
329
362
  import pickle
330
363
  import subprocess
@@ -337,7 +370,7 @@ jobs:
337
370
  pickle.dump({"smoke": True}, f)
338
371
 
339
372
  completed = subprocess.run(
340
- ["modelaudit", str(test_file), "--format", "json"],
373
+ ["/tmp/modelaudit-sdist-smoke/bin/modelaudit", str(test_file), "--format", "json"],
341
374
  capture_output=True,
342
375
  text=True,
343
376
  check=False,
@@ -354,9 +387,83 @@ jobs:
354
387
  name: dist
355
388
  path: dist/
356
389
 
390
+ build-picklescan-package:
391
+ if: needs.release-please.outputs.release_created == 'true'
392
+ runs-on: ubuntu-latest
393
+ needs: release-please
394
+ permissions:
395
+ contents: read
396
+ defaults:
397
+ run:
398
+ working-directory: packages/modelaudit-picklescan
399
+ steps:
400
+ - uses: actions/checkout@v6
401
+
402
+ - name: Install uv
403
+ uses: astral-sh/setup-uv@v7
404
+ with:
405
+ enable-cache: true
406
+
407
+ - name: Pin Python version
408
+ run: |
409
+ uv python pin 3.12
410
+
411
+ - name: Check standalone package lock is in sync
412
+ run: |
413
+ uv lock --check
414
+
415
+ - name: Lint standalone package with Ruff
416
+ run: uv run --with ruff ruff check src tests
417
+
418
+ - name: Check standalone package formatting with Ruff
419
+ run: uv run --with ruff ruff format --check src tests
420
+
421
+ - name: Type check standalone package with mypy
422
+ run: uv run --with mypy mypy src tests
423
+
424
+ - name: Run standalone package tests
425
+ run: uv run --with pytest --with pytest-xdist pytest -n auto tests --tb=short
426
+
427
+ - name: Build standalone package
428
+ run: uv build --out-dir /tmp/modelaudit-picklescan-dist
429
+
430
+ - name: Validate standalone package metadata
431
+ run: uvx twine check /tmp/modelaudit-picklescan-dist/*
432
+
433
+ - name: Smoke test standalone package wheel install
434
+ run: |
435
+ set -euo pipefail
436
+ uv venv /tmp/modelaudit-picklescan-wheel-smoke
437
+
438
+ shopt -s nullglob
439
+ picklescan_wheels=(/tmp/modelaudit-picklescan-dist/modelaudit_picklescan-*.whl)
440
+ if [[ ${#picklescan_wheels[@]} -ne 1 ]]; then
441
+ echo "ERROR: Expected exactly 1 modelaudit_picklescan wheel artifact, found ${#picklescan_wheels[@]}"
442
+ ls -la /tmp/modelaudit-picklescan-dist/
443
+ exit 1
444
+ fi
445
+
446
+ uv pip install --python /tmp/modelaudit-picklescan-wheel-smoke/bin/python "${picklescan_wheels[0]}"
447
+
448
+ smoke_dir="$(mktemp -d)"
449
+ (
450
+ cd "$smoke_dir"
451
+ PYTHONPATH= /tmp/modelaudit-picklescan-wheel-smoke/bin/python -I - <<'PY'
452
+ import importlib.util
453
+
454
+ import modelaudit_picklescan
455
+
456
+ assert importlib.util.find_spec("modelaudit") is None
457
+ report = modelaudit_picklescan.scan_bytes(b"\x80\x04}q\x00.")
458
+ assert report.status.value == "complete", report
459
+ assert report.verdict.value == "clean", report
460
+ print("standalone modelaudit_picklescan wheel loaded without modelaudit")
461
+ PY
462
+ )
463
+
357
464
  publish-pypi:
358
465
  if: needs.release-please.outputs.release_created == 'true'
359
- needs: [build, release-please]
466
+ needs: [build, build-picklescan-package, release-please]
360
467
  runs-on: ubuntu-latest
361
468
  environment:
362
469
  name: pypi
@@ -379,7 +486,7 @@ jobs:
379
486
 
380
487
  provenance:
381
488
  if: needs.release-please.outputs.release_created == 'true'
382
- needs: [build, publish-pypi, release-please]
489
+ needs: [build, build-picklescan-package, publish-pypi, release-please]
383
490
  runs-on: ubuntu-latest
384
491
  permissions:
385
492
  contents: write
@@ -28,6 +28,7 @@ jobs:
28
28
  runs-on: ubuntu-latest
29
29
  outputs:
30
30
  python: ${{ steps.filter.outputs.python }}
31
+ picklescan: ${{ steps.filter.outputs.picklescan }}
31
32
  docker: ${{ steps.filter.outputs.docker }}
32
33
  workflows: ${{ steps.filter.outputs.workflows }}
33
34
  dependencies: ${{ steps.filter.outputs.dependencies }}
@@ -41,6 +42,8 @@ jobs:
41
42
  - '**.py'
42
43
  - 'pyproject.toml'
43
44
  - 'uv.lock'
45
+ picklescan:
46
+ - 'packages/modelaudit-picklescan/**'
44
47
  docker:
45
48
  - 'Dockerfile*'
46
49
  - '.dockerignore'
@@ -370,7 +373,7 @@ jobs:
370
373
 
371
374
  - name: Run fast tests with fail-fast
372
375
  run: |
373
- uv run pytest -x --maxfail=1 -n auto -m "not slow and not integration and not performance" --tb=short --durations=10
376
+ uv run pytest tests -x --maxfail=1 -n auto -m "not slow and not integration and not performance" --tb=short --durations=10
374
377
 
375
378
  windows-tests:
376
379
  name: Windows Tests (Python 3.11)
@@ -395,7 +398,7 @@ jobs:
395
398
 
396
399
  - name: Run fast tests with fail-fast
397
400
  run: |
398
- uv run pytest -x --maxfail=1 -n auto -m "not slow and not integration and not performance" --tb=short --durations=10
401
+ uv run pytest tests -x --maxfail=1 -n auto -m "not slow and not integration and not performance" --tb=short --durations=10
399
402
 
400
403
  test:
401
404
  name: Test Python ${{ matrix.python-version }}
@@ -443,12 +446,12 @@ jobs:
443
446
  - name: Run fast tests with fail-fast (PRs, Python 3.12 with coverage)
444
447
  if: github.event_name == 'pull_request' && matrix.python-version == '3.12'
445
448
  run: |
446
- uv run pytest -x --maxfail=1 -n auto -m "not slow and not integration and not performance" --cov=modelaudit --cov-report=xml --tb=short --durations=15
449
+ uv run pytest tests -x --maxfail=1 -n auto -m "not slow and not integration and not performance" --cov=modelaudit --cov-report=xml --tb=short --durations=15
447
450
 
448
451
  - name: Run fast tests with fail-fast (PRs, non-3.12)
449
452
  if: github.event_name == 'pull_request' && matrix.python-version != '3.12'
450
453
  run: |
451
- uv run pytest -x --maxfail=1 -n auto -m "not slow and not integration and not performance" --tb=short --durations=15
454
+ uv run pytest tests -x --maxfail=1 -n auto -m "not slow and not integration and not performance" --tb=short --durations=15
452
455
 
453
456
  - name: Run slow/integration tests on PR (if labeled)
454
457
  # Run slow tests on PRs when the 'run-slow-tests' label is added
@@ -457,17 +460,17 @@ jobs:
457
460
  timeout-minutes: 20
458
461
  run: |
459
462
  echo "Running slow/integration tests due to 'run-slow-tests' label"
460
- uv run pytest -n auto -m "slow or integration or performance" --tb=short --durations=20
463
+ uv run pytest tests -n auto -m "slow or integration or performance" --tb=short --durations=20
461
464
 
462
465
  - name: Run fast tests with coverage (main branch only)
463
466
  if: github.ref == 'refs/heads/main' && matrix.python-version == '3.12'
464
467
  run: |
465
- uv run pytest -n auto -m "not slow and not integration and not performance" --cov=modelaudit --cov-report=xml --tb=short --durations=15
468
+ uv run pytest tests -n auto -m "not slow and not integration and not performance" --cov=modelaudit --cov-report=xml --tb=short --durations=15
466
469
 
467
470
  - name: Run fast tests without coverage (main branch, non-3.12)
468
471
  if: github.ref == 'refs/heads/main' && matrix.python-version != '3.12'
469
472
  run: |
470
- uv run pytest -n auto -m "not slow and not integration and not performance" --tb=short --durations=15
473
+ uv run pytest tests -n auto -m "not slow and not integration and not performance" --tb=short --durations=15
471
474
 
472
475
  - name: Run slow/integration tests (main branch only)
473
476
  # Run ALL slow/integration/performance tests on main branch.
@@ -477,7 +480,7 @@ jobs:
477
480
  timeout-minutes: 20
478
481
  run: |
479
482
  # Run all slow, integration, and performance tests
480
- uv run pytest -n auto -m "slow or integration or performance" --tb=short --durations=20
483
+ uv run pytest tests -n auto -m "slow or integration or performance" --tb=short --durations=20
481
484
 
482
485
  - name: Upload coverage to Codecov
483
486
  if: matrix.python-version == '3.12'
@@ -713,8 +716,8 @@ jobs:
713
716
  build:
714
717
  name: Build and Package
715
718
  needs: changes
716
- # Always build on main, otherwise only if Python files changed
717
- if: github.ref == 'refs/heads/main' || needs.changes.outputs.python == 'true' || needs.changes.outputs.dependencies == 'true'
719
+ # Always build on main, otherwise only if Python/dependency/workflow files changed
720
+ if: github.ref == 'refs/heads/main' || needs.changes.outputs.python == 'true' || needs.changes.outputs.dependencies == 'true' || needs.changes.outputs.workflows == 'true'
718
721
  runs-on: ubuntu-latest
719
722
  timeout-minutes: 10
720
723
  steps:
@@ -754,12 +757,117 @@ jobs:
754
757
  run: |
755
758
  uvx twine check dist/*
756
759
 
760
+ - name: Smoke test wheel install
761
+ run: |
762
+ set -euo pipefail
763
+ uv venv /tmp/modelaudit-wheel-smoke
764
+
765
+ uv pip install --python /tmp/modelaudit-wheel-smoke/bin/python dist/modelaudit-*.whl
766
+
767
+ smoke_dir="$(mktemp -d)"
768
+ (
769
+ cd "$smoke_dir"
770
+ PYTHONPATH= /tmp/modelaudit-wheel-smoke/bin/python -I - <<'PY'
771
+ import modelaudit
772
+ import modelaudit_picklescan
773
+
774
+ report = modelaudit_picklescan.scan_bytes(b"\x80\x04}q\x00.")
775
+ assert report.status.value == "complete", report
776
+ print(f"modelaudit {modelaudit.__version__} and modelaudit_picklescan loaded")
777
+ PY
778
+ )
779
+
757
780
  - name: Upload artifacts
758
781
  uses: actions/upload-artifact@v7
759
782
  with:
760
783
  name: dist
761
784
  path: dist/
762
785
 
786
+ picklescan-package:
787
+ name: Standalone Pickle Package
788
+ needs: changes
789
+ if: github.ref == 'refs/heads/main' || needs.changes.outputs.picklescan == 'true' || needs.changes.outputs.workflows == 'true'
790
+ runs-on: ubuntu-latest
791
+ timeout-minutes: 15
792
+ defaults:
793
+ run:
794
+ working-directory: packages/modelaudit-picklescan
795
+ steps:
796
+ - name: Checkout repo
797
+ uses: actions/checkout@v6
798
+
799
+ - name: Install uv
800
+ uses: astral-sh/setup-uv@v7
801
+ with:
802
+ enable-cache: true
803
+
804
+ - name: Pin Python version
805
+ run: |
806
+ uv python pin 3.12
807
+
808
+ - name: Check standalone package lock is in sync
809
+ run: |
810
+ uv lock --check
811
+
812
+ - name: Lint standalone package with Ruff
813
+ run: |
814
+ uv run --with ruff ruff check src tests
815
+
816
+ - name: Check standalone package import organization with Ruff
817
+ run: |
818
+ uv run --with ruff ruff check --select I src tests
819
+
820
+ - name: Check standalone package formatting with Ruff
821
+ run: |
822
+ uv run --with ruff ruff format --check src tests
823
+
824
+ - name: Type check standalone package with mypy
825
+ run: |
826
+ uv run --with mypy mypy src tests
827
+
828
+ - name: Run standalone package tests
829
+ run: |
830
+ uv run --with pytest --with pytest-xdist pytest -n auto tests --tb=short
831
+
832
+ - name: Build standalone package
833
+ run: |
834
+ uv build --out-dir /tmp/modelaudit-picklescan-dist
835
+
836
+ - name: Validate standalone package metadata
837
+ run: |
838
+ uvx twine check /tmp/modelaudit-picklescan-dist/*
839
+
840
+ - name: Smoke test standalone package wheel install
841
+ run: |
842
+ set -euo pipefail
843
+ uv venv /tmp/modelaudit-picklescan-wheel-smoke
844
+
845
+ shopt -s nullglob
846
+ picklescan_wheels=(/tmp/modelaudit-picklescan-dist/modelaudit_picklescan-*.whl)
847
+ if [[ ${#picklescan_wheels[@]} -ne 1 ]]; then
848
+ echo "ERROR: Expected exactly 1 modelaudit_picklescan wheel artifact, found ${#picklescan_wheels[@]}"
849
+ ls -la /tmp/modelaudit-picklescan-dist/
850
+ exit 1
851
+ fi
852
+
853
+ uv pip install --python /tmp/modelaudit-picklescan-wheel-smoke/bin/python "${picklescan_wheels[0]}"
854
+
855
+ smoke_dir="$(mktemp -d)"
856
+ (
857
+ cd "$smoke_dir"
858
+ PYTHONPATH= /tmp/modelaudit-picklescan-wheel-smoke/bin/python -I - <<'PY'
859
+ import importlib.util
860
+
861
+ import modelaudit_picklescan
862
+
863
+ assert importlib.util.find_spec("modelaudit") is None
864
+ report = modelaudit_picklescan.scan_bytes(b"\x80\x04}q\x00.")
865
+ assert report.status.value == "complete", report
866
+ assert report.verdict.value == "clean", report
867
+ print("standalone modelaudit_picklescan wheel loaded without modelaudit")
868
+ PY
869
+ )
870
+
763
871
  # Summary job to ensure all required checks pass
764
872
  ci-success:
765
873
  name: CI Success
@@ -779,6 +887,7 @@ jobs:
779
887
  test-proto-reproducibility,
780
888
  test-extras-smoke,
781
889
  build,
890
+ picklescan-package,
782
891
  ]
783
892
  if: always()
784
893
  runs-on: ubuntu-latest
@@ -800,12 +909,15 @@ jobs:
800
909
  PROTO_REPRO_RESULT="${{ needs.test-proto-reproducibility.result }}"
801
910
  EXTRAS_RESULT="${{ needs.test-extras-smoke.result }}"
802
911
  BUILD_RESULT="${{ needs.build.result }}"
912
+ PICKLESCAN_RESULT="${{ needs.picklescan-package.result }}"
803
913
  CHANGES_RESULT="${{ needs.changes.result }}"
804
914
 
805
915
  # Check if conditional jobs should have run
806
916
  ON_MAIN_BRANCH="${{ github.ref == 'refs/heads/main' }}"
807
917
  DEPENDENCIES_CHANGED="${{ needs.changes.outputs.dependencies == 'true' }}"
918
+ PICKLESCAN_CHANGED="${{ needs.changes.outputs.picklescan == 'true' }}"
808
919
  PYTHON_CHANGED="${{ needs.changes.outputs.python == 'true' }}"
920
+ WORKFLOWS_CHANGED="${{ needs.changes.outputs.workflows == 'true' }}"
809
921
  echo "Job results:"
810
922
  echo " quick-feedback: $QUICK_FEEDBACK_RESULT"
811
923
  echo " lint: $LINT_RESULT"
@@ -820,6 +932,7 @@ jobs:
820
932
  echo " test-proto-reproducibility: $PROTO_REPRO_RESULT"
821
933
  echo " test-extras-smoke: $EXTRAS_RESULT"
822
934
  echo " build: $BUILD_RESULT"
935
+ echo " picklescan-package: $PICKLESCAN_RESULT"
823
936
  echo " changes: $CHANGES_RESULT"
824
937
 
825
938
  # Check if any job failed or was cancelled
@@ -836,7 +949,7 @@ jobs:
836
949
 
837
950
  # Conditional jobs: only fail if they should have run
838
951
  # License/lock checks run on main or when dependencies change
839
- if [[ "$ON_MAIN_BRANCH" == "true" || "$DEPENDENCIES_CHANGED" == "true" ]]; then
952
+ if [[ "$ON_MAIN_BRANCH" == "true" || "$DEPENDENCIES_CHANGED" == "true" || "$WORKFLOWS_CHANGED" == "true" ]]; then
840
953
  [[ "$LICENSE_RESULT" == "failure" || "$LICENSE_RESULT" == "cancelled" ]] && FAILED=true
841
954
  [[ "$UV_LOCK_RESULT" == "failure" || "$UV_LOCK_RESULT" == "cancelled" ]] && FAILED=true
842
955
  [[ "$NUMPY_RESULT" == "failure" || "$NUMPY_RESULT" == "cancelled" ]] && FAILED=true
@@ -844,11 +957,15 @@ jobs:
844
957
  fi
845
958
 
846
959
  # Vendored protos jobs run on main or when python/dependencies change
847
- if [[ "$ON_MAIN_BRANCH" == "true" || "$PYTHON_CHANGED" == "true" || "$DEPENDENCIES_CHANGED" == "true" ]]; then
960
+ if [[ "$ON_MAIN_BRANCH" == "true" || "$PYTHON_CHANGED" == "true" || "$DEPENDENCIES_CHANGED" == "true" || "$WORKFLOWS_CHANGED" == "true" ]]; then
848
961
  [[ "$PROTOS_RESULT" == "failure" || "$PROTOS_RESULT" == "cancelled" ]] && FAILED=true
849
962
  [[ "$PROTO_REPRO_RESULT" == "failure" || "$PROTO_REPRO_RESULT" == "cancelled" ]] && FAILED=true
850
963
  fi
851
964
 
965
+ if [[ "$ON_MAIN_BRANCH" == "true" || "$PICKLESCAN_CHANGED" == "true" || "$WORKFLOWS_CHANGED" == "true" ]]; then
966
+ [[ "$PICKLESCAN_RESULT" == "failure" || "$PICKLESCAN_RESULT" == "cancelled" ]] && FAILED=true
967
+ fi
968
+
852
969
  if [[ "$FAILED" == "true" ]]; then
853
970
  echo "Some CI checks failed!"
854
971
  exit 1
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.2.34"
3
+ }
@@ -25,9 +25,9 @@ This is the single source of truth for all AI coding agents (Claude, Gemini, oth
25
25
  uv sync --extra all-ci
26
26
 
27
27
  # Pre-commit workflow (MUST run before every commit)
28
- uv run ruff format modelaudit/ tests/
29
- uv run ruff check --fix modelaudit/ tests/
30
- uv run mypy modelaudit/ tests/
28
+ uv run ruff format modelaudit/ packages/modelaudit-picklescan/src packages/modelaudit-picklescan/tests tests/
29
+ uv run ruff check --fix modelaudit/ packages/modelaudit-picklescan/src packages/modelaudit-picklescan/tests tests/
30
+ uv run mypy modelaudit/ packages/modelaudit-picklescan/src packages/modelaudit-picklescan/tests tests/
31
31
  uv run pytest -n auto -m "not slow and not integration" --maxfail=1
32
32
  ```
33
33
 
@@ -36,7 +36,7 @@ uv run pytest -n auto -m "not slow and not integration" --maxfail=1
36
36
  1. **Understand:** Read nearby code, tests, and docs (`docs/agents/*.md`) before editing.
37
37
  2. **Plan:** For anything non-trivial, present a short multi-step plan; refine iteratively.
38
38
  3. **Implement:** Preserve security focus, follow `BaseScanner` patterns (see `docs/agents/architecture.md`), handle missing deps gracefully, and update `SCANNER_REGISTRY` when adding scanners.
39
- 4. **Verify:** Run the validation commands above. Format/linters must be clean. Use targeted `pytest` when appropriate, and type-check modified tests as part of the normal `mypy modelaudit/ tests/` pass.
39
+ 4. **Verify:** Run the validation commands above. Format/linters must be clean. Use targeted `pytest` when appropriate, and type-check modified tests as part of the normal `mypy modelaudit/ packages/modelaudit-picklescan/src packages/modelaudit-picklescan/tests tests/` pass.
40
40
  5. **Report:** Summarize changes with file references and note residual risks or follow-ups.
41
41
 
42
42
  ## Branch & Git Hygiene
@@ -71,18 +71,18 @@ gh pr create --title "feat: descriptive title" --body "Brief description"
71
71
  ## CI Compliance Requirements
72
72
 
73
73
  ```bash
74
- uv run ruff check modelaudit/ tests/ # Lint (no errors)
75
- uv run ruff format --check modelaudit/ tests/ # Format (no changes)
76
- uv run mypy modelaudit/ tests/ # Types (no errors)
74
+ uv run ruff check modelaudit/ packages/modelaudit-picklescan/src packages/modelaudit-picklescan/tests tests/ # Lint (no errors)
75
+ uv run ruff format --check modelaudit/ packages/modelaudit-picklescan/src packages/modelaudit-picklescan/tests tests/ # Format (no changes)
76
+ uv run mypy modelaudit/ packages/modelaudit-picklescan/src packages/modelaudit-picklescan/tests tests/ # Types (no errors)
77
77
  uv run pytest -n auto -m "not slow and not integration" --maxfail=1
78
78
  ```
79
79
 
80
- | Issue | Fix |
81
- | ------------------- | ------------------------------------------------------- |
82
- | Import organization | `uv run ruff check --fix --select I modelaudit/ tests/` |
83
- | Format issues | `uv run ruff format modelaudit/ tests/` |
84
- | Type errors | Fix manually, re-run `mypy` |
85
- | Test failures | Check output, fix issues, re-run tests |
80
+ | Issue | Fix |
81
+ | ------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
82
+ | Import organization | `uv run ruff check --fix --select I modelaudit/ packages/modelaudit-picklescan/src packages/modelaudit-picklescan/tests tests/` |
83
+ | Format issues | `uv run ruff format modelaudit/ packages/modelaudit-picklescan/src packages/modelaudit-picklescan/tests tests/` |
84
+ | Type errors | Fix manually, re-run `mypy` |
85
+ | Test failures | Check output, fix issues, re-run tests |
86
86
 
87
87
  ## Dependency Management
88
88
 
@@ -159,6 +159,7 @@ For the full multi-file workflow, see `docs/agents/new-scanner-quickstart.md` §
159
159
 
160
160
  ```bash
161
161
  modelaudit/
162
+ ├── packages/modelaudit-picklescan/ # Standalone pickle scanner package
162
163
  ├── modelaudit/ # Main package
163
164
  │ ├── analysis/ # Semantic and integrated analysis
164
165
  │ ├── auth/ # API authentication and config
@@ -5,6 +5,28 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.2.34](https://github.com/promptfoo/modelaudit/compare/v0.2.33...v0.2.34) (2026-04-10)
9
+
10
+ ### Bug Fixes
11
+
12
+ - harden native code detection in model scanners ([#897](https://github.com/promptfoo/modelaudit/issues/897)) ([f4f661a](https://github.com/promptfoo/modelaudit/commit/f4f661a09be0032e15aa8895864413e3878233f8))
13
+
14
+ ## [0.2.33](https://github.com/promptfoo/modelaudit/compare/v0.2.32...v0.2.33) (2026-04-09)
15
+
16
+ ### Features
17
+
18
+ - extract standalone pickle scanner package with parity harness ([#832](https://github.com/promptfoo/modelaudit/issues/832)) ([e2986cd](https://github.com/promptfoo/modelaudit/commit/e2986cddaa592306cc10541865f011b3dc99a0ba))
19
+
20
+ ### Bug Fixes
21
+
22
+ - harden helper routing for zip-backed pickle checkpoints ([#870](https://github.com/promptfoo/modelaudit/issues/870)) ([3ebe0c0](https://github.com/promptfoo/modelaudit/commit/3ebe0c04f02f51274b9c9588200212ad2cffe70b))
23
+ - make return paths explicit ([#884](https://github.com/promptfoo/modelaudit/issues/884)) ([e31c254](https://github.com/promptfoo/modelaudit/commit/e31c254b820c78278289cf06acdf17f3f81d49b2))
24
+ - skip extraction for suspicious ZIP entries ([358aa44](https://github.com/promptfoo/modelaudit/commit/358aa4498ce9d6a091340c6f23289523f98f3a55))
25
+
26
+ ### Documentation
27
+
28
+ - clarify detection bypass severity policy ([d8117a1](https://github.com/promptfoo/modelaudit/commit/d8117a14b4f8ef3e1a93cb1d48eeba8d8af92677))
29
+
8
30
  ## [0.2.32](https://github.com/promptfoo/modelaudit/compare/v0.2.31...v0.2.32) (2026-04-05)
9
31
 
10
32
  ### Bug Fixes
@@ -20,8 +42,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
20
42
  ### Bug Fixes
21
43
 
22
44
  - avoid CoreML nested parse failures on bounded-read truncation
45
+ - flag TensorFlow `LoadLibrary` and `LoadLibraryV2` graph ops as dangerous native-library loading
46
+ - detect split CNTK native-user-function and native-library references
47
+ - detect Linux/macOS native-library members in Keras archives and uppercase native-library members in PyTorch ZIPs
48
+ - detect embedded Windows DLL/PE, Linux ELF shared-object, and TensorRT plugin entry-point markers in TensorRT engines
23
49
  - detect punctuation-delimited TensorRT `/tmp` plugin paths
50
+ - preserve HuggingFace cache provenance for symlinked custom cache roots
51
+ - ignore remote OCI `layers[].urls` entries during local layer discovery
52
+ - fail closed on unterminated OpenVINO DOCTYPE declarations
24
53
  - avoid PMML `<Extension>` false positives for benign `subprocess` prose while preserving `subprocess.getoutput()`, `subprocess.getstatusoutput()`, and `importlib.import_module("subprocess")` detections
54
+ - route helper-level ZIP-backed `.ckpt`/`.pkl` checkpoints through archive scanners
25
55
 
26
56
  ## [0.2.31](https://github.com/promptfoo/modelaudit/compare/v0.2.30...v0.2.31) (2026-04-04)
27
57
 
@@ -153,6 +183,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
153
183
 
154
184
  ### Added
155
185
 
186
+ - **pickle:** bundle the standalone `modelaudit_picklescan` API in the root `modelaudit` wheel and add source-tree coverage for the package boundary
156
187
  - **tests:** enable existing PaddlePaddle scanner tests in CI by adding `test_paddle_scanner.py` to the allowed test files list (Python 3.10/3.12/3.13)
157
188
  - **security:** detect CVE-2026-1669 Keras HDF5 external weight references in standalone `.h5` and embedded `.keras` weights
158
189
  - **security:** detect CVE-2026-24747 PyTorch weights_only=True bypass via SETITEM/SETITEMS abuse and tensor metadata mismatch detection
@@ -179,6 +210,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
179
210
  - **security:** reduce NeMo Hydra `_target_` false positives by matching suspicious identifiers on token boundaries, preserve CVE-2025-23304 details on suspicious-target findings, and reject oversized YAML members before parsing
180
211
  - **security:** detect protocol 0/1 pickle streams with trivial opcode prefixes even when `STOP` is followed by trailing junk, while preserving plain-text near-match rejection
181
212
  - **security:** detect protocol 0/1 pickle streams whose dangerous opcode appears after large trivial padding or after a non-trivial probe-boundary prelude, reject all-trivial no-`STOP` probe prefixes, and preserve rule codes across cached scan-result round trips
213
+ - **pickle:** propagate standalone fallback parse and stream-read failures into merged scan success, preserve truncated `.bin` fail-closed behavior, reuse non-seekable stream spools for the legacy parity pass, clamp negative stream sizes, and reset post-budget scan state between reused scanner runs
182
214
  - **license:** bound binary header scans and reuse compiled patterns to avoid full-file regex passes on large model archives
183
215
  - **security:** stop iterating malformed TFLite models after excessive subgraph counts are detected
184
216
  - **openvino:** route forbidden-DOCTYPE IR XML into the OpenVINO scanner, fail closed on XML parse errors, and suppress warning-level format-validation noise for benign `.xml` models with no distinctive magic bytes
@@ -1,4 +1,4 @@
1
- FROM python:3.13-slim@sha256:739e7213785e88c0f702dcdc12c0973afcbd606dbf021a589cab77d6b00b579d
1
+ FROM python:3.13-slim@sha256:eefe082c4b73082d83b8e7705ed999bc8a1dae57fe1ea723f907a0fc4b90f088
2
2
 
3
3
  WORKDIR /app
4
4