summaryrefslogblamecommitdiff
path: root/var/spack/repos/builtin/packages/py-alphafold/package.py
blob: ad95a4201b48efb80f87e5c71e0c7d74ab3a45b5 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
                                                                         















                                                                                 
                         
 
                                                                                               



                                                                                               

                                                                         

                                                    

                                                                          

                                                           

                                                                          
                                                          
                                                  
                                                                

                                                                      
                                                                 

                                                                        
                                                         
                                                                         

                                                        

                                                                          








































                                                                                                                                                               
# Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)

import glob

from spack.package import *


class PyAlphafold(PythonPackage, CudaPackage):
    """AlphaFold is an AI system developed by DeepMind that predicts a
    protein's 3D structure from its amino acid sequence. It regularly
    achieves accuracy competitive with experiment."""

    homepage = "https://github.com/deepmind/alphafold"
    url = "https://github.com/deepmind/alphafold/archive/refs/tags/v2.1.1.tar.gz"
    maintainers("aweits")

    version("2.2.4", sha256="8d756e16f6dc7897331d834aade8493820d0ff6a03bf60ce511bac4756c1b1e8")
    version("2.1.1", sha256="1adb6e213ba9ac321fc1acb1c563ba9b4fc054c1cebe1191bc0e2aaa671dadf7")

    conflicts("platform=darwin", msg="alphafold is only supported on Linux")

    # lots of hints on versions and patching taken from docker/Dockerfile
    # and requirements.txt
    depends_on("python@3.7:", type=("build", "run"))
    depends_on("py-setuptools", type="build")
    depends_on("py-absl-py@0.13.0:", type=("build", "run"), when="@2.1.1")
    depends_on("py-absl-py@1.0.0:", type=("build", "run"), when="@2.2.4")
    depends_on("py-biopython@1.79:", type=("build", "run"))
    depends_on("py-chex@0.0.7:", type=("build", "run"))
    depends_on("py-dm-haiku@0.0.4:", type=("build", "run"), when="@2.1.1")
    depends_on("py-dm-haiku@0.0.7:", type=("build", "run"), when="@2.2.4")
    depends_on("py-dm-tree@0.1.6:", type=("build", "run"))
    depends_on("py-docker", type=("build", "run"))
    depends_on("py-immutabledict@2.0.0:", type=("build", "run"))
    depends_on("py-jax@0.2.14:", type=("build", "run"), when="@2.1.1")
    depends_on("py-jax@0.3.17:", type=("build", "run"), when="@2.2.4")
    depends_on("py-ml-collections@0.1.0:", type=("build", "run"))
    depends_on("py-numpy@1.19.5:", type=("build", "run"), when="@2.1.1")
    depends_on("py-numpy@1.21.6:", type=("build", "run"), when="@2.2.4")
    depends_on("py-pandas@1.3.4:", type=("build", "run"))
    depends_on("py-protobuf@3.19:", type=("build", "run"), when="@2.2.4")
    depends_on("py-scipy@1.7.0:", type=("build", "run"))
    depends_on("py-pdbfixer@1.7", type=("build", "run"))
    depends_on("py-tensorflow@2.5:", type=("build", "run"), when="@2.1.1")
    depends_on("py-tensorflow@2.9:", type=("build", "run"), when="@2.2.4")
    depends_on(
        "openmm@7.5.1+cuda",
        type="run",
        patches=[
            patch(
                "https://raw.githubusercontent.com/deepmind/alphafold/main/docker/openmm.patch",
                sha256="a5a0ced820f3ecc56ae634c3111f80614863559b0587954a2658c8d4b2a07ae3",
                working_dir="wrappers/python",
                level=0,
            )
        ],
    )
    depends_on("hmmer", type="run")
    depends_on("kalign", type="run")
    depends_on("hh-suite", type="run")
    depends_on("aria2", type="run")

    resource(
        name="chemprops",
        url="https://git.scicore.unibas.ch/schwede/openstructure/-/raw/7102c63615b64735c4941278d92b554ec94415f8/modules/mol/alg/src/stereo_chemical_props.txt",
        destination="",
        sha256="24510899eeb49167cffedec8fa45363a4d08279c0c637a403b452f7d0ac09451",
        expand=False,
        placement="chemprops",
    )

    @run_after("install")
    def install_scripts(self):
        mkdirp(self.prefix.bin)
        shebang = "#!{0}\n".format(self.spec["python"].command)
        for fname in glob.glob("run_alphafold*.py"):
            destfile = join_path(self.prefix.bin, fname)
            with open(fname, "r") as src:
                srcdata = src.read()
            with open(destfile, "w") as dest:
                dest.write(shebang + srcdata)
                set_executable(destfile)

        python_dir = join_path(self.prefix, python_platlib, "alphafold", "common")
        install("chemprops/stereo_chemical_props.txt", python_dir)
        install_tree("scripts", self.prefix.scripts)