diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d420b3b9..691a17c6 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -55,7 +55,7 @@ Portions adopted from https://github.com/pytorch/pytorch/blob/master/CONTRIBUTIN ### Adding support for new viz libraries -cuXfilter.py acts like a connector library and it is easy to add support for new libraries. The cuxfilter/charts/core directory has all the core chart classes which can be inherited and used to implement a few (viz related) functions and support dashboarding in cuXfilter directly. +cuxfilter.py acts like a connector library and it is easy to add support for new libraries. The cuxfilter/charts/core directory has all the core chart classes which can be inherited and used to implement a few (viz related) functions and support dashboarding in cuxfilter directly. You can see the examples to implement viz libraries in the bokeh and cudatashader directories. diff --git a/README.md b/README.md index 9db1ab87..a62fefd0 100644 --- a/README.md +++ b/README.md @@ -1,29 +1,29 @@ -#
  cuXfilter +#
  cuxfilter -cuXfilter ( ku-cross-filter ) is a [RAPIDS](https://github.com/rapidsai) framework to connect web visualizations to GPU accelerated crossfiltering. Inspired by the javascript version of the [original]( https://github.com/crossfilter/crossfilter), it enables interactive and super fast multi-dimensional filtering of 100 million+ row tabular datasets via [cuDF](https://github.com/rapidsai/cudf). +cuxfilter ( ku-cross-filter ) is a [RAPIDS](https://github.com/rapidsai) framework to connect web visualizations to GPU accelerated crossfiltering. Inspired by the javascript version of the [original]( https://github.com/crossfilter/crossfilter), it enables interactive and super fast multi-dimensional filtering of 100 million+ row tabular datasets via [cuDF](https://github.com/rapidsai/cudf). ## RAPIDS Viz -cuXfilter is one of the core projects of the “RAPIDS viz” team. Taking the axiom that “a slider is worth a thousand queries” from @lmeyerov to heart, we want to enable fast exploratory data analytics through an easier-to-use pythonic notebook interface. +cuxfilter is one of the core projects of the “RAPIDS viz” team. Taking the axiom that “a slider is worth a thousand queries” from @lmeyerov to heart, we want to enable fast exploratory data analytics through an easier-to-use pythonic notebook interface. As there are many fantastic visualization libraries available for the web, our general principle is not to create our own viz library, but to enhance others with faster acceleration, larger datasets, and better dev UX. **Basically, we want to take the headache out of interconnecting multiple charts to a GPU backend, so you can get to visually exploring data faster.** -By the way, cuXfilter is best used to interact with large (1 million+) tabular datasets. GPU’s are fast, but accessing that speedup requires some architecture overhead that isn’t worthwhile for small datasets. +By the way, cuxfilter is best used to interact with large (1 million+) tabular datasets. GPU’s are fast, but accessing that speedup requires some architecture overhead that isn’t worthwhile for small datasets. For more detailed requirements, see below. -## cuXfilter.py Architecture +## cuxfilter.py Architecture -The python version of cuXfilter leverage jupyter notebook and bokeh server to greatly reduce backend complexity. Currently we are focusing development efforts on the python version instead of the older javascript version. +The python version of cuxfilter leverage jupyter notebook and bokeh server to greatly reduce backend complexity. Currently we are focusing development efforts on the python version instead of the older javascript version. ### What is cuDataTiles? -cuXfilter.py implements cuDataTiles, a GPU accelerated version of data tiles based on the work of [Falcon](https://github.com/uwdata/falcon). When starting to interact with specific charts in a cuXfilter dashboard, values for the other charts are precomputed to allow for fast slider scrubbing without having to recalculate values. +cuxfilter.py implements cuDataTiles, a GPU accelerated version of data tiles based on the work of [Falcon](https://github.com/uwdata/falcon). When starting to interact with specific charts in a cuxfilter dashboard, values for the other charts are precomputed to allow for fast slider scrubbing without having to recalculate values. ### Open Source Projects -cuXfilter wouldn’t be possible without using these great open source projects: +cuxfilter wouldn’t be possible without using these great open source projects: - [Bokeh](https://bokeh.pydata.org/en/latest/) - [DataShader](http://datashader.org/) @@ -32,22 +32,22 @@ cuXfilter wouldn’t be possible without using these great open source projects: - [Jupyter](https://jupyter.org/about) -### Where is the original cuXfilter and Mortgage Viz Demo? +### Where is the original cuxfilter and Mortgage Viz Demo? -The original version (0.2) of cuXfilter, most known for the backend powering the Mortgage Viz Demo, has been moved into the [`GTC-2018-mortgage-visualization branch`](https://github.com/rapidsai/cuxfilter/tree/GTC-2018-mortgage-visualization). As it has a much more complicated backend and javascript API, we’ve decided to focus more on the streamlined notebook focused version in the `/python` folder. +The original version (0.2) of cuxfilter, most known for the backend powering the Mortgage Viz Demo, has been moved into the [`GTC-2018-mortgage-visualization branch`](https://github.com/rapidsai/cuxfilter/tree/GTC-2018-mortgage-visualization). As it has a much more complicated backend and javascript API, we’ve decided to focus more on the streamlined notebook focused version in the `/python` folder. ## Usage ```python -import cuXfilter -from cuXfilter import charts +import cuxfilter +from cuxfilter import charts #update data_dir if you have downloaded datasets elsewhere DATA_DIR = './data' -from cuXfilter.sampledata import datasets_check +from cuxfilter.sampledata import datasets_check datasets_check('auto_accidents', base_dir=DATA_DIR) -cux_df = cuXfilter.DataFrame.from_arrow('./data/auto_accidents.arrow') +cux_df = cuxfilter.DataFrame.from_arrow('./data/auto_accidents.arrow') cux_df.data['ST_CASE'] = cux_df.data['ST_CASE'].astype('float64') label_map = {1: 'Sunday', 2: 'Monday', 3: 'Tuesday', 4: 'Wednesday', 5: 'Thursday', 6: 'Friday', 7: 'Saturday', 9: 'Unknown'} @@ -61,7 +61,7 @@ chart3 = charts.bokeh.bar('DAY_WEEK', x_label_map=label_map) chart4 = charts.bokeh.bar('MONTH') #declare dashboard -d = cux_df.dashboard([chart1, chart2, chart3, chart4], layout=cuXfilter.layouts.feature_and_double_base,theme = cuXfilter.themes.light, title='Auto Accident Dataset') +d = cux_df.dashboard([chart1, chart2, chart3, chart4], layout=cuxfilter.layouts.feature_and_double_base,theme = cuxfilter.themes.light, title='Auto Accident Dataset') #preview the dashboard inside the notebook(non-interactive) with layout await d.preview() @@ -83,7 +83,7 @@ Troubleshooting help can be found [here](https://rapidsai.github.io/cuxfilter/in ## Installation -> You need to have RAPIDS (cudf) installed for cuXfilter to work +> You need to have RAPIDS (cudf) installed for cuxfilter to work ### 1. If installing within the rapidai DOCKER container, follow the following instructions @@ -182,11 +182,11 @@ The notebooks inside `python/notebooks` already have a check function which veri While in the directory you want the datasets to be saved, execute the following ```bash -#go the the environment where cuXfilter is installed. Skip if in a docker container +#go the the environment where cuxfilter is installed. Skip if in a docker container source activate test_env #download and extract the datasets -python -c "from cuXfilter.sampledata import datasets_check; datasets_check(base_dir='./')" +python -c "from cuxfilter.sampledata import datasets_check; datasets_check(base_dir='./')" ``` Individual links: @@ -217,12 +217,12 @@ Our plan is to **add support in the future** for the following libraries: ## Contributing Developers Guide -cuXfilter.py acts like a connector library and it is easy to add support for new libraries. The `python/cuxfilter/charts/core` directory has all the core chart classes which can be inherited and used to implement a few (viz related) functions and support dashboarding in cuXfilter directly. +cuxfilter.py acts like a connector library and it is easy to add support for new libraries. The `python/cuxfilter/charts/core` directory has all the core chart classes which can be inherited and used to implement a few (viz related) functions and support dashboarding in cuxfilter directly. You can see the examples to implement viz libraries in the bokeh and cudatashader directories. Let us know if you would like to add a chart by opening a feature request issue or submitting a PR. For more details, check out the [contributing guide](./CONTRIBUTING.md). ## Future Work -cuXfilter development is in early stages and on going. See what we are planning next on the [projects page](https://github.com/rapidsai/cuxfilter/projects). +cuxfilter development is in early stages and on going. See what we are planning next on the [projects page](https://github.com/rapidsai/cuxfilter/projects). diff --git a/build.sh b/build.sh new file mode 100644 index 00000000..c998a2ea --- /dev/null +++ b/build.sh @@ -0,0 +1,130 @@ +#!/bin/bash + +# Copyright (c) 2019, NVIDIA CORPORATION. + +# cuDF build script + +# This script is used to build the component(s) in this repo from +# source, and can be called with various options to customize the +# build as needed (see the help output for details) + +# Abort script on first error +set -e + +NUMARGS=$# +ARGS=$* + +# NOTE: ensure all dir changes are relative to the location of this +# script, and that this script resides in the repo dir! +REPODIR=$(cd $(dirname $0); pwd) + +VALIDARGS="clean cuxfilter cudatashader -v -g -n --allgpuarch -h" +HELP="$0 [clean] [cuxfilter] [cudatashader] [-v] [-g] [-n] [-h] + clean - remove all existing build artifacts and configuration (start + over) + cuxfilter - build the cuxfilter library only + cudatashader - build the cudatashader library only + -v - verbose build mode + -g - build for debug + -n - no install step + --allgpuarch - build for all supported GPU architectures + -h - print this text +" +CUXFILTER_BUILD_DIR=${REPODIR}/python/cuxfilter/build +CUDATASHADER_BUILD_DIR=${REPODIR}/../cuDatashader/build +BUILD_DIRS="${CUXFILTER_BUILD_DIR} #{CUDATASHADER_BUILD_DIR}" + +# Set defaults for vars modified by flags to this script +VERBOSE="" +BUILD_TYPE=Release +INSTALL_TARGET=install +BENCHMARKS=OFF +BUILD_ALL_GPU_ARCH=0 + +# Set defaults for vars that may not have been defined externally +# FIXME: if INSTALL_PREFIX is not set, check PREFIX, then check +# CONDA_PREFIX, but there is no fallback from there! +INSTALL_PREFIX=${INSTALL_PREFIX:=${PREFIX:=${CONDA_PREFIX}}} +PARALLEL_LEVEL=${PARALLEL_LEVEL:=""} + +function hasArg { + (( ${NUMARGS} != 0 )) && (echo " ${ARGS} " | grep -q " $1 ") +} + +if hasArg -h; then + echo "${HELP}" + exit 0 +fi + +# Check for valid usage +if (( ${NUMARGS} != 0 )); then + for a in ${ARGS}; do + if ! (echo " ${VALIDARGS} " | grep -q " ${a} "); then + echo "Invalid option: ${a}" + exit 1 + fi + done +fi + +# Process flags +if hasArg -v; then + VERBOSE=1 +fi +if hasArg -g; then + BUILD_TYPE=Debug +fi +if hasArg -n; then + INSTALL_TARGET="" +fi +if hasArg --allgpuarch; then + BUILD_ALL_GPU_ARCH=1 +fi +if hasArg benchmarks; then + BENCHMARKS="ON" +fi + +# If clean given, run it prior to any other steps +if hasArg clean; then + # If the dirs to clean are mounted dirs in a container, the + # contents should be removed but the mounted dirs will remain. + # The find removes all contents but leaves the dirs, the rmdir + # attempts to remove the dirs but can fail safely. + for bd in ${BUILD_DIRS}; do + if [ -d ${bd} ]; then + find ${bd} -mindepth 1 -delete + rmdir ${bd} || true + fi + done +fi + +if (( ${BUILD_ALL_GPU_ARCH} == 0 )); then + GPU_ARCH="-DGPU_ARCHS=" + echo "Building for the architecture of the GPU in the system..." +else + GPU_ARCH="-DGPU_ARCHS=ALL" + echo "Building for *ALL* supported GPU architectures..." +fi + +################################################################################ + +# Build and install the cuxfilter Python package +if (( ${NUMARGS} == 0 )) || hasArg cuxfilter; then + + cd ${REPODIR}/python + if [[ ${INSTALL_TARGET} != "" ]]; then + python setup.py build_ext --inplace + python setup.py install --single-version-externally-managed --record=record.txt + else + python setup.py build_ext --inplace --library-dir=${LIBCUDF_BUILD_DIR} + fi +fi + +# Build and install the cudatashader Python package +if (( ${NUMARGS} == 0 )) || hasArg cudatashader; then + + cd ${REPODIR}/../ + git clone https://github.com/rapidsai/cuDataShader.git + cd ${REPODIR}/../cuDataShader + python setup.py install --single-version-externally-managed --record=record.txt + cd ${REPODIR} +fi \ No newline at end of file diff --git a/ci/checks/changelog.sh b/ci/checks/changelog.sh new file mode 100644 index 00000000..aef23858 --- /dev/null +++ b/ci/checks/changelog.sh @@ -0,0 +1,37 @@ +#!/bin/bash +# Copyright (c) 2018, NVIDIA CORPORATION. +######################### +# cuxfilter CHANGELOG Tester # +######################### + +# Checkout master for comparison +git checkout --quiet master + +# Switch back to tip of PR branch +git checkout --quiet current-pr-branch + +# Ignore errors during searching +set +e + +# Get list of modified files between matster and PR branch +CHANGELOG=`git diff --name-only master...current-pr-branch | grep CHANGELOG.md` +# Check if CHANGELOG has PR ID +PRNUM=`cat CHANGELOG.md | grep "$PR_ID"` +RETVAL=0 + +# Return status of check result +if [ "$CHANGELOG" != "" -a "$PRNUM" != "" ] ; then + echo -e "\n\n>>>> PASSED: CHANGELOG.md has been updated with current PR information.\n\nPlease ensure the update meets the following criteria.\n" +else + echo -e "\n\n>>>> FAILED: CHANGELOG.md has not been updated!\n\nPlease add a line describing this PR to CHANGELOG.md in the repository root directory. The line should meet the following criteria.\n" + RETVAL=1 +fi + +cat << EOF + It should be placed under the section for the appropriate release. + It should be placed under "New Features", "Improvements", or "Bug Fixes" as appropriate. + It should be formatted as '- PR # ' + Example format for #491 '- PR #491 Add CI test script to check for updates to CHANGELOG.md in PRs' +EOF + +exit $RETVAL diff --git a/ci/checks/style.sh b/ci/checks/style.sh new file mode 100644 index 00000000..b7a37dd3 --- /dev/null +++ b/ci/checks/style.sh @@ -0,0 +1,39 @@ +# Ignore errors and set path +set +e +PATH=/conda/bin:$PATH +LC_ALL=C.UTF-8 +LANG=C.UTF-8 + +# Activate common conda env +source activate gdf + +# Run black and get results/return code +BLACK=`black --check python` +BLACK_RETVAL=$? + +# Run flake8 and get results/return code +FLAKE=`flake8 python` +FLAKE_RETVAL=$? + +if [ "$BLACK_RETVAL" != "0" ]; then + echo -e "\n\n>>>> FAILED: black style check; begin output\n\n" + echo -e "$BLACK" + echo -e "\n\n>>>> FAILED: black style check; end output\n\n" +else + echo -e "\n\n>>>> PASSED: black style check\n\n" +fi + +if [ "$FLAKE_RETVAL" != "0" ]; then + echo -e "\n\n>>>> FAILED: flake8 style check; begin output\n\n" + echo -e "$FLAKE" + echo -e "\n\n>>>> FAILED: flake8 style check; end output\n\n" +else + echo -e "\n\n>>>> PASSED: flake8 style check\n\n" +fi + +RETVALS=($BLACK_RETVAL $FLAKE_RETVAL) +IFS=$'\n' +RETVAL=`echo "${RETVALS[*]}" | sort -nr | head -n1` + +exit $RETVAL + diff --git a/ci/cpu/build.sh b/ci/cpu/build.sh new file mode 100644 index 00000000..812e45be --- /dev/null +++ b/ci/cpu/build.sh @@ -0,0 +1,63 @@ +#!/bin/bash +# Copyright (c) 2018, NVIDIA CORPORATION. +###################################### +# cuDF CPU conda build script for CI # +###################################### +set -e + +# Logger function for build status output +function logger() { + echo -e "\n>>>> $@\n" +} + +# Set path and build parallel level +export PATH=/conda/bin:/usr/local/cuda/bin:$PATH +export PARALLEL_LEVEL=4 + +# Set home to the job's workspace +export HOME=$WORKSPACE + +# Switch to project root; also root of repo checkout +cd $WORKSPACE + +# Get latest tag and number of commits since tag +export GIT_DESCRIBE_TAG=`git describe --abbrev=0 --tags` +export GIT_DESCRIBE_NUMBER=`git rev-list ${GIT_DESCRIBE_TAG}..HEAD --count` + +# If nightly build, append current YYMMDD to version +if [[ "$BUILD_MODE" = "branch" && "$SOURCE_BRANCH" = branch-* ]] ; then + export VERSION_SUFFIX=`date +%y%m%d` +fi + +################################################################################ +# SETUP - Check environment +################################################################################ + +logger "Get env..." +env + +logger "Activate conda env..." +source activate gdf + +logger "Check versions..." +python --version +gcc --version +g++ --version +conda list + +# FIX Added to deal with Anancoda SSL verification issues during conda builds +conda config --set ssl_verify False + +################################################################################ +# BUILD - Conda package builds (conda deps: libcudf <- libcudf_cffi <- cudf) +################################################################################ + +logger "Build conda pkg for cuxfilter..." +source ci/cpu/cuxfilter/build_cuxfilter.sh + +################################################################################ +# UPLOAD - Conda packages +################################################################################ + +logger "Upload conda pkgs..." +source ci/cpu/upload_anaconda.sh \ No newline at end of file diff --git a/ci/cpu/cuxfilter/build_cuxfilter.sh b/ci/cpu/cuxfilter/build_cuxfilter.sh new file mode 100644 index 00000000..de0d5f7b --- /dev/null +++ b/ci/cpu/cuxfilter/build_cuxfilter.sh @@ -0,0 +1,4 @@ +set -e + +echo "Building cuxfilter" +conda build conda/recipes/cuxfilter --python=$PYTHON diff --git a/ci/cpu/prebuild.sh b/ci/cpu/prebuild.sh new file mode 100644 index 00000000..8ce0fa78 --- /dev/null +++ b/ci/cpu/prebuild.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +#Upload cuxfilter once per PYTHON +if [[ "$CUDA" == "9.2" ]]; then + export UPLOAD_CUDF=1 +else + export UPLOAD_CUDF=0 +fi \ No newline at end of file diff --git a/ci/cpu/upload_anaconda.sh b/ci/cpu/upload_anaconda.sh new file mode 100644 index 00000000..bd99b98b --- /dev/null +++ b/ci/cpu/upload_anaconda.sh @@ -0,0 +1,32 @@ +#!/bin/bash +# +# Adopted from https://github.com/tmcdonell/travis-scripts/blob/dfaac280ac2082cd6bcaba3217428347899f2975/update-accelerate-buildbot.sh + +set -e + +export CUXFILTER_FILE=`conda build conda/recipes/cuXfilter --output` + +SOURCE_BRANCH=master +CUDA_REL=${CUDA_VERSION%.*} + +# Restrict uploads to master branch +if [ ${GIT_BRANCH} != ${SOURCE_BRANCH} ]; then + echo "Skipping upload" + return 0 +fi + +if [ -z "$MY_UPLOAD_KEY" ]; then + echo "No upload key" + return 0 +fi + +if [ "$UPLOAD_CUXFILTER" == "1" ]; then + LABEL_OPTION="--label main --label cuda9.2 --label cuda10.0" + echo "LABEL_OPTION=${LABEL_OPTION}" + + test -e ${CUXFILTER_FILE} + echo "Upload cuXfilter" + echo ${CUXFILTER_FILE} + anaconda -t ${MY_UPLOAD_KEY} upload -u ${CONDA_USERNAME:-rapidsai} ${LABEL_OPTION} --force ${CUXFILTER_FILE} + +fi \ No newline at end of file diff --git a/ci/gpu/build.sh b/ci/gpu/build.sh new file mode 100644 index 00000000..09078694 --- /dev/null +++ b/ci/gpu/build.sh @@ -0,0 +1,80 @@ +#!/bin/bash +# Copyright (c) 2018, NVIDIA CORPORATION. +######################################### +# cuDF GPU build and test script for CI # +######################################### +set -e +NUMARGS=$# +ARGS=$* + +# Logger function for build status output +function logger() { + echo -e "\n>>>> $@\n" +} + +# Arg parsing function +function hasArg { + (( ${NUMARGS} != 0 )) && (echo " ${ARGS} " | grep -q " $1 ") +} + +# Set path and build parallel level +export PATH=/conda/bin:/usr/local/cuda/bin:$PATH +export PARALLEL_LEVEL=4 +export CUDA_REL=${CUDA_VERSION%.*} + +# Set home to the job's workspace +export HOME=$WORKSPACE + +# Parse git describe +cd $WORKSPACE +export GIT_DESCRIBE_TAG=`git describe --tags` +export MINOR_VERSION=`echo $GIT_DESCRIBE_TAG | grep -o -E '([0-9]+\.[0-9]+)'` + +################################################################################ +# SETUP - Check environment +################################################################################ + +logger "Check environment..." +env + +logger "Check GPU usage..." +nvidia-smi + +logger "Activate conda env..." +source activate gdf +conda install "cudf=$MINOR_VERSION.*" "cudatoolkit=$CUDA_REL" \ + "numpy>=1.16" "cupy>=6.0.0" "pandas>=0.24.2,<0.25" "panel=0.6.*" \ + "bokeh>=1.2.*" "geopandas>=0.6.*" "pyproj=1.9.*" "pytest" + +# Install the master version of cudatashader +logger "pip install git+https://github.com/rapidsai/cuDataShader.git --upgrade --no-deps" +pip install git+https://github.com/rapidsai/cuDataShader.git --upgrade --no-deps + +logger "Check versions..." +python --version +$CC --version +$CXX --version +conda list + +################################################################################ +# BUILD - Build cuxfilter from source +################################################################################ + +logger "Build libcudf..." +$WORKSPACE/build.sh clean cuxfilter + +################################################################################ +# TEST - Run pytest +################################################################################ + +if hasArg --skip-tests; then + logger "Skipping Tests..." +else + logger "Check GPU usage..." + nvidia-smi + + cd $WORKSPACE/python/cuxfilter/tests + logger "Python py.test for cuxfilter..." + py.test --cache-clear --junitxml=${WORKSPACE}/junit-cuxfilter.xml -v + +fi \ No newline at end of file diff --git a/python/cudf_dev_cuda10.0.yml b/conda/environments/cuXfilter_dev_cuda10.0.yml similarity index 75% rename from python/cudf_dev_cuda10.0.yml rename to conda/environments/cuXfilter_dev_cuda10.0.yml index fb718038..cab6616b 100644 --- a/python/cudf_dev_cuda10.0.yml +++ b/conda/environments/cuXfilter_dev_cuda10.0.yml @@ -5,11 +5,17 @@ channels: - conda-forge - anaconda dependencies: -- python=3.6 +- cupy>=6* +- python>=3.6,<3.8 - rapids=0.10 -- pytest -- geopandas +- geopandas>=0.6.* - pyproj=1.9.6 +- pandoc=<2.0.0 +- panel=0.6.* +- bokeh>=1.2.* +- cudatoolkit=10.0 +- recommonmark +- pytest - sphinx - sphinx_rtd_theme - jupyter_sphinx @@ -17,18 +23,10 @@ dependencies: - nbsphinx - numpydoc - ipython -- pandoc=<2.0.0 -- panel=0.6.* -- altair -- bokeh - pyppeteer - jupyterlab -- recommonmark=0.6.0 - black +- flake8 - pip - pip: - sphinx-markdown-tables - - nose - - flake8 - - xarray - - cupy-cuda100 \ No newline at end of file diff --git a/conda/environments/cuXfilter_dev_cuda10.1.yml b/conda/environments/cuXfilter_dev_cuda10.1.yml new file mode 100644 index 00000000..23733fdf --- /dev/null +++ b/conda/environments/cuXfilter_dev_cuda10.1.yml @@ -0,0 +1,32 @@ +# name: cudf_dev10.0 +channels: +- rapidsai +- nvidia +- conda-forge +- anaconda +dependencies: +- cupy>=6* +- python>=3.6,<3.8 +- rapids=0.10 +- geopandas>=0.6.* +- pyproj=1.9.6 +- pandoc=<2.0.0 +- panel=0.6.* +- bokeh>=1.2.* +- cudatoolkit=10.1 +- recommonmark +- pytest +- sphinx +- sphinx_rtd_theme +- jupyter_sphinx +- sphinxcontrib-websupport +- nbsphinx +- numpydoc +- ipython +- pyppeteer +- jupyterlab +- black +- flake8 +- pip +- pip: + - sphinx-markdown-tables diff --git a/conda/environments/cuXfilter_dev_cuda9.2.yml b/conda/environments/cuXfilter_dev_cuda9.2.yml new file mode 100644 index 00000000..d8d7270e --- /dev/null +++ b/conda/environments/cuXfilter_dev_cuda9.2.yml @@ -0,0 +1,32 @@ +# name: cudf_dev10.0 +channels: +- rapidsai +- nvidia +- conda-forge +- anaconda +dependencies: +- cupy>=6* +- python>=3.6,<3.8 +- rapids=0.10 +- geopandas>=0.6.* +- pyproj=1.9.6 +- pandoc=<2.0.0 +- panel=0.6.* +- bokeh>=1.2.* +- cudatoolkit=9.2 +- recommonmark +- pytest +- sphinx +- sphinx_rtd_theme +- jupyter_sphinx +- sphinxcontrib-websupport +- nbsphinx +- numpydoc +- ipython +- pyppeteer +- jupyterlab +- black +- flake8 +- pip +- pip: + - sphinx-markdown-tables diff --git a/conda/recipes/cuxfilter/build.sh b/conda/recipes/cuxfilter/build.sh new file mode 100644 index 00000000..2d32b32a --- /dev/null +++ b/conda/recipes/cuxfilter/build.sh @@ -0,0 +1,5 @@ +# Copyright (c) 2018-2019, NVIDIA CORPORATION. + +# This assumes the script is executed from the root of the repo directory +./build.sh cudatashader +./build.sh cuxfilter diff --git a/conda/recipes/cuxfilter/meta.yaml b/conda/recipes/cuxfilter/meta.yaml new file mode 100644 index 00000000..9fd2804f --- /dev/null +++ b/conda/recipes/cuxfilter/meta.yaml @@ -0,0 +1,45 @@ +# Copyright (c) 2018, NVIDIA CORPORATION. + +{% 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) %} + +package: + name: cuxfilter + version: {{ version }} + +source: + path: ../../.. + +build: + number: {{ git_revision_count }} + string: py{{ py_version }}_{{ git_revision_count }} + script_env: + - VERSION_SUFFIX + +requirements: + build: + - python + - setuptools + run: + - python + - cudf={{ minor_version }} + - cupy>=6* + - panel=0.6.* + - bokeh>=1.2.* + - pyproj=1.9.6 + - geopandas>=0.6.* + - altair + - pyppeteer + +test: + commands: + - python -c "import cuxfilter" + +about: + home: http://rapids.ai/ + license: Apache-2.0 + license_family: Apache + license_file: LICENSE + summary: GPU accelerated cross filtering with cuDF \ No newline at end of file diff --git a/docs/10 minutes to cuXfilter.html b/docs/10 minutes to cuXfilter.html index e6e0e2a7..3cec81a0 100644 --- a/docs/10 minutes to cuXfilter.html +++ b/docs/10 minutes to cuXfilter.html @@ -8,7 +8,7 @@ - 10 minutes to cuXfilter — cuXfilter 0.2 documentation + 10 minutes to cuxfilter — cuxfilter 0.2 documentation @@ -54,7 +54,7 @@ - cuXfilter + cuxfilter @@ -88,8 +88,8 @@
  • Installation
  • API Reference
  • -
  • 10 minutes to cuXfilter
      -
    • What is cuXfilter.py?
    • +
    • 10 minutes to cuxfilter
        +
      • What is cuxfilter.py?
      • The modules
      • Usage
        • 1. Import the required modules
        • @@ -120,7 +120,7 @@ @@ -151,13 +151,13 @@
        • Docs »
        • -
        • 10 minutes to cuXfilter
        • +
        • 10 minutes to cuxfilter
        • - View page source + View page source
        • @@ -392,26 +392,26 @@ text-align: unset; } -
          -

          10 minutes to cuXfilter

          -

          This is a short introduction to the cuXfilter.py library, mostly going over the basic usage and features provided as a quick summary.

          -
          -

          What is cuXfilter.py?

          -

          cuXfilter is inspired from the Crossfilter library, which is a fast, browser-based filtering mechanism across multiple dimensions and offers features do groupby operations on top of the dimensions. One of the major limitations of using Crossfilter is that it keeps data in-memory on a client-side browser, making it inefficient for processing large datasets.

          -

          cuXfilter solves the issues by leveraging the power of the rapids.ai stack, mainly cudf. The data is maintained in a gpu as a GPU DataFrame and operations like groupby aggregations, sorting and querying are done on the gpu itself, only returning the result as the output to the charts.

          -

          cuXfilter acts as a connector library, which provides the connections between different visualization libraries and a GPU dataframe without much hassle. This also allows the user to use charts from different libraries in a single dashboard, while also providing the interaction.

          -

          cuXfilter uses data-tiles on the front-end, which are precomputed aggregations, for all possible interactions for a single chart, for updating all remaining charts in a dashboard. data-tiles are just smartly computed groupbys, and generally take around 250ms per chart for a 100M row dataset(do the rest of the math!!!!, ps: its fast!). Once it’s downloaded, interactions are seamless, and well, realtime.

          +
          +

          10 minutes to cuxfilter

          +

          This is a short introduction to the cuxfilter.py library, mostly going over the basic usage and features provided as a quick summary.

          +
          +

          What is cuxfilter.py?

          +

          cuxfilter is inspired from the Crossfilter library, which is a fast, browser-based filtering mechanism across multiple dimensions and offers features do groupby operations on top of the dimensions. One of the major limitations of using Crossfilter is that it keeps data in-memory on a client-side browser, making it inefficient for processing large datasets.

          +

          cuxfilter solves the issues by leveraging the power of the rapids.ai stack, mainly cudf. The data is maintained in a gpu as a GPU DataFrame and operations like groupby aggregations, sorting and querying are done on the gpu itself, only returning the result as the output to the charts.

          +

          cuxfilter acts as a connector library, which provides the connections between different visualization libraries and a GPU dataframe without much hassle. This also allows the user to use charts from different libraries in a single dashboard, while also providing the interaction.

          +

          cuxfilter uses data-tiles on the front-end, which are precomputed aggregations, for all possible interactions for a single chart, for updating all remaining charts in a dashboard. data-tiles are just smartly computed groupbys, and generally take around 250ms per chart for a 100M row dataset(do the rest of the math!!!!, ps: its fast!). Once it’s downloaded, interactions are seamless, and well, realtime.

          The modules

          -

          cuXfilter has following usable modules

          +

          cuxfilter has following usable modules

            -
          1. cuXfilter.DataFrame

          2. -
          3. cuXfilter.DashBoard

          4. -
          5. cuXfilter.charts

          6. -
          7. cuXfilter.layouts

          8. +
          9. cuxfilter.DataFrame

          10. +
          11. cuxfilter.DashBoard

          12. +
          13. cuxfilter.charts

          14. +
          15. cuxfilter.layouts

          @@ -431,14 +431,14 @@

          1. Import the required modules

          2. Read some data

          -

          cuXfilter can read arrow files off disk, or an inmemory cudf dataframe

          +

          cuxfilter can read arrow files off disk, or an inmemory cudf dataframe

          [6]:
           
          -#create cuXfilter DataFrame
          +#create cuxfilter DataFrame
           cux_df = DataFrame.from_arrow('../../data/auto_accident_loc_data.arrow')
           cux_df.data['ST_CASE'] = cux_df.data['ST_CASE'].astype('float64')
           cux_df.data.head()
          @@ -2159,7 +2159,7 @@ 

          3. Create some charts

          -from cuXfilter.assets.custom_tiles import get_provider, Vendors
          +from cuxfilter.assets.custom_tiles import get_provider, Vendors
           
          @@ -3768,7 +3768,7 @@

          5. View the dashboard

          -_images/10_minutes_to_cuXfilter_18_2.png +_images/10_minutes_to_cuxfilter_18_2.png
diff --git a/docs/_sources/10 minutes to cuXfilter.ipynb.txt b/docs/_sources/10 minutes to cuXfilter.ipynb.txt index d69424ce..4b81b3a6 100644 --- a/docs/_sources/10 minutes to cuXfilter.ipynb.txt +++ b/docs/_sources/10 minutes to cuXfilter.ipynb.txt @@ -4,34 +4,34 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# 10 minutes to cuXfilter" + "# 10 minutes to cuxfilter" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "This is a short introduction to the cuXfilter.py library, mostly going over the basic usage and features provided as a quick summary." + "This is a short introduction to the cuxfilter.py library, mostly going over the basic usage and features provided as a quick summary." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### What is cuXfilter.py?" + "### What is cuxfilter.py?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "cuXfilter is inspired from the Crossfilter library, which is a fast, browser-based filtering mechanism across multiple dimensions and offers features do groupby operations on top of the dimensions. One of the major limitations of using Crossfilter is that it keeps data in-memory on a client-side browser, making it inefficient for processing large datasets.\n", + "cuxfilter is inspired from the Crossfilter library, which is a fast, browser-based filtering mechanism across multiple dimensions and offers features do groupby operations on top of the dimensions. One of the major limitations of using Crossfilter is that it keeps data in-memory on a client-side browser, making it inefficient for processing large datasets.\n", "\n", - "cuXfilter solves the issues by leveraging the power of the rapids.ai stack, mainly cudf. The data is maintained in a gpu as a GPU DataFrame and operations like groupby aggregations, sorting and querying are done on the gpu itself, only returning the result as the output to the charts.\n", + "cuxfilter solves the issues by leveraging the power of the rapids.ai stack, mainly cudf. The data is maintained in a gpu as a GPU DataFrame and operations like groupby aggregations, sorting and querying are done on the gpu itself, only returning the result as the output to the charts.\n", "\n", - "cuXfilter acts as a `connector` library, which provides the connections between different visualization libraries and a GPU dataframe without much hassle. This also allows the user to use charts from different libraries in a single dashboard, while also providing the interaction.\n", + "cuxfilter acts as a `connector` library, which provides the connections between different visualization libraries and a GPU dataframe without much hassle. This also allows the user to use charts from different libraries in a single dashboard, while also providing the interaction.\n", "\n", - "cuXfilter uses data-tiles on the front-end, which are precomputed aggregations, for all possible interactions for a single chart, for updating all remaining charts in a dashboard. data-tiles are just smartly computed groupbys, and generally take around 250ms per chart for a 100M row dataset(do the rest of the math!!!!, ps: its fast!). Once it's downloaded, interactions are seamless, and well, realtime." + "cuxfilter uses data-tiles on the front-end, which are precomputed aggregations, for all possible interactions for a single chart, for updating all remaining charts in a dashboard. data-tiles are just smartly computed groupbys, and generally take around 250ms per chart for a 100M row dataset(do the rest of the math!!!!, ps: its fast!). Once it's downloaded, interactions are seamless, and well, realtime." ] }, { @@ -45,17 +45,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "> cuXfilter has following usable modules" + "> cuxfilter has following usable modules" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "1. cuXfilter.DataFrame\n", - "2. cuXfilter.DashBoard\n", - "3. cuXfilter.charts\n", - "4. cuXfilter.layouts" + "1. cuxfilter.DataFrame\n", + "2. cuxfilter.DashBoard\n", + "3. cuxfilter.charts\n", + "4. cuxfilter.layouts" ] }, { @@ -78,7 +78,7 @@ "metadata": {}, "outputs": [], "source": [ - "from cuXfilter import charts, DataFrame, themes, layouts" + "from cuxfilter import charts, DataFrame, themes, layouts" ] }, { @@ -87,7 +87,7 @@ "source": [ "#### 2. Read some data\n", "\n", - "> cuXfilter can read arrow files off disk, or an inmemory cudf dataframe" + "> cuxfilter can read arrow files off disk, or an inmemory cudf dataframe" ] }, { @@ -1826,7 +1826,7 @@ } ], "source": [ - "#create cuXfilter DataFrame\n", + "#create cuxfilter DataFrame\n", "cux_df = DataFrame.from_arrow('../../data/auto_accident_loc_data.arrow')\n", "cux_df.data['ST_CASE'] = cux_df.data['ST_CASE'].astype('float64')\n", "cux_df.data.head()" @@ -1847,7 +1847,7 @@ "metadata": {}, "outputs": [], "source": [ - "from cuXfilter.assets.custom_tiles import get_provider, Vendors" + "from cuxfilter.assets.custom_tiles import get_provider, Vendors" ] }, { diff --git a/docs/_sources/charts/bokeh_charts.rst.txt b/docs/_sources/charts/bokeh_charts.rst.txt index d9900ba1..75bac78d 100644 --- a/docs/_sources/charts/bokeh_charts.rst.txt +++ b/docs/_sources/charts/bokeh_charts.rst.txt @@ -1,7 +1,7 @@ Bokeh Charts ============ -.. currentmodule:: cuXfilter.charts +.. currentmodule:: cuxfilter.charts Bar Chart --------- @@ -13,7 +13,7 @@ Example .. jupyter-execute:: import cudf - from cuXfilter import charts, DataFrame + from cuxfilter import charts, DataFrame cux_df = DataFrame.from_dataframe(cudf.DataFrame({'key': [0, 1, 2, 3, 4], 'val':[float(i + 10) for i in range(5)]})) bar_chart_1 = charts.bokeh.bar('key', 'val', data_points=5, add_interaction=False) @@ -31,7 +31,7 @@ Example .. jupyter-execute:: import cudf - from cuXfilter import charts, DataFrame + from cuxfilter import charts, DataFrame cux_df = DataFrame.from_dataframe(cudf.DataFrame({'key': [0, 1, 2, 3, 4], 'val':[float(i + 10) for i in range(5)]})) line_chart_1 = charts.bokeh.line('key', 'val', data_points=5, add_interaction=False) @@ -49,7 +49,7 @@ Example .. jupyter-execute:: import cudf - from cuXfilter import charts, DataFrame + from cuxfilter import charts, DataFrame cux_df = DataFrame.from_dataframe(cudf.DataFrame({'states': [i for i in range(57)], 'val':[float(i + 10) for i in range(57)]})) choropleth_chart_1 = charts.bokeh.choropleth(x = 'states', y = 'val', aggregate_fn='mean', data_points=57, add_interaction=False, diff --git a/docs/_sources/charts/cudatashader_charts.rst.txt b/docs/_sources/charts/cudatashader_charts.rst.txt index 0232d5df..5642565f 100644 --- a/docs/_sources/charts/cudatashader_charts.rst.txt +++ b/docs/_sources/charts/cudatashader_charts.rst.txt @@ -2,7 +2,7 @@ CuDataShader Charts =================== -.. currentmodule:: cuXfilter.charts +.. currentmodule:: cuxfilter.charts line chart @@ -14,7 +14,7 @@ Example ~~~~~~~ .. jupyter-execute:: - from cuXfilter import charts, DataFrame + from cuxfilter import charts, DataFrame import numpy as np import cudf import random @@ -38,7 +38,7 @@ Example ~~~~~~~ .. jupyter-execute:: - from cuXfilter import charts, DataFrame + from cuxfilter import charts, DataFrame import cudf import random @@ -60,7 +60,7 @@ Example ~~~~~~~ .. jupyter-execute:: - from cuXfilter import charts, DataFrame + from cuxfilter import charts, DataFrame import cudf import random @@ -83,12 +83,12 @@ Example ~~~~~~~ .. jupyter-execute:: - from cuXfilter.sampledata import signals_data - import cuXfilter + from cuxfilter.sampledata import signals_data + import cuxfilter - cux_df = cuXfilter.DataFrame.from_dataframe(signals_data) + cux_df = cuxfilter.DataFrame.from_dataframe(signals_data) - stacked_lines_chart = cuXfilter.charts.cudatashader.stacked_lines(x='Time', y=['a', 'b', 'c', 'd', 'e', 'f', 'g', 'x', 'y', 'z'], + stacked_lines_chart = cuxfilter.charts.cudatashader.stacked_lines(x='Time', y=['a', 'b', 'c', 'd', 'e', 'f', 'g', 'x', 'y', 'z'], colors = ["red", "grey", "black", "purple", "pink", "yellow", "brown", "green", "orange", "blue"] ) @@ -108,8 +108,8 @@ Example ~~~~~~~ .. jupyter-execute:: - from cuXfilter import charts, layouts, themes, DataFrame - from cuXfilter.sampledata import unemployment_data + from cuxfilter import charts, layouts, themes, DataFrame + from cuxfilter.sampledata import unemployment_data cux_df = DataFrame.from_dataframe(unemployment_data) diff --git a/docs/_sources/charts/panel_widgets.rst.txt b/docs/_sources/charts/panel_widgets.rst.txt index bc3115e4..7b04be00 100644 --- a/docs/_sources/charts/panel_widgets.rst.txt +++ b/docs/_sources/charts/panel_widgets.rst.txt @@ -1,7 +1,7 @@ Panel Widgets ============= -.. currentmodule:: cuXfilter.charts +.. currentmodule:: cuxfilter.charts Range slider ------------ @@ -13,7 +13,7 @@ Example .. jupyter-execute:: import cudf - from cuXfilter import charts, DataFrame + from cuxfilter import charts, DataFrame cux_df = DataFrame.from_dataframe(cudf.DataFrame({'key': [0, 1, 2, 3, 4], 'val':[float(i + 10) for i in range(5)]})) range_slider = charts.panel_widgets.range_slider('key') @@ -32,7 +32,7 @@ Example .. jupyter-execute:: import cudf - from cuXfilter import charts, DataFrame + from cuxfilter import charts, DataFrame cux_df = DataFrame.from_dataframe(cudf.DataFrame({'key': [0, 0.5, 1, 1.5, 2], 'val':[float(i + 10) for i in range(5)]})) float_slider = charts.panel_widgets.float_slider('key', step_size=0.5) @@ -52,7 +52,7 @@ Example .. jupyter-execute:: import cudf - from cuXfilter import charts, DataFrame + from cuxfilter import charts, DataFrame cux_df = DataFrame.from_dataframe(cudf.DataFrame({'key': [0, 1, 2, 3, 4], 'val':[float(i + 10) for i in range(5)]})) int_slider = charts.panel_widgets.int_slider('val') @@ -71,7 +71,7 @@ Example .. jupyter-execute:: import cudf - from cuXfilter import charts, DataFrame + from cuxfilter import charts, DataFrame cux_df = DataFrame.from_dataframe(cudf.DataFrame({'key': [0, 1, 2, 3, 4], 'val':[float(i + 10) for i in range(5)]})) drop_down = charts.panel_widgets.drop_down('val') @@ -91,7 +91,7 @@ Example .. jupyter-execute:: import cudf - from cuXfilter import charts, DataFrame + from cuxfilter import charts, DataFrame cux_df = DataFrame.from_dataframe(cudf.DataFrame({'key': [0, 1, 2, 3, 4], 'val':[float(i + 10) for i in range(5)]})) multi_select = charts.panel_widgets.multi_select('val') diff --git a/docs/_sources/dataframe.rst.txt b/docs/_sources/dataframe.rst.txt index 45299be6..485f20ff 100644 --- a/docs/_sources/dataframe.rst.txt +++ b/docs/_sources/dataframe.rst.txt @@ -1,7 +1,7 @@ API Reference ============= -.. currentmodule:: cuXfilter.dataframe +.. currentmodule:: cuxfilter.dataframe DataFrame --------- @@ -9,7 +9,7 @@ DataFrame :members: -.. currentmodule:: cuXfilter.dashboard +.. currentmodule:: cuxfilter.dashboard DashBoard --------- diff --git a/docs/_sources/examples/Mortgage_example.ipynb.txt b/docs/_sources/examples/Mortgage_example.ipynb.txt index a0a6ba08..f7a064ed 100644 --- a/docs/_sources/examples/Mortgage_example.ipynb.txt +++ b/docs/_sources/examples/Mortgage_example.ipynb.txt @@ -11,7 +11,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Import cuXfilter" + "## Import cuxfilter" ] }, { @@ -20,10 +20,10 @@ "metadata": {}, "outputs": [], "source": [ - "from cuXfilter import charts\n", - "import cuXfilter\n", + "from cuxfilter import charts\n", + "import cuxfilter\n", "from bokeh import palettes\n", - "from cuXfilter.layouts import *\n", + "from cuxfilter.layouts import *\n", "\n", "\n", "from bokeh.tile_providers import get_provider as gp\n", @@ -63,7 +63,7 @@ } ], "source": [ - "from cuXfilter.sampledata import datasets_check\n", + "from cuxfilter.sampledata import datasets_check\n", "datasets_check('mortgage', base_dir=DATA_DIR)" ] }, @@ -1611,7 +1611,7 @@ } ], "source": [ - "cux_df = cuXfilter.DataFrame.from_arrow('./data/146M_predictions_v2.arrow')" + "cux_df = cuxfilter.DataFrame.from_arrow('./data/146M_predictions_v2.arrow')" ] }, { @@ -1663,7 +1663,7 @@ "metadata": {}, "outputs": [], "source": [ - "d = cux_df.dashboard([chart0, chart1], layout=feature_and_base, theme=cuXfilter.themes.dark, title=\"Ajay's Dashboard\")" + "d = cux_df.dashboard([chart0, chart1], layout=feature_and_base, theme=cuxfilter.themes.dark, title=\"Ajay's Dashboard\")" ] }, { @@ -6352,7 +6352,7 @@ "(function(root) {\n", " function embed_document(root) {\n", " \n", - " var docs_json = {\"c2499e75-929c-43b5-b667-80d92b962fd0\":{\"roots\":{\"references\":[{\"attributes\":{\"code\":\"\\nif (!window.PyViz) {\\n return;\\n}\\nvar receiver = window.PyViz.receivers['1084'];\\nvar events = receiver ? receiver._partial.content.events : [];\\nfor (var event of events) {\\n if ((event.kind == 'ModelChanged') && (event.attr == 'clicks') &&\\n (cb_obj.id == event.model.id) &&\\n (cb_obj['clicks'] == event.new)) {\\n events.pop(events.indexOf(event))\\n return;\\n }\\n}\\n\\ndata = {clicks: cb_obj['clicks'], 'id': cb_obj.id};\\n\\nfunction unique_events(events) {\\n // Processes the event queue ignoring duplicate events\\n // of the same type\\n var unique = [];\\n var unique_events = [];\\n for (var i=0; icuXfilter DashBoard\\n
[title] Markdown(str)\\n[chart1] Column(sizing_mode='scale_both', width=1600)\\n    [0] Bokeh(Figure)\\n[chart2] Column(sizing_mode='scale_both', width=1600)\\n    [0] Bokeh(Figure)\\n    [1] RangeSlider(end=0.8056737184524536, sizing_mode='scale_width', start=0.15787923336029053, step=0.012955889701843262, value=(0.15787923336029053, ..., width=1600)\\n[widgets] Column\\n    [0] Column(css_classes=['non-handle-temp'], sizing_mode='scale_both')\\n        [0] FloatSlider(bar_color='#8735fb', end=146594623, name='Data Points selected', sizing_mode='scale_both', start=0, value=146594623, width=280)\\n    [1] Select(css_classes=['custom-dropdown'], height=50, name='dti', options={'l_1.0': 1, 'l_2.0': 2, ...}, sizing_mode='scale_both', width=280)\\n    [2] RangeSlider(end=850.0, name='borrower_credit_score', sizing_mode='scale_both', start=330.0, step=1, value=(330.0, 850.0), width=280)\\n
\"},\"id\":\"1085\",\"type\":\"Div\"},{\"attributes\":{\"code\":\"\\nif (!window.PyViz) {\\n return;\\n}\\nvar receiver = window.PyViz.receivers['1084'];\\nvar events = receiver ? receiver._partial.content.events : [];\\nfor (var event of events) {\\n if ((event.kind == 'ModelChanged') && (event.attr == 'aspect_ratio') &&\\n (cb_obj.id == event.model.id) &&\\n (cb_obj['aspect_ratio'] == event.new)) {\\n events.pop(events.indexOf(event))\\n return;\\n }\\n}\\n\\ndata = {aspect_ratio: cb_obj['aspect_ratio'], 'id': cb_obj.id};\\n\\nfunction unique_events(events) {\\n // Processes the event queue ignoring duplicate events\\n // of the same type\\n var unique = [];\\n var unique_events = [];\\n for (var i=0; icuxfilter DashBoard\\n
[title] Markdown(str)\\n[chart1] Column(sizing_mode='scale_both', width=1600)\\n    [0] Bokeh(Figure)\\n[chart2] Column(sizing_mode='scale_both', width=1600)\\n    [0] Bokeh(Figure)\\n    [1] RangeSlider(end=0.8056737184524536, sizing_mode='scale_width', start=0.15787923336029053, step=0.012955889701843262, value=(0.15787923336029053, ..., width=1600)\\n[widgets] Column\\n    [0] Column(css_classes=['non-handle-temp'], sizing_mode='scale_both')\\n        [0] FloatSlider(bar_color='#8735fb', end=146594623, name='Data Points selected', sizing_mode='scale_both', start=0, value=146594623, width=280)\\n    [1] Select(css_classes=['custom-dropdown'], height=50, name='dti', options={'l_1.0': 1, 'l_2.0': 2, ...}, sizing_mode='scale_both', width=280)\\n    [2] RangeSlider(end=850.0, name='borrower_credit_score', sizing_mode='scale_both', start=330.0, step=1, value=(330.0, 850.0), width=280)\\n
\"},\"id\":\"1085\",\"type\":\"Div\"},{\"attributes\":{\"code\":\"\\nif (!window.PyViz) {\\n return;\\n}\\nvar receiver = window.PyViz.receivers['1084'];\\nvar events = receiver ? receiver._partial.content.events : [];\\nfor (var event of events) {\\n if ((event.kind == 'ModelChanged') && (event.attr == 'aspect_ratio') &&\\n (cb_obj.id == event.model.id) &&\\n (cb_obj['aspect_ratio'] == event.new)) {\\n events.pop(events.indexOf(event))\\n return;\\n }\\n}\\n\\ndata = {aspect_ratio: cb_obj['aspect_ratio'], 'id': cb_obj.id};\\n\\nfunction unique_events(events) {\\n // Processes the event queue ignoring duplicate events\\n // of the same type\\n var unique = [];\\n var unique_events = [];\\n for (var i=0; i" ], "text/plain": [ - "#### cuXfilter DashBoard\n", + "#### cuxfilter DashBoard\n", " \n", " [title] Markdown(str)\n", " [chart1] Column(sizing_mode='scale_both', width=1600)\n", diff --git a/docs/_sources/examples/NYC_taxi_example.ipynb.txt b/docs/_sources/examples/NYC_taxi_example.ipynb.txt index 1f21a168..db10a4b3 100644 --- a/docs/_sources/examples/NYC_taxi_example.ipynb.txt +++ b/docs/_sources/examples/NYC_taxi_example.ipynb.txt @@ -11,7 +11,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Import cuXfilter" + "## Import cuxfilter" ] }, { @@ -6006,10 +6006,10 @@ } ], "source": [ - "from cuXfilter import charts\n", - "import cuXfilter\n", + "from cuxfilter import charts\n", + "import cuxfilter\n", "from bokeh import palettes\n", - "from cuXfilter.layouts import double_feature\n", + "from cuxfilter.layouts import double_feature\n", "\n", "import cudf" ] @@ -6047,7 +6047,7 @@ } ], "source": [ - "from cuXfilter.sampledata import datasets_check\n", + "from cuxfilter.sampledata import datasets_check\n", "datasets_check('nyc_taxi', base_dir=DATA_DIR)" ] }, @@ -7835,7 +7835,7 @@ } ], "source": [ - "cux_df = cuXfilter.DataFrame.from_dataframe(cudf_df)" + "cux_df = cuxfilter.DataFrame.from_dataframe(cudf_df)" ] }, { @@ -7868,7 +7868,7 @@ "metadata": {}, "outputs": [], "source": [ - "#from cuXfilter.assets.custom_tiles import get_provider, Vendors\n", + "#from cuxfilter.assets.custom_tiles import get_provider, Vendors\n", "#tile_provider = get_provider(Vendors.MAPBOX_LIGHT, access_token=MAPBOX_TOKEN)" ] }, @@ -7899,7 +7899,7 @@ "metadata": {}, "outputs": [], "source": [ - "d = cux_df.dashboard([chart1, chart2], layout=double_feature, theme=cuXfilter.themes.rapids, title= 'NYC TAXI DATASET')" + "d = cux_df.dashboard([chart1, chart2], layout=double_feature, theme=cuxfilter.themes.rapids, title= 'NYC TAXI DATASET')" ] }, { @@ -7970,7 +7970,7 @@ "(function(root) {\n", " function embed_document(root) {\n", " \n", - " var docs_json = {\"92becdc5-e82b-40ee-9e24-ef90861dbb8e\":{\"roots\":{\"references\":[{\"attributes\":{\"code\":\"\\nif (!window.PyViz) {\\n return;\\n}\\nvar receiver = window.PyViz.receivers['1353'];\\nvar events = receiver ? receiver._partial.content.events : [];\\nfor (var event of events) {\\n if ((event.kind == 'ModelChanged') && (event.attr == 'min_height') &&\\n (cb_obj.id == event.model.id) &&\\n (cb_obj['min_height'] == event.new)) {\\n events.pop(events.indexOf(event))\\n return;\\n }\\n}\\n\\ndata = {min_height: cb_obj['min_height'], 'id': cb_obj.id};\\n\\nfunction unique_events(events) {\\n // Processes the event queue ignoring duplicate events\\n // of the same type\\n var unique = [];\\n var unique_events = [];\\n for (var i=0; icuXfilter DashBoard\\n
[title] Markdown(str)\\n[chart1] Column(sizing_mode='scale_both', width=900)\\n    [0] Bokeh(Figure)\\n[chart2] Column(sizing_mode='scale_both', width=900)\\n    [0] Bokeh(Figure)\\n    [1] RangeSlider(end=9, sizing_mode='scale_width', step=1, value=(0, 9), width=900)\\n[widgets] Column\\n    [0] Column(css_classes=['non-handle-temp'], sizing_mode='scale_both')\\n        [0] FloatSlider(bar_color='#5742f5', end=1316095, name='Data Points selected', sizing_mode='scale_both', start=0, value=1316095, width=280)\\n
\"},\"id\":\"1354\",\"type\":\"Div\"},{\"attributes\":{\"code\":\"\\nif (!window.PyViz) {\\n return;\\n}\\nvar receiver = window.PyViz.receivers['1353'];\\nvar events = receiver ? receiver._partial.content.events : [];\\nfor (var event of events) {\\n if ((event.kind == 'ModelChanged') && (event.attr == 'clicks') &&\\n (cb_obj.id == event.model.id) &&\\n (cb_obj['clicks'] == event.new)) {\\n events.pop(events.indexOf(event))\\n return;\\n }\\n}\\n\\ndata = {clicks: cb_obj['clicks'], 'id': cb_obj.id};\\n\\nfunction unique_events(events) {\\n // Processes the event queue ignoring duplicate events\\n // of the same type\\n var unique = [];\\n var unique_events = [];\\n for (var i=0; icuxfilter DashBoard\\n
[title] Markdown(str)\\n[chart1] Column(sizing_mode='scale_both', width=900)\\n    [0] Bokeh(Figure)\\n[chart2] Column(sizing_mode='scale_both', width=900)\\n    [0] Bokeh(Figure)\\n    [1] RangeSlider(end=9, sizing_mode='scale_width', step=1, value=(0, 9), width=900)\\n[widgets] Column\\n    [0] Column(css_classes=['non-handle-temp'], sizing_mode='scale_both')\\n        [0] FloatSlider(bar_color='#5742f5', end=1316095, name='Data Points selected', sizing_mode='scale_both', start=0, value=1316095, width=280)\\n
\"},\"id\":\"1354\",\"type\":\"Div\"},{\"attributes\":{\"code\":\"\\nif (!window.PyViz) {\\n return;\\n}\\nvar receiver = window.PyViz.receivers['1353'];\\nvar events = receiver ? receiver._partial.content.events : [];\\nfor (var event of events) {\\n if ((event.kind == 'ModelChanged') && (event.attr == 'clicks') &&\\n (cb_obj.id == event.model.id) &&\\n (cb_obj['clicks'] == event.new)) {\\n events.pop(events.indexOf(event))\\n return;\\n }\\n}\\n\\ndata = {clicks: cb_obj['clicks'], 'id': cb_obj.id};\\n\\nfunction unique_events(events) {\\n // Processes the event queue ignoring duplicate events\\n // of the same type\\n var unique = [];\\n var unique_events = [];\\n for (var i=0; i" ], "text/plain": [ - "#### cuXfilter DashBoard\n", + "#### cuxfilter DashBoard\n", " \n", " [title] Markdown(str)\n", " [chart1] Column(sizing_mode='scale_both', width=900)\n", diff --git a/docs/_sources/examples/auto_accidents_example.ipynb.txt b/docs/_sources/examples/auto_accidents_example.ipynb.txt index f936a120..8538392f 100644 --- a/docs/_sources/examples/auto_accidents_example.ipynb.txt +++ b/docs/_sources/examples/auto_accidents_example.ipynb.txt @@ -11,7 +11,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Import cuXfilter" + "## Import cuxfilter" ] }, { @@ -6006,9 +6006,9 @@ } ], "source": [ - "import cuXfilter\n", - "from cuXfilter import charts\n", - "from cuXfilter.layouts import feature_and_base" + "import cuxfilter\n", + "from cuxfilter import charts\n", + "from cuxfilter.layouts import feature_and_base" ] }, { @@ -6044,7 +6044,7 @@ } ], "source": [ - "from cuXfilter.sampledata import datasets_check\n", + "from cuxfilter.sampledata import datasets_check\n", "datasets_check('auto_accidents', base_dir=DATA_DIR)" ] }, @@ -7585,7 +7585,7 @@ } ], "source": [ - "cux_df = cuXfilter.DataFrame.from_arrow('./data/auto_accidents.arrow')\n", + "cux_df = cuxfilter.DataFrame.from_arrow('./data/auto_accidents.arrow')\n", "cux_df.data['ST_CASE'] = cux_df.data['ST_CASE'].astype('float64')" ] }, @@ -7640,7 +7640,7 @@ "metadata": {}, "outputs": [], "source": [ - "#from cuXfilter.assets.custom_tiles import get_provider, Vendors\n", + "#from cuxfilter.assets.custom_tiles import get_provider, Vendors\n", "#tile_provider = get_provider(Vendors.MAPBOX_LIGHT, access_token=MAPBOX_TOKEN)" ] }, @@ -7672,7 +7672,7 @@ "metadata": {}, "outputs": [], "source": [ - "d = cux_df.dashboard([chart1, chart3, chart2], layout=cuXfilter.layouts.feature_and_base,theme = cuXfilter.themes.rapids, title='Auto Accident Dataset')" + "d = cux_df.dashboard([chart1, chart3, chart2], layout=cuxfilter.layouts.feature_and_base,theme = cuxfilter.themes.rapids, title='Auto Accident Dataset')" ] }, { @@ -12387,7 +12387,7 @@ "(function(root) {\n", " function embed_document(root) {\n", " \n", - " var docs_json = {\"4fe57ecc-8e4a-4d5d-8765-e8730d2d0501\":{\"roots\":{\"references\":[{\"attributes\":{\"margin\":[5,5,5,5],\"name\":\"HTML00129\"},\"id\":\"1355\",\"type\":\"HTML\"},{\"attributes\":{\"code\":\"\\nif (!window.PyViz) {\\n return;\\n}\\nvar receiver = window.PyViz.receivers['1353'];\\nvar events = receiver ? receiver._partial.content.events : [];\\nfor (var event of events) {\\n if ((event.kind == 'ModelChanged') && (event.attr == 'width_policy') &&\\n (cb_obj.id == event.model.id) &&\\n (cb_obj['width_policy'] == event.new)) {\\n events.pop(events.indexOf(event))\\n return;\\n }\\n}\\n\\ndata = {width_policy: cb_obj['width_policy'], 'id': cb_obj.id};\\n\\nfunction unique_events(events) {\\n // Processes the event queue ignoring duplicate events\\n // of the same type\\n var unique = [];\\n var unique_events = [];\\n for (var i=0; icuXfilter DashBoard\\n
[title] Markdown(str)\\n[chart1] Column(sizing_mode='scale_both', width=1600)\\n    [0] Bokeh(Figure)\\n[chart2] Column(sizing_mode='scale_both', width=1600)\\n    [0] Bokeh(Figure)\\n    [1] RangeSlider(end=2017, sizing_mode='scale_width', start=2001, step=1, value=(2001, 2017), width=1600)\\n[widgets] Column\\n    [0] Column(css_classes=['non-handle-temp'], sizing_mode='scale_both')\\n        [0] FloatSlider(bar_color='#5742f5', end=1296221, name='Data Points selected', sizing_mode='scale_both', start=0, value=1296221, width=280)\\n    [1] MultiSelect(css_classes=['custom-dropdown'], height=200, name='DAY_WEEK', options={'Sunday': 1, ...}, sizing_mode='scale_both', value=[''], width=280)\\n
\"},\"id\":\"1354\",\"type\":\"Div\"},{\"attributes\":{\"code\":\"\\nif (!window.PyViz) {\\n return;\\n}\\nvar receiver = window.PyViz.receivers['1353'];\\nvar events = receiver ? receiver._partial.content.events : [];\\nfor (var event of events) {\\n if ((event.kind == 'ModelChanged') && (event.attr == 'clicks') &&\\n (cb_obj.id == event.model.id) &&\\n (cb_obj['clicks'] == event.new)) {\\n events.pop(events.indexOf(event))\\n return;\\n }\\n}\\n\\ndata = {clicks: cb_obj['clicks'], 'id': cb_obj.id};\\n\\nfunction unique_events(events) {\\n // Processes the event queue ignoring duplicate events\\n // of the same type\\n var unique = [];\\n var unique_events = [];\\n for (var i=0; icuxfilter DashBoard\\n
[title] Markdown(str)\\n[chart1] Column(sizing_mode='scale_both', width=1600)\\n    [0] Bokeh(Figure)\\n[chart2] Column(sizing_mode='scale_both', width=1600)\\n    [0] Bokeh(Figure)\\n    [1] RangeSlider(end=2017, sizing_mode='scale_width', start=2001, step=1, value=(2001, 2017), width=1600)\\n[widgets] Column\\n    [0] Column(css_classes=['non-handle-temp'], sizing_mode='scale_both')\\n        [0] FloatSlider(bar_color='#5742f5', end=1296221, name='Data Points selected', sizing_mode='scale_both', start=0, value=1296221, width=280)\\n    [1] MultiSelect(css_classes=['custom-dropdown'], height=200, name='DAY_WEEK', options={'Sunday': 1, ...}, sizing_mode='scale_both', value=[''], width=280)\\n
\"},\"id\":\"1354\",\"type\":\"Div\"},{\"attributes\":{\"code\":\"\\nif (!window.PyViz) {\\n return;\\n}\\nvar receiver = window.PyViz.receivers['1353'];\\nvar events = receiver ? receiver._partial.content.events : [];\\nfor (var event of events) {\\n if ((event.kind == 'ModelChanged') && (event.attr == 'clicks') &&\\n (cb_obj.id == event.model.id) &&\\n (cb_obj['clicks'] == event.new)) {\\n events.pop(events.indexOf(event))\\n return;\\n }\\n}\\n\\ndata = {clicks: cb_obj['clicks'], 'id': cb_obj.id};\\n\\nfunction unique_events(events) {\\n // Processes the event queue ignoring duplicate events\\n // of the same type\\n var unique = [];\\n var unique_events = [];\\n for (var i=0; i" ], "text/plain": [ - "#### cuXfilter DashBoard\n", + "#### cuxfilter DashBoard\n", " \n", " [title] Markdown(str)\n", " [chart1] Column(sizing_mode='scale_both', width=1600)\n", diff --git a/docs/_sources/examples/example_1.ipynb.txt b/docs/_sources/examples/example_1.ipynb.txt index b0413efb..15f8d681 100644 --- a/docs/_sources/examples/example_1.ipynb.txt +++ b/docs/_sources/examples/example_1.ipynb.txt @@ -14,10 +14,10 @@ "metadata": {}, "outputs": [], "source": [ - "from cuXfilter import charts\n", - "import cuXfilter\n", + "from cuxfilter import charts\n", + "import cuxfilter\n", "from bokeh import palettes\n", - "from cuXfilter.layouts import layout_1\n", + "from cuxfilter.layouts import layout_1\n", "import warnings\n", "warnings.filterwarnings('ignore')" ] @@ -26,7 +26,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Load cuXfilter dataframe" + "## Load cuxfilter dataframe" ] }, { @@ -35,7 +35,7 @@ "metadata": {}, "outputs": [], "source": [ - "cux_df = cuXfilter.DataFrame.from_arrow('/home/ajay/data/146M_predictions_v2.arrow')" + "cux_df = cuxfilter.DataFrame.from_arrow('/home/ajay/data/146M_predictions_v2.arrow')" ] }, { diff --git a/docs/_sources/examples/example_2.ipynb.txt b/docs/_sources/examples/example_2.ipynb.txt index 1878e249..9057922c 100644 --- a/docs/_sources/examples/example_2.ipynb.txt +++ b/docs/_sources/examples/example_2.ipynb.txt @@ -14,17 +14,17 @@ "metadata": {}, "outputs": [], "source": [ - "from cuXfilter import charts\n", - "import cuXfilter\n", + "from cuxfilter import charts\n", + "import cuxfilter\n", "from bokeh import palettes\n", - "from cuXfilter.layouts import layout_2" + "from cuxfilter.layouts import layout_2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Load cuXfilter dataframe" + "## Load cuxfilter dataframe" ] }, { @@ -33,7 +33,7 @@ "metadata": {}, "outputs": [], "source": [ - "cux_df1 = cuXfilter.DataFrame.from_arrow('/home/ajay/data/nyc_taxi_1.arrow')" + "cux_df1 = cuxfilter.DataFrame.from_arrow('/home/ajay/data/nyc_taxi_1.arrow')" ] }, { diff --git a/docs/_sources/index.rst.txt b/docs/_sources/index.rst.txt index 53751b21..d5620fff 100644 --- a/docs/_sources/index.rst.txt +++ b/docs/_sources/index.rst.txt @@ -1,7 +1,7 @@ -Welcome to cuXfilter's documentation! +Welcome to cuxfilter's documentation! ===================================== -cuXfilter acts as a connector library, which provides the connections between different visualization libraries and a GPU dataframe without much hassle. This also allows the user to use charts from different libraries in a single dashboard, while also providing the interaction. +cuxfilter acts as a connector library, which provides the connections between different visualization libraries and a GPU dataframe without much hassle. This also allows the user to use charts from different libraries in a single dashboard, while also providing the interaction. .. toctree:: :maxdepth: 2 @@ -10,7 +10,7 @@ cuXfilter acts as a connector library, which provides the connections between di ./installation.rst ./dataframe.rst - ./10 minutes to cuXfilter.ipynb + ./10 minutes to cuxfilter.ipynb ./charts/charts.rst ./layouts/Layouts.ipynb ./themes/Themes.ipynb diff --git a/docs/_sources/installation.rst.txt b/docs/_sources/installation.rst.txt index 01a5586c..2ba6c15a 100644 --- a/docs/_sources/installation.rst.txt +++ b/docs/_sources/installation.rst.txt @@ -1,7 +1,7 @@ Installation ============ -Note: You need to have RAPIDS (cudf) installed for cuXfilter to work +Note: You need to have RAPIDS (cudf) installed for cuxfilter to work 1. Installing in a rapids docker container @@ -101,11 +101,11 @@ While in the directory you want the datasets to be saved, execute the following .. code-block:: bash - #go the the environment where cuXfilter is installed. Skip if in a docker container + #go the the environment where cuxfilter is installed. Skip if in a docker container source activate test_env #download and extract the datasets - python -c "from cuXfilter.sampledata import datasets_check; datasets_check(base_dir='./')" + python -c "from cuxfilter.sampledata import datasets_check; datasets_check(base_dir='./')" Individual links: diff --git a/docs/_sources/layouts/Layouts.ipynb.txt b/docs/_sources/layouts/Layouts.ipynb.txt index a485c26c..406f4349 100644 --- a/docs/_sources/layouts/Layouts.ipynb.txt +++ b/docs/_sources/layouts/Layouts.ipynb.txt @@ -11,7 +11,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Load cuXfilter and data" + "## Load cuxfilter and data" ] }, { @@ -7536,10 +7536,10 @@ } ], "source": [ - "from cuXfilter import charts\n", - "import cuXfilter\n", + "from cuxfilter import charts\n", + "import cuxfilter\n", "from bokeh import palettes\n", - "cux_df = cuXfilter.DataFrame.from_arrow('../../../data/146M_predictions_v2.arrow')" + "cux_df = cuxfilter.DataFrame.from_arrow('../../../data/146M_predictions_v2.arrow')" ] }, { @@ -9150,7 +9150,7 @@ } ], "source": [ - "d = cux_df.dashboard(charts_list, layout=cuXfilter.layouts.single_feature, theme=cuXfilter.themes.rapids, title=\"Layout - single feature\")\n", + "d = cux_df.dashboard(charts_list, layout=cuxfilter.layouts.single_feature, theme=cuxfilter.themes.rapids, title=\"Layout - single feature\")\n", "await d.preview()" ] }, @@ -10754,7 +10754,7 @@ } ], "source": [ - "d = cux_df.dashboard(charts_list, layout=cuXfilter.layouts.feature_and_base, theme=cuXfilter.themes.rapids, title=\"Layout - feature and base\")\n", + "d = cux_df.dashboard(charts_list, layout=cuxfilter.layouts.feature_and_base, theme=cuxfilter.themes.rapids, title=\"Layout - feature and base\")\n", "await d.preview()" ] }, @@ -12361,7 +12361,7 @@ } ], "source": [ - "d = cux_df.dashboard([chart_widget, chart0, chart1], layout=cuXfilter.layouts.double_feature, theme=cuXfilter.themes.rapids, title=\"Layout - double feature\")\n", + "d = cux_df.dashboard([chart_widget, chart0, chart1], layout=cuxfilter.layouts.double_feature, theme=cuxfilter.themes.rapids, title=\"Layout - double feature\")\n", "await d.preview()" ] }, @@ -13977,7 +13977,7 @@ } ], "source": [ - "d = cux_df.dashboard(charts_list, layout=cuXfilter.layouts.left_feature_right_double, theme=cuXfilter.themes.rapids, title=\"Layout - left feature right double\")\n", + "d = cux_df.dashboard(charts_list, layout=cuxfilter.layouts.left_feature_right_double, theme=cuxfilter.themes.rapids, title=\"Layout - left feature right double\")\n", "await d.preview()" ] }, @@ -15557,7 +15557,7 @@ } ], "source": [ - "d = cux_df.dashboard([chart_widget, chart1, chart2, chart3], layout=cuXfilter.layouts.triple_feature, theme=cuXfilter.themes.rapids, title=\"Layout - triple feature\")\n", + "d = cux_df.dashboard([chart_widget, chart1, chart2, chart3], layout=cuxfilter.layouts.triple_feature, theme=cuxfilter.themes.rapids, title=\"Layout - triple feature\")\n", "await d.preview()" ] }, @@ -17176,7 +17176,7 @@ } ], "source": [ - "d = cux_df.dashboard([chart_widget, chart0, chart2, chart3], layout=cuXfilter.layouts.feature_and_double_base, theme=cuXfilter.themes.rapids, title=\"Layout - feature and double base\")\n", + "d = cux_df.dashboard([chart_widget, chart0, chart2, chart3], layout=cuxfilter.layouts.feature_and_double_base, theme=cuxfilter.themes.rapids, title=\"Layout - feature and double base\")\n", "await d.preview()" ] }, @@ -18762,7 +18762,7 @@ } ], "source": [ - "d = cux_df.dashboard([chart_widget, chart0, chart2, chart3, chart4], layout=cuXfilter.layouts.two_by_two, theme=cuXfilter.themes.rapids, title=\"Layout - two by two\")\n", + "d = cux_df.dashboard([chart_widget, chart0, chart2, chart3, chart4], layout=cuxfilter.layouts.two_by_two, theme=cuxfilter.themes.rapids, title=\"Layout - two by two\")\n", "await d.preview()" ] }, @@ -20351,7 +20351,7 @@ } ], "source": [ - "d = cux_df.dashboard(charts_list, layout=cuXfilter.layouts.feature_and_triple_base, theme=cuXfilter.themes.rapids, title=\"Layout - feature and triple base\")\n", + "d = cux_df.dashboard(charts_list, layout=cuxfilter.layouts.feature_and_triple_base, theme=cuxfilter.themes.rapids, title=\"Layout - feature and triple base\")\n", "await d.preview()" ] }, @@ -21943,7 +21943,7 @@ } ], "source": [ - "d = cux_df.dashboard(charts_list, layout=cuXfilter.layouts.feature_and_quad_base, theme=cuXfilter.themes.rapids, title=\"Layout - feature and quad base\")\n", + "d = cux_df.dashboard(charts_list, layout=cuxfilter.layouts.feature_and_quad_base, theme=cuxfilter.themes.rapids, title=\"Layout - feature and quad base\")\n", "await d.preview()" ] }, @@ -23538,7 +23538,7 @@ } ], "source": [ - "d = cux_df.dashboard(charts_list, layout=cuXfilter.layouts.feature_and_five_edge, theme=cuXfilter.themes.rapids, title=\"Layout - feature and five edge\")\n", + "d = cux_df.dashboard(charts_list, layout=cuxfilter.layouts.feature_and_five_edge, theme=cuxfilter.themes.rapids, title=\"Layout - feature and five edge\")\n", "await d.preview()" ] }, @@ -25136,7 +25136,7 @@ } ], "source": [ - "d = cux_df.dashboard([chart_widget, chart3, chart1, chart2, chart4, chart5, chart6], layout=cuXfilter.layouts.two_by_three, theme=cuXfilter.themes.rapids, title=\"Layout - two by three\")\n", + "d = cux_df.dashboard([chart_widget, chart3, chart1, chart2, chart4, chart5, chart6], layout=cuxfilter.layouts.two_by_three, theme=cuxfilter.themes.rapids, title=\"Layout - two by three\")\n", "await d.preview()" ] }, @@ -26749,8 +26749,8 @@ } ], "source": [ - "d = cux_df.dashboard(charts_list, layout=cuXfilter.layouts.double_feature_quad_base, \n", - " theme=cuXfilter.themes.rapids, title=\"Layout - double feature quad base\")\n", + "d = cux_df.dashboard(charts_list, layout=cuxfilter.layouts.double_feature_quad_base, \n", + " theme=cuxfilter.themes.rapids, title=\"Layout - double feature quad base\")\n", "await d.preview()" ] }, @@ -26774,8 +26774,8 @@ "metadata": {}, "outputs": [], "source": [ - "d = cux_df.dashboard(charts_list[2:], layout=cuXfilter.layouts.three_by_three, \n", - " theme=cuXfilter.themes.rapids, title=\"Layout - three by three\")" + "d = cux_df.dashboard(charts_list[2:], layout=cuxfilter.layouts.three_by_three, \n", + " theme=cuxfilter.themes.rapids, title=\"Layout - three by three\")" ] }, { diff --git a/docs/_sources/layouts/Layouts.rst.txt b/docs/_sources/layouts/Layouts.rst.txt index 52482806..2f73ab21 100644 --- a/docs/_sources/layouts/Layouts.rst.txt +++ b/docs/_sources/layouts/Layouts.rst.txt @@ -1,15 +1,15 @@ Layouts ======= -Load cuXfilter and data +Load cuxfilter and data ----------------------- .. code-block:: python - from cuXfilter import charts - import cuXfilter + from cuxfilter import charts + import cuxfilter from bokeh import palettes - cux_df = cuXfilter.DataFrame.from_arrow('/data/146M_predictions_v2.arrow') + cux_df = cuxfilter.DataFrame.from_arrow('/data/146M_predictions_v2.arrow') cux_df.data['loan_id'] = cux_df.data['loan_id'].astype('float64') cux_df.data['current_actual_upb'] = cux_df.data['current_actual_upb'].astype('float64') cux_df.data = cux_df.data.sort_values(by='loan_id') @@ -47,7 +47,7 @@ layout_0 .. code-block:: python - from cuXfilter import layouts + from cuxfilter import layouts d = cux_df.dashboard([chart0], layout=layouts.layout_0, title="Dashboard") d.show() @@ -62,7 +62,7 @@ layout_1 .. code-block:: python - from cuXfilter import layouts + from cuxfilter import layouts d = cux_df.dashboard([chart0, chart1], layout=layouts.layout_1, title="Dashboard") d.show() @@ -77,7 +77,7 @@ layout_2 .. code-block:: python - from cuXfilter import layouts + from cuxfilter import layouts d = cux_df.dashboard([chart0, chart1], layout=layouts.layout_2, title="Dashboard") d.show() @@ -92,7 +92,7 @@ layout_3 .. code-block:: python - from cuXfilter import layouts + from cuxfilter import layouts d = cux_df.dashboard([chart0, chart1, chart2], layout=layouts.layout_3, title="Dashboard") d.show() @@ -108,7 +108,7 @@ layout_4 .. code-block:: python - from cuXfilter import layouts + from cuxfilter import layouts d = cux_df.dashboard([chart0, chart1, chart2], layout=layouts.layout_4, title="Dashboard") d.show() @@ -124,7 +124,7 @@ layout_5 .. code-block:: python - from cuXfilter import layouts + from cuxfilter import layouts d = cux_df.dashboard([chart0, chart1, chart2], layout=layouts.layout_5, title="Dashboard") d.show() @@ -139,7 +139,7 @@ layout_6 .. code-block:: python - from cuXfilter import layouts + from cuxfilter import layouts d = cux_df.dashboard([chart0, chart1, chart2, chart3], layout=layouts.layout_6, title="Dashboard") d.show() @@ -155,7 +155,7 @@ layout_7 .. code-block:: python - from cuXfilter import layouts + from cuxfilter import layouts d = cux_df.dashboard([chart0, chart1, chart2, chart3], layout=layouts.layout_7, title="Dashboard") d.show() @@ -170,7 +170,7 @@ layout_8 .. code-block:: python - from cuXfilter import layouts + from cuxfilter import layouts d = cux_df.dashboard([chart0, chart1, chart2, chart3, chart4], layout=layouts.layout_8, title="Dashboard") d.show() @@ -185,7 +185,7 @@ layout_9 .. code-block:: python - from cuXfilter import layouts + from cuxfilter import layouts d = cux_df.dashboard([chart0, chart1, chart2, chart3, chart4, chart5], layout=layouts.layout_9, title="Dashboard") d.show() @@ -200,7 +200,7 @@ layout_10 .. code-block:: python - from cuXfilter import layouts + from cuxfilter import layouts d = cux_df.dashboard([chart0, chart1, chart2, chart3, chart4, chart5], layout=layouts.layout_10, title="Dashboard") d.show() @@ -215,7 +215,7 @@ layout_11 .. code-block:: python - from cuXfilter import layouts + from cuxfilter import layouts d = cux_df.dashboard([chart0, chart1, chart2, chart3, chart4, chart5], layout=layouts.layout_11, title="Dashboard") d.show() @@ -230,7 +230,7 @@ layout_12 .. code-block:: python - from cuXfilter import layouts + from cuxfilter import layouts d = cux_df.dashboard([chart0, chart1, chart2, chart3, chart4, chart5, chart6, chart7, chart8], layout=layouts.layout_12, title="Dashboard") d.show() diff --git a/docs/_sources/themes/Themes.ipynb.txt b/docs/_sources/themes/Themes.ipynb.txt index a2b7898c..a3cd3b55 100644 --- a/docs/_sources/themes/Themes.ipynb.txt +++ b/docs/_sources/themes/Themes.ipynb.txt @@ -11,7 +11,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Load cuXfilter and data" + "## Load cuxfilter and data" ] }, { @@ -7536,10 +7536,10 @@ } ], "source": [ - "from cuXfilter import charts\n", - "import cuXfilter\n", + "from cuxfilter import charts\n", + "import cuxfilter\n", "from bokeh import palettes\n", - "cux_df = cuXfilter.DataFrame.from_arrow('../../../data/146M_predictions_v2.arrow')" + "cux_df = cuxfilter.DataFrame.from_arrow('../../../data/146M_predictions_v2.arrow')" ] }, { @@ -9135,7 +9135,7 @@ } ], "source": [ - "d = cux_df.dashboard(charts_list, layout=cuXfilter.layouts.feature_and_base, theme=cuXfilter.themes.light, title=\"Theme - light\")\n", + "d = cux_df.dashboard(charts_list, layout=cuxfilter.layouts.feature_and_base, theme=cuxfilter.themes.light, title=\"Theme - light\")\n", "await d.preview()" ] }, @@ -10699,7 +10699,7 @@ } ], "source": [ - "d = cux_df.dashboard(charts_list, layout=cuXfilter.layouts.feature_and_base, theme=cuXfilter.themes.rapids, title=\"Theme - rapids\")\n", + "d = cux_df.dashboard(charts_list, layout=cuxfilter.layouts.feature_and_base, theme=cuxfilter.themes.rapids, title=\"Theme - rapids\")\n", "await d.preview()" ] }, @@ -12267,7 +12267,7 @@ ], "source": [ "chart1.tile_provider = tile_provider_dark\n", - "d = cux_df.dashboard(charts_list, layout=cuXfilter.layouts.feature_and_base, theme=cuXfilter.themes.dark, title=\"Theme - dark\")\n", + "d = cux_df.dashboard(charts_list, layout=cuxfilter.layouts.feature_and_base, theme=cuxfilter.themes.dark, title=\"Theme - dark\")\n", "await d.preview()" ] } diff --git a/docs/charts/bokeh_charts.html b/docs/charts/bokeh_charts.html index 9b002a39..b7f26a7b 100644 --- a/docs/charts/bokeh_charts.html +++ b/docs/charts/bokeh_charts.html @@ -8,7 +8,7 @@ - Bokeh Charts — cuXfilter 0.2 documentation + Bokeh Charts — cuxfilter 0.2 documentation @@ -54,7 +54,7 @@ -
cuXfilter + cuxfilter @@ -88,7 +88,7 @@