# Copyright 2013-2021 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 tempfile


class PyTensorboardPluginWit(Package):
    """The What-If Tool makes it easy to efficiently and
       intuitively explore up to two models' performance
       on a dataset. Investigate model performances for
       a range of features in your dataset, optimization
       strategies and even manipulations to individual
       datapoint values. All this and more, in a visual way
       that requires minimal code."""

    homepage = "https://pypi.org/project/tensorboard-plugin-wit/"
    url      = "https://github.com/PAIR-code/what-if-tool/archive/v1.7.0.tar.gz"
    git      = "https://github.com/pair-code/what-if-tool.git"

    maintainers = ['aweits']

    version('master', branch='master')
    version('1.8.0', sha256='1e4de1bbf6ae61c4d27b114ec2e1093bc4765b8c2bbb2cc5d43e2075b08a5fea')
    version('1.7.0', sha256='30dcab9065b02c3f1476f4fb92b27f6feb6c00cdb281699c44d8e69c86745247')

    # Bazel 3.7+ does not work
    # https://github.com/PAIR-code/what-if-tool/issues/140
    depends_on('bazel@0.26.1:3.6', type='build')
    depends_on('py-setuptools@36.2.0:', type='build')
    depends_on('python@2.7:2.8,3.2:', type=('build', 'run'))
    depends_on('py-wheel', type='build')

    extends('python')

    patch('tboard_shellenv.patch')

    # On Ubuntu, sh -> dash, and the script contains tools like pushd that require bash
    patch('https://patch-diff.githubusercontent.com/raw/PAIR-code/what-if-tool/pull/154.patch',
          sha256='b40fbc73fb07ed933f9d845b65fdbf7a94644f7ec7ca8637eda002171e71bbb6',
          when='@:1.8.0')

    phases = ['setup', 'build', 'install']

    def setup_build_environment(self, env):
        self.tmp_path = tempfile.mkdtemp(dir='/tmp', prefix='spack')
        env.set('TEST_TMPDIR', self.tmp_path)

    def setup(self, spec, prefix):
        builddir = join_path(self.stage.source_path, 'spack-build')
        mkdirp(builddir)
        filter_file(r'dest=.*',
                    'dest="{0}"'.format(builddir),
                    'tensorboard_plugin_wit/pip_package/build_pip_package.sh')
        filter_file(r'pip install .*',
                    '',
                    'tensorboard_plugin_wit/pip_package/build_pip_package.sh')
        filter_file(r'command \-v .*',
                    '',
                    'tensorboard_plugin_wit/pip_package/build_pip_package.sh')
        filter_file(r'virtualenv venv',
                    '',
                    'tensorboard_plugin_wit/pip_package/build_pip_package.sh')
        filter_file('unset PYTHON_HOME',
                    'export PYTHONPATH="{0}"'.format(env['PYTHONPATH']),
                    'tensorboard_plugin_wit/pip_package/build_pip_package.sh')
        filter_file('python setup.py',
                    '{0} setup.py'.format(spec['python'].command.path),
                    'tensorboard_plugin_wit/pip_package/build_pip_package.sh')

    def build(self, spec, prefix):
        bazel('--nohome_rc',
              '--nosystem_rc',
              '--output_user_root=' + self.tmp_path,
              'run',
              # watch https://github.com/bazelbuild/bazel/issues/7254
              '--define=EXECUTOR=remote',
              '--verbose_failures',
              '--subcommands=pretty_print',
              '--spawn_strategy=local',
              'tensorboard_plugin_wit/pip_package:build_pip_package')

    def install(self, spec, prefix):
        with working_dir('spack-build/release'):
            setup_py('install', '--prefix={0}'.format(prefix),
                     '--single-version-externally-managed', '--root=/')
        remove_linked_tree(self.tmp_path)
