Repository: uber/causalml (language: python)

Issue:
remove support for environment files
**Describe the bug**
Maintaining environment files in `envs/` and their builds via `.github/workflows/test-conda-venv-install.py` 

https://github.com/uber/causalml/blob/a0315660d9b14f5d943aa688d8242eb621d2ba76/.github/workflows/test-conda-venv-install.yml#L1-L68

is cumbersome and not easily addressed across platforms due to cython and other platform-specific build dependencies.

**To Reproduce**
See [failing actions](https://github.com/uber/causalml/actions/runs/8746279630)

**Proposal**
- Remove support for env files
  - Remove `envs/`
  - Remove `.github/workflows/test-conda-venv-install.py`
  - Update `docs/installation.rst` and remove envs installation steps
    - Nudge user to export env to maintain stability
    - Recommend install via conda/pip/build-from-source



Discussion / hints:

Fix patch:
diff --git a/docs/installation.rst b/docs/installation.rst
index 58cdaa1e..e95b5d38 100644
--- a/docs/installation.rst
+++ b/docs/installation.rst
@@ -2,9 +2,9 @@
 Installation
 ============
 
-Installation with ``conda`` is recommended.
+Installation with ``conda`` or ``pip`` is recommended.  Developers can follow the **Install from source** instructions below.  If building from source, consider doing so within a conda environment and then exporting the environment for reproducibility. 
 
-``conda`` environment files for Python 3.7, 3.8 and 3.9 are available in the repository. To use models under the ``inference.tf`` module (e.g. ``DragonNet``), additional dependency of ``tensorflow`` is required. For detailed instructions, see below.
+To use models under the ``inference.tf`` module (e.g. ``DragonNet``), additional dependency of ``tensorflow`` is required. For detailed instructions, see below.
 
 Install using ``conda``
 -----------------------
@@ -29,31 +29,6 @@ Directly install from the ``conda-forge`` channel using ``conda``.
 
     conda install -c conda-forge causalml
 
-Install from the ``conda`` virtual environment
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-This will create a new ``conda`` virtual environment named ``causalml-[tf-]py3x``, where ``x`` is in ``[7, 8, 9]``. e.g. ``causalml-py37`` or ``causalml-tf-py38``. If you want to change the name of the environment, update the relevant YAML file in ``envs/``.
-
-Note: if you do not have the base cxx-compiler libraries installed, follow the ``Install from source`` instructions below to install them first.
-
-.. code-block:: bash
-
-    git clone https://github.com/uber/causalml.git
-    cd causalml/envs/
-    conda env create -f environment-py38.yml	# for the virtual environment with Python 3.8 and CausalML
-    conda activate causalml-py38
-
-Install ``causalml`` with ``tensorflow``
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-.. code-block:: bash
-
-    git clone https://github.com/uber/causalml.git
-    cd causalml/envs/
-    conda env create -f environment-tf-py38.yml	# for the virtual environment with Python 3.8 and CausalML
-    conda activate causalml-tf-py38
-    pip install -U numpy			# this step is necessary to fix [#338](https://github.com/uber/causalml/issues/338)
-
 Install from ``PyPI``
 ---------------------
 
diff --git a/envs/environment-py37.yml b/envs/environment-py37.yml
deleted file mode 100644
index d23b5b07..00000000
--- a/envs/environment-py37.yml
+++ /dev/null
@@ -1,137 +0,0 @@
-name: causalml-py37
-channels:
-  - defaults
-dependencies:
-  - pip
-  - python=3.7
-  - setuptools=52.0.0
-  - graphviz
-  - pip:
-    - absl-py==0.12.0
-    - appnope==0.1.2
-    - argon2-cffi==20.1.0
-    - astunparse==1.6.3
-    - async-generator==1.10
-    - attrs==20.3.0
-    - backcall==0.2.0
-    - bleach==3.3.0
-    - cachetools==4.2.1
-    - cffi==1.14.5
-    - chardet==4.0.0
-    - coverage==5.5
-    - cycler==0.10.0
-    - cython==0.29.23
-    - decorator==5.0.7
-    - defusedxml==0.7.1
-    - dill==0.3.3
-    - entrypoints==0.3
-    - future==0.18.2
-    - gast==0.4.0
-    - google-auth==1.29.0
-    - google-auth-oauthlib==0.4.4
-    - google-pasta==0.2.0
-    - graphviz
-    - grpcio==1.34.0
-    - h5py==3.1.0
-    - idna==2.10
-    - iniconfig==1.1.1
-    - ipykernel==5.5.3
-    - ipython==7.22.0
-    - ipython-genutils==0.2.0
-    - ipywidgets==7.6.3
-    - jedi==0.18.0
-    - jinja2==2.11.3
-    - joblib==1.0.1
-    - jsonschema==3.2.0
-    - jupyter==1.0.0
-    - jupyter-client==6.1.12
-    - jupyter-console==6.4.0
-    - jupyter-contrib-core==0.3.3
-    - jupyter-contrib-nbextensions==0.5.1
-    - jupyter-core==4.7.1
-    - jupyter-highlight-selected-word==0.2.0
-    - jupyter-latex-envs==1.4.6
-    - jupyter-nbextensions-configurator==0.4.1
-    - jupyterlab-pygments==0.1.2
-    - jupyterlab-widgets==1.0.0
-    - kiwisolver==1.3.1
-    - lightgbm==3.2.1
-    - llvmlite==0.36.0
-    - lxml==4.6.3
-    - markdown==3.3.4
-    - markupsafe==1.1.1
-    - matplotlib==3.4.1
-    - mistune==0.8.4
-    - nbclient==0.5.3
-    - nbconvert==6.0.7
-    - nbformat==5.1.3
-    - nest-asyncio==1.5.1
-    - notebook==6.3.0
-    - numba==0.53.1
-    - numpy==1.20.0
-    - oauthlib==3.1.0
-    - opt-einsum==3.3.0
-    - packaging==20.9
-    - pandas==1.2.4
-    - pandocfilters==1.4.3
-    - parso==0.8.2
-    - patsy==0.5.1
-    - pexpect==4.8.0
-    - pickleshare==0.7.5
-    - pillow==8.2.0
-    - pluggy==0.13.1
-    - progressbar2==3.53.1
-    - prometheus-client==0.10.1
-    - prompt-toolkit==3.0.18
-    - protobuf==3.15.8
-    - ptyprocess==0.7.0
-    - py==1.10.0
-    - pyasn1==0.4.8
-    - pyasn1-modules==0.2.8
-    - pycparser==2.20
-    - pydotplus==2.0.2
-    - pygam==0.8.0
-    - pygments==2.8.1
-    - pyparsing==2.4.7
-    - pyro-api==0.1.2
-    - pyro-ppl==1.6.0
-    - pyrsistent==0.17.3
-    - pytest==6.2.3
-    - pytest-cov==2.11.1
-    - python-dateutil==2.8.1
-    - python-utils==2.5.6
-    - pytz==2021.1
-    - pyyaml==5.4.1
-    - pyzmq==22.0.3
-    - qtconsole==5.0.3
-    - qtpy==1.9.0
-    - requests==2.25.1
-    - requests-oauthlib==1.3.0
-    - rsa==4.7.2
-    - scikit-learn==0.23.2
-    - scipy==1.4.1
-    - seaborn==0.11.1
-    - send2trash==1.5.0
-    - shap==0.37.0
-    - six==1.15.0
-    - slicer==0.0.3
-    - statsmodels==0.12.2
-    - termcolor==1.1.0
-    - terminado==0.9.4
-    - testpath==0.4.4
-    - threadpoolctl==2.1.0
-    - toml==0.10.2
-    - torch==1.8.1
-    - tornado==6.1
-    - tqdm==4.60.0
-    - traitlets==5.0.5
-    - typing-extensions==3.7.4.3
-    - urllib3==1.26.4
-    - wcwidth==0.2.5
-    - webencodings==0.5.1
-    - werkzeug==1.0.1
-    - wheel==0.36.2
-    - widgetsnbextension==3.5.1
-    - wrapt==1.12.1
-    - xgboost==1.4.1
-    - causalml>=0.10.0
diff --git a/envs/environment-py38.yml b/envs/environment-py38.yml
deleted file mode 100644
index ae73a41c..00000000
--- a/envs/environment-py38.yml
+++ /dev/null
@@ -1,136 +0,0 @@
-name: causalml-py38
-channels:
-  - defaults
-dependencies:
-  - pip
-  - python=3.8
-  - setuptools=52.0.0
-  - pip:
-    - absl-py==0.12.0
-    - appnope==0.1.2
-    - argon2-cffi==20.1.0
-    - astunparse==1.6.3
-    - async-generator==1.10
-    - attrs==20.3.0
-    - backcall==0.2.0
-    - bleach==3.3.0
-    - cachetools==4.2.1
-    - cffi==1.14.5
-    - chardet==4.0.0
-    - coverage==5.5
-    - cycler==0.10.0
-    - cython==0.29.23
-    - decorator==5.0.7
-    - defusedxml==0.7.1
-    - dill==0.3.3
-    - entrypoints==0.3
-    - future==0.18.2
-    - gast==0.3.3
-    - google-auth==1.29.0
-    - google-auth-oauthlib==0.4.4
-    - google-pasta==0.2.0
-    - grpcio==1.37.0
-    - h5py==2.10.0
-    - idna==2.10
-    - iniconfig==1.1.1
-    - ipykernel==5.5.3
-    - ipython==7.22.0
-    - ipython-genutils==0.2.0
-    - ipywidgets==7.6.3
-    - jedi==0.18.0
-    - jinja2==2.11.3
-    - joblib==1.0.1
-    - jsonschema==3.2.0
-    - jupyter==1.0.0
-    - jupyter-client==6.1.12
-    - jupyter-console==6.4.0
-    - jupyter-contrib-core==0.3.3
-    - jupyter-contrib-nbextensions==0.5.1
-    - jupyter-core==4.7.1
-    - jupyter-highlight-selected-word==0.2.0
-    - jupyter-latex-envs==1.4.6
-    - jupyter-nbextensions-configurator==0.4.1
-    - jupyterlab-pygments==0.1.2
-    - jupyterlab-widgets==1.0.0
-    - kiwisolver==1.3.1
-    - lightgbm==3.2.1
-    - llvmlite==0.36.0
-    - lxml==4.6.3
-    - markdown==3.3.4
-    - markupsafe==1.1.1
-    - matplotlib==3.4.1
-    - mistune==0.8.4
-    - nbclient==0.5.3
-    - nbconvert==6.0.7
-    - nbformat==5.1.3
-    - nest-asyncio==1.5.1
-    - notebook==6.3.0
-    - numba==0.53.1
-    - numpy==1.23.2
-    - oauthlib==3.1.0
-    - opt-einsum==3.3.0
-    - packaging==20.9
-    - pandas==1.2.4
-    - pandocfilters==1.4.3
-    - parso==0.8.2
-    - patsy==0.5.1
-    - pexpect==4.8.0
-    - pickleshare==0.7.5
-    - pillow==8.2.0
-    - pluggy==0.13.1
-    - progressbar2==3.53.1
-    - prometheus-client==0.10.1
-    - prompt-toolkit==3.0.18
-    - protobuf==3.15.8
-    - ptyprocess==0.7.0
-    - py==1.10.0
-    - pyasn1==0.4.8
-    - pyasn1-modules==0.2.8
-    - pycparser==2.20
-    - pydotplus==2.0.2
-    - pygam==0.8.0
-    - pygments==2.8.1
-    - pyparsing==2.4.7
-    - pyro-api==0.1.2
-    - pyro-ppl==1.6.0
-    - pyrsistent==0.17.3
-    - pytest==6.2.3
-    - pytest-cov==2.11.1
-    - python-dateutil==2.8.1
-    - graphviz
-    - python-utils==2.5.6
-    - pytz==2021.1
-    - pyyaml==5.4.1
-    - pyzmq==22.0.3
-    - qtconsole==5.0.3
-    - qtpy==1.9.0
-    - requests==2.25.1
-    - requests-oauthlib==1.3.0
-    - rsa==4.7.2
-    - scikit-learn==0.23.2
-    - scipy==1.4.1
-    - seaborn==0.11.1
-    - send2trash==1.5.0
-    - shap==0.37.0
-    - six==1.15.0
-    - slicer==0.0.3
-    - statsmodels==0.12.2
-    - termcolor==1.1.0
-    - terminado==0.9.4
-    - testpath==0.4.4
-    - threadpoolctl==2.1.0
-    - toml==0.10.2
-    - torch==1.8.1
-    - tornado==6.1
-    - tqdm==4.60.0
-    - traitlets==5.0.5
-    - typing-extensions==3.7.4.3
-    - urllib3==1.26.4
-    - wcwidth==0.2.5
-    - webencodings==0.5.1
-    - werkzeug==1.0.1
-    - wheel==0.36.2
-    - widgetsnbextension==3.5.1
-    - wrapt==1.12.1
-    - xgboost==1.4.1
-    - causalml>=0.10.0
diff --git a/envs/environment-py39.yml b/envs/environment-py39.yml
deleted file mode 100644
index c19316e3..00000000
--- a/envs/environment-py39.yml
+++ /dev/null
@@ -1,137 +0,0 @@
-name: causalml-py39
-channels:
-  - defaults
-dependencies:
-  - pip
-  - python=3.9
-  - setuptools=52.0.0
-  - numpy=1.22
-  - pip:
-    - absl-py==0.12.0
-    - appnope==0.1.2
-    - argon2-cffi==21.2.0
-    - astunparse==1.6.3
-    - async-generator==1.10
-    - attrs==20.3.0
-    - backcall==0.2.0
-    - bleach==3.3.0
-    - cachetools==4.2.1
-    - cffi==1.14.5
-    - chardet==4.0.0
-    - coverage==5.5
-    - cycler==0.10.0
-    - Cython==0.29.34
-    - decorator==5.0.7
-    - defusedxml==0.7.1
-    - dill==0.3.5.1
-    - entrypoints==0.3
-    - future==0.18.2
-    - gast==0.3.3
-    - google-auth==1.29.0
-    - google-auth-oauthlib==0.4.4
-    - google-pasta==0.2.0
-    - grpcio==1.51.3
-    - h5py==3.9.0
-    - idna==2.10
-    - iniconfig==1.1.1
-    - ipykernel==5.5.3
-    - ipython==7.22.0
-    - ipython-genutils==0.2.0
-    - ipywidgets==7.6.3
-    - jedi==0.18.0
-    - jinja2==2.11.3
-    - joblib==1.0.1
-    - jsonschema==3.2.0
-    - jupyter==1.0.0
-    - jupyter-client==6.1.12
-    - jupyter-console==6.4.0
-    - jupyter-contrib-core==0.3.3
-    - jupyter-contrib-nbextensions==0.5.1
-    - jupyter-core==4.7.1
-    - jupyter-highlight-selected-word==0.2.0
-    - jupyter-latex-envs==1.4.6
-    - jupyter-nbextensions-configurator==0.4.1
-    - jupyterlab-pygments==0.1.2
-    - jupyterlab-widgets==1.0.0
-    - kiwisolver==1.3.1
-    - lightgbm==3.3.4
-    - llvmlite==0.39.0
-    - lxml==4.6.3
-    - markdown==3.3.4
-    - markupsafe==1.1.1
-    - matplotlib==3.4.1
-    - mistune==0.8.4
-    - nbclient==0.5.3
-    - nbconvert==6.0.7
-    - nbformat==5.1.3
-    - nest-asyncio==1.5.1
-    - notebook==6.3.0
-    - numba==0.56.0
-    - oauthlib==3.1.0
-    - opt-einsum==3.3.0
-    - packaging==20.9
-    - pandas==1.2.4
-    - pandocfilters==1.4.3
-    - parso==0.8.2
-    - patsy==0.5.2
-    - pexpect==4.8.0
-    - pickleshare==0.7.5
-    - pillow==8.2.0
-    - pluggy==0.13.1
-    - progressbar2==3.53.1
-    - prometheus-client==0.10.1
-    - prompt-toolkit==3.0.18
-    - protobuf==3.15.8
-    - ptyprocess==0.7.0
-    - py==1.10.0
-    - pyasn1==0.4.8
-    - pyasn1-modules==0.2.8
-    - pycparser==2.20
-    - pydotplus==2.0.2
-    - pygam==0.8.0
-    - pygments==2.8.1
-    - pyparsing==2.4.7
-    - pyro-api==0.1.2
-    - pyro-ppl==1.6.0
-    - pyrsistent==0.17.3
-    - pytest==6.2.3
-    - pytest-cov==2.11.1
-    - python-dateutil==2.8.1
-    - graphviz
-    - python-utils==2.5.6
-    - pytz==2021.1
-    - pyyaml==6.0.0
-    - pyzmq==22.0.3
-    - qtconsole==5.0.3
-    - qtpy==1.9.0
-    - requests==2.25.1
-    - requests-oauthlib==1.3.0
-    - rsa==4.7.2
-    - scikit-learn==1.0.2
-    - scipy==1.10.0
-    - seaborn==0.11.1
-    - send2trash==1.5.0
-    - shap==0.37.0
-    - six==1.15.0
-    - slicer==0.0.3
-    - statsmodels==0.13.1
-    - termcolor==1.1.0
-    - terminado==0.9.4
-    - testpath==0.4.4
-    - threadpoolctl==2.1.0
-    - toml==0.10.2
-    - torch==1.9.0
-    - tornado==6.1
-    - tqdm==4.60.0
-    - traitlets==5.0.5
-    - typing-extensions==3.7.4.3
-    - urllib3==1.26.4
-    - wcwidth==0.2.5
-    - webencodings==0.5.1
-    - werkzeug==1.0.1
-    - wheel==0.36.2
-    - widgetsnbextension==3.5.1
-    - wrapt==1.12.1
-    - xgboost==1.4.1
-    ## Relative path to setup.py directory for full local installation
-    - ../.
\ No newline at end of file
diff --git a/envs/environment-tf-py37.yml b/envs/environment-tf-py37.yml
deleted file mode 100644
index b2aaf583..00000000
--- a/envs/environment-tf-py37.yml
+++ /dev/null
@@ -1,143 +0,0 @@
-name: causalml-tf-py37
-channels:
-  - defaults
-dependencies:
-  - pip=21.0.1
-  - python=3.7
-  - setuptools=52.0.0
-  - graphviz
-  - pip:
-    - absl-py==0.12.0
-    - appnope==0.1.2
-    - argon2-cffi==20.1.0
-    - astunparse==1.6.3
-    - async-generator==1.10
-    - attrs==20.3.0
-    - backcall==0.2.0
-    - bleach==3.3.0
-    - cachetools==4.2.1
-    - cffi==1.14.5
-    - chardet==4.0.0
-    - coverage==5.5
-    - cycler==0.10.0
-    - cython==0.29.23
-    - decorator==5.0.7
-    - defusedxml==0.7.1
-    - dill==0.3.3
-    - entrypoints==0.3
-    - future==0.18.2
-    - gast==0.4.0
-    - google-auth==1.29.0
-    - google-auth-oauthlib==0.4.4
-    - google-pasta==0.2.0
-    - graphviz
-    - grpcio==1.34.0
-    - h5py==3.1.0
-    - idna==2.10
-    - iniconfig==1.1.1
-    - ipykernel==5.5.3
-    - ipython==7.22.0
-    - ipython-genutils==0.2.0
-    - ipywidgets==7.6.3
-    - jedi==0.18.0
-    - jinja2==2.11.3
-    - joblib==1.0.1
-    - jsonschema==3.2.0
-    - jupyter==1.0.0
-    - jupyter-client==6.1.12
-    - jupyter-console==6.4.0
-    - jupyter-contrib-core==0.3.3
-    - jupyter-contrib-nbextensions==0.5.1
-    - jupyter-core==4.7.1
-    - jupyter-highlight-selected-word==0.2.0
-    - jupyter-latex-envs==1.4.6
-    - jupyter-nbextensions-configurator==0.4.1
-    - jupyterlab-pygments==0.1.2
-    - jupyterlab-widgets==1.0.0
-    - keras==2.4.3
-    - kiwisolver==1.3.1
-    - lightgbm==3.2.1
-    - llvmlite==0.36.0
-    - lxml==4.6.3
-    - markdown==3.3.4
-    - markupsafe==1.1.1
-    - matplotlib==3.4.1
-    - mistune==0.8.4
-    - nbclient==0.5.3
-    - nbconvert==6.0.7
-    - nbformat==5.1.3
-    - nest-asyncio==1.5.1
-    - notebook==6.3.0
-    - numba==0.53.1
-    - numpy==1.18.5
-    - oauthlib==3.1.0
-    - opt-einsum==3.3.0
-    - packaging==20.9
-    - pandas==1.2.4
-    - pandocfilters==1.4.3
-    - parso==0.8.2
-    - patsy==0.5.1
-    - pexpect==4.8.0
-    - pickleshare==0.7.5
-    - pillow==8.2.0
-    - pluggy==0.13.1
-    - progressbar2==3.53.1
-    - prometheus-client==0.10.1
-    - prompt-toolkit==3.0.18
-    - protobuf==3.15.8
-    - ptyprocess==0.7.0
-    - py==1.10.0
-    - pyasn1==0.4.8
-    - pyasn1-modules==0.2.8
-    - pycparser==2.20
-    - pydotplus==2.0.2
-    - pygam==0.8.0
-    - pygments==2.8.1
-    - pyparsing==2.4.7
-    - pyro-api==0.1.2
-    - pyro-ppl==1.6.0
-    - pyrsistent==0.17.3
-    - pytest==6.2.3
-    - pytest-cov==2.11.1
-    - python-dateutil==2.8.1
-    - python-utils==2.5.6
-    - pytz==2021.1
-    - pyyaml==5.4.1
-    - pyzmq==22.0.3
-    - qtconsole==5.0.3
-    - qtpy==1.9.0
-    - requests==2.25.1
-    - requests-oauthlib==1.3.0
-    - rsa==4.7.2
-    - scikit-learn==0.23.2
-    - scipy==1.4.1
-    - seaborn==0.11.1
-    - send2trash==1.5.0
-    - shap==0.37.0
-    - six==1.15.0
-    - slicer==0.0.3
-    - statsmodels==0.12.2
-    - tensorboard==2.5.0
-    - tensorboard-data-server==0.6.1
-    - tensorboard-plugin-wit==1.8.0
-    - tensorflow==2.5.0
-    - tensorflow-estimator==2.5.0
-    - termcolor==1.1.0
-    - terminado==0.9.4
-    - testpath==0.4.4
-    - threadpoolctl==2.1.0
-    - toml==0.10.2
-    - torch==1.8.1
-    - tornado==6.1
-    - tqdm==4.60.0
-    - traitlets==5.0.5
-    - typing-extensions==3.7.4.3
-    - urllib3==1.26.4
-    - wcwidth==0.2.5
-    - webencodings==0.5.1
-    - werkzeug==1.0.1
-    - wheel==0.36.2
-    - widgetsnbextension==3.5.1
-    - wrapt==1.12.1
-    - xgboost==1.4.1
-    - causalml[tf]>=0.10.0
diff --git a/envs/environment-tf-py38.yml b/envs/environment-tf-py38.yml
deleted file mode 100644
index 34577e54..00000000
--- a/envs/environment-tf-py38.yml
+++ /dev/null
@@ -1,143 +0,0 @@
-name: causalml-tf-py38
-channels:
-  - defaults
-dependencies:
-  - pip=21.0.1
-  - python=3.8
-  - setuptools=52.0.0
-  - pip:
-    - absl-py==0.12.0
-    - appnope==0.1.2
-    - argon2-cffi==20.1.0
-    - astunparse==1.6.3
-    - async-generator==1.10
-    - attrs==20.3.0
-    - backcall==0.2.0
-    - bleach==3.3.0
-    - cachetools==4.2.1
-    - cffi==1.14.5
-    - chardet==4.0.0
-    - coverage==5.5
-    - cycler==0.10.0
-    - cython==0.29.23
-    - decorator==5.0.7
-    - defusedxml==0.7.1
-    - dill==0.3.3
-    - entrypoints==0.3
-    - future==0.18.2
-    - gast==0.3.3
-    - google-auth==1.29.0
-    - google-auth-oauthlib==0.4.4
-    - google-pasta==0.2.0
-    - grpcio==1.37.0
-    - h5py==2.10.0
-    - idna==2.10
-    - iniconfig==1.1.1
-    - ipykernel==5.5.3
-    - ipython==7.22.0
-    - ipython-genutils==0.2.0
-    - ipywidgets==7.6.3
-    - jedi==0.18.0
-    - jinja2==2.11.3
-    - joblib==1.0.1
-    - jsonschema==3.2.0
-    - jupyter==1.0.0
-    - jupyter-client==6.1.12
-    - jupyter-console==6.4.0
-    - jupyter-contrib-core==0.3.3
-    - jupyter-contrib-nbextensions==0.5.1
-    - jupyter-core==4.7.1
-    - jupyter-highlight-selected-word==0.2.0
-    - jupyter-latex-envs==1.4.6
-    - jupyter-nbextensions-configurator==0.4.1
-    - jupyterlab-pygments==0.1.2
-    - jupyterlab-widgets==1.0.0
-    - keras==2.4.3
-    - keras-preprocessing==1.1.2
-    - kiwisolver==1.3.1
-    - lightgbm==3.2.1
-    - llvmlite==0.36.0
-    - lxml==4.6.3
-    - markdown==3.3.4
-    - markupsafe==1.1.1
-    - matplotlib==3.4.1
-    - mistune==0.8.4
-    - nbclient==0.5.3
-    - nbconvert==6.0.7
-    - nbformat==5.1.3
-    - nest-asyncio==1.5.1
-    - notebook==6.3.0
-    - numba==0.53.1
-    - numpy==1.18.5
-    - oauthlib==3.1.0
-    - opt-einsum==3.3.0
-    - packaging==20.9
-    - pandas==1.2.4
-    - pandocfilters==1.4.3
-    - parso==0.8.2
-    - patsy==0.5.1
-    - pexpect==4.8.0
-    - pickleshare==0.7.5
-    - pillow==8.2.0
-    - pluggy==0.13.1
-    - progressbar2==3.53.1
-    - prometheus-client==0.10.1
-    - prompt-toolkit==3.0.18
-    - protobuf==3.15.8
-    - ptyprocess==0.7.0
-    - py==1.10.0
-    - pyasn1==0.4.8
-    - pyasn1-modules==0.2.8
-    - pycparser==2.20
-    - pydotplus==2.0.2
-    - pygam==0.8.0
-    - pygments==2.8.1
-    - pyparsing==2.4.7
-    - pyro-api==0.1.2
-    - pyro-ppl==1.6.0
-    - pyrsistent==0.17.3
-    - pytest==6.2.3
-    - pytest-cov==2.11.1
-    - python-dateutil==2.8.1
-    - graphviz
-    - python-utils==2.5.6
-    - pytz==2021.1
-    - pyyaml==5.4.1
-    - pyzmq==22.0.3
-    - qtconsole==5.0.3
-    - qtpy==1.9.0
-    - requests==2.25.1
-    - requests-oauthlib==1.3.0
-    - rsa==4.7.2
-    - scikit-learn==0.23.2
-    - scipy==1.4.1
-    - seaborn==0.11.1
-    - send2trash==1.5.0
-    - shap==0.37.0
-    - six==1.15.0
-    - slicer==0.0.3
-    - statsmodels==0.12.2
-    - tensorboard==2.5.0
-    - tensorboard-data-server==0.6.1
-    - tensorboard-plugin-wit==1.8.0
-    - tensorflow==2.5.0
-    - tensorflow-estimator==2.5.0
-    - termcolor==1.1.0
-    - terminado==0.9.4
-    - testpath==0.4.4
-    - threadpoolctl==2.1.0
-    - toml==0.10.2
-    - torch==1.8.1
-    - tornado==6.1
-    - tqdm==4.60.0
-    - traitlets==5.0.5
-    - typing-extensions==3.7.4.3
-    - urllib3==1.26.4
-    - wcwidth==0.2.5
-    - webencodings==0.5.1
-    - werkzeug==1.0.1
-    - wheel==0.36.2
-    - widgetsnbextension==3.5.1
-    - wrapt==1.12.1
-    - xgboost==1.4.1
-    - causalml[tf]>=0.10.0
diff --git a/envs/environment-tf-py39.yml b/envs/environment-tf-py39.yml
deleted file mode 100644
index 98e04a86..00000000
--- a/envs/environment-tf-py39.yml
+++ /dev/null
@@ -1,143 +0,0 @@
-name: causalml-tf-py39
-channels:
-  - defaults
-dependencies:
-  - pip=21.0.1
-  - python=3.9
-  - setuptools=52.0.0
-  - pip:
-    - absl-py==0.12.0
-    - appnope==0.1.2
-    - argon2-cffi==20.1.0
-    - astunparse==1.6.3
-    - async-generator==1.10
-    - attrs==20.3.0
-    - backcall==0.2.0
-    - bleach==3.3.0
-    - cachetools==4.2.1
-    - cffi==1.14.5
-    - chardet==4.0.0
-    - coverage==5.5
-    - cycler==0.10.0
-    - cython==0.29.23
-    - decorator==5.0.7
-    - defusedxml==0.7.1
-    - dill==0.3.3
-    - entrypoints==0.3
-    - future==0.18.2
-    - gast==0.3.3
-    - google-auth==1.29.0
-    - google-auth-oauthlib==0.4.4
-    - google-pasta==0.2.0
-    - grpcio==1.37.0
-    - h5py==2.10.0
-    - idna==2.10
-    - iniconfig==1.1.1
-    - ipykernel==5.5.3
-    - ipython==7.22.0
-    - ipython-genutils==0.2.0
-    - ipywidgets==7.6.3
-    - jedi==0.18.0
-    - jinja2==2.11.3
-    - joblib==1.0.1
-    - jsonschema==3.2.0
-    - jupyter==1.0.0
-    - jupyter-client==6.1.12
-    - jupyter-console==6.4.0
-    - jupyter-contrib-core==0.3.3
-    - jupyter-contrib-nbextensions==0.5.1
-    - jupyter-core==4.7.1
-    - jupyter-highlight-selected-word==0.2.0
-    - jupyter-latex-envs==1.4.6
-    - jupyter-nbextensions-configurator==0.4.1
-    - jupyterlab-pygments==0.1.2
-    - jupyterlab-widgets==1.0.0
-    - keras==2.4.3
-    - keras-preprocessing==1.1.2
-    - kiwisolver==1.3.1
-    - lightgbm==3.2.1
-    - llvmlite==0.36.0
-    - lxml==4.6.3
-    - markdown==3.3.4
-    - markupsafe==1.1.1
-    - matplotlib==3.4.1
-    - mistune==0.8.4
-    - nbclient==0.5.3
-    - nbconvert==6.0.7
-    - nbformat==5.1.3
-    - nest-asyncio==1.5.1
-    - notebook==6.3.0
-    - numba==0.53.1
-    - numpy==1.18.5
-    - oauthlib==3.1.0
-    - opt-einsum==3.3.0
-    - packaging==20.9
-    - pandas==1.2.4
-    - pandocfilters==1.4.3
-    - parso==0.8.2
-    - patsy==0.5.1
-    - pexpect==4.8.0
-    - pickleshare==0.7.5
-    - pillow==8.2.0
-    - pluggy==0.13.1
-    - progressbar2==3.53.1
-    - prometheus-client==0.10.1
-    - prompt-toolkit==3.0.18
-    - protobuf==3.15.8
-    - ptyprocess==0.7.0
-    - py==1.10.0
-    - pyasn1==0.4.8
-    - pyasn1-modules==0.2.8
-    - pycparser==2.20
-    - pydotplus==2.0.2
-    - pygam==0.8.0
-    - pygments==2.8.1
-    - pyparsing==2.4.7
-    - pyro-api==0.1.2
-    - pyro-ppl==1.6.0
-    - pyrsistent==0.17.3
-    - pytest==6.2.3
-    - pytest-cov==2.11.1
-    - python-dateutil==2.8.1
-    - graphviz
-    - python-utils==2.5.6
-    - pytz==2021.1
-    - pyyaml==5.4.1
-    - pyzmq==22.0.3
-    - qtconsole==5.0.3
-    - qtpy==1.9.0
-    - requests==2.25.1
-    - requests-oauthlib==1.3.0
-    - rsa==4.7.2
-    - scikit-learn==0.23.2
-    - scipy==1.4.1
-    - seaborn==0.11.1
-    - send2trash==1.5.0
-    - shap==0.37.0
-    - six==1.15.0
-    - slicer==0.0.3
-    - statsmodels==0.12.2
-    - tensorboard==2.5.0
-    - tensorboard-data-server==0.6.1
-    - tensorboard-plugin-wit==1.8.0
-    - tensorflow==2.5.0
-    - tensorflow-estimator==2.5.0
-    - termcolor==1.1.0
-    - terminado==0.9.4
-    - testpath==0.4.4
-    - threadpoolctl==2.1.0
-    - toml==0.10.2
-    - torch==1.8.1
-    - tornado==6.1
-    - tqdm==4.60.0
-    - traitlets==5.0.5
-    - typing-extensions==3.7.4.3
-    - urllib3==1.26.4
-    - wcwidth==0.2.5
-    - webencodings==0.5.1
-    - werkzeug==1.0.1
-    - wheel==0.36.2
-    - widgetsnbextension==3.5.1
-    - wrapt==1.12.1
-    - xgboost==1.4.1
-    - causalml[tf]>=0.10.0


Test patch:
diff --git a/.github/workflows/test-conda-venv-install.yml b/.github/workflows/test-conda-venv-install.yml
deleted file mode 100644
index 9f3d33be..00000000
--- a/.github/workflows/test-conda-venv-install.yml
+++ /dev/null
@@ -1,68 +0,0 @@
-name: Test conda-venv install
-
-on:
-  push:
-    paths:
-      - 'envs/*.yml'
-      - '.github/workflows/test-conda-venv-install.yml'
-
-jobs:
-  build:
-    name: ${{ matrix.os }}${{ matrix.tf-label }}-py${{ matrix.python-version-nd }}
-    runs-on: ${{ matrix.os }}
-
-    defaults:
-      run:
-        shell: bash -l {0}
-
-    strategy:
-      fail-fast: false
-      matrix:
-        os: [ubuntu-latest]
-        python-version: [3.7, 3.8, 3.9]
-        tf-label: ['', '-tf']
-        include:
-          - python-version: 3.7
-            python-version-nd: 37
-          - python-version: 3.8
-            python-version-nd: 38
-          - python-version: 3.9
-            python-version-nd: 39
-          - tf-label: '-tf'
-            tf-label-pip: '[tf]'
-
-    steps:
-      - name: checkout repository
-        uses: actions/checkout@v2
-
-      - name: Display Python version
-        run: python -c "import sys; print(sys.version)"
-
-      - name: create environment
-        uses: conda-incubator/setup-miniconda@v2
-        with:
-          channels: defaults
-          auto-activate-base: false
-          activate-environment: causalml${{ matrix.tf-label }}-py${{ matrix.python-version-nd }}
-          environment-file: envs/environment${{ matrix.tf-label }}-py${{ matrix.python-version-nd }}.yml
-
-      - name: echo conda config
-        run: |
-          conda info
-          conda list
-          conda config --show-sources
-          conda config --show  
-
-      - name: Build
-        run: |
-            pip install -U pip
-            pip install -U setuptools
-            python -m pip install .[test]
-            python setup.py build_ext --inplace
-
-      - name: Test with pytest
-        run: pytest -vs tests/ --cov causalml/
-
-      - name: echo conda env
-        run: |
-          conda env export