diff --git a/pkgs/development/python-modules/detectron2/default.nix b/pkgs/development/python-modules/detectron2/default.nix index da273415d831..cc750427dacb 100644 --- a/pkgs/development/python-modules/detectron2/default.nix +++ b/pkgs/development/python-modules/detectron2/default.nix @@ -1,8 +1,10 @@ -{ lib +{ stdenv +, lib , buildPythonPackage , fetchFromGitHub , pythonRelaxDepsHook , ninja +, which # build inputs , pillow , matplotlib @@ -17,8 +19,10 @@ , iopath , omegaconf , hydra-core -, black , packaging +, torch +, pydot +, black # optional dependencies , fairscale , timm @@ -26,10 +30,16 @@ , shapely , pygments , psutil +# check inputs +, pytestCheckHook +, torchvision +, av +, opencv4 +, pytest-mock }: let - name = "detectron2"; + pname = "detectron2"; version = "0.6"; optional-dependencies = { all = [ @@ -43,11 +53,12 @@ let }; in buildPythonPackage { - inherit name version; + inherit pname version; + format = "setuptools"; src = fetchFromGitHub { owner = "facebookresearch"; - repo = name; + repo = "detectron2"; rev = "v${version}"; sha256 = "1w6cgvc8r2lwr72yxicls650jr46nriv1csivp2va9k1km8jx2sf"; }; @@ -55,12 +66,9 @@ buildPythonPackage { nativeBuildInputs = [ pythonRelaxDepsHook ninja + which ]; - dontUseNinjaBuild = true; - dontUseNinjaInstall = true; - dontUseNinjaCheck = true; - pythonRelaxDeps = [ "black" ]; @@ -79,14 +87,78 @@ buildPythonPackage { iopath omegaconf hydra-core - black packaging - ] ++ optional-dependencies.all; + black + torch # not explicitly declared in setup.py because they expect you to install it yourself + pydot # no idea why this is not in their setup.py + ]; passthru.optional-dependencies = optional-dependencies; - # disable the tests for now until someone can check on a linux machine. - # doCheck = false; + nativeCheckInputs = [ + av + opencv4 + pytest-mock + pytestCheckHook + torchvision + ]; + + preCheck = '' + # prevent import errors for C extension modules + rm -r detectron2 + ''; + + pytestFlagsArray = [ + # prevent include $sourceRoot/projects/*/tests + "tests" + ]; + + disabledTestPaths = [ + # try import caffe2 + "tests/test_export_torchscript.py" + "tests/test_model_analysis.py" + "tests/modeling/test_backbone.py" + "tests/modeling/test_roi_heads.py" + "tests/modeling/test_rpn.py" + "tests/structures/test_instances.py" + # hangs for some reason + "tests/modeling/test_model_e2e.py" + ]; + + disabledTests = [ + # fails for some reason + "test_checkpoint_resume" + "test_map_style" + # requires shapely + "test_resize_and_crop" + # require caffe2 + "test_predict_boxes_tracing" + "test_predict_probs_tracing" + "testMaskRCNN" + "testRetinaNet" + # require coco dataset + "test_default_trainer" + "test_unknown_category" + "test_build_dataloader_train" + "test_build_iterable_dataloader_train" + # require network access + "test_opencv_exif_orientation" + "test_read_exif_orientation" + # use deprecated api, numpy.bool + "test_BWmode_nomask" + "test_draw_binary_mask" + "test_draw_empty_mask_predictions" + "test_draw_instance_predictions" + "test_draw_no_metadata" + "test_overlay_instances" + "test_overlay_instances_no_boxes" + "test_get_bounding_box" + ] ++ lib.optionals (stdenv.isLinux && stdenv.isAarch64) [ + "test_build_batch_dataloader_inference" + "test_build_dataloader_inference" + "test_build_iterable_dataloader_inference" + "test_to_iterable" + ]; pythonImportsCheck = [ "detectron2" ];