Repository: NVIDIA/fsi-samples (language: python)

Issue:
[REVIEW]Change "gquant" to "greenflow"
<!--

Thank you for contributing to gQuant :)

Here are some guidelines to help the review process go smoothly.

1. Please write a description in this text box of the changes that are being
   made.

2. Please ensure that you have written units tests for the changes made/features
   added.

3. There are CI checks in place to enforce that committed code follows our style
   and syntax standards. Please see our contribution guide in `CONTRIBUTING.MD`
   in the project root for more information about the checks we perform and how
   you can run them locally.

4. If you are closing an issue please use one of the automatic closing words as
   noted here: https://help.github.com/articles/closing-issues-using-keywords/

5. If your pull request is not ready for review but you want to make use of the
   continuous integration testing facilities please label it with `[WIP]`.

6. If your pull request is ready to be reviewed without requiring additional
   work on top of it, then remove the `[WIP]` label (if present) and replace
   it with `[REVIEW]`. If assistance is required to complete the functionality,
   for example when the C/C++ code of a feature is complete but Python bindings
   are still required, then add the label `[HELP-REQ]` so that others can triage
   and assist. The additional changes then can be implemented on top of the
   same PR. If the assistance is done by members of the rapidsAI team, then no
   additional actions are required by the creator of the original PR for this,
   otherwise the original author of the PR needs to give permission to the
   person(s) assisting to commit to their personal fork of the project. If that
   doesn't happen then a new PR based on the code of the original PR can be
   opened by the person assisting, which then will be the PR that will be
   merged.

7. Once all work has been done and review has taken place please do not add
   features or make changes out of the scope of those requested by the reviewer
   (doing this just add delays as already reviewed code ends up having to be
   re-reviewed/it is hard to tell what is new etc!). Further, please do not
   rebase your branch on main/force push/rewrite history, doing any of these
   causes the context of any comments made by reviewers to be lost. If
   conflicts occur against main they should be resolved by merging main
   into the branch used for making the pull request.

Many thanks in advance for your cooperation!

-->



Discussion / hints:

Fix patch:
diff --git a/gQuant/CHANGELOG.md b/CHANGELOG.md
similarity index 95%
rename from gQuant/CHANGELOG.md
rename to CHANGELOG.md
index 9c4b070d..97841e8f 100644
--- a/gQuant/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,11 +1,22 @@
 # Changelog
 
-## [v1.0.2](https://github.com/NVIDIA/fsi-samples/tree/v1.0.2) (2021-02-11)
+## [v1.0.3](https://github.com/NVIDIA/fsi-samples/tree/v1.0.3) (2021-02-13)
+
+[Full Changelog](https://github.com/NVIDIA/fsi-samples/compare/v1.0.2...v1.0.3)
+
+**Merged pull requests:**
+
+- \[REVIEW\]Change "gquant" to "greenflow" [\#119](https://github.com/NVIDIA/fsi-samples/pull/119) ([yidong72](https://github.com/yidong72))
+
+## [v1.0.2](https://github.com/NVIDIA/fsi-samples/tree/v1.0.2) (2021-02-12)
 
 [Full Changelog](https://github.com/NVIDIA/fsi-samples/compare/v1.0.1...v1.0.2)
 
 **Merged pull requests:**
 
+- Merge pull request \#116 from rapidsai/develop [\#118](https://github.com/NVIDIA/fsi-samples/pull/118) ([avolkov1](https://github.com/avolkov1))
+- \[REVIEW\]gQuant 1.0.2 [\#117](https://github.com/NVIDIA/fsi-samples/pull/117) ([yidong72](https://github.com/yidong72))
+- \[REVIEW\] update the readme file and version number [\#116](https://github.com/NVIDIA/fsi-samples/pull/116) ([yidong72](https://github.com/yidong72))
 - \[REVIEW\]Upgrade the plugin to JupyterLab 3 [\#114](https://github.com/NVIDIA/fsi-samples/pull/114) ([yidong72](https://github.com/yidong72))
 
 ## [v1.0.1](https://github.com/NVIDIA/fsi-samples/tree/v1.0.1) (2021-01-20)
@@ -118,6 +129,7 @@
 - \[REVIEW\]upgrade to RAPIDS 0.9 [\#57](https://github.com/NVIDIA/fsi-samples/pull/57) ([yidong72](https://github.com/yidong72))
 - \[REVIEW\] change the text for notebook 05 [\#55](https://github.com/NVIDIA/fsi-samples/pull/55) ([yidong72](https://github.com/yidong72))
 - Fix \#50b - Rename notebook folder to notebooks [\#52](https://github.com/NVIDIA/fsi-samples/pull/52) ([miguelusque](https://github.com/miguelusque))
+- Fix \#50 - Rename notebook folder to notebooks [\#51](https://github.com/NVIDIA/fsi-samples/pull/51) ([miguelusque](https://github.com/miguelusque))
 
 ## [v0.2](https://github.com/NVIDIA/fsi-samples/tree/v0.2) (2019-08-16)
 
@@ -138,7 +150,6 @@
 
 **Merged pull requests:**
 
-- Fix \#50 - Rename notebook folder to notebooks [\#51](https://github.com/NVIDIA/fsi-samples/pull/51) ([miguelusque](https://github.com/miguelusque))
 - Fix \#17 - cuIndicator notebook plot widget is too complicated \(WIP\) [\#45](https://github.com/NVIDIA/fsi-samples/pull/45) ([miguelusque](https://github.com/miguelusque))
 - Fix \#39 - Refactor 04\_portfolio\_trade.ipynb notebook [\#44](https://github.com/NVIDIA/fsi-samples/pull/44) ([miguelusque](https://github.com/miguelusque))
 - Merge develop to master [\#43](https://github.com/NVIDIA/fsi-samples/pull/43) ([yidong72](https://github.com/yidong72))
@@ -156,6 +167,7 @@
 - update the build.sh [\#15](https://github.com/NVIDIA/fsi-samples/pull/15) ([yidong72](https://github.com/yidong72))
 - Feature xgb notebook [\#11](https://github.com/NVIDIA/fsi-samples/pull/11) ([yidong72](https://github.com/yidong72))
 - CUQ-5: Mortgage example using gQuant. [\#10](https://github.com/NVIDIA/fsi-samples/pull/10) ([avolkov1](https://github.com/avolkov1))
+- CUQ-5: Mortgage example using  gQuant. [\#9](https://github.com/NVIDIA/fsi-samples/pull/9) ([avolkov1](https://github.com/avolkov1))
 - Feature indicator node [\#8](https://github.com/NVIDIA/fsi-samples/pull/8) ([yidong72](https://github.com/yidong72))
 - Feature mulit assets indicator [\#7](https://github.com/NVIDIA/fsi-samples/pull/7) ([yidong72](https://github.com/yidong72))
 - Update build.sh [\#6](https://github.com/NVIDIA/fsi-samples/pull/6) ([phogan-nvidia](https://github.com/phogan-nvidia))
@@ -180,7 +192,6 @@
 
 - Revert "gQuant34 - Update build.sh to make use of RAPIDS v0.8 container" [\#33](https://github.com/NVIDIA/fsi-samples/pull/33) ([yidong72](https://github.com/yidong72))
 - gQuant34 - Update build.sh to make use of RAPIDS v0.8 container [\#12](https://github.com/NVIDIA/fsi-samples/pull/12) ([miguelusque](https://github.com/miguelusque))
-- CUQ-5: Mortgage example using  gQuant. [\#9](https://github.com/NVIDIA/fsi-samples/pull/9) ([avolkov1](https://github.com/avolkov1))
 - Synch master with develop [\#4](https://github.com/NVIDIA/fsi-samples/pull/4) ([avolkov1](https://github.com/avolkov1))
 - added unit tests for the cuindicator [\#3](https://github.com/NVIDIA/fsi-samples/pull/3) ([yidong72](https://github.com/yidong72))
 - CUQ-21: Improving tutorials for gQuant [\#2](https://github.com/NVIDIA/fsi-samples/pull/2) ([avolkov1](https://github.com/avolkov1))
diff --git a/README.md b/README.md
index 9ad180b9..caf42ae4 100644
--- a/README.md
+++ b/README.md
@@ -2,5 +2,7 @@
 
 Repo Index
 
-1. [gGuant](gQuant) -  A graph computation toolkit that helps you to organize the workflows in graph computation.
+1. [greenflow](greenflow) -  A graph computation toolkit that helps you to organize the workflows in graph computation.
+2. [greenflowlab](greenflowlab) - A JupyterLab plugin that provides the UI interface for `greenflow`.
+3. [gGuant](gQuant) -  An external plugin with a set of nodes for quantitative analyst tasks, built on top of the [RAPIDS AI](https://rapids.ai/) project, [Numba](https://numba.pydata.org/), and [Dask](https://dask.org/).
 
diff --git a/gQuant/.gitignore b/gQuant/.gitignore
index b06d2ab7..6fb2e10f 100644
--- a/gQuant/.gitignore
+++ b/gQuant/.gitignore
@@ -5,8 +5,8 @@ __pycache__
 dask-worker-space/
 dist/
 build/
-gquant.egg-info/
+greenflow.egg-info/
 *.swp
 docker/Dockerfile.Rapids
-docker/gQuant
+docker/greenflow
 node_modules
diff --git a/gQuant/README.md b/gQuant/README.md
index 6cb0cc90..c8627d80 100644
--- a/gQuant/README.md
+++ b/gQuant/README.md
@@ -1,63 +1,57 @@
-# gQuant - Graph Computation Tool
-
-**NOTE:** For the latest stable [README.md](https://github.com/rapidsai/gquant/blob/main/README.md) ensure you are on the `main` branch.
+# Greenflow Plugins for FSI Examples
 
 
 ## What's Inside This Repo
 
-There are a few projects inside this repo:
-
-1. [gquant](gquant) -  A graph computation toolkit that helps you to organize the workflows in graph computation.
-2. [gquantlab](gquantlab) - A JupyterLab plugin that provides the UI interface for `gquant`.
-3. [plugins](plugins) - A few gquant plugins with example notebooks. 
-    1. [simple_example](plugins/simple_example) - A simple external plugin example for gQuant.
-    2. [rapids_plugin](plugins/rapids_plugin) - An external plugin with a set of nodes for quantitative analyst tasks, built on top of the [RAPIDS AI](https://rapids.ai/) project, [Numba](https://numba.pydata.org/), and [Dask](https://dask.org/).
+. [plugins](plugins) - A few greenflow plugins with example notebooks. 
+    1. [simple_example](plugins/simple_example) - A simple external plugin example for greenflow.
+    2. [gquant_plugin](plugins/gQuant_plugin) - An external plugin with a set of nodes for quantitative analyst tasks, built on top of the [RAPIDS AI](https://rapids.ai/) project, [Numba](https://numba.pydata.org/), and [Dask](https://dask.org/).
     3. [nemo_plugin](plugins/nemo_plugin) - An external plugin with a set of nodes that wraps the [NeMo library](https://github.com/NVIDIA/NeMo) . 
 
 These projects are all released as independent Python projects with their own `setup.py` files. 
 
 ## Screenshots
 ![Tuturial](tutorial.gif "Tutorial")
-![Quick Demo](gquantlab_demo.gif "Demo")
+![Quick Demo](greenflowlab_demo.gif "Demo")
 
 
 ## Binary installation
 
 ### Install the gGuant 
-To install the gQuant graph computation library, run:
+To install the greenflow graph computation library, run:
 ```bash
-pip install gquant
+pip install greenflow
 ```
-Or install `gquant` at the gQuant directory:
+Or install `greenflow` at the greenflow directory:
 ```bash
 pip install .
 ```
 
-### Install the gQuantLab JupyterLab plugin
-To install `gquantlab` JupyterLab plugin, make sure `nodejs` of version [12^14^15] is installed. E.g.:
+### Install the greenflowLab JupyterLab plugin
+To install `greenflowlab` JupyterLab plugin, make sure `nodejs` of version [12^14^15] is installed. E.g.:
 ```bash
 conda install -c conda-forge nodejs=12.4.0
 ```
-Then install the `gquantlab`:
+Then install the `greenflowlab`:
 ```bash
-pip install gquantlab
+pip install greenflowlab
 ```
-Or install `gquantlab` at the gquantlab directory:
+Or install `greenflowlab` at the greenflowlab directory:
 ```bash
 pip install .
 ```
 
-### Install the gQuant plugins
+### Install the greenflow plugins
 
 Under the plugin root directory, install the plugin as normal python packages.
 ```bash
 pip install .
 ```
 
-Note, gQuant node plugins can be registered in two ways: 
+Note, greenflow node plugins can be registered in two ways: 
 
   1. (Recommended)Write a external plugin using 'entry point' to register it. Check the `plugins` directory for details
-  2. Register the plugin in `gquantrc` file. Check the `System environment` for details
+  2. Register the plugin in `greenflowrc` file. Check the `System environment` for details
 
 
 ## Docker Install
@@ -65,13 +59,13 @@ Note, gQuant node plugins can be registered in two ways:
 - Build and run the container:
 
 ```bash
-$ cd gQuant/docker && . build.sh
+$ cd greenflow/docker && . build.sh
 ```
-When building the container, you can run gQuant in two modes: dev or prod. In the dev mode, please check the README file in `gquantlab` directory to install the plugins and Python libraries. 
+When building the container, you can run greenflow in two modes: dev or prod. In the dev mode, please check the README file in `greenflowlab` directory to install the plugins and Python libraries. 
 
 In the production mode, you can launch the container by following command and start to use it 
 ```bash
-$ docker run --runtime=nvidia --rm -it -p 8888:8888 -p 8787:8787 -p 8786:8786 gquant/gquant:[tag from the build]
+$ docker run --runtime=nvidia --rm -it -p 8888:8888 -p 8787:8787 -p 8786:8786 greenflow/greenflow:[tag from the build]
 ```
 
 ## Example notebooks
@@ -83,18 +77,18 @@ Example notebooks, tutorial showcasing, can be found in __notebooks__ folder in
 
 There are a few system environment that the user can overwrite. 
 
-The custom module files are specified in the `gquantrc` file. `GQUANT_CONFIG` enviroment variable points to the location of this file. By default, it points to 
-`$CWD\gquantrc`. 
+The custom module files are specified in the `greenflowrc` file. `GREENFLOW_CONFIG` enviroment variable points to the location of this file. By default, it points to 
+`$CWD\greenflowrc`. 
 
-In the example `gquantrc`, system environment variable `MODULEPATH` is used to point to the paths of the module files.
+In the example `greenflowrc`, system environment variable `MODULEPATH` is used to point to the paths of the module files.
 To start the jupyterlab, please make sure `MODULEPATH` is set properly. 
 
-For example, if you want to start the jupyterlab in the gQuant root directory.
+For example, if you want to start the jupyterlab in the greenflow root directory.
 ```bash
 MODULEPATH=$PWD/modules jupyter-lab --allow-root --ip=0.0.0.0 --no-browser --NotebookApp.token=''
 ```
 
-Or, if you want to start the jupyterlab in the gquantlab directory.
+Or, if you want to start the jupyterlab in the greenflowlab directory.
 ```bash
-GQUANT_CONFIG=../gquantrc MODULEPATH=$PWD/../modules jupyter-lab --allow-root --ip=0.0.0.0 --no-browser --NotebookApp.token=''
+GREENFLOW_CONFIG=../greenflowrc MODULEPATH=$PWD/../modules jupyter-lab --allow-root --ip=0.0.0.0 --no-browser --NotebookApp.token=''
 ```
diff --git a/gQuant/ci/checks/changelog.sh b/gQuant/ci/checks/changelog.sh
index 2191c5b7..27e2a4e2 100755
--- a/gQuant/ci/checks/changelog.sh
+++ b/gQuant/ci/checks/changelog.sh
@@ -1,7 +1,7 @@
 #!/bin/bash
 # Copyright (c) 2020, NVIDIA CORPORATION.
 ###########################
-# gQuant CHANGELOG Tester #
+# greenflow CHANGELOG Tester #
 ###########################
 
 # Checkout main for comparison
diff --git a/gQuant/ci/checks/style.sh b/gQuant/ci/checks/style.sh
index 2f913a17..a8567ea0 100755
--- a/gQuant/ci/checks/style.sh
+++ b/gQuant/ci/checks/style.sh
@@ -1,7 +1,7 @@
 #!/bin/bash
 # Copyright (c) 2020, NVIDIA CORPORATION.
 ################################################################################
-# gQuant Style Tester
+# greenflow Style Tester
 ################################################################################
 
 # Ignore errors and set path
diff --git a/gQuant/ci/cpu/build.sh b/gQuant/ci/cpu/build.sh
index de2e5081..cd4ff49e 100755
--- a/gQuant/ci/cpu/build.sh
+++ b/gQuant/ci/cpu/build.sh
@@ -1,7 +1,7 @@
 #!/usr/bin/env bash
 # Copyright (c) 2020, NVIDIA CORPORATION.
 ################################################################################
-# gQuant cpu build
+# greenflow cpu build
 ################################################################################
 set -e
 
@@ -55,7 +55,7 @@ conda config --set ssl_verify False
 # BUILD - Conda package build
 ################################################################################
 
-gpuci_conda_retry build conda/recipes/gquant --python=${PYTHON}
+gpuci_conda_retry build conda/recipes/greenflow --python=${PYTHON}
 
 ################################################################################
 # UPLOAD - Conda package
diff --git a/gQuant/ci/cpu/upload.sh b/gQuant/ci/cpu/upload.sh
index 0e877201..75c6bbc6 100755
--- a/gQuant/ci/cpu/upload.sh
+++ b/gQuant/ci/cpu/upload.sh
@@ -41,15 +41,15 @@ fi
 ################################################################################
 
 gpuci_logger "Get conda file output locations"
-export GQAUNT_FILE=`conda build conda/recipes/gquant --python=$PYTHON --output`
+export GQAUNT_FILE=`conda build conda/recipes/greenflow --python=$PYTHON --output`
 
 ################################################################################
 # UPLOAD - Conda packages
 ################################################################################
 
-if [ "$UPLOAD_GQUANT" == "1" ]; then
+if [ "$UPLOAD_GREENFLOW" == "1" ]; then
   test -e ${GQAUNT_FILE}
-  echo "Upload gquant"
+  echo "Upload greenflow"
   echo ${GQAUNT_FILE}
   gpuci_retry anaconda -t ${MY_UPLOAD_KEY} upload -u ${CONDA_USERNAME:-rapidsai} ${LABEL_OPTION} --force ${GQAUNT_FILE}
 fi
diff --git a/gQuant/ci/gpu/build.sh b/gQuant/ci/gpu/build.sh
index 15cb3b31..bebeb6d7 100755
--- a/gQuant/ci/gpu/build.sh
+++ b/gQuant/ci/gpu/build.sh
@@ -1,7 +1,7 @@
 #!/bin/bash
 # Copyright (c) 2020, NVIDIA CORPORATION.
 ###########################################
-# gQuant GPU build and test script for CI #
+# greenflow GPU build and test script for CI #
 ###########################################
 set -e
 NUMARGS=$#
@@ -56,22 +56,22 @@ conda config --show-sources
 conda list --show-channel-urls
 
 ################################################################################
-# BUILD - Build gQuant
+# BUILD - Build greenflow
 ################################################################################
 
-gpuci_logger "Build gQuant"
+gpuci_logger "Build greenflow"
 cd $WORKSPACE
 python -m pip install -e .
 
 
 ################################################################################
-# TEST - Run py.tests for gQuant
+# TEST - Run py.tests for greenflow
 ################################################################################
 
 if hasArg --skip-tests; then
     gpuci_logger "Skipping Tests"
 else
-    gpuci_logger "Python py.test for gQuant"
+    gpuci_logger "Python py.test for greenflow"
     cd $WORKSPACE
-    py.test -vs --cache-clear --junitxml=${WORKSPACE}/junit-gquant.xml --cov-config=.coveragerc --cov=gquant --cov-report=xml:${WORKSPACE}/gquant-coverage.xml --cov-report term tests/
+    py.test -vs --cache-clear --junitxml=${WORKSPACE}/junit-greenflow.xml --cov-config=.coveragerc --cov=greenflow --cov-report=xml:${WORKSPACE}/greenflow-coverage.xml --cov-report term tests/
 fi
diff --git a/gQuant/conda/recipes/gquant/build.sh b/gQuant/conda/recipes/gquant/build.sh
deleted file mode 100644
index 06f5d6ee..00000000
--- a/gQuant/conda/recipes/gquant/build.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/usr/bin/env bash
-
-python setup.py install --single-version-externally-managed --record=record.txt
diff --git a/gQuant/conda/recipes/gquant/meta.yaml b/gQuant/conda/recipes/gquant/meta.yaml
deleted file mode 100644
index 33a75e0b..00000000
--- a/gQuant/conda/recipes/gquant/meta.yaml
+++ /dev/null
@@ -1,46 +0,0 @@
-# Copyright (c) 2019, NVIDIA CORPORATION.
-
-# Usage:
-#   conda build -c conda-forge -c defaults .
-{% set version = environ.get('GIT_DESCRIBE_TAG', '0.0.0.dev').lstrip('v') + environ.get('VERSION_SUFFIX', '') %}
-{% set minor_version =  version.split('.')[0] + '.' + version.split('.')[1] %}
-{% set git_revision_count=environ.get('GIT_DESCRIBE_NUMBER', 0) %}
-{% set py_version=environ.get('CONDA_PY', 36) %}
-{% set py_version=environ.get('RAPIDS_VERSION', '0.10') %}
-package:
-  name: gquant
-  version: {{ version }}
-
-source:
-  path: ../../..
-
-build:
-  number: {{ git_revision_count }}
-  string: py{{ py_version }}_{{ git_revision_count }}
-  script_env:
-    - VERSION_SUFFIX
-    - RAPIDS_VERSION
-
-requirements:
-  build:
-    - python x.x
-    - setuptools
-  run:
-    - python x.x
-    - cudf ={{ rapids_version }}
-    - dask-cudf ={{ rapids_version }}
-    - networkx
-    - bqplot=0.11.5
-    - xgboost
-
-test:
-  imports:
-    - gquant
-    - gquant.dataframe_flow
-
-
-about:
-  home: http://rapids.ai/
-  license: Apache-2.0
-  license_file: ../../../LICENSE
-  summary: gquant library
diff --git a/gQuant/docker/build.sh b/gQuant/docker/build.sh
index b2b75ef0..e9c1618c 100755
--- a/gQuant/docker/build.sh
+++ b/gQuant/docker/build.sh
@@ -6,7 +6,7 @@ USERID=$(id -u)
 USERGID=$(id -g)
 
 D_FILE=${D_FILE:='Dockerfile.dev'}
-echo "Building gQuant container..."
+echo "Building greenflow container..."
 
 echo -e "\nPlease, select your operating system:\n" \
     "- '1' for Ubuntu 16.04\n" \
@@ -66,45 +66,45 @@ read -p "Enable dev model [y/n]:" DEV_MODE
 case $DEV_MODE in
     y)
 	echo "Dev mode"
-    read -r -d '' INSTALL_GQUANT<< EOM
-## copy gquantlab extension
-ADD --chown=$USERID:$USERGID ./gQuant /home/quant/gQuant
-WORKDIR /home/quant/gQuant
+    read -r -d '' INSTALL_GREENFLOW<< EOM
+## copy greenflowlab extension
+ADD --chown=$USERID:$USERGID ./greenflow /home/quant/greenflow
+WORKDIR /home/quant/greenflow
 EOM
     MODE_STR="dev"
 	;;
     *)
 	echo "Production mode"
-    read -r -d '' INSTALL_GQUANT<< EOM
-## install gquantlab extension
-ADD --chown=$USERID:$USERGID ./gQuant /home/quant/gQuant
+    read -r -d '' INSTALL_GREENFLOW<< EOM
+## install greenflowlab extension
+ADD --chown=$USERID:$USERGID ./greenflow /home/quant/greenflow
 RUN pip install .
-WORKDIR /home/quant/gQuant/gquantlab
+WORKDIR /home/quant/greenflow/greenflowlab
 RUN pip install .
 RUN jupyter lab build
-WORKDIR /home/quant/gQuant
-ENTRYPOINT MODULEPATH=\$HOME/gQuant/modules jupyter-lab --allow-root --ip=0.0.0.0 --no-browser --NotebookApp.token=''
+WORKDIR /home/quant/greenflow
+ENTRYPOINT MODULEPATH=\$HOME/greenflow/modules jupyter-lab --allow-root --ip=0.0.0.0 --no-browser --NotebookApp.token=''
 EOM
     MODE_STR="prod"
 	;;
 esac
 
-mkdir -p gQuant
-cp -r ../gquant ./gQuant
-cp -r ../modules ./gQuant
-cp -r ../taskgraphs ./gQuant
-cp ../setup.cfg ./gQuant
-cp ../setup.py ./gQuant
-cp ../LICENSE ./gQuant
-cp ../download_data.sh ./gQuant
-cp ../gquantrc ./gQuant
-cp ../README.md ./gQuant
-rsync -av --progress ../notebooks ./gQuant --exclude data --exclude .cache --exclude many-small --exclude storage --exclude dask-worker-space --exclude __pycache__
-rsync -av --progress ../gquantlab ./gQuant --exclude node_modules 
-
-gquant_ver=$(grep version gQuant/setup.py | sed "s/^.*version='\([^;]*\)'.*/\1/")
+mkdir -p greenflow
+cp -r ../greenflow ./greenflow
+cp -r ../modules ./greenflow
+cp -r ../taskgraphs ./greenflow
+cp ../setup.cfg ./greenflow
+cp ../setup.py ./greenflow
+cp ../LICENSE ./greenflow
+cp ../download_data.sh ./greenflow
+cp ../greenflowrc ./greenflow
+cp ../README.md ./greenflow
+rsync -av --progress ../notebooks ./greenflow --exclude data --exclude .cache --exclude many-small --exclude storage --exclude dask-worker-space --exclude __pycache__
+rsync -av --progress ../greenflowlab ./greenflow --exclude node_modules 
+
+greenflow_ver=$(grep version greenflow/setup.py | sed "s/^.*version='\([^;]*\)'.*/\1/")
 CONTAINER="nvidia/cuda:${CUDA_STR}-runtime-${OS_STR}"
-D_CONT=${D_CONT:="gquant/gquant:${gquant_ver}-${CUDA_STR}_${OS_STR}_${RAPIDS_VERSION}_${MODE_STR}"}
+D_CONT=${D_CONT:="greenflow/greenflow:${greenflow_ver}-${CUDA_STR}_${OS_STR}_${RAPIDS_VERSION}_${MODE_STR}"}
 
 
 gen_nemo_patches
@@ -134,7 +134,7 @@ ARG USER_GID=$USERGID
 # Create the user
 RUN groupadd --gid \$USER_GID \$USERNAME     && useradd --uid \$USER_UID --gid \$USER_GID -m \$USERNAME     && apt-get update     && apt-get install -y sudo     && echo \$USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/\$USERNAME     && chmod 0440 /etc/sudoers.d/\$USERNAME
 
-############ here is done for user gquant #########
+############ here is done for user greenflow #########
 USER \$USERNAME
 
 ENV PATH="/home/quant/miniconda3/bin:\${PATH}"
@@ -186,13 +186,13 @@ RUN git apply nemo.patch && \
 RUN conda install -y ruamel.yaml
 RUN conda install -c conda-forge -y cloudpickle
 
-RUN mkdir -p /home/quant/gQuant
-WORKDIR /home/quant/gQuant
+RUN mkdir -p /home/quant/greenflow
+WORKDIR /home/quant/greenflow
 
 RUN pip install streamz && \
     pip uninstall -y dataclasses
 
-$INSTALL_GQUANT
+$INSTALL_GREENFLOW
 
 
 EOF
diff --git a/gQuant/gquantlab_demo.gif b/gQuant/greenflowlab_demo.gif
similarity index 100%
rename from gQuant/gquantlab_demo.gif
rename to gQuant/greenflowlab_demo.gif
diff --git a/gQuant/plugins/rapids_plugin/README.md b/gQuant/plugins/gquant_plugin/README.md
similarity index 66%
rename from gQuant/plugins/rapids_plugin/README.md
rename to gQuant/plugins/gquant_plugin/README.md
index 6f556f54..6c977fc4 100644
--- a/gQuant/plugins/rapids_plugin/README.md
+++ b/gQuant/plugins/gquant_plugin/README.md
@@ -1,5 +1,5 @@
-## gQuant RAPIDS Plugin Example
-This is a example to show how to write an external gQuant RAPIDS plugin. gQuant take advantage of the `entry point` inside the `setup.py` file to register the plugin. gQuant can discover all the plugins that has the entry point group name `gquant.plugin`. Check the `setup.py` file to see details.
+## greenflow RAPIDS Plugin Example
+This is a example to show how to write an external greenflow RAPIDS plugin. greenflow take advantage of the `entry point` inside the `setup.py` file to register the plugin. greenflow can discover all the plugins that has the entry point group name `greenflow.plugin`. Check the `setup.py` file to see details.
 
 The examples range from simple accelerated calculation of technical trading indicators through defining workflows for interactively developing trading strategies and automating many typical tasks.
 
@@ -29,26 +29,26 @@ bash download_data.sh
 
 ```
 
-### Install the gQuant 
-To install the gQuant graph computation library, run:
+### Install the greenflow 
+To install the greenflow graph computation library, run:
 ```bash
-pip install gquant
+pip install greenflow
 ```
-Or install `gquant` at the gquant directory:
+Or install `greenflow` at the greenflow directory:
 ```bash
 pip install .
 ```
 
-### Install the gquantlab JupyterLab plugin
-To install `gquantlab` JupyterLab plugin, make sure `nodejs` of version [12^14^15] is installed. E.g:
+### Install the greenflowlab JupyterLab plugin
+To install `greenflowlab` JupyterLab plugin, make sure `nodejs` of version [12^14^15] is installed. E.g:
 ```bash
 conda install -c conda-forge nodejs=12.4.0
 ```
-Then install the `gquantlab`:
+Then install the `greenflowlab`:
 ```bash
-pip install gquantlab
+pip install greenflowlab
 ```
-Or install `gquantlab` at the gquantlab directory:
+Or install `greenflowlab` at the greenflowlab directory:
 ```bash
 pip install .
 ```
@@ -66,5 +66,5 @@ pip install .
 ### Launch the Jupyter lab
 After launching the JupyterLab by,
 ```bash
-jupyter-lab --allow-root --ip=0.0.0.0 --no-browser --NotebookApp.token=''
+MODULEPATH=modules jupyter-lab --allow-root --ip=0.0.0.0 --no-browser --NotebookApp.token=''
 ```
diff --git a/gQuant/plugins/rapids_plugin/download_data.sh b/gQuant/plugins/gquant_plugin/download_data.sh
similarity index 100%
rename from gQuant/plugins/rapids_plugin/download_data.sh
rename to gQuant/plugins/gquant_plugin/download_data.sh
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/__init__.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/__init__.py
similarity index 90%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/__init__.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/__init__.py
index 1ad7a348..840e3bdd 100644
--- a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/__init__.py
+++ b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/__init__.py
@@ -1,12 +1,13 @@
 from .client import validation, display  # noqa: F401
-from gquant.dataframe_flow._node_flow import register_validator
-from gquant.dataframe_flow._node_flow import register_copy_function
-from gquant.dataframe_flow._node_flow import register_cleanup
+from greenflow.dataframe_flow._node_flow import register_validator
+from greenflow.dataframe_flow._node_flow import register_copy_function
+from greenflow.dataframe_flow._node_flow import register_cleanup
 import traceback
 import cudf
 import dask_cudf
 import pandas
 import numpy as np
+import dask.dataframe
 
 
 def _validate_df(df_to_val, ref_cols, obj):
@@ -88,7 +89,7 @@ def copy_dask_cudf(df_obj):
 def clean_dask(ui_clean):
     """
     ui_clean is True if the client send
-    'clean' command to the gQuant backend
+    'clean' command to the greenflow backend
     """
     if ui_clean:
         import dask.distributed
@@ -102,9 +103,11 @@ def clean_dask(ui_clean):
 register_validator(cudf.DataFrame, _validate_df)
 register_validator(dask_cudf.DataFrame, _validate_df)
 register_validator(pandas.DataFrame, _validate_df)
+register_validator(dask.dataframe.DataFrame, _validate_df)
 
 register_copy_function(cudf.DataFrame, copy_df)
 register_copy_function(dask_cudf.DataFrame, copy_dask_cudf)
 register_copy_function(pandas.DataFrame, copy_df)
+register_copy_function(dask.dataframe.DataFrame, copy_dask_cudf)
 
 register_cleanup('cleandask', clean_dask)
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/_port_type_node.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/_port_type_node.py
similarity index 95%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/_port_type_node.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/_port_type_node.py
index 751c6b22..82206368 100644
--- a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/_port_type_node.py
+++ b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/_port_type_node.py
@@ -1,4 +1,4 @@
-from gquant.dataframe_flow.portsSpecSchema import (PortsSpecSchema,
+from greenflow.dataframe_flow.portsSpecSchema import (PortsSpecSchema,
                                                    MetaData,
                                                    NodePorts)
 import cudf
@@ -104,9 +104,9 @@ def addition_meta_setup(self, addition, required={}):
         }
         # additional ports
         output_cols = {
-            self.OUTPUT_PORT_NAME: addition
+            self.OUTPUT_PORT_NAME: col_from_inport
         }
-        output_cols[self.OUTPUT_PORT_NAME].update(col_from_inport)
+        output_cols[self.OUTPUT_PORT_NAME].update(addition)
         meta_data = MetaData(inports=input_cols, outports=output_cols)
         return meta_data
 
@@ -148,7 +148,7 @@ def load_cache(self, filename=None) -> dict:
         returns: dict
             dictionary of the output from this node
         """
-        cache_dir = os.getenv('GQUANT_CACHE_DIR', self.cache_dir)
+        cache_dir = os.getenv('GREENFLOW_CACHE_DIR', self.cache_dir)
         if filename is None:
             filename = cache_dir + '/' + self.uid + '.hdf5'
 
@@ -184,7 +184,7 @@ def save_cache(self, output_data: dict):
         :param output_data: The output from :meth:`process`. For saving to hdf
             requires that the dataframe(s) have `to_hdf` method.
         '''
-        cache_dir = os.getenv('GQUANT_CACHE_DIR', self.cache_dir)
+        cache_dir = os.getenv('GREENFLOW_CACHE_DIR', self.cache_dir)
         os.makedirs(cache_dir, exist_ok=True)
         filename = cache_dir + '/' + self.uid + '.hdf5'
         with pd.HDFStore(filename, mode='w') as hf:
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/analysis/__init__.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/analysis/__init__.py
similarity index 100%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/analysis/__init__.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/analysis/__init__.py
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/analysis/barPlotNode.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/analysis/barPlotNode.py
similarity index 97%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/analysis/barPlotNode.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/analysis/barPlotNode.py
index df4aeca6..6ff4a062 100644
--- a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/analysis/barPlotNode.py
+++ b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/analysis/barPlotNode.py
@@ -1,9 +1,9 @@
-from gquant.dataframe_flow import Node
+from greenflow.dataframe_flow import Node
 from bqplot import Axis, LinearScale, DateScale, Figure, OHLC, Bars, Tooltip
 import cupy as cp
 import cudf
 import dask_cudf
-from gquant.dataframe_flow.portsSpecSchema import ConfSchema, MetaData
+from greenflow.dataframe_flow.portsSpecSchema import ConfSchema, MetaData
 from .._port_type_node import _PortTypesMixin
 
 
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/analysis/cumReturnNode.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/analysis/cumReturnNode.py
similarity index 96%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/analysis/cumReturnNode.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/analysis/cumReturnNode.py
index 42c96e48..c95de500 100644
--- a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/analysis/cumReturnNode.py
+++ b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/analysis/cumReturnNode.py
@@ -1,8 +1,8 @@
-from gquant.dataframe_flow import Node
+from greenflow.dataframe_flow import Node
 from bqplot import Axis, LinearScale, DateScale, Figure, Lines, PanZoom
 import dask_cudf
 import cudf
-from gquant.dataframe_flow.portsSpecSchema import ConfSchema, MetaData
+from greenflow.dataframe_flow.portsSpecSchema import ConfSchema, MetaData
 from .._port_type_node import _PortTypesMixin
 
 
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/analysis/exportXGBoostNode.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/analysis/exportXGBoostNode.py
similarity index 92%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/analysis/exportXGBoostNode.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/analysis/exportXGBoostNode.py
index 15a45609..7d608a7a 100644
--- a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/analysis/exportXGBoostNode.py
+++ b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/analysis/exportXGBoostNode.py
@@ -1,8 +1,8 @@
-from gquant.dataframe_flow import Node
-from gquant.dataframe_flow.portsSpecSchema import (ConfSchema, MetaData,
+from greenflow.dataframe_flow import Node
+from greenflow.dataframe_flow.portsSpecSchema import (ConfSchema, MetaData,
                                                    NodePorts, PortsSpecSchema)
 from xgboost import Booster
-from gquant.dataframe_flow.util import get_file_path
+from greenflow.dataframe_flow.util import get_file_path
 
 
 class XGBoostExportNode(Node):
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/analysis/importanceCurve.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/analysis/importanceCurve.py
similarity index 96%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/analysis/importanceCurve.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/analysis/importanceCurve.py
index db4a374b..b14f32b8 100644
--- a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/analysis/importanceCurve.py
+++ b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/analysis/importanceCurve.py
@@ -1,6 +1,6 @@
-from gquant.dataframe_flow import Node
+from greenflow.dataframe_flow import Node
 from bqplot import Axis, LinearScale,  Figure, OrdinalScale, Bars
-from gquant.dataframe_flow.portsSpecSchema import (ConfSchema, NodePorts,
+from greenflow.dataframe_flow.portsSpecSchema import (ConfSchema, NodePorts,
                                                    MetaData,
                                                    PortsSpecSchema)
 from xgboost import Booster
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/analysis/linePlotNode.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/analysis/linePlotNode.py
similarity index 97%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/analysis/linePlotNode.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/analysis/linePlotNode.py
index 14054007..bfd092c0 100644
--- a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/analysis/linePlotNode.py
+++ b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/analysis/linePlotNode.py
@@ -1,6 +1,6 @@
-from gquant.dataframe_flow import Node
+from greenflow.dataframe_flow import Node
 from bqplot import Axis, LinearScale, DateScale, Figure, Lines, PanZoom
-from gquant.dataframe_flow.portsSpecSchema import ConfSchema, MetaData
+from greenflow.dataframe_flow.portsSpecSchema import ConfSchema, MetaData
 import cudf
 import dask_cudf
 from .._port_type_node import _PortTypesMixin
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/analysis/outCsvNode.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/analysis/outCsvNode.py
similarity index 94%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/analysis/outCsvNode.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/analysis/outCsvNode.py
index 76371e2d..758ea2d8 100644
--- a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/analysis/outCsvNode.py
+++ b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/analysis/outCsvNode.py
@@ -1,7 +1,7 @@
-from gquant.dataframe_flow import Node
+from greenflow.dataframe_flow import Node
 import dask_cudf
-from gquant.dataframe_flow.util import get_file_path
-from gquant.dataframe_flow.portsSpecSchema import ConfSchema
+from greenflow.dataframe_flow.util import get_file_path
+from greenflow.dataframe_flow.portsSpecSchema import ConfSchema
 from .._port_type_node import _PortTypesMixin
 
 
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/analysis/rocCurveNode.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/analysis/rocCurveNode.py
similarity index 97%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/analysis/rocCurveNode.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/analysis/rocCurveNode.py
index ec9670d4..f65f0713 100644
--- a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/analysis/rocCurveNode.py
+++ b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/analysis/rocCurveNode.py
@@ -1,8 +1,8 @@
-from gquant.dataframe_flow import Node
+from greenflow.dataframe_flow import Node
 from bqplot import Axis, LinearScale,  Figure, Lines, PanZoom
 import dask_cudf
 import cudf
-from gquant.dataframe_flow.portsSpecSchema import (ConfSchema, PortsSpecSchema,
+from greenflow.dataframe_flow.portsSpecSchema import (ConfSchema, PortsSpecSchema,
                                                    MetaData)
 from .._port_type_node import _PortTypesMixin
 from sklearn import metrics
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/analysis/scatterPlotNode.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/analysis/scatterPlotNode.py
similarity index 98%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/analysis/scatterPlotNode.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/analysis/scatterPlotNode.py
index 4b891b71..f94a2a54 100644
--- a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/analysis/scatterPlotNode.py
+++ b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/analysis/scatterPlotNode.py
@@ -1,9 +1,9 @@
-from gquant.dataframe_flow import Node
+from greenflow.dataframe_flow import Node
 from bqplot import (Axis, LinearScale,  Figure,
                     DateScale, ColorScale, ColorAxis, Scatter)
 import dask_cudf
 import cudf
-from gquant.dataframe_flow.portsSpecSchema import ConfSchema, MetaData
+from greenflow.dataframe_flow.portsSpecSchema import ConfSchema, MetaData
 from .._port_type_node import _PortTypesMixin
 
 __all__ = ["ScatterPlotNode"]
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/analysis/sharpeRatioNode.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/analysis/sharpeRatioNode.py
similarity index 94%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/analysis/sharpeRatioNode.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/analysis/sharpeRatioNode.py
index 5dc771eb..83d40957 100644
--- a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/analysis/sharpeRatioNode.py
+++ b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/analysis/sharpeRatioNode.py
@@ -1,7 +1,7 @@
-from gquant.dataframe_flow import Node
+from greenflow.dataframe_flow import Node
 import math
 import dask_cudf
-from gquant.dataframe_flow.portsSpecSchema import ConfSchema, MetaData
+from greenflow.dataframe_flow.portsSpecSchema import ConfSchema, MetaData
 from .._port_type_node import _PortTypesMixin
 
 
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/cache.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/cache.py
similarity index 100%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/cache.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/cache.py
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/client.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/client.py
similarity index 93%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/client.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/client.py
index b166146b..52ed89ee 100644
--- a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/client.py
+++ b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/client.py
@@ -26,3 +26,4 @@
 display['cudf.core.dataframe.DataFrame'] = display_fun
 display['dask_cudf.core.DataFrame'] = display_fun
 display['pandas.core.frame.DataFrame'] = display_fun
+display['dask.dataframe.core.DataFrame'] = display_fun
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/cuindicator/__init__.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/cuindicator/__init__.py
similarity index 100%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/cuindicator/__init__.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/cuindicator/__init__.py
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/cuindicator/ewm.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/cuindicator/ewm.py
similarity index 100%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/cuindicator/ewm.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/cuindicator/ewm.py
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/cuindicator/frac_diff.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/cuindicator/frac_diff.py
similarity index 100%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/cuindicator/frac_diff.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/cuindicator/frac_diff.py
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/cuindicator/indicator.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/cuindicator/indicator.py
similarity index 100%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/cuindicator/indicator.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/cuindicator/indicator.py
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/cuindicator/pewm.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/cuindicator/pewm.py
similarity index 100%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/cuindicator/pewm.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/cuindicator/pewm.py
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/cuindicator/rolling.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/cuindicator/rolling.py
similarity index 100%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/cuindicator/rolling.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/cuindicator/rolling.py
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/cuindicator/util.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/cuindicator/util.py
similarity index 100%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/cuindicator/util.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/cuindicator/util.py
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/cuindicator/windows.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/cuindicator/windows.py
similarity index 100%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/cuindicator/windows.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/cuindicator/windows.py
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/dataloader/__init__.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/dataloader/__init__.py
similarity index 100%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/dataloader/__init__.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/dataloader/__init__.py
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/dataloader/classificationGenerator.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/dataloader/classificationGenerator.py
similarity index 98%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/dataloader/classificationGenerator.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/dataloader/classificationGenerator.py
index 224e2d31..cbe26b96 100644
--- a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/dataloader/classificationGenerator.py
+++ b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/dataloader/classificationGenerator.py
@@ -1,5 +1,5 @@
-from gquant.dataframe_flow import Node
-from gquant.dataframe_flow.portsSpecSchema import (PortsSpecSchema,
+from greenflow.dataframe_flow import Node
+from greenflow.dataframe_flow.portsSpecSchema import (PortsSpecSchema,
                                                    NodePorts,
                                                    MetaData,
                                                    ConfSchema)
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/dataloader/csvStockLoader.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/dataloader/csvStockLoader.py
similarity index 96%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/dataloader/csvStockLoader.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/dataloader/csvStockLoader.py
index ad6f6482..27b37c31 100644
--- a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/dataloader/csvStockLoader.py
+++ b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/dataloader/csvStockLoader.py
@@ -1,12 +1,12 @@
-from gquant.dataframe_flow import Node
-from gquant.dataframe_flow.portsSpecSchema import (PortsSpecSchema,
+from greenflow.dataframe_flow import Node
+from greenflow.dataframe_flow.portsSpecSchema import (PortsSpecSchema,
                                                    NodePorts,
                                                    MetaData,
                                                    ConfSchema)
 import cudf
 import dask_cudf
 import pandas as pd
-from gquant.dataframe_flow.util import get_file_path
+from greenflow.dataframe_flow.util import get_file_path
 from .._port_type_node import _PortTypesMixin
 
 CUDF_PORT_NAME = 'cudf_out'
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/dataloader/stockMap.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/dataloader/stockMap.py
similarity index 100%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/dataloader/stockMap.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/dataloader/stockMap.py
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/dataloader/stockNameLoader.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/dataloader/stockNameLoader.py
similarity index 95%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/dataloader/stockNameLoader.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/dataloader/stockNameLoader.py
index d472f5fd..3def2d73 100644
--- a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/dataloader/stockNameLoader.py
+++ b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/dataloader/stockNameLoader.py
@@ -1,11 +1,11 @@
-from gquant.dataframe_flow import Node
+from greenflow.dataframe_flow import Node
 import cudf
-from gquant.dataframe_flow.portsSpecSchema import (PortsSpecSchema,
+from greenflow.dataframe_flow.portsSpecSchema import (PortsSpecSchema,
                                                    NodePorts,
                                                    MetaData,
                                                    ConfSchema)
 from ..cache import CACHE_NAME
-from gquant.dataframe_flow.util import get_file_path
+from greenflow.dataframe_flow.util import get_file_path
 
 from .stockMap import StockMap
 from .._port_type_node import _PortTypesMixin
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/ml/__init__.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/ml/__init__.py
similarity index 100%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/ml/__init__.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/ml/__init__.py
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/ml/forestInference.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/ml/forestInference.py
similarity index 97%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/ml/forestInference.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/ml/forestInference.py
index bff10c47..30d6356d 100644
--- a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/ml/forestInference.py
+++ b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/ml/forestInference.py
@@ -1,13 +1,13 @@
-from gquant.dataframe_flow import Node
+from greenflow.dataframe_flow import Node
 import cudf
 import dask_cudf
 from .._port_type_node import _PortTypesMixin
-from gquant.dataframe_flow.portsSpecSchema import (ConfSchema,
+from greenflow.dataframe_flow.portsSpecSchema import (ConfSchema,
                                                    MetaData,
                                                    PortsSpecSchema, NodePorts)
 import copy
 from cuml import ForestInference
-from gquant.dataframe_flow.util import get_file_path
+from greenflow.dataframe_flow.util import get_file_path
 
 
 __all__ = ['ForestInferenceNode']
@@ -210,7 +210,7 @@ def process(self, inputs):
                 else:
                     train_cols = [col for col in data_df.columns
                                   if col not in self.conf['columns']]
-        train_cols.sort()
+        # train_cols.sort()
         fm = ForestInference.load(filename,
                                   model_type=self.conf.get("model_type",
                                                            "xgboost"))
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/ml/gridRandomSearchNode.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/ml/gridRandomSearchNode.py
similarity index 97%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/ml/gridRandomSearchNode.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/ml/gridRandomSearchNode.py
index d9d645a8..be98504c 100644
--- a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/ml/gridRandomSearchNode.py
+++ b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/ml/gridRandomSearchNode.py
@@ -1,11 +1,11 @@
-from gquant.plugin_nodes.util.contextCompositeNode import ContextCompositeNode
-from gquant.dataframe_flow.portsSpecSchema import (ConfSchema, MetaData,
+from greenflow.plugin_nodes.util.contextCompositeNode import ContextCompositeNode
+from greenflow.dataframe_flow.portsSpecSchema import (ConfSchema, MetaData,
                                                    PortsSpecSchema, NodePorts)
-from gquant.dataframe_flow.cache import CACHE_SCHEMA
-from gquant.dataframe_flow import TaskGraph
-from gquant.dataframe_flow import Node
-from gquant.dataframe_flow.util import get_file_path
-from gquant.dataframe_flow.taskSpecSchema import TaskSpecSchema
+from greenflow.dataframe_flow.cache import CACHE_SCHEMA
+from greenflow.dataframe_flow import TaskGraph
+from greenflow.dataframe_flow import Node
+from greenflow.dataframe_flow.util import get_file_path
+from greenflow.dataframe_flow.taskSpecSchema import TaskSpecSchema
 from jsonpath_ng import parse
 import uuid
 import cudf
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/ml/splitDataNode.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/ml/splitDataNode.py
similarity index 90%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/ml/splitDataNode.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/ml/splitDataNode.py
index a639e1b6..db3ce76c 100644
--- a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/ml/splitDataNode.py
+++ b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/ml/splitDataNode.py
@@ -1,7 +1,7 @@
 from .._port_type_node import _PortTypesMixin
-from gquant.dataframe_flow.portsSpecSchema import (ConfSchema, MetaData,
+from greenflow.dataframe_flow.portsSpecSchema import (ConfSchema, MetaData,
                                                    NodePorts, PortsSpecSchema)
-from gquant.dataframe_flow import Node
+from greenflow.dataframe_flow import Node
 import cudf
 import dask_cudf
 import cuml
@@ -61,12 +61,17 @@ def meta_setup(self):
         }
         input_meta = self.get_input_meta()
         if self.INPUT_PORT_NAME in input_meta:
-            col_from_inport = input_meta[self.INPUT_PORT_NAME]
+            col_inport = input_meta[self.INPUT_PORT_NAME]
             if 'target' in self.conf:
                 target_col = self.conf['target']
-                if target_col in col_from_inport:
+                col_from_inport = {}
+                for i in sorted(col_inport.keys()):
+                    if i != target_col:
+                        col_from_inport[i] = col_inport[i]
+                col_from_inport[target_col] = col_inport[target_col]
+                if target_col in col_inport:
                     required[self.INPUT_PORT_NAME][target_col] = \
-                        col_from_inport[target_col]
+                        col_inport[target_col]
         else:
             col_from_inport = required[self.INPUT_PORT_NAME]
         output_cols = {
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/ml/xgboostNode.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/ml/xgboostNode.py
similarity index 88%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/ml/xgboostNode.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/ml/xgboostNode.py
index 8fcd3f14..95add48c 100644
--- a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/ml/xgboostNode.py
+++ b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/ml/xgboostNode.py
@@ -1,10 +1,11 @@
-from gquant.dataframe_flow import Node
+from greenflow.dataframe_flow import Node
 import cudf
 import dask_cudf
 import xgboost as xgb
 import dask
-from gquant.dataframe_flow.portsSpecSchema import (ConfSchema, MetaData,
-                                                   PortsSpecSchema, NodePorts)
+from greenflow.dataframe_flow.portsSpecSchema import (ConfSchema, MetaData,
+                                                      PortsSpecSchema,
+                                                      NodePorts)
 from xgboost import Booster
 import copy
 from collections import OrderedDict
@@ -323,7 +324,7 @@ def process(self, inputs):
                                if col not in self.conf['columns']]
         train_cols = [col for col in included_colums
                       if col != self.conf['target']]
-        train_cols.sort()
+        # train_cols.sort()
 
         if isinstance(input_df, dask_cudf.DataFrame):
             # get the client
@@ -382,6 +383,7 @@ def meta_setup(self):
         required = {self.INPUT_PORT_NAME: {},
                     self.INPUT_PORT_MODEL_NAME: {}}
         predict = self.conf.get('prediction', 'predict')
+        pred_contribs: bool = self.conf.get('pred_contribs', False)
         output_cols = {
             self.OUTPUT_PORT_NAME: {predict: None}
         }
@@ -394,7 +396,12 @@ def meta_setup(self):
             else:
                 required_cols = {}
             predict = self.conf.get('prediction', 'predict')
-            col_from_inport[predict] = None  # the type is not determined
+            if not pred_contribs:
+                col_from_inport[predict] = None  # the type is not determined
+            else:
+                col_from_inport = {}
+                for i in range(len(required_cols)+1):
+                    col_from_inport[i] = None
             required = {self.INPUT_PORT_NAME: required_cols,
                         self.INPUT_PORT_MODEL_NAME: {}}
             output_cols = {
@@ -411,7 +418,12 @@ def meta_setup(self):
                 required_cols = {}
             predict = self.conf.get('prediction', 'predict')
             col_from_inport = copy.copy(required_cols)
-            col_from_inport[predict] = None  # the type is not determined
+            if not pred_contribs:
+                col_from_inport[predict] = None  # the type is not determined
+            else:
+                col_from_inport = {}
+                for i in range(len(required_cols)+1):
+                    col_from_inport[i] = None
             required = {self.INPUT_PORT_NAME: required_cols,
                         self.INPUT_PORT_MODEL_NAME: {}}
             output_cols = {
@@ -423,7 +435,8 @@ def meta_setup(self):
               self.INPUT_PORT_MODEL_NAME not in input_meta):
             col_from_inport = input_meta[self.INPUT_PORT_NAME]
             predict = self.conf.get('prediction', 'predict')
-            col_from_inport[predict] = None  # the type is not determined
+            if not pred_contribs:
+                col_from_inport[predict] = None  # the type is not determined
             output_cols = {
                 self.OUTPUT_PORT_NAME: col_from_inport
             }
@@ -444,12 +457,24 @@ def conf_schema(self):
             "description": """make predictions for all the input
              data points""",
             "properties": {
-                "prediction":  {
+                "prediction": {
                     "type": "string",
                     "description": "the column name for prediction",
                     "default": "predict"
                 },
-
+                "pred_contribs": {
+                    "type": "boolean",
+                    "description":
+                    """
+                    When this is True the output will be a matrix of size
+                    (nsample, nfeats + 1) with each record indicating the
+                    feature contributions (SHAP values) for that prediction.
+                    The sum of all feature contributions is equal to the raw
+                     untransformed margin value of the prediction. Note the
+                      final column is the bias term.
+                    """,
+                    "default": False
+                }
             },
             "required": [],
         }
@@ -463,22 +488,35 @@ def process(self, inputs):
         required_cols = input_meta[
             self.INPUT_PORT_MODEL_NAME]['train']
         required_cols = list(required_cols.keys())
-        required_cols.sort()
+        # required_cols.sort()
         predict_col = self.conf.get('prediction', 'predict')
+        pred_contribs: bool = self.conf.get('pred_contribs', False)
         if isinstance(input_df, dask_cudf.DataFrame):
             # get the client
             client = dask.distributed.client.default_client()
             dtrain = xgb.dask.DaskDMatrix(client, input_df[required_cols])
-            prediction = xgb.dask.predict(client, bst_model, dtrain)
+            prediction = xgb.dask.predict(client,
+                                          bst_model,
+                                          dtrain,
+                                          pred_contribs=pred_contribs)
             pred_df = dask_cudf.from_dask_dataframe(
                 prediction.to_dask_dataframe())
             pred_df.index = input_df.index
-            input_df[predict_col] = pred_df
+            if not pred_contribs:
+                input_df[predict_col] = pred_df
+            else:
+                input_df = pred_df
         else:
             infer_dmatrix = xgb.DMatrix(input_df[required_cols])
-            prediction = cudf.Series(bst_model.predict(infer_dmatrix),
-                                     nan_as_null=False,
-                                     index=input_df.index
-                                     )
-            input_df[predict_col] = prediction
+            if not pred_contribs:
+                prediction = cudf.Series(bst_model.predict(infer_dmatrix),
+                                         nan_as_null=False,
+                                         index=input_df.index
+                                         )
+                input_df[predict_col] = prediction
+            else:
+                prediction = cudf.DataFrame(bst_model.predict(
+                    infer_dmatrix, pred_contribs=pred_contribs),
+                                            index=input_df.index)
+                input_df = prediction
         return {self.OUTPUT_PORT_NAME: input_df}
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/portofolio/__init__.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/portofolio/__init__.py
similarity index 100%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/portofolio/__init__.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/portofolio/__init__.py
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/portofolio/simpleAveragePortOpt.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/portofolio/simpleAveragePortOpt.py
similarity index 93%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/portofolio/simpleAveragePortOpt.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/portofolio/simpleAveragePortOpt.py
index 10050505..9ee3e19a 100644
--- a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/portofolio/simpleAveragePortOpt.py
+++ b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/portofolio/simpleAveragePortOpt.py
@@ -1,6 +1,6 @@
-from gquant.dataframe_flow import Node
+from greenflow.dataframe_flow import Node
 from .._port_type_node import _PortTypesMixin
-from gquant.dataframe_flow.portsSpecSchema import ConfSchema
+from greenflow.dataframe_flow.portsSpecSchema import ConfSchema
 
 
 class SimpleAveragePortOpt(_PortTypesMixin, Node):
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/strategy/__init__.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/strategy/__init__.py
similarity index 100%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/strategy/__init__.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/strategy/__init__.py
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/strategy/movingAverageStrategyNode.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/strategy/movingAverageStrategyNode.py
similarity index 97%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/strategy/movingAverageStrategyNode.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/strategy/movingAverageStrategyNode.py
index fe4a39ea..d8451e1d 100644
--- a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/strategy/movingAverageStrategyNode.py
+++ b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/strategy/movingAverageStrategyNode.py
@@ -1,12 +1,12 @@
 from .. import cuindicator as ci
-from gquant.dataframe_flow import Node
+from greenflow.dataframe_flow import Node
 from numba import cuda
 import math
 import numpy as np
 import cudf
 import dask_cudf
 from .._port_type_node import _PortTypesMixin
-from gquant.dataframe_flow.portsSpecSchema import ConfSchema
+from greenflow.dataframe_flow.portsSpecSchema import ConfSchema
 
 
 @cuda.jit
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/strategy/portExpMovingAverageStrategyNode.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/strategy/portExpMovingAverageStrategyNode.py
similarity index 98%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/strategy/portExpMovingAverageStrategyNode.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/strategy/portExpMovingAverageStrategyNode.py
index 35db590e..162d386e 100644
--- a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/strategy/portExpMovingAverageStrategyNode.py
+++ b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/strategy/portExpMovingAverageStrategyNode.py
@@ -1,6 +1,6 @@
-from gquant.dataframe_flow import Node
+from greenflow.dataframe_flow import Node
 from .._port_type_node import _PortTypesMixin
-from gquant.dataframe_flow.portsSpecSchema import ConfSchema
+from greenflow.dataframe_flow.portsSpecSchema import ConfSchema
 from .. import cuindicator as ci
 import dask_cudf
 from numba import cuda
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/strategy/xgboostStrategyNode.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/strategy/xgboostStrategyNode.py
similarity index 98%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/strategy/xgboostStrategyNode.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/strategy/xgboostStrategyNode.py
index cf91860b..35ee7bca 100644
--- a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/strategy/xgboostStrategyNode.py
+++ b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/strategy/xgboostStrategyNode.py
@@ -1,11 +1,11 @@
-from gquant.dataframe_flow import Node
+from greenflow.dataframe_flow import Node
 import datetime
 import cudf
 import dask_cudf
 import xgboost as xgb
 import dask
 from .._port_type_node import _PortTypesMixin
-from gquant.dataframe_flow.portsSpecSchema import ConfSchema, MetaData
+from greenflow.dataframe_flow.portsSpecSchema import ConfSchema, MetaData
 
 
 __all__ = ['XGBoostStrategyNode']
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/__init__.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/__init__.py
similarity index 91%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/__init__.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/__init__.py
index 4dfba094..f2e88fc5 100644
--- a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/__init__.py
+++ b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/__init__.py
@@ -16,6 +16,7 @@
 from .linearEmbedding import LinearEmbeddingNode
 from .onehotEncoding import OneHotEncodingNode
 from .daskComputeNode import DaskComputeNode
+from .persistNode import PersistNode
 
 __all__ = ["AverageNode", "AssetFilterNode", "LeftMergeNode",
            "ReturnFeatureNode", "SortNode",
@@ -23,4 +24,4 @@
            "ValueFilterNode", "RenameNode", "AssetIndicatorNode",
            "DropNode", "IndicatorNode", "NormalizationNode",
            "AddSignIndicatorNode", "LinearEmbeddingNode",
-           "OneHotEncodingNode", "DaskComputeNode"]
+           "OneHotEncodingNode", "DaskComputeNode", "PersistNode"]
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/addSignIndicator.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/addSignIndicator.py
similarity index 95%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/addSignIndicator.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/addSignIndicator.py
index 58103ddd..0b5a2a43 100644
--- a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/addSignIndicator.py
+++ b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/addSignIndicator.py
@@ -1,5 +1,5 @@
-from gquant.dataframe_flow import Node
-from gquant.dataframe_flow.portsSpecSchema import ConfSchema
+from greenflow.dataframe_flow import Node
+from greenflow.dataframe_flow.portsSpecSchema import ConfSchema
 from .._port_type_node import _PortTypesMixin
 
 __all__ = ["AddSignIndicatorNode"]
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/assetFilterNode.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/assetFilterNode.py
similarity index 97%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/assetFilterNode.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/assetFilterNode.py
index e7879d00..7af7400a 100644
--- a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/assetFilterNode.py
+++ b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/assetFilterNode.py
@@ -1,6 +1,6 @@
-from gquant.dataframe_flow import Node
+from greenflow.dataframe_flow import Node
 from .._port_type_node import _PortTypesMixin
-from gquant.dataframe_flow.portsSpecSchema import (ConfSchema,
+from greenflow.dataframe_flow.portsSpecSchema import (ConfSchema,
                                                    MetaData,
                                                    PortsSpecSchema, NodePorts)
 from ..dataloader.stockMap import StockMap
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/assetIndicatorNode.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/assetIndicatorNode.py
similarity index 94%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/assetIndicatorNode.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/assetIndicatorNode.py
index f0fad88a..406c5ca2 100644
--- a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/assetIndicatorNode.py
+++ b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/assetIndicatorNode.py
@@ -1,6 +1,6 @@
-from gquant.dataframe_flow import Node
+from greenflow.dataframe_flow import Node
 from .._port_type_node import _PortTypesMixin
-from gquant.dataframe_flow.portsSpecSchema import ConfSchema
+from greenflow.dataframe_flow.portsSpecSchema import ConfSchema
 
 
 class AssetIndicatorNode(_PortTypesMixin, Node):
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/averageNode.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/averageNode.py
similarity index 96%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/averageNode.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/averageNode.py
index 3bf6bbfa..e0af909e 100644
--- a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/averageNode.py
+++ b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/averageNode.py
@@ -1,6 +1,6 @@
-from gquant.dataframe_flow import Node
+from greenflow.dataframe_flow import Node
 from .._port_type_node import _PortTypesMixin
-from gquant.dataframe_flow.portsSpecSchema import ConfSchema
+from greenflow.dataframe_flow.portsSpecSchema import ConfSchema
 
 
 class AverageNode(_PortTypesMixin, Node):
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/daskComputeNode.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/daskComputeNode.py
similarity index 91%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/daskComputeNode.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/daskComputeNode.py
index bf42f782..a047e81e 100644
--- a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/daskComputeNode.py
+++ b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/daskComputeNode.py
@@ -3,11 +3,11 @@
 from dask.dataframe import DataFrame as DaskDataFrame
 import dask_cudf
 
-from gquant.dataframe_flow import Node
-from gquant.dataframe_flow.portsSpecSchema import ConfSchema
+from greenflow.dataframe_flow import Node
+from greenflow.dataframe_flow.portsSpecSchema import ConfSchema
 from .._port_type_node import _PortTypesMixin
 
-from gquant.dataframe_flow.portsSpecSchema import (
+from greenflow.dataframe_flow.portsSpecSchema import (
     PortsSpecSchema, NodePorts)
 
 __all__ = ["DaskComputeNode"]
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/data_obj.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/data_obj.py
similarity index 100%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/data_obj.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/data_obj.py
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/datetimeFilterNode.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/datetimeFilterNode.py
similarity index 96%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/datetimeFilterNode.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/datetimeFilterNode.py
index c2705329..885aa8c2 100644
--- a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/datetimeFilterNode.py
+++ b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/datetimeFilterNode.py
@@ -1,7 +1,7 @@
 import datetime
-from gquant.dataframe_flow import Node
+from greenflow.dataframe_flow import Node
 from .._port_type_node import _PortTypesMixin
-from gquant.dataframe_flow.portsSpecSchema import ConfSchema
+from greenflow.dataframe_flow.portsSpecSchema import ConfSchema
 
 
 __all__ = ['DatetimeFilterNode']
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/dropNode.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/dropNode.py
similarity index 95%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/dropNode.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/dropNode.py
index e56aa5a5..e08a6e07 100644
--- a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/dropNode.py
+++ b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/dropNode.py
@@ -1,6 +1,6 @@
-from gquant.dataframe_flow import Node
+from greenflow.dataframe_flow import Node
 from .._port_type_node import _PortTypesMixin
-from gquant.dataframe_flow.portsSpecSchema import ConfSchema
+from greenflow.dataframe_flow.portsSpecSchema import ConfSchema
 
 
 class DropNode(_PortTypesMixin, Node):
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/indicatorNode.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/indicatorNode.py
similarity index 99%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/indicatorNode.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/indicatorNode.py
index 1a8a460d..c54d5688 100644
--- a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/indicatorNode.py
+++ b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/indicatorNode.py
@@ -1,7 +1,7 @@
 from .. import cuindicator as ci
 from .._port_type_node import _PortTypesMixin
-from gquant.dataframe_flow.portsSpecSchema import ConfSchema
-from gquant.dataframe_flow import Node
+from greenflow.dataframe_flow.portsSpecSchema import ConfSchema
+from greenflow.dataframe_flow import Node
 import copy
 
 IN_DATA = {
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/leftMergeNode.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/leftMergeNode.py
similarity index 96%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/leftMergeNode.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/leftMergeNode.py
index e2838e79..402c62a1 100644
--- a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/leftMergeNode.py
+++ b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/leftMergeNode.py
@@ -1,6 +1,6 @@
-from gquant.dataframe_flow import Node
-from gquant.dataframe_flow.portsSpecSchema import ConfSchema
-from gquant.dataframe_flow.portsSpecSchema import (PortsSpecSchema,
+from greenflow.dataframe_flow import Node
+from greenflow.dataframe_flow.portsSpecSchema import ConfSchema
+from greenflow.dataframe_flow.portsSpecSchema import (PortsSpecSchema,
                                                    MetaData,
                                                    NodePorts)
 import cudf
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/linearEmbedding.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/linearEmbedding.py
similarity index 96%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/linearEmbedding.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/linearEmbedding.py
index 496b2057..f99d960a 100644
--- a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/linearEmbedding.py
+++ b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/linearEmbedding.py
@@ -1,9 +1,8 @@
-from gquant.dataframe_flow import Node
+from greenflow.dataframe_flow import Node
 from .._port_type_node import _PortTypesMixin
-from gquant.dataframe_flow.portsSpecSchema import (ConfSchema,
-                                                   PortsSpecSchema,
-                                                   NodePorts,
-                                                   MetaData)
+from greenflow.dataframe_flow.portsSpecSchema import (ConfSchema,
+                                                      PortsSpecSchema,
+                                                      NodePorts, MetaData)
 from .data_obj import ProjectionData
 import cupy as cp
 import copy
@@ -236,7 +235,7 @@ def process(self, inputs):
             if 'seed' in self.conf:
                 cp.random.seed(self.conf['seed'])
             proj_data = cp.random.rand(len(cols), self.conf['out_dimension'])
-        cols.sort()
+        # cols.sort()
         # print(self.uid, cols)
         # print(self.uid, proj_data)
         output_matrix = input_df[cols].values.dot(proj_data)
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/maxNode.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/maxNode.py
similarity index 95%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/maxNode.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/maxNode.py
index 4f8bc9cd..aec628e5 100644
--- a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/maxNode.py
+++ b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/maxNode.py
@@ -1,6 +1,6 @@
-from gquant.dataframe_flow import Node
+from greenflow.dataframe_flow import Node
 from .._port_type_node import _PortTypesMixin
-from gquant.dataframe_flow.portsSpecSchema import ConfSchema
+from greenflow.dataframe_flow.portsSpecSchema import ConfSchema
 
 
 class MaxNode(_PortTypesMixin, Node):
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/minNode.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/minNode.py
similarity index 95%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/minNode.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/minNode.py
index afadd778..42cda39e 100644
--- a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/minNode.py
+++ b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/minNode.py
@@ -1,5 +1,5 @@
-from gquant.dataframe_flow.portsSpecSchema import ConfSchema
-from gquant.dataframe_flow import Node
+from greenflow.dataframe_flow.portsSpecSchema import ConfSchema
+from greenflow.dataframe_flow import Node
 from .._port_type_node import _PortTypesMixin
 
 
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/normalizationNode.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/normalizationNode.py
similarity index 97%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/normalizationNode.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/normalizationNode.py
index b0e6f17f..4ff99437 100644
--- a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/normalizationNode.py
+++ b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/normalizationNode.py
@@ -1,6 +1,6 @@
-from gquant.dataframe_flow import Node
+from greenflow.dataframe_flow import Node
 from .._port_type_node import _PortTypesMixin
-from gquant.dataframe_flow.portsSpecSchema import (ConfSchema, MetaData,
+from greenflow.dataframe_flow.portsSpecSchema import (ConfSchema, MetaData,
                                                    PortsSpecSchema, NodePorts)
 from .data_obj import NormalizationData
 from collections import OrderedDict
@@ -184,7 +184,7 @@ def process(self, inputs):
             stds = norm_data['std']
             col_from_inport = input_meta[self.INPUT_NORM_MODEL_NAME]
             cols = [i for i in col_from_inport.keys()]
-            cols.sort()
+            # cols.sort()
         else:
             # need to compute the mean and std
             if self.conf.get('include', True):
@@ -192,7 +192,7 @@ def process(self, inputs):
             else:
                 cols = input_df.columns.difference(
                     self.conf['columns']).values.tolist()
-            cols.sort()
+            # cols.sort()
             means = input_df[cols].mean()
             stds = input_df[cols].std()
         norm = (input_df[cols] - means) / stds
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/onehotEncoding.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/onehotEncoding.py
similarity index 96%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/onehotEncoding.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/onehotEncoding.py
index c718bb16..73895f2a 100644
--- a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/onehotEncoding.py
+++ b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/onehotEncoding.py
@@ -1,5 +1,5 @@
-from gquant.dataframe_flow import Node
-from gquant.dataframe_flow.portsSpecSchema import ConfSchema
+from greenflow.dataframe_flow import Node
+from greenflow.dataframe_flow.portsSpecSchema import ConfSchema
 from .._port_type_node import _PortTypesMixin
 
 __all__ = ["OneHotEncodingNode"]
diff --git a/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/persistNode.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/persistNode.py
new file mode 100644
index 00000000..c5fdc04b
--- /dev/null
+++ b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/persistNode.py
@@ -0,0 +1,71 @@
+from greenflow.dataframe_flow import (ConfSchema, PortsSpecSchema, NodePorts,
+                                      MetaData)
+from greenflow_gquant_plugin._port_type_node import _PortTypesMixin
+from greenflow.dataframe_flow import Node
+from dask.dataframe import DataFrame as DaskDataFrame
+from dask.distributed import wait
+import dask.distributed
+
+
+class PersistNode(_PortTypesMixin, Node):
+
+    def init(self):
+        _PortTypesMixin.init(self)
+
+    def ports_setup(self):
+        dy = PortsSpecSchema.dynamic
+        port_type = PortsSpecSchema.port_type
+        o_inports = {}
+        o_outports = {}
+        o_inports[self.INPUT_PORT_NAME] = {
+            port_type: [DaskDataFrame],
+            dy: True
+        }
+        input_connections = self.get_connected_inports()
+        for port_name in input_connections.keys():
+            if port_name != self.INPUT_PORT_NAME:
+                determined_type = input_connections[port_name]
+                o_outports[port_name] = {port_type: determined_type}
+        return NodePorts(inports=o_inports, outports=o_outports)
+
+    def conf_schema(self):
+        json = {
+            "title": "Persist the dask dataframe",
+            "type": "object",
+            "properties": {
+            },
+        }
+
+        ui = {
+        }
+        return ConfSchema(json=json, ui=ui)
+
+    def meta_setup(self):
+        input_meta = self.get_input_meta()
+        input_connections = self.get_connected_inports()
+        input_cols = {}
+        output_cols = {}
+        for port_name in input_connections.keys():
+            if port_name in input_meta:
+                meta = input_meta[port_name]
+                input_cols[port_name] = meta
+                output_cols[port_name] = meta
+        meta_data = MetaData(inports=input_cols, outports=output_cols)
+        return meta_data
+
+    def process(self, inputs):
+        # df = df.drop('datetime', axis=1)
+        output = {}
+        client = dask.distributed.client.default_client()
+        input_connections = self.get_connected_inports()
+        objs = []
+        for port_name in input_connections.keys():
+            if port_name != self.INPUT_PORT_NAME:
+                df = inputs[port_name]
+                objs.append(df)
+        objs = client.persist(objs)
+        wait([objs])
+        for port_name in input_connections.keys():
+            if port_name != self.INPUT_PORT_NAME:
+                output[port_name] = objs.pop(0)
+        return output
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/renameNode.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/renameNode.py
similarity index 96%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/renameNode.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/renameNode.py
index 0b9ade0e..740f02bb 100644
--- a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/renameNode.py
+++ b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/renameNode.py
@@ -1,5 +1,5 @@
-from gquant.dataframe_flow import Node
-from gquant.dataframe_flow.portsSpecSchema import ConfSchema
+from greenflow.dataframe_flow import Node
+from greenflow.dataframe_flow.portsSpecSchema import ConfSchema
 from .._port_type_node import _PortTypesMixin
 
 
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/returnFeatureNode.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/returnFeatureNode.py
similarity index 95%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/returnFeatureNode.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/returnFeatureNode.py
index e0611b6e..2c9261b0 100644
--- a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/returnFeatureNode.py
+++ b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/returnFeatureNode.py
@@ -1,6 +1,6 @@
-from gquant.dataframe_flow import Node
+from greenflow.dataframe_flow import Node
 from .._port_type_node import _PortTypesMixin
-from gquant.dataframe_flow.portsSpecSchema import ConfSchema
+from greenflow.dataframe_flow.portsSpecSchema import ConfSchema
 
 
 class ReturnFeatureNode(_PortTypesMixin, Node):
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/sortNode.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/sortNode.py
similarity index 95%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/sortNode.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/sortNode.py
index 8d855899..d6bfc681 100644
--- a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/sortNode.py
+++ b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/sortNode.py
@@ -1,6 +1,6 @@
 from .._port_type_node import _PortTypesMixin
-from gquant.dataframe_flow.portsSpecSchema import ConfSchema
-from gquant.dataframe_flow import Node
+from greenflow.dataframe_flow.portsSpecSchema import ConfSchema
+from greenflow.dataframe_flow import Node
 
 
 class SortNode(_PortTypesMixin, Node):
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/valueFilterNode.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/valueFilterNode.py
similarity index 96%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/valueFilterNode.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/valueFilterNode.py
index 1a1fa558..015a3bd2 100644
--- a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/transform/valueFilterNode.py
+++ b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/transform/valueFilterNode.py
@@ -1,6 +1,6 @@
-from gquant.dataframe_flow import Node
+from greenflow.dataframe_flow import Node
 from .._port_type_node import _PortTypesMixin
-from gquant.dataframe_flow.portsSpecSchema import ConfSchema
+from greenflow.dataframe_flow.portsSpecSchema import ConfSchema
 
 
 class ValueFilterNode(_PortTypesMixin, Node):
diff --git a/gQuant/plugins/rapids_plugin/gquantrc b/gQuant/plugins/gquant_plugin/greenflowrc
similarity index 100%
rename from gQuant/plugins/rapids_plugin/gquantrc
rename to gQuant/plugins/gquant_plugin/greenflowrc
diff --git a/gQuant/plugins/rapids_plugin/modules/my_node.py b/gQuant/plugins/gquant_plugin/modules/my_node.py
similarity index 90%
rename from gQuant/plugins/rapids_plugin/modules/my_node.py
rename to gQuant/plugins/gquant_plugin/modules/my_node.py
index 9ca0decb..4bfbf1b4 100644
--- a/gQuant/plugins/rapids_plugin/modules/my_node.py
+++ b/gQuant/plugins/gquant_plugin/modules/my_node.py
@@ -1,5 +1,5 @@
-import gquant
-from gquant.dataframe_flow.portsSpecSchema import ConfSchema
+import greenflow
+from greenflow.dataframe_flow.portsSpecSchema import ConfSchema
 import json
 
 data = """{
@@ -26,7 +26,7 @@
 """
 
 
-class CustXGBoostNode(gquant.plugin_nodes.util.CompositeNode):
+class CustXGBoostNode(greenflow.plugin_nodes.util.CompositeNode):
     def __init__(self, *args, **kwargs):
         super().__init__(*args, **kwargs)
         # modify the self.conf to the one that this Composite node wants
diff --git a/gQuant/plugins/rapids_plugin/notebooks/01_tutorial.ipynb b/gQuant/plugins/gquant_plugin/notebooks/01_tutorial.ipynb
similarity index 89%
rename from gQuant/plugins/rapids_plugin/notebooks/01_tutorial.ipynb
rename to gQuant/plugins/gquant_plugin/notebooks/01_tutorial.ipynb
index ab33cc26..90feb9a0 100644
--- a/gQuant/plugins/rapids_plugin/notebooks/01_tutorial.ipynb
+++ b/gQuant/plugins/gquant_plugin/notebooks/01_tutorial.ipynb
@@ -4,9 +4,9 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "# Introduction to gQuant\n",
+    "# Introduction to greenflow\n",
     "\n",
-    "**gQuant** is a set of open-source examples for Quantitative Analysis tasks:\n",
+    "**greenflow** is a set of open-source examples for Quantitative Analysis tasks:\n",
     "- Data preparation & feat. engineering\n",
     "- Alpha seeking modeling\n",
     "- Technical indicators\n",
@@ -14,7 +14,7 @@
     "\n",
     "It is GPU-accelerated by leveraging [**RAPIDS.ai**](https://rapids.ai) technology, and has Multi-GPU and Multi-Node support.\n",
     "\n",
-    "gQuant computing components are oriented around its plugins and task graph.\n",
+    "greenflow computing components are oriented around its plugins and task graph.\n",
     "\n",
     "## Download example datasets\n",
     "\n",
@@ -45,7 +45,7 @@
    "source": [
     "## About this notebook\n",
     "\n",
-    "In this tutorial, we are going to use gQuant to do a simple quant job. The job tasks are listed below:\n",
+    "In this tutorial, we are going to use greenflow to do a simple quant job. The job tasks are listed below:\n",
     "    1. load csv stock data.\n",
     "    2. filter out the stocks that has average volume smaller than 50.\n",
     "    3. sort the stock symbols and datetime.\n",
@@ -56,7 +56,7 @@
     "    \n",
     "## TaskGraph playground\n",
     "\n",
-    "Run the following gquant code to start a empty TaskGraph where computation graph can be created. You can follow the steps as listed below."
+    "Run the following greenflow code to start a empty TaskGraph where computation graph can be created. You can follow the steps as listed below."
    ]
   },
   {
@@ -72,7 +72,7 @@
        "version_minor": 0
       },
       "text/plain": [
-       "GQuantWidget(sub=HBox())"
+       "GreenflowWidget(sub=HBox())"
       ]
      },
      "metadata": {},
@@ -81,7 +81,7 @@
    ],
    "source": [
     "import sys; sys.path.insert(0, '..')\n",
-    "from gquant.dataframe_flow import TaskGraph\n",
+    "from greenflow.dataframe_flow import TaskGraph\n",
     "task_graph = TaskGraph()\n",
     "task_graph.draw()"
    ]
@@ -137,7 +137,7 @@
        "version_minor": 0
       },
       "text/plain": [
-       "GQuantWidget(sub=HBox(), value=[OrderedDict([('id', 'stock_data'), ('type', 'CsvStockLoader'), ('conf', {'file…"
+       "GreenflowWidget(sub=HBox(), value=[OrderedDict([('id', 'stock_data'), ('type', 'CsvStockLoader'), ('conf', {'file…"
       ]
      },
      "metadata": {},
@@ -169,7 +169,7 @@
        "version_minor": 0
       },
       "text/plain": [
-       "GQuantWidget(sub=HBox(), value=[OrderedDict([('id', 'stock_data'), ('type', 'CsvStockLoader'), ('conf', {'file…"
+       "GreenflowWidget(sub=HBox(), value=[OrderedDict([('id', 'stock_data'), ('type', 'CsvStockLoader'), ('conf', {'file…"
       ]
      },
      "metadata": {},
@@ -189,7 +189,7 @@
     "\n",
     "Quant processing operators are defined as nodes that operates on **cuDF**/**dask_cuDF** dataframes.\n",
     "\n",
-    "A **task graph** is a list of tasks composed of gQuant nodes.\n",
+    "A **task graph** is a list of tasks composed of greenflow nodes.\n",
     "\n",
     "The cell below contains the task graph described before."
    ]
@@ -205,7 +205,7 @@
     "csv_average_volume = 'average_volume.csv'\n",
     "csv_file_path = './data/stock_price_hist.csv.gz'\n",
     "csv_name_file_path = './data/security_master.csv.gz'\n",
-    "from gquant.dataframe_flow import TaskSpecSchema \n",
+    "from greenflow.dataframe_flow import TaskSpecSchema \n",
     "\n",
     "# load csv stock data\n",
     "task_csvdata = {\n",
@@ -213,7 +213,7 @@
     "    TaskSpecSchema.node_type: 'CsvStockLoader',\n",
     "    TaskSpecSchema.conf: {'file': csv_file_path},\n",
     "    TaskSpecSchema.inputs: {},\n",
-    "    TaskSpecSchema.module: \"gquant_rapids_plugin.dataloader\"\n",
+    "    TaskSpecSchema.module: \"greenflow_gquant_plugin.dataloader\"\n",
     "}\n",
     "\n",
     "# filter out the stocks that has average volume smaller than 50\n",
@@ -222,7 +222,7 @@
     "    TaskSpecSchema.node_type: 'ValueFilterNode',\n",
     "    TaskSpecSchema.conf: [{'min': 50.0, 'column': 'volume'}],\n",
     "    TaskSpecSchema.inputs: {'in': 'stock_data.cudf_out'},\n",
-    "    TaskSpecSchema.module: \"gquant_rapids_plugin.transform\"\n",
+    "    TaskSpecSchema.module: \"greenflow_gquant_plugin.transform\"\n",
     "}\n",
     "\n",
     "# sort the stock symbols and datetime\n",
@@ -231,7 +231,7 @@
     "    TaskSpecSchema.node_type: 'SortNode',\n",
     "    TaskSpecSchema.conf: {'keys': ['asset', 'datetime']},\n",
     "    TaskSpecSchema.inputs: {'in': 'volume_filter.out'},\n",
-    "    TaskSpecSchema.module: \"gquant_rapids_plugin.transform\"\n",
+    "    TaskSpecSchema.module: \"greenflow_gquant_plugin.transform\"\n",
     "}\n",
     "\n",
     "# add rate of return as a feature into the table\n",
@@ -240,7 +240,7 @@
     "    TaskSpecSchema.node_type: 'ReturnFeatureNode',\n",
     "    TaskSpecSchema.conf: {},\n",
     "    TaskSpecSchema.inputs: {'stock_in': 'sort_node.out'},\n",
-    "    TaskSpecSchema.module: \"gquant_rapids_plugin.transform\"\n",
+    "    TaskSpecSchema.module: \"greenflow_gquant_plugin.transform\"\n",
     "}\n",
     "\n",
     "# read the stock symbol name file and join the computed dataframes\n",
@@ -249,7 +249,7 @@
     "    TaskSpecSchema.node_type: 'StockNameLoader',\n",
     "    TaskSpecSchema.conf: {'file': csv_name_file_path },\n",
     "    TaskSpecSchema.inputs: {},\n",
-    "    TaskSpecSchema.module: \"gquant_rapids_plugin.dataloader\"\n",
+    "    TaskSpecSchema.module: \"greenflow_gquant_plugin.dataloader\"\n",
     "}\n",
     "\n",
     "# In two branches, compute the mean volume and mean return seperately\n",
@@ -258,7 +258,7 @@
     "    TaskSpecSchema.node_type: 'AverageNode',\n",
     "    TaskSpecSchema.conf: {'column': 'volume'},\n",
     "    TaskSpecSchema.inputs: {'stock_in': 'add_return_feature.stock_out'},\n",
-    "    TaskSpecSchema.module: \"gquant_rapids_plugin.transform\"\n",
+    "    TaskSpecSchema.module: \"greenflow_gquant_plugin.transform\"\n",
     "}\n",
     "\n",
     "task_returnMean = {\n",
@@ -266,7 +266,7 @@
     "    TaskSpecSchema.node_type: 'AverageNode',\n",
     "    TaskSpecSchema.conf: {'column': 'returns'},\n",
     "    TaskSpecSchema.inputs: {'stock_in': 'add_return_feature.stock_out'},\n",
-    "    TaskSpecSchema.module: \"gquant_rapids_plugin.transform\"\n",
+    "    TaskSpecSchema.module: \"greenflow_gquant_plugin.transform\"\n",
     "}\n",
     "\n",
     "task_leftMerge1 = {\n",
@@ -275,7 +275,7 @@
     "    TaskSpecSchema.conf: {'column': 'asset'},\n",
     "    TaskSpecSchema.inputs: {'left': 'average_return.stock_out', \n",
     "                            'right': 'stock_name.stock_name'},\n",
-    "    TaskSpecSchema.module: \"gquant_rapids_plugin.transform\"\n",
+    "    TaskSpecSchema.module: \"greenflow_gquant_plugin.transform\"\n",
     "}\n",
     "\n",
     "task_leftMerge2 = {\n",
@@ -284,7 +284,7 @@
     "    TaskSpecSchema.conf: {'column': 'asset'},\n",
     "    TaskSpecSchema.inputs: {'left': 'average_volume.stock_out', \n",
     "                            'right': 'stock_name.stock_name'},\n",
-    "    TaskSpecSchema.module: \"gquant_rapids_plugin.transform\"\n",
+    "    TaskSpecSchema.module: \"greenflow_gquant_plugin.transform\"\n",
     "}\n",
     "\n",
     "# output the result in csv files\n",
@@ -294,7 +294,7 @@
     "    TaskSpecSchema.node_type: 'OutCsvNode',\n",
     "    TaskSpecSchema.conf: {'path': csv_average_return},\n",
     "    TaskSpecSchema.inputs: {'df_in': 'left_merge1.merged'},\n",
-    "    TaskSpecSchema.module: \"gquant_rapids_plugin.analysis\"\n",
+    "    TaskSpecSchema.module: \"greenflow_gquant_plugin.analysis\"\n",
     "}\n",
     "\n",
     "task_outputCsv2 = {\n",
@@ -302,7 +302,7 @@
     "    TaskSpecSchema.node_type: 'OutCsvNode',\n",
     "    TaskSpecSchema.conf: {'path': csv_average_volume },\n",
     "    TaskSpecSchema.inputs: {'df_in': 'left_merge2.merged'},\n",
-    "    TaskSpecSchema.module: \"gquant_rapids_plugin.analysis\"\n",
+    "    TaskSpecSchema.module: \"greenflow_gquant_plugin.analysis\"\n",
     "}"
    ]
   },
@@ -310,7 +310,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "In Python, a gQuant task-spec is defined as a dictionary with the following fields:\n",
+    "In Python, a greenflow task-spec is defined as a dictionary with the following fields:\n",
     "- `id`\n",
     "- `type`\n",
     "- `conf`\n",
@@ -322,13 +322,13 @@
     "\n",
     "The `id` for a given task must be unique within a task graph. To use the result(s) of other task(s) as input(s) of a different task, we use the id(s) of the former task(s) in the `inputs` field of the next task.\n",
     "\n",
-    "The `type` field contains the node type to use for the compute task. gQuant includes a collection of node classes. These can be found in `gquant.plugin_nodes`. Click [here](#node_class_example) to see a gQuant node class example.\n",
+    "The `type` field contains the node type to use for the compute task. greenflow includes a collection of node classes. These can be found in `greenflow.plugin_nodes`. Click [here](#node_class_example) to see a greenflow node class example.\n",
     "\n",
-    "The `conf` field is used to parameterise a task. It lets you access user-set parameters within a plugin (such as `self.conf['min']` in the example above). Each node defines the `conf` json schema. The gQuant UI can use this schema to generate the proper form UI for the inputs. It is recommended to use the UI to configure the `conf`. \n",
+    "The `conf` field is used to parameterise a task. It lets you access user-set parameters within a plugin (such as `self.conf['min']` in the example above). Each node defines the `conf` json schema. The greenflow UI can use this schema to generate the proper form UI for the inputs. It is recommended to use the UI to configure the `conf`. \n",
     "\n",
     "The `filepath` field is used to specify a python module where a custom plugin is defined. It is optional if the plugin is in `plugin_nodes` directory, and mandatory when the plugin is somewhere else. In a different tutorial, we will learn how to create custom plugins.\n",
     "\n",
-    "The `module` is optional to tell gQuant the name of module that the node type is from. If it is not specified, gQuant will search for it among all the customized modules. \n",
+    "The `module` is optional to tell greenflow the name of module that the node type is from. If it is not specified, greenflow will search for it among all the customized modules. \n",
     "\n",
     "A custom node schema will look something like this:\n",
     "```\n",
@@ -362,7 +362,7 @@
        "version_minor": 0
       },
       "text/plain": [
-       "GQuantWidget(sub=HBox(), value=[OrderedDict([('id', 'stock_data'), ('type', 'CsvStockLoader'), ('conf', {'file…"
+       "GreenflowWidget(sub=HBox(), value=[OrderedDict([('id', 'stock_data'), ('type', 'CsvStockLoader'), ('conf', {'file…"
       ]
      },
      "metadata": {},
@@ -370,7 +370,7 @@
     }
    ],
    "source": [
-    "from gquant.dataframe_flow import TaskGraph\n",
+    "from greenflow.dataframe_flow import TaskGraph\n",
     "\n",
     "# list of nodes composing the task graph\n",
     "task_list = [\n",
@@ -424,7 +424,7 @@
       "  conf:\n",
       "    file: ./data/stock_price_hist.csv.gz\n",
       "  inputs: {}\n",
-      "  module: gquant_rapids_plugin.dataloader\n",
+      "  module: greenflow_gquant_plugin.dataloader\n",
       "- id: volume_filter\n",
       "  type: ValueFilterNode\n",
       "  conf:\n",
@@ -432,7 +432,7 @@
       "    min: 50\n",
       "  inputs:\n",
       "    in: stock_data.cudf_out\n",
-      "  module: gquant_rapids_plugin.transform\n",
+      "  module: greenflow_gquant_plugin.transform\n",
       "- id: sort_node\n",
       "  type: SortNode\n",
       "  conf:\n",
@@ -466,7 +466,7 @@
        "version_minor": 0
       },
       "text/plain": [
-       "GQuantWidget(sub=HBox(), value=[OrderedDict([('id', 'stock_data'), ('type', 'CsvStockLoader'), ('conf', {'file…"
+       "GreenflowWidget(sub=HBox(), value=[OrderedDict([('id', 'stock_data'), ('type', 'CsvStockLoader'), ('conf', {'file…"
       ]
      },
      "metadata": {},
@@ -504,17 +504,17 @@
      "text": [
       "Output of build task graph are instances of each task in a dictionary:\n",
       "\n",
-      "stock_data: <NodeInTaskGraph gquant_rapids_plugin.dataloader.csvStockLoader.CsvStockLoader object at 0x7ff4ecb7cbe0>\n",
-      "volume_filter: <NodeInTaskGraph gquant_rapids_plugin.transform.valueFilterNode.ValueFilterNode object at 0x7ff4ecb7cd30>\n",
-      "sort_node: <NodeInTaskGraph gquant_rapids_plugin.transform.sortNode.SortNode object at 0x7ff4ecb7cf40>\n",
-      "add_return_feature: <NodeInTaskGraph gquant_rapids_plugin.transform.returnFeatureNode.ReturnFeatureNode object at 0x7ff4ecb7c520>\n",
-      "stock_name: <NodeInTaskGraph gquant_rapids_plugin.dataloader.stockNameLoader.StockNameLoader object at 0x7ff4ecb7c310>\n",
-      "average_volume: <NodeInTaskGraph gquant_rapids_plugin.transform.averageNode.AverageNode object at 0x7ff4ecb7c100>\n",
-      "average_return: <NodeInTaskGraph gquant_rapids_plugin.transform.averageNode.AverageNode object at 0x7ff4ecdc1580>\n",
-      "left_merge1: <NodeInTaskGraph gquant_rapids_plugin.transform.leftMergeNode.LeftMergeNode object at 0x7ff4ecdc1f40>\n",
-      "left_merge2: <NodeInTaskGraph gquant_rapids_plugin.transform.leftMergeNode.LeftMergeNode object at 0x7ff4ecdc17c0>\n",
-      "output_csv1: <NodeInTaskGraph gquant_rapids_plugin.analysis.outCsvNode.OutCsvNode object at 0x7ff4ecdc1520>\n",
-      "output_csv2: <NodeInTaskGraph gquant_rapids_plugin.analysis.outCsvNode.OutCsvNode object at 0x7ff4ecdc1850>\n",
+      "stock_data: <NodeInTaskGraph greenflow_gquant_plugin.dataloader.csvStockLoader.CsvStockLoader object at 0x7ff4ecb7cbe0>\n",
+      "volume_filter: <NodeInTaskGraph greenflow_gquant_plugin.transform.valueFilterNode.ValueFilterNode object at 0x7ff4ecb7cd30>\n",
+      "sort_node: <NodeInTaskGraph greenflow_gquant_plugin.transform.sortNode.SortNode object at 0x7ff4ecb7cf40>\n",
+      "add_return_feature: <NodeInTaskGraph greenflow_gquant_plugin.transform.returnFeatureNode.ReturnFeatureNode object at 0x7ff4ecb7c520>\n",
+      "stock_name: <NodeInTaskGraph greenflow_gquant_plugin.dataloader.stockNameLoader.StockNameLoader object at 0x7ff4ecb7c310>\n",
+      "average_volume: <NodeInTaskGraph greenflow_gquant_plugin.transform.averageNode.AverageNode object at 0x7ff4ecb7c100>\n",
+      "average_return: <NodeInTaskGraph greenflow_gquant_plugin.transform.averageNode.AverageNode object at 0x7ff4ecdc1580>\n",
+      "left_merge1: <NodeInTaskGraph greenflow_gquant_plugin.transform.leftMergeNode.LeftMergeNode object at 0x7ff4ecdc1f40>\n",
+      "left_merge2: <NodeInTaskGraph greenflow_gquant_plugin.transform.leftMergeNode.LeftMergeNode object at 0x7ff4ecdc17c0>\n",
+      "output_csv1: <NodeInTaskGraph greenflow_gquant_plugin.analysis.outCsvNode.OutCsvNode object at 0x7ff4ecdc1520>\n",
+      "output_csv2: <NodeInTaskGraph greenflow_gquant_plugin.analysis.outCsvNode.OutCsvNode object at 0x7ff4ecdc1850>\n",
       "\n"
      ]
     }
@@ -1128,7 +1128,7 @@
     "\n",
     "## Node class example\n",
     "\n",
-    "Implementing custom nodes in gQuant is very straighforward.\n",
+    "Implementing custom nodes in greenflow is very straighforward.\n",
     "\n",
     "Data scientists only need to override five methods in the parent class `Node`:\n",
     "- `init`\n",
@@ -1242,7 +1242,7 @@
    ],
    "source": [
     "import inspect\n",
-    "from gquant_rapids_plugin.transform import ValueFilterNode\n",
+    "from greenflow_gquant_plugin.transform import ValueFilterNode\n",
     "\n",
     "print(inspect.getsource(ValueFilterNode))"
    ]
diff --git a/gQuant/plugins/rapids_plugin/notebooks/02_single_stock_trade.ipynb b/gQuant/plugins/gquant_plugin/notebooks/02_single_stock_trade.ipynb
similarity index 95%
rename from gQuant/plugins/rapids_plugin/notebooks/02_single_stock_trade.ipynb
rename to gQuant/plugins/gquant_plugin/notebooks/02_single_stock_trade.ipynb
index 6b115e9f..aa9b1d63 100644
--- a/gQuant/plugins/rapids_plugin/notebooks/02_single_stock_trade.ipynb
+++ b/gQuant/plugins/gquant_plugin/notebooks/02_single_stock_trade.ipynb
@@ -4,7 +4,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "### gQuant Tutorial\n",
+    "### greenflow Tutorial\n",
     "First import all the necessary modules."
    ]
   },
@@ -18,7 +18,7 @@
     "import os\n",
     "import warnings\n",
     "import ipywidgets as widgets\n",
-    "from gquant.dataframe_flow import TaskGraph\n",
+    "from greenflow.dataframe_flow import TaskGraph\n",
     "\n",
     "warnings.simplefilter(\"ignore\")"
    ]
@@ -45,7 +45,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "In this tutorial, we are going to use gQuant to do a simple quant job. The task is fully described in a yaml file"
+    "In this tutorial, we are going to use greenflow to do a simple quant job. The task is fully described in a yaml file"
    ]
   },
   {
@@ -61,13 +61,13 @@
       "    file: notebooks/data/stock_price_hist.csv.gz\n",
       "  id: stock_data\n",
       "  inputs: {}\n",
-      "  module: gquant_rapids_plugin.dataloader\n",
+      "  module: greenflow_gquant_plugin.dataloader\n",
       "  type: CsvStockLoader\n",
       "- conf:\n",
       "    file: notebooks/data/security_master.csv.gz\n",
       "  id: stock_name\n",
       "  inputs: {}\n",
-      "  module: gquant_rapids_plugin.dataloader\n",
+      "  module: greenflow_gquant_plugin.dataloader\n",
       "  type: StockNameLoader\n",
       "- conf:\n",
       "    asset: 4330\n",
@@ -75,7 +75,7 @@
       "  inputs:\n",
       "    name_map: stock_name.map_data\n",
       "    stock_in: stock_data.cudf_out\n",
-      "  module: gquant_rapids_plugin.transform\n",
+      "  module: greenflow_gquant_plugin.transform\n",
       "  type: AssetFilterNode\n",
       "- conf: {}\n",
       "  id: ''\n",
@@ -115,7 +115,7 @@
        "version_minor": 0
       },
       "text/plain": [
-       "GQuantWidget(sub=HBox(), value=[OrderedDict([('id', 'stock_data'), ('type', 'CsvStockLoader'), ('conf', {'file…"
+       "GreenflowWidget(sub=HBox(), value=[OrderedDict([('id', 'stock_data'), ('type', 'CsvStockLoader'), ('conf', {'file…"
       ]
      },
      "metadata": {},
diff --git a/gQuant/plugins/rapids_plugin/notebooks/03_simple_dask_example.ipynb b/gQuant/plugins/gquant_plugin/notebooks/03_simple_dask_example.ipynb
similarity index 89%
rename from gQuant/plugins/rapids_plugin/notebooks/03_simple_dask_example.ipynb
rename to gQuant/plugins/gquant_plugin/notebooks/03_simple_dask_example.ipynb
index 05b12a78..95d7eec5 100644
--- a/gQuant/plugins/rapids_plugin/notebooks/03_simple_dask_example.ipynb
+++ b/gQuant/plugins/gquant_plugin/notebooks/03_simple_dask_example.ipynb
@@ -7,7 +7,7 @@
    "outputs": [],
    "source": [
     "import sys; sys.path.insert(0, '..')\n",
-    "from gquant.dataframe_flow import TaskGraph"
+    "from greenflow.dataframe_flow import TaskGraph"
    ]
   },
   {
@@ -130,7 +130,7 @@
        "version_minor": 0
       },
       "text/plain": [
-       "GQuantWidget(sub=HBox(), value=[OrderedDict([('id', 'stock_data'), ('type', 'CsvStockLoader'), ('conf', {'file…"
+       "GreenflowWidget(sub=HBox(), value=[OrderedDict([('id', 'stock_data'), ('type', 'CsvStockLoader'), ('conf', {'file…"
       ]
      },
      "metadata": {},
@@ -163,7 +163,7 @@
        "version_minor": 0
       },
       "text/plain": [
-       "GQuantWidget(sub=HBox(), value=[OrderedDict([('id', 'stock_data'), ('type', 'CsvStockLoader'), ('conf', {'file…"
+       "GreenflowWidget(sub=HBox(), value=[OrderedDict([('id', 'stock_data'), ('type', 'CsvStockLoader'), ('conf', {'file…"
       ]
      },
      "metadata": {},
@@ -191,14 +191,14 @@
     {
      "data": {
       "text/plain": [
-       "['/home/yi/Projects/demo_gquant_install/plugins/rapids_plugin/notebooks/many-small/0.csv',\n",
-       " '/home/yi/Projects/demo_gquant_install/plugins/rapids_plugin/notebooks/many-small/1.csv',\n",
-       " '/home/yi/Projects/demo_gquant_install/plugins/rapids_plugin/notebooks/many-small/2.csv',\n",
-       " '/home/yi/Projects/demo_gquant_install/plugins/rapids_plugin/notebooks/many-small/3.csv',\n",
-       " '/home/yi/Projects/demo_gquant_install/plugins/rapids_plugin/notebooks/many-small/4.csv',\n",
-       " '/home/yi/Projects/demo_gquant_install/plugins/rapids_plugin/notebooks/many-small/5.csv',\n",
-       " '/home/yi/Projects/demo_gquant_install/plugins/rapids_plugin/notebooks/many-small/6.csv',\n",
-       " '/home/yi/Projects/demo_gquant_install/plugins/rapids_plugin/notebooks/many-small/7.csv']"
+       "['/home/yi/Projects/demo_greenflow_install/plugins/rapids_plugin/notebooks/many-small/0.csv',\n",
+       " '/home/yi/Projects/demo_greenflow_install/plugins/rapids_plugin/notebooks/many-small/1.csv',\n",
+       " '/home/yi/Projects/demo_greenflow_install/plugins/rapids_plugin/notebooks/many-small/2.csv',\n",
+       " '/home/yi/Projects/demo_greenflow_install/plugins/rapids_plugin/notebooks/many-small/3.csv',\n",
+       " '/home/yi/Projects/demo_greenflow_install/plugins/rapids_plugin/notebooks/many-small/4.csv',\n",
+       " '/home/yi/Projects/demo_greenflow_install/plugins/rapids_plugin/notebooks/many-small/5.csv',\n",
+       " '/home/yi/Projects/demo_greenflow_install/plugins/rapids_plugin/notebooks/many-small/6.csv',\n",
+       " '/home/yi/Projects/demo_greenflow_install/plugins/rapids_plugin/notebooks/many-small/7.csv']"
       ]
      },
      "execution_count": 6,
@@ -229,7 +229,7 @@
       "    path: notebooks/many-small\n",
       "  id: stock_data\n",
       "  inputs: {}\n",
-      "  module: gquant_rapids_plugin.dataloader\n",
+      "  module: greenflow_gquant_plugin.dataloader\n",
       "  type: CsvStockLoader\n",
       "- conf:\n",
       "    keys:\n",
@@ -238,7 +238,7 @@
       "  id: sort_node\n",
       "  inputs:\n",
       "    in: stock_data.dask_cudf_out\n",
-      "  module: gquant_rapids_plugin.transform\n",
+      "  module: greenflow_gquant_plugin.transform\n",
       "  type: SortNode\n",
       "- conf: {}\n",
       "  id: ''\n",
@@ -250,14 +250,14 @@
       "  id: average_volume\n",
       "  inputs:\n",
       "    stock_in: sort_node.out\n",
-      "  module: gquant_rapids_plugin.transform\n",
+      "  module: greenflow_gquant_plugin.transform\n",
       "  type: AverageNode\n",
       "- conf:\n",
       "    path: notebooks/dask_average_volume.csv\n",
       "  id: output_csv\n",
       "  inputs:\n",
       "    df_in: average_volume.stock_out\n",
-      "  module: gquant_rapids_plugin.analysis\n",
+      "  module: greenflow_gquant_plugin.analysis\n",
       "  type: OutCsvNode\n"
      ]
     }
@@ -279,7 +279,7 @@
        "version_minor": 0
       },
       "text/plain": [
-       "GQuantWidget(sub=HBox(), value=[OrderedDict([('id', 'stock_data'), ('type', 'CsvStockLoader'), ('conf', {'file…"
+       "GreenflowWidget(sub=HBox(), value=[OrderedDict([('id', 'stock_data'), ('type', 'CsvStockLoader'), ('conf', {'file…"
       ]
      },
      "metadata": {},
diff --git a/gQuant/plugins/rapids_plugin/notebooks/04_portfolio_trade.ipynb b/gQuant/plugins/gquant_plugin/notebooks/04_portfolio_trade.ipynb
similarity index 91%
rename from gQuant/plugins/rapids_plugin/notebooks/04_portfolio_trade.ipynb
rename to gQuant/plugins/gquant_plugin/notebooks/04_portfolio_trade.ipynb
index 02d430c6..8c8d28a0 100644
--- a/gQuant/plugins/rapids_plugin/notebooks/04_portfolio_trade.ipynb
+++ b/gQuant/plugins/gquant_plugin/notebooks/04_portfolio_trade.ipynb
@@ -4,7 +4,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "# gQuant - Making Quantitative Analysis Faster\n",
+    "# greenflow - Making Quantitative Analysis Faster\n",
     "\n",
     "## Background\n",
     "By definition, **Quantitative Finance** is the use of mathematical models and large datasets to analyze financial markets and securities, requiring massive computation to extract insight from the data. \n",
@@ -17,13 +17,13 @@
     "\n",
     "As a consequence, the quantitative workflow has become more complicated than ever. It integrates massive data from different sources, requiring multiple iterations to obtain significative results. \n",
     "\n",
-    "**gQuant** has been developed to address all these challenges by organizing dataframes into graphs. It introduces the idea of **dataframe-flow**, which manipulates dataframes at graph level. An **acyclic directed graph** is defined, where the nodes are dataframe processors and the edges are the directions of passing resulting dataframes.\n",
+    "**greenflow** has been developed to address all these challenges by organizing dataframes into graphs. It introduces the idea of **dataframe-flow**, which manipulates dataframes at graph level. An **acyclic directed graph** is defined, where the nodes are dataframe processors and the edges are the directions of passing resulting dataframes.\n",
     "\n",
     "With a graph approach, quant's workflow is described at a high level, letting quant analysts address the complicated workflow challenge.\n",
     "\n",
     "It is GPU-accelerated by leveraging [RAPIDS.ai](https://rapids.ai) technology and has **Multi-GPU and Multi-Node support**.\n",
     "\n",
-    "We can get orders of magnitude performance boosts compared to CPU. gQuant dataframe-flow is **dataframe agnostic**, and can flow:\n",
+    "We can get orders of magnitude performance boosts compared to CPU. greenflow dataframe-flow is **dataframe agnostic**, and can flow:\n",
     "- Pandas dataframe, computed in the CPU.\n",
     "- cuDF dataframe, computed in the GPU and producing the same result but much faster.\n",
     "- dask_cuDF dataframe, being the computation automatically executed on multiple nodes and multiple GPUs."
@@ -138,7 +138,7 @@
        "version_minor": 0
       },
       "text/plain": [
-       "GQuantWidget(sub=HBox(), value=[OrderedDict([('id', 'stock_data'), ('type', 'CsvStockLoader'), ('conf', {'file…"
+       "GreenflowWidget(sub=HBox(), value=[OrderedDict([('id', 'stock_data'), ('type', 'CsvStockLoader'), ('conf', {'file…"
       ]
      },
      "metadata": {},
@@ -147,7 +147,7 @@
    ],
    "source": [
     "import sys; sys.path.insert(0, '..')\n",
-    "from gquant.dataframe_flow import TaskGraph\n",
+    "from greenflow.dataframe_flow import TaskGraph\n",
     "task_graph = TaskGraph.load_taskgraph('../taskgraphs/sort_stocks.gq.yaml')\n",
     "input_cached, = task_graph.run()\n",
     "task_graph.draw()"
@@ -168,14 +168,14 @@
     {
      "data": {
       "text/plain": [
-       "['/home/yi/Projects/demo_gquant_install/notebooks/many-small/0.csv',\n",
-       " '/home/yi/Projects/demo_gquant_install/notebooks/many-small/1.csv',\n",
-       " '/home/yi/Projects/demo_gquant_install/notebooks/many-small/2.csv',\n",
-       " '/home/yi/Projects/demo_gquant_install/notebooks/many-small/3.csv',\n",
-       " '/home/yi/Projects/demo_gquant_install/notebooks/many-small/4.csv',\n",
-       " '/home/yi/Projects/demo_gquant_install/notebooks/many-small/5.csv',\n",
-       " '/home/yi/Projects/demo_gquant_install/notebooks/many-small/6.csv',\n",
-       " '/home/yi/Projects/demo_gquant_install/notebooks/many-small/7.csv']"
+       "['/home/yi/Projects/demo_greenflow_install/notebooks/many-small/0.csv',\n",
+       " '/home/yi/Projects/demo_greenflow_install/notebooks/many-small/1.csv',\n",
+       " '/home/yi/Projects/demo_greenflow_install/notebooks/many-small/2.csv',\n",
+       " '/home/yi/Projects/demo_greenflow_install/notebooks/many-small/3.csv',\n",
+       " '/home/yi/Projects/demo_greenflow_install/notebooks/many-small/4.csv',\n",
+       " '/home/yi/Projects/demo_greenflow_install/notebooks/many-small/5.csv',\n",
+       " '/home/yi/Projects/demo_greenflow_install/notebooks/many-small/6.csv',\n",
+       " '/home/yi/Projects/demo_greenflow_install/notebooks/many-small/7.csv']"
       ]
      },
      "execution_count": 4,
@@ -201,7 +201,7 @@
     "\n",
     "To mimic the end-to-end quantitative analyst task, we are going to backtest a simple mean reversion trading strategy.\n",
     "\n",
-    "The workflow can be divided into two steps. You can follow with me with an empty gQuant widget to build the TaskGraph:"
+    "The workflow can be divided into two steps. You can follow with me with an empty greenflow widget to build the TaskGraph:"
    ]
   },
   {
@@ -217,7 +217,7 @@
        "version_minor": 0
       },
       "text/plain": [
-       "GQuantWidget(sub=HBox())"
+       "GreenflowWidget(sub=HBox())"
       ]
      },
      "metadata": {},
@@ -287,7 +287,7 @@
       "    path: notebooks/many-small\n",
       "  id: stock_data\n",
       "  inputs: {}\n",
-      "  module: gquant_rapids_plugin.dataloader\n",
+      "  module: greenflow_gquant_plugin.dataloader\n",
       "  type: CsvStockLoader\n",
       "- conf:\n",
       "    input:\n",
@@ -330,7 +330,7 @@
        "version_minor": 0
       },
       "text/plain": [
-       "GQuantWidget(sub=HBox(), value=[OrderedDict([('id', 'stock_data'), ('type', 'CsvStockLoader'), ('conf', {'file…"
+       "GreenflowWidget(sub=HBox(), value=[OrderedDict([('id', 'stock_data'), ('type', 'CsvStockLoader'), ('conf', {'file…"
       ]
      },
      "metadata": {},
@@ -362,7 +362,7 @@
        "version_minor": 0
       },
       "text/plain": [
-       "GQuantWidget(sub=HBox(), value=[OrderedDict([('id', 'stock_data'), ('type', 'CsvStockLoader'), ('conf', {'file…"
+       "GreenflowWidget(sub=HBox(), value=[OrderedDict([('id', 'stock_data'), ('type', 'CsvStockLoader'), ('conf', {'file…"
       ]
      },
      "metadata": {},
@@ -378,7 +378,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "Running this toy example in a Dask distributed environment is super easy, as gQuant operates at dataframe level.\n",
+    "Running this toy example in a Dask distributed environment is super easy, as greenflow operates at dataframe level.\n",
     "\n",
     "We just need to swap cuDF dataframes to **dask_cuDF** dataframes. Try to connect the `preprocess` node to the `Dask dataframe` output port in the `stock data` node.\n",
     "\n",
@@ -398,7 +398,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "## GQuant Task Node \n",
+    "## Greenflow Task Node \n",
     "\n",
     "Each node is composed of:\n",
     "- a unique id,\n",
@@ -406,11 +406,11 @@
     "- configuration parameters\n",
     "- from zero to many input nodes ids.\n",
     "\n",
-    "gQuant's `load_taskgraph` takes this yaml file, and wires it into a graph.\n",
+    "greenflow's `load_taskgraph` takes this yaml file, and wires it into a graph.\n",
     "\n",
-    "gQuant implementation includes some common nodes, useful for quantitative finance. With the help of [Numba](https://numba.pydata.org) library, we have implemented more than 30 technical indicators used in computing trading signals. All of them computed in the GPU.\n",
+    "greenflow implementation includes some common nodes, useful for quantitative finance. With the help of [Numba](https://numba.pydata.org) library, we have implemented more than 30 technical indicators used in computing trading signals. All of them computed in the GPU.\n",
     "\n",
-    "However, gQuant's goal is not to be comprehensive for quant applications. It provides a framework that is easy for anyone to implement his own nodes in the gQuant.\n",
+    "However, greenflow's goal is not to be comprehensive for quant applications. It provides a framework that is easy for anyone to implement his own nodes in the greenflow.\n",
     "\n",
     "\n",
     "Data scientists only need to override five methods in the parent class `Node`:\n",
@@ -441,9 +441,9 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "from gquant.dataframe_flow import Node\n",
-    "from gquant_rapids_plugin._port_type_node import _PortTypesMixin\n",
-    "from gquant.dataframe_flow.portsSpecSchema import ConfSchema\n",
+    "from greenflow.dataframe_flow import Node\n",
+    "from greenflow_gquant_plugin._port_type_node import _PortTypesMixin\n",
+    "from greenflow.dataframe_flow.portsSpecSchema import ConfSchema\n",
     "\n",
     "\n",
     "class MaxNode(Node, _PortTypesMixin):\n",
@@ -521,9 +521,9 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "In case that there is no direct dataframe method for a particular logic, a Numba GPU kernel can be used to implement it. Some examples of customized GPU kernels in Numba can be found [here](https://github.com/rapidsai/gQuant/blob/master/notebooks/05_customize_nodes.ipynb).\n",
+    "In case that there is no direct dataframe method for a particular logic, a Numba GPU kernel can be used to implement it. Some examples of customized GPU kernels in Numba can be found [here](https://github.com/rapidsai/greenflow/blob/master/notebooks/05_customize_nodes.ipynb).\n",
     "\n",
-    "If we use customized GPU kernel functions inside the `process` method to process the dataframe instead of _normal_ dataframe API functions calls,  we need to add `self.delayed_process = True` in the `meta_setup` method to let gQuant handle the dask graph integration problem. If we use  _normal_ dataframe API functions inside the `process` method, nothing needs to be done as `self.delayed_process = False` by default.bgQuant automatically handles the complication of including a customized GPU kernel node into the Dask computation graph.\n",
+    "If we use customized GPU kernel functions inside the `process` method to process the dataframe instead of _normal_ dataframe API functions calls,  we need to add `self.delayed_process = True` in the `meta_setup` method to let greenflow handle the dask graph integration problem. If we use  _normal_ dataframe API functions inside the `process` method, nothing needs to be done as `self.delayed_process = False` by default.bgreenflow automatically handles the complication of including a customized GPU kernel node into the Dask computation graph.\n",
     "\n",
     "Note, we set `self.delayed_process = True` for the `SortNode`. So th sort is performed at the Dask data partition level instead of sorting it globally. This has a benefits of guranteeing the sortting doens't pollute the data partition allocation, as sometimes we want to make sure the data partition remain the same during the distributed computation. "
    ]
@@ -685,7 +685,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "gQuant TaskGraph can be evaluated by overwritting any of the Node's parameters. E.g. we can change the parameters to filter out the stocks:"
+    "greenflow TaskGraph can be evaluated by overwritting any of the Node's parameters. E.g. we can change the parameters to filter out the stocks:"
    ]
   },
   {
@@ -918,7 +918,7 @@
     "## Strategy parameter search\n",
     "Quantitative analysts often need to explore different parameters for their trading strategy.\n",
     "\n",
-    "gQuant speeds up this iterative exploration process by using cached dataframes and sub-graphs evaluation.\n",
+    "greenflow speeds up this iterative exploration process by using cached dataframes and sub-graphs evaluation.\n",
     "\n",
     "To find the optimal parameters for this toy mean reversion strategy, we only need the dataframe from `sort_2` node, which is cached in the `gpu_strategy_cached` variable.\n",
     "\n",
diff --git a/gQuant/plugins/rapids_plugin/notebooks/05_customize_nodes_with_ports.ipynb b/gQuant/plugins/gquant_plugin/notebooks/05_customize_nodes_with_ports.ipynb
similarity index 94%
rename from gQuant/plugins/rapids_plugin/notebooks/05_customize_nodes_with_ports.ipynb
rename to gQuant/plugins/gquant_plugin/notebooks/05_customize_nodes_with_ports.ipynb
index 45578aa8..bdf87ad2 100644
--- a/gQuant/plugins/rapids_plugin/notebooks/05_customize_nodes_with_ports.ipynb
+++ b/gQuant/plugins/gquant_plugin/notebooks/05_customize_nodes_with_ports.ipynb
@@ -4,9 +4,9 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "### Customize your own GPU Kernels in gQuant\n",
+    "### Customize your own GPU Kernels in greenflow\n",
     "\n",
-    "The gQuant is designed to accelerate quantitive finance workflows on the GPU. The acceleration on GPU is facilitated by using cuDF dataframes organized into a computation graph. The cuDF project is a continously evolving library that provides a pandas-like API. Sometimes the data scientists are facing a few challenges that cannot be easily solved:\n",
+    "The greenflow is designed to accelerate quantitive finance workflows on the GPU. The acceleration on GPU is facilitated by using cuDF dataframes organized into a computation graph. The cuDF project is a continously evolving library that provides a pandas-like API. Sometimes the data scientists are facing a few challenges that cannot be easily solved:\n",
     "\n",
     "    1. The quantitative work needs customized logic to manipulate the data, and there are no direct methods within cuDF to support this logic.\n",
     "    2. Each cuDF dataframe method call launches the GPU kernel once. For performance crtical task, it is sometimes required to wrap lots of computation steps together in a single GPU kernel to reduce the kernel launch overheads.\n",
@@ -23,9 +23,9 @@
     "import sys; sys.path.insert(0, '..')\n",
     "# Load necessary Python modules\n",
     "import sys\n",
-    "from gquant.dataframe_flow import TaskSpecSchema, TaskGraph, MetaData\n",
-    "from gquant.dataframe_flow import Node, NodePorts, PortsSpecSchema\n",
-    "from gquant.dataframe_flow import ConfSchema\n",
+    "from greenflow.dataframe_flow import TaskSpecSchema, TaskGraph, MetaData\n",
+    "from greenflow.dataframe_flow import Node, NodePorts, PortsSpecSchema\n",
+    "from greenflow.dataframe_flow import ConfSchema\n",
     "import cudf\n",
     "import numpy as np\n",
     "from numba import cuda\n",
@@ -81,9 +81,9 @@
     "\n",
     "The `meta_setup` is used to compute the output meta information. It returns a dictionary where keys correspond to the output ports.\n",
     "\n",
-    "The `conf_schema` is used to define the Node configuration [JSON schema](https://json-schema.org/). gQuantlab UI uses [RJSF](https://github.com/rjsf-team/react-jsonschema-form) project to generate HTML form elements based on the JSON schema. [RJSF playground](https://rjsf-team.github.io/react-jsonschema-form/)  is a good place to learn how to write JSON schema and visualize it. `conf_schema` returns `ConfSchema` which encapsulate the JSON schema and UI schema together.\n",
+    "The `conf_schema` is used to define the Node configuration [JSON schema](https://json-schema.org/). greenflowlab UI uses [RJSF](https://github.com/rjsf-team/react-jsonschema-form) project to generate HTML form elements based on the JSON schema. [RJSF playground](https://rjsf-team.github.io/react-jsonschema-form/)  is a good place to learn how to write JSON schema and visualize it. `conf_schema` returns `ConfSchema` which encapsulate the JSON schema and UI schema together.\n",
     "\n",
-    "The `column` and `port_types` information sometimes are determined dynamically. gQuant provides a few utility functions to help get dynamical graph information. `self.get_connected_inports()` will return a dictionay where keys are connected inport names and values are inport types. \n",
+    "The `column` and `port_types` information sometimes are determined dynamically. greenflow provides a few utility functions to help get dynamical graph information. `self.get_connected_inports()` will return a dictionay where keys are connected inport names and values are inport types. \n",
     "`self.get_input_meta()` will return a dictionary where keys are connected inport names and values are column name/type paris from the parent node. `self.outport_connected(port_name)` method returns a boolean if the output port `port_name` is connected. The `PointNode` uses it to determine what kind of computation it needs to do depending on the connection."
    ]
   },
@@ -308,7 +308,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "We can draw the graph in an interactive widget. First, let's register the dynamically defined gQuant nodes so the client knows about them. Note, this step is only needed if we would like to interact with gQuant by Jupyterlab UI. "
+    "We can draw the graph in an interactive widget. First, let's register the dynamically defined greenflow nodes so the client knows about them. Note, this step is only needed if we would like to interact with greenflow by Jupyterlab UI. "
    ]
   },
   {
@@ -324,7 +324,7 @@
        "version_minor": 0
       },
       "text/plain": [
-       "GQuantWidget(sub=HBox())"
+       "GreenflowWidget(sub=HBox())"
       ]
      },
      "metadata": {},
@@ -356,7 +356,7 @@
        "version_minor": 0
       },
       "text/plain": [
-       "GQuantWidget(sub=HBox(), value=[OrderedDict([('id', 'points_task'), ('type', 'PointNode'), ('conf', {'npts': 1…"
+       "GreenflowWidget(sub=HBox(), value=[OrderedDict([('id', 'points_task'), ('type', 'PointNode'), ('conf', {'npts': 1…"
       ]
      },
      "metadata": {},
@@ -519,7 +519,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "The `self.delayed_process = True` flag in the `meta_setup` is necesary to enable the logic in the `Node` class for handling `dask_cudf` dataframes in order to use Dask (for distributed computation i.e. multi-gpu in examples later on). The `dask_cudf` dataframe does not support GPU customized kernels directly. The `to_delayed` and `from_delayed` low level interfaces of `dask_cudf` enable this support. The gQuant framework handles `dask_cudf` dataframes automatically under the hood when we set this flag."
+    "The `self.delayed_process = True` flag in the `meta_setup` is necesary to enable the logic in the `Node` class for handling `dask_cudf` dataframes in order to use Dask (for distributed computation i.e. multi-gpu in examples later on). The `dask_cudf` dataframe does not support GPU customized kernels directly. The `to_delayed` and `from_delayed` low level interfaces of `dask_cudf` enable this support. The greenflow framework handles `dask_cudf` dataframes automatically under the hood when we set this flag."
    ]
   },
   {
@@ -537,7 +537,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "Using gQuant we can now define a Node that calls this CuPy kernel to compute the distance and save the results into `distance_cupy` column of a `cudf` dataframe."
+    "Using greenflow we can now define a Node that calls this CuPy kernel to compute the distance and save the results into `distance_cupy` column of a `cudf` dataframe."
    ]
   },
   {
@@ -656,7 +656,7 @@
    "source": [
     "### Computing using the Nodes with customized GPU kernels\n",
     "\n",
-    "First we construct the computation graph for gQuant."
+    "First we construct the computation graph for greenflow."
    ]
   },
   {
@@ -672,7 +672,7 @@
        "version_minor": 0
       },
       "text/plain": [
-       "GQuantWidget(sub=HBox(), value=[OrderedDict([('id', 'points_task'), ('type', 'PointNode'), ('conf', {'npts': 1…"
+       "GreenflowWidget(sub=HBox(), value=[OrderedDict([('id', 'points_task'), ('type', 'PointNode'), ('conf', {'npts': 1…"
       ]
      },
      "metadata": {},
@@ -929,7 +929,7 @@
        "version_minor": 0
       },
       "text/plain": [
-       "GQuantWidget(sub=HBox(), value=[OrderedDict([('id', 'points_task'), ('type', 'PointNode'), ('conf', {'npts': 1…"
+       "GreenflowWidget(sub=HBox(), value=[OrderedDict([('id', 'points_task'), ('type', 'PointNode'), ('conf', {'npts': 1…"
       ]
      },
      "metadata": {},
@@ -1175,7 +1175,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "We add this distribution node to the computation graph to convert `cudf` dataframes into `dask-cudf` dataframes. The `dask-cudf` dataframes are handled automatically in gQuant when `self.delayed_process=True` within a `Node` implementation (setup in `meta_setup`). When using nodes with ports with `self.delayed_process=True` setting, it is required that all input and output ports be of type `cudf.DataFrame`. Otherwise don't set  `self.delayed_process` and one can write custom logic to handle distributed dataframes (refer to `VerifyNode` abover for an example where `dask_cudf` dataframes are handled directly within the process method)."
+    "We add this distribution node to the computation graph to convert `cudf` dataframes into `dask-cudf` dataframes. The `dask-cudf` dataframes are handled automatically in greenflow when `self.delayed_process=True` within a `Node` implementation (setup in `meta_setup`). When using nodes with ports with `self.delayed_process=True` setting, it is required that all input and output ports be of type `cudf.DataFrame`. Otherwise don't set  `self.delayed_process` and one can write custom logic to handle distributed dataframes (refer to `VerifyNode` abover for an example where `dask_cudf` dataframes are handled directly within the process method)."
    ]
   },
   {
@@ -1191,7 +1191,7 @@
        "version_minor": 0
       },
       "text/plain": [
-       "GQuantWidget(sub=HBox(), value=[OrderedDict([('id', 'points_task'), ('type', 'PointNode'), ('conf', {'npts': 1…"
+       "GreenflowWidget(sub=HBox(), value=[OrderedDict([('id', 'points_task'), ('type', 'PointNode'), ('conf', {'npts': 1…"
       ]
      },
      "metadata": {},
@@ -1307,7 +1307,7 @@
        "version_minor": 0
       },
       "text/plain": [
-       "GQuantWidget(cache={'nodes': [{'width': 110, 'id': 'points_task', 'type': 'PointNode', 'schema': {'title': 'Po…"
+       "GreenflowWidget(cache={'nodes': [{'width': 110, 'id': 'points_task', 'type': 'PointNode', 'schema': {'title': 'Po…"
       ]
      },
      "metadata": {},
@@ -1425,7 +1425,7 @@
    "source": [
     "### Saving Custom Nodes and Kernels\n",
     "\n",
-    "The gQuant examples already implement a number of `Nodes`. These can be found in `gquant.plugin_nodes` submodules.\n",
+    "The greenflow examples already implement a number of `Nodes`. These can be found in `greenflow.plugin_nodes` submodules.\n",
     "\n",
     "The customized kernels and nodes can be saved to your own python modules for future re-use instead of having to re-define them at runtime. The nodes we defined above were to a written to a python module \"custom_port_nodes.py\" (the `DistanceNode` was simplified to ommit the absolute distance calculation). We will re-run our workflow importing the Nodes from the custom module we wrote out.\n",
     "\n",
@@ -1445,7 +1445,7 @@
        "version_minor": 0
       },
       "text/plain": [
-       "GQuantWidget(sub=HBox(), value=[OrderedDict([('id', 'points_task'), ('type', 'PointNode'), ('conf', {'npts': 1…"
+       "GreenflowWidget(sub=HBox(), value=[OrderedDict([('id', 'points_task'), ('type', 'PointNode'), ('conf', {'npts': 1…"
       ]
      },
      "metadata": {},
@@ -1453,7 +1453,7 @@
     }
    ],
    "source": [
-    "from gquant.dataframe_flow.util import get_file_path\n",
+    "from greenflow.dataframe_flow.util import get_file_path\n",
     "npartitions = len(client.scheduler_info()['workers'])\n",
     "points_tspec = {\n",
     "    TaskSpecSchema.task_id: 'points_task',\n",
@@ -1622,9 +1622,9 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "The gQuant TaskGraph file is created and saved. You can double click on it to open it up in the JupyterLab to edit it.\n",
+    "The greenflow TaskGraph file is created and saved. You can double click on it to open it up in the JupyterLab to edit it.\n",
     "\n",
-    "Or you can display it by gQuant widget and play with it interactively "
+    "Or you can display it by greenflow widget and play with it interactively "
    ]
   },
   {
@@ -1640,7 +1640,7 @@
        "version_minor": 0
       },
       "text/plain": [
-       "GQuantWidget(sub=HBox(), value=[OrderedDict([('id', 'points_task'), ('type', 'PointNode'), ('conf', {'npts': 1…"
+       "GreenflowWidget(sub=HBox(), value=[OrderedDict([('id', 'points_task'), ('type', 'PointNode'), ('conf', {'npts': 1…"
       ]
      },
      "metadata": {},
@@ -1772,7 +1772,7 @@
     "\n",
     "We recommend that the data scientists select the approach appropriate for their task taking into consideration the efficiency, latency, difficulty and flexibility of their workflow. \n",
     "\n",
-    "In this blog, we showed how to wrap the customized GPU kernels in gQuant nodes. Also, by taking advantage of having the gQuant handle the low-level Dask interfaces for the developer, we demonstrated how to use the gQuant workflow with Dask distributed computations."
+    "In this blog, we showed how to wrap the customized GPU kernels in greenflow nodes. Also, by taking advantage of having the greenflow handle the low-level Dask interfaces for the developer, we demonstrated how to use the greenflow workflow with Dask distributed computations."
    ]
   },
   {
diff --git a/gQuant/plugins/rapids_plugin/notebooks/06_xgboost_trade.ipynb b/gQuant/plugins/gquant_plugin/notebooks/06_xgboost_trade.ipynb
similarity index 93%
rename from gQuant/plugins/rapids_plugin/notebooks/06_xgboost_trade.ipynb
rename to gQuant/plugins/gquant_plugin/notebooks/06_xgboost_trade.ipynb
index 0cf9083b..a0a038c7 100644
--- a/gQuant/plugins/rapids_plugin/notebooks/06_xgboost_trade.ipynb
+++ b/gQuant/plugins/gquant_plugin/notebooks/06_xgboost_trade.ipynb
@@ -6,12 +6,12 @@
    "source": [
     "# Trade with XGBoost algorithm\n",
     "## Background\n",
-    "In the [portfolio trade example](https://github.com/rapidsai/gQuant/blob/master/notebooks/04_portfolio_trade.ipynb), we use gQuant to backtest a simple mean reversion trading strategy on 5000 stocks.\n",
+    "In the [portfolio trade example](https://github.com/rapidsai/greenflow/blob/master/notebooks/04_portfolio_trade.ipynb), we use greenflow to backtest a simple mean reversion trading strategy on 5000 stocks.\n",
     "It shows decent performance by tweaking the moving average window size. Searching for alpha signal is the ultimate goal for the trading companies. A lot of different methods are used to do so. Machine learning approach\n",
     "is one of those. It has the benefits of extracting important information in the data automatically given enough computation. There are a few popular machine learning algrithoms, including SVM, Random forest tree etc. Amoung those, XGBoost is known to be a very powerful machine \n",
-    "learning method that is winning a lot of [ML competitions](https://medium.com/syncedreview/tree-boosting-with-xgboost-why-does-xgboost-win-every-machine-learning-competition-ca8034c0b283). Luckily, the [RAPIDS library](https://github.com/rapidsai) accelerates the XGBoost ML algorithm in the GPU so that we can easily take advantage of it in the gQuant. \n",
+    "learning method that is winning a lot of [ML competitions](https://medium.com/syncedreview/tree-boosting-with-xgboost-why-does-xgboost-win-every-machine-learning-competition-ca8034c0b283). Luckily, the [RAPIDS library](https://github.com/rapidsai) accelerates the XGBoost ML algorithm in the GPU so that we can easily take advantage of it in the greenflow. \n",
     "\n",
-    "In this notebook, we are going to demo how to use gQuant to backtest a XGBoost based trading stragty.\n",
+    "In this notebook, we are going to demo how to use greenflow to backtest a XGBoost based trading stragty.\n",
     "\n",
     "\n",
     "## Environment Preparation\n",
@@ -120,7 +120,7 @@
        "version_minor": 0
       },
       "text/plain": [
-       "GQuantWidget(sub=HBox(), value=[OrderedDict([('id', 'stock_data'), ('type', 'CsvStockLoader'), ('conf', {'file…"
+       "GreenflowWidget(sub=HBox(), value=[OrderedDict([('id', 'stock_data'), ('type', 'CsvStockLoader'), ('conf', {'file…"
       ]
      },
      "metadata": {},
@@ -130,7 +130,7 @@
    "source": [
     "import sys; sys.path.insert(0, '..')\n",
     "import warnings\n",
-    "from gquant.dataframe_flow import TaskGraph\n",
+    "from greenflow.dataframe_flow import TaskGraph\n",
     "import ipywidgets as widgets\n",
     "import os\n",
     "warnings.simplefilter(\"ignore\")\n",
@@ -154,14 +154,14 @@
     {
      "data": {
       "text/plain": [
-       "['/home/yi/Projects/demo_gquant_install/notebooks/many-small/0.csv',\n",
-       " '/home/yi/Projects/demo_gquant_install/notebooks/many-small/1.csv',\n",
-       " '/home/yi/Projects/demo_gquant_install/notebooks/many-small/2.csv',\n",
-       " '/home/yi/Projects/demo_gquant_install/notebooks/many-small/3.csv',\n",
-       " '/home/yi/Projects/demo_gquant_install/notebooks/many-small/4.csv',\n",
-       " '/home/yi/Projects/demo_gquant_install/notebooks/many-small/5.csv',\n",
-       " '/home/yi/Projects/demo_gquant_install/notebooks/many-small/6.csv',\n",
-       " '/home/yi/Projects/demo_gquant_install/notebooks/many-small/7.csv']"
+       "['/home/yi/Projects/demo_greenflow_install/notebooks/many-small/0.csv',\n",
+       " '/home/yi/Projects/demo_greenflow_install/notebooks/many-small/1.csv',\n",
+       " '/home/yi/Projects/demo_greenflow_install/notebooks/many-small/2.csv',\n",
+       " '/home/yi/Projects/demo_greenflow_install/notebooks/many-small/3.csv',\n",
+       " '/home/yi/Projects/demo_greenflow_install/notebooks/many-small/4.csv',\n",
+       " '/home/yi/Projects/demo_greenflow_install/notebooks/many-small/5.csv',\n",
+       " '/home/yi/Projects/demo_greenflow_install/notebooks/many-small/6.csv',\n",
+       " '/home/yi/Projects/demo_greenflow_install/notebooks/many-small/7.csv']"
       ]
      },
      "execution_count": 4,
@@ -228,7 +228,7 @@
     "\n",
     "The whole workflow can be organized into a TaskGraph, which are fully described in a `.gq.yaml` file.\n",
     "\n",
-    "Each nodes has a unique id, a node type, configuration parameters and input nodes ids. gQuant takes this yaml file, wires it into a graph to visualize it.\n",
+    "Each nodes has a unique id, a node type, configuration parameters and input nodes ids. greenflow takes this yaml file, wires it into a graph to visualize it.\n",
     "\n",
     "First let's load the proprocess TaskGraph:"
    ]
@@ -246,7 +246,7 @@
        "version_minor": 0
       },
       "text/plain": [
-       "GQuantWidget(sub=HBox(), value=[OrderedDict([('id', 'stock_data'), ('type', 'CsvStockLoader'), ('conf', {'file…"
+       "GreenflowWidget(sub=HBox(), value=[OrderedDict([('id', 'stock_data'), ('type', 'CsvStockLoader'), ('conf', {'file…"
       ]
      },
      "metadata": {},
@@ -278,7 +278,7 @@
        "version_minor": 0
       },
       "text/plain": [
-       "GQuantWidget(sub=HBox(), value=[OrderedDict([('id', 'stock_data'), ('type', 'CsvStockLoader'), ('conf', {'file…"
+       "GreenflowWidget(sub=HBox(), value=[OrderedDict([('id', 'stock_data'), ('type', 'CsvStockLoader'), ('conf', {'file…"
       ]
      },
      "metadata": {},
@@ -301,7 +301,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "The features used for XGBoost algorithm are prepared in the `xgboost` Task node, where `cuIndicator` module is used to compute the technical indicators in the GPU for all the stock symbols. `xgboost` is the Task node that is used to compute the trading signals from the stock technical indicators. Each of the gQuant Task node is implemented by overwriting `meta_setup`, `process`, `ports_setup`, `conf_chema` methods of the Node base class. Please refer to [customize nodes notebook](https://github.com/rapidsai/gQuant/blob/master/notebooks/05_customize_nodes.ipynb) for details. Following is the source code for \"XGBoostStrategyNode\":"
+    "The features used for XGBoost algorithm are prepared in the `xgboost` Task node, where `cuIndicator` module is used to compute the technical indicators in the GPU for all the stock symbols. `xgboost` is the Task node that is used to compute the trading signals from the stock technical indicators. Each of the greenflow Task node is implemented by overwriting `meta_setup`, `process`, `ports_setup`, `conf_chema` methods of the Node base class. Please refer to [customize nodes notebook](https://github.com/rapidsai/greenflow/blob/master/notebooks/05_customize_nodes.ipynb) for details. Following is the source code for \"XGBoostStrategyNode\":"
    ]
   },
   {
@@ -550,7 +550,7 @@
    ],
    "source": [
     "import inspect\n",
-    "from gquant_rapids_plugin.strategy import XGBoostStrategyNode\n",
+    "from greenflow_gquant_plugin.strategy import XGBoostStrategyNode\n",
     "\n",
     "print(inspect.getsource(XGBoostStrategyNode))"
    ]
@@ -560,7 +560,7 @@
    "metadata": {},
    "source": [
     "### XGBoost Trading Strategy Performance\n",
-    "Similar to tensorflow, gQuant graph is evaluated by specifying the output nodes and input nodes replacement. We first look at the column result from data preparation node."
+    "Similar to tensorflow, greenflow graph is evaluated by specifying the output nodes and input nodes replacement. We first look at the column result from data preparation node."
    ]
   },
   {
@@ -591,7 +591,7 @@
     "It adds the columns \"BO_BA_b1_10\", \"BO_BA_b2_10\", 'CH_OS_10_20\" as features and \"SHFIT_-1\" as the target, which is the return of next day. A good feature should be the one that provides highest information about the next day return. In the case we have no prior information about it,\n",
     "we can compute as many features as we like and leave it to the XGBoost to find the right combination of those features. \n",
     "\n",
-    "Evaluate the leaf nodes of the backtesting graph by gQuant `run` method."
+    "Evaluate the leaf nodes of the backtesting graph by greenflow `run` method."
    ]
   },
   {
@@ -761,7 +761,7 @@
    "metadata": {},
    "source": [
     "\n",
-    "Clearly, 3 feautres is way too little here. gQuant implmented 36 technical indicators. We can change the configuration of node_technical_indicator node to include more features."
+    "Clearly, 3 feautres is way too little here. greenflow implmented 36 technical indicators. We can change the configuration of node_technical_indicator node to include more features."
    ]
   },
   {
@@ -903,7 +903,7 @@
        "version_minor": 0
       },
       "text/plain": [
-       "GQuantWidget(cache={'nodes': [{'width': 140, 'id': 'stock_data', 'type': 'CsvStockLoader', 'schema': {'title':…"
+       "GreenflowWidget(cache={'nodes': [{'width': 140, 'id': 'stock_data', 'type': 'CsvStockLoader', 'schema': {'title':…"
       ]
      },
      "metadata": {},
@@ -1098,7 +1098,7 @@
    "metadata": {},
    "source": [
     "## Strategy parameter search\n",
-    "Quantitative analyst usually need to explore different parameters for their trading strategy. The exploration process is an iterative process. gQuant help to speed up this by allowing using cached dataframe and evaluating the sub-graphs.\n",
+    "Quantitative analyst usually need to explore different parameters for their trading strategy. The exploration process is an iterative process. greenflow help to speed up this by allowing using cached dataframe and evaluating the sub-graphs.\n",
     "\n",
     "To find the optimal technical indicator parameters for this XGBoost strategy, we build a wiget to search the parameter interactively. "
    ]
@@ -1136,7 +1136,7 @@
    "metadata": {},
    "source": [
     "### Conclusions\n",
-    "In this notebook, we demoed how to use gQuant to backtest XGBoost trading strategy. It is convenient and efficient to use indicator node from the gQuant to compute features for all the stocks in the dataset in the GPU. The XGBoost training are computed in the GPU, so we can get the results quickly. This example shows the XGBoost algorithm's power in finding trading signals. We can achieve close to 2 raw Sharpe ratio in the testing time period."
+    "In this notebook, we demoed how to use greenflow to backtest XGBoost trading strategy. It is convenient and efficient to use indicator node from the greenflow to compute features for all the stocks in the dataset in the GPU. The XGBoost training are computed in the GPU, so we can get the results quickly. This example shows the XGBoost algorithm's power in finding trading signals. We can achieve close to 2 raw Sharpe ratio in the testing time period."
    ]
   },
   {
diff --git a/gQuant/plugins/rapids_plugin/notebooks/07_fractional_differencing.ipynb b/gQuant/plugins/gquant_plugin/notebooks/07_fractional_differencing.ipynb
similarity index 90%
rename from gQuant/plugins/rapids_plugin/notebooks/07_fractional_differencing.ipynb
rename to gQuant/plugins/gquant_plugin/notebooks/07_fractional_differencing.ipynb
index 4743f05e..473b4f63 100644
--- a/gQuant/plugins/rapids_plugin/notebooks/07_fractional_differencing.ipynb
+++ b/gQuant/plugins/gquant_plugin/notebooks/07_fractional_differencing.ipynb
@@ -10,7 +10,7 @@
     "Fractional Differencing is a signal processing technique that is used to remove the non-stationarity from the time series while maintaining as much memory as possible. It is widely used in FSI to prepare training data for machine learning algorithms. In this [open-source project](https://github.com/ritchieng/fractional_differencing_gpu/blob/master/notebooks/gpu_fractional_differencing.ipynb) done by Ensemble Capital, fractional differencing computation is accelerated via `cudf.appy_chunk` method in the GPU. It achieves hundreds of times acceleration compared with CPU implementation in their [report](https://www.researchgate.net/publication/335159299_GFD_GPU_Fractional_Differencing_for_Rapid_Large-scale_Stationarizing_of_Time_Series_Data_while_Minimizing_Memory_Loss). \n",
     "Using `apply_rows` and `apply_chunks` method from the cudf library is the easiest way of customizing GPU computations as covered in this [blog](https://medium.com/rapids-ai/user-defined-functions-in-rapids-cudf-2d7c3fc2728d). However, it is not the most efficient way.\n",
     "\n",
-    "In this notebook, we are going to show how to use Numba to do fractional differencing computation efficiently. As gQuant wrap the fractional differencing function in the computation node, we are going to show it is easy for data scientists to compute fractional differencing signals and use them to generate alpha signals. \n",
+    "In this notebook, we are going to show how to use Numba to do fractional differencing computation efficiently. As greenflow wrap the fractional differencing function in the computation node, we are going to show it is easy for data scientists to compute fractional differencing signals and use them to generate alpha signals. \n",
     "\n",
     "### Environment Preparation"
    ]
@@ -24,7 +24,7 @@
     "import sys; sys.path.insert(0, '..')\n",
     "\n",
     "import warnings\n",
-    "import gquant\n",
+    "import greenflow\n",
     "import ipywidgets as widgets\n",
     "import os\n",
     "import time\n",
@@ -34,8 +34,8 @@
     "import inspect\n",
     "from numba import njit\n",
     "from numba import prange\n",
-    "from gquant.dataframe_flow.task import load_modules\n",
-    "from gquant_rapids_plugin.cuindicator import get_weights_floored, fractional_diff\n",
+    "from greenflow.dataframe_flow.task import load_modules\n",
+    "from greenflow_gquant_plugin.cuindicator import get_weights_floored, fractional_diff\n",
     "warnings.simplefilter(\"ignore\")"
    ]
   },
@@ -124,7 +124,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "Following is the gQuant's fractional differencing implementation via Numba library"
+    "Following is the greenflow's fractional differencing implementation via Numba library"
    ]
   },
   {
@@ -404,7 +404,7 @@
    "source": [
     "Fractional differencing is essentially doing 1D convolution computation with the kernel values set to be the weights computed from `get_weights_floored`. Check the original [notebook](https://github.com/ritchieng/fractional_differencing_gpu/blob/master/notebooks/gpu_fractional_differencing.ipynb) for the details of the meanings of the weights. To make convolution computation faster, we divide the long input array into small chunks and send to different thread blocks. All the array chunks and the weights are loaded into the GPU shared memory for fast IO. The device function `conv_window` is doing the convolution computation for one thread.\n",
     "\n",
-    "We can compare the performance of gQuant GPU implementation vs the original one and CPU implementation:"
+    "We can compare the performance of greenflow GPU implementation vs the original one and CPU implementation:"
    ]
   },
   {
@@ -416,10 +416,10 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "array size 100000, Ensemble: time 0.273 s, gQuant GPU Time 0.374 s, gQuant CPU Time 0.499, speed up 0.73, speed up vs CPU 1.33, error 0.0000 \n",
-      "array size 1000000, Ensemble: time 0.144 s, gQuant GPU Time 0.007 s, gQuant CPU Time 0.035, speed up 20.04, speed up vs CPU 4.83, error 0.0000 \n",
-      "array size 10000000, Ensemble: time 1.023 s, gQuant GPU Time 0.031 s, gQuant CPU Time 0.125, speed up 32.87, speed up vs CPU 4.02, error 0.0000 \n",
-      "array size 100000000, Ensemble: time 10.207 s, gQuant GPU Time 0.267 s, gQuant CPU Time 1.057, speed up 38.18, speed up vs CPU 3.95, error 0.0000 \n"
+      "array size 100000, Ensemble: time 0.273 s, greenflow GPU Time 0.374 s, greenflow CPU Time 0.499, speed up 0.73, speed up vs CPU 1.33, error 0.0000 \n",
+      "array size 1000000, Ensemble: time 0.144 s, greenflow GPU Time 0.007 s, greenflow CPU Time 0.035, speed up 20.04, speed up vs CPU 4.83, error 0.0000 \n",
+      "array size 10000000, Ensemble: time 1.023 s, greenflow GPU Time 0.031 s, greenflow CPU Time 0.125, speed up 32.87, speed up vs CPU 4.02, error 0.0000 \n",
+      "array size 100000000, Ensemble: time 10.207 s, greenflow GPU Time 0.267 s, greenflow CPU Time 1.057, speed up 38.18, speed up vs CPU 3.95, error 0.0000 \n"
      ]
     }
    ],
@@ -439,7 +439,7 @@
     "    duration = end - start\n",
     "\n",
     "    start = time.time()\n",
-    "    gquant_gpu, weights = fractional_diff(df_raw2['in'], d=0.5, floor=5e-5)\n",
+    "    greenflow_gpu, weights = fractional_diff(df_raw2['in'], d=0.5, floor=5e-5)\n",
     "    cuda.synchronize()\n",
     "    end = time.time()\n",
     "    optimized_duration = end - start\n",
@@ -451,16 +451,16 @@
     "    end = time.time()\n",
     "    cpu_duration = end - start\n",
     "    \n",
-    "    err = np.abs(df_raw_fd_from_gpu['out'].to_array()[weights.size-1:] - np.array(gquant_gpu)[weights.size-1:]).max()\n",
+    "    err = np.abs(df_raw_fd_from_gpu['out'].to_array()[weights.size-1:] - np.array(greenflow_gpu)[weights.size-1:]).max()\n",
     "    err = max(np.abs(df_raw_fd_from_gpu['out'].to_array()[weights.size-1:] - cpu_result[weights.size-1:]).max(), err)\n",
-    "    print('array size %d, Ensemble: time %.3f s, gQuant GPU Time %.3f s, gQuant CPU Time %.3f, speed up %.2f, speed up vs CPU %.2f, error %.4f ' % (10**int(i), duration, optimized_duration, cpu_duration, duration / optimized_duration, cpu_duration/optimized_duration, err))\n"
+    "    print('array size %d, Ensemble: time %.3f s, greenflow GPU Time %.3f s, greenflow CPU Time %.3f, speed up %.2f, speed up vs CPU %.2f, error %.4f ' % (10**int(i), duration, optimized_duration, cpu_duration, duration / optimized_duration, cpu_duration/optimized_duration, err))\n"
    ]
   },
   {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "For the array of length 100m, gQuant can achieve 100x speedup compare with the Ensemble Capitial's GPU implementatoin and 30x speed up compared with multiple core CPU."
+    "For the array of length 100m, greenflow can achieve 100x speedup compare with the Ensemble Capitial's GPU implementatoin and 30x speed up compared with multiple core CPU."
    ]
   },
   {
@@ -469,7 +469,7 @@
    "source": [
     "### Use the fractional differencing signal to trade stocks\n",
     "\n",
-    "We will use the same [XGBoost example](https://github.com/rapidsai/gQuant/blob/master/notebooks/06_xgboost_trade.ipynbx) to do backtest with fractional differencing signals. The workflow includes the following steps:\n",
+    "We will use the same [XGBoost example](https://github.com/rapidsai/greenflow/blob/master/notebooks/06_xgboost_trade.ipynbx) to do backtest with fractional differencing signals. The workflow includes the following steps:\n",
     "\n",
     "1. Preprocess the datasets.\n",
     "\n",
@@ -490,7 +490,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "Each nodes has a unique id, a node type, configuration parameters and input nodes ids. gQuant takes this yaml file, wires it into a graph to visualize it. "
+    "Each nodes has a unique id, a node type, configuration parameters and input nodes ids. greenflow takes this yaml file, wires it into a graph to visualize it. "
    ]
   },
   {
@@ -506,7 +506,7 @@
        "version_minor": 0
       },
       "text/plain": [
-       "GQuantWidget(sub=HBox(), value=[OrderedDict([('id', 'stock_data'), ('type', 'CsvStockLoader'), ('conf', {'file…"
+       "GreenflowWidget(sub=HBox(), value=[OrderedDict([('id', 'stock_data'), ('type', 'CsvStockLoader'), ('conf', {'file…"
       ]
      },
      "metadata": {},
@@ -518,8 +518,8 @@
     "import sys\n",
     "import os\n",
     "sys.path.append('..')\n",
-    "import gquant\n",
-    "from gquant.dataframe_flow import TaskGraph\n",
+    "import greenflow\n",
+    "from greenflow.dataframe_flow import TaskGraph\n",
     "import ipywidgets as widgets\n",
     "import warnings\n",
     "warnings.simplefilter(\"ignore\")\n",
@@ -532,7 +532,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "The features used for XGBoost algorithm are prepared in the `xgboost` Task node, where `cuIndicator` module is used to compute the technical indicators in the GPU for all the stock symbols. `xgboost` is the Task node that is used to compute the trading signals from the stock technical indicators. Each of the gQuant Task node is implemented by overwriting `meta_setup`, `process`, `ports_setup`, `conf_chema` methods of the Node base class. Please refer to [customize nodes notebook](https://github.com/rapidsai/gQuant/blob/master/notebooks/05_customize_nodes.ipynb) for details. Following is the source code for \"XGBoostStrategyNode\":"
+    "The features used for XGBoost algorithm are prepared in the `xgboost` Task node, where `cuIndicator` module is used to compute the technical indicators in the GPU for all the stock symbols. `xgboost` is the Task node that is used to compute the trading signals from the stock technical indicators. Each of the greenflow Task node is implemented by overwriting `meta_setup`, `process`, `ports_setup`, `conf_chema` methods of the Node base class. Please refer to [customize nodes notebook](https://github.com/rapidsai/greenflow/blob/master/notebooks/05_customize_nodes.ipynb) for details. Following is the source code for \"XGBoostStrategyNode\":"
    ]
   },
   {
@@ -687,7 +687,7 @@
        "version_minor": 0
       },
       "text/plain": [
-       "GQuantWidget(sub=HBox(), value=[OrderedDict([('id', 'stock_data'), ('type', 'CsvStockLoader'), ('conf', {'file…"
+       "GreenflowWidget(sub=HBox(), value=[OrderedDict([('id', 'stock_data'), ('type', 'CsvStockLoader'), ('conf', {'file…"
       ]
      },
      "metadata": {},
@@ -749,7 +749,7 @@
    "metadata": {},
    "source": [
     "### Conclusions\n",
-    "In this notebook, we demoed how to use Numba to implemement fractional differencing calculation in GPU. It achieves 100x speed up compared with the method done by Ensemble Capital. We also showed it is easy to use gQuant to compute fractional difference and run backtests"
+    "In this notebook, we demoed how to use Numba to implemement fractional differencing calculation in GPU. It achieves 100x speed up compared with the method done by Ensemble Capital. We also showed it is easy to use greenflow to compute fractional difference and run backtests"
    ]
   },
   {
diff --git a/gQuant/plugins/rapids_plugin/notebooks/08_gquant_machine_learning.ipynb b/gQuant/plugins/gquant_plugin/notebooks/08_greenflow_machine_learning.ipynb
similarity index 87%
rename from gQuant/plugins/rapids_plugin/notebooks/08_gquant_machine_learning.ipynb
rename to gQuant/plugins/gquant_plugin/notebooks/08_greenflow_machine_learning.ipynb
index 84796421..3e793b35 100644
--- a/gQuant/plugins/rapids_plugin/notebooks/08_gquant_machine_learning.ipynb
+++ b/gQuant/plugins/gquant_plugin/notebooks/08_greenflow_machine_learning.ipynb
@@ -4,12 +4,12 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "# GQuant tutorial: build a XGBoost model to predict the next day stock return in 30 minutes.\n",
+    "# Greenflow tutorial: build a XGBoost model to predict the next day stock return in 30 minutes.\n",
     "\n",
     "\n",
     "XGBoost is a decision-tree-based ensemble Machine Learning algorithm that uses a gradient boosting framework. Since its introduction, this algorithm has not only been credited with winning numerous Kaggle competitions but also for being the driving force under the hood for several cutting-edge industry applications. XGBoost natively supports the GPU acceleration, which speeds up the training and inference by orders of magnitude. \n",
     "\n",
-    "gQuant is a graph computation tool that builds on top of RAPIDS which includes the XGBoost algorithm. gQuant project has a Jupyterlab extension that can guide the user to build data science workflows in the browser. In this tutorial, we will learn step by step how to use gQuant user interface and build a simple XGBoost model from scratch to predict positive or negative next day stock return. This tutorial is organized as follows:\n",
+    "greenflow is a graph computation tool that builds on top of RAPIDS which includes the XGBoost algorithm. greenflow project has a Jupyterlab extension that can guide the user to build data science workflows in the browser. In this tutorial, we will learn step by step how to use greenflow user interface and build a simple XGBoost model from scratch to predict positive or negative next day stock return. This tutorial is organized as follows:\n",
     "\n",
     "    1. Prepare the fake dataset with categorical variables\n",
     "    2. Preprocess the dataset to be ready for XGBoost algorithm\n",
@@ -22,7 +22,7 @@
     "\n",
     "## Prepare the environment\n",
     "\n",
-    "Let's import the necessary gQuant library. "
+    "Let's import the necessary greenflow library. "
    ]
   },
   {
@@ -32,7 +32,7 @@
    "outputs": [],
    "source": [
     "import sys; sys.path.insert(0, '..')\n",
-    "from gquant.dataframe_flow import TaskGraph"
+    "from greenflow.dataframe_flow import TaskGraph"
    ]
   },
   {
@@ -98,7 +98,7 @@
     "## Prepare the dataset\n",
     "\n",
     "### Add a data generator node\n",
-    "In this step, we add gQuant TaskGraph nodes, make connections and evaluate the graph\n",
+    "In this step, we add greenflow TaskGraph nodes, make connections and evaluate the graph\n",
     "<img src=\"images/xgboost/create_node.gif\" align=\"center\">\n",
     "\n",
     "### Explore and visualize the data\n",
@@ -125,7 +125,7 @@
        "version_minor": 0
       },
       "text/plain": [
-       "GQuantWidget(sub=HBox(), value=[OrderedDict([('id', 'data_gen'), ('type', 'ClassificationData'), ('conf', {'cl…"
+       "GreenflowWidget(sub=HBox(), value=[OrderedDict([('id', 'data_gen'), ('type', 'ClassificationData'), ('conf', {'cl…"
       ]
      },
      "metadata": {},
@@ -176,7 +176,7 @@
        "version_minor": 0
       },
       "text/plain": [
-       "GQuantWidget(sub=HBox(), value=[OrderedDict([('id', ''), ('type', 'Output_Collector'), ('conf', {}), ('inputs'…"
+       "GreenflowWidget(sub=HBox(), value=[OrderedDict([('id', ''), ('type', 'Output_Collector'), ('conf', {}), ('inputs'…"
       ]
      },
      "metadata": {},
@@ -198,7 +198,7 @@
     "<img src=\"images/xgboost/train_and_infer.gif\" align=\"center\">\n",
     "\n",
     "\n",
-    "### gQuant evaluates a subgraph, no wasted computation\n",
+    "### greenflow evaluates a subgraph, no wasted computation\n",
     "In this step, we show by switching to a dask_cudf output port, the graph can run in a distributed environment automatically. The graph only does computations on the nodes that are necessary for the results. \n",
     "<img src=\"images/xgboost/dask_and_sub_graph.gif\" align=\"center\">\n",
     "\n",
@@ -219,7 +219,7 @@
        "version_minor": 0
       },
       "text/plain": [
-       "GQuantWidget(sub=HBox(), value=[OrderedDict([('id', 'data_gen'), ('type', 'ClassificationData'), ('conf', {'cl…"
+       "GreenflowWidget(sub=HBox(), value=[OrderedDict([('id', 'data_gen'), ('type', 'ClassificationData'), ('conf', {'cl…"
       ]
      },
      "metadata": {},
@@ -236,7 +236,7 @@
    "metadata": {},
    "source": [
     "### Visualize the training result\n",
-    "gQuant provide analysis nodes to evaluate the XGBoost model. In this step, will check the ROC curve and feature importances\n",
+    "greenflow provide analysis nodes to evaluate the XGBoost model. In this step, will check the ROC curve and feature importances\n",
     "<img src=\"images/xgboost/xgboost_metrics.gif\" align=\"center\">\n",
     "\n",
     "\n",
@@ -256,7 +256,7 @@
        "version_minor": 0
       },
       "text/plain": [
-       "GQuantWidget(sub=HBox(), value=[OrderedDict([('id', 'data_gen'), ('type', 'ClassificationData'), ('conf', {'cl…"
+       "GreenflowWidget(sub=HBox(), value=[OrderedDict([('id', 'data_gen'), ('type', 'ClassificationData'), ('conf', {'cl…"
       ]
      },
      "metadata": {},
@@ -296,7 +296,7 @@
        "version_minor": 0
       },
       "text/plain": [
-       "GQuantWidget(sub=HBox(), value=[OrderedDict([('id', 'data_gen'), ('type', 'ClassificationData'), ('conf', {'cl…"
+       "GreenflowWidget(sub=HBox(), value=[OrderedDict([('id', 'data_gen'), ('type', 'ClassificationData'), ('conf', {'cl…"
       ]
      },
      "metadata": {},
@@ -313,7 +313,7 @@
    "metadata": {},
    "source": [
     "### Create a custom node\n",
-    "Since we have a nice XGBoost model composite node, let's convert it to a normal gQuant node for future use without writing any Python code. How cool is that!\n",
+    "Since we have a nice XGBoost model composite node, let's convert it to a normal greenflow node for future use without writing any Python code. How cool is that!\n",
     "<img src=\"images/xgboost/custom_node.gif\" align=\"center\">"
    ]
   },
@@ -327,7 +327,7 @@
     "\n",
     "### Get the stock data\n",
     "We prepare a dataset that calculates the features using technical indicators. We convert the next day return into a binary label indicating positive or negative returns.\n",
-    "We re-use the TaskGraph from previous [06_xgboost_trade](https://github.com/rapidsai/gQuant/blob/master/notebooks/06_xgboost_trade.ipynb) notebook. \n",
+    "We re-use the TaskGraph from previous [06_xgboost_trade](https://github.com/rapidsai/greenflow/blob/master/notebooks/06_xgboost_trade.ipynb) notebook. \n",
     "<img src=\"images/xgboost/prepare_stock_data.gif\" align=\"center\">\n",
     "\n",
     "After this step, you should have a TaskGraph looks like this:\n"
@@ -346,7 +346,7 @@
        "version_minor": 0
       },
       "text/plain": [
-       "GQuantWidget(sub=HBox(), value=[OrderedDict([('id', 'stock_data'), ('type', 'CsvStockLoader'), ('conf', {'file…"
+       "GreenflowWidget(sub=HBox(), value=[OrderedDict([('id', 'stock_data'), ('type', 'CsvStockLoader'), ('conf', {'file…"
       ]
      },
      "metadata": {},
@@ -384,7 +384,7 @@
        "version_minor": 0
       },
       "text/plain": [
-       "GQuantWidget(sub=HBox(), value=[OrderedDict([('id', 'stock_data'), ('type', 'CsvStockLoader'), ('conf', {'file…"
+       "GreenflowWidget(sub=HBox(), value=[OrderedDict([('id', 'stock_data'), ('type', 'CsvStockLoader'), ('conf', {'file…"
       ]
      },
      "metadata": {},
diff --git a/gQuant/plugins/rapids_plugin/notebooks/09_gquant_machine_hpo.ipynb b/gQuant/plugins/gquant_plugin/notebooks/09_gquant_machine_hpo.ipynb
similarity index 85%
rename from gQuant/plugins/rapids_plugin/notebooks/09_gquant_machine_hpo.ipynb
rename to gQuant/plugins/gquant_plugin/notebooks/09_gquant_machine_hpo.ipynb
index 92c4cc6c..7d5fcf1e 100644
--- a/gQuant/plugins/rapids_plugin/notebooks/09_gquant_machine_hpo.ipynb
+++ b/gQuant/plugins/gquant_plugin/notebooks/09_gquant_machine_hpo.ipynb
@@ -4,15 +4,15 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "# gQuant Hyperparameter Tuning Example\n",
+    "# greenflow Hyperparameter Tuning Example\n",
     "\n",
     "When data scientists are building machine learning models, there are a few magic numbers that are included in the model. The example numbers are depths in the tree, the learning rate, etc. The parameters that define the model architecture or training process are usually referred to as hyperparameters. They are magical because there is no good theory about what number to choose. Commonly, the hyperparameters can be searched to find a good set of them that results in the best model performance. The process of searching is referred to as hyperparameter tuning. \n",
     "\n",
     "There are a few popular Python-based hyperparameter tuning libraries existing: [Ray Tune](https://docs.ray.io/en/latest/tune/), [Optuna](https://optuna.org/), [HyperOpt](https://hyperopt.github.io/hyperopt/). Each library provides a set of search algorithms and schedule algorithms that is easy to use. \n",
     "\n",
-    "Inside the gQuant, we implemented a `Context Composite Node` that can flexibly expose the hyperparameters that are interesting for tuning. The `Context Composite Node` makes hyperparameter tuning easy to do by leveraging the hyperparameter tuning libraries. Without loss of generality, we show in this tutorial an example of using `Ray Tune` to optimize the hyperparameters for an XGBoost model  \n",
+    "Inside the greenflow, we implemented a `Context Composite Node` that can flexibly expose the hyperparameters that are interesting for tuning. The `Context Composite Node` makes hyperparameter tuning easy to do by leveraging the hyperparameter tuning libraries. Without loss of generality, we show in this tutorial an example of using `Ray Tune` to optimize the hyperparameters for an XGBoost model  \n",
     "\n",
-    "First, let's load the gQuant library"
+    "First, let's load the greenflow library"
    ]
   },
   {
@@ -22,7 +22,7 @@
    "outputs": [],
    "source": [
     "import sys; sys.path.insert(0, '..')\n",
-    "from gquant.dataframe_flow import TaskGraph"
+    "from greenflow.dataframe_flow import TaskGraph"
    ]
   },
   {
@@ -73,7 +73,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "In the `09_gquant_machine_leanring` notebook, we constructed a computation graph in gQuant to train a XGBoost model and run inference. We will reuse that example computation graph `xgboost_with_metrics.gq.yaml` for hyper-parameter tuning. Let's load the hyperparameter search computation graph:"
+    "In the `09_greenflow_machine_leanring` notebook, we constructed a computation graph in greenflow to train a XGBoost model and run inference. We will reuse that example computation graph `xgboost_with_metrics.gq.yaml` for hyper-parameter tuning. Let's load the hyperparameter search computation graph:"
    ]
   },
   {
@@ -89,7 +89,7 @@
        "version_minor": 0
       },
       "text/plain": [
-       "GQuantWidget(sub=HBox(), value=[OrderedDict([('id', 'data_gen'), ('type', 'ClassificationData'), ('conf', {'n_…"
+       "GreenflowWidget(sub=HBox(), value=[OrderedDict([('id', 'data_gen'), ('type', 'ClassificationData'), ('conf', {'n_…"
       ]
      },
      "metadata": {},
@@ -115,7 +115,7 @@
     "\n",
     "Click on the `run` button above and check the XGBoost results before and after the hyperparameter tuning. During the run the log console has informative information from the Ray Tune library. Click one the 'list' button to see the log or you can go to \"View -> Show Log Console\".\n",
     "\n",
-    "Since you know how hyperparameter tuning is done by gQuant, we can work on a more interesting problem. In the following graph, we will do hyperparameter tuning to find the best XGBoost model to predict the positive/negative next stock return. Note, we keep everything the same but change the dataset in the graph. "
+    "Since you know how hyperparameter tuning is done by greenflow, we can work on a more interesting problem. In the following graph, we will do hyperparameter tuning to find the best XGBoost model to predict the positive/negative next stock return. Note, we keep everything the same but change the dataset in the graph. "
    ]
   },
   {
@@ -131,7 +131,7 @@
        "version_minor": 0
       },
       "text/plain": [
-       "GQuantWidget(sub=HBox(), value=[OrderedDict([('id', ''), ('type', 'Output_Collector'), ('conf', {}), ('inputs'…"
+       "GreenflowWidget(sub=HBox(), value=[OrderedDict([('id', ''), ('type', 'Output_Collector'), ('conf', {}), ('inputs'…"
       ]
      },
      "metadata": {},
diff --git a/gQuant/plugins/rapids_plugin/notebooks/10_streamz.ipynb.ipynb b/gQuant/plugins/gquant_plugin/notebooks/10_streamz.ipynb.ipynb
similarity index 99%
rename from gQuant/plugins/rapids_plugin/notebooks/10_streamz.ipynb.ipynb
rename to gQuant/plugins/gquant_plugin/notebooks/10_streamz.ipynb.ipynb
index 5fc5166d..15429083 100644
--- a/gQuant/plugins/rapids_plugin/notebooks/10_streamz.ipynb.ipynb
+++ b/gQuant/plugins/gquant_plugin/notebooks/10_streamz.ipynb.ipynb
@@ -4,13 +4,13 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "## Use gQuant to Build cuStreamz Examples\n",
+    "## Use greenflow to Build cuStreamz Examples\n",
     "\n",
     "The stream processing market is experiencing exponential growth with businesses relying heavily on real-time analytics, inferencing, monitoring, and more. [cuStreamz](https://medium.com/rapids-ai/gpu-accelerated-stream-processing-with-rapids-f2b725696a61) is the first GPU-accelerated streaming data processing library. Written in Python, it is built on top of RAPIDS, the GPU-accelerator for data science libraries. cuStreamz accelerates [Streamz](https://streamz.readthedocs.io/en/latest/) by leveraging RAPIDS cuDF under the hood to perform computations on streaming data in an accelerated manner on GPUs. The Python library Streamz helps you build pipelines to manage continuous streams of data. \n",
     "\n",
-    "It is easy to wrap the cuStreamz streaming pipelines into gQuant nodes and visualize it. In this notebook example, we will step-by-step build a stream pipeline example in gQuant. You will learn how to write a basic gQuant node, register it for the gQuant Jupyterlab plugin, and use GPU to accelerate the computations.\n",
+    "It is easy to wrap the cuStreamz streaming pipelines into greenflow nodes and visualize it. In this notebook example, we will step-by-step build a stream pipeline example in greenflow. You will learn how to write a basic greenflow node, register it for the greenflow Jupyterlab plugin, and use GPU to accelerate the computations.\n",
     "\n",
-    "Let's first import the streamz libraries and gQuant libraries."
+    "Let's first import the streamz libraries and greenflow libraries."
    ]
   },
   {
@@ -30,11 +30,11 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "from gquant.dataframe_flow import Node\n",
-    "from gquant.dataframe_flow import NodePorts, PortsSpecSchema, TaskSpecSchema\n",
-    "from gquant.dataframe_flow import ConfSchema\n",
-    "from gquant.dataframe_flow import TaskGraph\n",
-    "from gquant.dataframe_flow import MetaData"
+    "from greenflow.dataframe_flow import Node\n",
+    "from greenflow.dataframe_flow import NodePorts, PortsSpecSchema, TaskSpecSchema\n",
+    "from greenflow.dataframe_flow import ConfSchema\n",
+    "from greenflow.dataframe_flow import TaskGraph\n",
+    "from greenflow.dataframe_flow import MetaData"
    ]
   },
   {
@@ -43,7 +43,7 @@
    "source": [
     "## Double the Streaming Numbers by Streamz \n",
     "\n",
-    "A gQuant node is defined by inheriting from the `Node` class and overriding methods `init`, `meta_setup`, `ports_setup`, `conf_schema`, `process`.\n",
+    "A greenflow node is defined by inheriting from the `Node` class and overriding methods `init`, `meta_setup`, `ports_setup`, `conf_schema`, `process`.\n",
     "\n",
     "The `ports_setup` must return an instance of `NodePorts` which encapsulates the ports specs. Ports specs are dictionaries with port attributes/options per `PortsSpecSchema`.\n",
     "\n",
@@ -51,9 +51,9 @@
     "\n",
     "The `meta_setup` is used to compute the output meta information. It returns a dictionary where keys correspond to the output ports.\n",
     "\n",
-    "The `conf_schema` is used to define the Node configuration [JSON schema](https://json-schema.org/). gQuantlab UI uses [RJSF](https://github.com/rjsf-team/react-jsonschema-form) project to generate HTML form elements based on the JSON schema. [RJSF playground](https://rjsf-team.github.io/react-jsonschema-form/) is a good place to learn how to write JSON schema and visualize it. `conf_schema` returns `ConfSchema` which encapsulate the JSON schema and UI schema together.\n",
+    "The `conf_schema` is used to define the Node configuration [JSON schema](https://json-schema.org/). greenflowlab UI uses [RJSF](https://github.com/rjsf-team/react-jsonschema-form) project to generate HTML form elements based on the JSON schema. [RJSF playground](https://rjsf-team.github.io/react-jsonschema-form/) is a good place to learn how to write JSON schema and visualize it. `conf_schema` returns `ConfSchema` which encapsulate the JSON schema and UI schema together.\n",
     "\n",
-    "The `column` and `port_types` information sometimes are determined dynamically. gQuant provides a few utility functions to help get dynamical graph information. `self.get_connected_inports()` will return a dictionay where keys are connected inport names and values are inport types. \n",
+    "The `column` and `port_types` information sometimes are determined dynamically. greenflow provides a few utility functions to help get dynamical graph information. `self.get_connected_inports()` will return a dictionay where keys are connected inport names and values are inport types. \n",
     "`self.get_input_meta()` will return a dictionary where keys are connected inport names and values are column name/type pairs from the parent node. `self.outport_connected(port_name)` method returns a boolean if the output port `port_name` is connected.\n",
     "\n",
     "As a `hello-world` example for streamz, we will build an example that doubles continuous streams of numbers and print it. We need 3 nodes for it: source, map stream and sink. \n",
@@ -326,7 +326,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "### Dynamically Register the GQuant Nodes\n",
+    "### Dynamically Register the Greenflow Nodes\n",
     "\n",
     "The task graph defined above is ready to be evaluated programmatically by "
    ]
@@ -358,7 +358,7 @@
    "source": [
     "The result has both the source and sink nodes stored as a dictionary.\n",
     "\n",
-    "To use the task graph in the gQuant Jupyterlab plugin, we can either put them in a python file and edit `gquantrc` file to register them. You can find an example in the `05_customize_nodes_with_ports` notebook. Or, we can dynamically register them by `register_lab_node` method."
+    "To use the task graph in the greenflow Jupyterlab plugin, we can either put them in a python file and edit `greenflowrc` file to register them. You can find an example in the `05_customize_nodes_with_ports` notebook. Or, we can dynamically register them by `register_lab_node` method."
    ]
   },
   {
@@ -374,7 +374,7 @@
        "version_minor": 0
       },
       "text/plain": [
-       "GQuantWidget(sub=HBox())"
+       "GreenflowWidget(sub=HBox())"
       ]
      },
      "metadata": {},
@@ -407,7 +407,7 @@
        "version_minor": 0
       },
       "text/plain": [
-       "GQuantWidget(sub=HBox(), value=[OrderedDict([('id', 'source'), ('type', 'StreamNode'), ('conf', {}), ('inputs'…"
+       "GreenflowWidget(sub=HBox(), value=[OrderedDict([('id', 'source'), ('type', 'StreamNode'), ('conf', {}), ('inputs'…"
       ]
      },
      "metadata": {},
@@ -686,7 +686,7 @@
        "version_minor": 0
       },
       "text/plain": [
-       "GQuantWidget(sub=HBox(), value=[OrderedDict([('id', 'source'), ('type', 'StreamNode'), ('conf', {}), ('inputs'…"
+       "GreenflowWidget(sub=HBox(), value=[OrderedDict([('id', 'source'), ('type', 'StreamNode'), ('conf', {}), ('inputs'…"
       ]
      },
      "metadata": {},
@@ -885,7 +885,7 @@
        "version_minor": 0
       },
       "text/plain": [
-       "GQuantWidget(sub=HBox(), value=[OrderedDict([('id', 'source'), ('type', 'StreamNode'), ('conf', {}), ('inputs'…"
+       "GreenflowWidget(sub=HBox(), value=[OrderedDict([('id', 'source'), ('type', 'StreamNode'), ('conf', {}), ('inputs'…"
       ]
      },
      "metadata": {},
@@ -1279,7 +1279,7 @@
        "version_minor": 0
       },
       "text/plain": [
-       "GQuantWidget(sub=HBox(), value=[OrderedDict([('id', 'source'), ('type', 'StreamNode'), ('conf', {}), ('inputs'…"
+       "GreenflowWidget(sub=HBox(), value=[OrderedDict([('id', 'source'), ('type', 'StreamNode'), ('conf', {}), ('inputs'…"
       ]
      },
      "metadata": {},
diff --git a/gQuant/plugins/rapids_plugin/notebooks/asian_barrier_option/Makefile b/gQuant/plugins/gquant_plugin/notebooks/asian_barrier_option/Makefile
similarity index 100%
rename from gQuant/plugins/rapids_plugin/notebooks/asian_barrier_option/Makefile
rename to gQuant/plugins/gquant_plugin/notebooks/asian_barrier_option/Makefile
diff --git a/gQuant/plugins/rapids_plugin/notebooks/asian_barrier_option/README.md b/gQuant/plugins/gquant_plugin/notebooks/asian_barrier_option/README.md
similarity index 100%
rename from gQuant/plugins/rapids_plugin/notebooks/asian_barrier_option/README.md
rename to gQuant/plugins/gquant_plugin/notebooks/asian_barrier_option/README.md
diff --git a/gQuant/plugins/rapids_plugin/notebooks/asian_barrier_option/cuda_pricing.cu b/gQuant/plugins/gquant_plugin/notebooks/asian_barrier_option/cuda_pricing.cu
similarity index 100%
rename from gQuant/plugins/rapids_plugin/notebooks/asian_barrier_option/cuda_pricing.cu
rename to gQuant/plugins/gquant_plugin/notebooks/asian_barrier_option/cuda_pricing.cu
diff --git a/gQuant/plugins/rapids_plugin/notebooks/asian_barrier_option/deep_learning_nemo.ipynb b/gQuant/plugins/gquant_plugin/notebooks/asian_barrier_option/deep_learning_nemo.ipynb
similarity index 100%
rename from gQuant/plugins/rapids_plugin/notebooks/asian_barrier_option/deep_learning_nemo.ipynb
rename to gQuant/plugins/gquant_plugin/notebooks/asian_barrier_option/deep_learning_nemo.ipynb
diff --git a/gQuant/plugins/rapids_plugin/notebooks/asian_barrier_option/deep_learning_option_1.ipynb b/gQuant/plugins/gquant_plugin/notebooks/asian_barrier_option/deep_learning_option_1.ipynb
similarity index 100%
rename from gQuant/plugins/rapids_plugin/notebooks/asian_barrier_option/deep_learning_option_1.ipynb
rename to gQuant/plugins/gquant_plugin/notebooks/asian_barrier_option/deep_learning_option_1.ipynb
diff --git a/gQuant/plugins/rapids_plugin/notebooks/asian_barrier_option/deep_learning_option_2.ipynb b/gQuant/plugins/gquant_plugin/notebooks/asian_barrier_option/deep_learning_option_2.ipynb
similarity index 100%
rename from gQuant/plugins/rapids_plugin/notebooks/asian_barrier_option/deep_learning_option_2.ipynb
rename to gQuant/plugins/gquant_plugin/notebooks/asian_barrier_option/deep_learning_option_2.ipynb
diff --git a/gQuant/plugins/rapids_plugin/notebooks/asian_barrier_option/docker/Dockerfile b/gQuant/plugins/gquant_plugin/notebooks/asian_barrier_option/docker/Dockerfile
similarity index 100%
rename from gQuant/plugins/rapids_plugin/notebooks/asian_barrier_option/docker/Dockerfile
rename to gQuant/plugins/gquant_plugin/notebooks/asian_barrier_option/docker/Dockerfile
diff --git a/gQuant/plugins/rapids_plugin/notebooks/asian_barrier_option/download_data.sh b/gQuant/plugins/gquant_plugin/notebooks/asian_barrier_option/download_data.sh
similarity index 100%
rename from gQuant/plugins/rapids_plugin/notebooks/asian_barrier_option/download_data.sh
rename to gQuant/plugins/gquant_plugin/notebooks/asian_barrier_option/download_data.sh
diff --git a/gQuant/plugins/rapids_plugin/notebooks/asian_barrier_option/elu_activation/CMakeLists.txt b/gQuant/plugins/gquant_plugin/notebooks/asian_barrier_option/elu_activation/CMakeLists.txt
similarity index 100%
rename from gQuant/plugins/rapids_plugin/notebooks/asian_barrier_option/elu_activation/CMakeLists.txt
rename to gQuant/plugins/gquant_plugin/notebooks/asian_barrier_option/elu_activation/CMakeLists.txt
diff --git a/gQuant/plugins/rapids_plugin/notebooks/asian_barrier_option/elu_activation/log/common.h b/gQuant/plugins/gquant_plugin/notebooks/asian_barrier_option/elu_activation/log/common.h
similarity index 100%
rename from gQuant/plugins/rapids_plugin/notebooks/asian_barrier_option/elu_activation/log/common.h
rename to gQuant/plugins/gquant_plugin/notebooks/asian_barrier_option/elu_activation/log/common.h
diff --git a/gQuant/plugins/rapids_plugin/notebooks/asian_barrier_option/elu_activation/log/logger.cpp b/gQuant/plugins/gquant_plugin/notebooks/asian_barrier_option/elu_activation/log/logger.cpp
similarity index 100%
rename from gQuant/plugins/rapids_plugin/notebooks/asian_barrier_option/elu_activation/log/logger.cpp
rename to gQuant/plugins/gquant_plugin/notebooks/asian_barrier_option/elu_activation/log/logger.cpp
diff --git a/gQuant/plugins/rapids_plugin/notebooks/asian_barrier_option/elu_activation/log/logger.h b/gQuant/plugins/gquant_plugin/notebooks/asian_barrier_option/elu_activation/log/logger.h
similarity index 100%
rename from gQuant/plugins/rapids_plugin/notebooks/asian_barrier_option/elu_activation/log/logger.h
rename to gQuant/plugins/gquant_plugin/notebooks/asian_barrier_option/elu_activation/log/logger.h
diff --git a/gQuant/plugins/rapids_plugin/notebooks/asian_barrier_option/elu_activation/log/logging.h b/gQuant/plugins/gquant_plugin/notebooks/asian_barrier_option/elu_activation/log/logging.h
similarity index 100%
rename from gQuant/plugins/rapids_plugin/notebooks/asian_barrier_option/elu_activation/log/logging.h
rename to gQuant/plugins/gquant_plugin/notebooks/asian_barrier_option/elu_activation/log/logging.h
diff --git a/gQuant/plugins/rapids_plugin/notebooks/asian_barrier_option/elu_activation/plugins/eluPlugin.cu b/gQuant/plugins/gquant_plugin/notebooks/asian_barrier_option/elu_activation/plugins/eluPlugin.cu
similarity index 100%
rename from gQuant/plugins/rapids_plugin/notebooks/asian_barrier_option/elu_activation/plugins/eluPlugin.cu
rename to gQuant/plugins/gquant_plugin/notebooks/asian_barrier_option/elu_activation/plugins/eluPlugin.cu
diff --git a/gQuant/plugins/rapids_plugin/notebooks/asian_barrier_option/elu_activation/plugins/eluPlugin.h b/gQuant/plugins/gquant_plugin/notebooks/asian_barrier_option/elu_activation/plugins/eluPlugin.h
similarity index 100%
rename from gQuant/plugins/rapids_plugin/notebooks/asian_barrier_option/elu_activation/plugins/eluPlugin.h
rename to gQuant/plugins/gquant_plugin/notebooks/asian_barrier_option/elu_activation/plugins/eluPlugin.h
diff --git a/gQuant/plugins/rapids_plugin/notebooks/asian_barrier_option/elu_activation/plugins/pluginKernels.h b/gQuant/plugins/gquant_plugin/notebooks/asian_barrier_option/elu_activation/plugins/pluginKernels.h
similarity index 100%
rename from gQuant/plugins/rapids_plugin/notebooks/asian_barrier_option/elu_activation/plugins/pluginKernels.h
rename to gQuant/plugins/gquant_plugin/notebooks/asian_barrier_option/elu_activation/plugins/pluginKernels.h
diff --git a/gQuant/plugins/rapids_plugin/notebooks/asian_barrier_option/elu_activation/plugins/pluginUtil.h b/gQuant/plugins/gquant_plugin/notebooks/asian_barrier_option/elu_activation/plugins/pluginUtil.h
similarity index 100%
rename from gQuant/plugins/rapids_plugin/notebooks/asian_barrier_option/elu_activation/plugins/pluginUtil.h
rename to gQuant/plugins/gquant_plugin/notebooks/asian_barrier_option/elu_activation/plugins/pluginUtil.h
diff --git a/gQuant/plugins/rapids_plugin/notebooks/asian_barrier_option/helper_cuda.h b/gQuant/plugins/gquant_plugin/notebooks/asian_barrier_option/helper_cuda.h
similarity index 100%
rename from gQuant/plugins/rapids_plugin/notebooks/asian_barrier_option/helper_cuda.h
rename to gQuant/plugins/gquant_plugin/notebooks/asian_barrier_option/helper_cuda.h
diff --git a/gQuant/plugins/rapids_plugin/notebooks/asian_barrier_option/helper_string.h b/gQuant/plugins/gquant_plugin/notebooks/asian_barrier_option/helper_string.h
similarity index 100%
rename from gQuant/plugins/rapids_plugin/notebooks/asian_barrier_option/helper_string.h
rename to gQuant/plugins/gquant_plugin/notebooks/asian_barrier_option/helper_string.h
diff --git a/gQuant/plugins/rapids_plugin/notebooks/asian_barrier_option/index.ipynb b/gQuant/plugins/gquant_plugin/notebooks/asian_barrier_option/index.ipynb
similarity index 100%
rename from gQuant/plugins/rapids_plugin/notebooks/asian_barrier_option/index.ipynb
rename to gQuant/plugins/gquant_plugin/notebooks/asian_barrier_option/index.ipynb
diff --git a/gQuant/plugins/rapids_plugin/notebooks/asian_barrier_option/mc_pricing.ipynb b/gQuant/plugins/gquant_plugin/notebooks/asian_barrier_option/mc_pricing.ipynb
similarity index 100%
rename from gQuant/plugins/rapids_plugin/notebooks/asian_barrier_option/mc_pricing.ipynb
rename to gQuant/plugins/gquant_plugin/notebooks/asian_barrier_option/mc_pricing.ipynb
diff --git a/gQuant/plugins/rapids_plugin/notebooks/asian_barrier_option/tensorrt.ipynb b/gQuant/plugins/gquant_plugin/notebooks/asian_barrier_option/tensorrt.ipynb
similarity index 81%
rename from gQuant/plugins/rapids_plugin/notebooks/asian_barrier_option/tensorrt.ipynb
rename to gQuant/plugins/gquant_plugin/notebooks/asian_barrier_option/tensorrt.ipynb
index d921317e..8858def3 100644
--- a/gQuant/plugins/rapids_plugin/notebooks/asian_barrier_option/tensorrt.ipynb
+++ b/gQuant/plugins/gquant_plugin/notebooks/asian_barrier_option/tensorrt.ipynb
@@ -148,7 +148,7 @@
      "output_type": "stream",
      "text": [
       "[Errno 2] No such file or directory: 'elu_activation/build'\n",
-      "/Projects/gQuant/notebooks/asian_barrier_option/elu_activation/build\n"
+      "/Projects/greenflow/notebooks/asian_barrier_option/elu_activation/build\n"
      ]
     }
    ],
@@ -179,7 +179,7 @@
       "-- Detecting CUDA compiler ABI info - done\n",
       "-- Configuring done\n",
       "-- Generating done\n",
-      "-- Build files have been written to: /Projects/gQuant/notebooks/asian_barrier_option/elu_activation/build\n"
+      "-- Build files have been written to: /Projects/greenflow/notebooks/asian_barrier_option/elu_activation/build\n"
      ]
     }
    ],
@@ -202,29 +202,29 @@
       "[ 40%] Built target common\n",
       "\u001b[35m\u001b[1mScanning dependencies of target my_plugins\u001b[0m\n",
       "[ 60%] \u001b[32mBuilding CUDA object CMakeFiles/my_plugins.dir/plugins/eluPlugin.cu.o\u001b[0m\n",
-      "/Projects/gQuant/notebooks/asian_barrier_option/elu_activation/plugins/eluPlugin.h(44): warning: function \"nvinfer1::IPluginV2::getOutputDimensions(int, const nvinfer1::Dims *, int)\" is hidden by \"elu::EluPluginDynamic::getOutputDimensions\" -- virtual function override intended?\n",
+      "/Projects/greenflow/notebooks/asian_barrier_option/elu_activation/plugins/eluPlugin.h(44): warning: function \"nvinfer1::IPluginV2::getOutputDimensions(int, const nvinfer1::Dims *, int)\" is hidden by \"elu::EluPluginDynamic::getOutputDimensions\" -- virtual function override intended?\n",
       "\n",
-      "/Projects/gQuant/notebooks/asian_barrier_option/elu_activation/plugins/eluPlugin.h(48): warning: function \"nvinfer1::IPluginV2Ext::configurePlugin(const nvinfer1::Dims *, int, const nvinfer1::Dims *, int, const nvinfer1::DataType *, const nvinfer1::DataType *, const __nv_bool *, const __nv_bool *, nvinfer1::PluginFormat, int)\" is hidden by \"elu::EluPluginDynamic::configurePlugin\" -- virtual function override intended?\n",
+      "/Projects/greenflow/notebooks/asian_barrier_option/elu_activation/plugins/eluPlugin.h(48): warning: function \"nvinfer1::IPluginV2Ext::configurePlugin(const nvinfer1::Dims *, int, const nvinfer1::Dims *, int, const nvinfer1::DataType *, const nvinfer1::DataType *, const __nv_bool *, const __nv_bool *, nvinfer1::PluginFormat, int)\" is hidden by \"elu::EluPluginDynamic::configurePlugin\" -- virtual function override intended?\n",
       "\n",
-      "/Projects/gQuant/notebooks/asian_barrier_option/elu_activation/plugins/eluPlugin.h(50): warning: function \"nvinfer1::IPluginV2::getWorkspaceSize(int) const\" is hidden by \"elu::EluPluginDynamic::getWorkspaceSize\" -- virtual function override intended?\n",
+      "/Projects/greenflow/notebooks/asian_barrier_option/elu_activation/plugins/eluPlugin.h(50): warning: function \"nvinfer1::IPluginV2::getWorkspaceSize(int) const\" is hidden by \"elu::EluPluginDynamic::getWorkspaceSize\" -- virtual function override intended?\n",
       "\n",
-      "/Projects/gQuant/notebooks/asian_barrier_option/elu_activation/plugins/eluPlugin.h(52): warning: function \"nvinfer1::IPluginV2::enqueue(int, const void *const *, void **, void *, cudaStream_t)\" is hidden by \"elu::EluPluginDynamic::enqueue\" -- virtual function override intended?\n",
+      "/Projects/greenflow/notebooks/asian_barrier_option/elu_activation/plugins/eluPlugin.h(52): warning: function \"nvinfer1::IPluginV2::enqueue(int, const void *const *, void **, void *, cudaStream_t)\" is hidden by \"elu::EluPluginDynamic::enqueue\" -- virtual function override intended?\n",
       "\n",
-      "/Projects/gQuant/notebooks/asian_barrier_option/elu_activation/plugins/eluPlugin.h(44): warning: function \"nvinfer1::IPluginV2::getOutputDimensions(int, const nvinfer1::Dims *, int)\" is hidden by \"elu::EluPluginDynamic::getOutputDimensions\" -- virtual function override intended?\n",
+      "/Projects/greenflow/notebooks/asian_barrier_option/elu_activation/plugins/eluPlugin.h(44): warning: function \"nvinfer1::IPluginV2::getOutputDimensions(int, const nvinfer1::Dims *, int)\" is hidden by \"elu::EluPluginDynamic::getOutputDimensions\" -- virtual function override intended?\n",
       "\n",
-      "/Projects/gQuant/notebooks/asian_barrier_option/elu_activation/plugins/eluPlugin.h(48): warning: function \"nvinfer1::IPluginV2Ext::configurePlugin(const nvinfer1::Dims *, int, const nvinfer1::Dims *, int, const nvinfer1::DataType *, const nvinfer1::DataType *, const __nv_bool *, const __nv_bool *, nvinfer1::PluginFormat, int)\" is hidden by \"elu::EluPluginDynamic::configurePlugin\" -- virtual function override intended?\n",
+      "/Projects/greenflow/notebooks/asian_barrier_option/elu_activation/plugins/eluPlugin.h(48): warning: function \"nvinfer1::IPluginV2Ext::configurePlugin(const nvinfer1::Dims *, int, const nvinfer1::Dims *, int, const nvinfer1::DataType *, const nvinfer1::DataType *, const __nv_bool *, const __nv_bool *, nvinfer1::PluginFormat, int)\" is hidden by \"elu::EluPluginDynamic::configurePlugin\" -- virtual function override intended?\n",
       "\n",
-      "/Projects/gQuant/notebooks/asian_barrier_option/elu_activation/plugins/eluPlugin.h(50): warning: function \"nvinfer1::IPluginV2::getWorkspaceSize(int) const\" is hidden by \"elu::EluPluginDynamic::getWorkspaceSize\" -- virtual function override intended?\n",
+      "/Projects/greenflow/notebooks/asian_barrier_option/elu_activation/plugins/eluPlugin.h(50): warning: function \"nvinfer1::IPluginV2::getWorkspaceSize(int) const\" is hidden by \"elu::EluPluginDynamic::getWorkspaceSize\" -- virtual function override intended?\n",
       "\n",
-      "/Projects/gQuant/notebooks/asian_barrier_option/elu_activation/plugins/eluPlugin.h(52): warning: function \"nvinfer1::IPluginV2::enqueue(int, const void *const *, void **, void *, cudaStream_t)\" is hidden by \"elu::EluPluginDynamic::enqueue\" -- virtual function override intended?\n",
+      "/Projects/greenflow/notebooks/asian_barrier_option/elu_activation/plugins/eluPlugin.h(52): warning: function \"nvinfer1::IPluginV2::enqueue(int, const void *const *, void **, void *, cudaStream_t)\" is hidden by \"elu::EluPluginDynamic::enqueue\" -- virtual function override intended?\n",
       "\n",
-      "/Projects/gQuant/notebooks/asian_barrier_option/elu_activation/plugins/eluPlugin.h(44): warning: function \"nvinfer1::IPluginV2::getOutputDimensions(int, const nvinfer1::Dims *, int)\" is hidden by \"elu::EluPluginDynamic::getOutputDimensions\" -- virtual function override intended?\n",
+      "/Projects/greenflow/notebooks/asian_barrier_option/elu_activation/plugins/eluPlugin.h(44): warning: function \"nvinfer1::IPluginV2::getOutputDimensions(int, const nvinfer1::Dims *, int)\" is hidden by \"elu::EluPluginDynamic::getOutputDimensions\" -- virtual function override intended?\n",
       "\n",
-      "/Projects/gQuant/notebooks/asian_barrier_option/elu_activation/plugins/eluPlugin.h(48): warning: function \"nvinfer1::IPluginV2Ext::configurePlugin(const nvinfer1::Dims *, int, const nvinfer1::Dims *, int, const nvinfer1::DataType *, const nvinfer1::DataType *, const bool *, const bool *, nvinfer1::PluginFormat, int)\" is hidden by \"elu::EluPluginDynamic::configurePlugin\" -- virtual function override intended?\n",
+      "/Projects/greenflow/notebooks/asian_barrier_option/elu_activation/plugins/eluPlugin.h(48): warning: function \"nvinfer1::IPluginV2Ext::configurePlugin(const nvinfer1::Dims *, int, const nvinfer1::Dims *, int, const nvinfer1::DataType *, const nvinfer1::DataType *, const bool *, const bool *, nvinfer1::PluginFormat, int)\" is hidden by \"elu::EluPluginDynamic::configurePlugin\" -- virtual function override intended?\n",
       "\n",
-      "/Projects/gQuant/notebooks/asian_barrier_option/elu_activation/plugins/eluPlugin.h(50): warning: function \"nvinfer1::IPluginV2::getWorkspaceSize(int) const\" is hidden by \"elu::EluPluginDynamic::getWorkspaceSize\" -- virtual function override intended?\n",
+      "/Projects/greenflow/notebooks/asian_barrier_option/elu_activation/plugins/eluPlugin.h(50): warning: function \"nvinfer1::IPluginV2::getWorkspaceSize(int) const\" is hidden by \"elu::EluPluginDynamic::getWorkspaceSize\" -- virtual function override intended?\n",
       "\n",
-      "/Projects/gQuant/notebooks/asian_barrier_option/elu_activation/plugins/eluPlugin.h(52): warning: function \"nvinfer1::IPluginV2::enqueue(int, const void *const *, void **, void *, cudaStream_t)\" is hidden by \"elu::EluPluginDynamic::enqueue\" -- virtual function override intended?\n",
+      "/Projects/greenflow/notebooks/asian_barrier_option/elu_activation/plugins/eluPlugin.h(52): warning: function \"nvinfer1::IPluginV2::enqueue(int, const void *const *, void **, void *, cudaStream_t)\" is hidden by \"elu::EluPluginDynamic::enqueue\" -- virtual function override intended?\n",
       "\n",
       "[ 80%] \u001b[32m\u001b[1mLinking CUDA device code CMakeFiles/my_plugins.dir/cmake_device_link.o\u001b[0m\n",
       "[100%] \u001b[32m\u001b[1mLinking CUDA shared library libmy_plugins.so\u001b[0m\n",
@@ -245,7 +245,7 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "/Projects/gQuant/notebooks/asian_barrier_option\n"
+      "/Projects/greenflow/notebooks/asian_barrier_option\n"
      ]
     }
    ],
diff --git a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/indicator_demo.ipynb b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/indicator_demo.ipynb
similarity index 99%
rename from gQuant/plugins/rapids_plugin/notebooks/cuIndicator/indicator_demo.ipynb
rename to gQuant/plugins/gquant_plugin/notebooks/cuIndicator/indicator_demo.ipynb
index ace78256..bce2d80c 100644
--- a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/indicator_demo.ipynb
+++ b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/indicator_demo.ipynb
@@ -52,7 +52,7 @@
    "source": [
     "import sys; sys.path.insert(0, '../..')\n",
     "\n",
-    "from gquant.dataframe_flow import TaskSpecSchema\n",
+    "from greenflow.dataframe_flow import TaskSpecSchema\n",
     "\n",
     "\n",
     "task_load_csv_data = {\n",
@@ -86,7 +86,7 @@
     "import os\n",
     "import warnings; warnings.simplefilter(\"ignore\")\n",
     "\n",
-    "from gquant.dataframe_flow import TaskGraph\n",
+    "from greenflow.dataframe_flow import TaskGraph\n",
     "\n",
     "task_list = [task_load_csv_data, task_sort]\n",
     "task_graph = TaskGraph(task_list)\n",
diff --git a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/rsi_perf.ipynb b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/rsi_perf.ipynb
similarity index 99%
rename from gQuant/plugins/rapids_plugin/notebooks/cuIndicator/rsi_perf.ipynb
rename to gQuant/plugins/gquant_plugin/notebooks/cuIndicator/rsi_perf.ipynb
index 6b9c79f5..88148586 100644
--- a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/rsi_perf.ipynb
+++ b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/rsi_perf.ipynb
@@ -23,7 +23,7 @@
     "import pandas as pd\n",
     "import cudf\n",
     "import os\n",
-    "from gquant.dataframe_flow.task import load_modules\n",
+    "from greenflow.dataframe_flow.task import load_modules\n",
     "load_modules(os.getenv('MODULEPATH')+'/rapids_modules/')\n",
     "from rapids_modules.cuindicator import Ewm, Rolling, shift, division, multiply, summation\n",
     "import numpy as np\n",
diff --git a/gQuant/gquant/gquant/__init__.py b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/__init__.py
similarity index 100%
rename from gQuant/gquant/gquant/__init__.py
rename to gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/__init__.py
diff --git a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/accumulation_distribution.py b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/accumulation_distribution.py
similarity index 96%
rename from gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/accumulation_distribution.py
rename to gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/accumulation_distribution.py
index 865294df..4d4b9f9e 100644
--- a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/accumulation_distribution.py
+++ b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/accumulation_distribution.py
@@ -2,7 +2,7 @@
 from bqplot.colorschemes import CATEGORY20
 from bqplot import Axis, Figure, LinearScale, Lines
 import os
-from gquant.dataframe_flow.task import load_modules
+from greenflow.dataframe_flow.task import load_modules
 load_modules(os.getenv('MODULEPATH')+'/rapids_modules/')
 from rapids_modules.cuindicator import accumulation_distribution as indicator_fun  # noqa #F401
 
diff --git a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/admi.py b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/admi.py
similarity index 97%
rename from gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/admi.py
rename to gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/admi.py
index dadbfe5d..9304f50e 100644
--- a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/admi.py
+++ b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/admi.py
@@ -2,7 +2,7 @@
 from bqplot.colorschemes import CATEGORY20
 from bqplot import Axis, Figure, LinearScale, Lines
 import os
-from gquant.dataframe_flow.task import load_modules
+from greenflow.dataframe_flow.task import load_modules
 load_modules(os.getenv('MODULEPATH')+'/rapids_modules/')
 from rapids_modules.cuindicator import average_directional_movement_index as indicator_fun  # noqa #F401
 
diff --git a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/average_true_range.py b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/average_true_range.py
similarity index 96%
rename from gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/average_true_range.py
rename to gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/average_true_range.py
index 9088256f..0fa4508f 100644
--- a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/average_true_range.py
+++ b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/average_true_range.py
@@ -2,7 +2,7 @@
 from bqplot.colorschemes import CATEGORY20
 from bqplot import Axis, Figure, LinearScale, Lines
 import os
-from gquant.dataframe_flow.task import load_modules
+from greenflow.dataframe_flow.task import load_modules
 load_modules(os.getenv('MODULEPATH')+'/rapids_modules/')
 from rapids_modules.cuindicator import average_true_range as indicator_fun  # noqa #F401
 
diff --git a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/bollinger_bands.py b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/bollinger_bands.py
similarity index 97%
rename from gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/bollinger_bands.py
rename to gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/bollinger_bands.py
index 4b61660e..1d1e8031 100644
--- a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/bollinger_bands.py
+++ b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/bollinger_bands.py
@@ -2,7 +2,7 @@
 from bqplot.colorschemes import CATEGORY20
 from bqplot import Axis, Figure, LinearScale, Lines
 import os
-from gquant.dataframe_flow.task import load_modules
+from greenflow.dataframe_flow.task import load_modules
 load_modules(os.getenv('MODULEPATH')+'/rapids_modules/')
 from rapids_modules.cuindicator import bollinger_bands as indicator_fun  # noqa #F401
 
diff --git a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/ch_oscillator.py b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/ch_oscillator.py
similarity index 97%
rename from gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/ch_oscillator.py
rename to gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/ch_oscillator.py
index 841a03f3..1e2b3575 100644
--- a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/ch_oscillator.py
+++ b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/ch_oscillator.py
@@ -2,7 +2,7 @@
 from bqplot.colorschemes import CATEGORY20
 from bqplot import Axis, Figure, LinearScale, Lines
 import os
-from gquant.dataframe_flow.task import load_modules
+from greenflow.dataframe_flow.task import load_modules
 load_modules(os.getenv('MODULEPATH')+'/rapids_modules/')
 from rapids_modules.cuindicator import chaikin_oscillator as indicator_fun  # noqa #F401
 
diff --git a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/commodity_channel_index.py b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/commodity_channel_index.py
similarity index 96%
rename from gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/commodity_channel_index.py
rename to gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/commodity_channel_index.py
index 07f3c73a..455995c7 100644
--- a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/commodity_channel_index.py
+++ b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/commodity_channel_index.py
@@ -2,7 +2,7 @@
 from bqplot.colorschemes import CATEGORY20
 from bqplot import Axis, Figure, LinearScale, Lines
 import os
-from gquant.dataframe_flow.task import load_modules
+from greenflow.dataframe_flow.task import load_modules
 load_modules(os.getenv('MODULEPATH')+'/rapids_modules/')
 from rapids_modules.cuindicator import commodity_channel_index as indicator_fun  # noqa #F401
 
diff --git a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/coppock_curve.py b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/coppock_curve.py
similarity index 96%
rename from gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/coppock_curve.py
rename to gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/coppock_curve.py
index 38bc1c67..f6984a3e 100644
--- a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/coppock_curve.py
+++ b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/coppock_curve.py
@@ -2,7 +2,7 @@
 from bqplot.colorschemes import CATEGORY20
 from bqplot import Axis, Figure, LinearScale, Lines
 import os
-from gquant.dataframe_flow.task import load_modules
+from greenflow.dataframe_flow.task import load_modules
 load_modules(os.getenv('MODULEPATH')+'/rapids_modules/')
 from rapids_modules.cuindicator import coppock_curve as indicator_fun  # noqa #F401
 
diff --git a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/donchian_channel.py b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/donchian_channel.py
similarity index 96%
rename from gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/donchian_channel.py
rename to gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/donchian_channel.py
index 6c8801e3..bba5eb22 100644
--- a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/donchian_channel.py
+++ b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/donchian_channel.py
@@ -2,7 +2,7 @@
 from bqplot.colorschemes import CATEGORY20
 from bqplot import Axis, Figure, LinearScale, Lines
 import os
-from gquant.dataframe_flow.task import load_modules
+from greenflow.dataframe_flow.task import load_modules
 load_modules(os.getenv('MODULEPATH')+'/rapids_modules/')
 from rapids_modules.cuindicator import donchian_channel as indicator_fun  # noqa #F401
 
diff --git a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/ease_of_movement.py b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/ease_of_movement.py
similarity index 96%
rename from gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/ease_of_movement.py
rename to gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/ease_of_movement.py
index f1322428..814cc67d 100644
--- a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/ease_of_movement.py
+++ b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/ease_of_movement.py
@@ -2,7 +2,7 @@
 from bqplot.colorschemes import CATEGORY20
 from bqplot import Axis, Figure, LinearScale, Lines
 import os
-from gquant.dataframe_flow.task import load_modules
+from greenflow.dataframe_flow.task import load_modules
 load_modules(os.getenv('MODULEPATH')+'/rapids_modules/')
 from rapids_modules.cuindicator import ease_of_movement as indicator_fun  # noqa #F401
 
diff --git a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/ewa.py b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/ewa.py
similarity index 95%
rename from gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/ewa.py
rename to gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/ewa.py
index 0b9a9101..83cf5820 100644
--- a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/ewa.py
+++ b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/ewa.py
@@ -3,7 +3,7 @@
 from bqplot import Lines
 import math
 import os
-from gquant.dataframe_flow.task import load_modules
+from greenflow.dataframe_flow.task import load_modules
 load_modules(os.getenv('MODULEPATH')+'/rapids_modules/')
 from rapids_modules.cuindicator import exponential_moving_average as indicator_fun  # noqa #F401
 
diff --git a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/force_index.py b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/force_index.py
similarity index 96%
rename from gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/force_index.py
rename to gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/force_index.py
index 44ca5a25..38560428 100644
--- a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/force_index.py
+++ b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/force_index.py
@@ -2,7 +2,7 @@
 from bqplot.colorschemes import CATEGORY20
 from bqplot import Axis, Figure, LinearScale, Lines
 import os
-from gquant.dataframe_flow.task import load_modules
+from greenflow.dataframe_flow.task import load_modules
 load_modules(os.getenv('MODULEPATH')+'/rapids_modules/')
 from rapids_modules.cuindicator import force_index as indicator_fun  # noqa #F401
 
diff --git a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/keltner_channel.py b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/keltner_channel.py
similarity index 97%
rename from gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/keltner_channel.py
rename to gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/keltner_channel.py
index 1683e7fa..1e697383 100644
--- a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/keltner_channel.py
+++ b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/keltner_channel.py
@@ -1,7 +1,7 @@
 import ipywidgets as widgets
 from bqplot import Axis, Figure, LinearScale, Lines
 import os
-from gquant.dataframe_flow.task import load_modules
+from greenflow.dataframe_flow.task import load_modules
 load_modules(os.getenv('MODULEPATH')+'/rapids_modules/')
 from rapids_modules.cuindicator import keltner_channel as indicator_fun  # noqa #F401
 
diff --git a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/kst_oscillator.py b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/kst_oscillator.py
similarity index 96%
rename from gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/kst_oscillator.py
rename to gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/kst_oscillator.py
index c2c80e72..8e8bd3f6 100644
--- a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/kst_oscillator.py
+++ b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/kst_oscillator.py
@@ -2,7 +2,7 @@
 from bqplot.colorschemes import CATEGORY20
 from bqplot import Axis, Figure, LinearScale, Lines
 import os
-from gquant.dataframe_flow.task import load_modules
+from greenflow.dataframe_flow.task import load_modules
 load_modules(os.getenv('MODULEPATH')+'/rapids_modules/')
 from rapids_modules.cuindicator import kst_oscillator as indicator_fun  # noqa #F401
 
diff --git a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/ma.py b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/ma.py
similarity index 95%
rename from gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/ma.py
rename to gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/ma.py
index 085b4987..42313b87 100644
--- a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/ma.py
+++ b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/ma.py
@@ -3,7 +3,7 @@
 from bqplot import Lines
 import math
 import os
-from gquant.dataframe_flow.task import load_modules
+from greenflow.dataframe_flow.task import load_modules
 load_modules(os.getenv('MODULEPATH')+'/rapids_modules/')
 from rapids_modules.cuindicator import moving_average as indicator_fun  # noqa #F401
 
diff --git a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/macd.py b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/macd.py
similarity index 97%
rename from gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/macd.py
rename to gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/macd.py
index 2a50faf5..8ff92a73 100644
--- a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/macd.py
+++ b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/macd.py
@@ -1,7 +1,7 @@
 import ipywidgets as widgets
 from bqplot import Axis, Figure, LinearScale, Lines
 import os
-from gquant.dataframe_flow.task import load_modules
+from greenflow.dataframe_flow.task import load_modules
 load_modules(os.getenv('MODULEPATH')+'/rapids_modules/')
 from rapids_modules.cuindicator import macd as indicator_fun  # noqa #F401
 
diff --git a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/mass_index.py b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/mass_index.py
similarity index 97%
rename from gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/mass_index.py
rename to gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/mass_index.py
index 7b836f6c..fbc46c24 100644
--- a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/mass_index.py
+++ b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/mass_index.py
@@ -2,7 +2,7 @@
 from bqplot.colorschemes import CATEGORY20
 from bqplot import Axis, Figure, LinearScale, Lines
 import os
-from gquant.dataframe_flow.task import load_modules
+from greenflow.dataframe_flow.task import load_modules
 load_modules(os.getenv('MODULEPATH')+'/rapids_modules/')
 from rapids_modules.cuindicator import mass_index as indicator_fun  # noqa #F401
 
diff --git a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/momentum.py b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/momentum.py
similarity index 96%
rename from gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/momentum.py
rename to gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/momentum.py
index 840a964a..fcb32755 100644
--- a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/momentum.py
+++ b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/momentum.py
@@ -2,7 +2,7 @@
 from bqplot.colorschemes import CATEGORY20
 from bqplot import Axis, Figure, LinearScale, Lines
 import os
-from gquant.dataframe_flow.task import load_modules
+from greenflow.dataframe_flow.task import load_modules
 load_modules(os.getenv('MODULEPATH')+'/rapids_modules/')
 from rapids_modules.cuindicator import momentum as indicator_fun  # noqa #F401
 
diff --git a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/money_flow_index.py b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/money_flow_index.py
similarity index 96%
rename from gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/money_flow_index.py
rename to gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/money_flow_index.py
index 341658a9..5ac312d5 100644
--- a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/money_flow_index.py
+++ b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/money_flow_index.py
@@ -2,7 +2,7 @@
 from bqplot.colorschemes import CATEGORY20
 from bqplot import Axis, Figure, LinearScale, Lines
 import os
-from gquant.dataframe_flow.task import load_modules
+from greenflow.dataframe_flow.task import load_modules
 load_modules(os.getenv('MODULEPATH')+'/rapids_modules/')
 from rapids_modules.cuindicator import money_flow_index as indicator_fun  # noqa #F401
 
diff --git a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/on_balance_volume.py b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/on_balance_volume.py
similarity index 96%
rename from gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/on_balance_volume.py
rename to gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/on_balance_volume.py
index 0be13314..ca6311d3 100644
--- a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/on_balance_volume.py
+++ b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/on_balance_volume.py
@@ -2,7 +2,7 @@
 from bqplot.colorschemes import CATEGORY20
 from bqplot import Axis, Figure, LinearScale, Lines
 import os
-from gquant.dataframe_flow.task import load_modules
+from greenflow.dataframe_flow.task import load_modules
 load_modules(os.getenv('MODULEPATH')+'/rapids_modules/')
 from rapids_modules.cuindicator import on_balance_volume as indicator_fun  # noqa #F401
 
diff --git a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/parabolic_sar.py b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/parabolic_sar.py
similarity index 98%
rename from gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/parabolic_sar.py
rename to gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/parabolic_sar.py
index 6db5c73b..34fcb41c 100644
--- a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/parabolic_sar.py
+++ b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/parabolic_sar.py
@@ -1,7 +1,7 @@
 from bqplot.colorschemes import CATEGORY20
 from bqplot import Axis, Figure, LinearScale, Lines
 import os
-from gquant.dataframe_flow.task import load_modules
+from greenflow.dataframe_flow.task import load_modules
 load_modules(os.getenv('MODULEPATH')+'/rapids_modules/')
 from rapids_modules.cuindicator import ppsr as indicator_fun  # noqa #F401
 
diff --git a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/rate_of_change.py b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/rate_of_change.py
similarity index 96%
rename from gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/rate_of_change.py
rename to gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/rate_of_change.py
index ed475bfb..9bfc772e 100644
--- a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/rate_of_change.py
+++ b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/rate_of_change.py
@@ -2,7 +2,7 @@
 from bqplot.colorschemes import CATEGORY20
 from bqplot import Axis, Figure, LinearScale, Lines
 import os
-from gquant.dataframe_flow.task import load_modules
+from greenflow.dataframe_flow.task import load_modules
 load_modules(os.getenv('MODULEPATH')+'/rapids_modules/')
 from rapids_modules.cuindicator import rate_of_change as indicator_fun  # noqa #F401
 
diff --git a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/rsi.py b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/rsi.py
similarity index 96%
rename from gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/rsi.py
rename to gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/rsi.py
index 0aed3261..eef98eb9 100644
--- a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/rsi.py
+++ b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/rsi.py
@@ -2,7 +2,7 @@
 from bqplot.colorschemes import CATEGORY20
 from bqplot import Axis, Figure, LinearScale, Lines
 import os
-from gquant.dataframe_flow.task import load_modules
+from greenflow.dataframe_flow.task import load_modules
 load_modules(os.getenv('MODULEPATH')+'/rapids_modules/')
 from rapids_modules.cuindicator import relative_strength_index as indicator_fun  # noqa #F401
 
diff --git a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/stochastic_oscillator_d.py b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/stochastic_oscillator_d.py
similarity index 96%
rename from gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/stochastic_oscillator_d.py
rename to gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/stochastic_oscillator_d.py
index a7877573..e03a48b2 100644
--- a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/stochastic_oscillator_d.py
+++ b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/stochastic_oscillator_d.py
@@ -2,7 +2,7 @@
 from bqplot.colorschemes import CATEGORY20
 from bqplot import Axis, Figure, LinearScale, Lines
 import os
-from gquant.dataframe_flow.task import load_modules
+from greenflow.dataframe_flow.task import load_modules
 load_modules(os.getenv('MODULEPATH')+'/rapids_modules/')
 from rapids_modules.cuindicator import stochastic_oscillator_d as indicator_fun  # noqa #F401
 
diff --git a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/stochastic_oscillator_k.py b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/stochastic_oscillator_k.py
similarity index 96%
rename from gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/stochastic_oscillator_k.py
rename to gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/stochastic_oscillator_k.py
index 079343bf..95ea262b 100644
--- a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/stochastic_oscillator_k.py
+++ b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/stochastic_oscillator_k.py
@@ -1,7 +1,7 @@
 from bqplot.colorschemes import CATEGORY20
 from bqplot import Axis, Figure, LinearScale, Lines
 import os
-from gquant.dataframe_flow.task import load_modules
+from greenflow.dataframe_flow.task import load_modules
 load_modules(os.getenv('MODULEPATH')+'/rapids_modules/')
 from rapids_modules.cuindicator import stochastic_oscillator_k as indicator_fun  # noqa #F401
 
diff --git a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/trix.py b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/trix.py
similarity index 96%
rename from gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/trix.py
rename to gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/trix.py
index e2c3d9cf..d393bd51 100644
--- a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/trix.py
+++ b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/trix.py
@@ -2,7 +2,7 @@
 from bqplot.colorschemes import CATEGORY20
 from bqplot import Axis, Figure, LinearScale, Lines
 import os
-from gquant.dataframe_flow.task import load_modules
+from greenflow.dataframe_flow.task import load_modules
 load_modules(os.getenv('MODULEPATH')+'/rapids_modules/')
 from rapids_modules.cuindicator import exponential_moving_average as indicator_fun  # noqa #F401
 
diff --git a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/true_strength_index.py b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/true_strength_index.py
similarity index 97%
rename from gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/true_strength_index.py
rename to gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/true_strength_index.py
index 527f3aec..ba06c095 100644
--- a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/true_strength_index.py
+++ b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/true_strength_index.py
@@ -2,7 +2,7 @@
 from bqplot.colorschemes import CATEGORY20
 from bqplot import Axis, Figure, LinearScale, Lines
 import os
-from gquant.dataframe_flow.task import load_modules
+from greenflow.dataframe_flow.task import load_modules
 load_modules(os.getenv('MODULEPATH')+'/rapids_modules/')
 from rapids_modules.cuindicator import true_strength_index as indicator_fun  # noqa #F401
 
diff --git a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/ultimate_oscillator.py b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/ultimate_oscillator.py
similarity index 96%
rename from gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/ultimate_oscillator.py
rename to gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/ultimate_oscillator.py
index 9d54f25a..210d4e92 100644
--- a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/ultimate_oscillator.py
+++ b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/ultimate_oscillator.py
@@ -1,7 +1,7 @@
 from bqplot.colorschemes import CATEGORY20
 from bqplot import Axis, Figure, LinearScale, Lines
 import os
-from gquant.dataframe_flow.task import load_modules
+from greenflow.dataframe_flow.task import load_modules
 load_modules(os.getenv('MODULEPATH')+'/rapids_modules/')
 from rapids_modules.cuindicator import ultimate_oscillator as indicator_fun  # noqa #F401
 
diff --git a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/vortex_indicator.py b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/vortex_indicator.py
similarity index 96%
rename from gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/vortex_indicator.py
rename to gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/vortex_indicator.py
index 46e19e87..c658bcea 100644
--- a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/vortex_indicator.py
+++ b/gQuant/plugins/gquant_plugin/notebooks/cuIndicator/viz/vortex_indicator.py
@@ -2,7 +2,7 @@
 from bqplot.colorschemes import CATEGORY20
 from bqplot import Axis, Figure, LinearScale, Lines
 import os
-from gquant.dataframe_flow.task import load_modules
+from greenflow.dataframe_flow.task import load_modules
 load_modules(os.getenv('MODULEPATH')+'/rapids_modules/')
 from rapids_modules.cuindicator import vortex_indicator as indicator_fun  # noqa #F401
 
diff --git a/gQuant/plugins/rapids_plugin/notebooks/custom_port_nodes.py b/gQuant/plugins/gquant_plugin/notebooks/custom_port_nodes.py
similarity index 98%
rename from gQuant/plugins/rapids_plugin/notebooks/custom_port_nodes.py
rename to gQuant/plugins/gquant_plugin/notebooks/custom_port_nodes.py
index 615f7afc..69f0ad90 100644
--- a/gQuant/plugins/rapids_plugin/notebooks/custom_port_nodes.py
+++ b/gQuant/plugins/gquant_plugin/notebooks/custom_port_nodes.py
@@ -5,9 +5,9 @@
 import cudf
 import dask_cudf
 import dask
-from gquant.dataframe_flow import Node, MetaData
-from gquant.dataframe_flow import NodePorts, PortsSpecSchema
-from gquant.dataframe_flow import ConfSchema
+from greenflow.dataframe_flow import Node, MetaData
+from greenflow.dataframe_flow import NodePorts, PortsSpecSchema
+from greenflow.dataframe_flow import ConfSchema
 import copy
 
 
diff --git a/gQuant/plugins/rapids_plugin/notebooks/images/add_composite_node.gif b/gQuant/plugins/gquant_plugin/notebooks/images/add_composite_node.gif
similarity index 100%
rename from gQuant/plugins/rapids_plugin/notebooks/images/add_composite_node.gif
rename to gQuant/plugins/gquant_plugin/notebooks/images/add_composite_node.gif
diff --git a/gQuant/plugins/rapids_plugin/notebooks/images/average.gif b/gQuant/plugins/gquant_plugin/notebooks/images/average.gif
similarity index 100%
rename from gQuant/plugins/rapids_plugin/notebooks/images/average.gif
rename to gQuant/plugins/gquant_plugin/notebooks/images/average.gif
diff --git a/gQuant/plugins/rapids_plugin/notebooks/images/clean.gif b/gQuant/plugins/gquant_plugin/notebooks/images/clean.gif
similarity index 100%
rename from gQuant/plugins/rapids_plugin/notebooks/images/clean.gif
rename to gQuant/plugins/gquant_plugin/notebooks/images/clean.gif
diff --git a/gQuant/plugins/rapids_plugin/notebooks/images/clean_up_feature.gif b/gQuant/plugins/gquant_plugin/notebooks/images/clean_up_feature.gif
similarity index 100%
rename from gQuant/plugins/rapids_plugin/notebooks/images/clean_up_feature.gif
rename to gQuant/plugins/gquant_plugin/notebooks/images/clean_up_feature.gif
diff --git a/gQuant/plugins/rapids_plugin/notebooks/images/csv_out.gif b/gQuant/plugins/gquant_plugin/notebooks/images/csv_out.gif
similarity index 100%
rename from gQuant/plugins/rapids_plugin/notebooks/images/csv_out.gif
rename to gQuant/plugins/gquant_plugin/notebooks/images/csv_out.gif
diff --git a/gQuant/plugins/rapids_plugin/notebooks/images/explore_data.gif b/gQuant/plugins/gquant_plugin/notebooks/images/explore_data.gif
similarity index 100%
rename from gQuant/plugins/rapids_plugin/notebooks/images/explore_data.gif
rename to gQuant/plugins/gquant_plugin/notebooks/images/explore_data.gif
diff --git a/gQuant/plugins/rapids_plugin/notebooks/images/get_return_feature.gif b/gQuant/plugins/gquant_plugin/notebooks/images/get_return_feature.gif
similarity index 100%
rename from gQuant/plugins/rapids_plugin/notebooks/images/get_return_feature.gif
rename to gQuant/plugins/gquant_plugin/notebooks/images/get_return_feature.gif
diff --git a/gQuant/plugins/rapids_plugin/notebooks/images/loader_csv.gif b/gQuant/plugins/gquant_plugin/notebooks/images/loader_csv.gif
similarity index 100%
rename from gQuant/plugins/rapids_plugin/notebooks/images/loader_csv.gif
rename to gQuant/plugins/gquant_plugin/notebooks/images/loader_csv.gif
diff --git a/gQuant/plugins/rapids_plugin/notebooks/images/portfolio/add_indicator.gif b/gQuant/plugins/gquant_plugin/notebooks/images/portfolio/add_indicator.gif
similarity index 100%
rename from gQuant/plugins/rapids_plugin/notebooks/images/portfolio/add_indicator.gif
rename to gQuant/plugins/gquant_plugin/notebooks/images/portfolio/add_indicator.gif
diff --git a/gQuant/plugins/rapids_plugin/notebooks/images/portfolio/add_volume_min_max_return.gif b/gQuant/plugins/gquant_plugin/notebooks/images/portfolio/add_volume_min_max_return.gif
similarity index 100%
rename from gQuant/plugins/rapids_plugin/notebooks/images/portfolio/add_volume_min_max_return.gif
rename to gQuant/plugins/gquant_plugin/notebooks/images/portfolio/add_volume_min_max_return.gif
diff --git a/gQuant/plugins/rapids_plugin/notebooks/images/portfolio/change_parameters.gif b/gQuant/plugins/gquant_plugin/notebooks/images/portfolio/change_parameters.gif
similarity index 100%
rename from gQuant/plugins/rapids_plugin/notebooks/images/portfolio/change_parameters.gif
rename to gQuant/plugins/gquant_plugin/notebooks/images/portfolio/change_parameters.gif
diff --git a/gQuant/plugins/rapids_plugin/notebooks/images/portfolio/create_composite.gif b/gQuant/plugins/gquant_plugin/notebooks/images/portfolio/create_composite.gif
similarity index 100%
rename from gQuant/plugins/rapids_plugin/notebooks/images/portfolio/create_composite.gif
rename to gQuant/plugins/gquant_plugin/notebooks/images/portfolio/create_composite.gif
diff --git a/gQuant/plugins/rapids_plugin/notebooks/images/portfolio/filter_value.gif b/gQuant/plugins/gquant_plugin/notebooks/images/portfolio/filter_value.gif
similarity index 100%
rename from gQuant/plugins/rapids_plugin/notebooks/images/portfolio/filter_value.gif
rename to gQuant/plugins/gquant_plugin/notebooks/images/portfolio/filter_value.gif
diff --git a/gQuant/plugins/rapids_plugin/notebooks/images/portfolio/run_dask_trade.gif b/gQuant/plugins/gquant_plugin/notebooks/images/portfolio/run_dask_trade.gif
similarity index 100%
rename from gQuant/plugins/rapids_plugin/notebooks/images/portfolio/run_dask_trade.gif
rename to gQuant/plugins/gquant_plugin/notebooks/images/portfolio/run_dask_trade.gif
diff --git a/gQuant/plugins/rapids_plugin/notebooks/images/portfolio/run_pandas.gif b/gQuant/plugins/gquant_plugin/notebooks/images/portfolio/run_pandas.gif
similarity index 100%
rename from gQuant/plugins/rapids_plugin/notebooks/images/portfolio/run_pandas.gif
rename to gQuant/plugins/gquant_plugin/notebooks/images/portfolio/run_pandas.gif
diff --git a/gQuant/plugins/rapids_plugin/notebooks/images/xgboost/categorical_variable.gif b/gQuant/plugins/gquant_plugin/notebooks/images/xgboost/categorical_variable.gif
similarity index 100%
rename from gQuant/plugins/rapids_plugin/notebooks/images/xgboost/categorical_variable.gif
rename to gQuant/plugins/gquant_plugin/notebooks/images/xgboost/categorical_variable.gif
diff --git a/gQuant/plugins/rapids_plugin/notebooks/images/xgboost/create_composite_node.gif b/gQuant/plugins/gquant_plugin/notebooks/images/xgboost/create_composite_node.gif
similarity index 100%
rename from gQuant/plugins/rapids_plugin/notebooks/images/xgboost/create_composite_node.gif
rename to gQuant/plugins/gquant_plugin/notebooks/images/xgboost/create_composite_node.gif
diff --git a/gQuant/plugins/rapids_plugin/notebooks/images/xgboost/create_node.gif b/gQuant/plugins/gquant_plugin/notebooks/images/xgboost/create_node.gif
similarity index 100%
rename from gQuant/plugins/rapids_plugin/notebooks/images/xgboost/create_node.gif
rename to gQuant/plugins/gquant_plugin/notebooks/images/xgboost/create_node.gif
diff --git a/gQuant/plugins/rapids_plugin/notebooks/images/xgboost/custom_node.gif b/gQuant/plugins/gquant_plugin/notebooks/images/xgboost/custom_node.gif
similarity index 100%
rename from gQuant/plugins/rapids_plugin/notebooks/images/xgboost/custom_node.gif
rename to gQuant/plugins/gquant_plugin/notebooks/images/xgboost/custom_node.gif
diff --git a/gQuant/plugins/rapids_plugin/notebooks/images/xgboost/dask_and_sub_graph.gif b/gQuant/plugins/gquant_plugin/notebooks/images/xgboost/dask_and_sub_graph.gif
similarity index 100%
rename from gQuant/plugins/rapids_plugin/notebooks/images/xgboost/dask_and_sub_graph.gif
rename to gQuant/plugins/gquant_plugin/notebooks/images/xgboost/dask_and_sub_graph.gif
diff --git a/gQuant/plugins/rapids_plugin/notebooks/images/xgboost/distributed_inference.gif b/gQuant/plugins/gquant_plugin/notebooks/images/xgboost/distributed_inference.gif
similarity index 100%
rename from gQuant/plugins/rapids_plugin/notebooks/images/xgboost/distributed_inference.gif
rename to gQuant/plugins/gquant_plugin/notebooks/images/xgboost/distributed_inference.gif
diff --git a/gQuant/plugins/rapids_plugin/notebooks/images/xgboost/forest_inference.gif b/gQuant/plugins/gquant_plugin/notebooks/images/xgboost/forest_inference.gif
similarity index 100%
rename from gQuant/plugins/rapids_plugin/notebooks/images/xgboost/forest_inference.gif
rename to gQuant/plugins/gquant_plugin/notebooks/images/xgboost/forest_inference.gif
diff --git a/gQuant/plugins/rapids_plugin/notebooks/images/xgboost/normalize.gif b/gQuant/plugins/gquant_plugin/notebooks/images/xgboost/normalize.gif
similarity index 100%
rename from gQuant/plugins/rapids_plugin/notebooks/images/xgboost/normalize.gif
rename to gQuant/plugins/gquant_plugin/notebooks/images/xgboost/normalize.gif
diff --git a/gQuant/plugins/rapids_plugin/notebooks/images/xgboost/prepare_stock_data.gif b/gQuant/plugins/gquant_plugin/notebooks/images/xgboost/prepare_stock_data.gif
similarity index 100%
rename from gQuant/plugins/rapids_plugin/notebooks/images/xgboost/prepare_stock_data.gif
rename to gQuant/plugins/gquant_plugin/notebooks/images/xgboost/prepare_stock_data.gif
diff --git a/gQuant/plugins/rapids_plugin/notebooks/images/xgboost/split_the_dataset.gif b/gQuant/plugins/gquant_plugin/notebooks/images/xgboost/split_the_dataset.gif
similarity index 100%
rename from gQuant/plugins/rapids_plugin/notebooks/images/xgboost/split_the_dataset.gif
rename to gQuant/plugins/gquant_plugin/notebooks/images/xgboost/split_the_dataset.gif
diff --git a/gQuant/plugins/rapids_plugin/notebooks/images/xgboost/train_and_infer.gif b/gQuant/plugins/gquant_plugin/notebooks/images/xgboost/train_and_infer.gif
similarity index 100%
rename from gQuant/plugins/rapids_plugin/notebooks/images/xgboost/train_and_infer.gif
rename to gQuant/plugins/gquant_plugin/notebooks/images/xgboost/train_and_infer.gif
diff --git a/gQuant/plugins/rapids_plugin/notebooks/images/xgboost/visualize_data.gif b/gQuant/plugins/gquant_plugin/notebooks/images/xgboost/visualize_data.gif
similarity index 100%
rename from gQuant/plugins/rapids_plugin/notebooks/images/xgboost/visualize_data.gif
rename to gQuant/plugins/gquant_plugin/notebooks/images/xgboost/visualize_data.gif
diff --git a/gQuant/plugins/rapids_plugin/notebooks/images/xgboost/xgboost_metrics.gif b/gQuant/plugins/gquant_plugin/notebooks/images/xgboost/xgboost_metrics.gif
similarity index 100%
rename from gQuant/plugins/rapids_plugin/notebooks/images/xgboost/xgboost_metrics.gif
rename to gQuant/plugins/gquant_plugin/notebooks/images/xgboost/xgboost_metrics.gif
diff --git a/gQuant/plugins/rapids_plugin/notebooks/images/xgboost/xgboost_stock_data.gif b/gQuant/plugins/gquant_plugin/notebooks/images/xgboost/xgboost_stock_data.gif
similarity index 100%
rename from gQuant/plugins/rapids_plugin/notebooks/images/xgboost/xgboost_stock_data.gif
rename to gQuant/plugins/gquant_plugin/notebooks/images/xgboost/xgboost_stock_data.gif
diff --git a/gQuant/plugins/rapids_plugin/notebooks/plotutils.py b/gQuant/plugins/gquant_plugin/notebooks/plotutils.py
similarity index 100%
rename from gQuant/plugins/rapids_plugin/notebooks/plotutils.py
rename to gQuant/plugins/gquant_plugin/notebooks/plotutils.py
diff --git a/gQuant/plugins/gquant_plugin/setup.py b/gQuant/plugins/gquant_plugin/setup.py
new file mode 100644
index 00000000..65abecfa
--- /dev/null
+++ b/gQuant/plugins/gquant_plugin/setup.py
@@ -0,0 +1,28 @@
+from setuptools import setup, find_packages
+
+setup(
+    name='greenflow_gquant_plugin',
+    install_requires=[
+        "bqplot", "tables", "ray[tune]"
+    ],
+    packages=find_packages(include=['greenflow_gquant_plugin',
+                                    'greenflow_gquant_plugin.analysis',
+                                    'greenflow_gquant_plugin.backtest',
+                                    'greenflow_gquant_plugin.dataloader',
+                                    'greenflow_gquant_plugin.ml',
+                                    'greenflow_gquant_plugin.portofolio',
+                                    'greenflow_gquant_plugin.strategy',
+                                    'greenflow_gquant_plugin.cuindicator',
+                                    'greenflow_gquant_plugin.transform']),
+    entry_points={
+        'greenflow.plugin':
+        ['greenflow_gquant_plugin = greenflow_gquant_plugin',
+         'greenflow_gquant_plugin.analysis = greenflow_gquant_plugin.analysis',
+         'greenflow_gquant_plugin.backtest = greenflow_gquant_plugin.backtest',
+         'greenflow_gquant_plugin.dataloader = greenflow_gquant_plugin.dataloader',
+         'greenflow_gquant_plugin.ml = greenflow_gquant_plugin.ml',
+         'greenflow_gquant_plugin.portofolio = greenflow_gquant_plugin.portofolio',
+         'greenflow_gquant_plugin.strategy = greenflow_gquant_plugin.strategy',
+         'greenflow_gquant_plugin.transform = greenflow_gquant_plugin.transform'],
+    }
+)
diff --git a/gQuant/plugins/rapids_plugin/taskgraphs/dask_tutorial.gq.yaml b/gQuant/plugins/gquant_plugin/taskgraphs/dask_tutorial.gq.yaml
similarity index 76%
rename from gQuant/plugins/rapids_plugin/taskgraphs/dask_tutorial.gq.yaml
rename to gQuant/plugins/gquant_plugin/taskgraphs/dask_tutorial.gq.yaml
index 298fea36..781b5518 100644
--- a/gQuant/plugins/rapids_plugin/taskgraphs/dask_tutorial.gq.yaml
+++ b/gQuant/plugins/gquant_plugin/taskgraphs/dask_tutorial.gq.yaml
@@ -3,7 +3,7 @@
     path: notebooks/many-small
   id: stock_data
   inputs: {}
-  module: gquant_rapids_plugin.dataloader
+  module: greenflow_gquant_plugin.dataloader
   type: CsvStockLoader
 - conf:
     keys:
@@ -12,7 +12,7 @@
   id: sort_node
   inputs:
     in: stock_data.dask_cudf_out
-  module: gquant_rapids_plugin.transform
+  module: greenflow_gquant_plugin.transform
   type: SortNode
 - conf: {}
   id: ''
@@ -24,12 +24,12 @@
   id: average_volume
   inputs:
     stock_in: sort_node.out
-  module: gquant_rapids_plugin.transform
+  module: greenflow_gquant_plugin.transform
   type: AverageNode
 - conf:
     path: notebooks/dask_average_volume.csv
   id: output_csv
   inputs:
     df_in: average_volume.stock_out
-  module: gquant_rapids_plugin.analysis
+  module: greenflow_gquant_plugin.analysis
   type: OutCsvNode
diff --git a/gQuant/plugins/rapids_plugin/taskgraphs/full_example.gq.yaml b/gQuant/plugins/gquant_plugin/taskgraphs/full_example.gq.yaml
similarity index 100%
rename from gQuant/plugins/rapids_plugin/taskgraphs/full_example.gq.yaml
rename to gQuant/plugins/gquant_plugin/taskgraphs/full_example.gq.yaml
diff --git a/gQuant/plugins/rapids_plugin/taskgraphs/get_return_feature.gq.yaml b/gQuant/plugins/gquant_plugin/taskgraphs/get_return_feature.gq.yaml
similarity index 76%
rename from gQuant/plugins/rapids_plugin/taskgraphs/get_return_feature.gq.yaml
rename to gQuant/plugins/gquant_plugin/taskgraphs/get_return_feature.gq.yaml
index 985a4d0d..a22b1f94 100644
--- a/gQuant/plugins/rapids_plugin/taskgraphs/get_return_feature.gq.yaml
+++ b/gQuant/plugins/gquant_plugin/taskgraphs/get_return_feature.gq.yaml
@@ -2,7 +2,7 @@
     file: notebooks/data/stock_price_hist.csv.gz
   id: stock_data
   inputs: {}
-  module: gquant_rapids_plugin.dataloader
+  module: greenflow_gquant_plugin.dataloader
   type: CsvStockLoader
 - conf: {}
   id: ''
@@ -17,7 +17,7 @@
   id: volume_filter
   inputs:
     in: stock_data.cudf_out
-  module: gquant_rapids_plugin.transform
+  module: greenflow_gquant_plugin.transform
   type: ValueFilterNode
 - conf:
     keys:
@@ -26,11 +26,11 @@
   id: sort_node
   inputs:
     in: volume_filter.out
-  module: gquant_rapids_plugin.transform
+  module: greenflow_gquant_plugin.transform
   type: SortNode
 - conf: {}
   id: add_return_feature
   inputs:
     stock_in: sort_node.out
-  module: gquant_rapids_plugin.transform
+  module: greenflow_gquant_plugin.transform
   type: ReturnFeatureNode
diff --git a/gQuant/plugins/rapids_plugin/taskgraphs/portfolio_trade.gq.yaml b/gQuant/plugins/gquant_plugin/taskgraphs/portfolio_trade.gq.yaml
similarity index 82%
rename from gQuant/plugins/rapids_plugin/taskgraphs/portfolio_trade.gq.yaml
rename to gQuant/plugins/gquant_plugin/taskgraphs/portfolio_trade.gq.yaml
index 1414d4ed..e0ef0221 100644
--- a/gQuant/plugins/rapids_plugin/taskgraphs/portfolio_trade.gq.yaml
+++ b/gQuant/plugins/gquant_plugin/taskgraphs/portfolio_trade.gq.yaml
@@ -3,7 +3,7 @@
     path: notebooks/many-small
   id: stock_data
   inputs: {}
-  module: gquant_rapids_plugin.dataloader
+  module: greenflow_gquant_plugin.dataloader
   type: CsvStockLoader
 - conf:
     input:
@@ -33,7 +33,7 @@
   id: sort_after
   inputs:
     in: preprocess.drop_columns@out
-  module: gquant_rapids_plugin.transform
+  module: greenflow_gquant_plugin.transform
   type: SortNode
 - conf:
     fast: 5
@@ -41,25 +41,25 @@
   id: exp_mean_reversion
   inputs:
     stock_in: sort_after.out
-  module: gquant_rapids_plugin.strategy
+  module: greenflow_gquant_plugin.strategy
   type: PortExpMovingAverageStrategyNode
 - conf: {}
   id: backtest
   inputs:
     bardata_in: exp_mean_reversion.stock_out
-  module: gquant_rapids_plugin.backtest
+  module: greenflow_gquant_plugin.backtest
   type: SimpleBackTestNode
 - conf: {}
   id: portfolio_opt
   inputs:
     stock_in: backtest.backtest_out
-  module: gquant_rapids_plugin.portofolio
+  module: greenflow_gquant_plugin.portofolio
   type: SimpleAveragePortOpt
 - conf: {}
   id: sharpe_ratio
   inputs:
     stock_in: portfolio_opt.stock_out
-  module: gquant_rapids_plugin.analysis
+  module: greenflow_gquant_plugin.analysis
   type: SharpeRatioNode
 - conf:
     label: cumulative return
@@ -67,7 +67,7 @@
   id: cumulative_return
   inputs:
     in: portfolio_opt.stock_out
-  module: gquant_rapids_plugin.analysis
+  module: greenflow_gquant_plugin.analysis
   type: CumReturnNode
 - conf: {}
   id: ''
diff --git a/gQuant/plugins/rapids_plugin/taskgraphs/preprocess.gq.yaml b/gQuant/plugins/gquant_plugin/taskgraphs/preprocess.gq.yaml
similarity index 76%
rename from gQuant/plugins/rapids_plugin/taskgraphs/preprocess.gq.yaml
rename to gQuant/plugins/gquant_plugin/taskgraphs/preprocess.gq.yaml
index dda07c86..2eb787ac 100644
--- a/gQuant/plugins/rapids_plugin/taskgraphs/preprocess.gq.yaml
+++ b/gQuant/plugins/gquant_plugin/taskgraphs/preprocess.gq.yaml
@@ -3,7 +3,7 @@
     path: notebooks/many-small/
   id: stock_data
   inputs: {}
-  module: gquant_rapids_plugin.dataloader
+  module: greenflow_gquant_plugin.dataloader
   type: CsvStockLoader
 - conf:
     keys:
@@ -12,26 +12,26 @@
   id: sort_node
   inputs:
     in: stock_data.cudf_out
-  module: gquant_rapids_plugin.transform
+  module: greenflow_gquant_plugin.transform
   type: SortNode
 - conf: {}
   id: add_return_feature
   inputs:
     stock_in: sort_node.out
-  module: gquant_rapids_plugin.transform
+  module: greenflow_gquant_plugin.transform
   type: ReturnFeatureNode
 - conf: {}
   id: find_stock_row
   inputs:
     stock_in: add_return_feature.stock_out
-  module: gquant_rapids_plugin.transform
+  module: greenflow_gquant_plugin.transform
   type: AssetIndicatorNode
 - conf:
     column: volume
   id: average_volume
   inputs:
     stock_in: find_stock_row.stock_out
-  module: gquant_rapids_plugin.transform
+  module: greenflow_gquant_plugin.transform
   type: AverageNode
 - conf:
     new: average_volume
@@ -39,7 +39,7 @@
   id: rename_average_volume
   inputs:
     in: average_volume.stock_out
-  module: gquant_rapids_plugin.transform
+  module: greenflow_gquant_plugin.transform
   type: RenameNode
 - conf:
     column: asset
@@ -47,14 +47,14 @@
   inputs:
     left: find_stock_row.stock_out
     right: rename_average_volume.out
-  module: gquant_rapids_plugin.transform
+  module: greenflow_gquant_plugin.transform
   type: LeftMergeNode
 - conf:
     column: returns
   id: min_return
   inputs:
     in: find_stock_row.stock_out
-  module: gquant_rapids_plugin.transform
+  module: greenflow_gquant_plugin.transform
   type: MinNode
 - conf:
     new: min_return
@@ -62,7 +62,7 @@
   id: rename_min_return
   inputs:
     in: min_return.out
-  module: gquant_rapids_plugin.transform
+  module: greenflow_gquant_plugin.transform
   type: RenameNode
 - conf:
     column: asset
@@ -70,14 +70,14 @@
   inputs:
     left: merge_average_volume.merged
     right: rename_min_return.out
-  module: gquant_rapids_plugin.transform
+  module: greenflow_gquant_plugin.transform
   type: LeftMergeNode
 - conf:
     column: returns
   id: max_return
   inputs:
     in: find_stock_row.stock_out
-  module: gquant_rapids_plugin.transform
+  module: greenflow_gquant_plugin.transform
   type: MaxNode
 - conf:
     new: max_return
@@ -85,7 +85,7 @@
   id: rename_max_return
   inputs:
     in: max_return.out
-  module: gquant_rapids_plugin.transform
+  module: greenflow_gquant_plugin.transform
   type: RenameNode
 - conf:
     column: asset
@@ -93,7 +93,7 @@
   inputs:
     left: merge_min_return.merged
     right: rename_max_return.out
-  module: gquant_rapids_plugin.transform
+  module: greenflow_gquant_plugin.transform
   type: LeftMergeNode
 - conf: {}
   id: ''
@@ -110,7 +110,7 @@
   id: value_filter
   inputs:
     in: merge_max_return.merged
-  module: gquant_rapids_plugin.transform
+  module: greenflow_gquant_plugin.transform
   type: ValueFilterNode
 - conf:
     columns:
@@ -124,5 +124,5 @@
   id: drop_columns
   inputs:
     in: value_filter.out
-  module: gquant_rapids_plugin.transform
+  module: greenflow_gquant_plugin.transform
   type: DropNode
diff --git a/gQuant/plugins/rapids_plugin/taskgraphs/simple_trade.gq.yaml b/gQuant/plugins/gquant_plugin/taskgraphs/simple_trade.gq.yaml
similarity index 77%
rename from gQuant/plugins/rapids_plugin/taskgraphs/simple_trade.gq.yaml
rename to gQuant/plugins/gquant_plugin/taskgraphs/simple_trade.gq.yaml
index e08d96d5..a2eaa541 100644
--- a/gQuant/plugins/rapids_plugin/taskgraphs/simple_trade.gq.yaml
+++ b/gQuant/plugins/gquant_plugin/taskgraphs/simple_trade.gq.yaml
@@ -2,13 +2,13 @@
     file: notebooks/data/stock_price_hist.csv.gz
   id: stock_data
   inputs: {}
-  module: gquant_rapids_plugin.dataloader
+  module: greenflow_gquant_plugin.dataloader
   type: CsvStockLoader
 - conf:
     file: notebooks/data/security_master.csv.gz
   id: stock_name
   inputs: {}
-  module: gquant_rapids_plugin.dataloader
+  module: greenflow_gquant_plugin.dataloader
   type: StockNameLoader
 - conf:
     asset: 4330
@@ -16,7 +16,7 @@
   inputs:
     name_map: stock_name.map_data
     stock_in: stock_data.cudf_out
-  module: gquant_rapids_plugin.transform
+  module: greenflow_gquant_plugin.transform
   type: AssetFilterNode
 - conf: {}
   id: ''
@@ -36,13 +36,13 @@
   id: sort_node
   inputs:
     in: stock_selector.stock_out
-  module: gquant_rapids_plugin.transform
+  module: greenflow_gquant_plugin.transform
   type: SortNode
 - conf: {}
   id: add_return
   inputs:
     stock_in: sort_node.out
-  module: gquant_rapids_plugin.transform
+  module: greenflow_gquant_plugin.transform
   type: ReturnFeatureNode
 - conf:
     fast: 5
@@ -50,13 +50,13 @@
   id: mean_reversion
   inputs:
     stock_in: add_return.stock_out
-  module: gquant_rapids_plugin.strategy
+  module: greenflow_gquant_plugin.strategy
   type: MovingAverageStrategyNode
 - conf: {}
   id: backtest
   inputs:
     bardata_in: mean_reversion.stock_out
-  module: gquant_rapids_plugin.backtest
+  module: greenflow_gquant_plugin.backtest
   type: SimpleBackTestNode
 - conf:
     label: barplot
@@ -64,7 +64,7 @@
   id: barplot
   inputs:
     stock_in: backtest.backtest_out
-  module: gquant_rapids_plugin.analysis
+  module: greenflow_gquant_plugin.analysis
   type: BarPlotNode
 - conf:
     lines:
@@ -79,13 +79,13 @@
   id: lineplot
   inputs:
     in: backtest.backtest_out
-  module: gquant_rapids_plugin.analysis
+  module: greenflow_gquant_plugin.analysis
   type: LinePlotNode
 - conf: {}
   id: sharpe_ratio
   inputs:
     stock_in: backtest.backtest_out
-  module: gquant_rapids_plugin.analysis
+  module: greenflow_gquant_plugin.analysis
   type: SharpeRatioNode
 - conf:
     label: cumulative_return
@@ -93,5 +93,5 @@
   id: cumulative_return
   inputs:
     in: backtest.backtest_out
-  module: gquant_rapids_plugin.analysis
+  module: greenflow_gquant_plugin.analysis
   type: CumReturnNode
diff --git a/gQuant/plugins/rapids_plugin/taskgraphs/sort_stocks.gq.yaml b/gQuant/plugins/gquant_plugin/taskgraphs/sort_stocks.gq.yaml
similarity index 79%
rename from gQuant/plugins/rapids_plugin/taskgraphs/sort_stocks.gq.yaml
rename to gQuant/plugins/gquant_plugin/taskgraphs/sort_stocks.gq.yaml
index be104e32..0eaea63a 100644
--- a/gQuant/plugins/rapids_plugin/taskgraphs/sort_stocks.gq.yaml
+++ b/gQuant/plugins/gquant_plugin/taskgraphs/sort_stocks.gq.yaml
@@ -3,7 +3,7 @@
     path: notebooks/many-small
   id: stock_data
   inputs: {}
-  module: gquant_rapids_plugin.dataloader
+  module: greenflow_gquant_plugin.dataloader
   type: CsvStockLoader
 - conf:
     keys:
@@ -12,7 +12,7 @@
   id: sort_node
   inputs:
     in: stock_data.cudf_out
-  module: gquant_rapids_plugin.transform
+  module: greenflow_gquant_plugin.transform
   type: SortNode
 - conf: {}
   id: ''
diff --git a/gQuant/plugins/rapids_plugin/taskgraphs/streamz/gpu_double.gq.yaml b/gQuant/plugins/gquant_plugin/taskgraphs/streamz/gpu_double.gq.yaml
similarity index 100%
rename from gQuant/plugins/rapids_plugin/taskgraphs/streamz/gpu_double.gq.yaml
rename to gQuant/plugins/gquant_plugin/taskgraphs/streamz/gpu_double.gq.yaml
diff --git a/gQuant/plugins/rapids_plugin/taskgraphs/streamz/gpu_double_two_branches.gq.yaml b/gQuant/plugins/gquant_plugin/taskgraphs/streamz/gpu_double_two_branches.gq.yaml
similarity index 100%
rename from gQuant/plugins/rapids_plugin/taskgraphs/streamz/gpu_double_two_branches.gq.yaml
rename to gQuant/plugins/gquant_plugin/taskgraphs/streamz/gpu_double_two_branches.gq.yaml
diff --git a/gQuant/plugins/rapids_plugin/taskgraphs/streamz/plot.gq.yaml b/gQuant/plugins/gquant_plugin/taskgraphs/streamz/plot.gq.yaml
similarity index 100%
rename from gQuant/plugins/rapids_plugin/taskgraphs/streamz/plot.gq.yaml
rename to gQuant/plugins/gquant_plugin/taskgraphs/streamz/plot.gq.yaml
diff --git a/gQuant/plugins/rapids_plugin/taskgraphs/streamz/two_branches.gq.yaml b/gQuant/plugins/gquant_plugin/taskgraphs/streamz/two_branches.gq.yaml
similarity index 100%
rename from gQuant/plugins/rapids_plugin/taskgraphs/streamz/two_branches.gq.yaml
rename to gQuant/plugins/gquant_plugin/taskgraphs/streamz/two_branches.gq.yaml
diff --git a/gQuant/plugins/rapids_plugin/taskgraphs/tutorial_intro.gq.yaml b/gQuant/plugins/gquant_plugin/taskgraphs/tutorial_intro.gq.yaml
similarity index 81%
rename from gQuant/plugins/rapids_plugin/taskgraphs/tutorial_intro.gq.yaml
rename to gQuant/plugins/gquant_plugin/taskgraphs/tutorial_intro.gq.yaml
index 44275ec2..8378fa05 100644
--- a/gQuant/plugins/rapids_plugin/taskgraphs/tutorial_intro.gq.yaml
+++ b/gQuant/plugins/gquant_plugin/taskgraphs/tutorial_intro.gq.yaml
@@ -2,7 +2,7 @@
     file: notebooks/data/stock_price_hist.csv.gz
   id: stock_data
   inputs: {}
-  module: gquant_rapids_plugin.dataloader
+  module: greenflow_gquant_plugin.dataloader
   type: CsvStockLoader
 - conf: {}
   id: ''
@@ -33,20 +33,20 @@
   id: average_volume
   inputs:
     stock_in: get_return.add_return_feature@stock_out
-  module: gquant_rapids_plugin.transform
+  module: greenflow_gquant_plugin.transform
   type: AverageNode
 - conf:
     column: returns
   id: average_return
   inputs:
     stock_in: get_return.add_return_feature@stock_out
-  module: gquant_rapids_plugin.transform
+  module: greenflow_gquant_plugin.transform
   type: AverageNode
 - conf:
     file: notebooks/data/security_master.csv.gz
   id: stock_name
   inputs: {}
-  module: gquant_rapids_plugin.dataloader
+  module: greenflow_gquant_plugin.dataloader
   type: StockNameLoader
 - conf:
     column: asset
@@ -54,7 +54,7 @@
   inputs:
     left: average_volume.stock_out
     right: stock_name.stock_name
-  module: gquant_rapids_plugin.transform
+  module: greenflow_gquant_plugin.transform
   type: LeftMergeNode
 - conf:
     column: asset
@@ -62,19 +62,19 @@
   inputs:
     left: average_return.stock_out
     right: stock_name.stock_name
-  module: gquant_rapids_plugin.transform
+  module: greenflow_gquant_plugin.transform
   type: LeftMergeNode
 - conf:
     path: notebooks/average_return.csv
   id: csv_output1
   inputs:
     df_in: left_merge2.merged
-  module: gquant_rapids_plugin.analysis
+  module: greenflow_gquant_plugin.analysis
   type: OutCsvNode
 - conf:
     path: notebooks/average_volume.csv
   id: csv_output2
   inputs:
     df_in: left_merge1.merged
-  module: gquant_rapids_plugin.analysis
+  module: greenflow_gquant_plugin.analysis
   type: OutCsvNode
diff --git a/gQuant/plugins/rapids_plugin/taskgraphs/visualize_frac_diff.gq.yaml b/gQuant/plugins/gquant_plugin/taskgraphs/visualize_frac_diff.gq.yaml
similarity index 95%
rename from gQuant/plugins/rapids_plugin/taskgraphs/visualize_frac_diff.gq.yaml
rename to gQuant/plugins/gquant_plugin/taskgraphs/visualize_frac_diff.gq.yaml
index f131af34..165d0efb 100644
--- a/gQuant/plugins/rapids_plugin/taskgraphs/visualize_frac_diff.gq.yaml
+++ b/gQuant/plugins/gquant_plugin/taskgraphs/visualize_frac_diff.gq.yaml
@@ -3,14 +3,14 @@
     path: notebooks/many-small
   id: stock_data
   inputs: {}
-  module: gquant_rapids_plugin.dataloader
+  module: greenflow_gquant_plugin.dataloader
   type: CsvStockLoader
 - conf:
     asset: 22123
   id: asset_filter
   inputs:
     stock_in: xgboost_graph.technical_indicator@stock_out
-  module: gquant_rapids_plugin.transform
+  module: greenflow_gquant_plugin.transform
   type: AssetFilterNode
 - conf: {}
   id: ''
@@ -36,7 +36,7 @@
   id: lineplot
   inputs:
     in: asset_filter.stock_out
-  module: gquant_rapids_plugin.analysis
+  module: greenflow_gquant_plugin.analysis
   type: LinePlotNode
 - conf:
     input:
diff --git a/gQuant/plugins/rapids_plugin/taskgraphs/xgboost_example/data_generator.gq.yaml b/gQuant/plugins/gquant_plugin/taskgraphs/xgboost_example/data_generator.gq.yaml
similarity index 83%
rename from gQuant/plugins/rapids_plugin/taskgraphs/xgboost_example/data_generator.gq.yaml
rename to gQuant/plugins/gquant_plugin/taskgraphs/xgboost_example/data_generator.gq.yaml
index 32c937e7..0a10d3bc 100644
--- a/gQuant/plugins/rapids_plugin/taskgraphs/xgboost_example/data_generator.gq.yaml
+++ b/gQuant/plugins/gquant_plugin/taskgraphs/xgboost_example/data_generator.gq.yaml
@@ -17,7 +17,7 @@
     shuffle: true
   id: data_gen
   inputs: {}
-  module: gquant_rapids_plugin.dataloader
+  module: greenflow_gquant_plugin.dataloader
   type: ClassificationData
 - conf: {}
   id: ''
@@ -30,7 +30,7 @@
   id: x2_to_sign
   inputs:
     in: data_gen.cudf_out
-  module: gquant_rapids_plugin.transform
+  module: greenflow_gquant_plugin.transform
   type: AddSignIndicatorNode
 - conf:
     column: x3
@@ -38,7 +38,7 @@
   id: x3_to_sign
   inputs:
     in: x2_to_sign.out
-  module: gquant_rapids_plugin.transform
+  module: greenflow_gquant_plugin.transform
   type: AddSignIndicatorNode
 - conf:
     columns:
@@ -49,7 +49,7 @@
   id: drop_x2_x3
   inputs:
     in: one_hot_encoding.out
-  module: gquant_rapids_plugin.transform
+  module: greenflow_gquant_plugin.transform
   type: DropNode
 - conf:
   - cats:
@@ -69,5 +69,5 @@
   id: one_hot_encoding
   inputs:
     in: x3_to_sign.out
-  module: gquant_rapids_plugin.transform
+  module: greenflow_gquant_plugin.transform
   type: OneHotEncodingNode
diff --git a/gQuant/plugins/rapids_plugin/taskgraphs/xgboost_example/hyper_parameters_search.gq.yaml b/gQuant/plugins/gquant_plugin/taskgraphs/xgboost_example/hyper_parameters_search.gq.yaml
similarity index 97%
rename from gQuant/plugins/rapids_plugin/taskgraphs/xgboost_example/hyper_parameters_search.gq.yaml
rename to gQuant/plugins/gquant_plugin/taskgraphs/xgboost_example/hyper_parameters_search.gq.yaml
index 9751b937..a87fc925 100644
--- a/gQuant/plugins/rapids_plugin/taskgraphs/xgboost_example/hyper_parameters_search.gq.yaml
+++ b/gQuant/plugins/gquant_plugin/taskgraphs/xgboost_example/hyper_parameters_search.gq.yaml
@@ -17,7 +17,7 @@
     shuffle: true
   id: data_gen
   inputs: {}
-  module: gquant_rapids_plugin.dataloader
+  module: greenflow_gquant_plugin.dataloader
   type: ClassificationData
 - conf: {}
   id: ''
@@ -66,7 +66,7 @@
   id: data_splitter
   inputs:
     in: data_generator.drop_x2_x3@out
-  module: gquant_rapids_plugin.ml
+  module: greenflow_gquant_plugin.ml
   type: DataSplittingNode
 - conf:
     context:
@@ -207,5 +207,5 @@
     conf_in: xgboost_model.conf_out
     test_norm@df_in: data_splitter.test
     train_norm@df_in: data_splitter.train
-  module: gquant_rapids_plugin.ml
+  module: greenflow_gquant_plugin.ml
   type: GridRandomSearchNode
diff --git a/gQuant/plugins/rapids_plugin/taskgraphs/xgboost_example/metrics.gq.yaml b/gQuant/plugins/gquant_plugin/taskgraphs/xgboost_example/metrics.gq.yaml
similarity index 90%
rename from gQuant/plugins/rapids_plugin/taskgraphs/xgboost_example/metrics.gq.yaml
rename to gQuant/plugins/gquant_plugin/taskgraphs/xgboost_example/metrics.gq.yaml
index 172f6aec..c0fdb55c 100644
--- a/gQuant/plugins/rapids_plugin/taskgraphs/xgboost_example/metrics.gq.yaml
+++ b/gQuant/plugins/gquant_plugin/taskgraphs/xgboost_example/metrics.gq.yaml
@@ -17,7 +17,7 @@
     shuffle: true
   id: data_gen
   inputs: {}
-  module: gquant_rapids_plugin.dataloader
+  module: greenflow_gquant_plugin.dataloader
   type: ClassificationData
 - conf: {}
   id: ''
@@ -79,7 +79,7 @@
   id: data_splitter
   inputs:
     in: data_generator.drop_x2_x3@out
-  module: gquant_rapids_plugin.ml
+  module: greenflow_gquant_plugin.ml
   type: DataSplittingNode
 - conf:
     label: y
@@ -87,7 +87,7 @@
   id: train_roc
   inputs:
     in: xgboost_model.train_infer@out
-  module: gquant_rapids_plugin.analysis
+  module: greenflow_gquant_plugin.analysis
   type: RocCurveNode
 - conf:
     label: y
@@ -95,12 +95,12 @@
   id: test_roc
   inputs:
     in: xgboost_model.test_infer@out
-  module: gquant_rapids_plugin.analysis
+  module: greenflow_gquant_plugin.analysis
   type: RocCurveNode
 - conf:
     type: gain
   id: feature_importance
   inputs:
     in: xgboost_model.train_xgboost@model_out
-  module: gquant_rapids_plugin.analysis
+  module: greenflow_gquant_plugin.analysis
   type: ImportanceCurveNode
diff --git a/gQuant/plugins/rapids_plugin/taskgraphs/xgboost_example/ml_preprocess.gq.yaml b/gQuant/plugins/gquant_plugin/taskgraphs/xgboost_example/ml_preprocess.gq.yaml
similarity index 90%
rename from gQuant/plugins/rapids_plugin/taskgraphs/xgboost_example/ml_preprocess.gq.yaml
rename to gQuant/plugins/gquant_plugin/taskgraphs/xgboost_example/ml_preprocess.gq.yaml
index 3002367c..44868eab 100644
--- a/gQuant/plugins/rapids_plugin/taskgraphs/xgboost_example/ml_preprocess.gq.yaml
+++ b/gQuant/plugins/gquant_plugin/taskgraphs/xgboost_example/ml_preprocess.gq.yaml
@@ -39,7 +39,7 @@
   id: data_splitter
   inputs:
     in: data_generator.drop_x2_x3@out
-  module: gquant_rapids_plugin.ml
+  module: greenflow_gquant_plugin.ml
   type: DataSplittingNode
 - conf:
     columns:
@@ -52,7 +52,7 @@
   id: train_norm
   inputs:
     df_in: data_splitter.train
-  module: gquant_rapids_plugin.transform
+  module: greenflow_gquant_plugin.transform
   type: NormalizationNode
 - conf:
     include: true
@@ -60,5 +60,5 @@
   inputs:
     df_in: data_splitter.test
     norm_data_in: train_norm.norm_data_out
-  module: gquant_rapids_plugin.transform
+  module: greenflow_gquant_plugin.transform
   type: NormalizationNode
diff --git a/gQuant/plugins/rapids_plugin/taskgraphs/xgboost_example/stock_data.gq.yaml b/gQuant/plugins/gquant_plugin/taskgraphs/xgboost_example/stock_data.gq.yaml
similarity index 97%
rename from gQuant/plugins/rapids_plugin/taskgraphs/xgboost_example/stock_data.gq.yaml
rename to gQuant/plugins/gquant_plugin/taskgraphs/xgboost_example/stock_data.gq.yaml
index 0e043934..19288eb6 100644
--- a/gQuant/plugins/rapids_plugin/taskgraphs/xgboost_example/stock_data.gq.yaml
+++ b/gQuant/plugins/gquant_plugin/taskgraphs/xgboost_example/stock_data.gq.yaml
@@ -3,7 +3,7 @@
     path: notebooks/many-small
   id: stock_data
   inputs: {}
-  module: gquant_rapids_plugin.dataloader
+  module: greenflow_gquant_plugin.dataloader
   type: CsvStockLoader
 - conf: {}
   id: ''
@@ -210,7 +210,7 @@
   id: pos_neg_return
   inputs:
     in: stock_feature.technical_indicator@stock_out
-  module: gquant_rapids_plugin.transform
+  module: greenflow_gquant_plugin.transform
   type: AddSignIndicatorNode
 - conf:
     columns:
@@ -225,5 +225,5 @@
   id: drop_col
   inputs:
     in: pos_neg_return.out
-  module: gquant_rapids_plugin.transform
+  module: greenflow_gquant_plugin.transform
   type: DropNode
diff --git a/gQuant/plugins/rapids_plugin/taskgraphs/xgboost_example/tree_inference.gq.yaml b/gQuant/plugins/gquant_plugin/taskgraphs/xgboost_example/tree_inference.gq.yaml
similarity index 62%
rename from gQuant/plugins/rapids_plugin/taskgraphs/xgboost_example/tree_inference.gq.yaml
rename to gQuant/plugins/gquant_plugin/taskgraphs/xgboost_example/tree_inference.gq.yaml
index be3d762b..2b733a1d 100644
--- a/gQuant/plugins/rapids_plugin/taskgraphs/xgboost_example/tree_inference.gq.yaml
+++ b/gQuant/plugins/gquant_plugin/taskgraphs/xgboost_example/tree_inference.gq.yaml
@@ -1,4 +1,6 @@
-- conf:
+- id: data_gen
+  type: ClassificationData
+  conf:
     class_sep: 1
     dtype: float64
     flip_y: 0.01
@@ -15,25 +17,25 @@
     scale: 1
     shift: 0
     shuffle: true
-  id: data_gen
   inputs: {}
-  module: gquant_rapids_plugin.dataloader
-  type: ClassificationData
-- conf: {}
-  id: ''
+  module: greenflow_gquant_plugin.dataloader
+- id: ''
+  type: Output_Collector
+  conf: {}
   inputs:
     in1: model_export.filename
     in2: test_data.out
     in3: test_infer.out
     in4: xgboost_infer.out
-  type: Output_Collector
-- conf:
+- id: data_generator
+  type: CompositeNode
+  conf:
     input:
-    - x2_to_sign.in
+      - x2_to_sign.in
     output:
-    - drop_x2_x3.out
+      - drop_x2_x3.out
     subnode_ids:
-    - data_gen
+      - data_gen
     subnodes_conf:
       data_gen:
         conf:
@@ -55,70 +57,75 @@
           shift: 0
           shuffle: true
     taskgraph: taskgraphs/xgboost_example/data_generator.gq.yaml
-  id: data_generator
   inputs:
     x2_to_sign@in: data_gen.dask_cudf_out
+- id: xgboost_model
   type: CompositeNode
-- conf:
+  conf:
     input:
-    - train_norm.df_in
-    - test_norm.df_in
+      - train_norm.df_in
+      - test_norm.df_in
     output:
-    - train_infer.out
-    - test_infer.out
-    - train_xgboost.model_out
-    - train_norm.df_out
-    - test_norm.df_out
+      - train_infer.out
+      - test_infer.out
+      - train_xgboost.model_out
+      - train_norm.df_out
+      - test_norm.df_out
     subnode_ids: []
     subnodes_conf: {}
     taskgraph: taskgraphs/xgboost_example/xgboost_model.gq.yaml
-  id: xgboost_model
   inputs:
-    test_norm@df_in: data_splitter.test
-    train_norm@df_in: data_splitter.train
-  type: CompositeNode
-- conf:
-    target: y
+    train_norm@df_in: persist.data_splitter@train
+    test_norm@df_in: persist.data_splitter@test
+- id: data_splitter
+  type: DataSplittingNode
+  conf:
+    target: 'y'
     train_size: 0.8
-  id: data_splitter
   inputs:
     in: data_generator.drop_x2_x3@out
-  module: gquant_rapids_plugin.ml
-  type: DataSplittingNode
-- conf:
+  module: greenflow_gquant_plugin.ml
+- id: model_export
+  type: XGBoostExportNode
+  conf:
     path: xgboost_model_file
-  id: model_export
   inputs:
     model_in: xgboost_model.train_xgboost@model_out
-  module: gquant_rapids_plugin.analysis
-  type: XGBoostExportNode
-- conf:
+  module: greenflow_gquant_plugin.analysis
+- id: tree_inference
+  type: ForestInferenceNode
+  conf:
     columns:
-    - y
+      - 'y'
     file: xgboost_model_file
     include: false
     prediction: predict
-  id: tree_inference
   inputs:
     data_in: xgboost_model.test_norm@df_out
     model_file: model_export.filename
-  module: gquant_rapids_plugin.ml
-  type: ForestInferenceNode
-- conf: {}
-  id: test_data
+  module: greenflow_gquant_plugin.ml
+- id: test_data
+  type: DaskComputeNode
+  conf: {}
   inputs:
     in: xgboost_model.test_norm@df_out
-  module: gquant_rapids_plugin.transform
+  module: greenflow_gquant_plugin.transform
+- id: test_infer
   type: DaskComputeNode
-- conf: {}
-  id: test_infer
+  conf: {}
   inputs:
     in: tree_inference.out
-  module: gquant_rapids_plugin.transform
+  module: greenflow_gquant_plugin.transform
+- id: xgboost_infer
   type: DaskComputeNode
-- conf: {}
-  id: xgboost_infer
+  conf: {}
   inputs:
     in: xgboost_model.test_infer@out
-  module: gquant_rapids_plugin.transform
-  type: DaskComputeNode
+  module: greenflow_gquant_plugin.transform
+- id: persist
+  type: PersistNode
+  conf: {}
+  inputs:
+    data_splitter@test: data_splitter.test
+    data_splitter@train: data_splitter.train
+  module: greenflow_gquant_plugin.transform
diff --git a/gQuant/plugins/rapids_plugin/taskgraphs/xgboost_example/xgboost_model.gq.yaml b/gQuant/plugins/gquant_plugin/taskgraphs/xgboost_example/xgboost_model.gq.yaml
similarity index 90%
rename from gQuant/plugins/rapids_plugin/taskgraphs/xgboost_example/xgboost_model.gq.yaml
rename to gQuant/plugins/gquant_plugin/taskgraphs/xgboost_example/xgboost_model.gq.yaml
index 07dcf4e0..af43844d 100644
--- a/gQuant/plugins/rapids_plugin/taskgraphs/xgboost_example/xgboost_model.gq.yaml
+++ b/gQuant/plugins/gquant_plugin/taskgraphs/xgboost_example/xgboost_model.gq.yaml
@@ -17,7 +17,7 @@
     shuffle: true
   id: data_gen
   inputs: {}
-  module: gquant_rapids_plugin.dataloader
+  module: greenflow_gquant_plugin.dataloader
   type: ClassificationData
 - conf: {}
   id: ''
@@ -63,7 +63,7 @@
   id: data_splitter
   inputs:
     in: data_generator.drop_x2_x3@out
-  module: gquant_rapids_plugin.ml
+  module: greenflow_gquant_plugin.ml
   type: DataSplittingNode
 - conf:
     columns:
@@ -76,7 +76,7 @@
   id: train_norm
   inputs:
     df_in: data_splitter.train
-  module: gquant_rapids_plugin.transform
+  module: greenflow_gquant_plugin.transform
   type: NormalizationNode
 - conf:
     include: true
@@ -84,7 +84,7 @@
   inputs:
     df_in: data_splitter.test
     norm_data_in: train_norm.norm_data_out
-  module: gquant_rapids_plugin.transform
+  module: greenflow_gquant_plugin.transform
   type: NormalizationNode
 - conf:
     columns:
@@ -113,7 +113,7 @@
   id: train_xgboost
   inputs:
     in: train_norm.df_out
-  module: gquant_rapids_plugin.ml
+  module: greenflow_gquant_plugin.ml
   type: TrainXGBoostNode
 - conf:
     prediction: predict
@@ -121,7 +121,7 @@
   inputs:
     data_in: train_norm.df_out
     model_in: train_xgboost.model_out
-  module: gquant_rapids_plugin.ml
+  module: greenflow_gquant_plugin.ml
   type: InferXGBoostNode
 - conf:
     prediction: predict
@@ -129,5 +129,5 @@
   inputs:
     data_in: test_norm.df_out
     model_in: train_xgboost.model_out
-  module: gquant_rapids_plugin.ml
+  module: greenflow_gquant_plugin.ml
   type: InferXGBoostNode
diff --git a/gQuant/plugins/rapids_plugin/taskgraphs/xgboost_example/xgboost_model_with_metrics.gq.yaml b/gQuant/plugins/gquant_plugin/taskgraphs/xgboost_example/xgboost_model_with_metrics.gq.yaml
similarity index 88%
rename from gQuant/plugins/rapids_plugin/taskgraphs/xgboost_example/xgboost_model_with_metrics.gq.yaml
rename to gQuant/plugins/gquant_plugin/taskgraphs/xgboost_example/xgboost_model_with_metrics.gq.yaml
index 5826b40b..47a7f816 100644
--- a/gQuant/plugins/rapids_plugin/taskgraphs/xgboost_example/xgboost_model_with_metrics.gq.yaml
+++ b/gQuant/plugins/gquant_plugin/taskgraphs/xgboost_example/xgboost_model_with_metrics.gq.yaml
@@ -17,7 +17,7 @@
     shuffle: true
   id: data_gen
   inputs: {}
-  module: gquant_rapids_plugin.dataloader
+  module: greenflow_gquant_plugin.dataloader
   type: ClassificationData
 - conf: {}
   id: ''
@@ -63,7 +63,7 @@
   id: data_splitter
   inputs:
     in: data_generator.drop_x2_x3@out
-  module: gquant_rapids_plugin.ml
+  module: greenflow_gquant_plugin.ml
   type: DataSplittingNode
 - conf:
     columns:
@@ -76,7 +76,7 @@
   id: train_norm
   inputs:
     df_in: data_splitter.train
-  module: gquant_rapids_plugin.transform
+  module: greenflow_gquant_plugin.transform
   type: NormalizationNode
 - conf:
     include: true
@@ -84,7 +84,7 @@
   inputs:
     df_in: data_splitter.test
     norm_data_in: train_norm.norm_data_out
-  module: gquant_rapids_plugin.transform
+  module: greenflow_gquant_plugin.transform
   type: NormalizationNode
 - conf:
     columns:
@@ -113,7 +113,7 @@
   id: train_xgboost
   inputs:
     in: train_norm.df_out
-  module: gquant_rapids_plugin.ml
+  module: greenflow_gquant_plugin.ml
   type: TrainXGBoostNode
 - conf:
     prediction: predict
@@ -121,7 +121,7 @@
   inputs:
     data_in: train_norm.df_out
     model_in: train_xgboost.model_out
-  module: gquant_rapids_plugin.ml
+  module: greenflow_gquant_plugin.ml
   type: InferXGBoostNode
 - conf:
     prediction: predict
@@ -129,7 +129,7 @@
   inputs:
     data_in: test_norm.df_out
     model_in: train_xgboost.model_out
-  module: gquant_rapids_plugin.ml
+  module: greenflow_gquant_plugin.ml
   type: InferXGBoostNode
 - conf:
     label: y
@@ -137,7 +137,7 @@
   id: train_roc
   inputs:
     in: train_infer.out
-  module: gquant_rapids_plugin.analysis
+  module: greenflow_gquant_plugin.analysis
   type: RocCurveNode
 - conf:
     label: y
@@ -145,5 +145,5 @@
   id: test_roc
   inputs:
     in: test_infer.out
-  module: gquant_rapids_plugin.analysis
+  module: greenflow_gquant_plugin.analysis
   type: RocCurveNode
diff --git a/gQuant/plugins/rapids_plugin/taskgraphs/xgboost_example/xgboost_stock.gq.yaml b/gQuant/plugins/gquant_plugin/taskgraphs/xgboost_example/xgboost_stock.gq.yaml
similarity index 95%
rename from gQuant/plugins/rapids_plugin/taskgraphs/xgboost_example/xgboost_stock.gq.yaml
rename to gQuant/plugins/gquant_plugin/taskgraphs/xgboost_example/xgboost_stock.gq.yaml
index c767614f..13038a80 100644
--- a/gQuant/plugins/rapids_plugin/taskgraphs/xgboost_example/xgboost_stock.gq.yaml
+++ b/gQuant/plugins/gquant_plugin/taskgraphs/xgboost_example/xgboost_stock.gq.yaml
@@ -3,7 +3,7 @@
     path: notebooks/many-small
   id: stock_data
   inputs: {}
-  module: gquant_rapids_plugin.dataloader
+  module: greenflow_gquant_plugin.dataloader
   type: CsvStockLoader
 - conf: {}
   id: ''
@@ -213,7 +213,7 @@
   id: pos_neg_return
   inputs:
     in: stock_feature.technical_indicator@stock_out
-  module: gquant_rapids_plugin.transform
+  module: greenflow_gquant_plugin.transform
   type: AddSignIndicatorNode
 - conf:
     columns:
@@ -228,7 +228,7 @@
   id: drop_col
   inputs:
     in: pos_neg_return.out
-  module: gquant_rapids_plugin.transform
+  module: greenflow_gquant_plugin.transform
   type: DropNode
 - conf:
     target: sign
@@ -236,7 +236,7 @@
   id: split_data
   inputs:
     in: drop_col.out
-  module: gquant_rapids_plugin.ml
+  module: greenflow_gquant_plugin.ml
   type: DataSplittingNode
 - conf:
     train_norm:
@@ -281,7 +281,7 @@
   id: train_roc
   inputs:
     in: xgboost_model.train_infer@out
-  module: gquant_rapids_plugin.analysis
+  module: greenflow_gquant_plugin.analysis
   type: RocCurveNode
 - conf:
     label: sign
@@ -289,12 +289,12 @@
   id: test_roc
   inputs:
     in: xgboost_model.test_infer@out
-  module: gquant_rapids_plugin.analysis
+  module: greenflow_gquant_plugin.analysis
   type: RocCurveNode
 - conf:
     type: gain
   id: feature_importance
   inputs:
     in: xgboost_model.train_xgboost@model_out
-  module: gquant_rapids_plugin.analysis
+  module: greenflow_gquant_plugin.analysis
   type: ImportanceCurveNode
diff --git a/gQuant/plugins/rapids_plugin/taskgraphs/xgboost_example/xgboost_stock_hpo.gq.yaml b/gQuant/plugins/gquant_plugin/taskgraphs/xgboost_example/xgboost_stock_hpo.gq.yaml
similarity index 97%
rename from gQuant/plugins/rapids_plugin/taskgraphs/xgboost_example/xgboost_stock_hpo.gq.yaml
rename to gQuant/plugins/gquant_plugin/taskgraphs/xgboost_example/xgboost_stock_hpo.gq.yaml
index 9fd66008..c3e4e3d9 100644
--- a/gQuant/plugins/rapids_plugin/taskgraphs/xgboost_example/xgboost_stock_hpo.gq.yaml
+++ b/gQuant/plugins/gquant_plugin/taskgraphs/xgboost_example/xgboost_stock_hpo.gq.yaml
@@ -146,14 +146,14 @@
     conf_in: xgboost_model.conf_out
     test_norm@df_in: split_data.test
     train_norm@df_in: split_data.train
-  module: gquant_rapids_plugin.ml
+  module: greenflow_gquant_plugin.ml
   type: GridRandomSearchNode
 - conf:
     file: notebooks/data/stock_price_hist.csv.gz
     path: notebooks/many-small
   id: stock_data
   inputs: {}
-  module: gquant_rapids_plugin.dataloader
+  module: greenflow_gquant_plugin.dataloader
   type: CsvStockLoader
 - conf:
     input:
@@ -355,7 +355,7 @@
   id: pos_neg_return
   inputs:
     in: stock_feature.technical_indicator@stock_out
-  module: gquant_rapids_plugin.transform
+  module: greenflow_gquant_plugin.transform
   type: AddSignIndicatorNode
 - conf:
     columns:
@@ -370,7 +370,7 @@
   id: drop_col
   inputs:
     in: pos_neg_return.out
-  module: gquant_rapids_plugin.transform
+  module: greenflow_gquant_plugin.transform
   type: DropNode
 - conf:
     target: sign
@@ -378,5 +378,5 @@
   id: split_data
   inputs:
     in: drop_col.out
-  module: gquant_rapids_plugin.ml
+  module: greenflow_gquant_plugin.ml
   type: DataSplittingNode
diff --git a/gQuant/plugins/rapids_plugin/taskgraphs/xgboost_trade.gq.yaml b/gQuant/plugins/gquant_plugin/taskgraphs/xgboost_trade.gq.yaml
similarity index 84%
rename from gQuant/plugins/rapids_plugin/taskgraphs/xgboost_trade.gq.yaml
rename to gQuant/plugins/gquant_plugin/taskgraphs/xgboost_trade.gq.yaml
index 4367589a..3e7ee46a 100644
--- a/gQuant/plugins/rapids_plugin/taskgraphs/xgboost_trade.gq.yaml
+++ b/gQuant/plugins/gquant_plugin/taskgraphs/xgboost_trade.gq.yaml
@@ -3,7 +3,7 @@
     path: notebooks/many-small
   id: stock_data
   inputs: {}
-  module: gquant_rapids_plugin.dataloader
+  module: greenflow_gquant_plugin.dataloader
   type: CsvStockLoader
 - conf:
     input:
@@ -40,25 +40,25 @@
   id: sort_after
   inputs:
     in: preprocess.drop_columns@out
-  module: gquant_rapids_plugin.transform
+  module: greenflow_gquant_plugin.transform
   type: SortNode
 - conf: {}
   id: backtest
   inputs:
     bardata_in: xgboost.stock_out
-  module: gquant_rapids_plugin.backtest
+  module: greenflow_gquant_plugin.backtest
   type: SimpleBackTestNode
 - conf: {}
   id: portfolio_opt_train
   inputs:
     stock_in: train_df.stock_out
-  module: gquant_rapids_plugin.portofolio
+  module: greenflow_gquant_plugin.portofolio
   type: SimpleAveragePortOpt
 - conf: {}
   id: sharpe_ratio_trn
   inputs:
     stock_in: portfolio_opt_train.stock_out
-  module: gquant_rapids_plugin.analysis
+  module: greenflow_gquant_plugin.analysis
   type: SharpeRatioNode
 - conf:
     label: training cumulative return
@@ -66,7 +66,7 @@
   id: cumulative_return_trn
   inputs:
     in: portfolio_opt_train.stock_out
-  module: gquant_rapids_plugin.analysis
+  module: greenflow_gquant_plugin.analysis
   type: CumReturnNode
 - conf: {}
   id: ''
@@ -101,7 +101,7 @@
   id: technical_indicator
   inputs:
     stock_in: sort_after.out
-  module: gquant_rapids_plugin.transform
+  module: greenflow_gquant_plugin.transform
   type: IndicatorNode
 - conf:
     no_feature:
@@ -125,7 +125,7 @@
   id: xgboost
   inputs:
     stock_in: technical_indicator.stock_out
-  module: gquant_rapids_plugin.strategy
+  module: greenflow_gquant_plugin.strategy
   type: XGBoostStrategyNode
 - conf:
     beg: 1985-01-01
@@ -133,7 +133,7 @@
   id: train_df
   inputs:
     stock_in: backtest.backtest_out
-  module: gquant_rapids_plugin.transform
+  module: greenflow_gquant_plugin.transform
   type: DatetimeFilterNode
 - conf:
     beg: 2010-01-01
@@ -141,19 +141,19 @@
   id: validation_df
   inputs:
     stock_in: backtest.backtest_out
-  module: gquant_rapids_plugin.transform
+  module: greenflow_gquant_plugin.transform
   type: DatetimeFilterNode
 - conf: {}
   id: portfolio_opt_validation
   inputs:
     stock_in: validation_df.stock_out
-  module: gquant_rapids_plugin.portofolio
+  module: greenflow_gquant_plugin.portofolio
   type: SimpleAveragePortOpt
 - conf: {}
   id: sharpe_ratio_val
   inputs:
     stock_in: portfolio_opt_validation.stock_out
-  module: gquant_rapids_plugin.analysis
+  module: greenflow_gquant_plugin.analysis
   type: SharpeRatioNode
 - conf:
     label: validation cumulative return
@@ -161,5 +161,5 @@
   id: cumulative_return_val
   inputs:
     in: portfolio_opt_validation.stock_out
-  module: gquant_rapids_plugin.analysis
+  module: greenflow_gquant_plugin.analysis
   type: CumReturnNode
diff --git a/gQuant/plugins/nemo_plugin/README.md b/gQuant/plugins/nemo_plugin/README.md
index 0388a422..0f3de14b 100644
--- a/gQuant/plugins/nemo_plugin/README.md
+++ b/gQuant/plugins/nemo_plugin/README.md
@@ -1,38 +1,38 @@
 ## NeMo Plugin Example
 
-This is an example to show how to write an external gQuant plugin. gQuant take advantage of the `entry point` inside the `setup.py` file to register the plugin. gQuant can discover all the plugins that has the entry point group name `gquant.plugin`. Check the `setup.py` file to see details.
+This is an example to show how to write an external greenflow plugin. greenflow take advantage of the `entry point` inside the `setup.py` file to register the plugin. greenflow can discover all the plugins that has the entry point group name `greenflow.plugin`. Check the `setup.py` file to see details.
 
 ### Create an new Python enviroment
 ```bash
 conda create -n test python=3.8
 ```
 
-### Install the gQuant 
-To install the gQuant graph computation library, run:
+### Install the greenflow 
+To install the greenflow graph computation library, run:
 ```bash
-pip install gquant
+pip install greenflow
 ```
-Or install `gquant` at the gquant directory:
+Or install `greenflow` at the greenflow directory:
 ```bash
 pip install .
 ```
 
-### Install the gquantlab JupyterLab plugin
-To install `gquantlab` JupyterLab plugin, make sure `nodejs` of version [12^14^15] is installed. E.g:
+### Install the greenflowlab JupyterLab plugin
+To install `greenflowlab` JupyterLab plugin, make sure `nodejs` of version [12^14^15] is installed. E.g:
 ```bash
 conda install -c conda-forge nodejs=12.4.0
 ```
-Then install the `gquantlab`:
+Then install the `greenflowlab`:
 ```bash
-pip install gquantlab
+pip install greenflowlab
 ```
-Or install `gquantlab` at the gquantlab directory:
+Or install `greenflowlab` at the greenflowlab directory:
 ```bash
 pip install .
 ```
 
 ### Install the external example plugin
-It depends on `gquant_rapids_plugin` plugin, install it first. Check the README file in `gquant_rapids_plugin` directory.
+It depends on `greenflow_gquant_plugin` plugin, install it first. Check the README file in `greenflow_gquant_plugin` directory.
 Next install `nemo` library. Currently, it is only compatible with old version of nemo.
 ```
 git clone -b v0.11.1 https://github.com/NVIDIA/NeMo.git
diff --git a/gQuant/plugins/nemo_plugin/gquant_nemo_plugin/__init__.py b/gQuant/plugins/nemo_plugin/greenflow_nemo_plugin/__init__.py
similarity index 83%
rename from gQuant/plugins/nemo_plugin/gquant_nemo_plugin/__init__.py
rename to gQuant/plugins/nemo_plugin/greenflow_nemo_plugin/__init__.py
index 7fe0c4ab..7fafd611 100644
--- a/gQuant/plugins/nemo_plugin/gquant_nemo_plugin/__init__.py
+++ b/gQuant/plugins/nemo_plugin/greenflow_nemo_plugin/__init__.py
@@ -1,11 +1,11 @@
 from .client import validation, display  # noqa: #401
-from gquant.dataframe_flow._node_flow import register_cleanup
+from greenflow.dataframe_flow._node_flow import register_cleanup
 
 
 def clean_nemo(ui_clean):
     """
     ui_clean is True if the client send
-    'clean' command to the gQuant backend
+    'clean' command to the greenflow backend
     """
     try:
         import nemo
diff --git a/gQuant/plugins/nemo_plugin/gquant_nemo_plugin/asr.py b/gQuant/plugins/nemo_plugin/greenflow_nemo_plugin/asr.py
similarity index 98%
rename from gQuant/plugins/nemo_plugin/gquant_nemo_plugin/asr.py
rename to gQuant/plugins/nemo_plugin/greenflow_nemo_plugin/asr.py
index 934d8ace..5d187f06 100644
--- a/gQuant/plugins/nemo_plugin/gquant_nemo_plugin/asr.py
+++ b/gQuant/plugins/nemo_plugin/greenflow_nemo_plugin/asr.py
@@ -1,4 +1,4 @@
-from gquant.dataframe_flow import Node
+from greenflow.dataframe_flow import Node
 from .nemoBaseNode import NeMoBase
 import nemo
 import nemo.collections.asr
diff --git a/gQuant/plugins/nemo_plugin/gquant_nemo_plugin/client.py b/gQuant/plugins/nemo_plugin/greenflow_nemo_plugin/client.py
similarity index 100%
rename from gQuant/plugins/nemo_plugin/gquant_nemo_plugin/client.py
rename to gQuant/plugins/nemo_plugin/greenflow_nemo_plugin/client.py
diff --git a/gQuant/plugins/nemo_plugin/gquant_nemo_plugin/common.py b/gQuant/plugins/nemo_plugin/greenflow_nemo_plugin/common.py
similarity index 97%
rename from gQuant/plugins/nemo_plugin/gquant_nemo_plugin/common.py
rename to gQuant/plugins/nemo_plugin/greenflow_nemo_plugin/common.py
index af43bf90..2ec7c452 100644
--- a/gQuant/plugins/nemo_plugin/gquant_nemo_plugin/common.py
+++ b/gQuant/plugins/nemo_plugin/greenflow_nemo_plugin/common.py
@@ -1,4 +1,4 @@
-from gquant.dataframe_flow import Node
+from greenflow.dataframe_flow import Node
 from .nemoBaseNode import NeMoBase
 import nemo
 import nemo.backends.pytorch.common
diff --git a/gQuant/plugins/nemo_plugin/gquant_nemo_plugin/cv.py b/gQuant/plugins/nemo_plugin/greenflow_nemo_plugin/cv.py
similarity index 97%
rename from gQuant/plugins/nemo_plugin/gquant_nemo_plugin/cv.py
rename to gQuant/plugins/nemo_plugin/greenflow_nemo_plugin/cv.py
index 140c2ce6..c9c23ad5 100644
--- a/gQuant/plugins/nemo_plugin/gquant_nemo_plugin/cv.py
+++ b/gQuant/plugins/nemo_plugin/greenflow_nemo_plugin/cv.py
@@ -1,4 +1,4 @@
-from gquant.dataframe_flow import Node
+from greenflow.dataframe_flow import Node
 from .nemoBaseNode import NeMoBase
 import nemo
 import nemo.collections.cv
diff --git a/gQuant/plugins/nemo_plugin/gquant_nemo_plugin/nemoBaseNode.py b/gQuant/plugins/nemo_plugin/greenflow_nemo_plugin/nemoBaseNode.py
similarity index 97%
rename from gQuant/plugins/nemo_plugin/gquant_nemo_plugin/nemoBaseNode.py
rename to gQuant/plugins/nemo_plugin/greenflow_nemo_plugin/nemoBaseNode.py
index 3db089b2..93ee5c81 100644
--- a/gQuant/plugins/nemo_plugin/gquant_nemo_plugin/nemoBaseNode.py
+++ b/gQuant/plugins/nemo_plugin/greenflow_nemo_plugin/nemoBaseNode.py
@@ -1,11 +1,11 @@
-from gquant.dataframe_flow.portsSpecSchema import ConfSchema, PortsSpecSchema
-from gquant.dataframe_flow.portsSpecSchema import NodePorts, MetaData
+from greenflow.dataframe_flow.portsSpecSchema import ConfSchema, PortsSpecSchema
+from greenflow.dataframe_flow.portsSpecSchema import NodePorts, MetaData
 
 from nemo.core.neural_types import NmTensor
 import inspect
-from gquant.plugin_nodes.util.json_util import type_map
+from greenflow.plugin_nodes.util.json_util import type_map
 from collections import OrderedDict
-from gquant.dataframe_flow.util import get_file_path
+from greenflow.dataframe_flow.util import get_file_path
 from nemo.backends.pytorch.nm import (DataLayerNM,
                                       TrainableNM, LossNM)
 import nemo
diff --git a/gQuant/plugins/nemo_plugin/gquant_nemo_plugin/nemo_util/__init__.py b/gQuant/plugins/nemo_plugin/greenflow_nemo_plugin/nemo_util/__init__.py
similarity index 100%
rename from gQuant/plugins/nemo_plugin/gquant_nemo_plugin/nemo_util/__init__.py
rename to gQuant/plugins/nemo_plugin/greenflow_nemo_plugin/nemo_util/__init__.py
diff --git a/gQuant/plugins/nemo_plugin/gquant_nemo_plugin/nemo_util/inferNemo.py b/gQuant/plugins/nemo_plugin/greenflow_nemo_plugin/nemo_util/inferNemo.py
similarity index 96%
rename from gQuant/plugins/nemo_plugin/gquant_nemo_plugin/nemo_util/inferNemo.py
rename to gQuant/plugins/nemo_plugin/greenflow_nemo_plugin/nemo_util/inferNemo.py
index c7c801bb..bc581a7b 100644
--- a/gQuant/plugins/nemo_plugin/gquant_nemo_plugin/nemo_util/inferNemo.py
+++ b/gQuant/plugins/nemo_plugin/greenflow_nemo_plugin/nemo_util/inferNemo.py
@@ -1,8 +1,8 @@
 from pathlib import Path
 
-from gquant.dataframe_flow import Node
-from gquant.dataframe_flow.portsSpecSchema import ConfSchema, PortsSpecSchema
-from gquant.dataframe_flow.portsSpecSchema import NodePorts, MetaData
+from greenflow.dataframe_flow import Node
+from greenflow.dataframe_flow.portsSpecSchema import ConfSchema, PortsSpecSchema
+from greenflow.dataframe_flow.portsSpecSchema import NodePorts, MetaData
 
 from nemo.core.neural_types import NmTensor
 import nemo
diff --git a/gQuant/plugins/nemo_plugin/gquant_nemo_plugin/nemo_util/nemoHPO.py b/gQuant/plugins/nemo_plugin/greenflow_nemo_plugin/nemo_util/nemoHPO.py
similarity index 96%
rename from gQuant/plugins/nemo_plugin/gquant_nemo_plugin/nemo_util/nemoHPO.py
rename to gQuant/plugins/nemo_plugin/greenflow_nemo_plugin/nemo_util/nemoHPO.py
index 1c1149fa..f9471894 100644
--- a/gQuant/plugins/nemo_plugin/gquant_nemo_plugin/nemo_util/nemoHPO.py
+++ b/gQuant/plugins/nemo_plugin/greenflow_nemo_plugin/nemo_util/nemoHPO.py
@@ -1,12 +1,12 @@
-from gquant_rapids_plugin.ml import GridRandomSearchNode
-from gquant.plugin_nodes.util.contextCompositeNode import ContextCompositeNode # noqa #E402
-from gquant.dataframe_flow.portsSpecSchema import (ConfSchema, # noqa #E402
+from greenflow_gquant_plugin.ml import GridRandomSearchNode
+from greenflow.plugin_nodes.util.contextCompositeNode import ContextCompositeNode # noqa #E402
+from greenflow.dataframe_flow.portsSpecSchema import (ConfSchema, # noqa #E402
                                                    NodePorts)
-from gquant.dataframe_flow import TaskGraph # noqa #E402
-from gquant.dataframe_flow import Node # noqa #E402
-from gquant.dataframe_flow.util import get_file_path # noqa #E402
-from gquant.dataframe_flow.cache import CACHE_SCHEMA # noqa #E402
-from gquant.dataframe_flow.taskSpecSchema import TaskSpecSchema # noqa #E402
+from greenflow.dataframe_flow import TaskGraph # noqa #E402
+from greenflow.dataframe_flow import Node # noqa #E402
+from greenflow.dataframe_flow.util import get_file_path # noqa #E402
+from greenflow.dataframe_flow.cache import CACHE_SCHEMA # noqa #E402
+from greenflow.dataframe_flow.taskSpecSchema import TaskSpecSchema # noqa #E402
 import cudf # noqa #E402
 import uuid # noqa #E402
 import pandas # noqa #E402
diff --git a/gQuant/plugins/nemo_plugin/gquant_nemo_plugin/nemo_util/trainNemo.py b/gQuant/plugins/nemo_plugin/greenflow_nemo_plugin/nemo_util/trainNemo.py
similarity index 99%
rename from gQuant/plugins/nemo_plugin/gquant_nemo_plugin/nemo_util/trainNemo.py
rename to gQuant/plugins/nemo_plugin/greenflow_nemo_plugin/nemo_util/trainNemo.py
index 47f788b0..0468a6d6 100644
--- a/gQuant/plugins/nemo_plugin/gquant_nemo_plugin/nemo_util/trainNemo.py
+++ b/gQuant/plugins/nemo_plugin/greenflow_nemo_plugin/nemo_util/trainNemo.py
@@ -1,6 +1,6 @@
-from gquant.dataframe_flow import Node
-from gquant.dataframe_flow.portsSpecSchema import ConfSchema, PortsSpecSchema
-from gquant.dataframe_flow.portsSpecSchema import NodePorts,  MetaData
+from greenflow.dataframe_flow import Node
+from greenflow.dataframe_flow.portsSpecSchema import ConfSchema, PortsSpecSchema
+from greenflow.dataframe_flow.portsSpecSchema import NodePorts,  MetaData
 
 from nemo.core.neural_types import NmTensor
 import nemo
diff --git a/gQuant/plugins/nemo_plugin/gquant_nemo_plugin/nlp.py b/gQuant/plugins/nemo_plugin/greenflow_nemo_plugin/nlp.py
similarity index 99%
rename from gQuant/plugins/nemo_plugin/gquant_nemo_plugin/nlp.py
rename to gQuant/plugins/nemo_plugin/greenflow_nemo_plugin/nlp.py
index 57aa9367..787896b0 100644
--- a/gQuant/plugins/nemo_plugin/gquant_nemo_plugin/nlp.py
+++ b/gQuant/plugins/nemo_plugin/greenflow_nemo_plugin/nlp.py
@@ -1,4 +1,4 @@
-from gquant.dataframe_flow import Node
+from greenflow.dataframe_flow import Node
 from .nemoBaseNode import NeMoBase
 import nemo
 import nemo.collections.nlp.nm
diff --git a/gQuant/plugins/nemo_plugin/gquant_nemo_plugin/simple_gan.py b/gQuant/plugins/nemo_plugin/greenflow_nemo_plugin/simple_gan.py
similarity index 96%
rename from gQuant/plugins/nemo_plugin/gquant_nemo_plugin/simple_gan.py
rename to gQuant/plugins/nemo_plugin/greenflow_nemo_plugin/simple_gan.py
index 42373f86..b7d4fd2f 100644
--- a/gQuant/plugins/nemo_plugin/gquant_nemo_plugin/simple_gan.py
+++ b/gQuant/plugins/nemo_plugin/greenflow_nemo_plugin/simple_gan.py
@@ -1,4 +1,4 @@
-from gquant.dataframe_flow import Node
+from greenflow.dataframe_flow import Node
 from .nemoBaseNode import NeMoBase
 import nemo
 import nemo.collections.simple_gan
diff --git a/gQuant/plugins/nemo_plugin/gquant_nemo_plugin/tts.py b/gQuant/plugins/nemo_plugin/greenflow_nemo_plugin/tts.py
similarity index 98%
rename from gQuant/plugins/nemo_plugin/gquant_nemo_plugin/tts.py
rename to gQuant/plugins/nemo_plugin/greenflow_nemo_plugin/tts.py
index 3f7e2689..185f33fc 100644
--- a/gQuant/plugins/nemo_plugin/gquant_nemo_plugin/tts.py
+++ b/gQuant/plugins/nemo_plugin/greenflow_nemo_plugin/tts.py
@@ -1,4 +1,4 @@
-from gquant.dataframe_flow import Node
+from greenflow.dataframe_flow import Node
 from .nemoBaseNode import NeMoBase
 import nemo
 import nemo.collections.tts
diff --git a/gQuant/plugins/nemo_plugin/gquant_nemo_plugin/tutorials.py b/gQuant/plugins/nemo_plugin/greenflow_nemo_plugin/tutorials.py
similarity index 97%
rename from gQuant/plugins/nemo_plugin/gquant_nemo_plugin/tutorials.py
rename to gQuant/plugins/nemo_plugin/greenflow_nemo_plugin/tutorials.py
index bc76198d..2ecd7df0 100644
--- a/gQuant/plugins/nemo_plugin/gquant_nemo_plugin/tutorials.py
+++ b/gQuant/plugins/nemo_plugin/greenflow_nemo_plugin/tutorials.py
@@ -1,4 +1,4 @@
-from gquant.dataframe_flow import Node
+from greenflow.dataframe_flow import Node
 from .nemoBaseNode import NeMoBase
 import nemo
 import nemo.backends.pytorch.tutorials
diff --git a/gQuant/plugins/nemo_plugin/notebooks/10_nemo_chatbot.ipynb b/gQuant/plugins/nemo_plugin/notebooks/10_nemo_chatbot.ipynb
index 5e4df236..3b1f0788 100644
--- a/gQuant/plugins/nemo_plugin/notebooks/10_nemo_chatbot.ipynb
+++ b/gQuant/plugins/nemo_plugin/notebooks/10_nemo_chatbot.ipynb
@@ -8,21 +8,21 @@
     }
    },
    "source": [
-    "# gQuant NeMo Chatbot Example\n",
+    "# greenflow NeMo Chatbot Example\n",
     "\n",
-    "In the previous example notebooks, we use gQuant to perform ETL, backtesting, machine learning, hyperparameter tuning tasks. As we  see, gQuant can be extended easily for other types of workflow accelerations as long as the computation can be organized as graph computations. \n",
+    "In the previous example notebooks, we use greenflow to perform ETL, backtesting, machine learning, hyperparameter tuning tasks. As we  see, greenflow can be extended easily for other types of workflow accelerations as long as the computation can be organized as graph computations. \n",
     "\n",
-    "[NeMo](https://github.com/NVIDIA/NeMo) is a toolkit for creating Conversational AI applications. Most importantly, NeMo abstracts the neural network into neural modules with input and output ports similar to gQuant nodes. So the neural network computation is organized as a computation graph made of neural modules. Because of the similarity between gQuant node and neural modules, the neural module can be easily wrapped up into a gQuant node. NeMo is integrated into the gQuant so the neural modules can be wired, trained, inferred visually with the help of gQuant UI. \n",
+    "[NeMo](https://github.com/NVIDIA/NeMo) is a toolkit for creating Conversational AI applications. Most importantly, NeMo abstracts the neural network into neural modules with input and output ports similar to greenflow nodes. So the neural network computation is organized as a computation graph made of neural modules. Because of the similarity between greenflow node and neural modules, the neural module can be easily wrapped up into a greenflow node. NeMo is integrated into the greenflow so the neural modules can be wired, trained, inferred visually with the help of greenflow UI. \n",
     "\n",
-    "In this tutorial, we will show how to use gQuant to train an RNN model for chatbot applications. \n",
+    "In this tutorial, we will show how to use greenflow to train an RNN model for chatbot applications. \n",
     "\n",
-    "## NeMo gQuant integration\n",
+    "## NeMo greenflow integration\n",
     "\n",
-    "Convert the NeMo neural module to gQuant node is easy. gQuant provides a base NeMo node that can be used for inheritance for neural modules. The child class just need to pass in the class name of the Neural Module in the constructor. Here is one example that converts the EncoderRNN Neural Module to gQuant node.\n",
+    "Convert the NeMo neural module to greenflow node is easy. greenflow provides a base NeMo node that can be used for inheritance for neural modules. The child class just need to pass in the class name of the Neural Module in the constructor. Here is one example that converts the EncoderRNN Neural Module to greenflow node.\n",
     "\n",
     "```python\n",
-    "from gquant.dataframe_flow import Node\n",
-    "# within <>/modules/nemo_gquant_modules\n",
+    "from greenflow.dataframe_flow import Node\n",
+    "# within <>/modules/nemo_greenflow_modules\n",
     "from .nemoBaseNode import NeMoBase\n",
     "import nemo\n",
     "import nemo.backends.pytorch.tutorials\n",
@@ -35,12 +35,12 @@
     "\n",
     "`NeMoBase` inspects the `EncoderRNN` constructor signature and converts it as node configuration JSON schema. It automatically infers the types for each of the parameters.  If the auto type inference has an error, it can be fixed by modifying the `self.fix_type` dictionary in the constructor. The keys of the dictionary are the parameter names while the values are the type strings.\n",
     "\n",
-    "In the `util` directory, we provide a script `auto_gen.py` that automatically converts the NeMo Neural Modules into gQuant nodes. Currently, it converts 90% of the Neural Modules. The converted Python files are exported to the `modules` directory. gQuant by design can load any externally defined nodes by defining the node modules in the `gquantrc` file.  Here is an example `gquantrc` file that loads the converted NeMo neural module files:\n",
+    "In the `util` directory, we provide a script `auto_gen.py` that automatically converts the NeMo Neural Modules into greenflow nodes. Currently, it converts 90% of the Neural Modules. The converted Python files are exported to the `modules` directory. greenflow by design can load any externally defined nodes by defining the node modules in the `greenflowrc` file.  Here is an example `greenflowrc` file that loads the converted NeMo neural module files:\n",
     "\n",
     "```ini\n",
-    "nemo_modules= %(MODULEPATH)s/nemo_gquant_modules\n",
+    "nemo_modules= %(MODULEPATH)s/nemo_greenflow_modules\n",
     "```\n",
-    "Note, gQuant can automatically interpret the `.` in the module names to form hierarchical menus.\n",
+    "Note, greenflow can automatically interpret the `.` in the module names to form hierarchical menus.\n",
     "\n",
     "\n",
     "## Data Preparation\n",
@@ -76,7 +76,7 @@
     "mv movie_lines.txt movie_data.txt\n",
     "```\n",
     "\n",
-    "Let's load the necessary NeMo module and gQuant module, and setup the Neural Module Factory environment. "
+    "Let's load the necessary NeMo module and greenflow module, and setup the Neural Module Factory environment. "
    ]
   },
   {
@@ -89,7 +89,7 @@
     "import nemo\n",
     "nemo.core.NeuralModuleFactory()\n",
     "import json\n",
-    "from gquant.dataframe_flow import TaskGraph"
+    "from greenflow.dataframe_flow import TaskGraph"
    ]
   },
   {
@@ -142,7 +142,7 @@
    "source": [
     "## Chatbot Model\n",
     "\n",
-    "The chat bot model is taken from the NeMo tutorial example. It consists of a Data layer, a RNN encoder, RNN decoder for Cross Entropy loss and Greedy RNN decoder for text inference. Load the TaskGraph into gQuant:"
+    "The chat bot model is taken from the NeMo tutorial example. It consists of a Data layer, a RNN encoder, RNN decoder for Cross Entropy loss and Greedy RNN decoder for text inference. Load the TaskGraph into greenflow:"
    ]
   },
   {
@@ -166,7 +166,7 @@
        "version_minor": 0
       },
       "text/plain": [
-       "GQuantWidget(sub=HBox(), value=[OrderedDict([('id', 'data'), ('type', 'DialogDataLayerNode'), ('conf', {'batch…"
+       "GreenflowWidget(sub=HBox(), value=[OrderedDict([('id', 'data'), ('type', 'DialogDataLayerNode'), ('conf', {'batch…"
       ]
      },
      "metadata": {},
@@ -182,7 +182,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "You may notice that each trainable neural module has an `in_nm` input port that takes a neural module as input. This input port is mainly used for sharing weights between neural modules. The gQuant Neural Module wrapper supports all 3 weight sharing mechanisms mentioned in the [NeMo documents](https://docs.nvidia.com/deeplearning/nemo/user-guide/docs/en/v0.11.0/tutorials/weightsharing.html): Module Reuse, Weight Copying, and Weight Tying. Click on the trainable neural module node above, you will see that the weight sharing method can be configured easily in a dropdown list. In the above example, the encoder and decoder modules for thes evaluation dataset reuse the encoder and decoder modules for training. The greedy decoder shares the weights with the decoder by tying the weights. \n",
+    "You may notice that each trainable neural module has an `in_nm` input port that takes a neural module as input. This input port is mainly used for sharing weights between neural modules. The greenflow Neural Module wrapper supports all 3 weight sharing mechanisms mentioned in the [NeMo documents](https://docs.nvidia.com/deeplearning/nemo/user-guide/docs/en/v0.11.0/tutorials/weightsharing.html): Module Reuse, Weight Copying, and Weight Tying. Click on the trainable neural module node above, you will see that the weight sharing method can be configured easily in a dropdown list. In the above example, the encoder and decoder modules for thes evaluation dataset reuse the encoder and decoder modules for training. The greedy decoder shares the weights with the decoder by tying the weights. \n",
     "\n",
     "All the neural modules have an `out_nm` port that outputs the neural module instance itself for other nodes to consume. For example, it can be used for weight sharing. Or, it can be used to extract other important information from the neural module. Later in the inference stage, we use the outputted data layer neural module to extract the text dictionary information. \n",
     "\n",
@@ -190,7 +190,7 @@
     "\n",
     "Click on the `run` button to see the training and inference of this chatbot model are in action. During the run the log console has informative information from the Ray Tune library. Click one the 'list' button to see the log or you can go to \"View -> Show Log Console\". It will train 3 epochs by default. If better accuracy is needed, try to increase the number of epochs in the `NeMo Train Node` and run it again.\n",
     "\n",
-    "The chatbot graph is a little complicated. We can wrap the whole computation graph into a `Context Composite Node` as explained in the `08_gquant_machine_learning` notebook. The number of layers for encoders and decoders and the drop out rate parameters are exposed as context parameters for this context composite node. We will tune these two parameters later. \n",
+    "The chatbot graph is a little complicated. We can wrap the whole computation graph into a `Context Composite Node` as explained in the `08_greenflow_machine_learning` notebook. The number of layers for encoders and decoders and the drop out rate parameters are exposed as context parameters for this context composite node. We will tune these two parameters later. \n",
     "\n",
     "Load this simplified graph:"
    ]
@@ -212,7 +212,7 @@
        "version_minor": 0
       },
       "text/plain": [
-       "GQuantWidget(sub=HBox(), value=[OrderedDict([('id', 'rnn_train'), ('type', 'ContextCompositeNode'), ('conf', {…"
+       "GreenflowWidget(sub=HBox(), value=[OrderedDict([('id', 'rnn_train'), ('type', 'ContextCompositeNode'), ('conf', {…"
       ]
      },
      "metadata": {},
@@ -1111,7 +1111,7 @@
    "source": [
     "## Chatbot model Hypyparameter Tuning\n",
     "\n",
-    "If you haven't followed the `09_gquant_machine_hpo` notebook, it is recommended to go back and check it. It explains in detail how to use gQuant to perform hyperparameter tuning. We will use it to tune the hyperparameters for the chatbot model.\n",
+    "If you haven't followed the `09_greenflow_machine_hpo` notebook, it is recommended to go back and check it. It explains in detail how to use greenflow to perform hyperparameter tuning. We will use it to tune the hyperparameters for the chatbot model.\n",
     "\n",
     "Since the context composite node exposes the `number of layers` and `drop-out rate` as context parameters, the `hpo` `Nemo Hyper Tune Node` will do a grid search of the `number of layers` parameter and random uniform search on the `drop-out` parameter. The eval loss will be used as the hyperparameter tuning metric. \n",
     "\n",
@@ -1136,7 +1136,7 @@
        "version_minor": 0
       },
       "text/plain": [
-       "GQuantWidget(sub=HBox(), value=[OrderedDict([('id', 'rnn_train'), ('type', 'ContextCompositeNode'), ('conf', {…"
+       "GreenflowWidget(sub=HBox(), value=[OrderedDict([('id', 'rnn_train'), ('type', 'ContextCompositeNode'), ('conf', {…"
       ]
      },
      "metadata": {},
@@ -1174,7 +1174,7 @@
        "version_minor": 0
       },
       "text/plain": [
-       "GQuantWidget(sub=HBox(), value=[OrderedDict([('id', 'rnn_train'), ('type', 'ContextCompositeNode'), ('conf', {…"
+       "GreenflowWidget(sub=HBox(), value=[OrderedDict([('id', 'rnn_train'), ('type', 'ContextCompositeNode'), ('conf', {…"
       ]
      },
      "metadata": {},
diff --git a/gQuant/plugins/nemo_plugin/setup.py b/gQuant/plugins/nemo_plugin/setup.py
index 291752a9..bf36a940 100644
--- a/gQuant/plugins/nemo_plugin/setup.py
+++ b/gQuant/plugins/nemo_plugin/setup.py
@@ -1,18 +1,18 @@
 from setuptools import setup, find_packages
 
 setup(
-    name='gquant_nemo_plugin',
-    packages=find_packages(include=['gquant_nemo_plugin',
-                                    'gquant_nemo_plugin.nemo_util']),
+    name='greenflow_nemo_plugin',
+    packages=find_packages(include=['greenflow_nemo_plugin',
+                                    'greenflow_nemo_plugin.nemo_util']),
     entry_points={
-        'gquant.plugin':
-        ['gquant_nemo_plugin = gquant_nemo_plugin',
-         'gquant_nemo_plugin.asr = gquant_nemo_plugin.asr',
-         'gquant_nemo_plugin.cv = gquant_nemo_plugin.cv',
-         'gquant_nemo_plugin.nlp = gquant_nemo_plugin.nlp',
-         'gquant_nemo_plugin.util = gquant_nemo_plugin.nemo_util',
-         'gquant_nemo_plugin.gan = gquant_nemo_plugin.simple_gan',
-         'gquant_nemo_plugin.tts = gquant_nemo_plugin.tts',
-         'gquant_nemo_plugin.tutorials = gquant_nemo_plugin.tutorials'],
+        'greenflow.plugin':
+        ['greenflow_nemo_plugin = greenflow_nemo_plugin',
+         'greenflow_nemo_plugin.asr = greenflow_nemo_plugin.asr',
+         'greenflow_nemo_plugin.cv = greenflow_nemo_plugin.cv',
+         'greenflow_nemo_plugin.nlp = greenflow_nemo_plugin.nlp',
+         'greenflow_nemo_plugin.util = greenflow_nemo_plugin.nemo_util',
+         'greenflow_nemo_plugin.gan = greenflow_nemo_plugin.simple_gan',
+         'greenflow_nemo_plugin.tts = greenflow_nemo_plugin.tts',
+         'greenflow_nemo_plugin.tutorials = greenflow_nemo_plugin.tutorials'],
     }
 )
diff --git a/gQuant/plugins/nemo_plugin/taskgraphs/chatbot_example.gq.yaml b/gQuant/plugins/nemo_plugin/taskgraphs/chatbot_example.gq.yaml
index e9f2ff27..5e5fc536 100644
--- a/gQuant/plugins/nemo_plugin/taskgraphs/chatbot_example.gq.yaml
+++ b/gQuant/plugins/nemo_plugin/taskgraphs/chatbot_example.gq.yaml
@@ -6,7 +6,7 @@
     datafile: notebooks/movie_data.txt
     min_count: 3
   inputs: {}
-  module: gquant_nemo_plugin.tutorials
+  module: greenflow_nemo_plugin.tutorials
 - id: encoder
   type: EncoderRNNNode
   conf:
@@ -18,7 +18,7 @@
   inputs:
     input_lengths: data.src_lengths
     input_seq: data.src
-  module: gquant_nemo_plugin.tutorials
+  module: greenflow_nemo_plugin.tutorials
 - id: greedy_decoder
   type: GreedyLuongAttnDecoderRNNNode
   conf:
@@ -31,7 +31,7 @@
   inputs:
     encoder_outputs: encoder_eval.outputs
     in_nm: decoder.out_nm
-  module: gquant_nemo_plugin.tutorials
+  module: greenflow_nemo_plugin.tutorials
 - id: decoder
   type: LuongAttnDecoderRNNNode
   conf:
@@ -44,7 +44,7 @@
     targets: data.tgt
     encoder_outputs: encoder.outputs
     max_target_len: data.max_tgt_lengths
-  module: gquant_nemo_plugin.tutorials
+  module: greenflow_nemo_plugin.tutorials
 - id: loss
   type: MaskedXEntropyLossNode
   conf: {}
@@ -52,7 +52,7 @@
     predictions: decoder.outputs
     target: data.tgt
     mask: data.mask
-  module: gquant_nemo_plugin.tutorials
+  module: greenflow_nemo_plugin.tutorials
 - id: ""
   type: Output_Collector
   conf: {}
@@ -100,7 +100,7 @@
   inputs:
     loss@loss: loss.loss
     eval_loss@loss: eval_loss.loss
-  module: gquant_nemo_plugin.util
+  module: greenflow_nemo_plugin.util
 - id: inference
   type: NemoInferNode
   conf:
@@ -121,7 +121,7 @@
     eval_data@src: eval_data.src
     greedy_decoder@outputs: greedy_decoder.outputs
     eval_loss@loss: eval_loss.loss
-  module: gquant_nemo_plugin.util
+  module: greenflow_nemo_plugin.util
 - id: eval_data
   type: DialogDataLayerNode
   conf:
@@ -130,7 +130,7 @@
     datafile: notebooks/movie_data.txt
     min_count: 3
   inputs: {}
-  module: gquant_nemo_plugin.tutorials
+  module: greenflow_nemo_plugin.tutorials
 - id: encoder_eval
   type: EncoderRNNNode
   conf:
@@ -144,7 +144,7 @@
     input_seq: eval_data.src
     input_lengths: eval_data.src_lengths
     in_nm: encoder.out_nm
-  module: gquant_nemo_plugin.tutorials
+  module: greenflow_nemo_plugin.tutorials
 - id: decoder_eval
   type: LuongAttnDecoderRNNNode
   conf:
@@ -159,7 +159,7 @@
     encoder_outputs: encoder_eval.outputs
     max_target_len: eval_data.max_tgt_lengths
     in_nm: decoder.out_nm
-  module: gquant_nemo_plugin.tutorials
+  module: greenflow_nemo_plugin.tutorials
 - id: eval_loss
   type: MaskedXEntropyLossNode
   conf: {}
@@ -167,4 +167,4 @@
     predictions: decoder_eval.outputs
     target: eval_data.tgt
     mask: eval_data.mask
-  module: gquant_nemo_plugin.tutorials
+  module: greenflow_nemo_plugin.tutorials
diff --git a/gQuant/plugins/nemo_plugin/taskgraphs/chatbot_hpo.gq.yaml b/gQuant/plugins/nemo_plugin/taskgraphs/chatbot_hpo.gq.yaml
index a30f0d9e..6a00d2fe 100644
--- a/gQuant/plugins/nemo_plugin/taskgraphs/chatbot_hpo.gq.yaml
+++ b/gQuant/plugins/nemo_plugin/taskgraphs/chatbot_hpo.gq.yaml
@@ -85,4 +85,4 @@
     taskgraph: taskgraphs/nemo_examples/chatbot_example.gq.yaml
   inputs:
     conf_in: rnn_train.conf_out
-  module: gquant_nemo_plugin.util
+  module: greenflow_nemo_plugin.util
diff --git a/gQuant/plugins/nemo_plugin/taskgraphs/chatbot_large_hpo_search.gq.yaml b/gQuant/plugins/nemo_plugin/taskgraphs/chatbot_large_hpo_search.gq.yaml
index 0c340378..b60f3161 100644
--- a/gQuant/plugins/nemo_plugin/taskgraphs/chatbot_large_hpo_search.gq.yaml
+++ b/gQuant/plugins/nemo_plugin/taskgraphs/chatbot_large_hpo_search.gq.yaml
@@ -112,4 +112,4 @@
     taskgraph: taskgraphs/nemo_examples/chatbot_example.gq.yaml
   inputs:
     conf_in: rnn_train.conf_out
-  module: gquant_nemo_plugin.util
+  module: greenflow_nemo_plugin.util
diff --git a/gQuant/plugins/nemo_plugin/taskgraphs/nemo_train_composite.gq.yaml b/gQuant/plugins/nemo_plugin/taskgraphs/nemo_train_composite.gq.yaml
index 0c3df7e8..415c50f1 100644
--- a/gQuant/plugins/nemo_plugin/taskgraphs/nemo_train_composite.gq.yaml
+++ b/gQuant/plugins/nemo_plugin/taskgraphs/nemo_train_composite.gq.yaml
@@ -9,7 +9,7 @@
     name: data
   inputs: {}
   module: nemo_modules
-module: gquant_nemo_plugin.tutorials
+module: greenflow_nemo_plugin.tutorials
 - id: train
   type: NemoTrainNode
   conf:
@@ -45,7 +45,7 @@ module: gquant_nemo_plugin.tutorials
       name: sgd
   inputs:
     network@loss@loss: network.loss@loss
-  module: gquant_nemo_plugin.util
+  module: greenflow_nemo_plugin.util
 - id: ""
   type: Output_Collector
   conf: {}
@@ -80,4 +80,4 @@ module: gquant_nemo_plugin.tutorials
   inputs:
     net@x: data.x
     loss@target: data.y
-  module: gquant_nemo_plugin.util
+  module: greenflow_nemo_plugin.util
diff --git a/gQuant/plugins/nemo_plugin/taskgraphs/nemo_train_infer.gq.yaml b/gQuant/plugins/nemo_plugin/taskgraphs/nemo_train_infer.gq.yaml
index c7367a88..35fabcc0 100644
--- a/gQuant/plugins/nemo_plugin/taskgraphs/nemo_train_infer.gq.yaml
+++ b/gQuant/plugins/nemo_plugin/taskgraphs/nemo_train_infer.gq.yaml
@@ -8,7 +8,7 @@
     x_hi: 4
     name: data
   inputs: {}
-  module: gquant_nemo_plugin.tutorials
+  module: greenflow_nemo_plugin.tutorials
 - id: net
   type: TaylorNetNode
   conf:
@@ -16,7 +16,7 @@
     name: net
   inputs:
     x: data.x
-  module: gquant_nemo_plugin.tutorials
+  module: greenflow_nemo_plugin.tutorials
 - id: loss
   type: MSELossNode
   conf:
@@ -24,7 +24,7 @@
   inputs:
     predictions: net.y_pred
     target: data.y
-  module: gquant_nemo_plugin.tutorials
+  module: greenflow_nemo_plugin.tutorials
 - id: train
   type: NemoTrainNode
   conf:
@@ -58,7 +58,7 @@
       name: sgd
   inputs:
     loss@loss: loss.loss
-  module: gquant_nemo_plugin.util
+  module: greenflow_nemo_plugin.util
 - id: ""
   type: Output_Collector
   conf: {}
@@ -80,4 +80,4 @@
   inputs:
     net@y_pred: net.y_pred
     log_dir: train.checkpoint_dir
-  module: gquant_nemo_plugin.util
+  module: greenflow_nemo_plugin.util
diff --git a/gQuant/plugins/rapids_plugin/setup.py b/gQuant/plugins/rapids_plugin/setup.py
deleted file mode 100644
index d8eba41b..00000000
--- a/gQuant/plugins/rapids_plugin/setup.py
+++ /dev/null
@@ -1,28 +0,0 @@
-from setuptools import setup, find_packages
-
-setup(
-    name='gquant_rapids_plugin',
-    install_requires=[
-        "bqplot", "tables", "ray[tune]"
-    ],
-    packages=find_packages(include=['gquant_rapids_plugin',
-                                    'gquant_rapids_plugin.analysis',
-                                    'gquant_rapids_plugin.backtest',
-                                    'gquant_rapids_plugin.dataloader',
-                                    'gquant_rapids_plugin.ml',
-                                    'gquant_rapids_plugin.portofolio',
-                                    'gquant_rapids_plugin.strategy',
-                                    'gquant_rapids_plugin.cuindicator',
-                                    'gquant_rapids_plugin.transform']),
-    entry_points={
-        'gquant.plugin':
-        ['gquant_rapids_plugin = gquant_rapids_plugin',
-         'gquant_rapids_plugin.analysis = gquant_rapids_plugin.analysis',
-         'gquant_rapids_plugin.backtest = gquant_rapids_plugin.backtest',
-         'gquant_rapids_plugin.dataloader = gquant_rapids_plugin.dataloader',
-         'gquant_rapids_plugin.ml = gquant_rapids_plugin.ml',
-         'gquant_rapids_plugin.portofolio = gquant_rapids_plugin.portofolio',
-         'gquant_rapids_plugin.strategy = gquant_rapids_plugin.strategy',
-         'gquant_rapids_plugin.transform = gquant_rapids_plugin.transform'],
-    }
-)
diff --git a/gQuant/plugins/simple_example/README.md b/gQuant/plugins/simple_example/README.md
index c4e7c791..4352feb3 100644
--- a/gQuant/plugins/simple_example/README.md
+++ b/gQuant/plugins/simple_example/README.md
@@ -1,32 +1,32 @@
 ## Simple External Plugin Example
 
-This is a simple example to show how to write an external gQuant plugin. gQuant take advantage of the `entry point` inside the `setup.py` file to register the plugin. gQuant can discover all the plugins that has the entry point group name `gquant.plugin`. Check the `setup.py` file to see details.
+This is a simple example to show how to write an external greenflow plugin. greenflow take advantage of the `entry point` inside the `setup.py` file to register the plugin. greenflow can discover all the plugins that has the entry point group name `greenflow.plugin`. Check the `setup.py` file to see details.
 
 ### Create an new Python enviroment
 ```bash
 conda create -n test python=3.8
 ```
 
-### Install the gQuant 
-To install the gQuant graph computation library, run:
+### Install the greenflow 
+To install the greenflow graph computation library, run:
 ```bash
-pip install gquant
+pip install greenflow
 ```
-Or install `gquant` at the gquant directory:
+Or install `greenflow` at the greenflow directory:
 ```bash
 pip install .
 ```
 
-### Install the gquantlab JupyterLab plugin
-To install `gquantlab` JupyterLab plugin, make sure `nodejs` of version [12^14^15] is installed. E.g:
+### Install the greenflowlab JupyterLab plugin
+To install `greenflowlab` JupyterLab plugin, make sure `nodejs` of version [12^14^15] is installed. E.g:
 ```bash
 conda install -c conda-forge nodejs=12.4.0
 ```
-Then install the `gquantlab`:
+Then install the `greenflowlab`:
 ```bash
-pip install gquantlab
+pip install greenflowlab
 ```
-Or install `gquantlab` at the gquantlab directory:
+Or install `greenflowlab` at the greenflowlab directory:
 ```bash
 pip install .
 ```
diff --git a/gQuant/plugins/simple_example/example/__init__.py b/gQuant/plugins/simple_example/example/__init__.py
index 532b5555..e1f4c0f3 100644
--- a/gQuant/plugins/simple_example/example/__init__.py
+++ b/gQuant/plugins/simple_example/example/__init__.py
@@ -3,8 +3,8 @@
 import pandas as pd
 import numpy as np
 from .client import validation, display  # noqa: F40
-from gquant.dataframe_flow._node_flow import register_validator
-from gquant.dataframe_flow._node_flow import register_copy_function
+from greenflow.dataframe_flow._node_flow import register_validator
+from greenflow.dataframe_flow._node_flow import register_copy_function
 
 
 def _validate_df(df_to_val, ref_cols, obj):
diff --git a/gQuant/plugins/simple_example/example/distanceNode.py b/gQuant/plugins/simple_example/example/distanceNode.py
index a9e6f5b1..fd39d804 100644
--- a/gQuant/plugins/simple_example/example/distanceNode.py
+++ b/gQuant/plugins/simple_example/example/distanceNode.py
@@ -1,8 +1,8 @@
 import pandas as pd
 import numpy as np
-from gquant.dataframe_flow import Node, MetaData
-from gquant.dataframe_flow import NodePorts, PortsSpecSchema
-from gquant.dataframe_flow import ConfSchema
+from greenflow.dataframe_flow import Node, MetaData
+from greenflow.dataframe_flow import NodePorts, PortsSpecSchema
+from greenflow.dataframe_flow import ConfSchema
 
 
 class DistanceNode(Node):
diff --git a/gQuant/plugins/simple_example/example/pointNode.py b/gQuant/plugins/simple_example/example/pointNode.py
index 692b1166..9a244403 100644
--- a/gQuant/plugins/simple_example/example/pointNode.py
+++ b/gQuant/plugins/simple_example/example/pointNode.py
@@ -1,8 +1,8 @@
 import numpy as np
 import pandas as pd
-from gquant.dataframe_flow import Node, MetaData
-from gquant.dataframe_flow import NodePorts, PortsSpecSchema
-from gquant.dataframe_flow import ConfSchema
+from greenflow.dataframe_flow import Node, MetaData
+from greenflow.dataframe_flow import NodePorts, PortsSpecSchema
+from greenflow.dataframe_flow import ConfSchema
 
 
 class PointNode(Node):
diff --git a/gQuant/plugins/simple_example/notebooks/plugin_example.ipynb b/gQuant/plugins/simple_example/notebooks/plugin_example.ipynb
index 0b08f3ee..ecbadb6f 100644
--- a/gQuant/plugins/simple_example/notebooks/plugin_example.ipynb
+++ b/gQuant/plugins/simple_example/notebooks/plugin_example.ipynb
@@ -2,18 +2,18 @@
  "cells": [
   {
    "cell_type": "code",
-   "execution_count": 2,
+   "execution_count": 1,
    "metadata": {},
    "outputs": [
     {
      "data": {
       "application/vnd.jupyter.widget-view+json": {
-       "model_id": "28b4de15b5114ea4929c4a3d716eb194",
+       "model_id": "913698cd4e274a8b8447832d1789c8e8",
        "version_major": 2,
        "version_minor": 0
       },
       "text/plain": [
-       "GQuantWidget(sub=HBox(), value=[OrderedDict([('id', 'points'), ('type', 'PointNode'), ('conf', {'npts': 20}), …"
+       "GreenflowWidget(sub=HBox(), value=[OrderedDict([('id', 'points'), ('type', 'PointNode'), ('conf', {'npts': 20}…"
       ]
      },
      "metadata": {},
@@ -22,7 +22,7 @@
    ],
    "source": [
     "import json\n",
-    "from gquant.dataframe_flow import TaskGraph\n",
+    "from greenflow.dataframe_flow import TaskGraph\n",
     "taskGraph=TaskGraph.load_taskgraph('./simple_plugin.gq.yaml')\n",
     "taskGraph.draw()"
    ]
diff --git a/gQuant/plugins/simple_example/setup.py b/gQuant/plugins/simple_example/setup.py
index 5ab267f7..06001e3f 100644
--- a/gQuant/plugins/simple_example/setup.py
+++ b/gQuant/plugins/simple_example/setup.py
@@ -4,7 +4,7 @@
     name='example_plugin',
     packages=find_packages(include=['example']),
     entry_points={
-        'gquant.plugin': [
+        'greenflow.plugin': [
             'custom_nodes = example',
         ],
     }
diff --git a/gQuant/util/auto_gen.py b/gQuant/util/auto_gen.py
index acf4afa5..70c91f3f 100644
--- a/gQuant/util/auto_gen.py
+++ b/gQuant/util/auto_gen.py
@@ -7,9 +7,9 @@
 sys.path.insert(1, modulespath)
 
 from nemo.backends.pytorch.nm import NeuralModule
-from nemo_gquant_modules.nemoBaseNode import FeedProperty
+from nemo_greenflow_modules.nemoBaseNode import FeedProperty
 
-TEMPLATE = """from gquant.dataframe_flow import Node
+TEMPLATE = """from greenflow.dataframe_flow import Node
 from .nemoBaseNode import NeMoBase
 import nemo
 import {}
@@ -78,7 +78,7 @@ def gen_module_file(module, overwrite=None):
         module_name = overwrite
     else:
         module_name = module.__name__.split('.')[-1]
-    with open('../modules/nemo_gquant_modules/' + module_name + '.py', 'w') as f:
+    with open('../modules/nemo_greenflow_modules/' + module_name + '.py', 'w') as f:
         f.write(file_str)
 
 
diff --git a/gQuant/util/print_env.sh b/gQuant/util/print_env.sh
index 551dca65..d5828718 100755
--- a/gQuant/util/print_env.sh
+++ b/gQuant/util/print_env.sh
@@ -1,6 +1,6 @@
 #!/usr/bin/env bash
 # Reports relevant environment information useful for diagnosing and
-# debugging gQuant issues.
+# debugging greenflow issues.
 # Usage:
 # "./print_env.sh" - prints to stdout
 # "./print_env.sh > env.txt" - prints to file "env.txt"
diff --git a/gQuant/gquant/LICENSE b/greenflow/LICENSE
similarity index 100%
rename from gQuant/gquant/LICENSE
rename to greenflow/LICENSE
diff --git a/gQuant/gquant/README.md b/greenflow/README.md
similarity index 54%
rename from gQuant/gquant/README.md
rename to greenflow/README.md
index 4763e9c5..36afe1ee 100644
--- a/gQuant/gquant/README.md
+++ b/greenflow/README.md
@@ -1,40 +1,40 @@
-# gQuant - Graph Computation Toolkit
+# greenflow - Graph Computation Toolkit
 
-## What is gQuant?
+## What is greenflow?
 
-gQuant is a tool that helps you to organize the workflows. 
+greenflow is a tool that helps you to organize the workflows. 
 
-1. It define a TaskGraph file format `.gq.yaml` that describes the workflow. It can be edited easily by `gquantlab` JupyterLab plugin.
+1. It define a TaskGraph file format `.gq.yaml` that describes the workflow. It can be edited easily by `greenflowlab` JupyterLab plugin.
 2. Dynamically compute the input-output ports compatibility, dataframe columns names and types, ports types to prevent connection errors. 
 3. Nodes can have multiple output ports that can be used to generate different output types. E.g. some data loader Node provides both `cudf` and `dask_cudf` output ports. The multiple GPUs distributed computation computation is automatically enabled by switching to the `dask_cudf` output port. 
 4. Provides the standard API to extend your computation Nodes.
-5. The composite node can encapsulate the TaskGraph into a single node for easy reuse. The composite node can be exported as a regular gQuant node without any coding.
-6. gQuant can be extended by writing a plugin with a set of nodes for a particular domain. Check `plugins` for examples.
+5. The composite node can encapsulate the TaskGraph into a single node for easy reuse. The composite node can be exported as a regular greenflow node without any coding.
+6. greenflow can be extended by writing a plugin with a set of nodes for a particular domain. Check `plugins` for examples.
 
 These examples can be used as-is or, as they are open source, can be extended to suit your environments.
 
 ## Binary pip installation
 
-To install the gQuant graph computation library, run:
+To install the greenflow graph computation library, run:
 ```bash
-pip install gquant
+pip install greenflow
 ```
-Or install `gquant` at the root directory:
+Or install `greenflow` at the root directory:
 ```bash
 pip install .
 ```
 
-gQuant node plugins can be registered in two ways: 
+greenflow node plugins can be registered in two ways: 
 
   1. (Recommended)Write a external plugin using 'entry point' to register it. Check the `external` directory for details
-  2. Register the plugin in `gquantrc` file. Check the `System environment` for details
+  2. Register the plugin in `greenflowrc` file. Check the `System environment` for details
 
 ## System environment 
 
 There are a few system environment that the user can overwrite. 
 
-The custom module files are specified in the `gquantrc` file. `GQUANT_CONFIG` enviroment variable points to the location of this file. By default, it points to 
-`$CWD\gquantrc`. 
+The custom module files are specified in the `greenflowrc` file. `GREENFLOW_CONFIG` enviroment variable points to the location of this file. By default, it points to 
+`$CWD\greenflowrc`. 
 
-In the example `gquantrc`, system environment variable `MODULEPATH` is used to point to the paths of the module files.
+In the example `greenflowrc`, system environment variable `MODULEPATH` is used to point to the paths of the module files.
 To start the jupyterlab, please make sure `MODULEPATH` is set properly. 
diff --git a/gQuant/gquant/docs/Makefile b/greenflow/docs/Makefile
similarity index 95%
rename from gQuant/gquant/docs/Makefile
rename to greenflow/docs/Makefile
index fea927a9..b3025d82 100644
--- a/gQuant/gquant/docs/Makefile
+++ b/greenflow/docs/Makefile
@@ -4,7 +4,7 @@
 # You can set these variables from the command line.
 SPHINXOPTS    = -n -v
 SPHINXBUILD   = sphinx-build
-SPHINXPROJ    = gquant
+SPHINXPROJ    = greenflow
 SOURCEDIR     = source
 BUILDDIR      = build
 
diff --git a/gQuant/gquant/docs/README.md b/greenflow/docs/README.md
similarity index 81%
rename from gQuant/gquant/docs/README.md
rename to greenflow/docs/README.md
index d313ddee..91afbf72 100644
--- a/gQuant/gquant/docs/README.md
+++ b/greenflow/docs/README.md
@@ -1,6 +1,6 @@
 # Building Documentation
 
-A python environment that supports gQuant is required to build the docs. For
+A python environment that supports greenflow is required to build the docs. For
 example:
 
 ```
@@ -13,7 +13,7 @@ conda install -n $ENVNAME -y \
     -c defaults -c nvidia -c rapidsai -c pytorch -c numba -c conda-forge \
     cudf=0.7 dask-cudf=0.7
 
-# requirements for gquant
+# requirements for greenflow
 conda install -n $ENVNAME -y -c conda-forge bqplot PyYaml networkx
 ```
 
@@ -34,7 +34,7 @@ source activate $ENVNAME
 
 # docs should be the current directory
 rm -r ./build/*
-sphinx-apidoc --module-first --ext-autodoc -f -o source/ ../gquant/
+sphinx-apidoc --module-first --ext-autodoc -f -o source/ ../greenflow/
 make html
 ```
 
diff --git a/gQuant/gquant/docs/make.bat b/greenflow/docs/make.bat
similarity index 96%
rename from gQuant/gquant/docs/make.bat
rename to greenflow/docs/make.bat
index e7ce023e..ebc3a4eb 100644
--- a/gQuant/gquant/docs/make.bat
+++ b/greenflow/docs/make.bat
@@ -9,7 +9,7 @@ if "%SPHINXBUILD%" == "" (
 )
 set SOURCEDIR=source
 set BUILDDIR=build
-set SPHINXPROJ=gquant
+set SPHINXPROJ=greenflow
 
 if "%1" == "" goto help
 
diff --git a/gQuant/gquant/docs/source/_static/.gitkeep b/greenflow/docs/source/_static/.gitkeep
similarity index 100%
rename from gQuant/gquant/docs/source/_static/.gitkeep
rename to greenflow/docs/source/_static/.gitkeep
diff --git a/gQuant/gquant/docs/source/_templates/.gitkeep b/greenflow/docs/source/_templates/.gitkeep
similarity index 100%
rename from gQuant/gquant/docs/source/_templates/.gitkeep
rename to greenflow/docs/source/_templates/.gitkeep
diff --git a/gQuant/gquant/docs/source/conf.py b/greenflow/docs/source/conf.py
similarity index 99%
rename from gQuant/gquant/docs/source/conf.py
rename to greenflow/docs/source/conf.py
index b377aedb..9c3edb6f 100644
--- a/gQuant/gquant/docs/source/conf.py
+++ b/greenflow/docs/source/conf.py
@@ -17,7 +17,7 @@
 
 # -- Project information -----------------------------------------------------
 
-project = 'gQuant'
+project = 'greenflow'
 copyright = '2019, NVIDIA'
 author = 'NVIDIA'
 
diff --git a/gQuant/gquant/docs/source/index.rst b/greenflow/docs/source/index.rst
similarity index 74%
rename from gQuant/gquant/docs/source/index.rst
rename to greenflow/docs/source/index.rst
index e1bcd4e0..d7d52db5 100644
--- a/gQuant/gquant/docs/source/index.rst
+++ b/greenflow/docs/source/index.rst
@@ -1,16 +1,16 @@
-.. gQuant documentation master file, created by
+.. greenflow documentation master file, created by
    sphinx-quickstart on Mon May 20 14:16:42 2019.
    You can adapt this file completely to your liking, but it should at least
    contain the root `toctree` directive.
 
-Welcome to gQuant's documentation!
+Welcome to greenflow's documentation!
 ===================================
 
 ..  toctree::
     :maxdepth: 2
     :caption: Contents:
 
-    gQuant API <gquant>
+    greenflow API <greenflow>
 
 
 Indices and tables
diff --git a/gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/__init__.py b/greenflow/greenflow/__init__.py
similarity index 100%
rename from gQuant/plugins/rapids_plugin/notebooks/cuIndicator/viz/__init__.py
rename to greenflow/greenflow/__init__.py
diff --git a/gQuant/gquant/gquant/_common.py b/greenflow/greenflow/_common.py
similarity index 100%
rename from gQuant/gquant/gquant/_common.py
rename to greenflow/greenflow/_common.py
diff --git a/gQuant/gquant/gquant/dataframe_flow/__init__.py b/greenflow/greenflow/dataframe_flow/__init__.py
similarity index 86%
rename from gQuant/gquant/gquant/dataframe_flow/__init__.py
rename to greenflow/greenflow/dataframe_flow/__init__.py
index 2afab34b..1476005d 100644
--- a/gQuant/gquant/gquant/dataframe_flow/__init__.py
+++ b/greenflow/greenflow/dataframe_flow/__init__.py
@@ -11,7 +11,7 @@
     import importlib_metadata
 
 # load all the plugins from entry points
-for entry_point in importlib_metadata.entry_points().get('gquant.plugin', ()):
+for entry_point in importlib_metadata.entry_points().get('greenflow.plugin', ()):
     mod = entry_point.load()
     name = entry_point.name
     sys.modules[name] = mod
diff --git a/gQuant/gquant/gquant/dataframe_flow/_node.py b/greenflow/greenflow/dataframe_flow/_node.py
similarity index 100%
rename from gQuant/gquant/gquant/dataframe_flow/_node.py
rename to greenflow/greenflow/dataframe_flow/_node.py
diff --git a/gQuant/gquant/gquant/dataframe_flow/_node_flow.py b/greenflow/greenflow/dataframe_flow/_node_flow.py
similarity index 100%
rename from gQuant/gquant/gquant/dataframe_flow/_node_flow.py
rename to greenflow/greenflow/dataframe_flow/_node_flow.py
diff --git a/gQuant/gquant/gquant/dataframe_flow/cache.py b/greenflow/greenflow/dataframe_flow/cache.py
similarity index 100%
rename from gQuant/gquant/gquant/dataframe_flow/cache.py
rename to greenflow/greenflow/dataframe_flow/cache.py
diff --git a/gQuant/gquant/gquant/dataframe_flow/node.py b/greenflow/greenflow/dataframe_flow/node.py
similarity index 98%
rename from gQuant/gquant/gquant/dataframe_flow/node.py
rename to greenflow/greenflow/dataframe_flow/node.py
index 778f482c..3b4dae45 100644
--- a/gQuant/gquant/gquant/dataframe_flow/node.py
+++ b/greenflow/greenflow/dataframe_flow/node.py
@@ -37,8 +37,8 @@ def _get_output_ports(self, full_port_spec=False):
 
 
 class Node(_PortsMixin, _Node):
-    '''Base class for implementing gQuant plugins i.e. nodes. A node processes
-    tasks within a gQuant task graph.
+    '''Base class for implementing greenflow plugins i.e. nodes. A node processes
+    tasks within a greenflow task graph.
 
     must implement the following method:
 
@@ -105,7 +105,7 @@ def ports_setup(self) -> NodePorts:
 
         Must return an instance of NodePorts that adheres to PortsSpecSchema.
         Refer to PortsSpecSchema and NodePorts in module:
-            gquant.dataframe_flow.portsSpecSchema
+            greenflow.dataframe_flow.portsSpecSchema
 
         Ex. ports for inputs and outputs. (typical case)
             inports = {
diff --git a/gQuant/gquant/gquant/dataframe_flow/portsSpecSchema.py b/greenflow/greenflow/dataframe_flow/portsSpecSchema.py
similarity index 99%
rename from gQuant/gquant/gquant/dataframe_flow/portsSpecSchema.py
rename to greenflow/greenflow/dataframe_flow/portsSpecSchema.py
index 072750a0..1d570a4d 100644
--- a/gQuant/gquant/gquant/dataframe_flow/portsSpecSchema.py
+++ b/greenflow/greenflow/dataframe_flow/portsSpecSchema.py
@@ -2,7 +2,7 @@
 from itertools import chain
 from typing import Iterable
 
-from gquant._common import _namedtuple_with_defaults
+from greenflow._common import _namedtuple_with_defaults
 
 __all__ = ['PortsSpecSchema', 'NodePorts', 'ConfSchema', 'MetaData']
 
diff --git a/gQuant/gquant/gquant/dataframe_flow/task.py b/greenflow/greenflow/dataframe_flow/task.py
similarity index 90%
rename from gQuant/gquant/gquant/dataframe_flow/task.py
rename to greenflow/greenflow/dataframe_flow/task.py
index a4717629..ca348808 100644
--- a/gQuant/gquant/gquant/dataframe_flow/task.py
+++ b/greenflow/greenflow/dataframe_flow/task.py
@@ -10,11 +10,12 @@
 import sys
 from collections import namedtuple
 import configparser
+from .util import get_file_path
 
 
 __all__ = ['Task']
 
-DEFAULT_MODULE = os.getenv('GQUANT_PLUGIN_MODULE', "gquant.plugin_nodes")
+DEFAULT_MODULE = os.getenv('GREENFLOW_PLUGIN_MODULE', "greenflow.plugin_nodes")
 
 
 class ConfigParser(configparser.ConfigParser):
@@ -31,14 +32,14 @@ def options(self, section, no_defaults=True, **kwargs):
             return super().options(section, **kwargs)
 
 
-def get_gquant_config_modules():
-    if 'GQUANT_CONFIG' not in os.environ:
-        os.environ['GQUANT_CONFIG'] = os.getcwd()+'/gquantrc'
-        print(os.environ['GQUANT_CONFIG'])
+def get_greenflow_config_modules():
+    if 'GREENFLOW_CONFIG' not in os.environ:
+        os.environ['GREENFLOW_CONFIG'] = os.getcwd()+'/greenflowrc'
+        print(os.environ['GREENFLOW_CONFIG'])
     config = ConfigParser(defaults=os.environ)
-    gquant_cfg = os.getenv('GQUANT_CONFIG', None)
-    if Path(gquant_cfg).is_file():
-        config.read(gquant_cfg)
+    greenflow_cfg = os.getenv('GREENFLOW_CONFIG', None)
+    if Path(greenflow_cfg).is_file():
+        config.read(greenflow_cfg)
     if 'ModuleFiles' not in config:
         return {}
     modules_names = config.options('ModuleFiles')
@@ -55,9 +56,9 @@ def append_path(path):
 
 def import_submodules(package, recursive=True, _main_package=None):
     """Import all submodules of a module, recursively, including subpackages.
-    Finds members of those packages. If a member is a gQuant Node subclass then
-    sets the top level package attribute with the class. This is done so that
-    the class can be accessed via:
+    Finds members of those packages. If a member is a greenflow Node subclass
+     then sets the top level package attribute with the class. This is done so
+      that the class can be accessed via:
         NodeClass = getattr(mod, node_type)
     Where mod is the package.
 
@@ -97,6 +98,10 @@ def load_modules(pathfile, name=None):
         namedtuple, absolute path and loaded module
     """
     filename = Path(pathfile)
+    if not filename.exists():
+        filename = get_file_path(str(filename))
+        filename = Path(filename)
+
     if name is None:
         modulename = filename.stem
     else:
@@ -181,7 +186,7 @@ def get_node_obj(self, replace=None, profile=False, tgraph_mixin=False):
         NodeClass = None
         module_dir = None
         if isinstance(node_type, str):
-            modules = get_gquant_config_modules()
+            modules = get_greenflow_config_modules()
             if modulepath is not None:
                 loaded = load_modules(modulepath)
                 module_dir = loaded.path
@@ -202,7 +207,8 @@ def get_node_obj(self, replace=None, profile=False, tgraph_mixin=False):
             else:
                 try:
                     global DEFAULT_MODULE
-                    plugmod = os.getenv('GQUANT_PLUGIN_MODULE', DEFAULT_MODULE)
+                    plugmod = os.getenv('GREENFLOW_PLUGIN_MODULE',
+                                        DEFAULT_MODULE)
                     MODLIB = importlib.import_module(plugmod)
                     NodeClass = getattr(MODLIB, node_type)
                 except AttributeError:
diff --git a/gQuant/gquant/gquant/dataframe_flow/taskGraph.py b/greenflow/greenflow/dataframe_flow/taskGraph.py
similarity index 98%
rename from gQuant/gquant/gquant/dataframe_flow/taskGraph.py
rename to greenflow/greenflow/dataframe_flow/taskGraph.py
index dfb0ef9f..5c141dc0 100644
--- a/gQuant/gquant/gquant/dataframe_flow/taskGraph.py
+++ b/greenflow/greenflow/dataframe_flow/taskGraph.py
@@ -220,7 +220,7 @@ def start_labwidget(self):
     @staticmethod
     def register_lab_node(module_name, class_obj):
         """
-        Register the node class for the GQuantlab. It put the class_obj
+        Register the node class for the Greenflowlab. It put the class_obj
         into a sys.modules with `module_name`. It will register the node
         class into the Jupyterlab kernel space, communicate with the
          client to populate the add nodes menus, sync up with
@@ -236,7 +236,7 @@ class into the Jupyterlab kernel space, communicate with the
               will automatically construct the hierachical menus based on '.'
 
         class_obj: Node
-            The node class that is the subclass of gQuant 'Node'. It is usually
+            The node class that is the subclass of greenflow 'Node'. It is usually
             defined dynamically so it can be registered.
 
         Returns
@@ -638,7 +638,6 @@ def run(self, outputs=None, replace=None, profile=False, formated=False):
             finally:
                 import ipywidgets
                 out = ipywidgets.Output(layout={'border': '1px solid black'})
-                print(err)
                 out.append_stderr(err)
             if result is None:
                 result = ipywidgets.Tab()
@@ -658,8 +657,8 @@ def to_pydot(self, show_ports=False):
 
     def get_widget(self):
         if self.__widget is None:
-            from gquantlab.gquantmodel import GQuantWidget
-            widget = GQuantWidget()
+            from greenflowlab.greenflowmodel import GreenflowWidget
+            widget = GreenflowWidget()
             widget.value = self.export_task_speclist()
             widget.set_taskgraph(self)
             self.__widget = widget
diff --git a/gQuant/gquant/gquant/dataframe_flow/taskSpecSchema.py b/greenflow/greenflow/dataframe_flow/taskSpecSchema.py
similarity index 100%
rename from gQuant/gquant/gquant/dataframe_flow/taskSpecSchema.py
rename to greenflow/greenflow/dataframe_flow/taskSpecSchema.py
diff --git a/gQuant/gquant/gquant/dataframe_flow/util.py b/greenflow/greenflow/dataframe_flow/util.py
similarity index 89%
rename from gQuant/gquant/gquant/dataframe_flow/util.py
rename to greenflow/greenflow/dataframe_flow/util.py
index a48932d1..1b382872 100644
--- a/gQuant/gquant/gquant/dataframe_flow/util.py
+++ b/greenflow/greenflow/dataframe_flow/util.py
@@ -11,8 +11,8 @@ def get_file_path(path: str) -> str:
     """
     if path.startswith('/'):
         return path
-    if 'GQUANTROOT' in os.environ:
-        ROOT = pathlib.Path(os.environ['GQUANTROOT'])
+    if 'GREENFLOWROOT' in os.environ:
+        ROOT = pathlib.Path(os.environ['GREENFLOWROOT'])
     else:
         ROOT = pathlib.Path(os.getcwd())
     if os.path.exists(path):
diff --git a/gQuant/gquant/gquant/flow.py b/greenflow/greenflow/flow.py
similarity index 91%
rename from gQuant/gquant/gquant/flow.py
rename to greenflow/greenflow/flow.py
index 9a36d2b7..ca69100b 100644
--- a/gQuant/gquant/gquant/flow.py
+++ b/greenflow/greenflow/flow.py
@@ -1,4 +1,4 @@
-from gquant.dataframe_flow import TaskGraph
+from greenflow.dataframe_flow import TaskGraph
 import argparse
 
 
diff --git a/gQuant/gquant/gquant/plugin_nodes/__init__.py b/greenflow/greenflow/plugin_nodes/__init__.py
similarity index 100%
rename from gQuant/gquant/gquant/plugin_nodes/__init__.py
rename to greenflow/greenflow/plugin_nodes/__init__.py
diff --git a/gQuant/gquant/gquant/plugin_nodes/util/__init__.py b/greenflow/greenflow/plugin_nodes/util/__init__.py
similarity index 100%
rename from gQuant/gquant/gquant/plugin_nodes/util/__init__.py
rename to greenflow/greenflow/plugin_nodes/util/__init__.py
diff --git a/gQuant/gquant/gquant/plugin_nodes/util/compositeNode.py b/greenflow/greenflow/plugin_nodes/util/compositeNode.py
similarity index 97%
rename from gQuant/gquant/gquant/plugin_nodes/util/compositeNode.py
rename to greenflow/greenflow/plugin_nodes/util/compositeNode.py
index 401c4106..3b677855 100644
--- a/gQuant/gquant/gquant/plugin_nodes/util/compositeNode.py
+++ b/greenflow/greenflow/plugin_nodes/util/compositeNode.py
@@ -1,14 +1,14 @@
-from gquant.dataframe_flow import Node
-from gquant.dataframe_flow import TaskGraph
-from gquant.dataframe_flow.taskSpecSchema import TaskSpecSchema
-from gquant.dataframe_flow.portsSpecSchema import ConfSchema
-from gquant.dataframe_flow.portsSpecSchema import NodePorts, MetaData
-from gquant.dataframe_flow.cache import (CACHE_META,
+from greenflow.dataframe_flow import Node
+from greenflow.dataframe_flow import TaskGraph
+from greenflow.dataframe_flow.taskSpecSchema import TaskSpecSchema
+from greenflow.dataframe_flow.portsSpecSchema import ConfSchema
+from greenflow.dataframe_flow.portsSpecSchema import NodePorts, MetaData
+from greenflow.dataframe_flow.cache import (CACHE_META,
                                          CACHE_PORTS, CACHE_SCHEMA)
 import json
 import os
 import hashlib
-from gquant.dataframe_flow.util import get_file_path
+from greenflow.dataframe_flow.util import get_file_path
 import uuid
 
 
diff --git a/gQuant/gquant/gquant/plugin_nodes/util/contextCompositeNode.py b/greenflow/greenflow/plugin_nodes/util/contextCompositeNode.py
similarity index 98%
rename from gQuant/gquant/gquant/plugin_nodes/util/contextCompositeNode.py
rename to greenflow/greenflow/plugin_nodes/util/contextCompositeNode.py
index ce61474c..60e3e5c1 100644
--- a/gQuant/gquant/gquant/plugin_nodes/util/contextCompositeNode.py
+++ b/greenflow/greenflow/plugin_nodes/util/contextCompositeNode.py
@@ -1,6 +1,6 @@
 from .compositeNode import CompositeNode
-from gquant.dataframe_flow.cache import CACHE_SCHEMA
-from gquant.dataframe_flow.portsSpecSchema import (ConfSchema,
+from greenflow.dataframe_flow.cache import CACHE_SCHEMA
+from greenflow.dataframe_flow.portsSpecSchema import (ConfSchema,
                                                    PortsSpecSchema, NodePorts)
 from .data_obj import ConfData
 from .json_util import parse_config
diff --git a/gQuant/gquant/gquant/plugin_nodes/util/data_obj.py b/greenflow/greenflow/plugin_nodes/util/data_obj.py
similarity index 100%
rename from gQuant/gquant/gquant/plugin_nodes/util/data_obj.py
rename to greenflow/greenflow/plugin_nodes/util/data_obj.py
diff --git a/gQuant/gquant/gquant/plugin_nodes/util/json_util.py b/greenflow/greenflow/plugin_nodes/util/json_util.py
similarity index 100%
rename from gQuant/gquant/gquant/plugin_nodes/util/json_util.py
rename to greenflow/greenflow/plugin_nodes/util/json_util.py
diff --git a/gQuant/gquant/setup.cfg b/greenflow/setup.cfg
similarity index 100%
rename from gQuant/gquant/setup.cfg
rename to greenflow/setup.cfg
diff --git a/gQuant/gquant/setup.py b/greenflow/setup.py
similarity index 75%
rename from gQuant/gquant/setup.py
rename to greenflow/setup.py
index d2aa5894..9e03054f 100644
--- a/gQuant/gquant/setup.py
+++ b/greenflow/setup.py
@@ -13,14 +13,14 @@
                     'jsonpath_ng', 'ruamel.yaml', 'pandas']
 
 setup(
-    name='gquant',
+    name='greenflow',
     version='1.0.2',
-    description='gquant - RAPIDS Financial Services Algorithms',
+    description='greenflow - RAPIDS Financial Services Algorithms',
     long_description=long_description,
     long_description_content_type='text/markdown',
     author='NVIDIA Corporation',
-    url='https://github.com/rapidsai/gQuant',
-    packages=find_packages(include=['gquant', 'gquant.*']),
+    url='https://github.com/NVIDIA/fsi-samples/tree/main/greenflow',
+    packages=find_packages(include=['greenflow', 'greenflow.*']),
     install_requires=install_requires,
     license="Apache",
     classifiers=[
@@ -31,6 +31,6 @@
         'Operating System :: POSIX :: Linux',
     ],
     entry_points={
-        'console_scripts': ['gquant-flow=gquant.flow:main'],
+        'console_scripts': ['greenflow-flow=greenflow.flow:main'],
     }
 )
diff --git a/gQuant/gquantlab/.eslintignore b/greenflowlab/.eslintignore
similarity index 100%
rename from gQuant/gquantlab/.eslintignore
rename to greenflowlab/.eslintignore
diff --git a/gQuant/gquantlab/.eslintrc.js b/greenflowlab/.eslintrc.js
similarity index 100%
rename from gQuant/gquantlab/.eslintrc.js
rename to greenflowlab/.eslintrc.js
diff --git a/gQuant/gquantlab/.gitignore b/greenflowlab/.gitignore
similarity index 98%
rename from gQuant/gquantlab/.gitignore
rename to greenflowlab/.gitignore
index 232ad412..236987fc 100644
--- a/gQuant/gquantlab/.gitignore
+++ b/greenflowlab/.gitignore
@@ -4,7 +4,7 @@ node_modules/
 *.egg-info/
 .ipynb_checkpoints
 *.tsbuildinfo
-gquantlab/labextension
+greenflowlab/labextension
 
 # Created by https://www.gitignore.io/api/python
 # Edit at https://www.gitignore.io/?templates=python
diff --git a/gQuant/gquantlab/.prettierignore b/greenflowlab/.prettierignore
similarity index 100%
rename from gQuant/gquantlab/.prettierignore
rename to greenflowlab/.prettierignore
diff --git a/gQuant/gquantlab/.prettierrc b/greenflowlab/.prettierrc
similarity index 100%
rename from gQuant/gquantlab/.prettierrc
rename to greenflowlab/.prettierrc
diff --git a/gQuant/gquantlab/LICENSE b/greenflowlab/LICENSE
similarity index 100%
rename from gQuant/gquantlab/LICENSE
rename to greenflowlab/LICENSE
diff --git a/gQuant/gquantlab/MANIFEST.in b/greenflowlab/MANIFEST.in
similarity index 80%
rename from gQuant/gquantlab/MANIFEST.in
rename to greenflowlab/MANIFEST.in
index 4d62ee2f..a6ffff60 100644
--- a/gQuant/gquantlab/MANIFEST.in
+++ b/greenflowlab/MANIFEST.in
@@ -2,11 +2,11 @@ include LICENSE
 include README.md
 include pyproject.toml
 
-include jupyter-config/gquantlab.json
+include jupyter-config/greenflowlab.json
 
 include package.json
 include ts*.json
-include gquantlab/labextension/*.tgz
+include greenflowlab/labextension/*.tgz
 
 # Javascript files
 graft src
diff --git a/gQuant/gquantlab/README.md b/greenflowlab/README.md
similarity index 50%
rename from gQuant/gquantlab/README.md
rename to greenflowlab/README.md
index 28c7ae32..69909daf 100644
--- a/gQuant/gquantlab/README.md
+++ b/greenflowlab/README.md
@@ -1,9 +1,9 @@
-# gquantlab
+# greenflowlab
 
-![Github Actions Status](https://github.com/rapidsai/gQuant/gquantlab/workflows/Build/badge.svg)
+![Github Actions Status](https://github.com/rapidsai/greenflow/greenflowlab/workflows/Build/badge.svg)
 
-## gQuant jupyterlab extension
-The gQuant Juyterlab extension provides the user interface to build the dataframe flow TaskGraph easily. It takes advantage of the open sources projects like [jupyterlab](https://github.com/jupyterlab/jupyterlab), [ipywidget](https://github.com/jupyter-widgets/ipywidgets), [React](https://reactjs.org/) and [D3](https://d3js.org/). It features:
+## greenflow jupyterlab extension
+The greenflow Juyterlab extension provides the user interface to build the dataframe flow TaskGraph easily. It takes advantage of the open sources projects like [jupyterlab](https://github.com/jupyterlab/jupyterlab), [ipywidget](https://github.com/jupyter-widgets/ipywidgets), [React](https://reactjs.org/) and [D3](https://d3js.org/). It features:
 1. Takes full advantage of the JupyterLab project that the extension adds commands to Jupyterlab context menu, command palette and bind them with keyboard shortcuts to speed up the productivity.  
 2. Define a new TaskGraph file format `.gq.yaml` that can be edited in the Jupyterlab. 
 3. Visually presents the TaskGraph as a DAG graph. Users can zoom in and out, freely move the nodes around, and make connections between nodes.
@@ -13,65 +13,59 @@ The gQuant Juyterlab extension provides the user interface to build the datafram
 7. Dynamically compute the input-output ports compatibility, dataframe columns names and types, ports types to prevent connection errors. 
 8. Nodes can have multiple output ports that can be used to generate different output types. E.g. some data loader Node provides both `cudf` and `dask_cudf` output ports. The multiple GPUs distributed computation computation is automatically enabled by switching to the `dask_cudf` output port. 
 9. Provides the standard API to extend your computation Nodes.
-10. The composite node can encapsulate the TaskGraph into a single node for easy reuse. The composite node can be exported as a regular gQuant node without any coding.
+10. The composite node can encapsulate the TaskGraph into a single node for easy reuse. The composite node can be exported as a regular greenflow node without any coding.
 
 
-This extension is composed of a Python package named `gquantlab`
-for the server extension and a NPM package named `gquantlab`
+This extension is composed of a Python package named `greenflowlab`
+for the server extension and a NPM package named `greenflowlab`
 for the frontend extension.
 
 
 ## Build the dev container
 
-In the gQuant root direction
+In the greenflow root direction
 ```bash
 bash docker/build.sh
 ```
-Launch your development container, make sure mounting your gQuant directory
+Launch your development container, make sure mounting your greenflow directory
 to the container and open `8888` ports.
 
-Set the gQuant path as the folder to start the development or you can open the 
+Set the greenflow path as the folder to start the development or you can open the 
 `workspace.code-workspace` file.
 
-
 ## Requirements
 
-* JupyterLab >= 2.0
+* JupyterLab >= 3.0
 
 ## Install
 
-Note: You will need NodeJS of version 12^14^15 to install the extension.
-
 ```bash
-pip install gquantlab
+pip install greenflowlab
 ```
 
+
 ## Troubleshoot
 
-If you are seeing the frontend extension but it is not working, check
+If you are seeing the frontend extension, but it is not working, check
 that the server extension is enabled:
 
 ```bash
-jupyter serverextension list
+jupyter server extension list
 ```
 
-If the server extension is installed and enabled but you are not seeing
-the frontend, check the frontend is installed:
+If the server extension is installed and enabled, but you are not seeing
+the frontend extension, check the frontend extension is installed:
 
 ```bash
 jupyter labextension list
 ```
 
-If it is installed, try:
-
-```bash
-jupyter lab clean
-jupyter lab build
-```
 
 ## Contributing
 
-### Install
+### Development install
+
+Note: You will need NodeJS to build the extension package.
 
 The `jlpm` command is JupyterLab's pinned version of
 [yarn](https://yarnpkg.com/) that is installed with JupyterLab. You may use
@@ -79,39 +73,34 @@ The `jlpm` command is JupyterLab's pinned version of
 
 ```bash
 # Clone the repo to your local environment
-# Move to gquantlab directory
-
-# Install server extension
+# Change directory to the greenflowlab directory
+# Install package in development mode
 pip install -e .
-# Register server extension
-jupyter serverextension enable --py gquantlab --sys-prefix
-
-# Install dependencies
-jlpm
-# Build Typescript source
-jlpm build
 # Link your development version of the extension with JupyterLab
-jupyter labextension install .
-# Rebuild Typescript source after making changes
-jlpm build
-# Rebuild JupyterLab after making any changes
-jupyter lab build
+jupyter labextension develop . --overwrite
+# Rebuild extension Typescript source after making changes
+jlpm run build
 ```
 
-You can watch the source directory and run JupyterLab in watch mode to watch for changes in the extension's source and automatically rebuild the extension and application.
+You can watch the source directory and run JupyterLab at the same time in different terminals to watch for changes in the extension's source and automatically rebuild the extension.
 
 ```bash
-# Watch the source directory in another terminal tab
-jlpm watch
-# Run jupyterlab in watch mode in one terminal tab
-jupyter lab --watch
+# Watch the source directory in one terminal, automatically rebuilding when needed
+jlpm run watch
+# Run JupyterLab in another terminal
+jupyter lab
 ```
 
-Now every change will be built locally and bundled into JupyterLab. Be sure to refresh your browser page after saving file changes to reload the extension (note: you'll need to wait for webpack to finish, which can take 10s+ at times).
+With the watch command running, every saved change will immediately be built locally and available in your running JupyterLab. Refresh JupyterLab to load the change in your browser (you may need to wait several seconds for the extension to be rebuilt).
+
+By default, the `jlpm run build` command generates the source maps for this extension to make it easier to debug using the browser dev tools. To also generate source maps for the JupyterLab core extensions, you can run the following command:
+
+```bash
+jupyter lab build --minimize=False
+```
 
 ### Uninstall
 
 ```bash
-pip uninstall gquantlab
-jupyter labextension uninstall gquantlab
+pip uninstall greenflowlab
 ```
diff --git a/gQuant/gquantlab/gquantlab/__init__.py b/greenflowlab/greenflowlab/__init__.py
similarity index 85%
rename from gQuant/gquantlab/gquantlab/__init__.py
rename to greenflowlab/greenflowlab/__init__.py
index 586b11dd..492d699f 100644
--- a/gQuant/gquantlab/gquantlab/__init__.py
+++ b/greenflowlab/greenflowlab/__init__.py
@@ -22,7 +22,7 @@ def _jupyter_labextension_paths():
 
 def _jupyter_server_extension_points():
     return [{
-        "module": "gquantlab"
+        "module": "greenflowlab"
     }]
 
 
@@ -35,5 +35,5 @@ def _load_jupyter_server_extension(server_app):
         JupyterLab application instance
     """
     setup_handlers(server_app.web_app)
-    server_app.log.info("Registered gQuantLab extension at URL path /gquantlab")
+    server_app.log.info("Registered greenflowLab extension at URL path /greenflowlab")
 
diff --git a/gQuant/gquantlab/gquantlab/_frontend.py b/greenflowlab/greenflowlab/_frontend.py
similarity index 81%
rename from gQuant/gquantlab/gquantlab/_frontend.py
rename to greenflowlab/greenflowlab/_frontend.py
index 91c20b85..566f9b0a 100644
--- a/gQuant/gquantlab/gquantlab/_frontend.py
+++ b/greenflowlab/greenflowlab/_frontend.py
@@ -5,5 +5,5 @@
 Information about the frontend package of the widgets.
 """
 
-module_name = "gquantlab"
+module_name = "greenflowlab"
 module_version = "^0.1.0"
diff --git a/gQuant/gquantlab/gquantlab/_version.py b/greenflowlab/greenflowlab/_version.py
similarity index 100%
rename from gQuant/gquantlab/gquantlab/_version.py
rename to greenflowlab/greenflowlab/_version.py
diff --git a/gQuant/gquantlab/gquantlab/gquantmodel.py b/greenflowlab/greenflowlab/greenflowmodel.py
similarity index 90%
rename from gQuant/gquantlab/gquantlab/gquantmodel.py
rename to greenflowlab/greenflowlab/greenflowmodel.py
index 7562a221..838f9ba5 100644
--- a/gQuant/gquantlab/gquantlab/gquantmodel.py
+++ b/greenflowlab/greenflowlab/greenflowmodel.py
@@ -12,13 +12,13 @@
 from ._frontend import module_name, module_version
 
 
-class GQuantWidget(DOMWidget):
+class GreenflowWidget(DOMWidget):
     """TODO: Add docstring here
     """
-    _model_name = Unicode('GQuantModel').tag(sync=True)
+    _model_name = Unicode('GreenflowModel').tag(sync=True)
     _model_module = Unicode(module_name).tag(sync=True)
     _model_module_version = Unicode(module_version).tag(sync=True)
-    _view_name = Unicode('GQuantView').tag(sync=True)
+    _view_name = Unicode('GreenflowView').tag(sync=True)
     _view_module = Unicode(module_name).tag(sync=True)
     _view_module_version = Unicode(module_version).tag(sync=True)
 
diff --git a/gQuant/gquantlab/gquantlab/handlers.py b/greenflowlab/greenflowlab/handlers.py
similarity index 85%
rename from gQuant/gquantlab/gquantlab/handlers.py
rename to greenflowlab/greenflowlab/handlers.py
index 5639b874..a5d26b9e 100644
--- a/gQuant/gquantlab/gquantlab/handlers.py
+++ b/greenflowlab/greenflowlab/handlers.py
@@ -2,11 +2,11 @@
 from jupyter_server.base.handlers import APIHandler
 from jupyter_server.utils import url_path_join
 import tornado
-from gquant.dataframe_flow import TaskGraph
+from greenflow.dataframe_flow import TaskGraph
 from .server_utils import (get_nodes, add_nodes)
 import os
-from gquant.dataframe_flow.taskGraph import add_module_from_base64
-from gquant.dataframe_flow.task import get_gquant_config_modules, load_modules
+from greenflow.dataframe_flow.taskGraph import add_module_from_base64
+from greenflow.dataframe_flow.task import get_greenflow_config_modules, load_modules
 try:
     # For python 3.8 and later
     import importlib.metadata as importlib_metadata
@@ -47,7 +47,7 @@ class RouteHandlerPlugins(APIHandler):
     @tornado.web.authenticated
     def get(self):
         # load all the plugin information from the backend
-        modules = get_gquant_config_modules()
+        modules = get_greenflow_config_modules()
         client_info = {}
         client_info['validation'] = {}
         client_info['display'] = {}
@@ -73,7 +73,7 @@ def get(self):
 
         # load all the plugins from entry points
         for entry_point in importlib_metadata.entry_points().get(
-                'gquant.plugin', ()):
+                'greenflow.plugin', ()):
             client_mod = entry_point.load()
             if hasattr(client_mod, 'validation'):
                 val_dict = getattr(client_mod, 'validation')
@@ -117,17 +117,17 @@ def setup_handlers(web_app):
     host_pattern = ".*$"
     base_url = web_app.settings["base_url"]
     # pass the jupyterlab server root directory to
-    # environment variable `GQUANTROOT`. Note, this
+    # environment variable `GREENFLOWROOT`. Note, this
     # variable is not meant to be overwritten by user.
     # This variable can be used by other utility function
     # to compute the absolute path of the files.
-    os.environ['GQUANTROOT'] = os.getcwd()
+    os.environ['GREENFLOWROOT'] = os.getcwd()
     # load all the graphs given the input gq.yaml file contents
-    route_pattern0 = url_path_join(base_url, "gquantlab", "load_graph")
-    route_pattern1 = url_path_join(base_url, "gquantlab", "all_nodes")
-    route_pattern2 = url_path_join(base_url, "gquantlab", "load_graph_path")
-    route_pattern3 = url_path_join(base_url, "gquantlab", "register_node")
-    route_pattern4 = url_path_join(base_url, "gquantlab", "register_plugins")
+    route_pattern0 = url_path_join(base_url, "greenflowlab", "load_graph")
+    route_pattern1 = url_path_join(base_url, "greenflowlab", "all_nodes")
+    route_pattern2 = url_path_join(base_url, "greenflowlab", "load_graph_path")
+    route_pattern3 = url_path_join(base_url, "greenflowlab", "register_node")
+    route_pattern4 = url_path_join(base_url, "greenflowlab", "register_plugins")
     handlers = [(route_pattern0, RouteHandlerLoadGraph),
                 (route_pattern1, RouteHandlerLoadAllNodes),
                 (route_pattern2, RouteHandlerLoadGraphFromPath),
diff --git a/gQuant/gquantlab/gquantlab/server_utils.py b/greenflowlab/greenflowlab/server_utils.py
similarity index 91%
rename from gQuant/gquantlab/gquantlab/server_utils.py
rename to greenflowlab/greenflowlab/server_utils.py
index 72858a72..fa77e4b4 100644
--- a/gQuant/gquantlab/gquantlab/server_utils.py
+++ b/greenflowlab/greenflowlab/server_utils.py
@@ -1,10 +1,10 @@
-from gquant.dataframe_flow import TaskGraph
-from gquant.dataframe_flow import Node
-from gquant.dataframe_flow.task import Task
-from gquant.dataframe_flow._node_flow import OUTPUT_TYPE, OUTPUT_ID
-from gquant.dataframe_flow import TaskSpecSchema
-from gquant.dataframe_flow.task import load_modules, get_gquant_config_modules
-import gquant.plugin_nodes as plugin_nodes
+from greenflow.dataframe_flow import TaskGraph
+from greenflow.dataframe_flow import Node
+from greenflow.dataframe_flow.task import Task
+from greenflow.dataframe_flow._node_flow import OUTPUT_TYPE, OUTPUT_ID
+from greenflow.dataframe_flow import TaskSpecSchema
+from greenflow.dataframe_flow.task import load_modules, get_greenflow_config_modules
+import greenflow.plugin_nodes as plugin_nodes
 import inspect
 import uuid
 try:
@@ -109,9 +109,9 @@ def get_nodes(task_graph):
             inputs = []
             num = 0
             for port, v in connection_inputs.items():
-                inputs.append({'name': port, "type": ["any"]})
+                inputs.append({'name': port, "type": [["any"]]})
                 num = max(int(port[2:]), num)
-            inputs.append({'name': 'in'+str(num+1), "type": ["any"]})
+            inputs.append({'name': 'in'+str(num+1), "type": [["any"]]})
             out_node['inputs'] = inputs
     task_graph.run_cleanup()
     return {'nodes': nodes, 'edges': edges}
@@ -125,7 +125,7 @@ def get_node_obj(node, count_id=True):
     Arguments
     -------
     node: Node
-        gquant Node
+        greenflow Node
 
     Returns
     -------
@@ -192,7 +192,7 @@ def get_nodes_from_file(file):
 def add_nodes():
     """
     It will load all the nodes for the UI client so user can add new node
-    to the graph. The nodes are from two sources: default gQuant nodes and
+    to the graph. The nodes are from two sources: default greenflow nodes and
     customized node modules.
 
     The output is a dictionary whose keys are module names and values are a
@@ -207,14 +207,14 @@ def add_nodes():
         dictionary of all the nodes that can be added in the client
     """
     loaded_node_classes = []
-    all_modules = get_gquant_config_modules()
+    all_modules = get_greenflow_config_modules()
     print(all_modules)
     all_nodes = {}
-    # not implemented yet for gQuant
+    # not implemented yet for greenflow
     for item in inspect.getmembers(plugin_nodes):
         if inspect.ismodule(item[1]):
             print(item)
-            labmod_pkg = 'gquant.{}'.format(item[0])
+            labmod_pkg = 'greenflow.{}'.format(item[0])
             all_nodes[labmod_pkg] = []
             for node in inspect.getmembers(item[1]):
                 nodecls = node[1]
@@ -294,7 +294,7 @@ def add_nodes():
                 node_lists.append(nodeObj)
 
     # load all the plugins from entry points
-    for entry_point in importlib_metadata.entry_points().get('gquant.plugin',
+    for entry_point in importlib_metadata.entry_points().get('greenflow.plugin',
                                                              ()):
         mod = entry_point.load()
         modulename = entry_point.name
diff --git a/gQuant/gquantlab/jupyter-config/gquantlab.json b/greenflowlab/jupyter-config/greenflowlab.json
similarity index 68%
rename from gQuant/gquantlab/jupyter-config/gquantlab.json
rename to greenflowlab/jupyter-config/greenflowlab.json
index 77c32881..8d51d29b 100644
--- a/gQuant/gquantlab/jupyter-config/gquantlab.json
+++ b/greenflowlab/jupyter-config/greenflowlab.json
@@ -1,7 +1,7 @@
 {
   "ServerApp": {
     "jpserver_extensions": {
-      "gquantlab": true
+      "greenflowlab": true
     }
   }
 }
diff --git a/gQuant/gquantlab/notebooks/Empty.ipynb b/greenflowlab/notebooks/Empty.ipynb
similarity index 91%
rename from gQuant/gquantlab/notebooks/Empty.ipynb
rename to greenflowlab/notebooks/Empty.ipynb
index b7bad519..8ba7df07 100644
--- a/gQuant/gquantlab/notebooks/Empty.ipynb
+++ b/greenflowlab/notebooks/Empty.ipynb
@@ -13,7 +13,7 @@
        "version_minor": 0
       },
       "text/plain": [
-       "GQuantWidget(sub=HBox())"
+       "GreenflowWidget(sub=HBox())"
       ]
      },
      "metadata": {},
@@ -22,7 +22,7 @@
    ],
    "source": [
     "import os\n",
-    "from gquant.dataframe_flow import TaskGraph\n",
+    "from greenflow.dataframe_flow import TaskGraph\n",
     "task_graph = TaskGraph()\n",
     "task_graph.draw()"
    ]
diff --git a/gQuant/gquantlab/notebooks/full_example.ipynb b/greenflowlab/notebooks/full_example.ipynb
similarity index 99%
rename from gQuant/gquantlab/notebooks/full_example.ipynb
rename to greenflowlab/notebooks/full_example.ipynb
index 65042bc6..821290de 100644
--- a/gQuant/gquantlab/notebooks/full_example.ipynb
+++ b/greenflowlab/notebooks/full_example.ipynb
@@ -7,7 +7,7 @@
    "outputs": [],
    "source": [
     "import os\n",
-    "from gquant.dataframe_flow import TaskGraph"
+    "from greenflow.dataframe_flow import TaskGraph"
    ]
   },
   {
@@ -100,7 +100,7 @@
        "version_minor": 0
       },
       "text/plain": [
-       "GQuantWidget(sub=HBox(), value=[OrderedDict([('id', 'points_task'), ('type', 'PointNode'), ('conf', {'npts': 8…"
+       "GreenflowWidget(sub=HBox(), value=[OrderedDict([('id', 'points_task'), ('type', 'PointNode'), ('conf', {'npts': 8…"
       ]
      },
      "metadata": {},
@@ -124,7 +124,7 @@
        "version_minor": 0
       },
       "text/plain": [
-       "GQuantWidget(sub=HBox(), value=[OrderedDict([('id', 'points_task'), ('type', 'PointNode'), ('conf', {'npts': 8…"
+       "GreenflowWidget(sub=HBox(), value=[OrderedDict([('id', 'points_task'), ('type', 'PointNode'), ('conf', {'npts': 8…"
       ]
      },
      "metadata": {},
diff --git a/gQuant/gquantlab/package.json b/greenflowlab/package.json
similarity index 87%
rename from gQuant/gquantlab/package.json
rename to greenflowlab/package.json
index 8de8e324..da86fc29 100644
--- a/gQuant/gquantlab/package.json
+++ b/greenflowlab/package.json
@@ -1,15 +1,15 @@
 {
-  "name": "gquantlab",
+  "name": "greenflowlab",
   "version": "1.0.0",
-  "description": "gQuant Jupyterlab extension",
+  "description": "greenflow Jupyterlab extension",
   "keywords": [
     "jupyter",
     "jupyterlab",
     "jupyterlab-extension"
   ],
-  "homepage": "https://github.com/rapidsai/gQuant",
+  "homepage": "https://github.com/rapidsai/greenflow",
   "bugs": {
-    "url": "https://github.com/rapidsai/gQuant/issues"
+    "url": "https://github.com/rapidsai/greenflow/issues"
   },
   "license": "Apache-2.0",
   "author": {
@@ -25,7 +25,7 @@
   "style": "style/index.css",
   "repository": {
     "type": "git",
-    "url": "https://github.com/rapidsai/gQuant.git"
+    "url": "https://github.com/rapidsai/greenflow.git"
   },
   "scripts": {
     "build": "jlpm run build:lib && jlpm run build:labextension:dev",
@@ -36,7 +36,7 @@
     "build:prod": "jlpm run build:lib && jlpm run build:labextension",
     "clean": "jlpm run clean:lib",
     "clean:all": "jlpm run clean:lib && jlpm run clean:labextension",
-    "clean:labextension": "rimraf gquantlab/labextension",
+    "clean:labextension": "rimraf greenflowlab/labextension",
     "clean:lib": "rimraf lib tsconfig.tsbuildinfo",
     "eslint": "eslint . --ext .ts,.tsx --fix",
     "eslint:check": "eslint . --ext .ts,.tsx",
@@ -93,11 +93,11 @@
           "pip"
         ],
         "base": {
-          "name": "gquantlab"
+          "name": "greenflowlab"
         }
       }
     },
     "extension": true,
-    "outputDir": "gquantlab/labextension"
+    "outputDir": "greenflowlab/labextension"
   }
 }
diff --git a/gQuant/gquantlab/pyproject.toml b/greenflowlab/pyproject.toml
similarity index 100%
rename from gQuant/gquantlab/pyproject.toml
rename to greenflowlab/pyproject.toml
diff --git a/gQuant/gquantlab/setup.py b/greenflowlab/setup.py
similarity index 90%
rename from gQuant/gquantlab/setup.py
rename to greenflowlab/setup.py
index 63dcc384..20986517 100644
--- a/gQuant/gquantlab/setup.py
+++ b/greenflowlab/setup.py
@@ -1,5 +1,5 @@
 """
-gquantlab setup
+greenflowlab setup
 """
 import json
 import os
@@ -13,7 +13,7 @@
 HERE = os.path.abspath(os.path.dirname(__file__))
 
 # The name of the project
-name="gquantlab"
+name="greenflowlab"
 
 # Get our version
 with open(os.path.join(HERE, 'package.json')) as f:
@@ -32,13 +32,13 @@
     ]
 }
 
-labext_name = "gquantlab"
+labext_name = "greenflowlab"
 
 data_files_spec = [
     ("share/jupyter/labextensions/%s" % labext_name, lab_path, "**"),
     ("share/jupyter/labextensions/%s" % labext_name, HERE, "install.json"),("etc/jupyter/jupyter_server_config.d",
-     "jupyter-config", "gquantlab.json"),
-     
+     "jupyter-config", "greenflowlab.json"),
+
 ]
 
 cmdclass = create_cmdclass("jsdeps",
@@ -63,9 +63,9 @@
 setup_args = dict(
     name=name,
     version=version,
-    url="https://github.com/rapidsai/gQuant.git",
+    url="https://github.com/NVIDIA/fsi-samples/tree/main/greenflowlab",
     author="{'name': 'Yi Dong', 'email': 'doyend@gmail.com'}",
-    description="gQuant Jupyterlab extension",
+    description="greenflow Jupyterlab extension",
     long_description= long_description,
     long_description_content_type="text/markdown",
     cmdclass= cmdclass,
diff --git a/gQuant/gquantlab/src/EditorPanel.ts b/greenflowlab/src/EditorPanel.ts
similarity index 95%
rename from gQuant/gquantlab/src/EditorPanel.ts
rename to greenflowlab/src/EditorPanel.ts
index 5e40b440..08caf281 100644
--- a/gQuant/gquantlab/src/EditorPanel.ts
+++ b/greenflowlab/src/EditorPanel.ts
@@ -16,7 +16,7 @@ export class EditorPanel extends StackedPanel {
     super();
     this._handler = handler;
     this.addClass(PANEL_CLASS);
-    this.id = 'gquant-editor-panel';
+    this.id = 'greenflow-editor-panel';
     this.title.label = 'Node Editor';
     this.title.closable = true;
 
diff --git a/gQuant/gquantlab/src/FilePathSelector.tsx b/greenflowlab/src/FilePathSelector.tsx
similarity index 100%
rename from gQuant/gquantlab/src/FilePathSelector.tsx
rename to greenflowlab/src/FilePathSelector.tsx
diff --git a/gQuant/gquantlab/src/chart.tsx b/greenflowlab/src/chart.tsx
similarity index 91%
rename from gQuant/gquantlab/src/chart.tsx
rename to greenflowlab/src/chart.tsx
index 941a0b4c..7f06dea1 100644
--- a/gQuant/gquantlab/src/chart.tsx
+++ b/greenflowlab/src/chart.tsx
@@ -1,6 +1,6 @@
 import React from 'react';
 import * as d3 from 'd3';
-import { requestAPI } from './gquantlab';
+import { requestAPI } from './greenflowlab';
 // import YAML from 'yaml';
 // import Moment from 'moment';
 
@@ -466,6 +466,62 @@ export class Chart extends React.Component<IChartProp, IChartState> {
     this.props.layout(this.props.nodes, this.props.edges, this.transform);
   }
 
+  private _fixDynamicPorts(state: IState): void {
+    const portNames: string[] = [];
+
+    state.nodes.forEach(d => {
+      d.inputs.forEach(e => {
+        if ('dynamic' in e) {
+          portNames.push(d.id + '.' + e.name);
+        }
+      })
+    });
+
+    if (portNames.length === 0) {
+      return;
+    }
+    // fixed the port and connections
+    state.edges.forEach((d: IEdge) => {
+      if (portNames.includes(d.to)) {
+        d.to =
+          d.to.split('.')[0] +
+          '.' +
+          d.from.split('.')[0] +
+          '@' +
+          d.from.split('.')[1];
+      }
+    });
+  }
+
+  private _fixOutputCollectorPorts(state: IState): void {
+    const index = state.nodes.findIndex(
+      (d: INode) => d.id === OUTPUT_COLLECTOR
+    );
+
+    if (index < 0) {
+      return;
+    }
+    const connectedEdges = state.edges.filter(
+      (d: IEdge) => d.to.split('.')[0] === OUTPUT_COLLECTOR
+    );
+    this.props.contentHandler.outputs = connectedEdges.map(
+      (d: IEdge) => d.from
+    );
+    const usedPortNames = connectedEdges.map((d: IEdge) => d.to.split('.')[1]);
+    const outputCollector = state.nodes[index];
+    // total
+    const totalNeed = usedPortNames.length + 1;
+    // reset the input ports
+    outputCollector.inputs = [];
+    for (let i = 0; i < totalNeed; i++) {
+      outputCollector.inputs.push({ name: `in${i + 1}`, type: [['any']] });
+    }
+    connectedEdges.forEach((d: IEdge, i: number) => {
+      d.to = `${OUTPUT_COLLECTOR}.in${i + 1}`;
+    });
+    //inputs: [ {name: "in1", type: ['any']}]
+  }
+
   /**
    * Update the charts, also send back to server to reculcate the columns,
    * types and UI schema etc
@@ -473,6 +529,8 @@ export class Chart extends React.Component<IChartProp, IChartState> {
    * @param edges
    */
   fullUpdate(nodes: INode[], edges: IEdge[]): void {
+    this._fixDynamicPorts({nodes: nodes, edges: edges, height:0, width:0});
+    this._fixOutputCollectorPorts({nodes: nodes, edges: edges, height:0, width:0});
     const content = exportWorkFlowNodes(nodes, edges);
     const jsonString = JSON.stringify(content);
     this._updateInputs(jsonString, nodes, edges);
diff --git a/gQuant/gquantlab/src/chartEngine.tsx b/greenflowlab/src/chartEngine.tsx
similarity index 89%
rename from gQuant/gquantlab/src/chartEngine.tsx
rename to greenflowlab/src/chartEngine.tsx
index aff523e8..beda52f6 100644
--- a/gQuant/gquantlab/src/chartEngine.tsx
+++ b/greenflowlab/src/chartEngine.tsx
@@ -167,7 +167,7 @@ export class ChartEngine extends React.Component<IProps, IState> {
       inputs.width ? inputs.width : DefaultWidth,
       inputs.height ? inputs.height : DefaultHeight
     );
-    // if the cache is empty and the height/width are determined, populate it so it can be shared between GquantViews
+    // if the cache is empty and the height/width are determined, populate it so it can be shared between GreenflowViews
     if (
       this.props.contentHandler.privateCopy &&
       this.props.contentHandler.privateCopy.get('cache') &&
@@ -429,68 +429,11 @@ export class ChartEngine extends React.Component<IProps, IState> {
     this.setState({ nodes: layoutNodes, edges: edges });
   }
 
-  private _fixDynamicPorts(state: IState): void {
-    const portNames: string[] = [];
-
-    state.nodes.forEach(d => {
-      d.inputs.forEach(e => {
-        if ('dynamic' in e) {
-          portNames.push(d.id + '.' + e.name);
-        }
-      })
-    });
-
-    if (portNames.length === 0) {
-      return;
-    }
-    // fixed the port and connections
-    state.edges.forEach((d: IEdge) => {
-      if (portNames.includes(d.to)) {
-        d.to =
-          d.to.split('.')[0] +
-          '.' +
-          d.from.split('.')[0] +
-          '@' +
-          d.from.split('.')[1];
-      }
-    });
-  }
-
-  private _fixOutputCollectorPorts(state: IState): void {
-    const index = state.nodes.findIndex(
-      (d: INode) => d.id === OUTPUT_COLLECTOR
-    );
-
-    if (index < 0) {
-      return;
-    }
-    const connectedEdges = state.edges.filter(
-      (d: IEdge) => d.to.split('.')[0] === OUTPUT_COLLECTOR
-    );
-    this.props.contentHandler.outputs = connectedEdges.map(
-      (d: IEdge) => d.from
-    );
-    const usedPortNames = connectedEdges.map((d: IEdge) => d.to.split('.')[1]);
-    const outputCollector = state.nodes[index];
-    // total
-    const totalNeed = usedPortNames.length + 1;
-    // reset the input ports
-    outputCollector.inputs = [];
-    for (let i = 0; i < totalNeed; i++) {
-      outputCollector.inputs.push({ name: `in${i + 1}`, type: [['any']] });
-    }
-    connectedEdges.forEach((d: IEdge, i: number) => {
-      d.to = `${OUTPUT_COLLECTOR}.in${i + 1}`;
-    });
-    //inputs: [ {name: "in1", type: ['any']}]
-  }
 
   updateWorkFlow(state: IState, update = true): void {
     if (state.edges && state.nodes) {
       //TODO need Need to think about how the logic to handle dynamic ports can be refactored in a generic manner in the future. 
       // Maybe a node could have a self state flag to indicate that it creates ports dynamically.
-      this._fixOutputCollectorPorts(state);
-      this._fixDynamicPorts(state);
       const output = exportWorkFlowNodes(state.nodes, state.edges);
       if (this.props.contentHandler.privateCopy) {
         this.props.contentHandler.privateCopy.set('value', output);
diff --git a/gQuant/gquantlab/src/commands.ts b/greenflowlab/src/commands.ts
similarity index 92%
rename from gQuant/gquantlab/src/commands.ts
rename to greenflowlab/src/commands.ts
index 7f6b5c3d..5d884656 100644
--- a/gQuant/gquantlab/src/commands.ts
+++ b/greenflowlab/src/commands.ts
@@ -21,38 +21,38 @@ import {
   addIcon
 } from '@jupyterlab/ui-components';
 import { IChartInput, INode, ContentHandler } from './document';
-import { requestAPI } from './gquantlab';
+import { requestAPI } from './greenflowlab';
 import { Widget } from '@lumino/widgets';
 import { EditorPanel } from './EditorPanel';
 import { toArray } from '@lumino/algorithm';
 import { INotebookTracker } from '@jupyterlab/notebook';
 import { MainView, OUTPUT_COLLECTOR, OUTPUT_TYPE } from './mainComponent';
 
-export const COMMAND_CONVERT_CELL_TO_FILE = 'gquant:convertCellToFile';
+export const COMMAND_CONVERT_CELL_TO_FILE = 'greenflow:convertCellToFile';
 export const COMMAND_TOOL_BAR_CONVERT_CELL_TO_FILE =
-  'gquant:toolbarConvertCellToFile';
-export const COMMAND_SELECT_FILE = 'gquant:selectTheFile';
-export const COMMAND_SELECT_PATH = 'gquant:selectThePath';
-export const COMMAND_OPEN_NEW_FILE = 'gquant:openNewFile';
-export const COMMAND_INCLUDE_NEW_FILE = 'gquant:includeNewFile';
-export const COMMAND_TOOL_BAR_INCLUDE_NEW_FILE = 'gquant:includeNewFile';
-export const COMMAND_TOOL_BAR_OPEN_NEW_FILE = 'gquant:toolbaropenTaskGraph';
-export const COMMAND_NEW_TASK_GRAPH = 'gquant:export-yaml';
-export const COMMAND_NEW_OPEN_TASK_GRAPH = 'gquant:create-new';
-export const COMMAND_OPEN_EDITOR = 'gquant:openeditor';
-export const COMMAND_OPEN_NEW_NOTEBOOK = 'gquant:openAnNewNotebook';
-export const COMMAND_ADD_NODE = 'gquant:addnode';
-export const COMMAND_RELAYOUT = 'gquant:reLayout';
-export const COMMAND_TOOL_BAR_RELAYOUT = 'gquant:toolbarReLayout';
-export const COMMAND_CHANGE_ASPECT_RATIO = 'gquant:aspect';
-export const COMMAND_EXECUTE = 'gquant:execute';
-export const COMMAND_CLEAN = 'gquant:cleanResult';
-export const COMMAND_TOOL_BAR_EXECUTE = 'gquant:toolbarexecute';
-export const COMMAND_TOOL_BAR_CLEAN = 'gquant:toolbarcleanResult';
-export const COMMAND_ADD_OUTPUT_COLLECTOR = 'gquant:addOutputCollector';
-export const COMMAND_OPEN_DOC_FORWARD = 'gquant:openDocumentForward';
-export const COMMAND_CREATE_CUST_NODE = 'gquant:createCustomizedNode';
-export const COMMAND_TOOL_BAR_SHOW_LOG = 'gquant:showLogBox';
+  'greenflow:toolbarConvertCellToFile';
+export const COMMAND_SELECT_FILE = 'greenflow:selectTheFile';
+export const COMMAND_SELECT_PATH = 'greenflow:selectThePath';
+export const COMMAND_OPEN_NEW_FILE = 'greenflow:openNewFile';
+export const COMMAND_INCLUDE_NEW_FILE = 'greenflow:includeNewFile';
+export const COMMAND_TOOL_BAR_INCLUDE_NEW_FILE = 'greenflow:includeNewFile';
+export const COMMAND_TOOL_BAR_OPEN_NEW_FILE = 'greenflow:toolbaropenTaskGraph';
+export const COMMAND_NEW_TASK_GRAPH = 'greenflow:export-yaml';
+export const COMMAND_NEW_OPEN_TASK_GRAPH = 'greenflow:create-new';
+export const COMMAND_OPEN_EDITOR = 'greenflow:openeditor';
+export const COMMAND_OPEN_NEW_NOTEBOOK = 'greenflow:openAnNewNotebook';
+export const COMMAND_ADD_NODE = 'greenflow:addnode';
+export const COMMAND_RELAYOUT = 'greenflow:reLayout';
+export const COMMAND_TOOL_BAR_RELAYOUT = 'greenflow:toolbarReLayout';
+export const COMMAND_CHANGE_ASPECT_RATIO = 'greenflow:aspect';
+export const COMMAND_EXECUTE = 'greenflow:execute';
+export const COMMAND_CLEAN = 'greenflow:cleanResult';
+export const COMMAND_TOOL_BAR_EXECUTE = 'greenflow:toolbarexecute';
+export const COMMAND_TOOL_BAR_CLEAN = 'greenflow:toolbarcleanResult';
+export const COMMAND_ADD_OUTPUT_COLLECTOR = 'greenflow:addOutputCollector';
+export const COMMAND_OPEN_DOC_FORWARD = 'greenflow:openDocumentForward';
+export const COMMAND_CREATE_CUST_NODE = 'greenflow:createCustomizedNode';
+export const COMMAND_TOOL_BAR_SHOW_LOG = 'greenflow:showLogBox';
 
 function uuidv4(): string {
   return Math.random()
@@ -66,7 +66,7 @@ export function setupCommands(
   getMainView: Function,
   browserFactory: IFileBrowserFactory,
   isCellVisible: any,
-  isGquantVisible: any,
+  isGreenflowVisible: any,
   notebookTracker: INotebookTracker
 ): void {
   // eslint-disable-next-line @typescript-eslint/explicit-function-return-type
@@ -127,7 +127,7 @@ export function setupCommands(
    * Whether there is an active graph editor
    */
   function isVisible(): boolean {
-    return isGquantVisible() || isCellVisible();
+    return isGreenflowVisible() || isCellVisible();
   }
 
   const convertToGQFile = async (cwd: string): Promise<void> => {
@@ -244,15 +244,15 @@ export function setupCommands(
         ext: '.py'
       });
       const confContent = JSON.stringify({ conf: args['conf'] }, null, 2);
-      const fileContent = `import gquant
-from gquant.dataframe_flow.portsSpecSchema import ConfSchema
+      const fileContent = `import greenflow
+from greenflow.dataframe_flow.portsSpecSchema import ConfSchema
 import json
 
 data = """${confContent}
 """
 
 
-class ${args['nodeName']}(gquant.plugin_nodes.util.CompositeNode):
+class ${args['nodeName']}(greenflow.plugin_nodes.util.CompositeNode):
     def __init__(self, *args, **kwargs):
         super().__init__(*args, **kwargs)
         # modify the self.conf to the one that this Composite node wants
@@ -343,7 +343,7 @@ class ${args['nodeName']}(gquant.plugin_nodes.util.CompositeNode):
           if (isCellVisible()) {
             const mainView = getMainView() as MainView;
             mainView.contentHandler.includeContent.emit(workflows);
-          } else if (isGquantVisible()) {
+          } else if (isGreenflowVisible()) {
             const mainView = app.shell.currentWidget as any;
             mainView.contentHandler.includeContent.emit(workflows);
           }
@@ -461,7 +461,7 @@ class ${args['nodeName']}(gquant.plugin_nodes.util.CompositeNode):
           mainView.contentHandler.privateCopy.get('value')
         );
       }
-      if (isGquantVisible()) {
+      if (isGreenflowVisible()) {
         mainView = app.shell.currentWidget as any;
         objStr = JSON.stringify(
           jsyaml.safeLoad(mainView.contentHandler.context.model.toString()),
@@ -477,7 +477,7 @@ client = Client(cluster)
 client
 `;
       const input2 = `import json
-from gquant.dataframe_flow import TaskGraph
+from greenflow.dataframe_flow import TaskGraph
 obj="""${objStr}"""
 taskList=json.loads(obj)
 taskGraph=TaskGraph(taskList)
@@ -486,7 +486,7 @@ taskGraph.draw()`;
       return createNewNotebook(input1, input2, input3);
       // Execute the statement
     },
-    isVisible: isGquantVisible
+    isVisible: isGreenflowVisible
   });
 
   commands.addCommand(COMMAND_ADD_NODE, {
@@ -598,7 +598,7 @@ taskGraph.draw()`;
           mainView.contentHandler.nodeAddedSignal.emit(output);
         }
       }
-      if (isGquantVisible()) {
+      if (isGreenflowVisible()) {
         const wdg = app.shell.currentWidget as any;
         wdg.contentHandler.nodeAddedSignal.emit(output);
       }
diff --git a/gQuant/gquantlab/src/connectionHandler.ts b/greenflowlab/src/connectionHandler.ts
similarity index 100%
rename from gQuant/gquantlab/src/connectionHandler.ts
rename to greenflowlab/src/connectionHandler.ts
diff --git a/gQuant/gquantlab/src/document.ts b/greenflowlab/src/document.ts
similarity index 96%
rename from gQuant/gquantlab/src/document.ts
rename to greenflowlab/src/document.ts
index bedb2f2b..129f974c 100644
--- a/gQuant/gquantlab/src/document.ts
+++ b/greenflowlab/src/document.ts
@@ -4,7 +4,7 @@ import {
   ABCWidgetFactory
 } from '@jupyterlab/docregistry';
 import { MainView } from './mainComponent';
-import { requestAPI } from './gquantlab';
+import { requestAPI } from './greenflowlab';
 import jsyaml from 'js-yaml';
 import { IEditorProp } from './nodeEditor';
 import { Signal } from '@lumino/signaling';
@@ -244,7 +244,7 @@ export interface IAllNodes {
   [key: string]: INode[];
 }
 
-export class GquantWidget extends DocumentWidget<MainAreaWidget<MainView>> {
+export class GreenflowWidget extends DocumentWidget<MainAreaWidget<MainView>> {
   constructor(options: DocumentWidget.IOptions<MainAreaWidget<MainView>>) {
     super({ ...options });
     this.context = options['context'];
@@ -262,8 +262,8 @@ export class GquantWidget extends DocumentWidget<MainAreaWidget<MainView>> {
 /**
  * A widget factory for drawio.
  */
-export class GquantFactory extends ABCWidgetFactory<
-  GquantWidget,
+export class GreenflowFactory extends ABCWidgetFactory<
+  GreenflowWidget,
   DocumentRegistry.IModel
 > {
   /**
@@ -273,11 +273,11 @@ export class GquantFactory extends ABCWidgetFactory<
     super(options);
   }
 
-  protected createNewWidget(context: DocumentRegistry.Context): GquantWidget {
+  protected createNewWidget(context: DocumentRegistry.Context): GreenflowWidget {
     const contentHandler = new ContentHandler(context);
     const mainView = new MainView(contentHandler);
     const widget = new MainAreaWidget<MainView>({ content: mainView });
     widget.toolbar.hide();
-    return new GquantWidget({ context, content: widget });
+    return new GreenflowWidget({ context, content: widget });
   }
 }
diff --git a/gQuant/gquantlab/src/dragHandler.ts b/greenflowlab/src/dragHandler.ts
similarity index 100%
rename from gQuant/gquantlab/src/dragHandler.ts
rename to greenflowlab/src/dragHandler.ts
diff --git a/gQuant/gquantlab/src/editorWidget.tsx b/greenflowlab/src/editorWidget.tsx
similarity index 95%
rename from gQuant/gquantlab/src/editorWidget.tsx
rename to greenflowlab/src/editorWidget.tsx
index c336c6c3..3108d551 100644
--- a/gQuant/gquantlab/src/editorWidget.tsx
+++ b/greenflowlab/src/editorWidget.tsx
@@ -26,8 +26,8 @@ export class EditorView extends ReactWidget {
   constructor(contentHandler: ContentHandler) {
     super();
     this._contentHandler = contentHandler;
-    this.id = 'jp-Gquant-NodeEditor';
-    this.addClass('jp-GQuant-first');
+    this.id = 'jp-Greenflow-NodeEditor';
+    this.addClass('jp-Greenflow-first');
   }
 
   protected render(): React.ReactElement<any> {
diff --git a/gQuant/gquantlab/src/eventHandler.ts b/greenflowlab/src/eventHandler.ts
similarity index 100%
rename from gQuant/gquantlab/src/eventHandler.ts
rename to greenflowlab/src/eventHandler.ts
diff --git a/gQuant/gquantlab/src/gquantlab.ts b/greenflowlab/src/greenflowlab.ts
similarity index 96%
rename from gQuant/gquantlab/src/gquantlab.ts
rename to greenflowlab/src/greenflowlab.ts
index f383b7ca..f16723d4 100644
--- a/gQuant/gquantlab/src/gquantlab.ts
+++ b/greenflowlab/src/greenflowlab.ts
@@ -17,7 +17,7 @@ export async function requestAPI<T>(
   const settings = ServerConnection.makeSettings();
   const requestUrl = URLExt.join(
     settings.baseUrl,
-    'gquantlab', // API Namespace
+    'greenflowlab', // API Namespace
     endPoint
   );
 
diff --git a/gQuant/gquantlab/src/index.ts b/greenflowlab/src/index.ts
similarity index 89%
rename from gQuant/gquantlab/src/index.ts
rename to greenflowlab/src/index.ts
index 446d6e31..2ce37288 100644
--- a/gQuant/gquantlab/src/index.ts
+++ b/greenflowlab/src/index.ts
@@ -15,7 +15,7 @@ import { Token, ReadonlyJSONObject } from '@lumino/coreutils';
 import { MODULE_NAME, MODULE_VERSION } from './version';
 import * as widgetExports from './widget';
 
-import { requestAPI } from './gquantlab';
+import { requestAPI } from './greenflowlab';
 
 import gqStr from '../style/gq.svg';
 import runStr from '../style/run.svg';
@@ -42,7 +42,7 @@ import {
   IWidgetTracker,
   WidgetTracker
 } from '@jupyterlab/apputils';
-import { GquantWidget, GquantFactory, IAllNodes } from './document';
+import { GreenflowWidget, GreenflowFactory, IAllNodes } from './document';
 import { Menu, Widget } from '@lumino/widgets';
 import { IJupyterWidgetRegistry } from '@jupyter-widgets/base';
 import { INotebookTracker } from '@jupyterlab/notebook';
@@ -72,27 +72,27 @@ import { registerDisplay } from './showType';
 // import { LabIcon } from '@jupyterlab/ui-components';
 // import { LabIcon } from '@jupyterlab/ui-components/lib/icon/labicon';
 
-//const WIDGET_VIEW_MIMETYPE = 'application/gquant-taskgraph';
+//const WIDGET_VIEW_MIMETYPE = 'application/greenflow-taskgraph';
 
-export const FACTORY = 'GQUANTLAB';
+export const FACTORY = 'GREENFLOWLAB';
 
-type IGQUANTTracker = IWidgetTracker<GquantWidget>;
+type IGREENFLOWTracker = IWidgetTracker<GreenflowWidget>;
 
-export const gqIcon = new LabIcon({ name: 'gquantlab:gq', svgstr: gqStr });
+export const gqIcon = new LabIcon({ name: 'greenflowlab:gq', svgstr: gqStr });
 
-export const runIcon = new LabIcon({ name: 'gquantlab:gqrun', svgstr: runStr });
+export const runIcon = new LabIcon({ name: 'greenflowlab:gqrun', svgstr: runStr });
 
 export const cleanIcon = new LabIcon({
-  name: 'gquantlab:gqclean',
+  name: 'greenflowlab:gqclean',
   svgstr: cleanStr
 });
 
 export const layoutIcon = new LabIcon({
-  name: 'gquantlab:layout',
+  name: 'greenflowlab:layout',
   svgstr: layoutStr
 });
 
-export const IGQUANTTracker = new Token<IGQUANTTracker>('gquant/tracki');
+export const IGREENFLOWTracker = new Token<IGREENFLOWTracker>('greenflow/tracki');
 
 function outputEnabled(outputArea: any): boolean {
   if (!outputArea) {
@@ -175,42 +175,42 @@ export async function setupContextMenu(
 ): Promise<Menu> {
   contextMenu.addItem({
     command: COMMAND_OPEN_EDITOR,
-    selector: '.jp-GQuant'
+    selector: '.jp-Greenflow'
   });
 
   contextMenu.addItem({
     command: 'docmanager:save',
-    selector: '.jp-GQuant'
+    selector: '.jp-Greenflow'
   });
 
   contextMenu.addItem({
     command: 'filebrowser:download',
-    selector: '.jp-GQuant'
+    selector: '.jp-Greenflow'
   });
 
   contextMenu.addItem({
     command: COMMAND_CONVERT_CELL_TO_FILE,
-    selector: '.jp-GQuant'
+    selector: '.jp-Greenflow'
   });
 
   contextMenu.addItem({
     command: COMMAND_OPEN_NEW_FILE,
-    selector: '.jp-GQuant'
+    selector: '.jp-Greenflow'
   });
 
   contextMenu.addItem({
     command: COMMAND_INCLUDE_NEW_FILE,
-    selector: '.jp-GQuant'
+    selector: '.jp-Greenflow'
   });
 
   contextMenu.addItem({
     command: COMMAND_RELAYOUT,
-    selector: '.jp-GQuant'
+    selector: '.jp-Greenflow'
   });
 
   contextMenu.addItem({
     type: 'separator',
-    selector: '.jp-GQuant'
+    selector: '.jp-Greenflow'
   });
 
   const addNodeMenu = new Menu({ commands });
@@ -279,32 +279,32 @@ export async function setupContextMenu(
   contextMenu.addItem({
     type: 'submenu',
     submenu: addNodeMenu,
-    selector: '.jp-GQuant'
+    selector: '.jp-Greenflow'
   });
 
   contextMenu.addItem({
     type: 'separator',
-    selector: '.jp-GQuant'
+    selector: '.jp-Greenflow'
   });
 
   contextMenu.addItem({
     command: COMMAND_EXECUTE,
-    selector: '.jp-GQuant'
+    selector: '.jp-Greenflow'
   });
 
   contextMenu.addItem({
     command: COMMAND_CLEAN,
-    selector: '.jp-GQuant'
+    selector: '.jp-Greenflow'
   });
 
   contextMenu.addItem({
     command: COMMAND_ADD_OUTPUT_COLLECTOR,
-    selector: '.jp-GQuant'
+    selector: '.jp-Greenflow'
   });
 
   contextMenu.addItem({
     type: 'separator',
-    selector: '.jp-GQuant'
+    selector: '.jp-Greenflow'
   });
 
   const submenu = new Menu({ commands });
@@ -321,7 +321,7 @@ export async function setupContextMenu(
   contextMenu.addItem({
     type: 'submenu',
     submenu: submenu,
-    selector: '.jp-GQuant'
+    selector: '.jp-Greenflow'
   });
 
   const plugins = requestAPI<any>('register_plugins');
@@ -342,10 +342,10 @@ export async function setupContextMenu(
 }
 
 /**
- * Initialization data for the gquantlab extension.
+ * Initialization data for the greenflowlab extension.
  */
 const extension: JupyterFrontEndPlugin<void> = {
-  id: 'gquantlab-extension',
+  id: 'greenflowlab-extension',
   requires: [
     IFileBrowserFactory,
     ILayoutRestorer,
@@ -358,8 +358,8 @@ const extension: JupyterFrontEndPlugin<void> = {
   activate: activateFun
 };
 
-const gquantWidget: JupyterFrontEndPlugin<void> = {
-  id: 'gquantlab',
+const greenflowWidget: JupyterFrontEndPlugin<void> = {
+  id: 'greenflowlab',
   requires: [IFileBrowserFactory, IJupyterWidgetRegistry],
   optional: [ILauncher],
   autoStart: true,
@@ -375,8 +375,8 @@ async function activateFun(
   notebookTracker: INotebookTracker,
   launcher: ILauncher | null
 ): Promise<void> {
-  const namespace = 'gquant';
-  const factory = new GquantFactory({
+  const namespace = 'greenflow';
+  const factory = new GreenflowFactory({
     name: FACTORY,
     fileTypes: ['gq.yaml'],
     defaultFor: ['gq.yaml'],
@@ -464,7 +464,7 @@ async function activateFun(
     }
   });
   const { commands } = app;
-  const tracker = new WidgetTracker<GquantWidget>({ namespace });
+  const tracker = new WidgetTracker<GreenflowWidget>({ namespace });
 
   function getMainView(): MainView {
     const currentWidget = app.shell.currentWidget;
@@ -521,11 +521,11 @@ async function activateFun(
   /**
    * Whether there is an active graph editor
    */
-  function isGquantVisible(): boolean {
-    const gquantVisible =
+  function isGreenflowVisible(): boolean {
+    const greenflowVisible =
       tracker.currentWidget !== null &&
       tracker.currentWidget === app.shell.currentWidget;
-    return gquantVisible;
+    return greenflowVisible;
   }
 
   // Handle state restoration.
@@ -562,7 +562,7 @@ async function activateFun(
     getMainView,
     browserFactory,
     isCellVisible,
-    isGquantVisible,
+    isGreenflowVisible,
     notebookTracker
   );
 
@@ -584,7 +584,7 @@ async function activateFun(
       [{ command: COMMAND_NEW_OPEN_TASK_GRAPH }],
       40
     );
-    //palette.addItem({ command: 'gquant:export-yaml', category: 'Notebook Operations', args: args });
+    //palette.addItem({ command: 'greenflow:export-yaml', category: 'Notebook Operations', args: args });
     menu.fileMenu.addGroup([{ command: COMMAND_NEW_TASK_GRAPH }], 40);
     menu.addMenu(await addNodeMenu, { rank: 40 });
   }
@@ -598,13 +598,13 @@ async function activateFun(
     });
     palette.addItem({
       command: COMMAND_RELAYOUT,
-      category: 'GquantLab',
+      category: 'GreenflowLab',
       args: args
     });
     [0.3, 0.5, 0.7, 1.0].forEach(d => {
       palette.addItem({
         command: COMMAND_CHANGE_ASPECT_RATIO,
-        category: 'GquantLab',
+        category: 'GreenflowLab',
         args: { aspect: d }
       });
     });
@@ -615,17 +615,17 @@ async function activateFun(
     });
     palette.addItem({
       command: COMMAND_CONVERT_CELL_TO_FILE,
-      category: 'GquantLab',
+      category: 'GreenflowLab',
       args: args
     });
     palette.addItem({
       command: COMMAND_CLEAN,
-      category: 'GquantLab',
+      category: 'GreenflowLab',
       args: args
     });
     palette.addItem({
       command: COMMAND_EXECUTE,
-      category: 'GquantLab',
+      category: 'GreenflowLab',
       args: args
     });
   }
@@ -633,12 +633,12 @@ async function activateFun(
   app.commands.addKeyBinding({
     command: COMMAND_RELAYOUT,
     keys: ['Alt A'],
-    selector: '.jp-GQuant'
+    selector: '.jp-Greenflow'
   });
   app.commands.addKeyBinding({
     command: COMMAND_ADD_OUTPUT_COLLECTOR,
     keys: ['Alt O'],
-    selector: '.jp-GQuant'
+    selector: '.jp-Greenflow'
   });
   //add key board shortcuts
   app.commands.addKeyBinding({
@@ -686,7 +686,7 @@ async function activateFun(
 
   app.contextMenu.addItem({
     command: COMMAND_OPEN_NEW_NOTEBOOK,
-    selector: '.jp-GQuant'
+    selector: '.jp-Greenflow'
   });
 }
 
@@ -696,8 +696,8 @@ function activateWidget(
   jupyterWidgetRegistry: IJupyterWidgetRegistry
 ): void {
   // passing the commands registry
-  widgetExports.GQuantView.apps = app;
-  widgetExports.GQuantView.browserFactory = browserFactory;
+  widgetExports.GreenflowView.apps = app;
+  widgetExports.GreenflowView.browserFactory = browserFactory;
   jupyterWidgetRegistry.registerWidget({
     name: MODULE_NAME,
     version: MODULE_VERSION,
@@ -708,5 +708,5 @@ function activateWidget(
 /**
  * Export the plugins as default.
  */
-const plugins: JupyterFrontEndPlugin<any>[] = [extension, gquantWidget];
+const plugins: JupyterFrontEndPlugin<any>[] = [extension, greenflowWidget];
 export default plugins;
diff --git a/gQuant/gquantlab/src/mainComponent.tsx b/greenflowlab/src/mainComponent.tsx
similarity index 96%
rename from gQuant/gquantlab/src/mainComponent.tsx
rename to greenflowlab/src/mainComponent.tsx
index 1cd0357b..3d8e8a56 100644
--- a/gQuant/gquantlab/src/mainComponent.tsx
+++ b/greenflowlab/src/mainComponent.tsx
@@ -38,7 +38,7 @@ export class MainView extends ReactWidget {
   }
 
   /**
-   * This is used exclusively to handle the gquantlab widget resize event in the cell output of the notebook
+   * This is used exclusively to handle the greenflowlab widget resize event in the cell output of the notebook
    *
    */
   public mimerenderWidgetUpdateSize(): void {
@@ -95,7 +95,7 @@ export class MainView extends ReactWidget {
   constructor(contentHandler: ContentHandler) {
     super();
     this._contentHandler = contentHandler;
-    this.addClass('jp-GQuant');
+    this.addClass('jp-Greenflow');
     this.firstTimeReSize = false;
   }
 
diff --git a/gQuant/gquantlab/src/nodeEditor.tsx b/greenflowlab/src/nodeEditor.tsx
similarity index 100%
rename from gQuant/gquantlab/src/nodeEditor.tsx
rename to greenflowlab/src/nodeEditor.tsx
diff --git a/gQuant/gquantlab/src/showType.ts b/greenflowlab/src/showType.ts
similarity index 100%
rename from gQuant/gquantlab/src/showType.ts
rename to greenflowlab/src/showType.ts
diff --git a/gQuant/gquantlab/src/svg.d.ts b/greenflowlab/src/svg.d.ts
similarity index 100%
rename from gQuant/gquantlab/src/svg.d.ts
rename to greenflowlab/src/svg.d.ts
diff --git a/gQuant/gquantlab/src/validator.ts b/greenflowlab/src/validator.ts
similarity index 100%
rename from gQuant/gquantlab/src/validator.ts
rename to greenflowlab/src/validator.ts
diff --git a/gQuant/gquantlab/src/version.ts b/greenflowlab/src/version.ts
similarity index 88%
rename from gQuant/gquantlab/src/version.ts
rename to greenflowlab/src/version.ts
index 5320f50d..08414c8c 100644
--- a/gQuant/gquantlab/src/version.ts
+++ b/greenflowlab/src/version.ts
@@ -10,4 +10,4 @@ export const MODULE_VERSION = '0.1.0';
 /*
  * The current package name.
  */
-export const MODULE_NAME = 'gquantlab';
+export const MODULE_NAME = 'greenflowlab';
diff --git a/gQuant/gquantlab/src/widget.ts b/greenflowlab/src/widget.ts
similarity index 89%
rename from gQuant/gquantlab/src/widget.ts
rename to greenflowlab/src/widget.ts
index 49402a54..f80977e3 100644
--- a/gQuant/gquantlab/src/widget.ts
+++ b/greenflowlab/src/widget.ts
@@ -3,7 +3,7 @@
 import { DOMWidgetModel, DOMWidgetView, ViewList } from '@jupyter-widgets/base';
 import * as widgets from '@jupyter-widgets/base';
 import { MODULE_NAME, MODULE_VERSION } from './version';
-import { requestAPI } from './gquantlab';
+import { requestAPI } from './greenflowlab';
 import { ContentHandler, INode } from './document';
 import { MainView } from './mainComponent';
 import { Panel, Widget } from '@lumino/widgets';
@@ -27,7 +27,7 @@ import { ContextMenuSvg } from '@jupyterlab/ui-components';
 import { setupContextMenu } from '.';
 import { Cell } from '@jupyterlab/cells';
 
-export class GQuantModel extends DOMWidgetModel {
+export class GreenflowModel extends DOMWidgetModel {
   static serializers = {
     ...DOMWidgetModel.serializers,
     sub: { deserialize: widgets.unpack_models }
@@ -36,27 +36,27 @@ export class GQuantModel extends DOMWidgetModel {
   defaults(): any {
     return {
       ...super.defaults(),
-      _model_name: GQuantModel.model_name,
-      _model_module: GQuantModel.model_module,
-      _model_module_version: GQuantModel.model_module_version,
-      _view_name: GQuantModel.view_name,
-      _view_module: GQuantModel.view_module,
-      _view_module_version: GQuantModel.view_module_version,
+      _model_name: GreenflowModel.model_name,
+      _model_module: GreenflowModel.model_module,
+      _model_module_version: GreenflowModel.model_module_version,
+      _view_name: GreenflowModel.view_name,
+      _view_module: GreenflowModel.view_module,
+      _view_module_version: GreenflowModel.view_module_version,
       value: [],
       cache: { nodes: [], edges: [] },
       sub: null
     };
   }
 
-  static model_name = 'GQuantModel';
+  static model_name = 'GreenflowModel';
   static model_module = MODULE_NAME;
   static model_module_version = MODULE_VERSION;
-  static view_name = 'GQuantView'; // Set to null if no view
+  static view_name = 'GreenflowView'; // Set to null if no view
   static view_module = MODULE_NAME; // Set to null if no view
   static view_module_version = MODULE_VERSION;
 }
 
-export class GQuantView extends DOMWidgetView {
+export class GreenflowView extends DOMWidgetView {
   static apps: JupyterFrontEnd = null;
   static browserFactory: IFileBrowserFactory = null;
   private _contentHandler: ContentHandler;
@@ -123,9 +123,9 @@ export class GQuantView extends DOMWidgetView {
     setupToolBarCommands(
       commands,
       this._contentHandler,
-      GQuantView.browserFactory,
-      GQuantView.apps.commands,
-      GQuantView.apps
+      GreenflowView.browserFactory,
+      GreenflowView.apps.commands,
+      GreenflowView.apps
     );
     this.addCommands(commands, toolBar);
     this.createContexMenu();
@@ -212,19 +212,19 @@ export class GQuantView extends DOMWidgetView {
   }
 
   createContexMenu(): void {
-    const commands = GQuantView.apps.commands;
+    const commands = GreenflowView.apps.commands;
     const contextMenu = new ContextMenuSvg({ commands });
     setupContextMenu(contextMenu, commands, null);
     const createOuputView = 'notebook:create-output-view';
 
     contextMenu.addItem({
       type: 'separator',
-      selector: '.jp-GQuant'
+      selector: '.jp-Greenflow'
     });
 
     contextMenu.addItem({
       command: createOuputView,
-      selector: '.jp-GQuant'
+      selector: '.jp-Greenflow'
     });
 
     this.pWidget.node.addEventListener('contextmenu', (event: MouseEvent) => {
diff --git a/gQuant/gquantlab/style/clean.svg b/greenflowlab/style/clean.svg
similarity index 100%
rename from gQuant/gquantlab/style/clean.svg
rename to greenflowlab/style/clean.svg
diff --git a/gQuant/gquantlab/style/editor.css b/greenflowlab/style/editor.css
similarity index 100%
rename from gQuant/gquantlab/style/editor.css
rename to greenflowlab/style/editor.css
diff --git a/gQuant/gquantlab/style/gq.svg b/greenflowlab/style/gq.svg
similarity index 100%
rename from gQuant/gquantlab/style/gq.svg
rename to greenflowlab/style/gq.svg
diff --git a/gQuant/gquantlab/style/index.css b/greenflowlab/style/index.css
similarity index 100%
rename from gQuant/gquantlab/style/index.css
rename to greenflowlab/style/index.css
diff --git a/gQuant/gquantlab/style/layout.svg b/greenflowlab/style/layout.svg
similarity index 100%
rename from gQuant/gquantlab/style/layout.svg
rename to greenflowlab/style/layout.svg
diff --git a/gQuant/gquantlab/style/run.svg b/greenflowlab/style/run.svg
similarity index 100%
rename from gQuant/gquantlab/style/run.svg
rename to greenflowlab/style/run.svg
diff --git a/gQuant/gquantlab/tsconfig.json b/greenflowlab/tsconfig.json
similarity index 88%
rename from gQuant/gquantlab/tsconfig.json
rename to greenflowlab/tsconfig.json
index f82a054e..e3b9080f 100644
--- a/gQuant/gquantlab/tsconfig.json
+++ b/greenflowlab/tsconfig.json
@@ -23,5 +23,5 @@
     "types": [],
     "noImplicitThis": false, 
   },
-  "include": ["src/*"] // , "src/gquant/components/*", "src/gquant/*"
+  "include": ["src/*"] // , "src/greenflow/components/*", "src/greenflow/*"
 }


Test patch:
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/backtest/__init__.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/backtest/__init__.py
similarity index 100%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/backtest/__init__.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/backtest/__init__.py
diff --git a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/backtest/simpleBackTest.py b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/backtest/simpleBackTest.py
similarity index 93%
rename from gQuant/plugins/rapids_plugin/gquant_rapids_plugin/backtest/simpleBackTest.py
rename to gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/backtest/simpleBackTest.py
index 0163094f..da2c9a84 100644
--- a/gQuant/plugins/rapids_plugin/gquant_rapids_plugin/backtest/simpleBackTest.py
+++ b/gQuant/plugins/gquant_plugin/greenflow_gquant_plugin/backtest/simpleBackTest.py
@@ -1,6 +1,6 @@
-from gquant.dataframe_flow import Node
+from greenflow.dataframe_flow import Node
 from .._port_type_node import _PortTypesMixin
-from gquant.dataframe_flow.portsSpecSchema import ConfSchema
+from greenflow.dataframe_flow.portsSpecSchema import ConfSchema
 
 
 class SimpleBackTestNode(Node, _PortTypesMixin):
diff --git a/gQuant/plugins/rapids_plugin/notebooks/images/portfolio/backtest.gif b/gQuant/plugins/gquant_plugin/notebooks/images/portfolio/backtest.gif
similarity index 100%
rename from gQuant/plugins/rapids_plugin/notebooks/images/portfolio/backtest.gif
rename to gQuant/plugins/gquant_plugin/notebooks/images/portfolio/backtest.gif
diff --git a/gQuant/plugins/rapids_plugin/notebooks/images/portfolio/clean_up_for_backtest.gif b/gQuant/plugins/gquant_plugin/notebooks/images/portfolio/clean_up_for_backtest.gif
similarity index 100%
rename from gQuant/plugins/rapids_plugin/notebooks/images/portfolio/clean_up_for_backtest.gif
rename to gQuant/plugins/gquant_plugin/notebooks/images/portfolio/clean_up_for_backtest.gif
diff --git a/gQuant/plugins/rapids_plugin/notebooks/mortgage_e2e_gquant/mortgage_common.py b/gQuant/plugins/gquant_plugin/notebooks/mortgage_e2e_gquant/mortgage_common.py
similarity index 93%
rename from gQuant/plugins/rapids_plugin/notebooks/mortgage_e2e_gquant/mortgage_common.py
rename to gQuant/plugins/gquant_plugin/notebooks/mortgage_e2e_gquant/mortgage_common.py
index 91ab8467..bec88cf1 100644
--- a/gQuant/plugins/rapids_plugin/notebooks/mortgage_e2e_gquant/mortgage_common.py
+++ b/gQuant/plugins/gquant_plugin/notebooks/mortgage_e2e_gquant/mortgage_common.py
@@ -7,7 +7,7 @@
 
 class MortgageTaskNames(object):
     '''Task names commonly used by scripts for naming tasks when creating
-    a gQuant mortgage workflow.
+    a greenflow mortgage workflow.
     '''
     load_acqdata_task_name = 'acqdata'
     load_perfdata_task_name = 'perfdata'
@@ -31,15 +31,15 @@ def mortgage_etl_workflow_def(
     '''Define the ETL (extract-transform-load) portion of the mortgage
     workflow.
 
-    :returns: gQuant task-spec list. Currently a simple list of dictionaries.
+    :returns: greenflow task-spec list. Currently a simple list of dictionaries.
         Each dict is a task-spec per TaskSpecSchema.
     :rtype: list
     '''
-    from gquant.dataframe_flow import TaskSpecSchema
+    from greenflow.dataframe_flow import TaskSpecSchema
 
     _basedir = os.path.dirname(__file__)
 
-    mortgage_lib_module = os.path.join(_basedir, 'mortgage_gquant_plugins.py')
+    mortgage_lib_module = os.path.join(_basedir, 'mortgage_greenflow_plugins.py')
 
     # print('CSVFILE_ACQDATA: ', csvfile_acqdata)
     # print('CSVFILE_PERFDATA: ', csvfile_perfdata)
@@ -139,14 +139,14 @@ def mortgage_etl_workflow_def(
     return task_spec_list
 
 
-def generate_mortgage_gquant_run_params_list(
+def generate_mortgage_greenflow_run_params_list(
         mortgage_data_path, start_year, end_year, part_count,
-        gquant_task_spec_list):
+        greenflow_task_spec_list):
     '''For the specified years and limit (part_count) to the number of files
     (performance files), generates a list of run_params_dict.
         run_params_dict = {
             'replace_spec': replace_spec,
-            'task_spec_list': gquant_task_spec_list,
+            'task_spec_list': greenflow_task_spec_list,
             'out_list': out_list
         }
 
@@ -169,7 +169,7 @@ def generate_mortgage_gquant_run_params_list(
         dataframe produced by the mortgage ETL workflow.
 
     Example:
-        from gquant.dataframe_flow import TaskGraph
+        from greenflow.dataframe_flow import TaskGraph
         task_spec_list = run_params_dict['task_spec_list']
         out_list = run_params_dict['out_list']
         replace_spec = run_params_dict['replace_spec']
@@ -191,7 +191,7 @@ def generate_mortgage_gquant_run_params_list(
         down i.e. for a given year and quarter you could have several file
         chunks: *.txt_0, *.txt_1, etc.
 
-    :param gquant_task_spec_list: Mortgage ETL workflow list of tasks. Refer to
+    :param greenflow_task_spec_list: Mortgage ETL workflow list of tasks. Refer to
         function mortgage_etl_workflow_def.
 
     :returns: list of run_params_dict
@@ -199,7 +199,7 @@ def generate_mortgage_gquant_run_params_list(
 
     '''
 
-    from gquant.dataframe_flow import TaskSpecSchema
+    from greenflow.dataframe_flow import TaskSpecSchema
 
     csvfile_names = os.path.join(mortgage_data_path, 'names.csv')
     acq_data_path = os.path.join(mortgage_data_path, 'acq')
@@ -245,7 +245,7 @@ def generate_mortgage_gquant_run_params_list(
             run_params_dict = {
                 # 'csvfile_perfdata': csvfile_perfdata,
                 'replace_spec': replace_spec,
-                'task_spec_list': gquant_task_spec_list,
+                'task_spec_list': greenflow_task_spec_list,
                 'out_list': out_list
             }
 
diff --git a/gQuant/plugins/rapids_plugin/notebooks/mortgage_e2e_gquant/mortgage_e2e_gquant.ipynb b/gQuant/plugins/gquant_plugin/notebooks/mortgage_e2e_gquant/mortgage_e2e_gquant.ipynb
similarity index 90%
rename from gQuant/plugins/rapids_plugin/notebooks/mortgage_e2e_gquant/mortgage_e2e_gquant.ipynb
rename to gQuant/plugins/gquant_plugin/notebooks/mortgage_e2e_gquant/mortgage_e2e_gquant.ipynb
index 30f18a5d..d749443a 100644
--- a/gQuant/plugins/rapids_plugin/notebooks/mortgage_e2e_gquant/mortgage_e2e_gquant.ipynb
+++ b/gQuant/plugins/gquant_plugin/notebooks/mortgage_e2e_gquant/mortgage_e2e_gquant.ipynb
@@ -6,7 +6,7 @@
    "source": [
     "# Mortgage Workflow\n",
     "\n",
-    "The original implementation can be found at the [rapidsai notebooks-extendeds](https://github.com/rapidsai/notebooks-extended/blob/462b3b9/intermediate_notebooks/E2E/mortgage/mortgage_e2e.ipynb) site. This notebook is a re-implementation using `gQuant`.\n",
+    "The original implementation can be found at the [rapidsai notebooks-extendeds](https://github.com/rapidsai/notebooks-extended/blob/462b3b9/intermediate_notebooks/E2E/mortgage/mortgage_e2e.ipynb) site. This notebook is a re-implementation using `greenflow`.\n",
     "\n",
     "## The Dataset\n",
     "The dataset used with this workflow is derived from [Fannie Mae’s Single-Family Loan Performance Data](http://www.fanniemae.com/portal/funding-the-market/data/loan-performance-data.html) with all rights reserved by Fannie Mae. This processed dataset is redistributed with permission and consent from Fannie Mae.\n",
@@ -68,9 +68,9 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "### Mortgage gQuant Workflow for ETL\n",
+    "### Mortgage greenflow Workflow for ETL\n",
     "\n",
-    "Two modules are provided with this notebook and should be in the same location (directory) as this notebook: `mortgage_common.py` and `mortgage_gquant_plugins.py`. The plugins module contains the individuals tasks for loading the mortgage data from csv (command separated) files into `cudf` dataframes and processing/transforming these dataframes for mortgage delinquency analysis. As an example the gQuant task to calculate loan delinquecy status period features is shown below."
+    "Two modules are provided with this notebook and should be in the same location (directory) as this notebook: `mortgage_common.py` and `mortgage_greenflow_plugins.py`. The plugins module contains the individuals tasks for loading the mortgage data from csv (command separated) files into `cudf` dataframes and processing/transforming these dataframes for mortgage delinquency analysis. As an example the greenflow task to calculate loan delinquecy status period features is shown below."
    ]
   },
   {
@@ -83,7 +83,7 @@
      "output_type": "stream",
      "text": [
       "class CreateEverFeatures(Node):\n",
-      "    '''gQuant task/node to calculate delinquecy status period features.\n",
+      "    '''greenflow task/node to calculate delinquecy status period features.\n",
       "    Refer to meta_setup method for the columns produced.\n",
       "    '''\n",
       "    def meta_setup(self):\n",
@@ -120,7 +120,7 @@
    ],
    "source": [
     "import inspect\n",
-    "from mortgage_gquant_plugins import CreateEverFeatures\n",
+    "from mortgage_greenflow_plugins import CreateEverFeatures\n",
     "\n",
     "print(inspect.getsource(CreateEverFeatures))"
    ]
@@ -129,7 +129,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "We create a worfklow by defining tasks and specifying their configuration (parameters) and inputs (for basics tutorial on gQuant refer to [01_tutorial.ipynb](https://github.com/rapidsai/gQuant/blob/master/notebooks/01_tutorial.ipynb) and custom plugins [05_customize_nodes.ipynb](https://github.com/rapidsai/gQuant/blob/master/notebooks/05_customize_nodes.ipynb)). The workflow to calculate the mortgage features and delinquecy is defined in the `mortgage_etl_workflow_def` function in `mortgage_common` module. Its code is shown below."
+    "We create a worfklow by defining tasks and specifying their configuration (parameters) and inputs (for basics tutorial on greenflow refer to [01_tutorial.ipynb](https://github.com/rapidsai/greenflow/blob/master/notebooks/01_tutorial.ipynb) and custom plugins [05_customize_nodes.ipynb](https://github.com/rapidsai/greenflow/blob/master/notebooks/05_customize_nodes.ipynb)). The workflow to calculate the mortgage features and delinquecy is defined in the `mortgage_etl_workflow_def` function in `mortgage_common` module. Its code is shown below."
    ]
   },
   {
@@ -147,15 +147,15 @@
       "    '''Define the ETL (extract-transform-load) portion of the mortgage\n",
       "    workflow.\n",
       "\n",
-      "    :returns: gQuant task-spec list. Currently a simple list of dictionaries.\n",
+      "    :returns: greenflow task-spec list. Currently a simple list of dictionaries.\n",
       "        Each dict is a task-spec per TaskSpecSchema.\n",
       "    :rtype: list\n",
       "    '''\n",
-      "    from gquant.dataframe_flow import TaskSpecSchema\n",
+      "    from greenflow.dataframe_flow import TaskSpecSchema\n",
       "\n",
       "    _basedir = os.path.dirname(__file__)\n",
       "\n",
-      "    mortgage_lib_module = os.path.join(_basedir, 'mortgage_gquant_plugins.py')\n",
+      "    mortgage_lib_module = os.path.join(_basedir, 'mortgage_greenflow_plugins.py')\n",
       "\n",
       "    # print('CSVFILE_ACQDATA: ', csvfile_acqdata)\n",
       "    # print('CSVFILE_PERFDATA: ', csvfile_perfdata)\n",
@@ -288,7 +288,7 @@
     }
    ],
    "source": [
-    "from gquant.dataframe_flow import TaskGraph\n",
+    "from greenflow.dataframe_flow import TaskGraph\n",
     "\n",
     "task_spec_list = mortgage_etl_workflow_def()\n",
     "task_graph = TaskGraph(task_spec_list)\n",
@@ -311,8 +311,8 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "mortgage_gquant_plugins:INFO: LOADING: ./mortgage_data/perf/Performance_2000Q1.txt_0\n",
-      "mortgage_gquant_plugins:INFO: LOADING: ./mortgage_data/acq/Acquisition_2000Q1.txt\n"
+      "mortgage_greenflow_plugins:INFO: LOADING: ./mortgage_data/perf/Performance_2000Q1.txt_0\n",
+      "mortgage_greenflow_plugins:INFO: LOADING: ./mortgage_data/acq/Acquisition_2000Q1.txt\n"
      ]
     },
     {
@@ -326,7 +326,7 @@
    ],
    "source": [
     "import os\n",
-    "from gquant.dataframe_flow import TaskGraph\n",
+    "from greenflow.dataframe_flow import TaskGraph\n",
     "from mortgage_common import (\n",
     "    mortgage_etl_workflow_def, MortgageTaskNames)\n",
     "\n",
@@ -342,11 +342,11 @@
     "csvfile_acqdata = os.path.join(acq_data_path, 'Acquisition_2000Q1.txt')\n",
     "csvfile_perfdata = os.path.join(perf_data_path, 'Performance_2000Q1.txt_0')\n",
     "\n",
-    "gquant_task_spec_list = mortgage_etl_workflow_def(\n",
+    "greenflow_task_spec_list = mortgage_etl_workflow_def(\n",
     "    csvfile_names, csvfile_acqdata, csvfile_perfdata)\n",
     "out_list = [MortgageTaskNames.final_perf_acq_task_name]\n",
     "\n",
-    "task_graph = TaskGraph(gquant_task_spec_list)\n",
+    "task_graph = TaskGraph(greenflow_task_spec_list)\n",
     "\n",
     "(final_perf_acq_df,) = task_graph.run(out_list)"
    ]
@@ -502,7 +502,7 @@
       "        }\n",
       "      }\n",
       "    },\n",
-      "    \"task_spec_list\": \"This is gquant_task_spec_list\",\n",
+      "    \"task_spec_list\": \"This is greenflow_task_spec_list\",\n",
       "    \"out_list\": [\n",
       "      \"final_perf_acq_df\"\n",
       "    ]\n",
@@ -521,7 +521,7 @@
       "        }\n",
       "      }\n",
       "    },\n",
-      "    \"task_spec_list\": \"This is gquant_task_spec_list\",\n",
+      "    \"task_spec_list\": \"This is greenflow_task_spec_list\",\n",
       "    \"out_list\": [\n",
       "      \"final_perf_acq_df\"\n",
       "    ]\n",
@@ -543,10 +543,10 @@
    "source": [
     "import os\n",
     "import json\n",
-    "from gquant.dataframe_flow import (TaskSpecSchema, TaskGraph)\n",
+    "from greenflow.dataframe_flow import (TaskSpecSchema, TaskGraph)\n",
     "\n",
     "from mortgage_common import (\n",
-    "    mortgage_etl_workflow_def, generate_mortgage_gquant_run_params_list,\n",
+    "    mortgage_etl_workflow_def, generate_mortgage_greenflow_run_params_list,\n",
     "    MortgageTaskNames)\n",
     "\n",
     "start_year = 2000\n",
@@ -557,13 +557,13 @@
     "# ADJUST YOUR MORTGAGE DATAPATH IF DIFFERENT\n",
     "mortgage_data_path = './mortgage_data'\n",
     "\n",
-    "gquant_task_spec_list = mortgage_etl_workflow_def()\n",
-    "mortgage_run_params_dict_list = generate_mortgage_gquant_run_params_list(\n",
-    "    mortgage_data_path, start_year, end_year, part_count, gquant_task_spec_list)\n",
+    "greenflow_task_spec_list = mortgage_etl_workflow_def()\n",
+    "mortgage_run_params_dict_list = generate_mortgage_greenflow_run_params_list(\n",
+    "    mortgage_data_path, start_year, end_year, part_count, greenflow_task_spec_list)\n",
     "\n",
     "mortgage_run_params_dict_list_for_printing = mortgage_run_params_dict_list.copy()\n",
     "for iparams_dict in mortgage_run_params_dict_list_for_printing:\n",
-    "    iparams_dict['task_spec_list'] = 'This is gquant_task_spec_list'\n",
+    "    iparams_dict['task_spec_list'] = 'This is greenflow_task_spec_list'\n",
     "\n",
     "print('Parameters configuration for Mortgage Workflow Runner '\n",
     "      '(shortened to 2 files)')\n",
@@ -574,11 +574,11 @@
     "part_count = 12  # the number of data files to train against\n",
     "# part_count = 4  # the number of data files to train against\n",
     "\n",
-    "mortgage_run_params_dict_list = generate_mortgage_gquant_run_params_list(\n",
-    "    mortgage_data_path, start_year, end_year, part_count, gquant_task_spec_list)\n",
+    "mortgage_run_params_dict_list = generate_mortgage_greenflow_run_params_list(\n",
+    "    mortgage_data_path, start_year, end_year, part_count, greenflow_task_spec_list)\n",
     "\n",
     "_basedir = os.path.abspath('')  # path of current notebook\n",
-    "mortgage_lib_module = os.path.join(_basedir, 'mortgage_gquant_plugins.py')\n",
+    "mortgage_lib_module = os.path.join(_basedir, 'mortgage_greenflow_plugins.py')\n",
     "\n",
     "mortgage_workflow_runner_task = {\n",
     "    TaskSpecSchema.task_id:\n",
@@ -640,9 +640,9 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "Refer to `MortgageWorkflowRunner` and `XgbMortgageTrainer` in the `mortgage_gquant_plugins.py` module for the details of the mortage workflow runner and xgboost trainer tasks.\n",
+    "Refer to `MortgageWorkflowRunner` and `XgbMortgageTrainer` in the `mortgage_greenflow_plugins.py` module for the details of the mortage workflow runner and xgboost trainer tasks.\n",
     "\n",
-    "Note the novel manner in which gQuant is used. The `mortgage_workflow_runner` actually runs another gQuant workflow defined by `mortgage_etl_workflow_def()` for each set of acquisition and performance csv files. The output from `mortgage_workflow_runner` is a pandas dataframe (concatenated from processing multiple `final_per_acq_df` dataframes). The `xgb_trainer` is used in an atypical manner. It does not output a dataframe, instead it produces an XGBoost booster. Even though we mostly focus on dataframe flow with gQuant, if the tasks input/output something beside dataframes then gQuant will still run the workflow. When a task does not output a dataframe then gQuant does not perform columns validation. Currently, the responsibility is on the end-user to validate or make sure the input/output types match for the wired non-dataframe tasks. Above only the `xgb_trainer` task's output is not a datframe.\n",
+    "Note the novel manner in which greenflow is used. The `mortgage_workflow_runner` actually runs another greenflow workflow defined by `mortgage_etl_workflow_def()` for each set of acquisition and performance csv files. The output from `mortgage_workflow_runner` is a pandas dataframe (concatenated from processing multiple `final_per_acq_df` dataframes). The `xgb_trainer` is used in an atypical manner. It does not output a dataframe, instead it produces an XGBoost booster. Even though we mostly focus on dataframe flow with greenflow, if the tasks input/output something beside dataframes then greenflow will still run the workflow. When a task does not output a dataframe then greenflow does not perform columns validation. Currently, the responsibility is on the end-user to validate or make sure the input/output types match for the wired non-dataframe tasks. Above only the `xgb_trainer` task's output is not a datframe.\n",
     "\n",
     "We can run the workflow now and obtain the XGBoost trained booster. You can monitor the GPU utilization in a terminal using `nvidia-smi`. On my node I have 125GB of host RAM and two 16GB GPU cards. I am able to process 12 dataframes. If I load more than 12 dataframes, then the workflow crashes during DMatrix creation due to out of memory error. The DMatrix instantiation seems to inflate the data temporarily and I run out of memory on the host. In a terminal you can watch with nvidia-smi the utilization on the GPU. During XGBoost training I typically observe:\n",
     "\n",
@@ -671,9 +671,9 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "mortgage_gquant_plugins:INFO: TRYING TO LOAD 12 FRAMES\n",
-      "mortgage_gquant_plugins:INFO: LOADING: ./mortgage_data/perf/Performance_2000Q1.txt_0\n",
-      "mortgage_gquant_plugins:INFO: LOADING: ./mortgage_data/acq/Acquisition_2000Q1.txt\n"
+      "mortgage_greenflow_plugins:INFO: TRYING TO LOAD 12 FRAMES\n",
+      "mortgage_greenflow_plugins:INFO: LOADING: ./mortgage_data/perf/Performance_2000Q1.txt_0\n",
+      "mortgage_greenflow_plugins:INFO: LOADING: ./mortgage_data/acq/Acquisition_2000Q1.txt\n"
      ]
     },
     {
@@ -688,54 +688,54 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "mortgage_gquant_plugins:INFO: LOADED 1 FRAMES\n",
-      "mortgage_gquant_plugins:INFO: LOADING: ./mortgage_data/perf/Performance_2000Q2.txt_0\n",
-      "mortgage_gquant_plugins:INFO: LOADING: ./mortgage_data/acq/Acquisition_2000Q2.txt\n",
-      "mortgage_gquant_plugins:INFO: LOADED 2 FRAMES\n",
-      "mortgage_gquant_plugins:INFO: LOADING: ./mortgage_data/perf/Performance_2000Q3.txt_0\n",
-      "mortgage_gquant_plugins:INFO: LOADING: ./mortgage_data/acq/Acquisition_2000Q3.txt\n",
-      "mortgage_gquant_plugins:INFO: LOADED 3 FRAMES\n",
-      "mortgage_gquant_plugins:INFO: LOADING: ./mortgage_data/perf/Performance_2000Q4.txt_1\n",
-      "mortgage_gquant_plugins:INFO: LOADING: ./mortgage_data/acq/Acquisition_2000Q4.txt\n",
-      "mortgage_gquant_plugins:INFO: LOADED 4 FRAMES\n",
-      "mortgage_gquant_plugins:INFO: LOADING: ./mortgage_data/perf/Performance_2000Q4.txt_0\n",
-      "mortgage_gquant_plugins:INFO: LOADING: ./mortgage_data/acq/Acquisition_2000Q4.txt\n",
-      "mortgage_gquant_plugins:INFO: LOADED 5 FRAMES\n",
-      "mortgage_gquant_plugins:INFO: LOADING: ./mortgage_data/perf/Performance_2001Q1.txt_1\n",
-      "mortgage_gquant_plugins:INFO: LOADING: ./mortgage_data/acq/Acquisition_2001Q1.txt\n",
-      "mortgage_gquant_plugins:INFO: LOADED 6 FRAMES\n",
-      "mortgage_gquant_plugins:INFO: LOADING: ./mortgage_data/perf/Performance_2001Q1.txt_0\n",
-      "mortgage_gquant_plugins:INFO: LOADING: ./mortgage_data/acq/Acquisition_2001Q1.txt\n",
-      "mortgage_gquant_plugins:INFO: LOADED 7 FRAMES\n",
-      "mortgage_gquant_plugins:INFO: LOADING: ./mortgage_data/perf/Performance_2001Q2.txt_1_1\n",
-      "mortgage_gquant_plugins:INFO: LOADING: ./mortgage_data/acq/Acquisition_2001Q2.txt\n",
-      "mortgage_gquant_plugins:INFO: LOADED 8 FRAMES\n",
-      "mortgage_gquant_plugins:INFO: LOADING: ./mortgage_data/perf/Performance_2001Q2.txt_1_0\n",
-      "mortgage_gquant_plugins:INFO: LOADING: ./mortgage_data/acq/Acquisition_2001Q2.txt\n",
-      "mortgage_gquant_plugins:INFO: LOADED 9 FRAMES\n",
-      "mortgage_gquant_plugins:INFO: LOADING: ./mortgage_data/perf/Performance_2001Q2.txt_0_1\n",
-      "mortgage_gquant_plugins:INFO: LOADING: ./mortgage_data/acq/Acquisition_2001Q2.txt\n",
-      "mortgage_gquant_plugins:INFO: LOADED 10 FRAMES\n",
-      "mortgage_gquant_plugins:INFO: LOADING: ./mortgage_data/perf/Performance_2001Q2.txt_0_0\n",
-      "mortgage_gquant_plugins:INFO: LOADING: ./mortgage_data/acq/Acquisition_2001Q2.txt\n",
-      "mortgage_gquant_plugins:INFO: LOADED 11 FRAMES\n",
-      "mortgage_gquant_plugins:INFO: LOADING: ./mortgage_data/perf/Performance_2001Q3.txt_1_1\n",
-      "mortgage_gquant_plugins:INFO: LOADING: ./mortgage_data/acq/Acquisition_2001Q3.txt\n",
-      "mortgage_gquant_plugins:INFO: LOADED 12 FRAMES\n",
-      "mortgage_gquant_plugins:INFO: HOST RAM (MB) TOTAL 257852; USED 19401; FREE 205546\n",
-      "mortgage_gquant_plugins:INFO: RUN PYTHON GARBAGE COLLECTION TO MAYBE CLEAR CPU AND GPU MEMORY\n",
-      "mortgage_gquant_plugins:INFO: HOST RAM (MB) TOTAL 257852; USED 19401; FREE 205546\n",
-      "mortgage_gquant_plugins:INFO: USING ARROW\n",
-      "mortgage_gquant_plugins:INFO: ARROW TO PANDAS\n",
-      "mortgage_gquant_plugins:INFO: HOST RAM (MB) TOTAL 257852; USED 34611; FREE 190336\n",
-      "mortgage_gquant_plugins:INFO: JUST BEFORE DMATRIX\n",
-      "mortgage_gquant_plugins:INFO: HOST RAM (MB) TOTAL 257852; USED 19417; FREE 205530\n",
-      "mortgage_gquant_plugins:INFO: CREATING DMATRIX\n",
-      "mortgage_gquant_plugins:INFO: JUST AFTER DMATRIX\n",
-      "mortgage_gquant_plugins:INFO: HOST RAM (MB) TOTAL 257852; USED 50655; FREE 174292\n",
-      "mortgage_gquant_plugins:INFO: CLEAR MEMORY JUST BEFORE XGBOOST TRAINING\n",
-      "mortgage_gquant_plugins:INFO: HOST RAM (MB) TOTAL 257852; USED 50652; FREE 174295\n",
-      "mortgage_gquant_plugins:INFO: RUNNING XGBOOST TRAINING\n",
+      "mortgage_greenflow_plugins:INFO: LOADED 1 FRAMES\n",
+      "mortgage_greenflow_plugins:INFO: LOADING: ./mortgage_data/perf/Performance_2000Q2.txt_0\n",
+      "mortgage_greenflow_plugins:INFO: LOADING: ./mortgage_data/acq/Acquisition_2000Q2.txt\n",
+      "mortgage_greenflow_plugins:INFO: LOADED 2 FRAMES\n",
+      "mortgage_greenflow_plugins:INFO: LOADING: ./mortgage_data/perf/Performance_2000Q3.txt_0\n",
+      "mortgage_greenflow_plugins:INFO: LOADING: ./mortgage_data/acq/Acquisition_2000Q3.txt\n",
+      "mortgage_greenflow_plugins:INFO: LOADED 3 FRAMES\n",
+      "mortgage_greenflow_plugins:INFO: LOADING: ./mortgage_data/perf/Performance_2000Q4.txt_1\n",
+      "mortgage_greenflow_plugins:INFO: LOADING: ./mortgage_data/acq/Acquisition_2000Q4.txt\n",
+      "mortgage_greenflow_plugins:INFO: LOADED 4 FRAMES\n",
+      "mortgage_greenflow_plugins:INFO: LOADING: ./mortgage_data/perf/Performance_2000Q4.txt_0\n",
+      "mortgage_greenflow_plugins:INFO: LOADING: ./mortgage_data/acq/Acquisition_2000Q4.txt\n",
+      "mortgage_greenflow_plugins:INFO: LOADED 5 FRAMES\n",
+      "mortgage_greenflow_plugins:INFO: LOADING: ./mortgage_data/perf/Performance_2001Q1.txt_1\n",
+      "mortgage_greenflow_plugins:INFO: LOADING: ./mortgage_data/acq/Acquisition_2001Q1.txt\n",
+      "mortgage_greenflow_plugins:INFO: LOADED 6 FRAMES\n",
+      "mortgage_greenflow_plugins:INFO: LOADING: ./mortgage_data/perf/Performance_2001Q1.txt_0\n",
+      "mortgage_greenflow_plugins:INFO: LOADING: ./mortgage_data/acq/Acquisition_2001Q1.txt\n",
+      "mortgage_greenflow_plugins:INFO: LOADED 7 FRAMES\n",
+      "mortgage_greenflow_plugins:INFO: LOADING: ./mortgage_data/perf/Performance_2001Q2.txt_1_1\n",
+      "mortgage_greenflow_plugins:INFO: LOADING: ./mortgage_data/acq/Acquisition_2001Q2.txt\n",
+      "mortgage_greenflow_plugins:INFO: LOADED 8 FRAMES\n",
+      "mortgage_greenflow_plugins:INFO: LOADING: ./mortgage_data/perf/Performance_2001Q2.txt_1_0\n",
+      "mortgage_greenflow_plugins:INFO: LOADING: ./mortgage_data/acq/Acquisition_2001Q2.txt\n",
+      "mortgage_greenflow_plugins:INFO: LOADED 9 FRAMES\n",
+      "mortgage_greenflow_plugins:INFO: LOADING: ./mortgage_data/perf/Performance_2001Q2.txt_0_1\n",
+      "mortgage_greenflow_plugins:INFO: LOADING: ./mortgage_data/acq/Acquisition_2001Q2.txt\n",
+      "mortgage_greenflow_plugins:INFO: LOADED 10 FRAMES\n",
+      "mortgage_greenflow_plugins:INFO: LOADING: ./mortgage_data/perf/Performance_2001Q2.txt_0_0\n",
+      "mortgage_greenflow_plugins:INFO: LOADING: ./mortgage_data/acq/Acquisition_2001Q2.txt\n",
+      "mortgage_greenflow_plugins:INFO: LOADED 11 FRAMES\n",
+      "mortgage_greenflow_plugins:INFO: LOADING: ./mortgage_data/perf/Performance_2001Q3.txt_1_1\n",
+      "mortgage_greenflow_plugins:INFO: LOADING: ./mortgage_data/acq/Acquisition_2001Q3.txt\n",
+      "mortgage_greenflow_plugins:INFO: LOADED 12 FRAMES\n",
+      "mortgage_greenflow_plugins:INFO: HOST RAM (MB) TOTAL 257852; USED 19401; FREE 205546\n",
+      "mortgage_greenflow_plugins:INFO: RUN PYTHON GARBAGE COLLECTION TO MAYBE CLEAR CPU AND GPU MEMORY\n",
+      "mortgage_greenflow_plugins:INFO: HOST RAM (MB) TOTAL 257852; USED 19401; FREE 205546\n",
+      "mortgage_greenflow_plugins:INFO: USING ARROW\n",
+      "mortgage_greenflow_plugins:INFO: ARROW TO PANDAS\n",
+      "mortgage_greenflow_plugins:INFO: HOST RAM (MB) TOTAL 257852; USED 34611; FREE 190336\n",
+      "mortgage_greenflow_plugins:INFO: JUST BEFORE DMATRIX\n",
+      "mortgage_greenflow_plugins:INFO: HOST RAM (MB) TOTAL 257852; USED 19417; FREE 205530\n",
+      "mortgage_greenflow_plugins:INFO: CREATING DMATRIX\n",
+      "mortgage_greenflow_plugins:INFO: JUST AFTER DMATRIX\n",
+      "mortgage_greenflow_plugins:INFO: HOST RAM (MB) TOTAL 257852; USED 50655; FREE 174292\n",
+      "mortgage_greenflow_plugins:INFO: CLEAR MEMORY JUST BEFORE XGBOOST TRAINING\n",
+      "mortgage_greenflow_plugins:INFO: HOST RAM (MB) TOTAL 257852; USED 50652; FREE 174295\n",
+      "mortgage_greenflow_plugins:INFO: RUNNING XGBOOST TRAINING\n",
       "[02:37:08] WARNING: /conda/conda-bld/xgboost_1585677082603/work/include/xgboost/generic_parameters.h:36: \n",
       "n_gpus: \n",
       "\tDeprecated. Single process multi-GPU training is no longer supported.\n",
@@ -1002,7 +1002,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "Now we define the gQuant workflow similar to how we did it before in the non-distributed case except we will use tasks `DaskMortgageWorkflowRunner` and `DaskXgbMortgageTrainer` in the `mortgage_gquant_plugins.py` module. Refer to these tasks in the `mortgage_gquant_plugins.py` for code details."
+    "Now we define the greenflow workflow similar to how we did it before in the non-distributed case except we will use tasks `DaskMortgageWorkflowRunner` and `DaskXgbMortgageTrainer` in the `mortgage_greenflow_plugins.py` module. Refer to these tasks in the `mortgage_greenflow_plugins.py` for code details."
    ]
   },
   {
@@ -1023,9 +1023,9 @@
    ],
    "source": [
     "import os\n",
-    "from gquant.dataframe_flow import (TaskSpecSchema, TaskGraph)\n",
+    "from greenflow.dataframe_flow import (TaskSpecSchema, TaskGraph)\n",
     "from mortgage_common import (\n",
-    "    mortgage_etl_workflow_def, generate_mortgage_gquant_run_params_list,\n",
+    "    mortgage_etl_workflow_def, generate_mortgage_greenflow_run_params_list,\n",
     "    MortgageTaskNames)\n",
     "\n",
     "\n",
@@ -1033,7 +1033,7 @@
     "mortgage_data_path = './mortgage_data'\n",
     "\n",
     "# Using some default csv files for testing.\n",
-    "gquant_task_spec_list = mortgage_etl_workflow_def()\n",
+    "greenflow_task_spec_list = mortgage_etl_workflow_def()\n",
     "\n",
     "start_year = 2000\n",
     "end_year = 2001  # end_year is inclusive\n",
@@ -1055,14 +1055,14 @@
     "# Clean up intermediate dataframes in the xgboost training task.\n",
     "delete_dataframes = True\n",
     "\n",
-    "mortgage_run_params_dict_list = generate_mortgage_gquant_run_params_list(\n",
-    "    mortgage_data_path, start_year, end_year, part_count, gquant_task_spec_list)\n",
+    "mortgage_run_params_dict_list = generate_mortgage_greenflow_run_params_list(\n",
+    "    mortgage_data_path, start_year, end_year, part_count, greenflow_task_spec_list)\n",
     "\n",
     "_basedir = os.path.abspath('')  # path of current notebook\n",
-    "mortgage_lib_module = os.path.join(_basedir, 'mortgage_gquant_plugins.py')\n",
+    "mortgage_lib_module = os.path.join(_basedir, 'mortgage_greenflow_plugins.py')\n",
     "\n",
     "# filter_dask_logger is primarily for displaying the log in the jupyter\n",
-    "# notebook. The dask distributed logger is used by gQuant mortgage tasks\n",
+    "# notebook. The dask distributed logger is used by greenflow mortgage tasks\n",
     "# when running on dask workers.\n",
     "filter_dask_logger = True\n",
     "\n",
@@ -1153,77 +1153,77 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "mortgage_gquant_plugins:INFO: TRYING TO LOAD 18 FRAMES\n",
-      "mortgage_gquant_plugins:INFO: SPLIT MORTGAGE DATA INTO 4 CHUNKS AMONGST 4 WORKERS\n",
-      "mortgage_gquant_plugins:INFO: 02:41:10.089 distributed.worker.mortgage_workflow_runner:INFO: WORKER 2 RUNNING MORTGAGE gQUANT DataframeFlow\n",
-      "mortgage_gquant_plugins:INFO: 02:41:10.089 distributed.worker.mortgage_workflow_runner:INFO: WORKER 2 NCCL_P2P_DISABLE: None\n",
-      "mortgage_gquant_plugins:INFO: 02:41:10.089 distributed.worker.mortgage_workflow_runner:INFO: WORKER 2 CUDA_VISIBLE_DEVICES: 2,3,0,1\n",
-      "mortgage_gquant_plugins:INFO: 02:41:16.118 distributed.worker.mortgage_workflow_runner:INFO: WORKER 2 LOADED 1 FRAMES\n",
-      "mortgage_gquant_plugins:INFO: 02:41:19.498 distributed.worker.mortgage_workflow_runner:INFO: WORKER 2 LOADED 2 FRAMES\n",
-      "mortgage_gquant_plugins:INFO: 02:41:23.012 distributed.worker.mortgage_workflow_runner:INFO: WORKER 2 LOADED 3 FRAMES\n",
-      "mortgage_gquant_plugins:INFO: 02:41:24.835 distributed.worker.mortgage_workflow_runner:INFO: WORKER 2 LOADED 4 FRAMES\n",
-      "mortgage_gquant_plugins:INFO: 02:41:24.870 distributed.worker.mortgage_workflow_runner:INFO: WORKER 2 HOST RAM (MB) TOTAL 257852; USED 38471; FREE 186414\n",
-      "mortgage_gquant_plugins:INFO: 02:41:24.871 distributed.worker.mortgage_workflow_runner:INFO: WORKER 2 RUN PYTHON GARBAGE COLLECTION TO MAYBE CLEAR CPU AND GPU MEMORY\n",
-      "mortgage_gquant_plugins:INFO: 02:41:25.041 distributed.worker.mortgage_workflow_runner:INFO: WORKER 2 HOST RAM (MB) TOTAL 257852; USED 38475; FREE 186410\n",
-      "mortgage_gquant_plugins:INFO: 02:41:25.041 distributed.worker.mortgage_workflow_runner:INFO: WORKER 2 USING ARROW\n",
-      "mortgage_gquant_plugins:INFO: 02:41:25.042 distributed.worker.mortgage_workflow_runner:INFO: WORKER 2 ARROW TO PANDAS\n",
-      "mortgage_gquant_plugins:INFO: 02:41:25.468 distributed.worker.mortgage_workflow_runner:INFO: WORKER 2 HOST RAM (MB) TOTAL 257852; USED 43685; FREE 181202\n",
-      "mortgage_gquant_plugins:INFO: 02:41:10.089 distributed.worker.mortgage_workflow_runner:INFO: WORKER 1 RUNNING MORTGAGE gQUANT DataframeFlow\n",
-      "mortgage_gquant_plugins:INFO: 02:41:10.089 distributed.worker.mortgage_workflow_runner:INFO: WORKER 1 NCCL_P2P_DISABLE: None\n",
-      "mortgage_gquant_plugins:INFO: 02:41:10.089 distributed.worker.mortgage_workflow_runner:INFO: WORKER 1 CUDA_VISIBLE_DEVICES: 1,2,3,0\n",
-      "mortgage_gquant_plugins:INFO: 02:41:16.243 distributed.worker.mortgage_workflow_runner:INFO: WORKER 1 LOADED 1 FRAMES\n",
-      "mortgage_gquant_plugins:INFO: 02:41:19.526 distributed.worker.mortgage_workflow_runner:INFO: WORKER 1 LOADED 2 FRAMES\n",
-      "mortgage_gquant_plugins:INFO: 02:41:23.473 distributed.worker.mortgage_workflow_runner:INFO: WORKER 1 LOADED 3 FRAMES\n",
-      "mortgage_gquant_plugins:INFO: 02:41:27.126 distributed.worker.mortgage_workflow_runner:INFO: WORKER 1 LOADED 4 FRAMES\n",
-      "mortgage_gquant_plugins:INFO: 02:41:27.164 distributed.worker.mortgage_workflow_runner:INFO: WORKER 1 HOST RAM (MB) TOTAL 257852; USED 41239; FREE 183648\n",
-      "mortgage_gquant_plugins:INFO: 02:41:27.164 distributed.worker.mortgage_workflow_runner:INFO: WORKER 1 RUN PYTHON GARBAGE COLLECTION TO MAYBE CLEAR CPU AND GPU MEMORY\n",
-      "mortgage_gquant_plugins:INFO: 02:41:27.312 distributed.worker.mortgage_workflow_runner:INFO: WORKER 1 HOST RAM (MB) TOTAL 257852; USED 41240; FREE 183647\n",
-      "mortgage_gquant_plugins:INFO: 02:41:27.312 distributed.worker.mortgage_workflow_runner:INFO: WORKER 1 USING ARROW\n",
-      "mortgage_gquant_plugins:INFO: 02:41:27.312 distributed.worker.mortgage_workflow_runner:INFO: WORKER 1 ARROW TO PANDAS\n",
-      "mortgage_gquant_plugins:INFO: 02:41:27.785 distributed.worker.mortgage_workflow_runner:INFO: WORKER 1 HOST RAM (MB) TOTAL 257852; USED 46689; FREE 178198\n",
-      "mortgage_gquant_plugins:INFO: 02:41:10.089 distributed.worker.mortgage_workflow_runner:INFO: WORKER 3 RUNNING MORTGAGE gQUANT DataframeFlow\n",
-      "mortgage_gquant_plugins:INFO: 02:41:10.090 distributed.worker.mortgage_workflow_runner:INFO: WORKER 3 NCCL_P2P_DISABLE: None\n",
-      "mortgage_gquant_plugins:INFO: 02:41:10.090 distributed.worker.mortgage_workflow_runner:INFO: WORKER 3 CUDA_VISIBLE_DEVICES: 3,0,1,2\n",
-      "mortgage_gquant_plugins:INFO: 02:41:17.106 distributed.worker.mortgage_workflow_runner:INFO: WORKER 3 LOADED 1 FRAMES\n",
-      "mortgage_gquant_plugins:INFO: 02:41:21.031 distributed.worker.mortgage_workflow_runner:INFO: WORKER 3 LOADED 2 FRAMES\n",
-      "mortgage_gquant_plugins:INFO: 02:41:25.869 distributed.worker.mortgage_workflow_runner:INFO: WORKER 3 LOADED 3 FRAMES\n",
-      "mortgage_gquant_plugins:INFO: 02:41:29.327 distributed.worker.mortgage_workflow_runner:INFO: WORKER 3 LOADED 4 FRAMES\n",
-      "mortgage_gquant_plugins:INFO: 02:41:29.365 distributed.worker.mortgage_workflow_runner:INFO: WORKER 3 HOST RAM (MB) TOTAL 257852; USED 43586; FREE 181299\n",
-      "mortgage_gquant_plugins:INFO: 02:41:29.365 distributed.worker.mortgage_workflow_runner:INFO: WORKER 3 RUN PYTHON GARBAGE COLLECTION TO MAYBE CLEAR CPU AND GPU MEMORY\n",
-      "mortgage_gquant_plugins:INFO: 02:41:29.526 distributed.worker.mortgage_workflow_runner:INFO: WORKER 3 HOST RAM (MB) TOTAL 257852; USED 43585; FREE 181300\n",
-      "mortgage_gquant_plugins:INFO: 02:41:29.527 distributed.worker.mortgage_workflow_runner:INFO: WORKER 3 USING ARROW\n",
-      "mortgage_gquant_plugins:INFO: 02:41:29.527 distributed.worker.mortgage_workflow_runner:INFO: WORKER 3 ARROW TO PANDAS\n",
-      "mortgage_gquant_plugins:INFO: 02:41:29.976 distributed.worker.mortgage_workflow_runner:INFO: WORKER 3 HOST RAM (MB) TOTAL 257852; USED 48757; FREE 176130\n",
-      "mortgage_gquant_plugins:INFO: 02:41:10.089 distributed.worker.mortgage_workflow_runner:INFO: WORKER 0 RUNNING MORTGAGE gQUANT DataframeFlow\n",
-      "mortgage_gquant_plugins:INFO: 02:41:10.090 distributed.worker.mortgage_workflow_runner:INFO: WORKER 0 NCCL_P2P_DISABLE: None\n",
-      "mortgage_gquant_plugins:INFO: 02:41:10.090 distributed.worker.mortgage_workflow_runner:INFO: WORKER 0 CUDA_VISIBLE_DEVICES: 0,1,2,3\n",
-      "mortgage_gquant_plugins:INFO: 02:41:16.837 distributed.worker.mortgage_workflow_runner:INFO: WORKER 0 LOADED 1 FRAMES\n",
-      "mortgage_gquant_plugins:INFO: 02:41:20.215 distributed.worker.mortgage_workflow_runner:INFO: WORKER 0 LOADED 2 FRAMES\n",
-      "mortgage_gquant_plugins:INFO: 02:41:24.826 distributed.worker.mortgage_workflow_runner:INFO: WORKER 0 LOADED 3 FRAMES\n",
-      "mortgage_gquant_plugins:INFO: 02:41:29.293 distributed.worker.mortgage_workflow_runner:INFO: WORKER 0 LOADED 4 FRAMES\n",
-      "mortgage_gquant_plugins:INFO: 02:41:33.649 distributed.worker.mortgage_workflow_runner:INFO: WORKER 0 LOADED 5 FRAMES\n",
-      "mortgage_gquant_plugins:INFO: 02:41:37.860 distributed.worker.mortgage_workflow_runner:INFO: WORKER 0 LOADED 6 FRAMES\n",
-      "mortgage_gquant_plugins:INFO: 02:41:37.905 distributed.worker.mortgage_workflow_runner:INFO: WORKER 0 HOST RAM (MB) TOTAL 257852; USED 47258; FREE 177629\n",
-      "mortgage_gquant_plugins:INFO: 02:41:37.905 distributed.worker.mortgage_workflow_runner:INFO: WORKER 0 RUN PYTHON GARBAGE COLLECTION TO MAYBE CLEAR CPU AND GPU MEMORY\n",
-      "mortgage_gquant_plugins:INFO: 02:41:38.064 distributed.worker.mortgage_workflow_runner:INFO: WORKER 0 HOST RAM (MB) TOTAL 257852; USED 47251; FREE 177635\n",
-      "mortgage_gquant_plugins:INFO: 02:41:38.064 distributed.worker.mortgage_workflow_runner:INFO: WORKER 0 USING ARROW\n",
-      "mortgage_gquant_plugins:INFO: 02:41:38.065 distributed.worker.mortgage_workflow_runner:INFO: WORKER 0 ARROW TO PANDAS\n",
-      "mortgage_gquant_plugins:INFO: 02:41:38.750 distributed.worker.mortgage_workflow_runner:INFO: WORKER 0 HOST RAM (MB) TOTAL 257852; USED 56152; FREE 168735\n",
-      "mortgage_gquant_plugins:INFO: CLIENT INFO WHO HAS WHAT: {'mortgage_workflow_runner-ccd2e5e0da5960f43d2e97cbded0b089': ('tcp://127.0.0.1:36637',), 'mortgage_workflow_runner-01accb2a90d0a94baa9f24078e31d40d': ('tcp://127.0.0.1:41533',), 'mortgage_workflow_runner-c29a28e04bc5511f09ff7dfa69383dd8': ('tcp://127.0.0.1:33385',), 'mortgage_workflow_runner-cc066a7bbc6a9bebd480baf50550173c': ('tcp://127.0.0.1:38656',)}\n",
-      "mortgage_gquant_plugins:INFO: CREATING DMATRIX SERIALLY ACROSS 4 WORKERS\n",
-      "mortgage_gquant_plugins:INFO: 02:41:39.082 distributed.worker.make_xgb_dmatrix:INFO: CREATING DMATRIX ON WORKER 2\n",
-      "mortgage_gquant_plugins:INFO: 02:42:10.270 distributed.worker.make_xgb_dmatrix:INFO: CREATING DMATRIX ON WORKER 1\n",
-      "mortgage_gquant_plugins:INFO: 02:42:45.807 distributed.worker.make_xgb_dmatrix:INFO: CREATING DMATRIX ON WORKER 3\n",
-      "mortgage_gquant_plugins:INFO: 02:43:20.788 distributed.worker.make_xgb_dmatrix:INFO: CREATING DMATRIX ON WORKER 0\n"
+      "mortgage_greenflow_plugins:INFO: TRYING TO LOAD 18 FRAMES\n",
+      "mortgage_greenflow_plugins:INFO: SPLIT MORTGAGE DATA INTO 4 CHUNKS AMONGST 4 WORKERS\n",
+      "mortgage_greenflow_plugins:INFO: 02:41:10.089 distributed.worker.mortgage_workflow_runner:INFO: WORKER 2 RUNNING MORTGAGE Greenflow DataframeFlow\n",
+      "mortgage_greenflow_plugins:INFO: 02:41:10.089 distributed.worker.mortgage_workflow_runner:INFO: WORKER 2 NCCL_P2P_DISABLE: None\n",
+      "mortgage_greenflow_plugins:INFO: 02:41:10.089 distributed.worker.mortgage_workflow_runner:INFO: WORKER 2 CUDA_VISIBLE_DEVICES: 2,3,0,1\n",
+      "mortgage_greenflow_plugins:INFO: 02:41:16.118 distributed.worker.mortgage_workflow_runner:INFO: WORKER 2 LOADED 1 FRAMES\n",
+      "mortgage_greenflow_plugins:INFO: 02:41:19.498 distributed.worker.mortgage_workflow_runner:INFO: WORKER 2 LOADED 2 FRAMES\n",
+      "mortgage_greenflow_plugins:INFO: 02:41:23.012 distributed.worker.mortgage_workflow_runner:INFO: WORKER 2 LOADED 3 FRAMES\n",
+      "mortgage_greenflow_plugins:INFO: 02:41:24.835 distributed.worker.mortgage_workflow_runner:INFO: WORKER 2 LOADED 4 FRAMES\n",
+      "mortgage_greenflow_plugins:INFO: 02:41:24.870 distributed.worker.mortgage_workflow_runner:INFO: WORKER 2 HOST RAM (MB) TOTAL 257852; USED 38471; FREE 186414\n",
+      "mortgage_greenflow_plugins:INFO: 02:41:24.871 distributed.worker.mortgage_workflow_runner:INFO: WORKER 2 RUN PYTHON GARBAGE COLLECTION TO MAYBE CLEAR CPU AND GPU MEMORY\n",
+      "mortgage_greenflow_plugins:INFO: 02:41:25.041 distributed.worker.mortgage_workflow_runner:INFO: WORKER 2 HOST RAM (MB) TOTAL 257852; USED 38475; FREE 186410\n",
+      "mortgage_greenflow_plugins:INFO: 02:41:25.041 distributed.worker.mortgage_workflow_runner:INFO: WORKER 2 USING ARROW\n",
+      "mortgage_greenflow_plugins:INFO: 02:41:25.042 distributed.worker.mortgage_workflow_runner:INFO: WORKER 2 ARROW TO PANDAS\n",
+      "mortgage_greenflow_plugins:INFO: 02:41:25.468 distributed.worker.mortgage_workflow_runner:INFO: WORKER 2 HOST RAM (MB) TOTAL 257852; USED 43685; FREE 181202\n",
+      "mortgage_greenflow_plugins:INFO: 02:41:10.089 distributed.worker.mortgage_workflow_runner:INFO: WORKER 1 RUNNING MORTGAGE Greenflow DataframeFlow\n",
+      "mortgage_greenflow_plugins:INFO: 02:41:10.089 distributed.worker.mortgage_workflow_runner:INFO: WORKER 1 NCCL_P2P_DISABLE: None\n",
+      "mortgage_greenflow_plugins:INFO: 02:41:10.089 distributed.worker.mortgage_workflow_runner:INFO: WORKER 1 CUDA_VISIBLE_DEVICES: 1,2,3,0\n",
+      "mortgage_greenflow_plugins:INFO: 02:41:16.243 distributed.worker.mortgage_workflow_runner:INFO: WORKER 1 LOADED 1 FRAMES\n",
+      "mortgage_greenflow_plugins:INFO: 02:41:19.526 distributed.worker.mortgage_workflow_runner:INFO: WORKER 1 LOADED 2 FRAMES\n",
+      "mortgage_greenflow_plugins:INFO: 02:41:23.473 distributed.worker.mortgage_workflow_runner:INFO: WORKER 1 LOADED 3 FRAMES\n",
+      "mortgage_greenflow_plugins:INFO: 02:41:27.126 distributed.worker.mortgage_workflow_runner:INFO: WORKER 1 LOADED 4 FRAMES\n",
+      "mortgage_greenflow_plugins:INFO: 02:41:27.164 distributed.worker.mortgage_workflow_runner:INFO: WORKER 1 HOST RAM (MB) TOTAL 257852; USED 41239; FREE 183648\n",
+      "mortgage_greenflow_plugins:INFO: 02:41:27.164 distributed.worker.mortgage_workflow_runner:INFO: WORKER 1 RUN PYTHON GARBAGE COLLECTION TO MAYBE CLEAR CPU AND GPU MEMORY\n",
+      "mortgage_greenflow_plugins:INFO: 02:41:27.312 distributed.worker.mortgage_workflow_runner:INFO: WORKER 1 HOST RAM (MB) TOTAL 257852; USED 41240; FREE 183647\n",
+      "mortgage_greenflow_plugins:INFO: 02:41:27.312 distributed.worker.mortgage_workflow_runner:INFO: WORKER 1 USING ARROW\n",
+      "mortgage_greenflow_plugins:INFO: 02:41:27.312 distributed.worker.mortgage_workflow_runner:INFO: WORKER 1 ARROW TO PANDAS\n",
+      "mortgage_greenflow_plugins:INFO: 02:41:27.785 distributed.worker.mortgage_workflow_runner:INFO: WORKER 1 HOST RAM (MB) TOTAL 257852; USED 46689; FREE 178198\n",
+      "mortgage_greenflow_plugins:INFO: 02:41:10.089 distributed.worker.mortgage_workflow_runner:INFO: WORKER 3 RUNNING MORTGAGE Greenflow DataframeFlow\n",
+      "mortgage_greenflow_plugins:INFO: 02:41:10.090 distributed.worker.mortgage_workflow_runner:INFO: WORKER 3 NCCL_P2P_DISABLE: None\n",
+      "mortgage_greenflow_plugins:INFO: 02:41:10.090 distributed.worker.mortgage_workflow_runner:INFO: WORKER 3 CUDA_VISIBLE_DEVICES: 3,0,1,2\n",
+      "mortgage_greenflow_plugins:INFO: 02:41:17.106 distributed.worker.mortgage_workflow_runner:INFO: WORKER 3 LOADED 1 FRAMES\n",
+      "mortgage_greenflow_plugins:INFO: 02:41:21.031 distributed.worker.mortgage_workflow_runner:INFO: WORKER 3 LOADED 2 FRAMES\n",
+      "mortgage_greenflow_plugins:INFO: 02:41:25.869 distributed.worker.mortgage_workflow_runner:INFO: WORKER 3 LOADED 3 FRAMES\n",
+      "mortgage_greenflow_plugins:INFO: 02:41:29.327 distributed.worker.mortgage_workflow_runner:INFO: WORKER 3 LOADED 4 FRAMES\n",
+      "mortgage_greenflow_plugins:INFO: 02:41:29.365 distributed.worker.mortgage_workflow_runner:INFO: WORKER 3 HOST RAM (MB) TOTAL 257852; USED 43586; FREE 181299\n",
+      "mortgage_greenflow_plugins:INFO: 02:41:29.365 distributed.worker.mortgage_workflow_runner:INFO: WORKER 3 RUN PYTHON GARBAGE COLLECTION TO MAYBE CLEAR CPU AND GPU MEMORY\n",
+      "mortgage_greenflow_plugins:INFO: 02:41:29.526 distributed.worker.mortgage_workflow_runner:INFO: WORKER 3 HOST RAM (MB) TOTAL 257852; USED 43585; FREE 181300\n",
+      "mortgage_greenflow_plugins:INFO: 02:41:29.527 distributed.worker.mortgage_workflow_runner:INFO: WORKER 3 USING ARROW\n",
+      "mortgage_greenflow_plugins:INFO: 02:41:29.527 distributed.worker.mortgage_workflow_runner:INFO: WORKER 3 ARROW TO PANDAS\n",
+      "mortgage_greenflow_plugins:INFO: 02:41:29.976 distributed.worker.mortgage_workflow_runner:INFO: WORKER 3 HOST RAM (MB) TOTAL 257852; USED 48757; FREE 176130\n",
+      "mortgage_greenflow_plugins:INFO: 02:41:10.089 distributed.worker.mortgage_workflow_runner:INFO: WORKER 0 RUNNING MORTGAGE Greenflow DataframeFlow\n",
+      "mortgage_greenflow_plugins:INFO: 02:41:10.090 distributed.worker.mortgage_workflow_runner:INFO: WORKER 0 NCCL_P2P_DISABLE: None\n",
+      "mortgage_greenflow_plugins:INFO: 02:41:10.090 distributed.worker.mortgage_workflow_runner:INFO: WORKER 0 CUDA_VISIBLE_DEVICES: 0,1,2,3\n",
+      "mortgage_greenflow_plugins:INFO: 02:41:16.837 distributed.worker.mortgage_workflow_runner:INFO: WORKER 0 LOADED 1 FRAMES\n",
+      "mortgage_greenflow_plugins:INFO: 02:41:20.215 distributed.worker.mortgage_workflow_runner:INFO: WORKER 0 LOADED 2 FRAMES\n",
+      "mortgage_greenflow_plugins:INFO: 02:41:24.826 distributed.worker.mortgage_workflow_runner:INFO: WORKER 0 LOADED 3 FRAMES\n",
+      "mortgage_greenflow_plugins:INFO: 02:41:29.293 distributed.worker.mortgage_workflow_runner:INFO: WORKER 0 LOADED 4 FRAMES\n",
+      "mortgage_greenflow_plugins:INFO: 02:41:33.649 distributed.worker.mortgage_workflow_runner:INFO: WORKER 0 LOADED 5 FRAMES\n",
+      "mortgage_greenflow_plugins:INFO: 02:41:37.860 distributed.worker.mortgage_workflow_runner:INFO: WORKER 0 LOADED 6 FRAMES\n",
+      "mortgage_greenflow_plugins:INFO: 02:41:37.905 distributed.worker.mortgage_workflow_runner:INFO: WORKER 0 HOST RAM (MB) TOTAL 257852; USED 47258; FREE 177629\n",
+      "mortgage_greenflow_plugins:INFO: 02:41:37.905 distributed.worker.mortgage_workflow_runner:INFO: WORKER 0 RUN PYTHON GARBAGE COLLECTION TO MAYBE CLEAR CPU AND GPU MEMORY\n",
+      "mortgage_greenflow_plugins:INFO: 02:41:38.064 distributed.worker.mortgage_workflow_runner:INFO: WORKER 0 HOST RAM (MB) TOTAL 257852; USED 47251; FREE 177635\n",
+      "mortgage_greenflow_plugins:INFO: 02:41:38.064 distributed.worker.mortgage_workflow_runner:INFO: WORKER 0 USING ARROW\n",
+      "mortgage_greenflow_plugins:INFO: 02:41:38.065 distributed.worker.mortgage_workflow_runner:INFO: WORKER 0 ARROW TO PANDAS\n",
+      "mortgage_greenflow_plugins:INFO: 02:41:38.750 distributed.worker.mortgage_workflow_runner:INFO: WORKER 0 HOST RAM (MB) TOTAL 257852; USED 56152; FREE 168735\n",
+      "mortgage_greenflow_plugins:INFO: CLIENT INFO WHO HAS WHAT: {'mortgage_workflow_runner-ccd2e5e0da5960f43d2e97cbded0b089': ('tcp://127.0.0.1:36637',), 'mortgage_workflow_runner-01accb2a90d0a94baa9f24078e31d40d': ('tcp://127.0.0.1:41533',), 'mortgage_workflow_runner-c29a28e04bc5511f09ff7dfa69383dd8': ('tcp://127.0.0.1:33385',), 'mortgage_workflow_runner-cc066a7bbc6a9bebd480baf50550173c': ('tcp://127.0.0.1:38656',)}\n",
+      "mortgage_greenflow_plugins:INFO: CREATING DMATRIX SERIALLY ACROSS 4 WORKERS\n",
+      "mortgage_greenflow_plugins:INFO: 02:41:39.082 distributed.worker.make_xgb_dmatrix:INFO: CREATING DMATRIX ON WORKER 2\n",
+      "mortgage_greenflow_plugins:INFO: 02:42:10.270 distributed.worker.make_xgb_dmatrix:INFO: CREATING DMATRIX ON WORKER 1\n",
+      "mortgage_greenflow_plugins:INFO: 02:42:45.807 distributed.worker.make_xgb_dmatrix:INFO: CREATING DMATRIX ON WORKER 3\n",
+      "mortgage_greenflow_plugins:INFO: 02:43:20.788 distributed.worker.make_xgb_dmatrix:INFO: CREATING DMATRIX ON WORKER 0\n"
      ]
     },
     {
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "mortgage_gquant_plugins:INFO: JUST AFTER DMATRIX\n",
-      "mortgage_gquant_plugins:INFO: HOST RAM (MB) TOTAL 257852; USED 97439; FREE 127448\n",
-      "mortgage_gquant_plugins:INFO: RUNNING XGBOOST TRAINING USING DASK-XGBOOST\n",
+      "mortgage_greenflow_plugins:INFO: JUST AFTER DMATRIX\n",
+      "mortgage_greenflow_plugins:INFO: HOST RAM (MB) TOTAL 257852; USED 97439; FREE 127448\n",
+      "mortgage_greenflow_plugins:INFO: RUNNING XGBOOST TRAINING USING DASK-XGBOOST\n",
       "XGBOOST BOOSTER:\n",
       " <xgboost.core.Booster object at 0x7f7b09f80e48>\n"
      ]
@@ -1266,7 +1266,7 @@
    "source": [
     "### Summary\n",
     "\n",
-    "We re-implemented the RAPIDS mortgage ETL notebook using gQuant. The benefit of the gQuant implementation is that one can readily break down their workflow into modular parts. It becomes much easier to understand and optimize the individual components of the workflow pipeline.\n",
+    "We re-implemented the RAPIDS mortgage ETL notebook using greenflow. The benefit of the greenflow implementation is that one can readily break down their workflow into modular parts. It becomes much easier to understand and optimize the individual components of the workflow pipeline.\n",
     "\n",
     "A non-distributed and a distributed version was demonstrated. The benefits of distributed dask version were that more data was processed (18 files vs 12 files which amounts to 6GB of more data) and the dask-distributed version ran ETL in parallel on two workers (one worker per GPU) thus speeding up ETL. Using distributed version we could scale to multiple nodes as well.\n",
     "\n",
diff --git a/gQuant/plugins/rapids_plugin/notebooks/mortgage_e2e_gquant/mortgage_gquant_plugins.py b/gQuant/plugins/gquant_plugin/notebooks/mortgage_e2e_gquant/mortgage_greenflow_plugins.py
similarity index 96%
rename from gQuant/plugins/rapids_plugin/notebooks/mortgage_e2e_gquant/mortgage_gquant_plugins.py
rename to gQuant/plugins/gquant_plugin/notebooks/mortgage_e2e_gquant/mortgage_greenflow_plugins.py
index 8e5dd4f0..b684083a 100644
--- a/gQuant/plugins/rapids_plugin/notebooks/mortgage_e2e_gquant/mortgage_gquant_plugins.py
+++ b/gQuant/plugins/gquant_plugin/notebooks/mortgage_e2e_gquant/mortgage_greenflow_plugins.py
@@ -4,7 +4,7 @@
 from collections import OrderedDict
 import re
 import numpy as np
-from gquant.dataframe_flow import Node
+from greenflow.dataframe_flow import Node
 
 import logging
 
@@ -55,7 +55,7 @@ def restore_workers_logger():
 
 
 class MortgagePluginsLoggerMgr(object):
-    '''Logger manager for gQuant mortgage plugins.
+    '''Logger manager for greenflow mortgage plugins.
 
     When using this log manager to hijack dask distributed.worker logger
     (worker is not None), must first initialize worker loggers via:
@@ -156,7 +156,7 @@ def convert(name):
 
 
 class CsvMortgageAcquisitionDataLoader(Node):
-    '''gQuant task/node to read in a mortgage acquisition CSV file into a cudf
+    '''greenflow task/node to read in a mortgage acquisition CSV file into a cudf
     dataframe. Configuration requirements:
         'conf': {
             'csvfile_names': path to mortgage seller names csv datafile
@@ -257,7 +257,7 @@ def process(self, inputs):
 
 
 class CsvMortgagePerformanceDataLoader(Node):
-    '''gQuant task/node to read in a mortgage performance CSV file into a cudf
+    '''greenflow task/node to read in a mortgage performance CSV file into a cudf
     dataframe. Configuration requirements:
         'conf': {
             'csvfile_perfdata': path to mortgage performance csv datafile
@@ -342,7 +342,7 @@ def process(self, inputs):
 
 
 class CreateEverFeatures(Node):
-    '''gQuant task/node to calculate delinquecy status period features.
+    '''greenflow task/node to calculate delinquecy status period features.
     Refer to meta_setup method for the columns produced.
     '''
     def meta_setup(self):
@@ -376,7 +376,7 @@ def process(self, inputs):
 
 
 class CreateDelinqFeatures(Node):
-    '''gQuant task/node to calculate delinquecy features.
+    '''greenflow task/node to calculate delinquecy features.
     Refer to meta_setup method for the columns produced.
     '''
     def meta_setup(self):
@@ -439,7 +439,7 @@ def process(self, inputs):
 
 
 class JoinPerfEverDelinqFeatures(Node):
-    '''gQuant task/node to merge delinquecy features. Merges dataframes
+    '''greenflow task/node to merge delinquecy features. Merges dataframes
     produced by CreateEverFeatures and CreateDelinqFeatures.
     Refer to meta_setup method for the columns produced.
     '''
@@ -532,7 +532,7 @@ def process(self, inputs):
 
 
 class Create12MonFeatures(Node):
-    '''gQuant task/node to calculate delinquecy feature over 12 months.
+    '''greenflow task/node to calculate delinquecy feature over 12 months.
     Refer to meta_setup method for the columns produced.
     '''
     def meta_setup(self):
@@ -769,26 +769,26 @@ def process(self, inputs):
         return perf_acq_df
 
 
-def mortgage_gquant_run(run_params_dict):
+def mortgage_greenflow_run(run_params_dict):
     '''Using dataframe-flow runs the tasks/workflow specified in the
     run_params_dict. Expected run_params_dict ex:
         run_params_dict = {
             'replace_spec': replace_spec,
-            'task_spec_list': gquant_task_spec_list,
+            'task_spec_list': greenflow_task_spec_list,
             'out_list': out_list
         }
 
-    gquant_task_spec_list - Mortgage ETL workflow list of task-specs. Refer to
+    greenflow_task_spec_list - Mortgage ETL workflow list of task-specs. Refer to
         module mortgage_common function mortgage_etl_workflow_def.
 
     out_list - Expected to specify one output which should be the final
         dataframe produced by the mortgage ETL workflow.
 
-    :param run_params_dict: Dictionary with parameters and gquant task list to
+    :param run_params_dict: Dictionary with parameters and greenflow task list to
         run mortgage workflow.
 
     '''
-    from gquant.dataframe_flow import TaskGraph
+    from greenflow.dataframe_flow import TaskGraph
 
     task_spec_list = run_params_dict['task_spec_list']
     out_list = run_params_dict['out_list']
@@ -821,12 +821,12 @@ def print_ram_usage(worker_name='', logger=None):
 
 
 def mortgage_workflow_runner(mortgage_run_params_dict_list):
-    '''Runs the mortgage_gquant_run for each entry in the
+    '''Runs the mortgage_greenflow_run for each entry in the
     mortgage_run_params_dict_list. Each entry is a run_params_dict.
     Expected run_params_dict:
         run_params_dict = {
             'replace_spec': replace_spec,
-            'task_spec_list': gquant_task_spec_list,
+            'task_spec_list': greenflow_task_spec_list,
             'out_list': out_list
         }
 
@@ -855,7 +855,7 @@ def mortgage_workflow_runner(mortgage_run_params_dict_list):
     worker_name = ''
     if worker is not None:
         worker_name = 'WORKER {} '.format(worker.name)
-        logger.info(worker_name + 'RUNNING MORTGAGE gQUANT DataframeFlow')
+        logger.info(worker_name + 'RUNNING MORTGAGE Greenflow DataframeFlow')
         logger.info(worker_name + 'NCCL_P2P_DISABLE: {}'.format(
             os.environ.get('NCCL_P2P_DISABLE')))
         logger.info(worker_name + 'CUDA_VISIBLE_DEVICES: {}'.format(
@@ -867,7 +867,7 @@ def mortgage_workflow_runner(mortgage_run_params_dict_list):
         # performance_path = run_params_dict['csvfile_perfdata']
         # logger.info(worker_name + 'LOADING: {}'.format(performance_path))
 
-        final_perf_acq_gdf = mortgage_gquant_run(run_params_dict)
+        final_perf_acq_gdf = mortgage_greenflow_run(run_params_dict)
 
         # CONCATENATE DATAFRAMES AS THEY ARE CALCULATED
 
@@ -932,7 +932,7 @@ def mortgage_workflow_runner(mortgage_run_params_dict_list):
 
 
 class MortgageWorkflowRunner(Node):
-    '''Runs the mortgage gquant workflow and returns the mortgage features
+    '''Runs the mortgage greenflow workflow and returns the mortgage features
     dataframe and mortgage delinquency dataframe. These can be passed on
     to xgboost for training.
 
@@ -943,7 +943,7 @@ class MortgageWorkflowRunner(Node):
 
         mortgage_run_param_dict = {
             'replace_spec': replace_spec,
-            'task_spec_list': gquant_task_spec_list,
+            'task_spec_list': greenflow_task_spec_list,
             'out_list': out_list
         }
 
@@ -1073,7 +1073,7 @@ def process(self, inputs):
 
 # RMM - RAPIDS Memory Manager.
 # IMPORTANT!!! IF USING RMM START CLIENT prior to any cudf imports and that
-# means prior to any gQuant imports, 3rd party libs with cudf, etc.
+# means prior to any greenflow imports, 3rd party libs with cudf, etc.
 # This is needed if distributing workflows to workers.
 
 def initialize_rmm_pool():
@@ -1119,7 +1119,7 @@ def print_distributed_dask_hijacked_logs(wlogs, logger, filters=None):
 
 
 class DaskMortgageWorkflowRunner(Node):
-    '''Runs the mortgage gquant workflow and returns the mortgage features
+    '''Runs the mortgage greenflow workflow and returns the mortgage features
     dataframe and mortgage delinquency dataframe. These can be passed on
     to xgboost for training.
 
@@ -1137,7 +1137,7 @@ class DaskMortgageWorkflowRunner(Node):
     Format of expected mortgage run params:
         mortgage_run_param_dict = {
             'replace_spec': replace_spec,
-            'task_spec_list': gquant_task_spec_list,
+            'task_spec_list': greenflow_task_spec_list,
             'out_list': out_list
         }
 
diff --git a/gQuant/plugins/rapids_plugin/notebooks/mortgage_e2e_gquant/mortgage_run_workflow_daskdistrib.py b/gQuant/plugins/gquant_plugin/notebooks/mortgage_e2e_gquant/mortgage_run_workflow_daskdistrib.py
similarity index 92%
rename from gQuant/plugins/rapids_plugin/notebooks/mortgage_e2e_gquant/mortgage_run_workflow_daskdistrib.py
rename to gQuant/plugins/gquant_plugin/notebooks/mortgage_e2e_gquant/mortgage_run_workflow_daskdistrib.py
index 07d42336..92bb9415 100644
--- a/gQuant/plugins/rapids_plugin/notebooks/mortgage_e2e_gquant/mortgage_run_workflow_daskdistrib.py
+++ b/gQuant/plugins/gquant_plugin/notebooks/mortgage_e2e_gquant/mortgage_run_workflow_daskdistrib.py
@@ -16,7 +16,7 @@
 # from distributed import Client
 
 from mortgage_common import (
-    mortgage_etl_workflow_def, generate_mortgage_gquant_run_params_list,
+    mortgage_etl_workflow_def, generate_mortgage_greenflow_run_params_list,
     MortgageTaskNames)
 
 
@@ -35,7 +35,7 @@ def main():
 
     # Importing here in case RMM is used later on. Must start client prior
     # to importing cudf stuff if using RMM.
-    from gquant.dataframe_flow import (TaskSpecSchema, TaskGraph)
+    from greenflow.dataframe_flow import (TaskSpecSchema, TaskGraph)
 
     # workers_names = \
     #     [iw['name'] for iw in client.scheduler_info()['workers'].values()]
@@ -55,7 +55,7 @@ def main():
     # mortgage_etl_workflow_def(
     #     csvfile_names, csvfile_acqdata, csvfile_perfdata)
 
-    gquant_task_spec_list = mortgage_etl_workflow_def()
+    greenflow_task_spec_list = mortgage_etl_workflow_def()
 
     start_year = 2000
     end_year = 2001  # end_year is inclusive
@@ -78,12 +78,12 @@ def main():
     # Clean up intermediate dataframes in the xgboost training task.
     delete_dataframes = True
 
-    mortgage_run_params_dict_list = generate_mortgage_gquant_run_params_list(
+    mortgage_run_params_dict_list = generate_mortgage_greenflow_run_params_list(
         mortgage_data_path, start_year, end_year, part_count,
-        gquant_task_spec_list)
+        greenflow_task_spec_list)
 
     _basedir = os.path.dirname(__file__)
-    mortgage_lib_module = os.path.join(_basedir, 'mortgage_gquant_plugins.py')
+    mortgage_lib_module = os.path.join(_basedir, 'mortgage_greenflow_plugins.py')
 
     filter_dask_logger = False
 
diff --git a/gQuant/plugins/rapids_plugin/notebooks/mortgage_e2e_gquant/mortgage_run_workflow_local.py b/gQuant/plugins/gquant_plugin/notebooks/mortgage_e2e_gquant/mortgage_run_workflow_local.py
similarity index 91%
rename from gQuant/plugins/rapids_plugin/notebooks/mortgage_e2e_gquant/mortgage_run_workflow_local.py
rename to gQuant/plugins/gquant_plugin/notebooks/mortgage_e2e_gquant/mortgage_run_workflow_local.py
index bfc61904..72de1ce4 100644
--- a/gQuant/plugins/rapids_plugin/notebooks/mortgage_e2e_gquant/mortgage_run_workflow_local.py
+++ b/gQuant/plugins/gquant_plugin/notebooks/mortgage_e2e_gquant/mortgage_run_workflow_local.py
@@ -2,11 +2,11 @@
 '''
 import os
 
-from gquant.dataframe_flow import (TaskSpecSchema, TaskGraph)
+from greenflow.dataframe_flow import (TaskSpecSchema, TaskGraph)
 
 
 from mortgage_common import (
-    mortgage_etl_workflow_def, generate_mortgage_gquant_run_params_list,
+    mortgage_etl_workflow_def, generate_mortgage_greenflow_run_params_list,
     MortgageTaskNames)
 
 
@@ -26,7 +26,7 @@ def main():
     # mortgage_etl_workflow_def(
     #     csvfile_names, csvfile_acqdata, csvfile_perfdata)
 
-    gquant_task_spec_list = mortgage_etl_workflow_def()
+    greenflow_task_spec_list = mortgage_etl_workflow_def()
 
     start_year = 2000
     end_year = 2001  # end_year is inclusive
@@ -35,12 +35,12 @@ def main():
     part_count = 12  # the number of data files to train against
     # part_count = 4  # the number of data files to train against
 
-    mortgage_run_params_dict_list = generate_mortgage_gquant_run_params_list(
+    mortgage_run_params_dict_list = generate_mortgage_greenflow_run_params_list(
         mortgage_data_path, start_year, end_year, part_count,
-        gquant_task_spec_list)
+        greenflow_task_spec_list)
 
     _basedir = os.path.dirname(__file__)
-    mortgage_lib_module = os.path.join(_basedir, 'mortgage_gquant_plugins.py')
+    mortgage_lib_module = os.path.join(_basedir, 'mortgage_greenflow_plugins.py')
 
     mortgage_workflow_runner_task = {
         TaskSpecSchema.task_id:
diff --git a/gQuant/gquant/tests/__init__.py b/gQuant/plugins/gquant_plugin/tests/__init__.py
similarity index 100%
rename from gQuant/gquant/tests/__init__.py
rename to gQuant/plugins/gquant_plugin/tests/__init__.py
diff --git a/gQuant/gquant/tests/unit/__init__.py b/gQuant/plugins/gquant_plugin/tests/unit/__init__.py
similarity index 100%
rename from gQuant/gquant/tests/unit/__init__.py
rename to gQuant/plugins/gquant_plugin/tests/unit/__init__.py
diff --git a/gQuant/plugins/rapids_plugin/tests/unit/technical_indicators.py b/gQuant/plugins/gquant_plugin/tests/unit/technical_indicators.py
similarity index 100%
rename from gQuant/plugins/rapids_plugin/tests/unit/technical_indicators.py
rename to gQuant/plugins/gquant_plugin/tests/unit/technical_indicators.py
diff --git a/gQuant/plugins/rapids_plugin/tests/unit/test_fractional_diff.py b/gQuant/plugins/gquant_plugin/tests/unit/test_fractional_diff.py
similarity index 98%
rename from gQuant/plugins/rapids_plugin/tests/unit/test_fractional_diff.py
rename to gQuant/plugins/gquant_plugin/tests/unit/test_fractional_diff.py
index 8ee325b3..bd0f268a 100644
--- a/gQuant/plugins/rapids_plugin/tests/unit/test_fractional_diff.py
+++ b/gQuant/plugins/gquant_plugin/tests/unit/test_fractional_diff.py
@@ -22,7 +22,7 @@
 import pandas as pd
 import unittest
 import cudf
-from gquant_rapids_plugin.cuindicator import (fractional_diff,
+from greenflow_gquant_plugin.cuindicator import (fractional_diff,
                                               get_weights_floored,
                                               port_fractional_diff)
 import numpy as np
diff --git a/gQuant/plugins/rapids_plugin/tests/unit/test_indicator.py b/gQuant/plugins/gquant_plugin/tests/unit/test_indicator.py
similarity index 99%
rename from gQuant/plugins/rapids_plugin/tests/unit/test_indicator.py
rename to gQuant/plugins/gquant_plugin/tests/unit/test_indicator.py
index 7f27c51f..f6afd370 100644
--- a/gQuant/plugins/rapids_plugin/tests/unit/test_indicator.py
+++ b/gQuant/plugins/gquant_plugin/tests/unit/test_indicator.py
@@ -24,7 +24,7 @@
 import unittest
 import pathlib
 import cudf
-import gquant_rapids_plugin.cuindicator as gi
+import greenflow_gquant_plugin.cuindicator as gi
 from . import technical_indicators as ti
 from .utils import make_orderer, error_function
 import numpy as np
diff --git a/gQuant/plugins/rapids_plugin/tests/unit/test_indicator_node.py b/gQuant/plugins/gquant_plugin/tests/unit/test_indicator_node.py
similarity index 97%
rename from gQuant/plugins/rapids_plugin/tests/unit/test_indicator_node.py
rename to gQuant/plugins/gquant_plugin/tests/unit/test_indicator_node.py
index 7f2bdc76..dd0a01fe 100644
--- a/gQuant/plugins/rapids_plugin/tests/unit/test_indicator_node.py
+++ b/gQuant/plugins/gquant_plugin/tests/unit/test_indicator_node.py
@@ -22,9 +22,9 @@
 import warnings
 import unittest
 import cudf
-import gquant_rapids_plugin.cuindicator as gi
-from gquant_rapids_plugin.transform.indicatorNode import IndicatorNode
-from gquant.dataframe_flow.task import Task
+import greenflow_gquant_plugin.cuindicator as gi
+from greenflow_gquant_plugin.transform.indicatorNode import IndicatorNode
+from greenflow.dataframe_flow.task import Task
 from .utils import make_orderer
 import numpy as np
 import copy
diff --git a/gQuant/plugins/rapids_plugin/tests/unit/test_multi_assets_indicator.py b/gQuant/plugins/gquant_plugin/tests/unit/test_multi_assets_indicator.py
similarity index 99%
rename from gQuant/plugins/rapids_plugin/tests/unit/test_multi_assets_indicator.py
rename to gQuant/plugins/gquant_plugin/tests/unit/test_multi_assets_indicator.py
index 5330cbb2..17d663a4 100644
--- a/gQuant/plugins/rapids_plugin/tests/unit/test_multi_assets_indicator.py
+++ b/gQuant/plugins/gquant_plugin/tests/unit/test_multi_assets_indicator.py
@@ -23,9 +23,9 @@
 import unittest
 import cudf
 from .utils import make_orderer, error_function
-import gquant_rapids_plugin.cuindicator as gi
+import greenflow_gquant_plugin.cuindicator as gi
 from . import technical_indicators as ti
-from gquant_rapids_plugin.cuindicator import PEwm
+from greenflow_gquant_plugin.cuindicator import PEwm
 import numpy as np
 import warnings
 
diff --git a/gQuant/plugins/rapids_plugin/tests/unit/test_nodes.py b/gQuant/plugins/gquant_plugin/tests/unit/test_nodes.py
similarity index 98%
rename from gQuant/plugins/rapids_plugin/tests/unit/test_nodes.py
rename to gQuant/plugins/gquant_plugin/tests/unit/test_nodes.py
index cc7d8f4f..9cb6a194 100644
--- a/gQuant/plugins/rapids_plugin/tests/unit/test_nodes.py
+++ b/gQuant/plugins/gquant_plugin/tests/unit/test_nodes.py
@@ -22,10 +22,10 @@
 import warnings
 import unittest
 import cudf
-from gquant_rapids_plugin.transform import ReturnFeatureNode
-from gquant_rapids_plugin.transform import IndicatorNode
-from gquant_rapids_plugin.transform import AssetIndicatorNode
-from gquant.dataframe_flow.task import Task
+from greenflow_gquant_plugin.transform import ReturnFeatureNode
+from greenflow_gquant_plugin.transform import IndicatorNode
+from greenflow_gquant_plugin.transform import AssetIndicatorNode
+from greenflow.dataframe_flow.task import Task
 from .utils import make_orderer, error_function_index
 import numpy as np
 import pandas as pd
diff --git a/gQuant/plugins/rapids_plugin/tests/unit/test_rolling.py b/gQuant/plugins/gquant_plugin/tests/unit/test_rolling.py
similarity index 98%
rename from gQuant/plugins/rapids_plugin/tests/unit/test_rolling.py
rename to gQuant/plugins/gquant_plugin/tests/unit/test_rolling.py
index 535985b4..d3078f03 100644
--- a/gQuant/plugins/rapids_plugin/tests/unit/test_rolling.py
+++ b/gQuant/plugins/gquant_plugin/tests/unit/test_rolling.py
@@ -22,7 +22,7 @@
 import pandas as pd
 import unittest
 import cudf
-from gquant_rapids_plugin.cuindicator import Rolling, Ewm
+from greenflow_gquant_plugin.cuindicator import Rolling, Ewm
 from .utils import make_orderer, error_function
 import numpy as np
 
diff --git a/gQuant/plugins/rapids_plugin/tests/unit/test_util.py b/gQuant/plugins/gquant_plugin/tests/unit/test_util.py
similarity index 97%
rename from gQuant/plugins/rapids_plugin/tests/unit/test_util.py
rename to gQuant/plugins/gquant_plugin/tests/unit/test_util.py
index bada0c72..cd481dde 100644
--- a/gQuant/plugins/rapids_plugin/tests/unit/test_util.py
+++ b/gQuant/plugins/gquant_plugin/tests/unit/test_util.py
@@ -22,7 +22,7 @@
 import pandas as pd
 import unittest
 import cudf
-from gquant_rapids_plugin.cuindicator import shift, diff
+from greenflow_gquant_plugin.cuindicator import shift, diff
 import numpy as np
 from .utils import make_orderer, error_function
 
diff --git a/gQuant/plugins/rapids_plugin/tests/unit/testdata.csv.gz b/gQuant/plugins/gquant_plugin/tests/unit/testdata.csv.gz
similarity index 100%
rename from gQuant/plugins/rapids_plugin/tests/unit/testdata.csv.gz
rename to gQuant/plugins/gquant_plugin/tests/unit/testdata.csv.gz
diff --git a/gQuant/gquant/tests/unit/utils.py b/gQuant/plugins/gquant_plugin/tests/unit/utils.py
similarity index 100%
rename from gQuant/gquant/tests/unit/utils.py
rename to gQuant/plugins/gquant_plugin/tests/unit/utils.py
diff --git a/gQuant/plugins/rapids_plugin/tests/__init__.py b/greenflow/tests/__init__.py
similarity index 100%
rename from gQuant/plugins/rapids_plugin/tests/__init__.py
rename to greenflow/tests/__init__.py
diff --git a/gQuant/plugins/rapids_plugin/tests/unit/__init__.py b/greenflow/tests/unit/__init__.py
similarity index 100%
rename from gQuant/plugins/rapids_plugin/tests/unit/__init__.py
rename to greenflow/tests/unit/__init__.py
diff --git a/gQuant/gquant/tests/unit/custom_port_nodes.py b/greenflow/tests/unit/custom_port_nodes.py
similarity index 96%
rename from gQuant/gquant/tests/unit/custom_port_nodes.py
rename to greenflow/tests/unit/custom_port_nodes.py
index db7e9f6d..c95855ed 100644
--- a/gQuant/gquant/tests/unit/custom_port_nodes.py
+++ b/greenflow/tests/unit/custom_port_nodes.py
@@ -2,9 +2,9 @@
 import numpy as np
 import dask
 import pandas as pd
-from gquant.dataframe_flow import Node, MetaData
-from gquant.dataframe_flow import NodePorts, PortsSpecSchema
-from gquant.dataframe_flow import ConfSchema
+from greenflow.dataframe_flow import Node, MetaData
+from greenflow.dataframe_flow import NodePorts, PortsSpecSchema
+from greenflow.dataframe_flow import ConfSchema
 import os
 import warnings
 
@@ -24,7 +24,7 @@ def load_cache(self, filename=None) -> dict:
         returns: dict
             dictionary of the output from this node
         """
-        cache_dir = os.getenv('GQUANT_CACHE_DIR', self.cache_dir)
+        cache_dir = os.getenv('GREENFLOW_CACHE_DIR', self.cache_dir)
         if filename is None:
             filename = cache_dir + '/' + self.uid + '.hdf5'
 
@@ -60,7 +60,7 @@ def save_cache(self, output_data: dict):
         :param output_data: The output from :meth:`process`. For saving to hdf
             requires that the dataframe(s) have `to_hdf` method.
         '''
-        cache_dir = os.getenv('GQUANT_CACHE_DIR', self.cache_dir)
+        cache_dir = os.getenv('GREENFLOW_CACHE_DIR', self.cache_dir)
         os.makedirs(cache_dir, exist_ok=True)
         filename = cache_dir + '/' + self.uid + '.hdf5'
         with pd.HDFStore(filename, mode='w') as hf:
diff --git a/gQuant/gquant/tests/unit/test_node_api.py b/greenflow/tests/unit/test_node_api.py
similarity index 91%
rename from gQuant/gquant/tests/unit/test_node_api.py
rename to greenflow/tests/unit/test_node_api.py
index ae6b0053..d0c5fdea 100644
--- a/gQuant/gquant/tests/unit/test_node_api.py
+++ b/greenflow/tests/unit/test_node_api.py
@@ -1,5 +1,5 @@
 '''
-gQuant Node API Unit Tests
+greenflow Node API Unit Tests
 
 To run unittests:
 
@@ -22,11 +22,11 @@
 import os
 import unittest
 
-from gquant.dataframe_flow import TaskSpecSchema
-from gquant.dataframe_flow.task import Task
-from gquant.dataframe_flow._node import _Node
-from gquant.dataframe_flow.node import (Node, _PortsMixin)
-from gquant.dataframe_flow._node_flow import NodeTaskGraphMixin
+from greenflow.dataframe_flow import TaskSpecSchema
+from greenflow.dataframe_flow.task import Task
+from greenflow.dataframe_flow._node import _Node
+from greenflow.dataframe_flow.node import (Node, _PortsMixin)
+from greenflow.dataframe_flow._node_flow import NodeTaskGraphMixin
 
 from .utils import make_orderer
 
diff --git a/gQuant/gquant/tests/unit/test_node_taskgraph_typechecking.py b/greenflow/tests/unit/test_node_taskgraph_typechecking.py
similarity index 97%
rename from gQuant/gquant/tests/unit/test_node_taskgraph_typechecking.py
rename to greenflow/tests/unit/test_node_taskgraph_typechecking.py
index 03a925a5..663bbdd7 100644
--- a/gQuant/gquant/tests/unit/test_node_taskgraph_typechecking.py
+++ b/greenflow/tests/unit/test_node_taskgraph_typechecking.py
@@ -1,5 +1,5 @@
 '''
-gQuant Node in TaskGraph Columns Validation Unit Tests
+greenflow Node in TaskGraph Columns Validation Unit Tests
 
 To run unittests:
 
@@ -21,8 +21,8 @@
 import copy
 import warnings
 
-from gquant.dataframe_flow import (Node, PortsSpecSchema, NodePorts, MetaData)
-from gquant.dataframe_flow import (TaskSpecSchema, TaskGraph)
+from greenflow.dataframe_flow import (Node, PortsSpecSchema, NodePorts, MetaData)
+from greenflow.dataframe_flow import (TaskSpecSchema, TaskGraph)
 
 from .utils import make_orderer
 
diff --git a/gQuant/gquant/tests/unit/test_taskgraph_api.py b/greenflow/tests/unit/test_taskgraph_api.py
similarity index 94%
rename from gQuant/gquant/tests/unit/test_taskgraph_api.py
rename to greenflow/tests/unit/test_taskgraph_api.py
index 4864e45c..5cc171b0 100644
--- a/gQuant/gquant/tests/unit/test_taskgraph_api.py
+++ b/greenflow/tests/unit/test_taskgraph_api.py
@@ -1,5 +1,5 @@
 '''
-gQuant TaskGraph API Unit Tests
+greenflow TaskGraph API Unit Tests
 
 To run unittests:
 
@@ -28,9 +28,9 @@
 import warnings
 import unittest
 import pandas as pd
-from gquant.dataframe_flow import (TaskSpecSchema, TaskGraph)
-from gquant.dataframe_flow.task import DEFAULT_MODULE  # noqa: F401
-from gquant.dataframe_flow import Node
+from greenflow.dataframe_flow import (TaskSpecSchema, TaskGraph)
+from greenflow.dataframe_flow.task import DEFAULT_MODULE  # noqa: F401
+from greenflow.dataframe_flow import Node
 
 from .utils import make_orderer
 
@@ -61,7 +61,7 @@ def setUp(self):
         del(s)
         gc.collect()
 
-        os.environ['GQUANT_PLUGIN_MODULE'] = 'tests.unit.custom_port_nodes'
+        os.environ['GREENFLOW_PLUGIN_MODULE'] = 'tests.unit.custom_port_nodes'
 
         points_task_spec = {
             TaskSpecSchema.task_id: 'points_task',
@@ -85,12 +85,12 @@ def setUp(self):
 
         # Create a temporary directory
         self._test_dir = tempfile.mkdtemp()
-        os.environ['GQUANT_CACHE_DIR'] = os.path.join(self._test_dir, '.cache')
+        os.environ['GREENFLOW_CACHE_DIR'] = os.path.join(self._test_dir, '.cache')
 
     def tearDown(self):
         global DEFAULT_MODULE
-        os.environ['GQUANT_PLUGIN_MODULE'] = DEFAULT_MODULE
-        os.environ['GQUANT_CACHE_DIR'] = Node.cache_dir
+        os.environ['GREENFLOW_PLUGIN_MODULE'] = DEFAULT_MODULE
+        os.environ['GREENFLOW_CACHE_DIR'] = Node.cache_dir
         shutil.rmtree(self._test_dir)
 
     @ordered
diff --git a/gQuant/gquant/tests/unit/test_workflow_serialization.py b/greenflow/tests/unit/test_workflow_serialization.py
similarity index 97%
rename from gQuant/gquant/tests/unit/test_workflow_serialization.py
rename to greenflow/tests/unit/test_workflow_serialization.py
index 6d564635..eab5bdb1 100644
--- a/gQuant/gquant/tests/unit/test_workflow_serialization.py
+++ b/greenflow/tests/unit/test_workflow_serialization.py
@@ -98,7 +98,7 @@ def tearDown(self):
     @ordered
     def test_save_workflow(self):
         '''Test saving a workflow to yaml:'''
-        from gquant.dataframe_flow import TaskGraph
+        from greenflow.dataframe_flow import TaskGraph
         task_graph = TaskGraph(self._task_list)
         workflow_file = os.path.join(self._test_dir, 'test_save_workflow.yaml')
         task_graph.save_taskgraph(workflow_file)
@@ -124,7 +124,7 @@ def test_save_workflow(self):
     @ordered
     def test_load_workflow(self):
         '''Test loading a workflow from yaml:'''
-        from gquant.dataframe_flow import TaskGraph
+        from greenflow.dataframe_flow import TaskGraph
         workflow_file = os.path.join(self._test_dir, 'test_save_workflow.yaml')
 
         with open(workflow_file, 'w') as wf:
diff --git a/gQuant/plugins/rapids_plugin/tests/unit/utils.py b/greenflow/tests/unit/utils.py
similarity index 100%
rename from gQuant/plugins/rapids_plugin/tests/unit/utils.py
rename to greenflow/tests/unit/utils.py
diff --git a/gQuant/gquantlab/notebooks/test.ipynb b/greenflowlab/notebooks/test.ipynb
similarity index 98%
rename from gQuant/gquantlab/notebooks/test.ipynb
rename to greenflowlab/notebooks/test.ipynb
index 7cfac3a3..facec2de 100644
--- a/gQuant/gquantlab/notebooks/test.ipynb
+++ b/greenflowlab/notebooks/test.ipynb
@@ -7,7 +7,7 @@
    "outputs": [],
    "source": [
     "import os\n",
-    "from gquant.dataframe_flow import TaskGraph"
+    "from greenflow.dataframe_flow import TaskGraph"
    ]
   },
   {
@@ -54,7 +54,7 @@
        "version_minor": 0
       },
       "text/plain": [
-       "GQuantWidget(sub=HBox(), value=[OrderedDict([('id', 'points_task'), ('type', 'PointNode'), ('conf', {'npts': 8…"
+       "GreenflowWidget(sub=HBox(), value=[OrderedDict([('id', 'points_task'), ('type', 'PointNode'), ('conf', {'npts': 8…"
       ]
      },
      "metadata": {},
@@ -78,7 +78,7 @@
        "version_minor": 0
       },
       "text/plain": [
-       "GQuantWidget(cache={'nodes': [{'width': 110, 'id': 'points_task', 'type': 'PointNode', 'schema': {'title': 'Po…"
+       "GreenflowWidget(cache={'nodes': [{'width': 110, 'id': 'points_task', 'type': 'PointNode', 'schema': {'title': 'Po…"
       ]
      },
      "metadata": {},
@@ -164,7 +164,7 @@
     {
      "data": {
       "text/plain": [
-       "<gquant.dataframe_flow.taskGraph.TaskGraph at 0x7f58ef47cd50>"
+       "<greenflow.dataframe_flow.taskGraph.TaskGraph at 0x7f58ef47cd50>"
       ]
      },
      "execution_count": 9,
@@ -185,12 +185,12 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "<gquant.dataframe_flow.task.Task object at 0x7f58ee964090>\n",
-      "<gquant.dataframe_flow.task.Task object at 0x7f58ee964150>\n",
-      "<gquant.dataframe_flow.task.Task object at 0x7f58ee964290>\n",
-      "<gquant.dataframe_flow.task.Task object at 0x7f58ee964210>\n",
-      "<gquant.dataframe_flow.task.Task object at 0x7f58ee964190>\n",
-      "<gquant.dataframe_flow.task.Task object at 0x7f58ee964350>\n"
+      "<greenflow.dataframe_flow.task.Task object at 0x7f58ee964090>\n",
+      "<greenflow.dataframe_flow.task.Task object at 0x7f58ee964150>\n",
+      "<greenflow.dataframe_flow.task.Task object at 0x7f58ee964290>\n",
+      "<greenflow.dataframe_flow.task.Task object at 0x7f58ee964210>\n",
+      "<greenflow.dataframe_flow.task.Task object at 0x7f58ee964190>\n",
+      "<greenflow.dataframe_flow.task.Task object at 0x7f58ee964350>\n"
      ]
     }
    ],
diff --git a/gQuant/gquantlab/notebooks/test_dask.ipynb b/greenflowlab/notebooks/test_dask.ipynb
similarity index 99%
rename from gQuant/gquantlab/notebooks/test_dask.ipynb
rename to greenflowlab/notebooks/test_dask.ipynb
index 3db77bae..44c30ed3 100644
--- a/gQuant/gquantlab/notebooks/test_dask.ipynb
+++ b/greenflowlab/notebooks/test_dask.ipynb
@@ -7,7 +7,7 @@
    "outputs": [],
    "source": [
     "import os\n",
-    "from gquant.dataframe_flow import TaskGraph"
+    "from greenflow.dataframe_flow import TaskGraph"
    ]
   },
   {
@@ -100,7 +100,7 @@
        "version_minor": 0
       },
       "text/plain": [
-       "GQuantWidget(sub=HBox(), value=[OrderedDict([('id', 'points_task'), ('type', 'PointNode'), ('conf', {'npts': 8…"
+       "GreenflowWidget(sub=HBox(), value=[OrderedDict([('id', 'points_task'), ('type', 'PointNode'), ('conf', {'npts': 8…"
       ]
      },
      "metadata": {},
@@ -124,7 +124,7 @@
        "version_minor": 0
       },
       "text/plain": [
-       "GQuantWidget(cache={'nodes': [{'width': 110, 'id': 'points_task', 'type': 'PointNode', 'schema': {'title': 'Po…"
+       "GreenflowWidget(cache={'nodes': [{'width': 110, 'id': 'points_task', 'type': 'PointNode', 'schema': {'title': 'Po…"
       ]
      },
      "metadata": {},