ultralytics 8.3.220__tar.gz → 8.3.222__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 (288) hide show
  1. {ultralytics-8.3.220 → ultralytics-8.3.222}/PKG-INFO +1 -1
  2. {ultralytics-8.3.220 → ultralytics-8.3.222}/pyproject.toml +2 -2
  3. {ultralytics-8.3.220 → ultralytics-8.3.222}/tests/__init__.py +5 -7
  4. {ultralytics-8.3.220 → ultralytics-8.3.222}/tests/conftest.py +3 -7
  5. {ultralytics-8.3.220 → ultralytics-8.3.222}/tests/test_cli.py +1 -1
  6. {ultralytics-8.3.220 → ultralytics-8.3.222}/tests/test_engine.py +1 -1
  7. {ultralytics-8.3.220 → ultralytics-8.3.222}/tests/test_integrations.py +4 -4
  8. {ultralytics-8.3.220 → ultralytics-8.3.222}/tests/test_python.py +40 -47
  9. {ultralytics-8.3.220 → ultralytics-8.3.222}/tests/test_solutions.py +154 -145
  10. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/__init__.py +1 -1
  11. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/__init__.py +7 -5
  12. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/data/augment.py +10 -10
  13. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/data/base.py +2 -2
  14. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/data/build.py +1 -1
  15. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/data/converter.py +3 -3
  16. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/data/dataset.py +3 -3
  17. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/data/loaders.py +2 -2
  18. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/data/utils.py +3 -3
  19. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/engine/exporter.py +22 -25
  20. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/engine/model.py +2 -2
  21. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/engine/trainer.py +6 -4
  22. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/engine/tuner.py +4 -4
  23. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/hub/__init__.py +9 -7
  24. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/hub/utils.py +2 -2
  25. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/__init__.py +1 -1
  26. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/fastsam/__init__.py +1 -1
  27. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/nas/__init__.py +1 -1
  28. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/rtdetr/__init__.py +1 -1
  29. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/sam/amg.py +2 -2
  30. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/sam/modules/blocks.py +1 -1
  31. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/sam/modules/transformer.py +1 -1
  32. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/sam/predict.py +1 -1
  33. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/yolo/__init__.py +1 -1
  34. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/yolo/classify/train.py +2 -2
  35. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/yolo/pose/__init__.py +1 -1
  36. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/yolo/segment/val.py +1 -1
  37. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/nn/autobackend.py +5 -5
  38. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/nn/modules/head.py +1 -1
  39. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/nn/modules/transformer.py +7 -7
  40. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/nn/modules/utils.py +1 -1
  41. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/nn/tasks.py +3 -3
  42. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/solutions/object_counter.py +3 -6
  43. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/solutions/queue_management.py +1 -1
  44. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/solutions/similarity_search.py +1 -1
  45. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/trackers/__init__.py +1 -1
  46. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/trackers/byte_tracker.py +2 -2
  47. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/trackers/utils/matching.py +1 -1
  48. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/utils/__init__.py +6 -6
  49. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/utils/benchmarks.py +7 -5
  50. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/utils/callbacks/comet.py +2 -2
  51. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/utils/checks.py +2 -2
  52. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/utils/downloads.py +2 -2
  53. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/utils/export/__init__.py +1 -1
  54. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/utils/export/imx.py +39 -28
  55. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/utils/files.py +1 -1
  56. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/utils/git.py +1 -1
  57. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/utils/logger.py +1 -1
  58. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/utils/metrics.py +15 -11
  59. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/utils/ops.py +8 -8
  60. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/utils/plotting.py +3 -2
  61. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/utils/torch_utils.py +4 -4
  62. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/utils/triton.py +2 -2
  63. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/utils/tuner.py +4 -2
  64. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics.egg-info/PKG-INFO +1 -1
  65. {ultralytics-8.3.220 → ultralytics-8.3.222}/LICENSE +0 -0
  66. {ultralytics-8.3.220 → ultralytics-8.3.222}/README.md +0 -0
  67. {ultralytics-8.3.220 → ultralytics-8.3.222}/setup.cfg +0 -0
  68. {ultralytics-8.3.220 → ultralytics-8.3.222}/tests/test_cuda.py +0 -0
  69. {ultralytics-8.3.220 → ultralytics-8.3.222}/tests/test_exports.py +0 -0
  70. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/assets/bus.jpg +0 -0
  71. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/assets/zidane.jpg +0 -0
  72. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
  73. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
  74. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
  75. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
  76. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/datasets/HomeObjects-3K.yaml +0 -0
  77. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
  78. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
  79. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
  80. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/datasets/VOC.yaml +0 -0
  81. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
  82. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
  83. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
  84. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
  85. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
  86. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/datasets/coco.yaml +0 -0
  87. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
  88. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/datasets/coco128.yaml +0 -0
  89. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/datasets/coco8-grayscale.yaml +0 -0
  90. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/datasets/coco8-multispectral.yaml +0 -0
  91. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
  92. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
  93. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/datasets/coco8.yaml +0 -0
  94. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/datasets/construction-ppe.yaml +0 -0
  95. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
  96. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/datasets/dog-pose.yaml +0 -0
  97. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/datasets/dota8-multispectral.yaml +0 -0
  98. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/datasets/dota8.yaml +0 -0
  99. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/datasets/hand-keypoints.yaml +0 -0
  100. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/datasets/lvis.yaml +0 -0
  101. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/datasets/medical-pills.yaml +0 -0
  102. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
  103. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
  104. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/datasets/signature.yaml +0 -0
  105. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
  106. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/datasets/xView.yaml +0 -0
  107. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/default.yaml +0 -0
  108. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/models/11/yolo11-cls-resnet18.yaml +0 -0
  109. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/models/11/yolo11-cls.yaml +0 -0
  110. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/models/11/yolo11-obb.yaml +0 -0
  111. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/models/11/yolo11-pose.yaml +0 -0
  112. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/models/11/yolo11-seg.yaml +0 -0
  113. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/models/11/yolo11.yaml +0 -0
  114. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/models/11/yoloe-11-seg.yaml +0 -0
  115. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/models/11/yoloe-11.yaml +0 -0
  116. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/models/12/yolo12-cls.yaml +0 -0
  117. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/models/12/yolo12-obb.yaml +0 -0
  118. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/models/12/yolo12-pose.yaml +0 -0
  119. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/models/12/yolo12-seg.yaml +0 -0
  120. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/models/12/yolo12.yaml +0 -0
  121. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
  122. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
  123. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
  124. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
  125. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/models/v10/yolov10b.yaml +0 -0
  126. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/models/v10/yolov10l.yaml +0 -0
  127. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/models/v10/yolov10m.yaml +0 -0
  128. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/models/v10/yolov10n.yaml +0 -0
  129. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/models/v10/yolov10s.yaml +0 -0
  130. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/models/v10/yolov10x.yaml +0 -0
  131. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
  132. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
  133. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
  134. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
  135. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
  136. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
  137. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/models/v8/yoloe-v8-seg.yaml +0 -0
  138. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/models/v8/yoloe-v8.yaml +0 -0
  139. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
  140. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
  141. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
  142. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
  143. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
  144. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
  145. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
  146. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
  147. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
  148. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
  149. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
  150. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
  151. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
  152. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
  153. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
  154. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
  155. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
  156. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
  157. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
  158. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
  159. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
  160. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/models/v9/yolov9m.yaml +0 -0
  161. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/models/v9/yolov9s.yaml +0 -0
  162. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/models/v9/yolov9t.yaml +0 -0
  163. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/trackers/botsort.yaml +0 -0
  164. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
  165. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/data/__init__.py +4 -4
  166. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/data/annotator.py +0 -0
  167. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/data/scripts/download_weights.sh +0 -0
  168. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/data/scripts/get_coco.sh +0 -0
  169. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/data/scripts/get_coco128.sh +0 -0
  170. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/data/scripts/get_imagenet.sh +0 -0
  171. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/data/split.py +0 -0
  172. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/data/split_dota.py +0 -0
  173. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/engine/__init__.py +0 -0
  174. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/engine/predictor.py +0 -0
  175. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/engine/results.py +0 -0
  176. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/engine/validator.py +0 -0
  177. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/hub/auth.py +0 -0
  178. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/hub/google/__init__.py +0 -0
  179. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/hub/session.py +0 -0
  180. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/fastsam/model.py +0 -0
  181. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/fastsam/predict.py +0 -0
  182. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/fastsam/utils.py +0 -0
  183. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/fastsam/val.py +0 -0
  184. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/nas/model.py +0 -0
  185. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/nas/predict.py +0 -0
  186. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/nas/val.py +0 -0
  187. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/rtdetr/model.py +0 -0
  188. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/rtdetr/predict.py +0 -0
  189. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/rtdetr/train.py +0 -0
  190. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/rtdetr/val.py +0 -0
  191. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/sam/__init__.py +1 -1
  192. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/sam/build.py +0 -0
  193. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/sam/model.py +0 -0
  194. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/sam/modules/__init__.py +0 -0
  195. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/sam/modules/decoders.py +0 -0
  196. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/sam/modules/encoders.py +0 -0
  197. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/sam/modules/memory_attention.py +0 -0
  198. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/sam/modules/sam.py +0 -0
  199. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
  200. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/sam/modules/utils.py +0 -0
  201. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/utils/__init__.py +0 -0
  202. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/utils/loss.py +0 -0
  203. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/utils/ops.py +0 -0
  204. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/yolo/classify/__init__.py +0 -0
  205. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/yolo/classify/predict.py +0 -0
  206. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/yolo/classify/val.py +0 -0
  207. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/yolo/detect/__init__.py +0 -0
  208. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/yolo/detect/predict.py +0 -0
  209. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/yolo/detect/train.py +0 -0
  210. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/yolo/detect/val.py +0 -0
  211. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/yolo/model.py +0 -0
  212. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/yolo/obb/__init__.py +0 -0
  213. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/yolo/obb/predict.py +0 -0
  214. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/yolo/obb/train.py +0 -0
  215. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/yolo/obb/val.py +0 -0
  216. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/yolo/pose/predict.py +0 -0
  217. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/yolo/pose/train.py +0 -0
  218. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/yolo/pose/val.py +0 -0
  219. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/yolo/segment/__init__.py +0 -0
  220. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/yolo/segment/predict.py +0 -0
  221. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/yolo/segment/train.py +0 -0
  222. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/yolo/world/__init__.py +0 -0
  223. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/yolo/world/train.py +0 -0
  224. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/yolo/world/train_world.py +0 -0
  225. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/yolo/yoloe/__init__.py +7 -7
  226. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/yolo/yoloe/predict.py +0 -0
  227. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/yolo/yoloe/train.py +0 -0
  228. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/yolo/yoloe/train_seg.py +0 -0
  229. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/models/yolo/yoloe/val.py +0 -0
  230. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/nn/__init__.py +7 -7
  231. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/nn/modules/__init__.py +60 -60
  232. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/nn/modules/activation.py +0 -0
  233. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/nn/modules/block.py +26 -26
  234. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/nn/modules/conv.py +7 -7
  235. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/nn/text_model.py +0 -0
  236. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/py.typed +0 -0
  237. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/solutions/__init__.py +12 -12
  238. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/solutions/ai_gym.py +0 -0
  239. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/solutions/analytics.py +0 -0
  240. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/solutions/config.py +0 -0
  241. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/solutions/distance_calculation.py +0 -0
  242. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/solutions/heatmap.py +0 -0
  243. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/solutions/instance_segmentation.py +0 -0
  244. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/solutions/object_blurrer.py +0 -0
  245. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/solutions/object_cropper.py +0 -0
  246. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/solutions/parking_management.py +0 -0
  247. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/solutions/region_counter.py +0 -0
  248. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/solutions/security_alarm.py +0 -0
  249. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/solutions/solutions.py +0 -0
  250. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/solutions/speed_estimation.py +0 -0
  251. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/solutions/streamlit_inference.py +0 -0
  252. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/solutions/templates/similarity-search.html +0 -0
  253. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/solutions/trackzone.py +0 -0
  254. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/solutions/vision_eye.py +0 -0
  255. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/trackers/basetrack.py +0 -0
  256. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/trackers/bot_sort.py +0 -0
  257. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/trackers/track.py +0 -0
  258. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/trackers/utils/__init__.py +0 -0
  259. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/trackers/utils/gmc.py +0 -0
  260. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/trackers/utils/kalman_filter.py +0 -0
  261. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/utils/autobatch.py +0 -0
  262. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/utils/autodevice.py +0 -0
  263. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/utils/callbacks/__init__.py +0 -0
  264. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/utils/callbacks/base.py +0 -0
  265. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/utils/callbacks/clearml.py +0 -0
  266. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/utils/callbacks/dvc.py +0 -0
  267. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/utils/callbacks/hub.py +0 -0
  268. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/utils/callbacks/mlflow.py +0 -0
  269. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/utils/callbacks/neptune.py +0 -0
  270. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/utils/callbacks/platform.py +0 -0
  271. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/utils/callbacks/raytune.py +0 -0
  272. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/utils/callbacks/tensorboard.py +0 -0
  273. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/utils/callbacks/wb.py +0 -0
  274. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/utils/cpu.py +0 -0
  275. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/utils/dist.py +0 -0
  276. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/utils/errors.py +0 -0
  277. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/utils/events.py +0 -0
  278. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/utils/instance.py +0 -0
  279. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/utils/loss.py +0 -0
  280. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/utils/nms.py +0 -0
  281. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/utils/patches.py +0 -0
  282. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/utils/tal.py +0 -0
  283. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics/utils/tqdm.py +0 -0
  284. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics.egg-info/SOURCES.txt +0 -0
  285. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics.egg-info/dependency_links.txt +0 -0
  286. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics.egg-info/entry_points.txt +0 -0
  287. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics.egg-info/requires.txt +0 -0
  288. {ultralytics-8.3.220 → ultralytics-8.3.222}/ultralytics.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ultralytics
3
- Version: 8.3.220
3
+ Version: 8.3.222
4
4
  Summary: Ultralytics YOLO 🚀 for SOTA object detection, multi-object tracking, instance segmentation, pose estimation and image classification.
5
5
  Author-email: Glenn Jocher <glenn.jocher@ultralytics.com>, Jing Qiu <jing.qiu@ultralytics.com>
6
6
  Maintainer-email: Ultralytics <hello@ultralytics.com>
@@ -189,5 +189,5 @@ close-quotes-on-newline = true
189
189
  in-place = true
190
190
 
191
191
  [tool.codespell]
192
- ignore-words-list = "crate,nd,ned,strack,dota,ane,segway,fo,gool,winn,commend,bloc,nam,afterall"
193
- skip = '*.pt,*.pth,*.torchscript,*.onnx,*.tflite,*.pb,*.bin,*.param,*.mlmodel,*.engine,*.npy,*.data*,*.csv,*pnnx*,*venv*,*translat*,__pycache__*,*.ico,*.jpg,*.png,*.mp4,*.mov,/runs,/.git,./docs/??/*.md,./docs/mkdocs_??.yml'
192
+ ignore-words-list = "grey,writeable,finalY,RepResNet,Idenfy,WIT,Smoot,EHR,ROUGE,ALS,iTerm,Carmel,FPR,Hach,Calle,ore,COO,MOT,crate,nd,ned,strack,dota,ane,segway,fo,gool,winn,commend,bloc,nam,afterall,skelton,goin"
193
+ skip = "lvis.yaml,open-images-v7.yaml,ImageNet.yaml,*.pt,*.pth,*.torchscript,*.onnx,*.tflite,*.pb,*.bin,*.param,*.mlmodel,*.engine,*.npy,*.data*,*.csv,*pnnx*,*venv*,*translat*,*lock*,__pycache__*,*.ico,*.jpg,*.png,*.webp,*.avif,*.mp4,*.mov,/runs,/.git,./docs/??/*.md,./docs/mkdocs_??.yml"
@@ -1,25 +1,23 @@
1
1
  # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
2
 
3
3
  from ultralytics.cfg import TASK2DATA, TASK2MODEL, TASKS
4
- from ultralytics.utils import ASSETS, ROOT, WEIGHTS_DIR, checks
4
+ from ultralytics.utils import ASSETS, WEIGHTS_DIR, checks
5
5
 
6
6
  # Constants used in tests
7
7
  MODEL = WEIGHTS_DIR / "path with spaces" / "yolo11n.pt" # test spaces in path
8
8
  CFG = "yolo11n.yaml"
9
9
  SOURCE = ASSETS / "bus.jpg"
10
10
  SOURCES_LIST = [ASSETS / "bus.jpg", ASSETS, ASSETS / "*", ASSETS / "**/*.jpg"]
11
- TMP = (ROOT / "../tests/tmp").resolve() # temp directory for test files
12
11
  CUDA_IS_AVAILABLE = checks.cuda_is_available()
13
12
  CUDA_DEVICE_COUNT = checks.cuda_device_count()
14
13
  TASK_MODEL_DATA = [(task, WEIGHTS_DIR / TASK2MODEL[task], TASK2DATA[task]) for task in TASKS]
15
- MODELS = frozenset(list(TASK2MODEL.values()) + ["yolo11n-grayscale.pt"])
14
+ MODELS = frozenset([*list(TASK2MODEL.values()), "yolo11n-grayscale.pt"])
16
15
 
17
16
  __all__ = (
18
- "MODEL",
19
17
  "CFG",
18
+ "CUDA_DEVICE_COUNT",
19
+ "CUDA_IS_AVAILABLE",
20
+ "MODEL",
20
21
  "SOURCE",
21
22
  "SOURCES_LIST",
22
- "TMP",
23
- "CUDA_IS_AVAILABLE",
24
- "CUDA_DEVICE_COUNT",
25
23
  )
@@ -3,8 +3,6 @@
3
3
  import shutil
4
4
  from pathlib import Path
5
5
 
6
- from tests import TMP
7
-
8
6
 
9
7
  def pytest_addoption(parser):
10
8
  """Add custom command-line options to pytest."""
@@ -29,7 +27,7 @@ def pytest_sessionstart(session):
29
27
  Initialize session configurations for pytest.
30
28
 
31
29
  This function is automatically called by pytest after the 'Session' object has been created but before performing
32
- test collection. It sets the initial seeds and prepares the temporary directory for the test session.
30
+ test collection. It sets the initial seeds for the test session.
33
31
 
34
32
  Args:
35
33
  session: The pytest session object.
@@ -37,8 +35,6 @@ def pytest_sessionstart(session):
37
35
  from ultralytics.utils.torch_utils import init_seeds
38
36
 
39
37
  init_seeds()
40
- shutil.rmtree(TMP, ignore_errors=True) # Delete any existing tests/tmp directory
41
- TMP.mkdir(parents=True, exist_ok=True) # Create a new empty directory
42
38
 
43
39
 
44
40
  def pytest_terminal_summary(terminalreporter, exitstatus, config):
@@ -57,10 +53,10 @@ def pytest_terminal_summary(terminalreporter, exitstatus, config):
57
53
 
58
54
  # Remove files
59
55
  models = [path for x in {"*.onnx", "*.torchscript"} for path in WEIGHTS_DIR.rglob(x)]
60
- for file in ["decelera_portrait_min.mov", "bus.jpg", "yolo11n.onnx", "yolo11n.torchscript"] + models:
56
+ for file in ["decelera_portrait_min.mov", "bus.jpg", "yolo11n.onnx", "yolo11n.torchscript", *models]:
61
57
  Path(file).unlink(missing_ok=True)
62
58
 
63
59
  # Remove directories
64
60
  models = [path for x in {"*.mlpackage", "*_openvino_model"} for path in WEIGHTS_DIR.rglob(x)]
65
- for directory in [WEIGHTS_DIR / "path with spaces", TMP.parents[1] / ".pytest_cache", TMP] + models:
61
+ for directory in [WEIGHTS_DIR / "path with spaces", *models]:
66
62
  shutil.rmtree(directory, ignore_errors=True)
@@ -82,7 +82,7 @@ def test_fastsam(
82
82
  everything_results = sam_model(s, device="cpu", retina_masks=True, imgsz=320, conf=0.4, iou=0.9)
83
83
 
84
84
  # Remove small regions
85
- new_masks, _ = Predictor.remove_small_regions(everything_results[0].masks.data, min_area=20)
85
+ _new_masks, _ = Predictor.remove_small_regions(everything_results[0].masks.data, min_area=20)
86
86
 
87
87
  # Run inference with bboxes and points and texts prompt at the same time
88
88
  sam_model(source, bboxes=[439, 437, 524, 709], points=[[200, 200]], labels=[1], texts="a photo of a dog")
@@ -13,7 +13,7 @@ from ultralytics.models.yolo import classify, detect, segment
13
13
  from ultralytics.utils import ASSETS, DEFAULT_CFG, WEIGHTS_DIR
14
14
 
15
15
 
16
- def test_func(*args): # noqa
16
+ def test_func(*args):
17
17
  """Test function callback for evaluating YOLO model performance metrics."""
18
18
  print("callback test passed")
19
19
 
@@ -8,7 +8,7 @@ from pathlib import Path
8
8
 
9
9
  import pytest
10
10
 
11
- from tests import MODEL, SOURCE, TMP
11
+ from tests import MODEL, SOURCE
12
12
  from ultralytics import YOLO, download
13
13
  from ultralytics.utils import ASSETS_URL, DATASETS_DIR, SETTINGS
14
14
  from ultralytics.utils.checks import check_requirements
@@ -71,14 +71,14 @@ def test_mlflow_keep_run_active():
71
71
 
72
72
 
73
73
  @pytest.mark.skipif(not check_requirements("tritonclient", install=False), reason="tritonclient[all] not installed")
74
- def test_triton():
74
+ def test_triton(tmp_path):
75
75
  """Test NVIDIA Triton Server functionalities with YOLO model."""
76
76
  check_requirements("tritonclient[all]")
77
- from tritonclient.http import InferenceServerClient # noqa
77
+ from tritonclient.http import InferenceServerClient
78
78
 
79
79
  # Create variables
80
80
  model_name = "yolo"
81
- triton_repo = TMP / "triton_repo" # Triton repo path
81
+ triton_repo = tmp_path / "triton_repo" # Triton repo path
82
82
  triton_model = triton_repo / model_name # Triton model path
83
83
 
84
84
  # Export model to ONNX
@@ -12,7 +12,7 @@ import pytest
12
12
  import torch
13
13
  from PIL import Image
14
14
 
15
- from tests import CFG, MODEL, MODELS, SOURCE, SOURCES_LIST, TASK_MODEL_DATA, TMP
15
+ from tests import CFG, MODEL, MODELS, SOURCE, SOURCES_LIST, TASK_MODEL_DATA
16
16
  from ultralytics import RTDETR, YOLO
17
17
  from ultralytics.cfg import TASK2DATA, TASKS
18
18
  from ultralytics.data.build import load_inference_source
@@ -33,14 +33,11 @@ from ultralytics.utils import (
33
33
  WINDOWS,
34
34
  YAML,
35
35
  checks,
36
- is_dir_writeable,
37
36
  is_github_action_running,
38
37
  )
39
38
  from ultralytics.utils.downloads import download
40
39
  from ultralytics.utils.torch_utils import TORCH_1_11, TORCH_1_13
41
40
 
42
- IS_TMP_WRITEABLE = is_dir_writeable(TMP) # WARNING: must be run once tests start as TMP does not exist on tests/init
43
-
44
41
 
45
42
  def test_model_forward():
46
43
  """Test the forward pass of the YOLO model."""
@@ -77,10 +74,9 @@ def test_model_profile():
77
74
  _ = model.predict(im, profile=True)
78
75
 
79
76
 
80
- @pytest.mark.skipif(not IS_TMP_WRITEABLE, reason="directory is not writeable")
81
- def test_predict_txt():
77
+ def test_predict_txt(tmp_path):
82
78
  """Test YOLO predictions with file, directory, and pattern sources listed in a text file."""
83
- file = TMP / "sources_multi_row.txt"
79
+ file = tmp_path / "sources_multi_row.txt"
84
80
  with open(file, "w") as f:
85
81
  for src in SOURCES_LIST:
86
82
  f.write(f"{src}\n")
@@ -89,10 +85,9 @@ def test_predict_txt():
89
85
 
90
86
 
91
87
  @pytest.mark.skipif(True, reason="disabled for testing")
92
- @pytest.mark.skipif(not IS_TMP_WRITEABLE, reason="directory is not writeable")
93
- def test_predict_csv_multi_row():
88
+ def test_predict_csv_multi_row(tmp_path):
94
89
  """Test YOLO predictions with sources listed in multiple rows of a CSV file."""
95
- file = TMP / "sources_multi_row.csv"
90
+ file = tmp_path / "sources_multi_row.csv"
96
91
  with open(file, "w", newline="") as f:
97
92
  writer = csv.writer(f)
98
93
  writer.writerow(["source"])
@@ -102,10 +97,9 @@ def test_predict_csv_multi_row():
102
97
 
103
98
 
104
99
  @pytest.mark.skipif(True, reason="disabled for testing")
105
- @pytest.mark.skipif(not IS_TMP_WRITEABLE, reason="directory is not writeable")
106
- def test_predict_csv_single_row():
100
+ def test_predict_csv_single_row(tmp_path):
107
101
  """Test YOLO predictions with sources listed in a single row of a CSV file."""
108
- file = TMP / "sources_single_row.csv"
102
+ file = tmp_path / "sources_single_row.csv"
109
103
  with open(file, "w", newline="") as f:
110
104
  writer = csv.writer(f)
111
105
  writer.writerow(SOURCES_LIST)
@@ -142,25 +136,23 @@ def test_predict_visualize(model):
142
136
  YOLO(WEIGHTS_DIR / model)(SOURCE, imgsz=32, visualize=True)
143
137
 
144
138
 
145
- def test_predict_grey_and_4ch():
146
- """Test YOLO prediction on SOURCE converted to greyscale and 4-channel images with various filenames."""
139
+ def test_predict_gray_and_4ch(tmp_path):
140
+ """Test YOLO prediction on SOURCE converted to grayscale and 4-channel images with various filenames."""
147
141
  im = Image.open(SOURCE)
148
- directory = TMP / "im4"
149
- directory.mkdir(parents=True, exist_ok=True)
150
142
 
151
- source_greyscale = directory / "greyscale.jpg"
152
- source_rgba = directory / "4ch.png"
153
- source_non_utf = directory / "non_UTF_测试文件_tést_image.jpg"
154
- source_spaces = directory / "image with spaces.jpg"
143
+ source_grayscale = tmp_path / "grayscale.jpg"
144
+ source_rgba = tmp_path / "4ch.png"
145
+ source_non_utf = tmp_path / "non_UTF_测试文件_tést_image.jpg"
146
+ source_spaces = tmp_path / "image with spaces.jpg"
155
147
 
156
- im.convert("L").save(source_greyscale) # greyscale
148
+ im.convert("L").save(source_grayscale) # grayscale
157
149
  im.convert("RGBA").save(source_rgba) # 4-ch PNG with alpha
158
150
  im.save(source_non_utf) # non-UTF characters in filename
159
151
  im.save(source_spaces) # spaces in filename
160
152
 
161
153
  # Inference
162
154
  model = YOLO(MODEL)
163
- for f in source_rgba, source_greyscale, source_non_utf, source_spaces:
155
+ for f in source_rgba, source_grayscale, source_non_utf, source_spaces:
164
156
  for source in Image.open(f), cv2.imread(str(f)), f:
165
157
  results = model(source, save=True, verbose=True, imgsz=32)
166
158
  assert len(results) == 1 # verify that an image was run
@@ -181,9 +173,8 @@ def test_youtube():
181
173
 
182
174
 
183
175
  @pytest.mark.skipif(not ONLINE, reason="environment is offline")
184
- @pytest.mark.skipif(not IS_TMP_WRITEABLE, reason="directory is not writeable")
185
176
  @pytest.mark.parametrize("model", MODELS)
186
- def test_track_stream(model):
177
+ def test_track_stream(model, tmp_path):
187
178
  """
188
179
  Test streaming tracking on a short 10 frame video using ByteTrack tracker and different GMC methods.
189
180
 
@@ -199,7 +190,7 @@ def test_track_stream(model):
199
190
  # Test Global Motion Compensation (GMC) methods and ReID
200
191
  for gmc, reidm in zip(["orb", "sift", "ecc"], ["auto", "auto", "yolo11n-cls.pt"]):
201
192
  default_args = YAML.load(ROOT / "cfg/trackers/botsort.yaml")
202
- custom_yaml = TMP / f"botsort-{gmc}.yaml"
193
+ custom_yaml = tmp_path / f"botsort-{gmc}.yaml"
203
194
  YAML.save(custom_yaml, {**default_args, "gmc_method": gmc, "with_reid": True, "model": reidm})
204
195
  model.track(video_url, imgsz=160, tracker=custom_yaml)
205
196
 
@@ -278,7 +269,7 @@ def test_predict_callback_and_setup():
278
269
  model.add_callback("on_predict_batch_end", on_predict_batch_end)
279
270
 
280
271
  dataset = load_inference_source(source=SOURCE)
281
- bs = dataset.bs # noqa access predictor properties
272
+ bs = dataset.bs # access predictor properties
282
273
  results = model.predict(dataset, stream=True, imgsz=160) # source already setup
283
274
  for r, im0, bs in results:
284
275
  print("test_callback", im0.shape)
@@ -288,7 +279,7 @@ def test_predict_callback_and_setup():
288
279
 
289
280
 
290
281
  @pytest.mark.parametrize("model", MODELS)
291
- def test_results(model: str):
282
+ def test_results(model: str, tmp_path):
292
283
  """Test YOLO model results processing and output in various formats."""
293
284
  im = f"{ASSETS_URL}/boats.jpg" if model == "yolo11n-obb.pt" else SOURCE
294
285
  results = YOLO(WEIGHTS_DIR / model)([im, im], imgsz=160)
@@ -297,12 +288,12 @@ def test_results(model: str):
297
288
  r = r.cpu().numpy()
298
289
  print(r, len(r), r.path) # print numpy attributes
299
290
  r = r.to(device="cpu", dtype=torch.float32)
300
- r.save_txt(txt_file=TMP / "runs/tests/label.txt", save_conf=True)
301
- r.save_crop(save_dir=TMP / "runs/tests/crops/")
291
+ r.save_txt(txt_file=tmp_path / "runs/tests/label.txt", save_conf=True)
292
+ r.save_crop(save_dir=tmp_path / "runs/tests/crops/")
302
293
  r.to_df(decimals=3) # Align to_ methods: https://docs.ultralytics.com/modes/predict/#working-with-results
303
294
  r.to_csv()
304
295
  r.to_json(normalize=True)
305
- r.plot(pil=True, save=True, filename=TMP / "results_plot_save.jpg")
296
+ r.plot(pil=True, save=True, filename=tmp_path / "results_plot_save.jpg")
306
297
  r.plot(conf=True, boxes=True)
307
298
  print(r, len(r), r.path) # print after methods
308
299
 
@@ -332,7 +323,7 @@ def test_labels_and_crops():
332
323
 
333
324
 
334
325
  @pytest.mark.skipif(not ONLINE, reason="environment is offline")
335
- def test_data_utils():
326
+ def test_data_utils(tmp_path):
336
327
  """Test utility functions in ultralytics/data/utils.py, including dataset stats and auto-splitting."""
337
328
  from ultralytics.data.split import autosplit
338
329
  from ultralytics.data.utils import HUBDatasetStats
@@ -343,26 +334,28 @@ def test_data_utils():
343
334
 
344
335
  for task in TASKS:
345
336
  file = Path(TASK2DATA[task]).with_suffix(".zip") # i.e. coco8.zip
346
- download(f"https://github.com/ultralytics/hub/raw/main/example_datasets/{file}", unzip=False, dir=TMP)
347
- stats = HUBDatasetStats(TMP / file, task=task)
337
+ download(f"https://github.com/ultralytics/hub/raw/main/example_datasets/{file}", unzip=False, dir=tmp_path)
338
+ stats = HUBDatasetStats(tmp_path / file, task=task)
348
339
  stats.get_json(save=True)
349
340
  stats.process_images()
350
341
 
351
- autosplit(TMP / "coco8")
352
- zip_directory(TMP / "coco8/images/val") # zip
342
+ autosplit(tmp_path / "coco8")
343
+ zip_directory(tmp_path / "coco8/images/val") # zip
353
344
 
354
345
 
355
346
  @pytest.mark.skipif(not ONLINE, reason="environment is offline")
356
- def test_data_converter():
347
+ def test_data_converter(tmp_path):
357
348
  """Test dataset conversion functions from COCO to YOLO format and class mappings."""
358
349
  from ultralytics.data.converter import coco80_to_coco91_class, convert_coco
359
350
 
360
- download(f"{ASSETS_URL}/instances_val2017.json", dir=TMP)
361
- convert_coco(labels_dir=TMP, save_dir=TMP / "yolo_labels", use_segments=True, use_keypoints=False, cls91to80=True)
351
+ download(f"{ASSETS_URL}/instances_val2017.json", dir=tmp_path)
352
+ convert_coco(
353
+ labels_dir=tmp_path, save_dir=tmp_path / "yolo_labels", use_segments=True, use_keypoints=False, cls91to80=True
354
+ )
362
355
  coco80_to_coco91_class()
363
356
 
364
357
 
365
- def test_data_annotator():
358
+ def test_data_annotator(tmp_path):
366
359
  """Test automatic annotation of data using detection and segmentation models."""
367
360
  from ultralytics.data.annotator import auto_annotate
368
361
 
@@ -370,7 +363,7 @@ def test_data_annotator():
370
363
  ASSETS,
371
364
  det_model=WEIGHTS_DIR / "yolo11n.pt",
372
365
  sam_model=WEIGHTS_DIR / "mobile_sam.pt",
373
- output_dir=TMP / "auto_annotate_labels",
366
+ output_dir=tmp_path / "auto_annotate_labels",
374
367
  )
375
368
 
376
369
 
@@ -464,7 +457,7 @@ def test_utils_ops():
464
457
  torch.allclose(boxes, xyxyxyxy2xywhr(xywhr2xyxyxyxy(boxes)), rtol=1e-3)
465
458
 
466
459
 
467
- def test_utils_files():
460
+ def test_utils_files(tmp_path):
468
461
  """Test file handling utilities including file age, date, and paths with spaces."""
469
462
  from ultralytics.utils.files import file_age, file_date, get_latest_run, spaces_in_path
470
463
 
@@ -472,14 +465,14 @@ def test_utils_files():
472
465
  file_date(SOURCE)
473
466
  get_latest_run(ROOT / "runs")
474
467
 
475
- path = TMP / "path/with spaces"
468
+ path = tmp_path / "path/with spaces"
476
469
  path.mkdir(parents=True, exist_ok=True)
477
470
  with spaces_in_path(path) as new_path:
478
471
  print(new_path)
479
472
 
480
473
 
481
474
  @pytest.mark.slow
482
- def test_utils_patches_torch_save():
475
+ def test_utils_patches_torch_save(tmp_path):
483
476
  """Test torch_save backoff when _torch_save raises RuntimeError."""
484
477
  from unittest.mock import MagicMock, patch
485
478
 
@@ -489,7 +482,7 @@ def test_utils_patches_torch_save():
489
482
 
490
483
  with patch("ultralytics.utils.patches._torch_save", new=mock):
491
484
  with pytest.raises(RuntimeError):
492
- torch_save(torch.zeros(1), TMP / "test.pt")
485
+ torch_save(torch.zeros(1), tmp_path / "test.pt")
493
486
 
494
487
  assert mock.call_count == 4, "torch_save was not attempted the expected number of times"
495
488
 
@@ -722,11 +715,11 @@ def test_multichannel():
722
715
 
723
716
 
724
717
  @pytest.mark.parametrize("task,model,data", TASK_MODEL_DATA)
725
- def test_grayscale(task: str, model: str, data: str) -> None:
718
+ def test_grayscale(task: str, model: str, data: str, tmp_path) -> None:
726
719
  """Test YOLO model grayscale training, validation, and prediction functionality."""
727
720
  if task == "classify": # not support grayscale classification yet
728
721
  return
729
- grayscale_data = Path(TMP) / f"{Path(data).stem}-grayscale.yaml"
722
+ grayscale_data = tmp_path / f"{Path(data).stem}-grayscale.yaml"
730
723
  data = check_det_dataset(data)
731
724
  data["channels"] = 1 # add additional channels key for grayscale
732
725
  YAML.save(grayscale_data, data)