···5151}:
52525353let
5454- inherit (lib) lists strings trivial;
5454+ inherit (lib) attrsets lists strings trivial;
5555 inherit (cudaPackages) cudaFlags cudnn nccl;
56565757 setBool = v: if v then "1" else "0";
···104104 rocminfo rocm-thunk rocm-comgr rocm-device-libs
105105 rocm-runtime rocm-opencl-runtime hipify
106106 ];
107107+ };
108108+109109+ brokenConditions = attrsets.filterAttrs (_: cond: cond) {
110110+ "CUDA and ROCm are not mutually exclusive" = cudaSupport && rocmSupport;
111111+ "CUDA is not targeting Linux" = cudaSupport && !stdenv.isLinux;
112112+ "Unsupported CUDA version" = cudaSupport && (cudaPackages.cudaMajorVersion != "11");
113113+ "MPI cudatoolkit does not match cudaPackages.cudatoolkit" = MPISupport && cudaSupport && (mpi.cudatoolkit != cudaPackages.cudatoolkit);
114114+ "Magma cudaPackages does not match cudaPackages" = cudaSupport && (magma.cudaPackages != cudaPackages);
107115 };
108116in buildPythonPackage rec {
109117 pname = "torch";
···426434 inherit cudaSupport cudaPackages;
427435 # At least for 1.10.2 `torch.fft` is unavailable unless BLAS provider is MKL. This attribute allows for easy detection of its availability.
428436 blasProvider = blas.provider;
437437+ # To help debug when a package is broken due to CUDA support
438438+ inherit brokenConditions;
429439 } // lib.optionalAttrs cudaSupport {
430440 # NOTE: supportedCudaCapabilities isn't computed unless cudaSupport is true, so we can't use
431441 # it in the passthru set above because a downstream package might try to access it even
···441451 license = licenses.bsd3;
442452 maintainers = with maintainers; [ teh thoughtpolice tscholak ]; # tscholak esp. for darwin-related builds
443453 platforms = with platforms; linux ++ lib.optionals (!cudaSupport && !rocmSupport) darwin;
444444- broken = builtins.any trivial.id [
445445- # CUDA and ROCm are mutually exclusive
446446- (cudaSupport && rocmSupport)
447447- # CUDA is only supported on Linux
448448- (cudaSupport && !stdenv.isLinux)
449449- # Only CUDA 11 is currently supported
450450- (cudaSupport && (cudaPackages.cudaMajorVersion != "11"))
451451- # MPI cudatoolkit does not match cudaPackages.cudatoolkit
452452- (MPISupport && cudaSupport && (mpi.cudatoolkit != cudaPackages.cudatoolkit))
453453- # Magma cudaPackages does not match cudaPackages
454454- (cudaSupport && (magma.cudaPackages != cudaPackages))
455455- ];
454454+ broken = builtins.any trivial.id (builtins.attrValues brokenConditions);
456455 };
457456}