diff --git a/CMakeLists.txt b/CMakeLists.txt index 2c86dd9d0f7d..0b75c779d0ad 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -312,20 +312,6 @@ include_directories("3rdparty/tvm/include") include_directories("3rdparty/dmlc-core/include") include_directories("3rdparty/dlpack/include") -# commented out until PR goes through -#if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/dlpack) -# add_subdirectory(3rdparty/dlpack) -#endif() - -# Prevent stripping out symbols (operator registrations, for example) -if(NOT MSVC AND NOT APPLE) - set(BEGIN_WHOLE_ARCHIVE -Wl,--whole-archive) - set(END_WHOLE_ARCHIVE -Wl,--no-whole-archive) -elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang") - # using regular Clang or AppleClang - set(BEGIN_WHOLE_ARCHIVE -Wl,-force_load) -endif() - if(UNIX) find_library(RTLIB rt) if(RTLIB) @@ -665,6 +651,18 @@ if(UNIX) target_compile_options(mxnet PUBLIC "--coverage") target_link_libraries(mxnet PUBLIC gcov) endif() + if(CMAKE_BUILD_TYPE STREQUAL "Distribution") + # TODO For handling mxnet's symbols the following can be replace by + # annotating symbol visibility in source code, specifying + # set(CMAKE_CXX_VISIBILITY_PRESET hidden) and + # set(CMAKE_VISIBILITY_INLINES_HIDDEN ON) + # Symbols from statically linked libraries can be discarded via -Wl,--exclude-libs,ALL + if(APPLE) + set_target_properties(mxnet PROPERTIES LINK_FLAGS "-Wl,-exported_symbols_list,${PROJECT_SOURCE_DIR}/cmake/libmxnet.sym") + else() + set_target_properties(mxnet PROPERTIES LINK_FLAGS "-Wl,--version-script=${PROJECT_SOURCE_DIR}/cmake/libmxnet.ver") + endif() + endif() elseif(MSVC) if(USE_CUDA) if(USE_SPLIT_ARCH_DLL) @@ -834,8 +832,12 @@ endif() include(GNUInstallDirs) install(TARGETS mxnet RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + COMPONENT MXNET_Runtime LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + COMPONENT MXNET_Runtime + NAMELINK_COMPONENT MXNET_Development ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + COMPONENT MXNET_Development ) install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/dlpack/include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/dmlc-core/include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) @@ -876,7 +878,10 @@ if(INSTALL_PYTHON_VERSIONS) endforeach() endif() -add_subdirectory(tests) +if(NOT CMAKE_BUILD_TYPE STREQUAL "Distribution") + # Staticbuild applies linker version script to hide private symbols, breaking unit tests + add_subdirectory(tests) +endif() # ---[ Linter target find_package(Python3) diff --git a/benchmark/python/ffi/benchmark_ffi.py b/benchmark/python/ffi/benchmark_ffi.py index df4ace2d95af..919c72f34a55 100644 --- a/benchmark/python/ffi/benchmark_ffi.py +++ b/benchmark/python/ffi/benchmark_ffi.py @@ -62,7 +62,6 @@ def prepare_workloads(): OpArgMngr.add_workload("nan_to_num", pool['2x2']) OpArgMngr.add_workload("tri", 2, 3, 4) OpArgMngr.add_workload("tensordot", pool['2x2'], pool['2x2'], ((1, 0), (0, 1))) - OpArgMngr.add_workload("kron", pool['2x2'], pool['2x2']) OpArgMngr.add_workload("cumsum", pool['3x2'], axis=0, out=pool['3x2']) OpArgMngr.add_workload("random.shuffle", pool['3']) OpArgMngr.add_workload("equal", pool['2x2'], pool['2x2']) @@ -100,11 +99,14 @@ def prepare_workloads(): OpArgMngr.add_workload("trace", pool['2x2']) OpArgMngr.add_workload("transpose", pool['2x2']) OpArgMngr.add_workload("split", pool['3x3'], (0, 1, 2), axis=1) + OpArgMngr.add_workload("vstack", (pool['3x3'], pool['3x3'], pool['3x3'])) OpArgMngr.add_workload("argmax", pool['3x2'], axis=-1) OpArgMngr.add_workload("argmin", pool['3x2'], axis=-1) OpArgMngr.add_workload("atleast_1d", pool['2'], pool['2x2']) OpArgMngr.add_workload("atleast_2d", pool['2'], pool['2x2']) OpArgMngr.add_workload("atleast_3d", pool['2'], pool['2x2']) + OpArgMngr.add_workload("argsort", pool['3x2'], axis=-1) + OpArgMngr.add_workload("sort", pool['3x2'], axis=-1) OpArgMngr.add_workload("indices", dimensions=(1, 2, 3)) OpArgMngr.add_workload("subtract", pool['2x2'], pool['2x2']) OpArgMngr.add_workload("multiply", pool['2x2'], pool['2x2']) @@ -115,6 +117,10 @@ def prepare_workloads(): OpArgMngr.add_workload("power", pool['2x2'], pool['2x2']) OpArgMngr.add_workload("lcm", pool['2x2'].astype('int32'), pool['2x2'].astype('int32')) OpArgMngr.add_workload("diff", pool['2x2'], n=1, axis=-1) + OpArgMngr.add_workload("inner", pool['2x2'], pool['2x2']) + OpArgMngr.add_workload("random.multinomial", n=2, pvals=[1/6.]*6, size=(2,2)) + OpArgMngr.add_workload("random.rand", 3, 2) + OpArgMngr.add_workload("random.randn", 2, 2) OpArgMngr.add_workload("nonzero", pool['2x2']) OpArgMngr.add_workload("tril", pool['2x2'], k=0) OpArgMngr.add_workload("random.choice", pool['2'], size=(2, 2)) @@ -144,9 +150,6 @@ def prepare_workloads(): OpArgMngr.add_workload("random.logistic", loc=2, scale=2, size=(2,2)) OpArgMngr.add_workload("random.gumbel", loc=2, scale=2, size=(2,2)) OpArgMngr.add_workload("where", pool['2x3'], pool['2x3'], pool['2x1']) - OpArgMngr.add_workload("fmax", pool['2x2'], pool['2x2']) - OpArgMngr.add_workload("fmin", pool['2x2'], pool['2x2']) - OpArgMngr.add_workload("fmod", pool['2x2'], pool['2x2']) OpArgMngr.add_workload("may_share_memory", pool['2x3'][:0], pool['2x3'][:1]) OpArgMngr.add_workload('squeeze', pool['2x2'], axis=None) OpArgMngr.add_workload("pad", pool['2x2'], pad_width=((1,2),(1,2)), mode="constant") diff --git a/cmake/libmxnet.sym b/cmake/libmxnet.sym new file mode 100644 index 000000000000..0ddf63fca433 --- /dev/null +++ b/cmake/libmxnet.sym @@ -0,0 +1,15 @@ +MX* +NN* +_MX* +_NN* +mx* +nn* +_mx* +_nn* +Java_org_apache_mxnet* +*NDArray* +*Engine*Get* +*Storage*Get* +*on_enter_api* +*on_exit_api* +*MXAPISetLastError* diff --git a/cmake/libmxnet.ver b/cmake/libmxnet.ver new file mode 100644 index 000000000000..560549c29e58 --- /dev/null +++ b/cmake/libmxnet.ver @@ -0,0 +1,19 @@ +{ + global: + NN*; + MX*; + _NN*; + _MX*; + nn*; + mx*; + _nn*; + _mx*; + Java_org_apache_mxnet*; + *NDArray*; + *Engine*Get*; + *Storage*Get*; + *on_enter_api*; + *on_exit_api*; + *MXAPISetLastError*; + local: *; +}; diff --git a/config/distribution/darwin_cpu.cmake b/config/distribution/darwin_cpu.cmake index f44e004eb420..ed295efd33d2 100644 --- a/config/distribution/darwin_cpu.cmake +++ b/config/distribution/darwin_cpu.cmake @@ -32,4 +32,3 @@ set(USE_SSE ON CACHE BOOL "Build with x86 SSE instruction support") set(USE_F16C OFF CACHE BOOL "Build with x86 F16C instruction support") set(USE_LIBJPEG_TURBO ON CACHE BOOL "Build with libjpeg-turbo") set(USE_DIST_KVSTORE ON CACHE BOOL "Build with DIST_KVSTORE support") -set(USE_CXX11_ABI ON CACHE BOOL "Build with GLIBCXX_USE_CXX11_ABI") diff --git a/config/distribution/linux_cpu.cmake b/config/distribution/linux_cpu.cmake index 83bb1b07f53e..4579b42fce5c 100644 --- a/config/distribution/linux_cpu.cmake +++ b/config/distribution/linux_cpu.cmake @@ -30,4 +30,3 @@ set(USE_SSE ON CACHE BOOL "Build with x86 SSE instruction support") set(USE_F16C OFF CACHE BOOL "Build with x86 F16C instruction support") set(USE_LIBJPEG_TURBO ON CACHE BOOL "Build with libjpeg-turbo") set(USE_DIST_KVSTORE ON CACHE BOOL "Build with DIST_KVSTORE support") -set(USE_CXX11_ABI ON CACHE BOOL "Build with GLIBCXX_USE_CXX11_ABI") diff --git a/config/distribution/linux_cu100.cmake b/config/distribution/linux_cu100.cmake index b787c0666a4c..357ccd457593 100644 --- a/config/distribution/linux_cu100.cmake +++ b/config/distribution/linux_cu100.cmake @@ -32,7 +32,6 @@ set(USE_SSE ON CACHE BOOL "Build with x86 SSE instruction support") set(USE_F16C OFF CACHE BOOL "Build with x86 F16C instruction support") set(USE_LIBJPEG_TURBO ON CACHE BOOL "Build with libjpeg-turbo") set(USE_DIST_KVSTORE ON CACHE BOOL "Build with DIST_KVSTORE support") -set(USE_CXX11_ABI ON CACHE BOOL "Build with GLIBCXX_USE_CXX11_ABI") set(CUDACXX "/usr/local/cuda-10.0/bin/nvcc" CACHE STRING "Cuda compiler") set(MXNET_CUDA_ARCH "3.0;5.0;6.0;7.0" CACHE STRING "Cuda architectures") diff --git a/config/distribution/linux_cu101.cmake b/config/distribution/linux_cu101.cmake index 298b2a5e21e2..29fdda2d6f0a 100644 --- a/config/distribution/linux_cu101.cmake +++ b/config/distribution/linux_cu101.cmake @@ -34,7 +34,6 @@ set(USE_SSE ON CACHE BOOL "Build with x86 SSE instruction support") set(USE_F16C OFF CACHE BOOL "Build with x86 F16C instruction support") set(USE_LIBJPEG_TURBO ON CACHE BOOL "Build with libjpeg-turbo") set(USE_DIST_KVSTORE ON CACHE BOOL "Build with DIST_KVSTORE support") -set(USE_CXX11_ABI ON CACHE BOOL "Build with GLIBCXX_USE_CXX11_ABI") set(CUDACXX "/usr/local/cuda-10.1/bin/nvcc" CACHE STRING "Cuda compiler") set(MXNET_CUDA_ARCH "3.0;5.0;6.0;7.0" CACHE STRING "Cuda architectures") diff --git a/config/distribution/linux_cu102.cmake b/config/distribution/linux_cu102.cmake index 80ef2320d599..4e7e0509e4f9 100644 --- a/config/distribution/linux_cu102.cmake +++ b/config/distribution/linux_cu102.cmake @@ -32,7 +32,6 @@ set(USE_SSE ON CACHE BOOL "Build with x86 SSE instruction support") set(USE_F16C OFF CACHE BOOL "Build with x86 F16C instruction support") set(USE_LIBJPEG_TURBO ON CACHE BOOL "Build with libjpeg-turbo") set(USE_DIST_KVSTORE ON CACHE BOOL "Build with DIST_KVSTORE support") -set(USE_CXX11_ABI ON CACHE BOOL "Build with GLIBCXX_USE_CXX11_ABI") set(CUDACXX "/usr/local/cuda-10.2/bin/nvcc" CACHE STRING "Cuda compiler") set(MXNET_CUDA_ARCH "3.0;5.0;6.0;7.0" CACHE STRING "Cuda architectures") diff --git a/docs/python_docs/python/tutorials/deploy/run-on-aws/use_sagemaker.rst b/docs/python_docs/python/tutorials/deploy/run-on-aws/use_sagemaker.rst index d627befbd8fd..dc8052b10cdd 100644 --- a/docs/python_docs/python/tutorials/deploy/run-on-aws/use_sagemaker.rst +++ b/docs/python_docs/python/tutorials/deploy/run-on-aws/use_sagemaker.rst @@ -18,7 +18,7 @@ Run on Amazon SageMaker ----------------------- -This chapter will give a high level overview about Amazon SageMaker, +This chapter will give a high level overview about running MXNet on Amazon SageMaker, in-depth tutorials can be found on the `Sagemaker website `__. @@ -29,16 +29,7 @@ charged by time. Within this notebook you can `fetch, explore and prepare training data `__. -:: - - import mxnet as mx - import sagemaker - mx.test_utils.get_cifar10() # Downloads Cifar-10 dataset to ./data - sagemaker_session = sagemaker.Session() - inputs = sagemaker_session.upload_data(path='data/cifar', - key_prefix='data/cifar10') - -Once the data is ready, you can easily launch training via the SageMaker +With your own data on the notebook instance, you can easily launch training via the SageMaker SDK. So there is no need to manually configure and log into EC2 instances. You can either bring your own model or use SageMaker's `built-in @@ -51,11 +42,11 @@ instance: :: from sagemaker.mxnet import MXNet as MXNetEstimator - estimator = MXNetEstimator(entry_point='train.py', + estimator = MXNetEstimator(entry_point='train.py', role=sagemaker.get_execution_role(), - train_instance_count=1, + train_instance_count=1, train_instance_type='local', - hyperparameters={'batch_size': 1024, + hyperparameters={'batch_size': 1024, 'epochs': 30}) estimator.fit(inputs) diff --git a/docs/python_docs/themes/mx-theme/mxtheme/layout.html b/docs/python_docs/themes/mx-theme/mxtheme/layout.html index 1e94b28f8fd5..924b01a76be3 100644 --- a/docs/python_docs/themes/mx-theme/mxtheme/layout.html +++ b/docs/python_docs/themes/mx-theme/mxtheme/layout.html @@ -49,6 +49,7 @@ .dropdown-caret { width: 18px; + height: 54px; } .dropdown-caret-path { diff --git a/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.css b/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.css index dca3a3453ea1..58f7c2fd5f86 100644 --- a/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.css +++ b/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.css @@ -1,2 +1,2 @@ -.admonition,.mdl-shadow--2dp,.page-content pre:hover,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list){box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.mdl-shadow--3dp{box-shadow:0 3px 4px 0 rgba(0,0,0,.14),0 3px 3px -2px rgba(0,0,0,.2),0 1px 8px 0 rgba(0,0,0,.12)}.mdl-shadow--4dp{box-shadow:0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.2)}.mdl-shadow--6dp{box-shadow:0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12),0 3px 5px -1px rgba(0,0,0,.2)}.mdl-shadow--8dp{box-shadow:0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12),0 5px 5px -3px rgba(0,0,0,.2)}.mdl-shadow--16dp{box-shadow:0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12),0 8px 10px -5px rgba(0,0,0,.2)}.mdl-shadow--24dp{box-shadow:0 9px 46px 8px rgba(0,0,0,.14),0 11px 15px -7px rgba(0,0,0,.12),0 24px 38px 3px rgba(0,0,0,.2)}.mdl-data-table,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list){position:relative;border:1px solid rgba(0,0,0,.12);border-collapse:collapse;white-space:nowrap;font-size:13px;background-color:#fff}.mdl-data-table thead,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) thead{padding-bottom:3px}.mdl-data-table thead .mdl-data-table__select,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) thead .mdl-data-table__select{margin-top:0}.mdl-data-table tbody tr,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) tbody tr{position:relative;height:48px;transition-duration:.28s;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-property:background-color}.mdl-data-table tbody tr.is-selected,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) tbody tr.is-selected{background-color:#e0e0e0}.mdl-data-table tbody tr:hover,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) tbody tr:hover{background-color:#eee}.mdl-data-table td,.mdl-data-table th,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th{padding:0 18px 12px;text-align:right}.mdl-data-table td:first-of-type,.mdl-data-table th:first-of-type,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td:first-of-type,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th:first-of-type{padding-left:24px}.mdl-data-table td:last-of-type,.mdl-data-table th:last-of-type,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td:last-of-type,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th:last-of-type{padding-right:24px}.mdl-data-table td,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td{position:relative;vertical-align:middle;height:48px;border-top:1px solid rgba(0,0,0,.12);border-bottom:1px solid rgba(0,0,0,.12);padding-top:12px;box-sizing:border-box}.mdl-data-table td .mdl-data-table__select,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td .mdl-data-table__select{vertical-align:middle}.mdl-data-table th,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th{position:relative;vertical-align:bottom;text-overflow:ellipsis;font-size:14px;font-weight:700;line-height:24px;letter-spacing:0;height:48px;font-size:12px;color:rgba(0,0,0,.54);padding-bottom:8px;box-sizing:border-box}.mdl-data-table th.mdl-data-table__header--sorted-ascending,.mdl-data-table th.mdl-data-table__header--sorted-descending,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-ascending,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-descending{color:rgba(0,0,0,.87)}.mdl-data-table th.mdl-data-table__header--sorted-ascending:before,.mdl-data-table th.mdl-data-table__header--sorted-descending:before,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-ascending:before,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-descending:before{font-family:Material Icons;font-weight:400;font-style:normal;font-size:24px;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;word-wrap:normal;font-feature-settings:"liga";-webkit-font-feature-settings:"liga";-webkit-font-smoothing:antialiased;font-size:16px;content:"\e5d8";margin-right:5px;vertical-align:sub}.mdl-data-table th.mdl-data-table__header--sorted-ascending:hover,.mdl-data-table th.mdl-data-table__header--sorted-descending:hover,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-ascending:hover,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-descending:hover{cursor:pointer}.mdl-data-table th.mdl-data-table__header--sorted-ascending:hover:before,.mdl-data-table th.mdl-data-table__header--sorted-descending:hover:before,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-ascending:hover:before,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-descending:hover:before{color:rgba(0,0,0,.26)}.mdl-data-table th.mdl-data-table__header--sorted-descending:before,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-descending:before{content:"\e5db"}.mdl-data-table__select{width:16px}.mdl-data-table__cell--non-numeric.mdl-data-table__cell--non-numeric,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th{text-align:left}.mdl-mini-footer{display:flex;flex-flow:row wrap;justify-content:space-between;padding:32px 16px;color:#9e9e9e;background-color:#424242}.mdl-mini-footer:after{content:"";display:block}.mdl-mini-footer .mdl-logo{line-height:36px}.mdl-mini-footer--link-list,.mdl-mini-footer__link-list,footer.mdl-mini-footer>div.mdl-mini-footer__left-section ul{display:flex;flex-flow:row nowrap;list-style:none;margin:0;padding:0}.mdl-mini-footer--link-list li,.mdl-mini-footer__link-list li,footer.mdl-mini-footer>div.mdl-mini-footer__left-section ul li{margin-bottom:0;margin-right:16px}@media screen and (min-width:760px){.mdl-mini-footer--link-list li,.mdl-mini-footer__link-list li,footer.mdl-mini-footer>div.mdl-mini-footer__left-section ul li{line-height:36px}}.mdl-mini-footer--link-list a,.mdl-mini-footer__link-list a,footer.mdl-mini-footer>div.mdl-mini-footer__left-section ul a{color:inherit;text-decoration:none;white-space:nowrap}.mdl-mini-footer--left-section,.mdl-mini-footer__left-section{display:inline-block;order:0}.mdl-mini-footer--right-section,.mdl-mini-footer__right-section{display:inline-block;order:1}.mdl-mini-footer--social-btn,.mdl-mini-footer__social-btn{width:36px;height:36px;padding:0;margin:0;background-color:#9e9e9e;border:none}.mdl-card{display:flex;flex-direction:column;font-size:16px;font-weight:400;min-height:200px;overflow:hidden;width:330px;z-index:1;position:relative;background:#fff;border-radius:2px;box-sizing:border-box}.mdl-card__media{background-color:#ff6e40;background-repeat:repeat;background-position:50% 50%;background-size:cover;background-origin:padding-box;background-attachment:scroll;box-sizing:border-box}.mdl-card__title{align-items:center;color:#000;display:block;display:flex;justify-content:stretch;line-height:normal;padding:16px;perspective-origin:165px 56px;transform-origin:165px 56px;box-sizing:border-box}.mdl-card__title.mdl-card--border{border-bottom:1px solid rgba(0,0,0,.1)}.mdl-card__title-text{align-self:flex-end;color:inherit;display:block;display:flex;font-size:24px;font-weight:300;line-height:normal;overflow:hidden;transform-origin:149px 48px;margin:0}.mdl-card__subtitle-text{font-size:14px;color:rgba(0,0,0,.54);margin:0}.mdl-card__supporting-text{color:rgba(0,0,0,.54);font-size:1rem;line-height:18px;overflow:hidden;padding:16px;width:90%}.mdl-card__supporting-text.mdl-card--border{border-bottom:1px solid rgba(0,0,0,.1)}.mdl-card__actions{font-size:16px;line-height:normal;width:100%;background-color:transparent;padding:8px;box-sizing:border-box}.mdl-card__actions.mdl-card--border{border-top:1px solid rgba(0,0,0,.1)}.mdl-card--expand{flex-grow:1}.mdl-card__menu{position:absolute;right:16px;top:16px}.mdl-button{background:transparent;border:none;border-radius:2px;color:#000;position:relative;height:36px;margin:0;min-width:64px;padding:0 16px;display:inline-block;font-family:Roboto,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;text-transform:uppercase;line-height:1;letter-spacing:0;overflow:hidden;will-change:box-shadow;transition:box-shadow .2s cubic-bezier(.4,0,1,1),background-color .2s cubic-bezier(.4,0,.2,1),color .2s cubic-bezier(.4,0,.2,1);outline:none;cursor:pointer;text-decoration:none;text-align:center;line-height:36px;vertical-align:middle}.mdl-button::-moz-focus-inner{border:0}.mdl-button:hover{background-color:hsla(0,0%,62%,.2)}.mdl-button:focus:not(:active){background-color:rgba(0,0,0,.12)}.mdl-button:active{background-color:hsla(0,0%,62%,.4)}.mdl-button.mdl-button--colored{color:#2196f3}.mdl-button.mdl-button--colored:focus:not(:active){background-color:rgba(0,0,0,.12)}input.mdl-button[type=submit]{-webkit-appearance:none}.mdl-button--raised{background:hsla(0,0%,62%,.2);box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.mdl-button--raised:active{box-shadow:0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.2);background-color:hsla(0,0%,62%,.4)}.mdl-button--raised:focus:not(:active){box-shadow:0 0 8px rgba(0,0,0,.18),0 8px 16px rgba(0,0,0,.36);background-color:hsla(0,0%,62%,.4)}.mdl-button--raised.mdl-button--colored{background:#2196f3;color:#fff}.mdl-button--raised.mdl-button--colored:active,.mdl-button--raised.mdl-button--colored:focus:not(:active),.mdl-button--raised.mdl-button--colored:hover{background-color:#2196f3}.mdl-button--raised.mdl-button--colored .mdl-ripple{background:#fff}.mdl-button--fab{border-radius:50%;font-size:24px;height:56px;margin:auto;min-width:56px;width:56px;padding:0;overflow:hidden;background:hsla(0,0%,62%,.2);box-shadow:0 1px 1.5px 0 rgba(0,0,0,.12),0 1px 1px 0 rgba(0,0,0,.24);position:relative;line-height:normal}.admonition.attention .mdl-button--fab .admonition-title:before,.admonition.caution .mdl-button--fab .admonition-title:before,.admonition.danger .mdl-button--fab .admonition-title:before,.admonition.error .mdl-button--fab .admonition-title:before,.admonition.hint .mdl-button--fab .admonition-title:before,.admonition.important .mdl-button--fab .admonition-title:before,.admonition.note .mdl-button--fab .admonition-title:before,.admonition.seealso .mdl-button--fab .admonition-title:before,.admonition.tip .mdl-button--fab .admonition-title:before,.admonition.warning .mdl-button--fab .admonition-title:before,.mdl-button--fab .admonition.attention .admonition-title:before,.mdl-button--fab .admonition.caution .admonition-title:before,.mdl-button--fab .admonition.danger .admonition-title:before,.mdl-button--fab .admonition.error .admonition-title:before,.mdl-button--fab .admonition.hint .admonition-title:before,.mdl-button--fab .admonition.important .admonition-title:before,.mdl-button--fab .admonition.note .admonition-title:before,.mdl-button--fab .admonition.seealso .admonition-title:before,.mdl-button--fab .admonition.tip .admonition-title:before,.mdl-button--fab .admonition.warning .admonition-title:before,.mdl-button--fab .material-icons,.mdl-button--fab a.download:before{position:absolute;top:50%;left:50%;transform:translate(-12px,-12px);line-height:24px;width:24px}.mdl-button--fab.mdl-button--mini-fab{height:40px;min-width:40px;width:40px}.mdl-button--fab .mdl-button__ripple-container{border-radius:50%;-webkit-mask-image:-webkit-radial-gradient(circle,#fff,#000)}.mdl-button--fab:active{box-shadow:0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.2);background-color:hsla(0,0%,62%,.4)}.mdl-button--fab:focus:not(:active){box-shadow:0 0 8px rgba(0,0,0,.18),0 8px 16px rgba(0,0,0,.36);background-color:hsla(0,0%,62%,.4)}.mdl-button--fab.mdl-button--colored{background:#ff6e40;color:#fff}.mdl-button--fab.mdl-button--colored:active,.mdl-button--fab.mdl-button--colored:focus:not(:active),.mdl-button--fab.mdl-button--colored:hover{background-color:#ff6e40}.mdl-button--fab.mdl-button--colored .mdl-ripple{background:#fff}.mdl-button--icon{border-radius:50%;font-size:24px;height:32px;margin-left:0;margin-right:0;min-width:32px;width:32px;padding:0;overflow:hidden;color:inherit;line-height:normal}.admonition.attention .mdl-button--icon .admonition-title:before,.admonition.caution .mdl-button--icon .admonition-title:before,.admonition.danger .mdl-button--icon .admonition-title:before,.admonition.error .mdl-button--icon .admonition-title:before,.admonition.hint .mdl-button--icon .admonition-title:before,.admonition.important .mdl-button--icon .admonition-title:before,.admonition.note .mdl-button--icon .admonition-title:before,.admonition.seealso .mdl-button--icon .admonition-title:before,.admonition.tip .mdl-button--icon .admonition-title:before,.admonition.warning .mdl-button--icon .admonition-title:before,.mdl-button--icon .admonition.attention .admonition-title:before,.mdl-button--icon .admonition.caution .admonition-title:before,.mdl-button--icon .admonition.danger .admonition-title:before,.mdl-button--icon .admonition.error .admonition-title:before,.mdl-button--icon .admonition.hint .admonition-title:before,.mdl-button--icon .admonition.important .admonition-title:before,.mdl-button--icon .admonition.note .admonition-title:before,.mdl-button--icon .admonition.seealso .admonition-title:before,.mdl-button--icon .admonition.tip .admonition-title:before,.mdl-button--icon .admonition.warning .admonition-title:before,.mdl-button--icon .material-icons,.mdl-button--icon a.download:before{position:absolute;top:50%;left:50%;transform:translate(-12px,-12px);line-height:24px;width:24px}.mdl-button--icon.mdl-button--mini-icon{height:24px;min-width:24px;width:24px}.admonition.attention .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.caution .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.danger .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.error .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.hint .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.important .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.note .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.seealso .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.tip .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.warning .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.attention .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.caution .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.danger .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.error .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.hint .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.important .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.note .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.seealso .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.tip .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.warning .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .material-icons,.mdl-button--icon.mdl-button--mini-icon a.download:before{top:0;left:0}.mdl-button--icon .mdl-button__ripple-container{border-radius:50%;-webkit-mask-image:-webkit-radial-gradient(circle,#fff,#000)}.mdl-button__ripple-container{display:block;height:100%;left:0;position:absolute;top:0;width:100%;z-index:0;overflow:hidden}.mdl-button.mdl-button--disabled .mdl-button__ripple-container .mdl-ripple,.mdl-button[disabled] .mdl-button__ripple-container .mdl-ripple{background-color:transparent}.mdl-button--primary.mdl-button--primary{color:#2196f3}.mdl-button--primary.mdl-button--primary .mdl-ripple{background:#fff}.mdl-button--primary.mdl-button--primary.mdl-button--fab,.mdl-button--primary.mdl-button--primary.mdl-button--raised{color:#fff;background-color:#2196f3}.mdl-button--accent.mdl-button--accent{color:#ff6e40}.mdl-button--accent.mdl-button--accent .mdl-ripple{background:#fff}.mdl-button--accent.mdl-button--accent.mdl-button--fab,.mdl-button--accent.mdl-button--accent.mdl-button--raised{color:#fff;background-color:#ff6e40}.mdl-button.mdl-button--disabled.mdl-button--disabled,.mdl-button[disabled][disabled]{color:rgba(0,0,0,.26);cursor:default;background-color:transparent}.mdl-button--fab.mdl-button--disabled.mdl-button--disabled,.mdl-button--fab[disabled][disabled]{background-color:rgba(0,0,0,.12);color:rgba(0,0,0,.26)}.mdl-button--raised.mdl-button--disabled.mdl-button--disabled,.mdl-button--raised[disabled][disabled]{background-color:rgba(0,0,0,.12);color:rgba(0,0,0,.26);box-shadow:none}.mdl-button--colored.mdl-button--disabled.mdl-button--disabled,.mdl-button--colored[disabled][disabled]{color:rgba(0,0,0,.26)}.admonition.attention .mdl-button .admonition-title:before,.admonition.caution .mdl-button .admonition-title:before,.admonition.danger .mdl-button .admonition-title:before,.admonition.error .mdl-button .admonition-title:before,.admonition.hint .mdl-button .admonition-title:before,.admonition.important .mdl-button .admonition-title:before,.admonition.note .mdl-button .admonition-title:before,.admonition.seealso .mdl-button .admonition-title:before,.admonition.tip .mdl-button .admonition-title:before,.admonition.warning .mdl-button .admonition-title:before,.mdl-button .admonition.attention .admonition-title:before,.mdl-button .admonition.caution .admonition-title:before,.mdl-button .admonition.danger .admonition-title:before,.mdl-button .admonition.error .admonition-title:before,.mdl-button .admonition.hint .admonition-title:before,.mdl-button .admonition.important .admonition-title:before,.mdl-button .admonition.note .admonition-title:before,.mdl-button .admonition.seealso .admonition-title:before,.mdl-button .admonition.tip .admonition-title:before,.mdl-button .admonition.warning .admonition-title:before,.mdl-button .material-icons,.mdl-button a.download:before{vertical-align:middle}.font-light{font-weight:300}.font-regular{font-weight:400}.font-heavy{font-weight:700}.left{text-align:left}.right{text-align:right}.center{text-align:center;margin-left:auto;margin-right:auto}.justify{text-align:justify}.hidden-sm{display:none}.container{width:100%;margin-left:auto;margin-right:auto}.row{position:relative;width:100%}.row [class^=col]{float:left;margin:.5rem 1%;min-height:.125rem}.row:after{content:"";display:table;clear:both}.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12{width:98%}.col-1-sm{width:6.33333%}.col-2-sm{width:14.66667%}.col-3-sm{width:23%}.col-4-sm{width:31.33333%}.col-5-sm{width:39.66667%}.col-6-sm{width:48%}.col-7-sm{width:56.33333%}.col-8-sm{width:64.66667%}.col-9-sm{width:73%}.col-10-sm{width:81.33333%}.col-11-sm{width:89.66667%}.col-12-sm{width:98%}@media only screen and (min-width:45em){.col-1{width:6.33333%}.col-2{width:14.66667%}.col-3{width:23%}.col-4{width:31.33333%}.col-5{width:39.66667%}.col-6{width:48%}.col-7{width:56.33333%}.col-8{width:64.66667%}.col-9{width:73%}.col-10{width:81.33333%}.col-11{width:89.66667%}.col-12{width:98%}.hidden-sm{display:block}}.row{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;flex-wrap:wrap}.row>[class*=col-]{display:flex;flex-direction:column}.admonition.attention .admonition-title:before,.admonition.caution .admonition-title:before,.admonition.danger .admonition-title:before,.admonition.error .admonition-title:before,.admonition.hint .admonition-title:before,.admonition.important .admonition-title:before,.admonition.note .admonition-title:before,.admonition.seealso .admonition-title:before,.admonition.tip .admonition-title:before,.admonition.warning .admonition-title:before,.material-icons,a.download:before{font-family:Material Icons;font-weight:400;font-style:normal;font-size:24px;display:inline-block;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:"liga"}html{font-size:16px}body{display:block!important;background-color:#fafafa;font-size:1rem;line-height:1.5rem;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol}.mdl-layout__content:focus{outline:none}.mdl-layout__content header.mdl-layout__drawer{display:none}.mdl-layout__container{height:calc(100% - 76px);margin-top:76px}.mdl-layout__header{position:fixed;transition:transform .5s}.mdl-layout--fixed-drawer>.mdl-layout__content{margin-left:300px}@media screen and (max-width:1024px){.mdl-layout--fixed-drawer>.mdl-layout__content{margin-left:0}}a.download>code.download,blockquote,h1,h2,h3,h4,h5,h6,span.mdl-layout-title{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol}.contents,.contents a,.globaltoc a.current,.toc-backref,.toctree-wrapper,.toctree-wrapper a,h1,h2,h3,h4,h5,h6{color:#048ccc!important}a{text-decoration:none}.page-content,.page-content dd,.page-content dl,.page-content dt,.page-content ol,.page-content p,.page-content table,.page-content td,.page-content th,.page-content ul{font-size:1rem}.brand{color:inherit;text-decoration:none}.section{overflow-x:auto}img{max-width:100%;display:block;margin-left:auto;margin-right:auto}div.figure p.caption{text-align:center;margin-top:.75rem}div.figure p.caption span.caption-number{font-style:normal}div.figure p.caption .caption-number:after{content:"\00a0"}.svg-icon{width:16px;height:16px;display:inline-block;fill:#f5f5f5;padding-right:5px;padding-top:4px;vertical-align:text-top}.admonition.attention a.download>i.admonition-title:before,.admonition.caution a.download>i.admonition-title:before,.admonition.danger a.download>i.admonition-title:before,.admonition.error a.download>i.admonition-title:before,.admonition.hint a.download>i.admonition-title:before,.admonition.important a.download>i.admonition-title:before,.admonition.note a.download>i.admonition-title:before,.admonition.seealso a.download>i.admonition-title:before,.admonition.tip a.download>i.admonition-title:before,.admonition.warning a.download>i.admonition-title:before,a.download>i.material-icons{position:relative;top:5px}a.download{text-decoration:none}.wrapper:after{content:"";display:table;clear:both}.wrapper{max-width:1090px;margin-right:auto;margin-left:auto;padding-right:45px;padding-left:30px}@media screen and (max-width:1024px){.wrapper{max-width:1120px;padding-right:15px;padding-left:15px}}.document{width:100%;margin:84px auto;display:flex}@media (min-width:1795px){.document{width:100%}}.document .page-content{width:100%;margin:0 auto;padding:0 12px}@media (min-width:992px){.document .page-content{width:90%;padding:0 5%}}@media (min-width:1200px){.document .page-content{width:calc(90% - 230px);padding:0 5%}}.document .side-doc-outline{width:230px}@media (max-width:1199px){.document .side-doc-outline{display:none}}.document .side-doc-outline--content{position:fixed;overflow-x:auto;overflow-y:auto;width:inherit;right:0}.document .side-doc-outline--content::-webkit-scrollbar{width:6px}.document .side-doc-outline--content::-webkit-scrollbar-track{border-radius:6px}.document .side-doc-outline--content::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.3);border-radius:6px;box-shadow:0 0 0 1px hsla(0,0%,100%,.3)}@keyframes float-in{0%{transform:translateY(.5rem);opacity:0}to{transform:translateY(0);opacity:1}}@keyframes float-out{0%{transform:translateY(0);opacity:1}to{transform:translateY(.5rem);opacity:0}}.page-content .headerlink{display:inline-block;text-decoration:none;margin-left:.8rem;color:inherit;opacity:0}.page-content .headerlink:hover{animation:float-in .2s cubic-bezier(.4,0,.2,1) 0s forwards}.page-content h1 .toc-backref,.page-content h2 .toc-backref,.page-content h3 .toc-backref,.page-content h4 .toc-backref,.page-content h5 .toc-backref,.page-content h6 .toc-backref{text-decoration:none}.page-content h1:hover .headerlink,.page-content h2:hover .headerlink,.page-content h3:hover .headerlink,.page-content h4:hover .headerlink,.page-content h5:hover .headerlink,.page-content h6:hover .headerlink{animation:float-in .2s cubic-bezier(.4,0,.2,1) 0s forwards}.page-content h1{font-size:2rem;line-height:2.25rem}.page-content h2{font-size:1.75rem;line-height:2rem;padding-top:1.5rem;margin-top:0;margin-bottom:1rem}.page-content h3{font-size:1.5rem;line-height:1.75rem;padding-top:1rem;margin-top:0;margin-bottom:.75rem}.page-content h4{font-size:1.25rem;line-height:1.5rem;padding-top:.75rem;margin-top:0;margin-bottom:.5rem}.page-content div.page-content h5{font-size:1.1rem;line-height:1.5rem;padding-top:2rem;margin-top:0;margin-bottom:1rem}.page-content div.page-content h6{font-size:1rem;line-height:1.5rem;padding-top:2rem;margin-top:0;margin-bottom:1rem}.admonition{padding:12px 20px;margin-top:10px;margin-bottom:10px}.admonition p.last{margin:16px}.admonition .admonition-title{font-size:16px;font-weight:700;color:#555;text-transform:uppercase;margin-top:7px}.admonition.note{border-left:4px solid #00bcd4;background-color:rgba(0,188,212,.1)}.admonition.note .admonition-title{font-size:16px;font-weight:700;color:#00bcd4;margin-top:4px;margin-bottom:8px}.admonition.note .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"info_outline";font-size:18px}.admonition.seealso{border-left:4px solid #00bcd4;background-color:rgba(0,188,212,.1)}.admonition.seealso .admonition-title{font-size:16px;font-weight:700;color:#00bcd4;margin-top:4px;margin-bottom:8px}.admonition.seealso .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"search";font-size:18px}.admonition.hint{border-left:4px solid #00bcd4;background-color:rgba(0,188,212,.1)}.admonition.hint .admonition-title{font-size:16px;font-weight:700;color:#00bcd4;margin-top:4px;margin-bottom:8px}.admonition.hint .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"help_outline";font-size:18px}.admonition.warning{border-left:4px solid #ffc107;background-color:rgba(255,193,7,.1)}.admonition.warning .admonition-title{font-size:16px;font-weight:700;color:#ffc107;margin-top:4px;margin-bottom:8px}.admonition.warning .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"warning";font-size:18px}.admonition.attention{border-left:4px solid #ffc107;background-color:rgba(255,193,7,.1)}.admonition.attention .admonition-title{font-size:16px;font-weight:700;color:#ffc107;margin-top:4px;margin-bottom:8px}.admonition.attention .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"warning";font-size:18px}.admonition.tip{border-left:4px solid #8bc34a;background-color:rgba(139,195,74,.1)}.admonition.tip .admonition-title{font-size:16px;font-weight:700;color:#8bc34a;margin-top:4px;margin-bottom:8px}.admonition.tip .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"lightbulb_outline";font-size:18px}.admonition.important{border-left:4px solid #8bc34a;background-color:rgba(139,195,74,.1)}.admonition.important .admonition-title{font-size:16px;font-weight:700;color:#8bc34a;margin-top:4px;margin-bottom:8px}.admonition.important .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"check_circle";font-size:18px}.admonition.error{border-left:4px solid #f44336;background-color:rgba(244,67,54,.1)}.admonition.error .admonition-title{font-size:16px;font-weight:700;color:#f44336;margin-top:4px;margin-bottom:8px}.admonition.error .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"error_outline";font-size:18px}.admonition.caution{border-left:4px solid #f44336;background-color:rgba(244,67,54,.1)}.admonition.caution .admonition-title{font-size:16px;font-weight:700;color:#f44336;margin-top:4px;margin-bottom:8px}.admonition.caution .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"error_outline";font-size:18px}.admonition.danger{border-left:4px solid #f44336;background-color:rgba(244,67,54,.1)}.admonition.danger .admonition-title{font-size:16px;font-weight:700;color:#f44336;margin-top:4px;margin-bottom:8px}.admonition.danger .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"error_outline";font-size:18px}.page-content .highlight{margin:1px 0}.page-content .highlight pre{background:rgba(0,0,0,.05);color:rgba(0,0,0,.87);font-family:Menlo,DejaVu Sans Mono,Liberation Mono,Consolas,Ubuntu Mono,Courier New,andale mono,lucida console,monospace;padding:.75rem;overflow:auto;overflow-y:hidden}.page-content .highlight pre .nd,.page-content .highlight pre .o{color:rgba(0,0,0,.87)}.page-content div.highlight-console div.highlight{background:none}.page-content .output .highlight pre{color:rgba(0,0,0,.87);background:#fafafa;border:1px solid #999;padding:.75rem}.page-content .code,.page-content code:not(.download){margin:0;border-radius:2px}.page-content .code,.page-content .code span.pre,.page-content code:not(.download),.page-content code:not(.download) span.pre{font-family:Menlo,DejaVu Sans Mono,Liberation Mono,Consolas,Ubuntu Mono,Courier New,andale mono,lucida console,monospace}.page-content .viewcode-link{padding-left:2em;font-size:80%}.page-content .class>dt,.page-content .function>dt,.page-content .method>dt,.page-content .rubric{display:table;margin:10px 0;font-size:100%;line-height:normal;background:#e7f2fa;color:#2b98f0;border-top:3px solid #55adf3;padding:10px;position:relative}.page-content .class>dt .descclassname,.page-content .class>dt .descname,.page-content .function>dt .descclassname,.page-content .function>dt .descname,.page-content .method>dt .descclassname,.page-content .method>dt .descname,.page-content .rubric .descclassname,.page-content .rubric .descname{color:rgba(0,0,0,.87);background:#e7f2fa;padding:3px}.page-content .class>dt em,.page-content .function>dt em,.page-content .method>dt em,.page-content .rubric em{padding:0 2px}.page-content .rubric{margin:30px 0 10px}.page-content .field-body{padding-left:40px}.page-content .field-body ul{padding:0 0 0 16px;margin:0}.page-content .seealso .docutils>dt{float:left;clear:left;padding:0 6px}.page-content .seealso .docutils>dd{padding-left:6em}.page-content .nblast{padding-bottom:1em}.page-content pre{font-size:90%;background:#eee;color:#455a64;padding:16px 32px;width:auto;border-radius:4px;word-wrap:break-word}.page-content pre:hover:before{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;padding:0 .5rem;content:attr(click-to-copy);color:rgba(0,0,0,.5);border-radius:4px;position:relative;float:right;top:-.5rem;right:-.5rem;background:#c8c8c8;font-size:.8rem;cursor:pointer}.page-content blockquote{font-size:1rem;padding:0 1rem;border-left:3px solid rgba(0,0,0,.05)}.page-content blockquote:after{content:""!important;margin-left:0}.page-content blockquote:before{content:""!important}.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list){margin:1.5rem 0;table-layout:fixed;max-width:100%;min-width:70%}.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th{white-space:normal;overflow-wrap:break-word}.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) caption{font-size:16px;margin:1rem 0 .8rem;white-space:normal}.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) caption .caption-number{font-style:normal}.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) caption .caption-number:after{content:"\00a0"}.globaltoc .caption,.globaltoc .toc{display:none}.globaltoc ul{list-style-type:none;padding:0;margin:0}.globaltoc ul li{min-height:18px}.globaltoc ul li .link-wrapper{display:flex;justify-content:space-between}.globaltoc ul li .link-wrapper>a{padding:4px 0;display:block;width:100%;font-size:1rem;text-decoration:none;color:#757575}.globaltoc ul li .link-wrapper>a.current{font-weight:700}.globaltoc .nav-toggle{padding:0;float:right;display:flex;align-items:center;justify-content:center;height:36px}.globaltoc .nav-toggle>a{padding:0;margin-left:0;margin-right:4px;cursor:pointer}.globaltoc .nav-toggle>a>i{font-size:18px}.globaltoc .nav-toggle.show{transform:rotate(180deg)}.globaltoc .nav-toggle.show>a{margin-right:0;margin-left:4px}.globaltoc nav>ul>li>span.link-wrapper{padding-left:8px}.globaltoc nav>ul>li>ul>li>span.link-wrapper{padding-left:16px}.globaltoc nav>ul>li>ul>li>ul>li>span.link-wrapper{padding-left:24px}.globaltoc nav>ul>li>ul>li>ul>li>ul>li>span.link-wrapper{padding-left:32px}.globaltoc nav>ul>li>ul>li>ul>li>ul>li>ul>li>span.link-wrapper{padding-left:40px}.globaltoc nav>ul>li>ul>li>ul>li>ul>li>ul>li>ul>li>span.link-wrapper{padding-left:48px}.localtoc{font-size:.75rem;padding-top:1rem}.localtoc .caption{padding-left:12px}.localtoc .caption-text{font-size:.9rem;font-weight:700}.localtoc>ul>li>a{display:none}.localtoc ul{padding:0;list-style-type:none}.localtoc li{padding-left:6px}.localtoc a{display:block;text-decoration:none;color:inherit;margin-top:8px;padding-left:8px;line-height:1.1rem}.localtoc a.current{padding-left:5px;border-left:3px solid;font-weight:700}.contents.topic,.toctree-wrapper{border-left:5px solid}.contents.topic>p.topic-title,.toctree-wrapper>p.caption{color:#757575;font-size:1rem;padding-left:14px}.contents.topic ul,.toctree-wrapper ul{padding-left:14px;list-style:none;line-height:30px}.contents.topic a,.toctree-wrapper a{font-size:1.2rem;text-decoration:none}.contents.topic a .pre,.toctree-wrapper a .pre{font-size:1rem}.contents.topic>ul>li>a,.toctree-wrapper>ul>li>a{font-size:1.3rem}.contents.topic>ul>li>a .pre,.toctree-wrapper>ul>li>a .pre{font-size:1.1rem}.page-content ul li{margin:.3rem 0}.page-content ul li p{margin:0}.page-content .option-list .option{font-family:Menlo,DejaVu Sans Mono,Liberation Mono,Consolas,Ubuntu Mono,Courier New,andale mono,lucida console,monospace}.page-content .option-list td{padding:.5rem;border:none}.mdl-layout__drawer{background-color:#fff}.mdl-layout__drawer::-webkit-scrollbar{width:6px}.mdl-layout__drawer::-webkit-scrollbar-track{border-radius:6px}.mdl-layout__drawer::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.3);border-radius:6px;box-shadow:0 0 0 1px hsla(0,0%,100%,.3)}.mdl-layout__drawer>.mdl-layout-title{font-weight:700;text-align:right;margin:0;padding:0;line-height:32px;border-bottom:1px solid rgba(0,0,0,.1);min-height:64px}.mdl-layout__drawer>.mdl-layout-title .title{color:inherit;display:block;height:100%;width:100%;text-decoration:none}.mdl-layout__drawer>.mdl-layout-title .title>img.logo{width:100%;margin:0;padding:0}.mdl-layout__drawer>.mdl-layout-title .title-text{font-weight:700;text-align:right;padding:0 10px;margin:16px 0 8px;line-height:32px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;color:inherit;display:block}nav.breadcrumb>a.mdl-navigation__link{padding:0 8px;font-size:18px}@media (max-width:1199px){nav.breadcrumb{width:calc(100% - 64px)}nav.breadcrumb a.mdl-navigation__link.is-active{overflow-x:hidden;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.admonition.attention nav.breadcrumb i.admonition-title:before,.admonition.caution nav.breadcrumb i.admonition-title:before,.admonition.danger nav.breadcrumb i.admonition-title:before,.admonition.error nav.breadcrumb i.admonition-title:before,.admonition.hint nav.breadcrumb i.admonition-title:before,.admonition.important nav.breadcrumb i.admonition-title:before,.admonition.note nav.breadcrumb i.admonition-title:before,.admonition.seealso nav.breadcrumb i.admonition-title:before,.admonition.tip nav.breadcrumb i.admonition-title:before,.admonition.warning nav.breadcrumb i.admonition-title:before,nav.breadcrumb .admonition.attention i.admonition-title:before,nav.breadcrumb .admonition.caution i.admonition-title:before,nav.breadcrumb .admonition.danger i.admonition-title:before,nav.breadcrumb .admonition.error i.admonition-title:before,nav.breadcrumb .admonition.hint i.admonition-title:before,nav.breadcrumb .admonition.important i.admonition-title:before,nav.breadcrumb .admonition.note i.admonition-title:before,nav.breadcrumb .admonition.seealso i.admonition-title:before,nav.breadcrumb .admonition.tip i.admonition-title:before,nav.breadcrumb .admonition.warning i.admonition-title:before,nav.breadcrumb a.mdl-navigation__link:not(.is-active),nav.breadcrumb i.material-icons{display:none}}div.mdl-layout__header{margin-top:77px}.mdl-layout__drawer-button{top:13px!important}div.mdl-layout__header-row.header-links{background:hsla(0,0%,100%,.2);width:100%;overflow-x:auto;overflow-y:hidden}div.mdl-layout__header-row.header-links a.mdl-navigation__link{font-size:1rem}div.mdl-layout__header-row.header-links a.mdl-navigation__link i{font-size:1.2rem;margin:0 8px;position:relative;bottom:-.1rem}div.mdl-layout__header-row.header-links a.mdl-navigation__link:hover{background-color:#2196f3;color:#eee}div.mdl-layout__header-row.header-links a.mdl-navigation__link[href="#"]{background-color:#2196f3;opacity:1;color:#fff}.site-title{font-weight:300!important;line-height:57px;letter-spacing:-1px;margin-bottom:0;float:left;color:#fff}.site-title,.site-title:visited{color:#424242}.site-header{position:fixed;top:0;width:100%;min-height:55px;padding-top:10px;padding-bottom:10px;background-color:#048ccc;z-index:10;font-weight:300;font-size:17px;border-bottom:1px solid #fff}.site-header-logo{width:120px;display:initial}.site-nav{float:right;line-height:57px}.site-nav .menu-icon,.site-nav .nav-trigger{display:none}.site-nav .page-link{color:#fff;line-height:1.5;font-weight:300}.site-nav .page-link:not(:last-child){margin-right:40px}.site-nav .page-link:hover{color:#fff;text-shadow:-.06ex 0 #fff,.06ex 0 #fff}.site-nav .page-link.page-current{color:#fff;text-decoration:underline}@media screen and (max-width:1024px){.site-nav{position:absolute;top:9px;right:15px;background-color:#178dc9;border-radius:2px;text-align:right}.site-nav label[for=nav-trigger]{display:block;float:right;width:36px;height:36px;z-index:2;cursor:pointer}.site-nav .menu-icon{display:block;float:right;width:36px;height:26px;line-height:0;padding-top:20px;text-align:center}.site-nav .menu-icon>svg{fill:#fff}.site-nav input~.trigger{clear:both;display:none}.site-nav input:checked~.trigger{display:block;padding-bottom:5px}.site-nav .page-link{padding:5px 10px;display:block;margin-left:20px}.site-nav .page-link:not(:last-child){margin-right:0}}footer.mdl-mini-footer{background-color:#212121}footer.mdl-mini-footer>div.mdl-mini-footer__left-section{margin-bottom:20px;display:flex;flex-direction:column}footer.mdl-mini-footer>div.mdl-mini-footer__left-section .mdl-logo{font-size:1.1rem}footer.mdl-mini-footer>div.mdl-mini-footer__right-section{font-size:.9rem;display:flex;flex-direction:column;justify-content:flex-end}footer.mdl-mini-footer>div.mdl-mini-footer__right-section a{color:inherit;font-weight:700;text-decoration:none}footer.mdl-mini-footer p.caption{display:none}.pagenation{width:100%;margin-top:80px;height:92px;background-color:#424242;display:flex}.pagenation #button-next,.pagenation #button-prev,.pagenation .button-common{text-transform:none;padding:0;height:92px;display:flex;justify-content:center;align-items:center;color:#fff}.pagenation #button-prev{margin-right:auto}.pagenation #button-prev .pagenation-text{text-align:left}.pagenation #button-next{margin-left:auto;flex-direction:row-reverse}.pagenation #button-next .pagenation-text{text-align:right}.pagenation-arrow-L{margin-right:20px}.pagenation-arrow-R{margin-left:20px}.pagenation-text{line-height:30px;font-size:20px}.pagenation-direction{opacity:.7;font-size:18px}@media screen and (max-width:1024px){.pagenation #button-prev{width:20%}.pagenation #button-next{width:80%}.pagenation #button-prev .pagenation-text{display:none}}@media screen and (min-width:1025px){.pagenation #button-next,.pagenation #button-prev{width:50%}.pagenation #button-prev .pagenation-text{display:block}}.site-footer{border-top:1px solid #f5f5f5;padding:30px 0;background-color:#424242;position:relative;z-index:10}.site-footer .footer-category-title{color:#048ccc}.site-footer a,.site-footer a:visited{color:#f5f5f5!important}.site-footer2{background-color:#424242;padding-top:40px;padding-bottom:10px;position:relative;z-index:10}.footer-heading{margin-bottom:15px}.contact-list,.social-media-list{list-style:none;margin-left:0}.footer-bottom-warning{font-size:80%;color:#fff;float:left}.footer-logo{width:200px;margin-bottom:30px;margin-top:30px}.footer-col{float:left;margin-bottom:15px;padding-left:15px}.footer-text{color:#f5f5f5}#waterfall-exp::-webkit-input-placeholder{color:#ccc}#waterfall-exp:-ms-input-placeholder{color:#ccc}#waterfall-exp::-moz-placeholder{color:#ccc}ul.search span.highlighted{font-weight:700}ul.search>li{margin-bottom:24px}#search-results ul{list-style:none;padding:0}#search-results ul li>a{text-decoration:none;font-size:1.2rem}a.download:before{content:"file_download";position:relative;top:5px;margin-right:5px}button.download{position:sticky;margin-left:1em}.mdl-card{margin:1em 1.5em 1em 0;display:inline-block;width:250px;min-height:140px;padding:18px}.mdl-card:hover{box-shadow:0 10px 20px rgba(0,0,0,.25),0 6px 6px rgba(0,0,0,.22);color:#000;cursor:pointer}.mdl-card__title{padding:0 0 1em;font-size:18px;color:#444}.mdl-card__supporting-text{line-height:1.5rem;padding:0;width:100%}.head-card.mdl-card{width:auto;display:block;max-width:800px;padding:24px}.head-card>.mdl-card__title{padding-bottom:0;height:60px;font-weight:700;text-transform:uppercase}.head-card>.mdl-card__menu{color:#fff}.head-card>.mdl-card__actions{padding:0}.cards{display:flex;flex-direction:row;flex-wrap:wrap} +.admonition,.mdl-shadow--2dp,.page-content pre:hover,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list){box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.mdl-shadow--3dp{box-shadow:0 3px 4px 0 rgba(0,0,0,.14),0 3px 3px -2px rgba(0,0,0,.2),0 1px 8px 0 rgba(0,0,0,.12)}.mdl-shadow--4dp{box-shadow:0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.2)}.mdl-shadow--6dp{box-shadow:0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12),0 3px 5px -1px rgba(0,0,0,.2)}.mdl-shadow--8dp{box-shadow:0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12),0 5px 5px -3px rgba(0,0,0,.2)}.mdl-shadow--16dp{box-shadow:0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12),0 8px 10px -5px rgba(0,0,0,.2)}.mdl-shadow--24dp{box-shadow:0 9px 46px 8px rgba(0,0,0,.14),0 11px 15px -7px rgba(0,0,0,.12),0 24px 38px 3px rgba(0,0,0,.2)}.mdl-data-table,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list){position:relative;border:1px solid rgba(0,0,0,.12);border-collapse:collapse;white-space:nowrap;font-size:13px;background-color:#fff}.mdl-data-table thead,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) thead{padding-bottom:3px}.mdl-data-table thead .mdl-data-table__select,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) thead .mdl-data-table__select{margin-top:0}.mdl-data-table tbody tr,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) tbody tr{position:relative;height:48px;transition-duration:.28s;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-property:background-color}.mdl-data-table tbody tr.is-selected,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) tbody tr.is-selected{background-color:#e0e0e0}.mdl-data-table tbody tr:hover,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) tbody tr:hover{background-color:#eee}.mdl-data-table td,.mdl-data-table th,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th{padding:0 18px 12px;text-align:right}.mdl-data-table td:first-of-type,.mdl-data-table th:first-of-type,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td:first-of-type,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th:first-of-type{padding-left:24px}.mdl-data-table td:last-of-type,.mdl-data-table th:last-of-type,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td:last-of-type,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th:last-of-type{padding-right:24px}.mdl-data-table td,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td{position:relative;vertical-align:middle;height:48px;border-top:1px solid rgba(0,0,0,.12);border-bottom:1px solid rgba(0,0,0,.12);padding-top:12px;box-sizing:border-box}.mdl-data-table td .mdl-data-table__select,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td .mdl-data-table__select{vertical-align:middle}.mdl-data-table th,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th{position:relative;vertical-align:bottom;text-overflow:ellipsis;font-size:14px;font-weight:700;line-height:24px;letter-spacing:0;height:48px;font-size:12px;color:rgba(0,0,0,.54);padding-bottom:8px;box-sizing:border-box}.mdl-data-table th.mdl-data-table__header--sorted-ascending,.mdl-data-table th.mdl-data-table__header--sorted-descending,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-ascending,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-descending{color:rgba(0,0,0,.87)}.mdl-data-table th.mdl-data-table__header--sorted-ascending:before,.mdl-data-table th.mdl-data-table__header--sorted-descending:before,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-ascending:before,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-descending:before{font-family:Material Icons;font-weight:400;font-style:normal;font-size:24px;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;word-wrap:normal;font-feature-settings:"liga";-webkit-font-feature-settings:"liga";-webkit-font-smoothing:antialiased;font-size:16px;content:"\e5d8";margin-right:5px;vertical-align:sub}.mdl-data-table th.mdl-data-table__header--sorted-ascending:hover,.mdl-data-table th.mdl-data-table__header--sorted-descending:hover,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-ascending:hover,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-descending:hover{cursor:pointer}.mdl-data-table th.mdl-data-table__header--sorted-ascending:hover:before,.mdl-data-table th.mdl-data-table__header--sorted-descending:hover:before,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-ascending:hover:before,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-descending:hover:before{color:rgba(0,0,0,.26)}.mdl-data-table th.mdl-data-table__header--sorted-descending:before,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th.mdl-data-table__header--sorted-descending:before{content:"\e5db"}.mdl-data-table__select{width:16px}.mdl-data-table__cell--non-numeric.mdl-data-table__cell--non-numeric,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th{text-align:left}.mdl-mini-footer{display:flex;flex-flow:row wrap;justify-content:space-between;padding:32px 16px;color:#9e9e9e;background-color:#424242}.mdl-mini-footer:after{content:"";display:block}.mdl-mini-footer .mdl-logo{line-height:36px}.mdl-mini-footer--link-list,.mdl-mini-footer__link-list,footer.mdl-mini-footer>div.mdl-mini-footer__left-section ul{display:flex;flex-flow:row nowrap;list-style:none;margin:0;padding:0}.mdl-mini-footer--link-list li,.mdl-mini-footer__link-list li,footer.mdl-mini-footer>div.mdl-mini-footer__left-section ul li{margin-bottom:0;margin-right:16px}@media screen and (min-width:760px){.mdl-mini-footer--link-list li,.mdl-mini-footer__link-list li,footer.mdl-mini-footer>div.mdl-mini-footer__left-section ul li{line-height:36px}}.mdl-mini-footer--link-list a,.mdl-mini-footer__link-list a,footer.mdl-mini-footer>div.mdl-mini-footer__left-section ul a{color:inherit;text-decoration:none;white-space:nowrap}.mdl-mini-footer--left-section,.mdl-mini-footer__left-section{display:inline-block;order:0}.mdl-mini-footer--right-section,.mdl-mini-footer__right-section{display:inline-block;order:1}.mdl-mini-footer--social-btn,.mdl-mini-footer__social-btn{width:36px;height:36px;padding:0;margin:0;background-color:#9e9e9e;border:none}.mdl-card{display:flex;flex-direction:column;font-size:16px;font-weight:400;min-height:200px;overflow:hidden;width:330px;z-index:1;position:relative;background:#fff;border-radius:2px;box-sizing:border-box}.mdl-card__media{background-color:#ff6e40;background-repeat:repeat;background-position:50% 50%;background-size:cover;background-origin:padding-box;background-attachment:scroll;box-sizing:border-box}.mdl-card__title{align-items:center;color:#000;display:block;display:flex;justify-content:stretch;line-height:normal;padding:16px;perspective-origin:165px 56px;transform-origin:165px 56px;box-sizing:border-box}.mdl-card__title.mdl-card--border{border-bottom:1px solid rgba(0,0,0,.1)}.mdl-card__title-text{align-self:flex-end;color:inherit;display:block;display:flex;font-size:24px;font-weight:300;line-height:normal;overflow:hidden;transform-origin:149px 48px;margin:0}.mdl-card__subtitle-text{font-size:14px;color:rgba(0,0,0,.54);margin:0}.mdl-card__supporting-text{color:rgba(0,0,0,.54);font-size:1rem;line-height:18px;overflow:hidden;padding:16px;width:90%}.mdl-card__supporting-text.mdl-card--border{border-bottom:1px solid rgba(0,0,0,.1)}.mdl-card__actions{font-size:16px;line-height:normal;width:100%;background-color:transparent;padding:8px;box-sizing:border-box}.mdl-card__actions.mdl-card--border{border-top:1px solid rgba(0,0,0,.1)}.mdl-card--expand{flex-grow:1}.mdl-card__menu{position:absolute;right:16px;top:16px}.mdl-button{background:transparent;border:none;border-radius:2px;color:#000;position:relative;height:36px;margin:0;min-width:64px;padding:0 16px;display:inline-block;font-family:Roboto,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;text-transform:uppercase;line-height:1;letter-spacing:0;overflow:hidden;will-change:box-shadow;transition:box-shadow .2s cubic-bezier(.4,0,1,1),background-color .2s cubic-bezier(.4,0,.2,1),color .2s cubic-bezier(.4,0,.2,1);outline:none;cursor:pointer;text-decoration:none;text-align:center;line-height:36px;vertical-align:middle}.mdl-button::-moz-focus-inner{border:0}.mdl-button:hover{background-color:hsla(0,0%,62%,.2)}.mdl-button:focus:not(:active){background-color:rgba(0,0,0,.12)}.mdl-button:active{background-color:hsla(0,0%,62%,.4)}.mdl-button.mdl-button--colored{color:#2196f3}.mdl-button.mdl-button--colored:focus:not(:active){background-color:rgba(0,0,0,.12)}input.mdl-button[type=submit]{-webkit-appearance:none}.mdl-button--raised{background:hsla(0,0%,62%,.2);box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.mdl-button--raised:active{box-shadow:0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.2);background-color:hsla(0,0%,62%,.4)}.mdl-button--raised:focus:not(:active){box-shadow:0 0 8px rgba(0,0,0,.18),0 8px 16px rgba(0,0,0,.36);background-color:hsla(0,0%,62%,.4)}.mdl-button--raised.mdl-button--colored{background:#2196f3;color:#fff}.mdl-button--raised.mdl-button--colored:active,.mdl-button--raised.mdl-button--colored:focus:not(:active),.mdl-button--raised.mdl-button--colored:hover{background-color:#2196f3}.mdl-button--raised.mdl-button--colored .mdl-ripple{background:#fff}.mdl-button--fab{border-radius:50%;font-size:24px;height:56px;margin:auto;min-width:56px;width:56px;padding:0;overflow:hidden;background:hsla(0,0%,62%,.2);box-shadow:0 1px 1.5px 0 rgba(0,0,0,.12),0 1px 1px 0 rgba(0,0,0,.24);position:relative;line-height:normal}.admonition.attention .mdl-button--fab .admonition-title:before,.admonition.caution .mdl-button--fab .admonition-title:before,.admonition.danger .mdl-button--fab .admonition-title:before,.admonition.error .mdl-button--fab .admonition-title:before,.admonition.hint .mdl-button--fab .admonition-title:before,.admonition.important .mdl-button--fab .admonition-title:before,.admonition.note .mdl-button--fab .admonition-title:before,.admonition.seealso .mdl-button--fab .admonition-title:before,.admonition.tip .mdl-button--fab .admonition-title:before,.admonition.warning .mdl-button--fab .admonition-title:before,.mdl-button--fab .admonition.attention .admonition-title:before,.mdl-button--fab .admonition.caution .admonition-title:before,.mdl-button--fab .admonition.danger .admonition-title:before,.mdl-button--fab .admonition.error .admonition-title:before,.mdl-button--fab .admonition.hint .admonition-title:before,.mdl-button--fab .admonition.important .admonition-title:before,.mdl-button--fab .admonition.note .admonition-title:before,.mdl-button--fab .admonition.seealso .admonition-title:before,.mdl-button--fab .admonition.tip .admonition-title:before,.mdl-button--fab .admonition.warning .admonition-title:before,.mdl-button--fab .material-icons,.mdl-button--fab a.download:before{position:absolute;top:50%;left:50%;transform:translate(-12px,-12px);line-height:24px;width:24px}.mdl-button--fab.mdl-button--mini-fab{height:40px;min-width:40px;width:40px}.mdl-button--fab .mdl-button__ripple-container{border-radius:50%;-webkit-mask-image:-webkit-radial-gradient(circle,#fff,#000)}.mdl-button--fab:active{box-shadow:0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.2);background-color:hsla(0,0%,62%,.4)}.mdl-button--fab:focus:not(:active){box-shadow:0 0 8px rgba(0,0,0,.18),0 8px 16px rgba(0,0,0,.36);background-color:hsla(0,0%,62%,.4)}.mdl-button--fab.mdl-button--colored{background:#ff6e40;color:#fff}.mdl-button--fab.mdl-button--colored:active,.mdl-button--fab.mdl-button--colored:focus:not(:active),.mdl-button--fab.mdl-button--colored:hover{background-color:#ff6e40}.mdl-button--fab.mdl-button--colored .mdl-ripple{background:#fff}.mdl-button--icon{border-radius:50%;font-size:24px;height:32px;margin-left:0;margin-right:0;min-width:32px;width:32px;padding:0;overflow:hidden;color:inherit;line-height:normal}.admonition.attention .mdl-button--icon .admonition-title:before,.admonition.caution .mdl-button--icon .admonition-title:before,.admonition.danger .mdl-button--icon .admonition-title:before,.admonition.error .mdl-button--icon .admonition-title:before,.admonition.hint .mdl-button--icon .admonition-title:before,.admonition.important .mdl-button--icon .admonition-title:before,.admonition.note .mdl-button--icon .admonition-title:before,.admonition.seealso .mdl-button--icon .admonition-title:before,.admonition.tip .mdl-button--icon .admonition-title:before,.admonition.warning .mdl-button--icon .admonition-title:before,.mdl-button--icon .admonition.attention .admonition-title:before,.mdl-button--icon .admonition.caution .admonition-title:before,.mdl-button--icon .admonition.danger .admonition-title:before,.mdl-button--icon .admonition.error .admonition-title:before,.mdl-button--icon .admonition.hint .admonition-title:before,.mdl-button--icon .admonition.important .admonition-title:before,.mdl-button--icon .admonition.note .admonition-title:before,.mdl-button--icon .admonition.seealso .admonition-title:before,.mdl-button--icon .admonition.tip .admonition-title:before,.mdl-button--icon .admonition.warning .admonition-title:before,.mdl-button--icon .material-icons,.mdl-button--icon a.download:before{position:absolute;top:50%;left:50%;transform:translate(-12px,-12px);line-height:24px;width:24px}.mdl-button--icon.mdl-button--mini-icon{height:24px;min-width:24px;width:24px}.admonition.attention .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.caution .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.danger .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.error .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.hint .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.important .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.note .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.seealso .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.tip .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.admonition.warning .mdl-button--icon.mdl-button--mini-icon .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.attention .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.caution .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.danger .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.error .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.hint .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.important .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.note .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.seealso .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.tip .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .admonition.warning .admonition-title:before,.mdl-button--icon.mdl-button--mini-icon .material-icons,.mdl-button--icon.mdl-button--mini-icon a.download:before{top:0;left:0}.mdl-button--icon .mdl-button__ripple-container{border-radius:50%;-webkit-mask-image:-webkit-radial-gradient(circle,#fff,#000)}.mdl-button__ripple-container{display:block;height:100%;left:0;position:absolute;top:0;width:100%;z-index:0;overflow:hidden}.mdl-button.mdl-button--disabled .mdl-button__ripple-container .mdl-ripple,.mdl-button[disabled] .mdl-button__ripple-container .mdl-ripple{background-color:transparent}.mdl-button--primary.mdl-button--primary{color:#2196f3}.mdl-button--primary.mdl-button--primary .mdl-ripple{background:#fff}.mdl-button--primary.mdl-button--primary.mdl-button--fab,.mdl-button--primary.mdl-button--primary.mdl-button--raised{color:#fff;background-color:#2196f3}.mdl-button--accent.mdl-button--accent{color:#ff6e40}.mdl-button--accent.mdl-button--accent .mdl-ripple{background:#fff}.mdl-button--accent.mdl-button--accent.mdl-button--fab,.mdl-button--accent.mdl-button--accent.mdl-button--raised{color:#fff;background-color:#ff6e40}.mdl-button.mdl-button--disabled.mdl-button--disabled,.mdl-button[disabled][disabled]{color:rgba(0,0,0,.26);cursor:default;background-color:transparent}.mdl-button--fab.mdl-button--disabled.mdl-button--disabled,.mdl-button--fab[disabled][disabled]{background-color:rgba(0,0,0,.12);color:rgba(0,0,0,.26)}.mdl-button--raised.mdl-button--disabled.mdl-button--disabled,.mdl-button--raised[disabled][disabled]{background-color:rgba(0,0,0,.12);color:rgba(0,0,0,.26);box-shadow:none}.mdl-button--colored.mdl-button--disabled.mdl-button--disabled,.mdl-button--colored[disabled][disabled]{color:rgba(0,0,0,.26)}.admonition.attention .mdl-button .admonition-title:before,.admonition.caution .mdl-button .admonition-title:before,.admonition.danger .mdl-button .admonition-title:before,.admonition.error .mdl-button .admonition-title:before,.admonition.hint .mdl-button .admonition-title:before,.admonition.important .mdl-button .admonition-title:before,.admonition.note .mdl-button .admonition-title:before,.admonition.seealso .mdl-button .admonition-title:before,.admonition.tip .mdl-button .admonition-title:before,.admonition.warning .mdl-button .admonition-title:before,.mdl-button .admonition.attention .admonition-title:before,.mdl-button .admonition.caution .admonition-title:before,.mdl-button .admonition.danger .admonition-title:before,.mdl-button .admonition.error .admonition-title:before,.mdl-button .admonition.hint .admonition-title:before,.mdl-button .admonition.important .admonition-title:before,.mdl-button .admonition.note .admonition-title:before,.mdl-button .admonition.seealso .admonition-title:before,.mdl-button .admonition.tip .admonition-title:before,.mdl-button .admonition.warning .admonition-title:before,.mdl-button .material-icons,.mdl-button a.download:before{vertical-align:middle}.font-light{font-weight:300}.font-regular{font-weight:400}.font-heavy{font-weight:700}.left{text-align:left}.right{text-align:right}.center{text-align:center;margin-left:auto;margin-right:auto}.justify{text-align:justify}.hidden-sm{display:none}.container{width:100%;margin-left:auto;margin-right:auto}.row{position:relative;width:100%}.row [class^=col]{float:left;margin:.5rem 1%;min-height:.125rem}.row:after{content:"";display:table;clear:both}.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12{width:98%}.col-1-sm{width:6.33333%}.col-2-sm{width:14.66667%}.col-3-sm{width:23%}.col-4-sm{width:31.33333%}.col-5-sm{width:39.66667%}.col-6-sm{width:48%}.col-7-sm{width:56.33333%}.col-8-sm{width:64.66667%}.col-9-sm{width:73%}.col-10-sm{width:81.33333%}.col-11-sm{width:89.66667%}.col-12-sm{width:98%}@media only screen and (min-width:45em){.col-1{width:6.33333%}.col-2{width:14.66667%}.col-3{width:23%}.col-4{width:31.33333%}.col-5{width:39.66667%}.col-6{width:48%}.col-7{width:56.33333%}.col-8{width:64.66667%}.col-9{width:73%}.col-10{width:81.33333%}.col-11{width:89.66667%}.col-12{width:98%}.hidden-sm{display:block}}.row{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;flex-wrap:wrap}.row>[class*=col-]{display:flex;flex-direction:column}.admonition.attention .admonition-title:before,.admonition.caution .admonition-title:before,.admonition.danger .admonition-title:before,.admonition.error .admonition-title:before,.admonition.hint .admonition-title:before,.admonition.important .admonition-title:before,.admonition.note .admonition-title:before,.admonition.seealso .admonition-title:before,.admonition.tip .admonition-title:before,.admonition.warning .admonition-title:before,.material-icons,a.download:before{font-family:Material Icons;font-weight:400;font-style:normal;font-size:24px;display:inline-block;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:"liga"}html{font-size:16px}body{display:block!important;background-color:#fafafa;font-size:1rem;line-height:1.5rem;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol}.mdl-layout__content:focus{outline:none}.mdl-layout__content header.mdl-layout__drawer{display:none}.mdl-layout__container{height:calc(100% - 76px);margin-top:76px}.mdl-layout__header{position:fixed;transition:transform .5s}.mdl-layout--fixed-drawer>.mdl-layout__content{margin-left:300px}@media screen and (max-width:1024px){.mdl-layout--fixed-drawer>.mdl-layout__content{margin-left:0}}a.download>code.download,blockquote,h1,h2,h3,h4,h5,h6,span.mdl-layout-title{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol}.contents,.contents a,.globaltoc a.current,.toc-backref,.toctree-wrapper,.toctree-wrapper a,h1,h2,h3,h4,h5,h6{color:#048ccc!important}a{text-decoration:none}.page-content,.page-content dd,.page-content dl,.page-content dt,.page-content ol,.page-content p,.page-content table,.page-content td,.page-content th,.page-content ul{font-size:1rem}.brand{color:inherit;text-decoration:none}.section{overflow-x:auto}img{max-width:100%;display:block;margin-left:auto;margin-right:auto}div.figure p.caption{text-align:center;margin-top:.75rem}div.figure p.caption span.caption-number{font-style:normal}div.figure p.caption .caption-number:after{content:"\00a0"}.svg-icon{width:16px;height:16px;display:inline-block;fill:#f5f5f5;padding-right:5px;padding-top:4px;vertical-align:text-top}.admonition.attention a.download>i.admonition-title:before,.admonition.caution a.download>i.admonition-title:before,.admonition.danger a.download>i.admonition-title:before,.admonition.error a.download>i.admonition-title:before,.admonition.hint a.download>i.admonition-title:before,.admonition.important a.download>i.admonition-title:before,.admonition.note a.download>i.admonition-title:before,.admonition.seealso a.download>i.admonition-title:before,.admonition.tip a.download>i.admonition-title:before,.admonition.warning a.download>i.admonition-title:before,a.download>i.material-icons{position:relative;top:5px}a.download{text-decoration:none}.wrapper:after{content:"";display:table;clear:both}.wrapper{max-width:1090px;margin-right:auto;margin-left:auto;padding-right:45px;padding-left:30px}@media screen and (max-width:1024px){.wrapper{max-width:1120px;padding-right:15px;padding-left:15px}}.document{width:100%;margin:84px auto;display:flex}@media (min-width:1795px){.document{width:100%}}.document .page-content{width:100%;margin:0 auto;padding:0 12px}@media (min-width:992px){.document .page-content{width:90%;padding:0 5%}}@media (min-width:1200px){.document .page-content{width:calc(90% - 230px);padding:0 5%}}.document .side-doc-outline{width:230px}@media (max-width:1199px){.document .side-doc-outline{display:none}}.document .side-doc-outline--content{position:sticky;overflow-x:auto;overflow-y:auto;width:inherit;right:0;top:80px}.document .side-doc-outline--content::-webkit-scrollbar{width:6px}.document .side-doc-outline--content::-webkit-scrollbar-track{border-radius:6px}.document .side-doc-outline--content::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.3);border-radius:6px;box-shadow:0 0 0 1px hsla(0,0%,100%,.3)}@keyframes float-in{0%{transform:translateY(.5rem);opacity:0}to{transform:translateY(0);opacity:1}}@keyframes float-out{0%{transform:translateY(0);opacity:1}to{transform:translateY(.5rem);opacity:0}}.page-content .headerlink{display:inline-block;text-decoration:none;margin-left:.8rem;color:inherit;opacity:0}.page-content .headerlink:hover{animation:float-in .2s cubic-bezier(.4,0,.2,1) 0s forwards}.page-content h1 .toc-backref,.page-content h2 .toc-backref,.page-content h3 .toc-backref,.page-content h4 .toc-backref,.page-content h5 .toc-backref,.page-content h6 .toc-backref{text-decoration:none}.page-content h1:hover .headerlink,.page-content h2:hover .headerlink,.page-content h3:hover .headerlink,.page-content h4:hover .headerlink,.page-content h5:hover .headerlink,.page-content h6:hover .headerlink{animation:float-in .2s cubic-bezier(.4,0,.2,1) 0s forwards}.page-content h1{font-size:2rem;line-height:2.25rem}.page-content h2{font-size:1.75rem;line-height:2rem;padding-top:1.5rem;margin-top:0;margin-bottom:1rem}.page-content h3{font-size:1.5rem;line-height:1.75rem;padding-top:1rem;margin-top:0;margin-bottom:.75rem}.page-content h4{font-size:1.25rem;line-height:1.5rem;padding-top:.75rem;margin-top:0;margin-bottom:.5rem}.page-content div.page-content h5{font-size:1.1rem;line-height:1.5rem;padding-top:2rem;margin-top:0;margin-bottom:1rem}.page-content div.page-content h6{font-size:1rem;line-height:1.5rem;padding-top:2rem;margin-top:0;margin-bottom:1rem}.admonition{padding:12px 20px;margin-top:10px;margin-bottom:10px}.admonition p.last{margin:16px}.admonition .admonition-title{font-size:16px;font-weight:700;color:#555;text-transform:uppercase;margin-top:7px}.admonition.note{border-left:4px solid #00bcd4;background-color:rgba(0,188,212,.1)}.admonition.note .admonition-title{font-size:16px;font-weight:700;color:#00bcd4;margin-top:4px;margin-bottom:8px}.admonition.note .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"info_outline";font-size:18px}.admonition.seealso{border-left:4px solid #00bcd4;background-color:rgba(0,188,212,.1)}.admonition.seealso .admonition-title{font-size:16px;font-weight:700;color:#00bcd4;margin-top:4px;margin-bottom:8px}.admonition.seealso .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"search";font-size:18px}.admonition.hint{border-left:4px solid #00bcd4;background-color:rgba(0,188,212,.1)}.admonition.hint .admonition-title{font-size:16px;font-weight:700;color:#00bcd4;margin-top:4px;margin-bottom:8px}.admonition.hint .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"help_outline";font-size:18px}.admonition.warning{border-left:4px solid #ffc107;background-color:rgba(255,193,7,.1)}.admonition.warning .admonition-title{font-size:16px;font-weight:700;color:#ffc107;margin-top:4px;margin-bottom:8px}.admonition.warning .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"warning";font-size:18px}.admonition.attention{border-left:4px solid #ffc107;background-color:rgba(255,193,7,.1)}.admonition.attention .admonition-title{font-size:16px;font-weight:700;color:#ffc107;margin-top:4px;margin-bottom:8px}.admonition.attention .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"warning";font-size:18px}.admonition.tip{border-left:4px solid #8bc34a;background-color:rgba(139,195,74,.1)}.admonition.tip .admonition-title{font-size:16px;font-weight:700;color:#8bc34a;margin-top:4px;margin-bottom:8px}.admonition.tip .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"lightbulb_outline";font-size:18px}.admonition.important{border-left:4px solid #8bc34a;background-color:rgba(139,195,74,.1)}.admonition.important .admonition-title{font-size:16px;font-weight:700;color:#8bc34a;margin-top:4px;margin-bottom:8px}.admonition.important .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"check_circle";font-size:18px}.admonition.error{border-left:4px solid #f44336;background-color:rgba(244,67,54,.1)}.admonition.error .admonition-title{font-size:16px;font-weight:700;color:#f44336;margin-top:4px;margin-bottom:8px}.admonition.error .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"error_outline";font-size:18px}.admonition.caution{border-left:4px solid #f44336;background-color:rgba(244,67,54,.1)}.admonition.caution .admonition-title{font-size:16px;font-weight:700;color:#f44336;margin-top:4px;margin-bottom:8px}.admonition.caution .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"error_outline";font-size:18px}.admonition.danger{border-left:4px solid #f44336;background-color:rgba(244,67,54,.1)}.admonition.danger .admonition-title{font-size:16px;font-weight:700;color:#f44336;margin-top:4px;margin-bottom:8px}.admonition.danger .admonition-title:before{position:relative;margin-right:5px;top:3px;content:"error_outline";font-size:18px}.page-content .highlight{margin:1px 0}.page-content .highlight pre{background:rgba(0,0,0,.05);color:rgba(0,0,0,.87);font-family:Menlo,DejaVu Sans Mono,Liberation Mono,Consolas,Ubuntu Mono,Courier New,andale mono,lucida console,monospace;padding:.75rem;overflow:auto;overflow-y:hidden}.page-content .highlight pre .nd,.page-content .highlight pre .o{color:rgba(0,0,0,.87)}.page-content div.highlight-console div.highlight{background:none}.page-content .output .highlight pre{color:rgba(0,0,0,.87);background:#fafafa;border:1px solid #999;padding:.75rem}.page-content .code,.page-content code:not(.download){margin:0;border-radius:2px}.page-content .code,.page-content .code span.pre,.page-content code:not(.download),.page-content code:not(.download) span.pre{font-family:Menlo,DejaVu Sans Mono,Liberation Mono,Consolas,Ubuntu Mono,Courier New,andale mono,lucida console,monospace}.page-content .viewcode-link{padding-left:2em;font-size:80%}.page-content .class>dt,.page-content .function>dt,.page-content .method>dt,.page-content .rubric{display:table;margin:10px 0;font-size:100%;line-height:normal;background:#e7f2fa;color:#2b98f0;border-top:3px solid #55adf3;padding:10px;position:relative}.page-content .class>dt .descclassname,.page-content .class>dt .descname,.page-content .function>dt .descclassname,.page-content .function>dt .descname,.page-content .method>dt .descclassname,.page-content .method>dt .descname,.page-content .rubric .descclassname,.page-content .rubric .descname{color:rgba(0,0,0,.87);background:#e7f2fa;padding:3px}.page-content .class>dt em,.page-content .function>dt em,.page-content .method>dt em,.page-content .rubric em{padding:0 2px}.page-content .rubric{margin:30px 0 10px}.page-content .field-body{padding-left:40px}.page-content .field-body ul{padding:0 0 0 16px;margin:0}.page-content .seealso .docutils>dt{float:left;clear:left;padding:0 6px}.page-content .seealso .docutils>dd{padding-left:6em}.page-content .nblast{padding-bottom:1em}.page-content pre{font-size:90%;background:#eee;color:#455a64;padding:16px 32px;width:auto;border-radius:4px;word-wrap:break-word}.page-content pre:hover:before{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;padding:0 .5rem;content:attr(click-to-copy);color:rgba(0,0,0,.5);border-radius:4px;position:relative;float:right;top:-.5rem;right:-.5rem;background:#c8c8c8;font-size:.8rem;cursor:pointer}.page-content blockquote{font-size:1rem;padding:0 1rem;border-left:3px solid rgba(0,0,0,.05)}.page-content blockquote:after{content:""!important;margin-left:0}.page-content blockquote:before{content:""!important}.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list){margin:1.5rem 0;table-layout:fixed;max-width:100%;min-width:70%}.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) td,.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) th{white-space:normal;overflow-wrap:break-word}.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) caption{font-size:16px;margin:1rem 0 .8rem;white-space:normal}.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) caption .caption-number{font-style:normal}.page-content table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) caption .caption-number:after{content:"\00a0"}.globaltoc .caption,.globaltoc .toc{display:none}.globaltoc ul{list-style-type:none;padding:0;margin:0}.globaltoc ul li{min-height:18px}.globaltoc ul li .link-wrapper{display:flex;justify-content:space-between}.globaltoc ul li .link-wrapper>a{padding:4px 0;display:block;width:100%;font-size:1rem;text-decoration:none;color:#757575}.globaltoc ul li .link-wrapper>a.current{font-weight:700}.globaltoc .nav-toggle{padding:0;float:right;display:flex;align-items:center;justify-content:center;height:36px}.globaltoc .nav-toggle>a{padding:0;margin-left:0;margin-right:4px;cursor:pointer}.globaltoc .nav-toggle>a>i{font-size:18px}.globaltoc .nav-toggle.show{transform:rotate(180deg)}.globaltoc .nav-toggle.show>a{margin-right:0;margin-left:4px}.globaltoc nav>ul>li>span.link-wrapper{padding-left:8px}.globaltoc nav>ul>li>ul>li>span.link-wrapper{padding-left:16px}.globaltoc nav>ul>li>ul>li>ul>li>span.link-wrapper{padding-left:24px}.globaltoc nav>ul>li>ul>li>ul>li>ul>li>span.link-wrapper{padding-left:32px}.globaltoc nav>ul>li>ul>li>ul>li>ul>li>ul>li>span.link-wrapper{padding-left:40px}.globaltoc nav>ul>li>ul>li>ul>li>ul>li>ul>li>ul>li>span.link-wrapper{padding-left:48px}.localtoc{font-size:.75rem;padding-top:1rem}.localtoc .caption{padding-left:12px}.localtoc .caption-text{font-size:.9rem;font-weight:700}.localtoc>ul>li>a{display:none}.localtoc ul{padding:0;list-style-type:none}.localtoc li{padding-left:6px}.localtoc a{display:block;text-decoration:none;color:inherit;margin-top:8px;padding-left:8px;line-height:1.1rem}.localtoc a.current{padding-left:5px;border-left:3px solid;font-weight:700}.contents.topic,.toctree-wrapper{border-left:5px solid}.contents.topic>p.topic-title,.toctree-wrapper>p.caption{color:#757575;font-size:1rem;padding-left:14px}.contents.topic ul,.toctree-wrapper ul{padding-left:14px;list-style:none;line-height:30px}.contents.topic a,.toctree-wrapper a{font-size:1.2rem;text-decoration:none}.contents.topic a .pre,.toctree-wrapper a .pre{font-size:1rem}.contents.topic>ul>li>a,.toctree-wrapper>ul>li>a{font-size:1.3rem}.contents.topic>ul>li>a .pre,.toctree-wrapper>ul>li>a .pre{font-size:1.1rem}.page-content ul li{margin:.3rem 0}.page-content ul li p{margin:0}.page-content .option-list .option{font-family:Menlo,DejaVu Sans Mono,Liberation Mono,Consolas,Ubuntu Mono,Courier New,andale mono,lucida console,monospace}.page-content .option-list td{padding:.5rem;border:none}.mdl-layout__drawer{background-color:#fff}.mdl-layout__drawer::-webkit-scrollbar{width:6px}.mdl-layout__drawer::-webkit-scrollbar-track{border-radius:6px}.mdl-layout__drawer::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.3);border-radius:6px;box-shadow:0 0 0 1px hsla(0,0%,100%,.3)}.mdl-layout__drawer>.mdl-layout-title{font-weight:700;text-align:right;margin:0;padding:0;line-height:32px;border-bottom:1px solid rgba(0,0,0,.1);min-height:64px}.mdl-layout__drawer>.mdl-layout-title .title{color:inherit;display:block;height:100%;width:100%;text-decoration:none}.mdl-layout__drawer>.mdl-layout-title .title>img.logo{width:100%;margin:0;padding:0}.mdl-layout__drawer>.mdl-layout-title .title-text{font-weight:700;text-align:right;padding:0 10px;margin:16px 0 8px;line-height:32px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;color:inherit;display:block}nav.breadcrumb>a.mdl-navigation__link{padding:0 8px;font-size:18px}@media (max-width:1199px){nav.breadcrumb{width:calc(100% - 64px)}nav.breadcrumb a.mdl-navigation__link.is-active{overflow-x:hidden;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.admonition.attention nav.breadcrumb i.admonition-title:before,.admonition.caution nav.breadcrumb i.admonition-title:before,.admonition.danger nav.breadcrumb i.admonition-title:before,.admonition.error nav.breadcrumb i.admonition-title:before,.admonition.hint nav.breadcrumb i.admonition-title:before,.admonition.important nav.breadcrumb i.admonition-title:before,.admonition.note nav.breadcrumb i.admonition-title:before,.admonition.seealso nav.breadcrumb i.admonition-title:before,.admonition.tip nav.breadcrumb i.admonition-title:before,.admonition.warning nav.breadcrumb i.admonition-title:before,nav.breadcrumb .admonition.attention i.admonition-title:before,nav.breadcrumb .admonition.caution i.admonition-title:before,nav.breadcrumb .admonition.danger i.admonition-title:before,nav.breadcrumb .admonition.error i.admonition-title:before,nav.breadcrumb .admonition.hint i.admonition-title:before,nav.breadcrumb .admonition.important i.admonition-title:before,nav.breadcrumb .admonition.note i.admonition-title:before,nav.breadcrumb .admonition.seealso i.admonition-title:before,nav.breadcrumb .admonition.tip i.admonition-title:before,nav.breadcrumb .admonition.warning i.admonition-title:before,nav.breadcrumb a.mdl-navigation__link:not(.is-active),nav.breadcrumb i.material-icons{display:none}}div.mdl-layout__header{margin-top:77px}.mdl-layout__drawer-button{top:13px!important}div.mdl-layout__header-row.header-links{background:hsla(0,0%,100%,.2);width:100%;overflow-x:auto;overflow-y:hidden}div.mdl-layout__header-row.header-links a.mdl-navigation__link{font-size:1rem}div.mdl-layout__header-row.header-links a.mdl-navigation__link i{font-size:1.2rem;margin:0 8px;position:relative;bottom:-.1rem}div.mdl-layout__header-row.header-links a.mdl-navigation__link:hover{background-color:#2196f3;color:#eee}div.mdl-layout__header-row.header-links a.mdl-navigation__link[href="#"]{background-color:#2196f3;opacity:1;color:#fff}.site-title{font-weight:300!important;line-height:57px;letter-spacing:-1px;margin-bottom:0;float:left;color:#fff}.site-title,.site-title:visited{color:#424242}.site-header{position:fixed;top:0;width:100%;min-height:55px;padding-top:10px;padding-bottom:10px;background-color:#048ccc;z-index:10;font-weight:300;font-size:17px;border-bottom:1px solid #fff}.site-header-logo{width:120px;display:initial}.site-nav{float:right;line-height:57px}.site-nav .menu-icon,.site-nav .nav-trigger{display:none}.site-nav .page-link{color:#fff;line-height:1.5;font-weight:300}.site-nav .page-link:not(:last-child){margin-right:40px}.site-nav .page-link:hover{color:#fff;text-shadow:-.06ex 0 #fff,.06ex 0 #fff}.site-nav .page-link.page-current{color:#fff;text-decoration:underline}@media screen and (max-width:1024px){.site-nav{position:absolute;top:9px;right:15px;background-color:#178dc9;border-radius:2px;text-align:right}.site-nav label[for=nav-trigger]{display:block;float:right;width:36px;height:36px;z-index:2;cursor:pointer}.site-nav .menu-icon{display:block;float:right;width:36px;height:26px;line-height:0;padding-top:20px;text-align:center}.site-nav .menu-icon>svg{fill:#fff}.site-nav input~.trigger{clear:both;display:none}.site-nav input:checked~.trigger{display:block;padding-bottom:5px}.site-nav .page-link{padding:5px 10px;display:block;margin-left:20px}.site-nav .page-link:not(:last-child){margin-right:0}}footer.mdl-mini-footer{background-color:#212121}footer.mdl-mini-footer>div.mdl-mini-footer__left-section{margin-bottom:20px;display:flex;flex-direction:column}footer.mdl-mini-footer>div.mdl-mini-footer__left-section .mdl-logo{font-size:1.1rem}footer.mdl-mini-footer>div.mdl-mini-footer__right-section{font-size:.9rem;display:flex;flex-direction:column;justify-content:flex-end}footer.mdl-mini-footer>div.mdl-mini-footer__right-section a{color:inherit;font-weight:700;text-decoration:none}footer.mdl-mini-footer p.caption{display:none}.pagenation{width:100%;margin-top:80px;height:92px;background-color:#424242;display:flex}.pagenation #button-next,.pagenation #button-prev,.pagenation .button-common{text-transform:none;padding:0;height:92px;display:flex;justify-content:center;align-items:center;color:#fff}.pagenation #button-prev{margin-right:auto}.pagenation #button-prev .pagenation-text{text-align:left}.pagenation #button-next{margin-left:auto;flex-direction:row-reverse}.pagenation #button-next .pagenation-text{text-align:right}.pagenation-arrow-L{margin-right:20px}.pagenation-arrow-R{margin-left:20px}.pagenation-text{line-height:30px;font-size:20px}.pagenation-direction{opacity:.7;font-size:18px}@media screen and (max-width:1024px){.pagenation #button-prev{width:20%}.pagenation #button-next{width:80%}.pagenation #button-prev .pagenation-text{display:none}}@media screen and (min-width:1025px){.pagenation #button-next,.pagenation #button-prev{width:50%}.pagenation #button-prev .pagenation-text{display:block}}.site-footer{border-top:1px solid #f5f5f5;padding:30px 0;background-color:#424242;position:relative;z-index:10}.site-footer .footer-category-title{color:#048ccc}.site-footer a,.site-footer a:visited{color:#f5f5f5!important}.site-footer2{background-color:#424242;padding-top:40px;padding-bottom:10px;position:relative;z-index:10}.footer-heading{margin-bottom:15px}.contact-list,.social-media-list{list-style:none;margin-left:0}.footer-bottom-warning{font-size:80%;color:#fff;float:left}.footer-logo{width:200px;margin-bottom:30px;margin-top:30px}.footer-col{float:left;margin-bottom:15px;padding-left:15px}.footer-text{color:#f5f5f5}#waterfall-exp::-webkit-input-placeholder{color:#ccc}#waterfall-exp:-ms-input-placeholder{color:#ccc}#waterfall-exp::-moz-placeholder{color:#ccc}ul.search span.highlighted{font-weight:700}ul.search>li{margin-bottom:24px}#search-results ul{list-style:none;padding:0}#search-results ul li>a{text-decoration:none;font-size:1.2rem}a.download:before{content:"file_download";position:relative;top:5px;margin-right:5px}button.download{position:sticky;margin-left:1em}.mdl-card{margin:1em 1.5em 1em 0;display:inline-block;width:250px;min-height:140px;padding:18px}.mdl-card:hover{box-shadow:0 10px 20px rgba(0,0,0,.25),0 6px 6px rgba(0,0,0,.22);color:#000;cursor:pointer}.mdl-card__title{padding:0 0 1em;font-size:18px;color:#444}.mdl-card__supporting-text{line-height:1.5rem;padding:0;width:100%}.head-card.mdl-card{width:auto;display:block;max-width:800px;padding:24px}.head-card>.mdl-card__title{padding-bottom:0;height:60px;font-weight:700;text-transform:uppercase}.head-card>.mdl-card__menu{color:#fff}.head-card>.mdl-card__actions{padding:0}.cards{display:flex;flex-direction:row;flex-wrap:wrap} /*# sourceMappingURL=/sphinx_materialdesign_theme.css.map */ \ No newline at end of file diff --git a/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.css.map b/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.css.map index ad360169c25d..aaab114a83a9 100644 --- a/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.css.map +++ b/docs/python_docs/themes/mx-theme/mxtheme/static/sphinx_materialdesign_theme.css.map @@ -1 +1 @@ -{"version":3,"sources":["../../node_modules/material-design-lite/src/shadow/_shadow.scss","../../node_modules/material-design-lite/src/_mixins.scss","../../node_modules/material-design-lite/src/data-table/_data-table.scss","../../node_modules/material-design-lite/src/_variables.scss","../../node_modules/material-design-lite/src/footer/_mini_footer.scss","../../node_modules/material-design-lite/src/card/_card.scss","../../node_modules/material-design-lite/src/button/_button.scss","../scss/grid/_simplegrid.scss","../scss/fonts/_material-icons.scss","../scss/_root.scss","../scss/_variables.scss","../scss/layout/_layout.scss","../scss/headerings/_headerings.scss","../scss/admonitions/_admonitions.scss","../scss/code/_code.scss","../scss/blockquote/_blockquote.scss","../scss/tables/_tables.scss","../scss/toc/_globaltoc.scss","../scss/toc/_localtoc.scss","../scss/toc/_toctree.scss","../scss/lists/_lists.scss","../scss/drawer/_drawer.scss","../scss/header/_header.scss","../scss/footer/_footer.scss","../scss/search/_search.scss","../scss/downloadlink/_downloadlink.scss","../scss/card/_card.scss"],"names":[],"mappings":"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","file":"sphinx_materialdesign_theme.css","sourceRoot":"../../src/js","sourcesContent":["/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@import \"../variables\";\n@import \"../mixins\";\n\n.mdl-shadow--2dp {\n @include shadow-2dp();\n}\n\n.mdl-shadow--3dp {\n @include shadow-3dp();\n}\n\n.mdl-shadow--4dp {\n @include shadow-4dp();\n}\n\n.mdl-shadow--6dp {\n @include shadow-6dp();\n}\n\n.mdl-shadow--8dp {\n @include shadow-8dp();\n}\n\n.mdl-shadow--16dp {\n @include shadow-16dp();\n}\n\n.mdl-shadow--24dp {\n @include shadow-24dp();\n}\n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* Typography */\n\n@mixin typo-preferred-font($usePreferred: true) {\n @if $usePreferred {\n font-family: $preferred_font;\n }\n}\n\n@mixin typo-display-4($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 112px;\n font-weight: 300;\n line-height: 1;\n letter-spacing: -0.04em;\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-display-3($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 56px;\n font-weight: 400;\n line-height: 1.35;\n letter-spacing: -0.02em;\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-display-2($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 45px;\n font-weight: 400;\n line-height: 48px;\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-display-1($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 34px;\n font-weight: 400;\n line-height: 40px;\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-headline($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 24px;\n font-weight: 400;\n line-height: 32px;\n -moz-osx-font-smoothing: grayscale;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-title($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 20px;\n font-weight: 500;\n line-height: 1;\n letter-spacing: 0.02em;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-subhead($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 16px;\n font-weight: 400;\n line-height: 24px;\n letter-spacing: 0.04em;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-subhead-2($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 16px;\n font-weight: 400;\n line-height: 28px;\n letter-spacing: 0.04em;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-body-2($colorContrast: false, $usePreferred: false) {\n @include typo-preferred-font($usePreferred);\n font-size: 14px;\n @if $usePreferred {\n font-weight: 500;\n } @else {\n font-weight: bold;\n }\n line-height: 24px;\n letter-spacing: 0;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-body-1($colorContrast: false, $usePreferred: false) {\n @include typo-preferred-font($usePreferred);\n font-size: 14px;\n font-weight: 400;\n line-height: 24px;\n letter-spacing: 0;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-caption($colorContrast: false, $usePreferred: false) {\n @include typo-preferred-font($usePreferred);\n font-size: 12px;\n font-weight: 400;\n line-height: 1;\n letter-spacing: 0;\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-blockquote($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n position: relative;\n font-size: 24px;\n font-weight: 300;\n font-style: italic;\n line-height: 1.35;\n letter-spacing: 0.08em;\n\n &:before {\n position: absolute;\n left: -0.5em;\n content: '“';\n }\n\n &:after {\n content: '”';\n margin-left: -0.05em;\n }\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-menu($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 14px;\n font-weight: 500;\n line-height: 1;\n letter-spacing: 0;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-button($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 14px;\n font-weight: 500;\n text-transform: uppercase;\n line-height: 1;\n letter-spacing: 0;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-icon() {\n font-family: 'Material Icons';\n font-weight: normal;\n font-style: normal;\n font-size: 24px;\n line-height: 1;\n letter-spacing: normal;\n text-transform: none;\n display: inline-block;\n word-wrap: normal;\n font-feature-settings: 'liga';\n -webkit-font-feature-settings: 'liga';\n -webkit-font-smoothing: antialiased;\n}\n\n/* Shadows */\n\n// Focus shadow mixin.\n@mixin focus-shadow() {\n box-shadow: 0 0 8px rgba(0,0,0,.18),0 8px 16px rgba(0,0,0,.36);\n}\n\n@mixin shadow-2dp() {\n box-shadow: 0 2px 2px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 3px 1px -2px rgba(0, 0, 0, $shadow-key-umbra-opacity),\n 0 1px 5px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity);\n}\n@mixin shadow-3dp() {\n box-shadow: 0 3px 4px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 3px 3px -2px rgba(0, 0, 0, $shadow-key-umbra-opacity),\n 0 1px 8px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity);\n}\n@mixin shadow-4dp() {\n box-shadow: 0 4px 5px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 1px 10px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n 0 2px 4px -1px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n@mixin shadow-6dp() {\n box-shadow: 0 6px 10px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 1px 18px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n 0 3px 5px -1px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n@mixin shadow-8dp() {\n box-shadow: 0 8px 10px 1px rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 3px 14px 2px rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n 0 5px 5px -3px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n\n@mixin shadow-16dp() {\n box-shadow: 0 16px 24px 2px rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 6px 30px 5px rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n 0 8px 10px -5px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n\n@mixin shadow-24dp() {\n box-shadow: 0 9px 46px 8px rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 11px 15px -7px rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n 0 24px 38px 3px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n\n/* Animations */\n\n@mixin material-animation-fast-out-slow-in($duration:0.2s) {\n transition-duration: $duration;\n transition-timing-function: $animation-curve-fast-out-slow-in;\n}\n\n@mixin material-animation-linear-out-slow-in($duration:0.2s) {\n transition-duration: $duration;\n transition-timing-function: $animation-curve-linear-out-slow-in;\n}\n\n@mixin material-animation-fast-out-linear-in($duration:0.2s) {\n transition-duration: $duration;\n transition-timing-function: $animation-curve-fast-out-linear-in;\n}\n\n@mixin material-animation-default($duration:0.2s) {\n transition-duration: $duration;\n transition-timing-function: $animation-curve-default;\n}\n\n/* Dialog */\n\n@mixin dialog-width($units:5) {\n @if(type_of($units) != 'number') {\n @error \"The unit given to dialog-width should be a number.\";\n }\n // 56dp is the base unit width for Dialogs.\n // With 5 units being the number of units for a mobile device.\n // https://goo.gl/sK2O5o\n width: $units * 56px;\n}\n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@import \"../variables\";\n@import \"../mixins\";\n\n.mdl-data-table {\n position: relative;\n border: $data-table-dividers;\n border-collapse: collapse;\n white-space: nowrap;\n font-size: $data-table-font-size;\n background-color: unquote(\"rgb(#{$color-white})\");\n\n thead {\n padding-bottom: 3px;\n\n .mdl-data-table__select {\n margin-top: 0;\n }\n }\n\n tbody {\n tr {\n position: relative;\n height: $data-table-row-height;\n @include material-animation-default(0.28s);\n transition-property: background-color;\n\n &.is-selected {\n background-color: $data-table-selection-color;\n }\n\n &:hover {\n background-color: $data-table-hover-color;\n }\n }\n }\n\n td, th {\n padding: 0 $data-table-column-padding 12px $data-table-column-padding;\n text-align: right;\n\n &:first-of-type {\n padding-left: 24px;\n }\n\n &:last-of-type {\n padding-right: 24px;\n }\n }\n\n td {\n position: relative;\n vertical-align: middle;\n height: $data-table-row-height;\n border-top: $data-table-dividers;\n border-bottom: $data-table-dividers;\n padding-top: $data-table-cell-top;\n box-sizing: border-box;\n\n .mdl-data-table__select {\n vertical-align: middle;\n }\n }\n\n th {\n position: relative;\n vertical-align: bottom;\n text-overflow: ellipsis;\n @include typo-body-2();\n height: $data-table-row-height;\n font-size: $data-table-header-font-size;\n color: $data-table-header-color;\n padding-bottom: 8px;\n box-sizing: border-box;\n\n &.mdl-data-table__header--sorted-ascending,\n &.mdl-data-table__header--sorted-descending {\n color: $data-table-header-sorted-color;\n &:before {\n @include typo-icon;\n font-size: $data-table-header-sort-icon-size;\n content: \"\\e5d8\";\n margin-right: 5px;\n vertical-align: sub;\n }\n &:hover {\n cursor: pointer;\n &:before {\n color: $data-table-header-sorted-icon-hover-color;\n }\n }\n }\n &.mdl-data-table__header--sorted-descending:before {\n content: \"\\e5db\";\n }\n }\n}\n\n.mdl-data-table__select {\n width: 16px;\n}\n\n.mdl-data-table__cell--non-numeric.mdl-data-table__cell--non-numeric {\n text-align: left;\n}\n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*------------------------------------*\\\n $CONTENTS\n\\*------------------------------------*/\n/**\n * STYLE GUIDE VARIABLES------------------Declarations of Sass variables\n * -----Typography\n * -----Colors\n * -----Textfield\n * -----Switch\n * -----Spinner\n * -----Radio\n * -----Menu\n * -----List\n * -----Layout\n * -----Icon toggles\n * -----Footer\n * -----Column\n * -----Checkbox\n * -----Card\n * -----Button\n * -----Animation\n * -----Progress\n * -----Badge\n * -----Shadows\n * -----Grid\n * -----Data table\n * -----Dialog\n * -----Snackbar\n * -----Tooltip\n * -----Chip\n *\n * Even though all variables have the `!default` directive, most of them\n * should not be changed as they are dependent one another. This can cause\n * visual distortions (like alignment issues) that are hard to track down\n * and fix.\n */\n\n\n/* ========== TYPOGRAPHY ========== */\n\n/* We're splitting fonts into \"preferred\" and \"performance\" in order to optimize\n page loading. For important text, such as the body, we want it to load\n immediately and not wait for the web font load, whereas for other sections,\n such as headers and titles, we're OK with things taking a bit longer to load.\n We do have some optional classes and parameters in the mixins, in case you\n definitely want to make sure you're using the preferred font and don't mind\n the performance hit.\n We should be able to improve on this once CSS Font Loading L3 becomes more\n widely available.\n*/\n$preferred_font: 'Roboto', 'Helvetica', 'Arial', sans-serif !default;\n$performance_font: 'Helvetica', 'Arial', sans-serif !default;\n\n/* ========== COLORS ========== */\n\n/**\n*\n* Material design color palettes.\n* @see http://www.google.com/design/spec/style/color.html\n*\n**/\n\n@import \"color-definitions\";\n@import \"functions\";\n\n/* ========== IMAGES ========== */\n$image_path: '/images' !default;\n\n/* ========== Color & Themes ========== */\n\n// Define whether individual color palette items should have classes created.\n// Setting this to true will remove individual color classes for each color in the palettes.\n// To improve overall performance (assuming they aren't used) by:\n// * Saving server bandwidth sending the extra classes\n// * Save client computation against the classes\n// it is RECOMMENDED you set this to true.\n$trim-color-classes: false !default;\n\n// Use color primarily for emphasis. Choose colors that fit with\n// your brand and provide good contrast between visual components.\n$color-primary: $palette-indigo-500 !default;\n$color-primary-dark: $palette-indigo-700 !default;\n$color-accent: $palette-pink-A200 !default;\n\n// Our primary is dark, so use $color-dark-contrast for overlaid text.\n$color-primary-contrast: $color-dark-contrast !default;\n// Our accent is dark, so use $color-dark-contrast for overlaid text.\n$color-accent-contrast: $color-dark-contrast !default;\n\n// Replace all colors with placeholders if we're generating a template.\n@if $styleguide-generate-template == true {\n $color-primary: '$color-primary';\n $color-primary-dark: '$color-primary-dark';\n $color-accent: '$color-accent';\n $color-primary-contrast: '$color-primary-contrast';\n $color-accent-contrast: '$color-accent-contrast';\n}\n\n/* ========== Typography ========== */\n\n// We use the following default color styles: text-color-primary and\n// text-color-secondary. For light themes, use text-color-primary-inverse\n// and text-color-secondary-inverse.\n\n$text-color-primary: unquote(\"rgba(#{$color-black}, 0.87)\") !default;\n$text-link-color: unquote(\"rgb(#{$color-accent})\") !default;\n\n// Define whether to target elements directly for typographic enhancements.\n// Turning this off means you need to use mdl-* classes more often.\n// Other components may also fail to adhere to MD without these rules.\n// It is strongly recommended you leave this as true.\n\n$target-elements-directly: true !default;\n\n/* ========== Components ========== */\n\n/* ========== Standard Buttons ========== */\n\n// Default button colors.\n$button-primary-color: unquote(\"rgba(#{$palette-grey-500}, 0.20)\") !default;\n$button-secondary-color: unquote(\"rgb(#{$color-black})\") !default;\n$button-hover-color: $button-primary-color !default;\n$button-active-color: unquote(\"rgba(#{$palette-grey-500}, 0.40)\") !default;\n$button-focus-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n\n// Colored button colors.\n$button-primary-color-alt: unquote(\"rgb(#{$color-primary})\") !default;\n$button-secondary-color-alt: unquote(\"rgb(#{$color-primary-contrast})\") !default;\n$button-hover-color-alt: unquote(\"rgb(#{$color-primary})\") !default;\n$button-active-color-alt: unquote(\"rgb(#{$color-primary})\") !default;\n$button-focus-color-alt: $button-focus-color !default;\n\n// Ripple color for colored raised buttons.\n$button-ripple-color-alt: unquote(\"rgb(#{$color-primary-contrast})\") !default;\n\n// Disabled button colors.\n$button-primary-color-disabled: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n$button-secondary-color-disabled: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n\n// FAB colors and sizes.\n$button-fab-color-alt: unquote(\"rgb(#{$color-accent})\") !default;\n$button-fab-hover-color-alt: unquote(\"rgb(#{$color-accent})\") !default;\n$button-fab-active-color-alt: unquote(\"rgb(#{$color-accent})\") !default;\n$button-fab-text-color-alt: unquote(\"rgb(#{$color-accent-contrast})\") !default;\n$button-fab-ripple-color-alt: unquote(\"rgb(#{$color-accent-contrast})\") !default;\n\n// Icon button colors and sizes.\n$button-icon-color: unquote(\"rgb(#{$palette-grey-700})\") !default;\n$button-icon-focus-color: $button-focus-color !default;\n\n/* ========== Icon Toggles ========== */\n\n$icon-toggle-color: unquote(\"rgb(#{$palette-grey-700})\") !default;\n$icon-toggle-focus-color: $button-focus-color !default;\n$icon-toggle-checked-color: unquote(\"rgb(#{$color-primary})\") !default;\n$icon-toggle-checked-focus-color: unquote(\"rgba(#{$color-primary}, 0.26)\") !default;\n$icon-toggle-disabled-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n\n/* ========== Radio Buttons ========== */\n\n$radio-color: unquote(\"rgb(#{$color-primary})\") !default;\n$radio-off-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$radio-disabled-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n\n/* ========== Ripple effect ========== */\n\n$ripple-bg-color: unquote(\"rgb(#{$color-light-contrast})\") !default;\n\n/* ========== Layout ========== */\n\n$layout-nav-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n\n// Drawer\n$layout-drawer-bg-color: unquote(\"rgb(#{$palette-grey-50})\") !default;\n$layout-drawer-border-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n$layout-text-color: unquote(\"rgb(#{$palette-grey-800})\") !default;\n$layout-drawer-navigation-color: #757575 !default;\n$layout-drawer-navigation-link-active-background: unquote(\"rgb(#{$palette-grey-300})\") !default;\n$layout-drawer-navigation-link-active-color: unquote(\"rgb(#{$color-light-contrast})\") !default;\n\n// Header\n$layout-header-bg-color: unquote(\"rgb(#{$color-primary})\") !default;\n$layout-header-text-color: unquote(\"rgb(#{$color-primary-contrast})\") !default;\n$layout-header-nav-hover-color: unquote(\"rgba(#{$palette-grey-700}, 0.6)\") !default;\n$layout-header-tab-text-color: unquote(\"rgba(#{$color-primary-contrast}, 0.6)\") !default;\n\n// Tabs\n$layout-header-tab-highlight: unquote(\"rgb(#{$color-accent})\") !default;\n\n/* ========== Content Tabs ========== */\n\n$tab-highlight-color: unquote(\"rgb(#{$color-primary})\") !default;\n$tab-text-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$tab-active-text-color: unquote(\"rgba(#{$color-black}, 0.87)\") !default;\n$tab-border-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n\n/* ========== Checkboxes ========== */\n\n$checkbox-color: unquote(\"rgb(#{$color-primary})\") !default;\n$checkbox-off-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$checkbox-disabled-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n$checkbox-focus-color: unquote(\"rgba(#{$color-primary}, 0.26)\") !default;\n$checkbox-image-path: $image_path;\n\n/* ========== Switches ========== */\n\n$switch-color: unquote(\"rgb(#{$color-primary})\") !default;\n$switch-faded-color: unquote(\"rgba(#{$color-primary}, 0.26)\") !default;\n$switch-thumb-color: $switch-color !default;\n$switch-track-color: unquote(\"rgba(#{$color-primary}, 0.5)\") !default;\n\n$switch-off-thumb-color: unquote(\"rgb(#{$palette-grey-50})\") !default;\n$switch-off-track-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n$switch-disabled-thumb-color: unquote(\"rgb(#{$palette-grey-400})\") !default;\n$switch-disabled-track-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n\n/* ========== Spinner ========== */\n\n$spinner-color-1: unquote(\"rgb(#{$palette-blue-400})\") !default;\n$spinner-color-2: unquote(\"rgb(#{$palette-red-500})\") !default;\n$spinner-color-3: unquote(\"rgb(#{$palette-yellow-600})\") !default;\n$spinner-color-4: unquote(\"rgb(#{$palette-green-500})\") !default;\n\n$spinner-single-color: unquote(\"rgb(#{$color-primary})\") !default;\n\n/* ========== Text fields ========== */\n\n$input-text-background-color: transparent !default;\n$input-text-label-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n$input-text-bottom-border-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n$input-text-highlight-color: unquote(\"rgb(#{$color-primary})\") !default;\n$input-text-disabled-color: $input-text-bottom-border-color !default;\n$input-text-disabled-text-color: $input-text-label-color !default;\n$input-text-error-color: unquote(\"rgb(#{$palette-red-A700})\") !default;\n\n/* ========== Card ========== */\n\n$card-background-color: unquote(\"rgb(#{$color-white})\") !default;\n$card-text-color: unquote(\"rgb(#{$color-black})\") !default;\n$card-image-placeholder-color: unquote(\"rgb(#{$color-accent})\") !default;\n$card-supporting-text-text-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$card-border-color: rgba(0,0,0,0.1) !default;\n$card-subtitle-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n\n/* ========== Sliders ========== */\n\n$range-bg-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n$range-color: unquote(\"rgb(#{$color-primary})\") !default;\n$range-faded-color: unquote(\"rgba(#{$color-primary}, 0.26)\") !default;\n$range-bg-focus-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n\n/* ========== Progress ========== */\n$progress-main-color: unquote(\"rgb(#{$color-primary})\") !default;\n$progress-secondary-color: unquote(\"rgba(#{$color-primary-contrast}, 0.7)\") !default;\n$progress-fallback-buffer-color: unquote(\"rgba(#{$color-primary-contrast}, 0.9)\") !default;\n$progress-image-path: $image_path;\n\n/* ========== List ========== */\n\n$list-main-text-text-color: unquote(\"rgba(#{$color-black}, 0.87)\") !default;\n$list-supporting-text-text-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$list-icon-color: unquote(\"rgb(#{$palette-grey-600})\") !default;\n$list-avatar-color: white !default;\n\n/* ========== Item ========== */\n\n// Default Item Colors\n$default-item-text-color: unquote(\"rgba(#{$color-black}, 0.87)\") !default;\n$default-item-outline-color: unquote(\"rgb(#{$palette-grey-400})\") !default;\n$default-item-hover-bg-color: unquote(\"rgb(#{$palette-grey-200})\") !default;\n$default-item-focus-bg-color: unquote(\"rgb(#{$palette-grey-200})\") !default;\n$default-item-active-bg-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n$default-item-divider-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n\n// Disabled Button Colors\n$disabled-item-text-color: unquote(\"rgb(#{$palette-grey-400})\") !default;\n\n/* ========== Dropdown menu ========== */\n\n$default-dropdown-bg-color: unquote(\"rgb(#{$color-white})\") !default;\n\n/* ========== Tooltips ========== */\n\n$tooltip-text-color: unquote(\"rgb(#{$color-white})\") !default;\n$tooltip-background-color: unquote(\"rgba(#{$palette-grey-700}, 0.9)\") !default;\n\n/* ========== Footer ========== */\n\n$footer-bg-color: unquote(\"rgb(#{$palette-grey-800})\") !default;\n$footer-color: unquote(\"rgb(#{$palette-grey-500})\") !default;\n$footer-heading-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n$footer-button-fill-color: $footer-color !default;\n$footer-underline-color: $footer-color !default;\n\n\n/* TEXTFIELD */\n\n$input-text-font-size: 16px !default;\n$input-text-width: 100% !default;\n$input-text-padding: 4px !default;\n$input-text-vertical-spacing: 20px !default;\n\n$input-text-button-size: 32px !default;\n$input-text-floating-label-fontsize: 12px !default;\n$input-text-expandable-icon-top: 16px !default;\n\n\n/* SWITCH */\n\n$switch-label-font-size: 16px !default;\n$switch-label-height: 24px !default;\n$switch-track-height: 14px !default;\n$switch-track-length: 36px !default;\n$switch-thumb-size: 20px !default;\n$switch-track-top: ($switch-label-height - $switch-track-height) / 2 !default;\n$switch-thumb-top: ($switch-label-height - $switch-thumb-size) / 2 !default;\n$switch-ripple-size: $switch-label-height * 2 !default;\n$switch-helper-size: 8px !default;\n\n/* SPINNER */\n\n$spinner-size: 28px !default;\n$spinner-stroke-width: 3px !default;\n\n// Amount of circle the arc takes up.\n$spinner-arc-size: 270deg !default;\n// Time it takes to expand and contract arc.\n$spinner-arc-time: 1333ms !default;\n// How much the start location of the arc should rotate each time.\n$spinner-arc-start-rot: 216deg !default;\n\n$spinner-duration: 360 * $spinner-arc-time / (\n strip-units($spinner-arc-start-rot + (360deg - $spinner-arc-size)));\n\n\n/* RADIO */\n\n$radio-label-font-size: 16px !default;\n$radio-label-height: 24px !default;\n$radio-button-size: 16px !default;\n$radio-inner-margin: $radio-button-size / 4;\n$radio-padding: 8px !default;\n$radio-top-offset: ($radio-label-height - $radio-button-size) / 2;\n$radio-ripple-size: 42px !default;\n\n\n/* MENU */\n\n$menu-expand-duration: 0.3s !default;\n$menu-fade-duration: 0.2s !default;\n\n/* LIST */\n\n$list-border: 8px !default;\n$list-min-height: 48px !default;\n$list-min-padding: 16px !default;\n$list-bottom-padding: 20px !default;\n$list-avatar-text-left-distance: 72px !default;\n$list-icon-text-left-distance: 72px !default;\n\n$list-avatar-size: 40px !default;\n$list-icon-size: 24px !default;\n\n$list-two-line-height: 72px !default;\n$list-three-line-height: 88px !default;\n\n/* LAYOUT */\n\n$layout-drawer-narrow: 240px !default;\n$layout-drawer-wide: 456px !default;\n$layout-drawer-width: $layout-drawer-narrow !default;\n\n$layout-header-icon-size: 32px !default;\n$layout-screen-size-threshold: 1024px !default;\n$layout-header-icon-margin: 24px !default;\n$layout-drawer-button-mobile-size: 32px !default;\n$layout-drawer-button-desktop-size: 48px !default;\n\n$layout-header-mobile-row-height: 56px !default;\n$layout-mobile-header-height: $layout-header-mobile-row-height;\n$layout-header-desktop-row-height: 64px !default;\n$layout-desktop-header-height: $layout-header-desktop-row-height;\n\n$layout-header-desktop-baseline: 80px !default;\n$layout-header-mobile-baseline: 72px !default;\n$layout-header-mobile-indent: 16px !default;\n$layout-header-desktop-indent: 40px !default;\n\n$layout-tab-font-size: 14px !default;\n$layout-tab-bar-height: 48px !default;\n$layout-tab-mobile-padding: 12px !default;\n$layout-tab-desktop-padding: 24px !default;\n$layout-tab-highlight-thickness: 2px !default;\n\n\n/* ICON TOGGLE */\n\n$icon-toggle-size: 32px !default;\n$icon-toggle-font-size: 24px !default;\n$icon-toggle-ripple-size: 36px !default;\n\n/* FOOTER */\n\n/*mega-footer*/\n$footer-min-padding: 16px !default;\n$footer-padding-sides: 40px !default;\n$footer-heading-font-size: 14px !default;\n$footer-heading-line-height: (1.7 * $footer-heading-font-size) !default;\n$footer-btn-size: 36px !default;\n\n/*mini-footer*/\n$padding: 16px !default;\n$footer-heading-font-size: 24px !default;\n$footer-heading-line-height: (1.5 * $footer-heading-font-size) !default;\n$footer-btn-size: 36px !default;\n\n/* CHECKBOX */\n\n$checkbox-label-font-size: 16px !default;\n$checkbox-label-height: 24px !default;\n$checkbox-button-size: 16px !default;\n$checkbox-inner-margin: 2px !default;\n$checkbox-padding: 8px !default;\n$checkbox-top-offset:\n($checkbox-label-height - $checkbox-button-size - $checkbox-inner-margin) / 2;\n$checkbox-ripple-size: $checkbox-label-height * 1.5;\n\n/* CARD */\n\n/* Card dimensions */\n$card-width: 330px !default;\n$card-height: 200px !default;\n$card-font-size: 16px !default;\n$card-title-font-size: 24px !default;\n$card-subtitle-font-size: 14px !default;\n$card-horizontal-padding: 16px !default;\n$card-vertical-padding: 16px !default;\n\n$card-title-perspective-origin-x: 165px !default;\n$card-title-perspective-origin-y: 56px !default;\n\n$card-title-transform-origin-x: 165px !default;\n$card-title-transform-origin-y: 56px !default;\n\n$card-title-text-transform-origin-x: 149px !default;\n$card-title-text-transform-origin-y: 48px !default;\n\n$card-supporting-text-font-size: 1rem !default;\n$card-supporting-text-line-height: 18px !default;\n\n$card-actions-font-size: 16px !default;\n\n$card-title-text-font-weight: 300 !default;\n$card-z-index: 1 !default;\n\n/* Cover image */\n$card-cover-image-height: 186px !default;\n$card-background-image-url: '' !default;\n\n\n/* BUTTON */\n/**\n *\n * Dimensions\n *\n */\n$button-min-width: 64px !default;\n$button-height: 36px !default;\n$button-padding: 16px !default;\n$button-margin: 4px !default;\n$button-border-radius: 2px !default;\n\n$button-fab-size: 56px !default;\n$button-fab-size-mini: 40px !default;\n$button-fab-font-size: 24px !default;\n\n$button-icon-size: 32px !default;\n$button-icon-size-mini: 24px !default;\n\n\n/* ANIMATION */\n$animation-curve-fast-out-slow-in: cubic-bezier(0.4, 0, 0.2, 1) !default;\n$animation-curve-linear-out-slow-in: cubic-bezier(0, 0, 0.2, 1) !default;\n$animation-curve-fast-out-linear-in: cubic-bezier(0.4, 0, 1, 1) !default;\n\n$animation-curve-default: $animation-curve-fast-out-slow-in !default;\n\n\n/* PROGRESS */\n$bar-height: 4px !default;\n\n/* BADGE */\n$badge-font-size: 12px !default;\n$badge-color: unquote(\"rgb(#{$color-accent-contrast})\") !default;\n$badge-color-inverse: unquote(\"rgb(#{$color-accent})\") !default;\n$badge-background: unquote(\"rgb(#{$color-accent})\") !default;\n$badge-background-inverse: unquote(\"rgba(#{$color-accent-contrast},0.2)\") !default;\n$badge-size : 22px !default;\n$badge-padding: 2px !default;\n$badge-overlap: 12px !default;\n\n/* SHADOWS */\n\n$shadow-key-umbra-opacity: 0.2 !default;\n$shadow-key-penumbra-opacity: 0.14 !default;\n$shadow-ambient-shadow-opacity: 0.12 !default;\n\n/* GRID */\n\n$grid-desktop-columns: 12 !default;\n$grid-desktop-gutter: 16px !default;\n$grid-desktop-margin: 16px !default;\n\n$grid-desktop-breakpoint: 840px !default;\n\n$grid-tablet-columns: 8 !default;\n$grid-tablet-gutter: $grid-desktop-gutter !default;\n$grid-tablet-margin: $grid-desktop-margin !default;\n\n$grid-tablet-breakpoint: 480px !default;\n\n$grid-phone-columns: 4 !default;\n$grid-phone-gutter: $grid-desktop-gutter !default;\n$grid-phone-margin: $grid-desktop-margin !default;\n\n$grid-cell-default-columns: $grid-phone-columns !default;\n$grid-max-columns: $grid-desktop-columns !default;\n\n/* DATA TABLE */\n\n$data-table-font-size: 13px !default;\n$data-table-header-font-size: 12px !default;\n$data-table-header-sort-icon-size: 16px !default;\n\n$data-table-header-color: rgba(#000, 0.54) !default;\n$data-table-header-sorted-color: rgba(#000, 0.87) !default;\n$data-table-header-sorted-icon-hover-color: rgba(#000, 0.26) !default;\n$data-table-divider-color: rgba(#000, 0.12) !default;\n\n$data-table-hover-color: #eeeeee !default;\n$data-table-selection-color: #e0e0e0 !default;\n\n$data-table-dividers: 1px solid $data-table-divider-color !default;\n\n$data-table-row-height: 48px !default;\n$data-table-last-row-height: 56px !default;\n$data-table-header-height: 56px !default;\n\n$data-table-column-spacing: 36px !default;\n$data-table-column-padding: $data-table-column-spacing / 2;\n\n$data-table-card-header-height: 64px !default;\n$data-table-card-title-top: 20px !default;\n$data-table-card-padding: 24px !default;\n$data-table-button-padding-right: 16px !default;\n$data-table-cell-top: $data-table-card-padding / 2;\n\n/* DIALOG */\n$dialog-content-color: $card-supporting-text-text-color;\n\n/* SNACKBAR */\n\n// Hard coded since the color is not present in any palette.\n$snackbar-background-color: #323232 !default;\n$snackbar-tablet-breakpoint: $grid-tablet-breakpoint;\n$snackbar-action-color: unquote(\"rgb(#{$color-accent})\") !default;\n\n/* TOOLTIP */\n$tooltip-font-size: 10px !default;\n$tooltip-font-size-large: 14px !default;\n\n/* CHIP */\n$chip-bg-color: rgb(222, 222, 222) !default;\n$chip-bg-active-color: rgb(214, 214, 214) !default;\n$chip-height: 32px !default;\n$chip-font-size: 13px !default; \n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@import \"../variables\";\n\n.mdl-mini-footer {\n display: flex;\n flex-flow: row wrap;\n justify-content: space-between;\n\n padding: ($padding * 2) $padding;\n\n color: $footer-color;\n background-color: $footer-bg-color;\n\n &:after {\n content: '';\n display: block;\n }\n\n & .mdl-logo {\n line-height: $footer-btn-size;\n }\n}\n\n.mdl-mini-footer--link-list,\n.mdl-mini-footer__link-list {\n display: flex;\n flex-flow: row nowrap;\n\n list-style: none;\n\n margin: 0;\n padding: 0;\n\n & li {\n margin-bottom: 0;\n margin-right: $padding;\n\n @media screen and (min-width: 760px) {\n line-height: $footer-btn-size;\n }\n }\n\n & a {\n color: inherit;\n text-decoration: none;\n white-space: nowrap;\n }\n}\n\n.mdl-mini-footer--left-section,\n.mdl-mini-footer__left-section {\n display: inline-block;\n order: 0;\n}\n\n.mdl-mini-footer--right-section,\n.mdl-mini-footer__right-section {\n display: inline-block;\n order: 1;\n}\n\n.mdl-mini-footer--social-btn,\n.mdl-mini-footer__social-btn {\n width: $footer-btn-size;\n height: $footer-btn-size;\n\n padding: 0;\n margin: 0;\n\n background-color: $footer-button-fill-color;\n\n border: none;\n}\n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@import \"../variables\";\n\n.mdl-card {\n display: flex;\n flex-direction: column;\n font-size: $card-font-size;\n font-weight: 400;\n min-height: $card-height;\n overflow: hidden;\n width: $card-width;\n z-index: $card-z-index;\n position: relative;\n background: $card-background-color;\n border-radius: 2px;\n box-sizing: border-box;\n}\n\n.mdl-card__media {\n background-color: $card-image-placeholder-color;\n background-repeat: repeat;\n background-position: 50% 50%;\n background-size: cover;\n background-origin: padding-box;\n background-attachment: scroll;\n box-sizing: border-box;\n}\n\n.mdl-card__title {\n align-items: center;\n color: $card-text-color;\n display: block;\n display: flex;\n justify-content: stretch;\n line-height: normal;\n padding: $card-vertical-padding $card-horizontal-padding;\n perspective-origin: $card-title-perspective-origin-x $card-title-perspective-origin-y;\n transform-origin: $card-title-transform-origin-x $card-title-transform-origin-y;\n box-sizing: border-box;\n\n &.mdl-card--border {\n border-bottom: 1px solid $card-border-color;\n }\n}\n\n.mdl-card__title-text {\n align-self: flex-end;\n color: inherit;\n display: block;\n display: flex;\n font-size: $card-title-font-size;\n font-weight: $card-title-text-font-weight;\n line-height: normal;\n overflow: hidden;\n transform-origin: $card-title-text-transform-origin-x $card-title-text-transform-origin-y;\n margin: 0;\n}\n\n.mdl-card__subtitle-text {\n font-size: $card-subtitle-font-size;\n color: $card-subtitle-color;\n margin: 0;\n}\n\n.mdl-card__supporting-text {\n color: $card-supporting-text-text-color;\n font-size: $card-supporting-text-font-size;\n line-height: $card-supporting-text-line-height;\n overflow: hidden;\n padding: $card-vertical-padding $card-horizontal-padding;\n width: 90%;\n\n &.mdl-card--border {\n border-bottom: 1px solid $card-border-color;\n }\n}\n\n.mdl-card__actions {\n font-size: $card-actions-font-size;\n line-height: normal;\n width: 100%;\n background-color: rgba(0,0,0,0);\n padding: 8px;\n box-sizing: border-box;\n\n &.mdl-card--border {\n border-top: 1px solid $card-border-color;\n }\n}\n\n.mdl-card--expand {\n flex-grow: 1;\n}\n\n\n.mdl-card__menu {\n position: absolute;\n right: 16px;\n top: 16px;\n}\n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@import \"../variables\";\n@import \"../mixins\";\n\n// The button component. Defaults to a flat button.\n.mdl-button {\n background: transparent;\n border: none;\n border-radius: $button-border-radius;\n color: $button-secondary-color;\n position: relative;\n height: $button-height;\n margin: 0;\n min-width: $button-min-width;\n padding: 0 $button-padding;\n display: inline-block;\n @include typo-button();\n overflow: hidden;\n will-change: box-shadow;\n transition: box-shadow 0.2s $animation-curve-fast-out-linear-in,\n background-color 0.2s $animation-curve-default,\n color 0.2s $animation-curve-default;\n outline: none;\n cursor: pointer;\n text-decoration: none;\n text-align: center;\n line-height: $button-height;\n vertical-align: middle;\n\n &::-moz-focus-inner {\n border: 0;\n }\n\n &:hover {\n background-color: $button-hover-color;\n }\n\n &:focus:not(:active) {\n background-color: $button-focus-color;\n }\n\n &:active {\n background-color: $button-active-color;\n }\n\n &.mdl-button--colored {\n color: $button-primary-color-alt;\n\n &:focus:not(:active) {\n background-color: $button-focus-color-alt;\n }\n }\n}\n\ninput.mdl-button[type=\"submit\"] {\n -webkit-appearance:none;\n}\n\n // Raised buttons\n .mdl-button--raised {\n background: $button-primary-color;\n @include shadow-2dp();\n\n &:active {\n @include shadow-4dp();\n background-color: $button-active-color;\n }\n\n &:focus:not(:active) {\n @include focus-shadow();\n background-color: $button-active-color;\n }\n\n &.mdl-button--colored {\n background: $button-primary-color-alt;\n color: $button-secondary-color-alt;\n\n &:hover {\n background-color: $button-hover-color-alt;\n }\n\n &:active {\n background-color: $button-active-color-alt;\n }\n\n &:focus:not(:active) {\n background-color: $button-active-color-alt;\n }\n\n & .mdl-ripple {\n background: $button-ripple-color-alt;\n }\n }\n }\n\n\n // FABs\n .mdl-button--fab {\n border-radius: 50%;\n font-size: $button-fab-font-size;\n height: $button-fab-size;\n margin: auto;\n min-width: $button-fab-size;\n width: $button-fab-size;\n padding: 0;\n overflow: hidden;\n background: $button-primary-color;\n box-shadow: 0 1px 1.5px 0 rgba(0,0,0,0.12), 0 1px 1px 0 rgba(0,0,0,0.24);\n position: relative;\n line-height: normal;\n\n & .material-icons {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(- $button-fab-font-size / 2, - $button-fab-font-size / 2);\n line-height: $button-fab-font-size;\n width: $button-fab-font-size;\n }\n\n &.mdl-button--mini-fab {\n height: $button-fab-size-mini;\n min-width: $button-fab-size-mini;\n width: $button-fab-size-mini;\n }\n\n & .mdl-button__ripple-container {\n border-radius: 50%;\n // Fixes clipping bug in Safari.\n -webkit-mask-image: -webkit-radial-gradient(circle, white, black);\n }\n\n &:active {\n @include shadow-4dp();\n background-color: $button-active-color;\n }\n\n &:focus:not(:active) {\n @include focus-shadow();\n background-color: $button-active-color;\n }\n\n &.mdl-button--colored {\n background: $button-fab-color-alt;\n color: $button-fab-text-color-alt;\n\n &:hover {\n background-color: $button-fab-hover-color-alt;\n }\n\n &:focus:not(:active) {\n background-color: $button-fab-active-color-alt;\n }\n\n &:active {\n background-color: $button-fab-active-color-alt;\n }\n\n & .mdl-ripple {\n background: $button-fab-ripple-color-alt;\n }\n }\n }\n\n\n // Icon buttons\n .mdl-button--icon {\n border-radius: 50%;\n font-size: $button-fab-font-size;\n height: $button-icon-size;\n margin-left: 0;\n margin-right: 0;\n min-width: $button-icon-size;\n width: $button-icon-size;\n padding: 0;\n overflow: hidden;\n color: inherit;\n line-height: normal;\n\n & .material-icons {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(- $button-fab-font-size / 2, - $button-fab-font-size / 2);\n line-height: $button-fab-font-size;\n width: $button-fab-font-size;\n }\n\n &.mdl-button--mini-icon {\n height: $button-icon-size-mini;\n min-width: $button-icon-size-mini;\n width: $button-icon-size-mini;\n\n & .material-icons {\n top: ($button-icon-size-mini - $button-fab-font-size) / 2;\n left: ($button-icon-size-mini - $button-fab-font-size) / 2;\n }\n }\n\n & .mdl-button__ripple-container {\n border-radius: 50%;\n // Fixes clipping bug in Safari.\n -webkit-mask-image: -webkit-radial-gradient(circle, white, black);\n }\n }\n\n\n // Ripples\n .mdl-button__ripple-container {\n display: block;\n height: 100%;\n left: 0px;\n position: absolute;\n top: 0px;\n width: 100%;\n z-index: 0;\n overflow: hidden;\n\n .mdl-button[disabled] & .mdl-ripple,\n .mdl-button.mdl-button--disabled & .mdl-ripple {\n background-color: transparent;\n }\n }\n\n// Colorized buttons\n\n.mdl-button--primary.mdl-button--primary {\n color: $button-primary-color-alt;\n & .mdl-ripple {\n background: $button-secondary-color-alt;\n }\n &.mdl-button--raised, &.mdl-button--fab {\n color: $button-secondary-color-alt;\n background-color: $button-primary-color-alt;\n }\n}\n\n.mdl-button--accent.mdl-button--accent {\n color: $button-fab-color-alt;\n & .mdl-ripple {\n background: $button-fab-text-color-alt;\n }\n &.mdl-button--raised, &.mdl-button--fab {\n color: $button-fab-text-color-alt;\n background-color: $button-fab-color-alt;\n }\n}\n\n// Disabled buttons\n\n.mdl-button {\n // Bump up specificity by using [disabled] twice.\n &[disabled][disabled],\n &.mdl-button--disabled.mdl-button--disabled {\n color: $button-secondary-color-disabled;\n cursor: default;\n background-color: transparent;\n }\n\n &--fab {\n // Bump up specificity by using [disabled] twice.\n &[disabled][disabled],\n &.mdl-button--disabled.mdl-button--disabled {\n background-color: $button-primary-color-disabled;\n color: $button-secondary-color-disabled;\n }\n }\n\n &--raised {\n // Bump up specificity by using [disabled] twice.\n &[disabled][disabled],\n &.mdl-button--disabled.mdl-button--disabled {\n background-color: $button-primary-color-disabled;\n color: $button-secondary-color-disabled;\n box-shadow: none;\n }\n }\n &--colored {\n // Bump up specificity by using [disabled] twice.\n &[disabled][disabled],\n &.mdl-button--disabled.mdl-button--disabled {\n color: $button-secondary-color-disabled;\n }\n }\n}\n\n// Align icons inside buttons with text\n.mdl-button .material-icons {\n vertical-align: middle;\n}\n","// SIMPLE GRID - SASS/SCSS\n\n\n// fonts\n$font-weight-light: 300;\n$font-weight-regular: 400;\n$font-weight-heavy: 700;\n\n// colors\n$dark-grey: #333447;\n$dark-gray: #333447; // for the Americans\n\n\n.font-light {\n font-weight: $font-weight-light;\n}\n\n.font-regular {\n font-weight: $font-weight-regular;\n}\n\n.font-heavy {\n font-weight: $font-weight-heavy;\n}\n\n// utility\n\n.left {\n text-align: left;\n}\n\n.right {\n text-align: right;\n}\n\n.center {\n text-align: center;\n margin-left: auto;\n margin-right: auto;\n}\n\n.justify {\n text-align: justify;\n}\n\n.hidden-sm {\n display: none;\n}\n\n// grid\n\n$width: 98%;\n$gutter: 2%;\n$breakpoint-small: 33.75em; // 540px\n$breakpoint-med: 45em; // 720px\n$breakpoint-large: 60em; // 960px\n\n.container {\n width: 100%;\n margin-left: auto;\n margin-right: auto;\n}\n\n.row {\n position: relative;\n width: 100%;\n}\n\n.row [class^=\"col\"] {\n float: left;\n margin: 0.5rem 1%;\n min-height: 0.125rem;\n}\n\n.row::after {\n content: \"\";\n display: table;\n clear: both;\n}\n\n.col-1,\n.col-2,\n.col-3,\n.col-4,\n.col-5,\n.col-6,\n.col-7,\n.col-8,\n.col-9,\n.col-10,\n.col-11,\n.col-12 {\n width: $width;\n}\n\n.col-1-sm {\n width: ($width / 12) - ($gutter * 11 / 12);\n}\n\n.col-2-sm {\n width: ($width / 6) - ($gutter * 10 / 12);\n}\n\n.col-3-sm {\n width: ($width / 4) - ($gutter * 9 / 12);\n}\n\n.col-4-sm {\n width: ($width / 3) - ($gutter * 8 / 12);\n}\n\n.col-5-sm {\n width: ($width / (12 / 5)) - ($gutter * 7 / 12);\n}\n\n.col-6-sm {\n width: ($width / 2) - ($gutter * 6 / 12);\n}\n\n.col-7-sm {\n width: ($width / (12 / 7)) - ($gutter * 5 / 12);\n}\n\n.col-8-sm {\n width: ($width / (12 / 8)) - ($gutter * 4 / 12);\n}\n\n.col-9-sm {\n width: ($width / (12 / 9)) - ($gutter * 3 / 12);\n}\n\n.col-10-sm {\n width: ($width / (12 / 10)) - ($gutter * 2 / 12);\n}\n\n.col-11-sm {\n width: ($width / (12 / 11)) - ($gutter * 1 / 12);\n}\n\n.col-12-sm {\n width: $width;\n}\n\n@media only screen and (min-width: $breakpoint-med) {\n .col-1 {\n width: ($width / 12) - ($gutter * 11 / 12);\n }\n .col-2 {\n width: ($width / 6) - ($gutter * 10 / 12);\n }\n .col-3 {\n width: ($width / 4) - ($gutter * 9 / 12);\n }\n .col-4 {\n width: ($width / 3) - ($gutter * 8 / 12);\n }\n .col-5 {\n width: ($width / (12 / 5)) - ($gutter * 7 / 12);\n }\n .col-6 {\n width: ($width / 2) - ($gutter * 6 / 12);\n }\n .col-7 {\n width: ($width / (12 / 7)) - ($gutter * 5 / 12);\n }\n .col-8 {\n width: ($width / (12 / 8)) - ($gutter * 4 / 12);\n }\n .col-9 {\n width: ($width / (12 / 9)) - ($gutter * 3 / 12);\n }\n .col-10 {\n width: ($width / (12 / 10)) - ($gutter * 2 / 12);\n }\n .col-11 {\n width: ($width / (12 / 11)) - ($gutter * 1 / 12);\n }\n .col-12 {\n width: $width;\n }\n\n .hidden-sm {\n display: block;\n }\n}\n\n.row {\n display: -webkit-box;\n display: -webkit-flex;\n display: -ms-flexbox;\n display: flex;\n flex-wrap: wrap;\n}\n\n.row > [class*='col-'] {\n display: flex;\n flex-direction: column;\n}\n","\n/*\nMaterial Icons\n*/\n\n.material-icons {\n font-family: 'Material Icons';\n font-weight: normal;\n font-style: normal;\n font-size: 24px; /* Preferred icon size */\n display: inline-block;\n line-height: 1;\n text-transform: none;\n letter-spacing: normal;\n word-wrap: normal;\n white-space: nowrap;\n direction: ltr;\n \n /* Support for all WebKit browsers. */\n -webkit-font-smoothing: antialiased;\n /* Support for Safari and Chrome. */\n text-rendering: optimizeLegibility;\n \n /* Support for Firefox. */\n -moz-osx-font-smoothing: grayscale;\n \n /* Support for IE. */\n font-feature-settings: 'liga';\n }","html {\n font-size: $font_size;\n}\n\nbody {\n display: block !important;\n background-color: $background_color;\n font-size: 1rem;\n line-height: 1.5rem;\n font-family: $body_font_family;\n}\n\n.mdl-layout__content:focus {\n outline: none;\n }\n\n.mdl-layout__content header.mdl-layout__drawer {\n display: none;\n}\n\n.mdl-layout__container {\n height: calc(100% - 76px);\n margin-top: 76px;\n}\n.mdl-layout__header {\n position: fixed;\n transition: transform 0.5s;\n}\n.mdl-layout--fixed-drawer>.mdl-layout__content {\n margin-left: 300px; \n}\n\n@media screen and (max-width: 1024px) {\n .mdl-layout--fixed-drawer>.mdl-layout__content {\n margin-left:0\n }\n}\n\nh1, h2, h3, h4, h5, h6, blockquote, span.mdl-layout-title,\na.download > code.download {\n font-family: $body_font_family;\n}\n\nh1, h2, h3, h4, h5, h6, .toc-backref, .contents, .toctree-wrapper, .contents a, .toctree-wrapper a, .globaltoc a.current {\n color: $color-mxnet !important;\n}\n\na {\n text-decoration: none;\n}\n\n.page-content {\n font-size: 1rem;\n p, ul, ol, dl, dd, dt, table, th, td {\n font-size: 1rem;\n }\n}\n\n.brand {\n color: inherit;\n text-decoration: none;\n}\n\n.section {\n overflow-x: auto;\n}\n\n\n/*\n * Figure Directive Styles\n */\n img {\n max-width: 100%;\n display: block;\n margin-left: auto;\n margin-right: auto;\n }\n\ndiv.figure {\n p.caption {\n text-align: center;\n margin-top: .75rem;\n\n span.caption-number {\n font-style: normal;\n }\n .caption-number::after {\n content: \"\\00a0\";\n }\n }\n}\n\n.svg-icon {\n width: 16px;\n height: 16px;\n display: inline-block;\n fill: $grey-color-light;\n padding-right: 5px;\n padding-top: 4px;\n vertical-align: text-top;\n}\n\n/*\n * Download Link Styles\n */\na.download > i.material-icons {\n position: relative;\n top: 5px;\n}\n\na.download {\n text-decoration: none;\n}\n\n%clearfix:after {\n content: \"\";\n display: table;\n clear: both;\n}\n\n.wrapper {\n max-width: -webkit-calc(#{$content-width} - (#{$spacing-unit} * 2));\n max-width: calc(#{$content-width} - (#{$spacing-unit} * 2));\n margin-right: auto;\n margin-left: auto;\n padding-right: calc(#{$spacing-unit}+15px);\n padding-left: $spacing-unit;\n @extend %clearfix;\n\n @media screen and (max-width: $on-laptop) {\n max-width: -webkit-calc(#{$content-width} - (#{$spacing-unit}));\n max-width: calc(#{$content-width} - (#{$spacing-unit}));\n padding-right: $spacing-unit / 2;\n padding-left: $spacing-unit / 2;\n }\n}\n\n","/*\nVariables\n*/\n$font_size: 16px;\n\n$background_color: #fafafa;\n$code_background: rgba(0,0,0,.05);\n\n$code_font_family: \"Menlo\", \"DejaVu Sans Mono\", \"Liberation Mono\", \"Consolas\", \"Ubuntu Mono\", \"Courier New\", \"andale mono\", \"lucida console\", monospace !default;\n$body_font_family: -apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\" !default;\n$base-font-size: 17px !default;\n\n$xl-breakpoint: 1795px;\n$lg-breakpoint: 1200px;\n$md-breakpoint: 992px;\n$sm-breakpoint: 768px;\n$xs-breakpoint: 576px;\n\n$color-primary: $palette-blue-500;\n$color-primary-dark: $palette-blue-700 !default;\n$color-accent: $palette-deep-orange-A200 !default;\n$color-primary-contrast: $color-white !default;\n$color-accent-contrast: $color-white !default;\n\n\n$base-line-height: 1.5 !default;\n$spacing-unit: 30px !default;\n\n$color-mxnet: rgb(4,140,204);\n$color-mxnet-dark: rgb(4,60,110);\n$grey-color: #828282 !default;\n$grey-color-light: lighten($grey-color, 45%) !default;\n$grey-color-dark: darken($grey-color, 25%) !default;\n\n$table-text-align: left !default;\n\n// Width of the content area\n$content-width: 1150px !default;\n\n$on-palm: 600px !default;\n$on-palm: 900px !default;\n$on-laptop: 1024px !default;","/**\n * Layout Styles\n */\n $layout: (\n document: (\n xl: (\n width: 100%,\n )\n ),\n drawer-container: (\n width: $layout-drawer-width,\n ),\n side-doc-outline: (\n width: 230px,\n ),\n page-content: (\n md: (\n width: 90%,\n padding: 0 5%\n ),\n lg: (\n width: calc( 90% - 230px ),\n padding: 0 5%\n )\n )\n);\n\n.document {\n width: 100%;\n margin: 84px auto;\n display: flex;\n\n @media (min-width: $xl-breakpoint) {\n width: map-get(map-get(map-get($layout, document), xl), width);\n }\n .page-content {\n width: 100%;\n margin: 0 auto;\n padding: 0 12px;\n\n @media (min-width: $md-breakpoint) {\n width: map-get(map-get(map-get($layout, page-content), md), width);\n padding: map-get(map-get(map-get($layout, page-content), md), padding);\n }\n\n @media (min-width: $lg-breakpoint) {\n width: map-get(map-get(map-get($layout, page-content), lg), width);\n padding: map-get(map-get(map-get($layout, page-content), lg), padding);\n }\n }\n\n .side-doc-outline {\n width: map-get(map-get($layout, side-doc-outline), width);\n\n @media (max-width: $lg-breakpoint - 1) {\n display: none;\n } \n &--content {\n position: fixed;\n overflow-x: auto;\n overflow-y: auto;\n width: inherit;\n right: 0px;\n &::-webkit-scrollbar {\n width: 6px;\n }\n \n &::-webkit-scrollbar-track {\n border-radius: 6px;\n }\n \n &::-webkit-scrollbar-thumb {\n background-color: rgba(0, 0, 0, .3);\n border-radius: 6px;\n box-shadow:0 0 0 1px rgba(255, 255, 255, .3);\n }\n }\n }\n\n}","@keyframes float-in {\n 0% {\n transform: translateY(0.5rem);\n opacity: 0;\n }\n\t100% {\n\t\ttransform: translateY(0);\n\t\topacity: 1;\n\t}\n}\n\n@keyframes float-out {\n 0% {\n transform: translateY(0);\n opacity: 1;\n }\n\t100% {\n\t\ttransform: translateY(0.5rem);\n\t\topacity: 0;\n\t}\n}\n\n.page-content {\n .headerlink {\n display: inline-block;\n text-decoration: none;\n margin-left: 0.8rem;\n color: inherit;\n opacity: 0;\n &:hover {\n animation: float-in 0.2s $animation-curve-fast-out-slow-in 0s forwards;\n }\n }\n\n h1, h2, h3, h4, h5, h6 {\n .toc-backref {\n text-decoration: none;\n }\n &:hover {\n .headerlink {\n animation: float-in 0.2s $animation-curve-fast-out-slow-in 0s forwards;\n }\n }\n }\n\n h1 {\n font-size: 2rem;\n line-height: 2.25rem;\n }\n\n h2 {\n font-size: 1.75rem;\n line-height: 2rem;\n padding-top: 1.5rem;\n margin-top: 0;\n margin-bottom: 1rem;\n }\n\n h3 {\n font-size: 1.5rem;\n line-height: 1.75rem;\n padding-top: 1rem;\n margin-top: 0px;\n margin-bottom: .75rem;\n }\n\n h4 {\n font-size: 1.25rem;\n line-height: 1.5rem;\n padding-top: .75rem;\n margin-top: 0px;\n margin-bottom: .5rem;\n }\n\n div.page-content h5 {\n font-size: 1.1rem;\n line-height: 1.5rem;\n padding-top: 2rem;\n margin-top: 0px;\n margin-bottom: 1rem;\n }\n\n div.page-content h6 {\n font-size: 1rem;\n line-height: 1.5rem;\n padding-top: 2rem;\n margin-top: 0px;\n margin-bottom: 1rem;\n }\n\n\n}\n","\n/*\n * Admonition Styles\n */\n $admonitions: (\n hint: (\n font-color: rgb(0, 188, 212),\n background-color: rgba(0, 188, 212, 0.1),\n icon-content: \"help_outline\"\n ),\n note: (\n font-color: rgb(0, 188, 212),\n background-color: rgba(0, 188, 212, 0.1),\n icon-content: \"info_outline\"\n ),\n seealso: (\n font-color: rgb(0, 188, 212),\n background-color: rgba(0, 188, 212, 0.1),\n icon-content: \"search\"\n ),\n warning: (\n font-color: rgb(255, 193, 7),\n background-color: rgba(255, 193, 7, 0.1),\n icon-content: \"warning\"\n ),\n attention: (\n font-color: rgb(255, 193, 7),\n background-color: rgba(255, 193, 7, 0.1),\n icon-content: \"warning\"\n ),\n tip: (\n font-color: rgb(139, 195, 74),\n background-color: rgba(139, 195, 74, 0.1),\n icon-content: \"lightbulb_outline\"\n ),\n important: (\n font-color: rgb(139, 195, 74),\n background-color: rgba(139, 195, 74, 0.1),\n icon-content: \"check_circle\"\n ),\n error: (\n font-color: rgb(244, 67, 54),\n background-color: rgba(244, 67, 54, 0.1),\n icon-content: \"error_outline\"\n ),\n caution: (\n font-color: rgb(244, 67, 54),\n background-color: rgba(244, 67, 54, 0.1),\n icon-content: \"error_outline\"\n ),\n danger: (\n font-color: rgb(244, 67, 54),\n background-color: rgba(244, 67, 54, 0.1),\n icon-content: \"error_outline\"\n )\n);\n\n @mixin admonition-style($type) {\n border-left: solid 4px map-get(map-get($admonitions, $type), font-color);\n background-color: map-get(map-get($admonitions, $type), background-color);\n .admonition-title {\n font-size: 16px;\n font-weight: bold;\n color: map-get(map-get($admonitions, $type), font-color);\n\n margin-top: 4px;\n margin-bottom: 8px;\n &::before {\n @extend .material-icons;\n position: relative;\n margin-right: 5px;\n top: 3px;\n content: map-get(map-get($admonitions, $type), icon-content);\n font-size: 18px;\n }\n }\n}\n\n.admonition {\n @extend .mdl-shadow--2dp;\n\n padding: 12px 20px;\n margin-top: 10px;\n margin-bottom: 10px;\n p.last {\n margin: 16px;\n }\n .admonition-title {\n font-size: 16px;\n font-weight: bold;\n color: #555;\n text-transform: uppercase;\n margin-top: 7px;\n }\n\n @each $type in (note, seealso, hint, warning, attention, tip, important, error, caution, danger) {\n &.#{$type} {\n @include admonition-style($type);\n }\n }\n}\n",".page-content {\n .highlight {\n margin: 1px 0;\n pre {\n background: $code_background;\n color: rgba(0,0,0,.87);\n font-family: $code_font_family;\n padding: 0.75rem;\n overflow: auto;\n overflow-y: hidden;\n .o, .nd {\n color: rgba(0,0,0,.87);\n }\n }\n }\n\n div.highlight-console div.highlight {\n background: none;\n }\n\n // for jupyter notebook output cell\n .output {\n .highlight {\n pre {\n color: rgba(0,0,0,.87);\n background: $background_color;\n border-width: 1px;\n border-color: #999;\n border-style: solid;\n padding: 0.75rem;\n }\n }\n }\n\n .code, code:not(.download) {\n margin: 0 0;\n font-family: $code_font_family;\n border-radius: 2px;\n span.pre {\n font-family: $code_font_family;\n }\n }\n\n .viewcode-link {\n padding-left: 2em;\n font-size: 80%;\n }\n\n .rubric, .method > dt, .function > dt, .class > dt {\n display: table;\n margin: 10px 0;\n font-size: 100%;\n line-height: normal;\n background: #e7f2fa;\n color: #2B98F0;\n border-top: solid 3px #55ADF3;\n padding: 10px;\n position: relative;\n .descname, .descclassname {\n color: rgba(0,0,0,.87);\n background: #e7f2fa;\n padding: 3px;\n }\n em {\n padding: 0 2px;\n }\n }\n\n\n .rubric {\n margin: 30px 0 10px 0;\n }\n\n\n .field-body {\n padding-left: 40px;\n ul {\n padding: 0 0 0 16px;\n margin: 0;\n }\n }\n\n // .docutils > dt {\n // padding: 6px;\n // display: table;\n // margin-bottom: 6px;\n // border: none;\n // border-left: solid 3px #ccc;\n // background: #f0f0f0;\n // color: #555;\n // }\n\n .seealso .docutils > dt {\n float: left;\n clear: left;\n padding: 0 6px;\n }\n\n .seealso .docutils > dd {\n padding-left: 6em;\n }\n .nblast {\n padding-bottom: 1em;\n }\n\n pre {\n font-size: 90%;\n background: #eee;\n color: #455A64;\n padding: 16px 32px;\n width: auto;\n border-radius: 4px;\n word-wrap: break-word;\n\n &:hover {\n @extend .mdl-shadow--2dp;\n\n &:before {\n font-family: $body_font_family;\n padding: 0 0.5rem;\n content: attr(click-to-copy);\n color: rgba(0, 0, 0, 0.5);\n border-radius: 4px;\n position: relative;\n float: right;\n top: -0.5rem;\n right: -0.5rem;\n background: rgb(200, 200, 200);\n font-size: 0.8rem;\n cursor: pointer;\n }\n }\n }\n}\n","/*\n * Quotation Block Styles\n */\n .page-content {\n blockquote {\n font-size: 1rem;\n padding: 0 1rem;\n border-left: 3px solid $code_background;\n\n &:after {\n content: \"\" !important;\n margin-left: 0;\n }\n &:before {\n content: \"\" !important;\n }\n }\n }\n",".page-content {\n table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) {\n @extend .mdl-data-table;\n @extend .mdl-shadow--2dp;\n\n margin: 1.5rem 0;\n table-layout: fixed;\n max-width: 100%;\n min-width: 70%;\n\n th, td {\n @extend .mdl-data-table__cell--non-numeric;\n white-space: normal;\n overflow-wrap: break-word;\n }\n\n caption {\n font-size: $font_size;\n margin: 1rem 0 0.8rem 0;\n white-space: normal;\n .caption-number {\n font-style: normal;\n }\n .caption-number::after {\n content: \"\\00a0\";\n }\n }\n\n }\n}\n",".globaltoc {\n \n .caption, .toc {\n display: none;\n }\n\n ul {\n\n list-style-type: none;\n padding: 0;\n margin: 0;\n\n li {\n min-height: 18px;\n .link-wrapper {\n display: flex;\n justify-content: space-between;\n > a {\n padding: 4px 0;\n display: block;\n width: 100%;\n font-size: 1rem;\n text-decoration: none;\n color: $layout-drawer-navigation-color;\n &.current {\n font-weight: bold;\n }\n }\n }\n }\n }\n\n .nav-toggle {\n padding: 0;\n float: right;\n display: flex;\n align-items: center;\n justify-content: center;\n height: 36px;\n > a {\n padding: 0;\n margin-left: 0;\n margin-right: 4px;\n cursor: pointer;\n > i {\n font-size: 18px;\n }\n }\n &.show {\n transform: rotateZ(180deg);\n > a {\n margin-right: 0;\n margin-left: 4px;\n }\n }\n }\n\n nav {\n > ul > li > span.link-wrapper {\n padding-left: 8px;\n }\n > ul > li > ul > li > span.link-wrapper {\n padding-left: 16px;\n }\n > ul > li > ul > li > ul > li > span.link-wrapper {\n padding-left: 24px;\n }\n > ul > li > ul > li > ul > li > ul> li > span.link-wrapper {\n padding-left: 32px;\n }\n > ul > li > ul > li > ul > li > ul > li > ul> li > span.link-wrapper {\n padding-left: 40px;\n }\n > ul > li > ul > li > ul > li > ul > li > ul > li > ul> li > span.link-wrapper {\n padding-left: 48px;\n }\n }\n}\n",".localtoc {\n font-size: 0.75rem;\n padding-top: 1rem;\n\n .caption {\n padding-left: 12px;\n &-text {\n font-size: 0.9rem;\n font-weight: 700;\n }\n }\n\n > ul > li > a {\n display: none;\n }\n\n ul {\n padding: 0;\n list-style-type: none;\n }\n\n li {\n padding-left: 6px;\n }\n\n a {\n display: block;\n text-decoration: none;\n color: inherit;\n margin-top: 8px;\n padding-left: 8px;\n line-height: 1.1rem;\n \n &.current {\n padding-left: 5px;\n border-left: 3px solid;\n font-weight: bold;\n }\n }\n}","/*\r\n * Toctree and Contents Directive Styles\r\n */\r\n .toctree-wrapper,\r\n .contents.topic {\r\n border-left: 5px solid;\r\n }\r\n\r\n .toctree-wrapper > p.caption,\r\n .contents.topic > p.topic-title {\r\n color: rgb(117, 117, 117);\r\n font-size: 1rem;\r\n padding-left: 14px;\r\n }\r\n\r\n .toctree-wrapper ul,\r\n .contents.topic ul{\r\n padding-left: 14px;\r\n list-style: none;\r\n line-height: 30px;\r\n }\r\n\r\n .toctree-wrapper a,\r\n .contents.topic a {\r\n font-size: 1.2rem;\r\n text-decoration: none;\r\n .pre {\r\n font-size: 1rem;\r\n }\r\n }\r\n\r\n .toctree-wrapper > ul > li > a,\r\n .contents.topic > ul > li > a {\r\n font-size: 1.3rem;\r\n .pre {\r\n font-size: 1.1rem;\r\n }\r\n }\r\n",".page-content {\n ul {\n li {\n margin: .3rem 0;\n p {\n margin: 0;\n }\n }\n }\n .option-list {\n .option {\n font-family: $code_font_family;\n }\n td {\n padding: 0.5rem;\n border: none;\n }\n }\n}\n","/*\r\n * Drawer Styles\r\n */\r\n.mdl-layout {\r\n &__drawer {\r\n background-color: #fff;\r\n\r\n &::-webkit-scrollbar {\r\n width: 6px;\r\n }\r\n\r\n &::-webkit-scrollbar-track {\r\n border-radius: 6px;\r\n }\r\n\r\n &::-webkit-scrollbar-thumb {\r\n background-color: rgba(0, 0, 0, .3);\r\n border-radius: 6px;\r\n box-shadow:0 0 0 1px rgba(255, 255, 255, .3);\r\n }\r\n\r\n > .mdl-layout-title {\r\n font-weight: bold;\r\n text-align: right;\r\n margin: 0;\r\n padding: 0;\r\n line-height: 32px;\r\n border-bottom: 1px solid rgba(0,0,0,.1);\r\n min-height: 64px;\r\n .title {\r\n color: inherit;\r\n display: block;\r\n height: 100%;\r\n width: 100%;\r\n text-decoration: none;\r\n > img.logo {\r\n width: 100%;\r\n margin: 0;\r\n padding: 0;\r\n }\r\n\r\n &-text {\r\n font-weight: bold;\r\n text-align: right;\r\n padding: 0 10px;\r\n margin: 16px 0 8px 0;\r\n line-height: 32px;\r\n font-family: $body_font_family;\r\n color: inherit;\r\n display: block;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","/*\r\n * Header Styles\r\n */\r\n\r\nnav.breadcrumb {\r\n > a.mdl-navigation__link {\r\n padding: 0 8px;\r\n font-size: 18px;\r\n }\r\n @media (max-width: $lg-breakpoint - 1) {\r\n width: calc( 100% - 64px );\r\n a.mdl-navigation__link.is-active {\r\n overflow-x: hidden;\r\n width: 100%;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n text-overflow: ellipsis;\r\n }\r\n a.mdl-navigation__link:not(.is-active),\r\n i.material-icons {\r\n display: none;\r\n }\r\n }\r\n}\r\n\r\ndiv.mdl-layout__header {\r\n margin-top: 77px;\r\n}\r\n\r\n.mdl-layout__drawer-button {\r\n top: 13px !important;\r\n}\r\n\r\ndiv.mdl-layout__header-row.header-links {\r\n background: rgba(255,255,255,0.2);\r\n width: 100%;\r\n overflow-x: auto;\r\n overflow-y: hidden;\r\n\r\n a.mdl-navigation__link {\r\n font-size: 1rem;\r\n i {\r\n font-size: 1.2rem;\r\n margin: 0 8px;\r\n position: relative;\r\n bottom: -0.1rem;\r\n }\r\n };\r\n\r\n a.mdl-navigation__link:hover {\r\n background-color: unquote(\"rgb(#{$color-primary})\");\r\n color: #eeeeee;\r\n };\r\n a.mdl-navigation__link[href=\"#\"] {\r\n background-color: unquote(\"rgb(#{$color-primary})\");\r\n opacity: 1;\r\n color: #ffffff;\r\n };\r\n}\r\n\r\n/* mxnet-header */\r\n\r\n\r\n.site-title {\r\n font-weight: 300 !important;\r\n line-height: 57px;\r\n letter-spacing: -1px;\r\n margin-bottom: 0;\r\n float: left;\r\n color: white;\r\n\r\n &,\r\n &:visited {\r\n color: $grey-color-dark;\r\n }\r\n}\r\n\r\n\r\n.site-header {\r\n position: fixed;\r\n top: 0;\r\n width: 100%;\r\n min-height: 55px;\r\n padding-top: 10px;\r\n padding-bottom: 10px;\r\n background-color: $color-mxnet;\r\n z-index: 10;\r\n font-weight: 300;\r\n font-size: 17px;\r\n border-bottom: 1px solid white;\r\n}\r\n\r\n.site-header-logo {\r\n width: 120px;\r\n display: initial;\r\n}\r\n\r\n.site-nav {\r\n float: right;\r\n line-height: 57px;\r\n\r\n .nav-trigger {\r\n display: none;\r\n }\r\n\r\n .menu-icon {\r\n display: none;\r\n }\r\n\r\n .page-link {\r\n color: white;\r\n line-height: 1.5;\r\n font-weight: 300;\r\n // Gaps between nav items, but not on the last one\r\n &:not(:last-child) {\r\n margin-right: 40px;\r\n }\r\n\r\n &:hover {\r\n color: white;\r\n text-shadow: -0.06ex 0 white, 0.06ex 0 white;\r\n }\r\n }\r\n\r\n .page-link.page-current {\r\n color: white;\r\n text-decoration: underline;\r\n }\r\n\r\n @media screen and (max-width: $on-laptop) {\r\n position: absolute;\r\n top: 9px;\r\n right: 15px;\r\n background-color: rgb(23,141,201);\r\n border-radius: 2px;\r\n text-align: right;\r\n\r\n label[for=\"nav-trigger\"] {\r\n display: block;\r\n float: right;\r\n width: 36px;\r\n height: 36px;\r\n z-index: 2;\r\n cursor: pointer;\r\n }\r\n\r\n .menu-icon {\r\n display: block;\r\n float: right;\r\n width: 36px;\r\n height: 26px;\r\n line-height: 0;\r\n padding-top: 20px;\r\n text-align: center;\r\n\r\n > svg {\r\n fill: white;\r\n }\r\n }\r\n\r\n input ~ .trigger {\r\n clear: both;\r\n display: none;\r\n }\r\n\r\n input:checked ~ .trigger {\r\n display: block;\r\n padding-bottom: 5px;\r\n }\r\n\r\n .page-link {\r\n padding: 5px 10px;\r\n display: block;\r\n\r\n &:not(:last-child) {\r\n margin-right: 0;\r\n }\r\n\r\n margin-left: 20px;\r\n }\r\n }\r\n}","/*\r\n * Footer Styles\r\n */\r\nfooter.mdl-mini-footer {\r\n background-color: #212121;\r\n > div.mdl-mini-footer__left-section {\r\n margin-bottom: 20px;\r\n display: flex;\r\n flex-direction: column;\r\n .mdl-logo {\r\n font-size: 1.1rem;\r\n }\r\n ul {\r\n @extend .mdl-mini-footer__link-list;\r\n }\r\n }\r\n > div.mdl-mini-footer__right-section {\r\n font-size: 0.9rem;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: flex-end;\r\n\r\n a {\r\n color: inherit;\r\n font-weight: bold;\r\n text-decoration: none;\r\n }\r\n }\r\n p.caption {\r\n display: none;\r\n }\r\n}\r\n\r\n/*\r\n * Pagenation Block Styles\r\n */\r\n .pagenation {\r\n width: 100%;\r\n margin-top: 80px;\r\n height: 92px;\r\n background-color: #424242;\r\n display: flex;\r\n\r\n .button-common {\r\n text-transform: none;\r\n padding: 0;\r\n height: 92px;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n color: #ffffff;\r\n }\r\n #button-prev {\r\n @extend .button-common;\r\n margin-right: auto;\r\n .pagenation-text {\r\n text-align: left;\r\n }\r\n \r\n }\r\n #button-next {\r\n @extend .button-common;\r\n margin-left: auto;\r\n flex-direction: row-reverse;\r\n .pagenation-text {\r\n text-align: right;\r\n }\r\n }\r\n\r\n &-arrow {\r\n &-L {\r\n margin-right: 20px;\r\n }\r\n &-R {\r\n margin-left: 20px;\r\n }\r\n }\r\n\r\n &-text {\r\n line-height: 30px;\r\n font-size: 20px;\r\n }\r\n\r\n &-direction {\r\n opacity: 0.7;\r\n font-size: 18px;\r\n }\r\n @media screen and (max-width: 1024px) {\r\n #button-prev {\r\n width: 20%;\r\n }\r\n \r\n #button-next {\r\n width: 80%;\r\n }\r\n \r\n #button-prev .pagenation-text {\r\n display: none;\r\n }\r\n }\r\n @media screen and (min-width: 1025px) {\r\n #button-prev,\r\n #button-next {\r\n width: 50%;\r\n }\r\n \r\n #button-prev .pagenation-text {\r\n display: block;\r\n }\r\n }\r\n}\r\n\r\n\r\n\r\n/**\r\n * Site footer\r\n */\r\n.site-footer {\r\n border-top: 1px solid $grey-color-light;\r\n padding: $spacing-unit 0;\r\n background-color: #424242;\r\n position: relative;\r\n z-index: 10;\r\n .footer-category-title {\r\n color: $color-mxnet;\r\n }\r\n a {\r\n color: $grey-color-light !important;\r\n\r\n &:visited {\r\n color: $grey-color-light !important;\r\n }\r\n }\r\n\r\n}\r\n\r\n.site-footer2 {\r\n background-color: #424242;\r\n padding-top: 40px;\r\n padding-bottom: 10px;\r\n position: relative;\r\n z-index: 10;\r\n}\r\n\r\n.footer-heading {\r\n margin-bottom: $spacing-unit / 2;\r\n}\r\n\r\n.contact-list,\r\n.social-media-list {\r\n list-style: none;\r\n margin-left: 0;\r\n}\r\n\r\n\r\n.footer-bottom-warning {\r\n font-size: 80%;\r\n color: white;\r\n float: left;\r\n}\r\n\r\n.footer-logo {\r\n width: 200px;\r\n margin-bottom: 30px;\r\n margin-top: 30px;\r\n}\r\n\r\n.footer-col {\r\n float: left;\r\n margin-bottom: $spacing-unit / 2;\r\n padding-left: $spacing-unit / 2;\r\n}\r\n\r\n.footer-text {\r\n color: $grey-color-light;\r\n}\r\n\r\n"," /*\r\n * Search Styles\r\n */\r\n#waterfall-exp::-webkit-input-placeholder {\r\n color: #ccc;\r\n}\r\n#waterfall-exp:-ms-input-placeholder {\r\n color: #ccc;\r\n}\r\n#waterfall-exp::-moz-placeholder {\r\n color: #ccc;\r\n}\r\n\r\nul.search span.highlighted {\r\n font-weight: bold;\r\n}\r\n\r\nul.search > li {\r\n margin-bottom: 24px;\r\n}\r\n\r\n#search-results {\r\n ul {\r\n list-style: none;\r\n padding: 0;\r\n li {\r\n > a {\r\n text-decoration: none;\r\n font-size: 1.2rem;\r\n }\r\n }\r\n }\r\n}\r\n","a.download {\n &:before {\n @extend .material-icons;\n content: \"file_download\";\n position: relative;\n top: 5px;\n margin-right: 5px;\n }\n}\n\nbutton.download {\n position: sticky;\n margin-left: 1em;\n}\n",".mdl-card {\n margin: 1em 1.5em 1em 0;\n display: inline-block;\n width: 250px;\n min-height: 140px;\n padding: 18px;\n}\n.mdl-card:hover {\n box-shadow: 0 10px 20px rgba(0,0,0,0.25), 0 6px 6px rgba(0,0,0,0.22);\n color: #000;\n cursor: pointer;\n}\n.mdl-card__title {\n padding: 0 0 1em 0;\n font-size: 18px;\n color: #444;\n}\n\n.mdl-card__supporting-text {\n line-height: 1.5rem;\n padding: 0px;\n width: 100%;\n}\n\n.head-card.mdl-card {\n width: auto;\n display: block;\n max-width: 800px;\n padding: 24px;\n}\n\n.head-card > .mdl-card__title {\n padding-bottom: 0px;\n height: 60px;\n font-weight: 700;\n text-transform: uppercase;\n}\n.head-card > .mdl-card__menu {\n color: #fff;\n}\n.head-card > .mdl-card__actions {\n padding: 0;\n}\n.cards {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n}\n"]} \ No newline at end of file +{"version":3,"sources":["../../node_modules/material-design-lite/src/shadow/_shadow.scss","../../node_modules/material-design-lite/src/_mixins.scss","../../node_modules/material-design-lite/src/data-table/_data-table.scss","../../node_modules/material-design-lite/src/_variables.scss","../../node_modules/material-design-lite/src/footer/_mini_footer.scss","../../node_modules/material-design-lite/src/card/_card.scss","../../node_modules/material-design-lite/src/button/_button.scss","../scss/grid/_simplegrid.scss","../scss/fonts/_material-icons.scss","../scss/_root.scss","../scss/_variables.scss","../scss/layout/_layout.scss","../scss/headerings/_headerings.scss","../scss/admonitions/_admonitions.scss","../scss/code/_code.scss","../scss/blockquote/_blockquote.scss","../scss/tables/_tables.scss","../scss/toc/_globaltoc.scss","../scss/toc/_localtoc.scss","../scss/toc/_toctree.scss","../scss/lists/_lists.scss","../scss/drawer/_drawer.scss","../scss/header/_header.scss","../scss/footer/_footer.scss","../scss/search/_search.scss","../scss/downloadlink/_downloadlink.scss","../scss/card/_card.scss"],"names":[],"mappings":"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","file":"sphinx_materialdesign_theme.css","sourceRoot":"../../src/js","sourcesContent":["/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@import \"../variables\";\n@import \"../mixins\";\n\n.mdl-shadow--2dp {\n @include shadow-2dp();\n}\n\n.mdl-shadow--3dp {\n @include shadow-3dp();\n}\n\n.mdl-shadow--4dp {\n @include shadow-4dp();\n}\n\n.mdl-shadow--6dp {\n @include shadow-6dp();\n}\n\n.mdl-shadow--8dp {\n @include shadow-8dp();\n}\n\n.mdl-shadow--16dp {\n @include shadow-16dp();\n}\n\n.mdl-shadow--24dp {\n @include shadow-24dp();\n}\n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* Typography */\n\n@mixin typo-preferred-font($usePreferred: true) {\n @if $usePreferred {\n font-family: $preferred_font;\n }\n}\n\n@mixin typo-display-4($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 112px;\n font-weight: 300;\n line-height: 1;\n letter-spacing: -0.04em;\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-display-3($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 56px;\n font-weight: 400;\n line-height: 1.35;\n letter-spacing: -0.02em;\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-display-2($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 45px;\n font-weight: 400;\n line-height: 48px;\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-display-1($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 34px;\n font-weight: 400;\n line-height: 40px;\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-headline($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 24px;\n font-weight: 400;\n line-height: 32px;\n -moz-osx-font-smoothing: grayscale;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-title($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 20px;\n font-weight: 500;\n line-height: 1;\n letter-spacing: 0.02em;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-subhead($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 16px;\n font-weight: 400;\n line-height: 24px;\n letter-spacing: 0.04em;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-subhead-2($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 16px;\n font-weight: 400;\n line-height: 28px;\n letter-spacing: 0.04em;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-body-2($colorContrast: false, $usePreferred: false) {\n @include typo-preferred-font($usePreferred);\n font-size: 14px;\n @if $usePreferred {\n font-weight: 500;\n } @else {\n font-weight: bold;\n }\n line-height: 24px;\n letter-spacing: 0;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-body-1($colorContrast: false, $usePreferred: false) {\n @include typo-preferred-font($usePreferred);\n font-size: 14px;\n font-weight: 400;\n line-height: 24px;\n letter-spacing: 0;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-caption($colorContrast: false, $usePreferred: false) {\n @include typo-preferred-font($usePreferred);\n font-size: 12px;\n font-weight: 400;\n line-height: 1;\n letter-spacing: 0;\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-blockquote($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n position: relative;\n font-size: 24px;\n font-weight: 300;\n font-style: italic;\n line-height: 1.35;\n letter-spacing: 0.08em;\n\n &:before {\n position: absolute;\n left: -0.5em;\n content: '“';\n }\n\n &:after {\n content: '”';\n margin-left: -0.05em;\n }\n\n @if $colorContrast {\n opacity: 0.54;\n }\n}\n\n@mixin typo-menu($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 14px;\n font-weight: 500;\n line-height: 1;\n letter-spacing: 0;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-button($colorContrast: false, $usePreferred: true) {\n @include typo-preferred-font($usePreferred);\n font-size: 14px;\n font-weight: 500;\n text-transform: uppercase;\n line-height: 1;\n letter-spacing: 0;\n\n @if $colorContrast {\n opacity: 0.87;\n }\n}\n\n@mixin typo-icon() {\n font-family: 'Material Icons';\n font-weight: normal;\n font-style: normal;\n font-size: 24px;\n line-height: 1;\n letter-spacing: normal;\n text-transform: none;\n display: inline-block;\n word-wrap: normal;\n font-feature-settings: 'liga';\n -webkit-font-feature-settings: 'liga';\n -webkit-font-smoothing: antialiased;\n}\n\n/* Shadows */\n\n// Focus shadow mixin.\n@mixin focus-shadow() {\n box-shadow: 0 0 8px rgba(0,0,0,.18),0 8px 16px rgba(0,0,0,.36);\n}\n\n@mixin shadow-2dp() {\n box-shadow: 0 2px 2px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 3px 1px -2px rgba(0, 0, 0, $shadow-key-umbra-opacity),\n 0 1px 5px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity);\n}\n@mixin shadow-3dp() {\n box-shadow: 0 3px 4px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 3px 3px -2px rgba(0, 0, 0, $shadow-key-umbra-opacity),\n 0 1px 8px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity);\n}\n@mixin shadow-4dp() {\n box-shadow: 0 4px 5px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 1px 10px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n 0 2px 4px -1px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n@mixin shadow-6dp() {\n box-shadow: 0 6px 10px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 1px 18px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n 0 3px 5px -1px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n@mixin shadow-8dp() {\n box-shadow: 0 8px 10px 1px rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 3px 14px 2px rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n 0 5px 5px -3px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n\n@mixin shadow-16dp() {\n box-shadow: 0 16px 24px 2px rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 6px 30px 5px rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n 0 8px 10px -5px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n\n@mixin shadow-24dp() {\n box-shadow: 0 9px 46px 8px rgba(0, 0, 0, $shadow-key-penumbra-opacity),\n 0 11px 15px -7px rgba(0, 0, 0, $shadow-ambient-shadow-opacity),\n 0 24px 38px 3px rgba(0, 0, 0, $shadow-key-umbra-opacity);\n}\n\n/* Animations */\n\n@mixin material-animation-fast-out-slow-in($duration:0.2s) {\n transition-duration: $duration;\n transition-timing-function: $animation-curve-fast-out-slow-in;\n}\n\n@mixin material-animation-linear-out-slow-in($duration:0.2s) {\n transition-duration: $duration;\n transition-timing-function: $animation-curve-linear-out-slow-in;\n}\n\n@mixin material-animation-fast-out-linear-in($duration:0.2s) {\n transition-duration: $duration;\n transition-timing-function: $animation-curve-fast-out-linear-in;\n}\n\n@mixin material-animation-default($duration:0.2s) {\n transition-duration: $duration;\n transition-timing-function: $animation-curve-default;\n}\n\n/* Dialog */\n\n@mixin dialog-width($units:5) {\n @if(type_of($units) != 'number') {\n @error \"The unit given to dialog-width should be a number.\";\n }\n // 56dp is the base unit width for Dialogs.\n // With 5 units being the number of units for a mobile device.\n // https://goo.gl/sK2O5o\n width: $units * 56px;\n}\n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@import \"../variables\";\n@import \"../mixins\";\n\n.mdl-data-table {\n position: relative;\n border: $data-table-dividers;\n border-collapse: collapse;\n white-space: nowrap;\n font-size: $data-table-font-size;\n background-color: unquote(\"rgb(#{$color-white})\");\n\n thead {\n padding-bottom: 3px;\n\n .mdl-data-table__select {\n margin-top: 0;\n }\n }\n\n tbody {\n tr {\n position: relative;\n height: $data-table-row-height;\n @include material-animation-default(0.28s);\n transition-property: background-color;\n\n &.is-selected {\n background-color: $data-table-selection-color;\n }\n\n &:hover {\n background-color: $data-table-hover-color;\n }\n }\n }\n\n td, th {\n padding: 0 $data-table-column-padding 12px $data-table-column-padding;\n text-align: right;\n\n &:first-of-type {\n padding-left: 24px;\n }\n\n &:last-of-type {\n padding-right: 24px;\n }\n }\n\n td {\n position: relative;\n vertical-align: middle;\n height: $data-table-row-height;\n border-top: $data-table-dividers;\n border-bottom: $data-table-dividers;\n padding-top: $data-table-cell-top;\n box-sizing: border-box;\n\n .mdl-data-table__select {\n vertical-align: middle;\n }\n }\n\n th {\n position: relative;\n vertical-align: bottom;\n text-overflow: ellipsis;\n @include typo-body-2();\n height: $data-table-row-height;\n font-size: $data-table-header-font-size;\n color: $data-table-header-color;\n padding-bottom: 8px;\n box-sizing: border-box;\n\n &.mdl-data-table__header--sorted-ascending,\n &.mdl-data-table__header--sorted-descending {\n color: $data-table-header-sorted-color;\n &:before {\n @include typo-icon;\n font-size: $data-table-header-sort-icon-size;\n content: \"\\e5d8\";\n margin-right: 5px;\n vertical-align: sub;\n }\n &:hover {\n cursor: pointer;\n &:before {\n color: $data-table-header-sorted-icon-hover-color;\n }\n }\n }\n &.mdl-data-table__header--sorted-descending:before {\n content: \"\\e5db\";\n }\n }\n}\n\n.mdl-data-table__select {\n width: 16px;\n}\n\n.mdl-data-table__cell--non-numeric.mdl-data-table__cell--non-numeric {\n text-align: left;\n}\n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*------------------------------------*\\\n $CONTENTS\n\\*------------------------------------*/\n/**\n * STYLE GUIDE VARIABLES------------------Declarations of Sass variables\n * -----Typography\n * -----Colors\n * -----Textfield\n * -----Switch\n * -----Spinner\n * -----Radio\n * -----Menu\n * -----List\n * -----Layout\n * -----Icon toggles\n * -----Footer\n * -----Column\n * -----Checkbox\n * -----Card\n * -----Button\n * -----Animation\n * -----Progress\n * -----Badge\n * -----Shadows\n * -----Grid\n * -----Data table\n * -----Dialog\n * -----Snackbar\n * -----Tooltip\n * -----Chip\n *\n * Even though all variables have the `!default` directive, most of them\n * should not be changed as they are dependent one another. This can cause\n * visual distortions (like alignment issues) that are hard to track down\n * and fix.\n */\n\n\n/* ========== TYPOGRAPHY ========== */\n\n/* We're splitting fonts into \"preferred\" and \"performance\" in order to optimize\n page loading. For important text, such as the body, we want it to load\n immediately and not wait for the web font load, whereas for other sections,\n such as headers and titles, we're OK with things taking a bit longer to load.\n We do have some optional classes and parameters in the mixins, in case you\n definitely want to make sure you're using the preferred font and don't mind\n the performance hit.\n We should be able to improve on this once CSS Font Loading L3 becomes more\n widely available.\n*/\n$preferred_font: 'Roboto', 'Helvetica', 'Arial', sans-serif !default;\n$performance_font: 'Helvetica', 'Arial', sans-serif !default;\n\n/* ========== COLORS ========== */\n\n/**\n*\n* Material design color palettes.\n* @see http://www.google.com/design/spec/style/color.html\n*\n**/\n\n@import \"color-definitions\";\n@import \"functions\";\n\n/* ========== IMAGES ========== */\n$image_path: '/images' !default;\n\n/* ========== Color & Themes ========== */\n\n// Define whether individual color palette items should have classes created.\n// Setting this to true will remove individual color classes for each color in the palettes.\n// To improve overall performance (assuming they aren't used) by:\n// * Saving server bandwidth sending the extra classes\n// * Save client computation against the classes\n// it is RECOMMENDED you set this to true.\n$trim-color-classes: false !default;\n\n// Use color primarily for emphasis. Choose colors that fit with\n// your brand and provide good contrast between visual components.\n$color-primary: $palette-indigo-500 !default;\n$color-primary-dark: $palette-indigo-700 !default;\n$color-accent: $palette-pink-A200 !default;\n\n// Our primary is dark, so use $color-dark-contrast for overlaid text.\n$color-primary-contrast: $color-dark-contrast !default;\n// Our accent is dark, so use $color-dark-contrast for overlaid text.\n$color-accent-contrast: $color-dark-contrast !default;\n\n// Replace all colors with placeholders if we're generating a template.\n@if $styleguide-generate-template == true {\n $color-primary: '$color-primary';\n $color-primary-dark: '$color-primary-dark';\n $color-accent: '$color-accent';\n $color-primary-contrast: '$color-primary-contrast';\n $color-accent-contrast: '$color-accent-contrast';\n}\n\n/* ========== Typography ========== */\n\n// We use the following default color styles: text-color-primary and\n// text-color-secondary. For light themes, use text-color-primary-inverse\n// and text-color-secondary-inverse.\n\n$text-color-primary: unquote(\"rgba(#{$color-black}, 0.87)\") !default;\n$text-link-color: unquote(\"rgb(#{$color-accent})\") !default;\n\n// Define whether to target elements directly for typographic enhancements.\n// Turning this off means you need to use mdl-* classes more often.\n// Other components may also fail to adhere to MD without these rules.\n// It is strongly recommended you leave this as true.\n\n$target-elements-directly: true !default;\n\n/* ========== Components ========== */\n\n/* ========== Standard Buttons ========== */\n\n// Default button colors.\n$button-primary-color: unquote(\"rgba(#{$palette-grey-500}, 0.20)\") !default;\n$button-secondary-color: unquote(\"rgb(#{$color-black})\") !default;\n$button-hover-color: $button-primary-color !default;\n$button-active-color: unquote(\"rgba(#{$palette-grey-500}, 0.40)\") !default;\n$button-focus-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n\n// Colored button colors.\n$button-primary-color-alt: unquote(\"rgb(#{$color-primary})\") !default;\n$button-secondary-color-alt: unquote(\"rgb(#{$color-primary-contrast})\") !default;\n$button-hover-color-alt: unquote(\"rgb(#{$color-primary})\") !default;\n$button-active-color-alt: unquote(\"rgb(#{$color-primary})\") !default;\n$button-focus-color-alt: $button-focus-color !default;\n\n// Ripple color for colored raised buttons.\n$button-ripple-color-alt: unquote(\"rgb(#{$color-primary-contrast})\") !default;\n\n// Disabled button colors.\n$button-primary-color-disabled: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n$button-secondary-color-disabled: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n\n// FAB colors and sizes.\n$button-fab-color-alt: unquote(\"rgb(#{$color-accent})\") !default;\n$button-fab-hover-color-alt: unquote(\"rgb(#{$color-accent})\") !default;\n$button-fab-active-color-alt: unquote(\"rgb(#{$color-accent})\") !default;\n$button-fab-text-color-alt: unquote(\"rgb(#{$color-accent-contrast})\") !default;\n$button-fab-ripple-color-alt: unquote(\"rgb(#{$color-accent-contrast})\") !default;\n\n// Icon button colors and sizes.\n$button-icon-color: unquote(\"rgb(#{$palette-grey-700})\") !default;\n$button-icon-focus-color: $button-focus-color !default;\n\n/* ========== Icon Toggles ========== */\n\n$icon-toggle-color: unquote(\"rgb(#{$palette-grey-700})\") !default;\n$icon-toggle-focus-color: $button-focus-color !default;\n$icon-toggle-checked-color: unquote(\"rgb(#{$color-primary})\") !default;\n$icon-toggle-checked-focus-color: unquote(\"rgba(#{$color-primary}, 0.26)\") !default;\n$icon-toggle-disabled-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n\n/* ========== Radio Buttons ========== */\n\n$radio-color: unquote(\"rgb(#{$color-primary})\") !default;\n$radio-off-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$radio-disabled-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n\n/* ========== Ripple effect ========== */\n\n$ripple-bg-color: unquote(\"rgb(#{$color-light-contrast})\") !default;\n\n/* ========== Layout ========== */\n\n$layout-nav-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n\n// Drawer\n$layout-drawer-bg-color: unquote(\"rgb(#{$palette-grey-50})\") !default;\n$layout-drawer-border-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n$layout-text-color: unquote(\"rgb(#{$palette-grey-800})\") !default;\n$layout-drawer-navigation-color: #757575 !default;\n$layout-drawer-navigation-link-active-background: unquote(\"rgb(#{$palette-grey-300})\") !default;\n$layout-drawer-navigation-link-active-color: unquote(\"rgb(#{$color-light-contrast})\") !default;\n\n// Header\n$layout-header-bg-color: unquote(\"rgb(#{$color-primary})\") !default;\n$layout-header-text-color: unquote(\"rgb(#{$color-primary-contrast})\") !default;\n$layout-header-nav-hover-color: unquote(\"rgba(#{$palette-grey-700}, 0.6)\") !default;\n$layout-header-tab-text-color: unquote(\"rgba(#{$color-primary-contrast}, 0.6)\") !default;\n\n// Tabs\n$layout-header-tab-highlight: unquote(\"rgb(#{$color-accent})\") !default;\n\n/* ========== Content Tabs ========== */\n\n$tab-highlight-color: unquote(\"rgb(#{$color-primary})\") !default;\n$tab-text-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$tab-active-text-color: unquote(\"rgba(#{$color-black}, 0.87)\") !default;\n$tab-border-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n\n/* ========== Checkboxes ========== */\n\n$checkbox-color: unquote(\"rgb(#{$color-primary})\") !default;\n$checkbox-off-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$checkbox-disabled-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n$checkbox-focus-color: unquote(\"rgba(#{$color-primary}, 0.26)\") !default;\n$checkbox-image-path: $image_path;\n\n/* ========== Switches ========== */\n\n$switch-color: unquote(\"rgb(#{$color-primary})\") !default;\n$switch-faded-color: unquote(\"rgba(#{$color-primary}, 0.26)\") !default;\n$switch-thumb-color: $switch-color !default;\n$switch-track-color: unquote(\"rgba(#{$color-primary}, 0.5)\") !default;\n\n$switch-off-thumb-color: unquote(\"rgb(#{$palette-grey-50})\") !default;\n$switch-off-track-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n$switch-disabled-thumb-color: unquote(\"rgb(#{$palette-grey-400})\") !default;\n$switch-disabled-track-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n\n/* ========== Spinner ========== */\n\n$spinner-color-1: unquote(\"rgb(#{$palette-blue-400})\") !default;\n$spinner-color-2: unquote(\"rgb(#{$palette-red-500})\") !default;\n$spinner-color-3: unquote(\"rgb(#{$palette-yellow-600})\") !default;\n$spinner-color-4: unquote(\"rgb(#{$palette-green-500})\") !default;\n\n$spinner-single-color: unquote(\"rgb(#{$color-primary})\") !default;\n\n/* ========== Text fields ========== */\n\n$input-text-background-color: transparent !default;\n$input-text-label-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n$input-text-bottom-border-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n$input-text-highlight-color: unquote(\"rgb(#{$color-primary})\") !default;\n$input-text-disabled-color: $input-text-bottom-border-color !default;\n$input-text-disabled-text-color: $input-text-label-color !default;\n$input-text-error-color: unquote(\"rgb(#{$palette-red-A700})\") !default;\n\n/* ========== Card ========== */\n\n$card-background-color: unquote(\"rgb(#{$color-white})\") !default;\n$card-text-color: unquote(\"rgb(#{$color-black})\") !default;\n$card-image-placeholder-color: unquote(\"rgb(#{$color-accent})\") !default;\n$card-supporting-text-text-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$card-border-color: rgba(0,0,0,0.1) !default;\n$card-subtitle-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n\n/* ========== Sliders ========== */\n\n$range-bg-color: unquote(\"rgba(#{$color-black}, 0.26)\") !default;\n$range-color: unquote(\"rgb(#{$color-primary})\") !default;\n$range-faded-color: unquote(\"rgba(#{$color-primary}, 0.26)\") !default;\n$range-bg-focus-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n\n/* ========== Progress ========== */\n$progress-main-color: unquote(\"rgb(#{$color-primary})\") !default;\n$progress-secondary-color: unquote(\"rgba(#{$color-primary-contrast}, 0.7)\") !default;\n$progress-fallback-buffer-color: unquote(\"rgba(#{$color-primary-contrast}, 0.9)\") !default;\n$progress-image-path: $image_path;\n\n/* ========== List ========== */\n\n$list-main-text-text-color: unquote(\"rgba(#{$color-black}, 0.87)\") !default;\n$list-supporting-text-text-color: unquote(\"rgba(#{$color-black}, 0.54)\") !default;\n$list-icon-color: unquote(\"rgb(#{$palette-grey-600})\") !default;\n$list-avatar-color: white !default;\n\n/* ========== Item ========== */\n\n// Default Item Colors\n$default-item-text-color: unquote(\"rgba(#{$color-black}, 0.87)\") !default;\n$default-item-outline-color: unquote(\"rgb(#{$palette-grey-400})\") !default;\n$default-item-hover-bg-color: unquote(\"rgb(#{$palette-grey-200})\") !default;\n$default-item-focus-bg-color: unquote(\"rgb(#{$palette-grey-200})\") !default;\n$default-item-active-bg-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n$default-item-divider-color: unquote(\"rgba(#{$color-black}, 0.12)\") !default;\n\n// Disabled Button Colors\n$disabled-item-text-color: unquote(\"rgb(#{$palette-grey-400})\") !default;\n\n/* ========== Dropdown menu ========== */\n\n$default-dropdown-bg-color: unquote(\"rgb(#{$color-white})\") !default;\n\n/* ========== Tooltips ========== */\n\n$tooltip-text-color: unquote(\"rgb(#{$color-white})\") !default;\n$tooltip-background-color: unquote(\"rgba(#{$palette-grey-700}, 0.9)\") !default;\n\n/* ========== Footer ========== */\n\n$footer-bg-color: unquote(\"rgb(#{$palette-grey-800})\") !default;\n$footer-color: unquote(\"rgb(#{$palette-grey-500})\") !default;\n$footer-heading-color: unquote(\"rgb(#{$palette-grey-300})\") !default;\n$footer-button-fill-color: $footer-color !default;\n$footer-underline-color: $footer-color !default;\n\n\n/* TEXTFIELD */\n\n$input-text-font-size: 16px !default;\n$input-text-width: 100% !default;\n$input-text-padding: 4px !default;\n$input-text-vertical-spacing: 20px !default;\n\n$input-text-button-size: 32px !default;\n$input-text-floating-label-fontsize: 12px !default;\n$input-text-expandable-icon-top: 16px !default;\n\n\n/* SWITCH */\n\n$switch-label-font-size: 16px !default;\n$switch-label-height: 24px !default;\n$switch-track-height: 14px !default;\n$switch-track-length: 36px !default;\n$switch-thumb-size: 20px !default;\n$switch-track-top: ($switch-label-height - $switch-track-height) / 2 !default;\n$switch-thumb-top: ($switch-label-height - $switch-thumb-size) / 2 !default;\n$switch-ripple-size: $switch-label-height * 2 !default;\n$switch-helper-size: 8px !default;\n\n/* SPINNER */\n\n$spinner-size: 28px !default;\n$spinner-stroke-width: 3px !default;\n\n// Amount of circle the arc takes up.\n$spinner-arc-size: 270deg !default;\n// Time it takes to expand and contract arc.\n$spinner-arc-time: 1333ms !default;\n// How much the start location of the arc should rotate each time.\n$spinner-arc-start-rot: 216deg !default;\n\n$spinner-duration: 360 * $spinner-arc-time / (\n strip-units($spinner-arc-start-rot + (360deg - $spinner-arc-size)));\n\n\n/* RADIO */\n\n$radio-label-font-size: 16px !default;\n$radio-label-height: 24px !default;\n$radio-button-size: 16px !default;\n$radio-inner-margin: $radio-button-size / 4;\n$radio-padding: 8px !default;\n$radio-top-offset: ($radio-label-height - $radio-button-size) / 2;\n$radio-ripple-size: 42px !default;\n\n\n/* MENU */\n\n$menu-expand-duration: 0.3s !default;\n$menu-fade-duration: 0.2s !default;\n\n/* LIST */\n\n$list-border: 8px !default;\n$list-min-height: 48px !default;\n$list-min-padding: 16px !default;\n$list-bottom-padding: 20px !default;\n$list-avatar-text-left-distance: 72px !default;\n$list-icon-text-left-distance: 72px !default;\n\n$list-avatar-size: 40px !default;\n$list-icon-size: 24px !default;\n\n$list-two-line-height: 72px !default;\n$list-three-line-height: 88px !default;\n\n/* LAYOUT */\n\n$layout-drawer-narrow: 240px !default;\n$layout-drawer-wide: 456px !default;\n$layout-drawer-width: $layout-drawer-narrow !default;\n\n$layout-header-icon-size: 32px !default;\n$layout-screen-size-threshold: 1024px !default;\n$layout-header-icon-margin: 24px !default;\n$layout-drawer-button-mobile-size: 32px !default;\n$layout-drawer-button-desktop-size: 48px !default;\n\n$layout-header-mobile-row-height: 56px !default;\n$layout-mobile-header-height: $layout-header-mobile-row-height;\n$layout-header-desktop-row-height: 64px !default;\n$layout-desktop-header-height: $layout-header-desktop-row-height;\n\n$layout-header-desktop-baseline: 80px !default;\n$layout-header-mobile-baseline: 72px !default;\n$layout-header-mobile-indent: 16px !default;\n$layout-header-desktop-indent: 40px !default;\n\n$layout-tab-font-size: 14px !default;\n$layout-tab-bar-height: 48px !default;\n$layout-tab-mobile-padding: 12px !default;\n$layout-tab-desktop-padding: 24px !default;\n$layout-tab-highlight-thickness: 2px !default;\n\n\n/* ICON TOGGLE */\n\n$icon-toggle-size: 32px !default;\n$icon-toggle-font-size: 24px !default;\n$icon-toggle-ripple-size: 36px !default;\n\n/* FOOTER */\n\n/*mega-footer*/\n$footer-min-padding: 16px !default;\n$footer-padding-sides: 40px !default;\n$footer-heading-font-size: 14px !default;\n$footer-heading-line-height: (1.7 * $footer-heading-font-size) !default;\n$footer-btn-size: 36px !default;\n\n/*mini-footer*/\n$padding: 16px !default;\n$footer-heading-font-size: 24px !default;\n$footer-heading-line-height: (1.5 * $footer-heading-font-size) !default;\n$footer-btn-size: 36px !default;\n\n/* CHECKBOX */\n\n$checkbox-label-font-size: 16px !default;\n$checkbox-label-height: 24px !default;\n$checkbox-button-size: 16px !default;\n$checkbox-inner-margin: 2px !default;\n$checkbox-padding: 8px !default;\n$checkbox-top-offset:\n($checkbox-label-height - $checkbox-button-size - $checkbox-inner-margin) / 2;\n$checkbox-ripple-size: $checkbox-label-height * 1.5;\n\n/* CARD */\n\n/* Card dimensions */\n$card-width: 330px !default;\n$card-height: 200px !default;\n$card-font-size: 16px !default;\n$card-title-font-size: 24px !default;\n$card-subtitle-font-size: 14px !default;\n$card-horizontal-padding: 16px !default;\n$card-vertical-padding: 16px !default;\n\n$card-title-perspective-origin-x: 165px !default;\n$card-title-perspective-origin-y: 56px !default;\n\n$card-title-transform-origin-x: 165px !default;\n$card-title-transform-origin-y: 56px !default;\n\n$card-title-text-transform-origin-x: 149px !default;\n$card-title-text-transform-origin-y: 48px !default;\n\n$card-supporting-text-font-size: 1rem !default;\n$card-supporting-text-line-height: 18px !default;\n\n$card-actions-font-size: 16px !default;\n\n$card-title-text-font-weight: 300 !default;\n$card-z-index: 1 !default;\n\n/* Cover image */\n$card-cover-image-height: 186px !default;\n$card-background-image-url: '' !default;\n\n\n/* BUTTON */\n/**\n *\n * Dimensions\n *\n */\n$button-min-width: 64px !default;\n$button-height: 36px !default;\n$button-padding: 16px !default;\n$button-margin: 4px !default;\n$button-border-radius: 2px !default;\n\n$button-fab-size: 56px !default;\n$button-fab-size-mini: 40px !default;\n$button-fab-font-size: 24px !default;\n\n$button-icon-size: 32px !default;\n$button-icon-size-mini: 24px !default;\n\n\n/* ANIMATION */\n$animation-curve-fast-out-slow-in: cubic-bezier(0.4, 0, 0.2, 1) !default;\n$animation-curve-linear-out-slow-in: cubic-bezier(0, 0, 0.2, 1) !default;\n$animation-curve-fast-out-linear-in: cubic-bezier(0.4, 0, 1, 1) !default;\n\n$animation-curve-default: $animation-curve-fast-out-slow-in !default;\n\n\n/* PROGRESS */\n$bar-height: 4px !default;\n\n/* BADGE */\n$badge-font-size: 12px !default;\n$badge-color: unquote(\"rgb(#{$color-accent-contrast})\") !default;\n$badge-color-inverse: unquote(\"rgb(#{$color-accent})\") !default;\n$badge-background: unquote(\"rgb(#{$color-accent})\") !default;\n$badge-background-inverse: unquote(\"rgba(#{$color-accent-contrast},0.2)\") !default;\n$badge-size : 22px !default;\n$badge-padding: 2px !default;\n$badge-overlap: 12px !default;\n\n/* SHADOWS */\n\n$shadow-key-umbra-opacity: 0.2 !default;\n$shadow-key-penumbra-opacity: 0.14 !default;\n$shadow-ambient-shadow-opacity: 0.12 !default;\n\n/* GRID */\n\n$grid-desktop-columns: 12 !default;\n$grid-desktop-gutter: 16px !default;\n$grid-desktop-margin: 16px !default;\n\n$grid-desktop-breakpoint: 840px !default;\n\n$grid-tablet-columns: 8 !default;\n$grid-tablet-gutter: $grid-desktop-gutter !default;\n$grid-tablet-margin: $grid-desktop-margin !default;\n\n$grid-tablet-breakpoint: 480px !default;\n\n$grid-phone-columns: 4 !default;\n$grid-phone-gutter: $grid-desktop-gutter !default;\n$grid-phone-margin: $grid-desktop-margin !default;\n\n$grid-cell-default-columns: $grid-phone-columns !default;\n$grid-max-columns: $grid-desktop-columns !default;\n\n/* DATA TABLE */\n\n$data-table-font-size: 13px !default;\n$data-table-header-font-size: 12px !default;\n$data-table-header-sort-icon-size: 16px !default;\n\n$data-table-header-color: rgba(#000, 0.54) !default;\n$data-table-header-sorted-color: rgba(#000, 0.87) !default;\n$data-table-header-sorted-icon-hover-color: rgba(#000, 0.26) !default;\n$data-table-divider-color: rgba(#000, 0.12) !default;\n\n$data-table-hover-color: #eeeeee !default;\n$data-table-selection-color: #e0e0e0 !default;\n\n$data-table-dividers: 1px solid $data-table-divider-color !default;\n\n$data-table-row-height: 48px !default;\n$data-table-last-row-height: 56px !default;\n$data-table-header-height: 56px !default;\n\n$data-table-column-spacing: 36px !default;\n$data-table-column-padding: $data-table-column-spacing / 2;\n\n$data-table-card-header-height: 64px !default;\n$data-table-card-title-top: 20px !default;\n$data-table-card-padding: 24px !default;\n$data-table-button-padding-right: 16px !default;\n$data-table-cell-top: $data-table-card-padding / 2;\n\n/* DIALOG */\n$dialog-content-color: $card-supporting-text-text-color;\n\n/* SNACKBAR */\n\n// Hard coded since the color is not present in any palette.\n$snackbar-background-color: #323232 !default;\n$snackbar-tablet-breakpoint: $grid-tablet-breakpoint;\n$snackbar-action-color: unquote(\"rgb(#{$color-accent})\") !default;\n\n/* TOOLTIP */\n$tooltip-font-size: 10px !default;\n$tooltip-font-size-large: 14px !default;\n\n/* CHIP */\n$chip-bg-color: rgb(222, 222, 222) !default;\n$chip-bg-active-color: rgb(214, 214, 214) !default;\n$chip-height: 32px !default;\n$chip-font-size: 13px !default; \n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@import \"../variables\";\n\n.mdl-mini-footer {\n display: flex;\n flex-flow: row wrap;\n justify-content: space-between;\n\n padding: ($padding * 2) $padding;\n\n color: $footer-color;\n background-color: $footer-bg-color;\n\n &:after {\n content: '';\n display: block;\n }\n\n & .mdl-logo {\n line-height: $footer-btn-size;\n }\n}\n\n.mdl-mini-footer--link-list,\n.mdl-mini-footer__link-list {\n display: flex;\n flex-flow: row nowrap;\n\n list-style: none;\n\n margin: 0;\n padding: 0;\n\n & li {\n margin-bottom: 0;\n margin-right: $padding;\n\n @media screen and (min-width: 760px) {\n line-height: $footer-btn-size;\n }\n }\n\n & a {\n color: inherit;\n text-decoration: none;\n white-space: nowrap;\n }\n}\n\n.mdl-mini-footer--left-section,\n.mdl-mini-footer__left-section {\n display: inline-block;\n order: 0;\n}\n\n.mdl-mini-footer--right-section,\n.mdl-mini-footer__right-section {\n display: inline-block;\n order: 1;\n}\n\n.mdl-mini-footer--social-btn,\n.mdl-mini-footer__social-btn {\n width: $footer-btn-size;\n height: $footer-btn-size;\n\n padding: 0;\n margin: 0;\n\n background-color: $footer-button-fill-color;\n\n border: none;\n}\n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@import \"../variables\";\n\n.mdl-card {\n display: flex;\n flex-direction: column;\n font-size: $card-font-size;\n font-weight: 400;\n min-height: $card-height;\n overflow: hidden;\n width: $card-width;\n z-index: $card-z-index;\n position: relative;\n background: $card-background-color;\n border-radius: 2px;\n box-sizing: border-box;\n}\n\n.mdl-card__media {\n background-color: $card-image-placeholder-color;\n background-repeat: repeat;\n background-position: 50% 50%;\n background-size: cover;\n background-origin: padding-box;\n background-attachment: scroll;\n box-sizing: border-box;\n}\n\n.mdl-card__title {\n align-items: center;\n color: $card-text-color;\n display: block;\n display: flex;\n justify-content: stretch;\n line-height: normal;\n padding: $card-vertical-padding $card-horizontal-padding;\n perspective-origin: $card-title-perspective-origin-x $card-title-perspective-origin-y;\n transform-origin: $card-title-transform-origin-x $card-title-transform-origin-y;\n box-sizing: border-box;\n\n &.mdl-card--border {\n border-bottom: 1px solid $card-border-color;\n }\n}\n\n.mdl-card__title-text {\n align-self: flex-end;\n color: inherit;\n display: block;\n display: flex;\n font-size: $card-title-font-size;\n font-weight: $card-title-text-font-weight;\n line-height: normal;\n overflow: hidden;\n transform-origin: $card-title-text-transform-origin-x $card-title-text-transform-origin-y;\n margin: 0;\n}\n\n.mdl-card__subtitle-text {\n font-size: $card-subtitle-font-size;\n color: $card-subtitle-color;\n margin: 0;\n}\n\n.mdl-card__supporting-text {\n color: $card-supporting-text-text-color;\n font-size: $card-supporting-text-font-size;\n line-height: $card-supporting-text-line-height;\n overflow: hidden;\n padding: $card-vertical-padding $card-horizontal-padding;\n width: 90%;\n\n &.mdl-card--border {\n border-bottom: 1px solid $card-border-color;\n }\n}\n\n.mdl-card__actions {\n font-size: $card-actions-font-size;\n line-height: normal;\n width: 100%;\n background-color: rgba(0,0,0,0);\n padding: 8px;\n box-sizing: border-box;\n\n &.mdl-card--border {\n border-top: 1px solid $card-border-color;\n }\n}\n\n.mdl-card--expand {\n flex-grow: 1;\n}\n\n\n.mdl-card__menu {\n position: absolute;\n right: 16px;\n top: 16px;\n}\n","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@import \"../variables\";\n@import \"../mixins\";\n\n// The button component. Defaults to a flat button.\n.mdl-button {\n background: transparent;\n border: none;\n border-radius: $button-border-radius;\n color: $button-secondary-color;\n position: relative;\n height: $button-height;\n margin: 0;\n min-width: $button-min-width;\n padding: 0 $button-padding;\n display: inline-block;\n @include typo-button();\n overflow: hidden;\n will-change: box-shadow;\n transition: box-shadow 0.2s $animation-curve-fast-out-linear-in,\n background-color 0.2s $animation-curve-default,\n color 0.2s $animation-curve-default;\n outline: none;\n cursor: pointer;\n text-decoration: none;\n text-align: center;\n line-height: $button-height;\n vertical-align: middle;\n\n &::-moz-focus-inner {\n border: 0;\n }\n\n &:hover {\n background-color: $button-hover-color;\n }\n\n &:focus:not(:active) {\n background-color: $button-focus-color;\n }\n\n &:active {\n background-color: $button-active-color;\n }\n\n &.mdl-button--colored {\n color: $button-primary-color-alt;\n\n &:focus:not(:active) {\n background-color: $button-focus-color-alt;\n }\n }\n}\n\ninput.mdl-button[type=\"submit\"] {\n -webkit-appearance:none;\n}\n\n // Raised buttons\n .mdl-button--raised {\n background: $button-primary-color;\n @include shadow-2dp();\n\n &:active {\n @include shadow-4dp();\n background-color: $button-active-color;\n }\n\n &:focus:not(:active) {\n @include focus-shadow();\n background-color: $button-active-color;\n }\n\n &.mdl-button--colored {\n background: $button-primary-color-alt;\n color: $button-secondary-color-alt;\n\n &:hover {\n background-color: $button-hover-color-alt;\n }\n\n &:active {\n background-color: $button-active-color-alt;\n }\n\n &:focus:not(:active) {\n background-color: $button-active-color-alt;\n }\n\n & .mdl-ripple {\n background: $button-ripple-color-alt;\n }\n }\n }\n\n\n // FABs\n .mdl-button--fab {\n border-radius: 50%;\n font-size: $button-fab-font-size;\n height: $button-fab-size;\n margin: auto;\n min-width: $button-fab-size;\n width: $button-fab-size;\n padding: 0;\n overflow: hidden;\n background: $button-primary-color;\n box-shadow: 0 1px 1.5px 0 rgba(0,0,0,0.12), 0 1px 1px 0 rgba(0,0,0,0.24);\n position: relative;\n line-height: normal;\n\n & .material-icons {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(- $button-fab-font-size / 2, - $button-fab-font-size / 2);\n line-height: $button-fab-font-size;\n width: $button-fab-font-size;\n }\n\n &.mdl-button--mini-fab {\n height: $button-fab-size-mini;\n min-width: $button-fab-size-mini;\n width: $button-fab-size-mini;\n }\n\n & .mdl-button__ripple-container {\n border-radius: 50%;\n // Fixes clipping bug in Safari.\n -webkit-mask-image: -webkit-radial-gradient(circle, white, black);\n }\n\n &:active {\n @include shadow-4dp();\n background-color: $button-active-color;\n }\n\n &:focus:not(:active) {\n @include focus-shadow();\n background-color: $button-active-color;\n }\n\n &.mdl-button--colored {\n background: $button-fab-color-alt;\n color: $button-fab-text-color-alt;\n\n &:hover {\n background-color: $button-fab-hover-color-alt;\n }\n\n &:focus:not(:active) {\n background-color: $button-fab-active-color-alt;\n }\n\n &:active {\n background-color: $button-fab-active-color-alt;\n }\n\n & .mdl-ripple {\n background: $button-fab-ripple-color-alt;\n }\n }\n }\n\n\n // Icon buttons\n .mdl-button--icon {\n border-radius: 50%;\n font-size: $button-fab-font-size;\n height: $button-icon-size;\n margin-left: 0;\n margin-right: 0;\n min-width: $button-icon-size;\n width: $button-icon-size;\n padding: 0;\n overflow: hidden;\n color: inherit;\n line-height: normal;\n\n & .material-icons {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(- $button-fab-font-size / 2, - $button-fab-font-size / 2);\n line-height: $button-fab-font-size;\n width: $button-fab-font-size;\n }\n\n &.mdl-button--mini-icon {\n height: $button-icon-size-mini;\n min-width: $button-icon-size-mini;\n width: $button-icon-size-mini;\n\n & .material-icons {\n top: ($button-icon-size-mini - $button-fab-font-size) / 2;\n left: ($button-icon-size-mini - $button-fab-font-size) / 2;\n }\n }\n\n & .mdl-button__ripple-container {\n border-radius: 50%;\n // Fixes clipping bug in Safari.\n -webkit-mask-image: -webkit-radial-gradient(circle, white, black);\n }\n }\n\n\n // Ripples\n .mdl-button__ripple-container {\n display: block;\n height: 100%;\n left: 0px;\n position: absolute;\n top: 0px;\n width: 100%;\n z-index: 0;\n overflow: hidden;\n\n .mdl-button[disabled] & .mdl-ripple,\n .mdl-button.mdl-button--disabled & .mdl-ripple {\n background-color: transparent;\n }\n }\n\n// Colorized buttons\n\n.mdl-button--primary.mdl-button--primary {\n color: $button-primary-color-alt;\n & .mdl-ripple {\n background: $button-secondary-color-alt;\n }\n &.mdl-button--raised, &.mdl-button--fab {\n color: $button-secondary-color-alt;\n background-color: $button-primary-color-alt;\n }\n}\n\n.mdl-button--accent.mdl-button--accent {\n color: $button-fab-color-alt;\n & .mdl-ripple {\n background: $button-fab-text-color-alt;\n }\n &.mdl-button--raised, &.mdl-button--fab {\n color: $button-fab-text-color-alt;\n background-color: $button-fab-color-alt;\n }\n}\n\n// Disabled buttons\n\n.mdl-button {\n // Bump up specificity by using [disabled] twice.\n &[disabled][disabled],\n &.mdl-button--disabled.mdl-button--disabled {\n color: $button-secondary-color-disabled;\n cursor: default;\n background-color: transparent;\n }\n\n &--fab {\n // Bump up specificity by using [disabled] twice.\n &[disabled][disabled],\n &.mdl-button--disabled.mdl-button--disabled {\n background-color: $button-primary-color-disabled;\n color: $button-secondary-color-disabled;\n }\n }\n\n &--raised {\n // Bump up specificity by using [disabled] twice.\n &[disabled][disabled],\n &.mdl-button--disabled.mdl-button--disabled {\n background-color: $button-primary-color-disabled;\n color: $button-secondary-color-disabled;\n box-shadow: none;\n }\n }\n &--colored {\n // Bump up specificity by using [disabled] twice.\n &[disabled][disabled],\n &.mdl-button--disabled.mdl-button--disabled {\n color: $button-secondary-color-disabled;\n }\n }\n}\n\n// Align icons inside buttons with text\n.mdl-button .material-icons {\n vertical-align: middle;\n}\n","// SIMPLE GRID - SASS/SCSS\n\n\n// fonts\n$font-weight-light: 300;\n$font-weight-regular: 400;\n$font-weight-heavy: 700;\n\n// colors\n$dark-grey: #333447;\n$dark-gray: #333447; // for the Americans\n\n\n.font-light {\n font-weight: $font-weight-light;\n}\n\n.font-regular {\n font-weight: $font-weight-regular;\n}\n\n.font-heavy {\n font-weight: $font-weight-heavy;\n}\n\n// utility\n\n.left {\n text-align: left;\n}\n\n.right {\n text-align: right;\n}\n\n.center {\n text-align: center;\n margin-left: auto;\n margin-right: auto;\n}\n\n.justify {\n text-align: justify;\n}\n\n.hidden-sm {\n display: none;\n}\n\n// grid\n\n$width: 98%;\n$gutter: 2%;\n$breakpoint-small: 33.75em; // 540px\n$breakpoint-med: 45em; // 720px\n$breakpoint-large: 60em; // 960px\n\n.container {\n width: 100%;\n margin-left: auto;\n margin-right: auto;\n}\n\n.row {\n position: relative;\n width: 100%;\n}\n\n.row [class^=\"col\"] {\n float: left;\n margin: 0.5rem 1%;\n min-height: 0.125rem;\n}\n\n.row::after {\n content: \"\";\n display: table;\n clear: both;\n}\n\n.col-1,\n.col-2,\n.col-3,\n.col-4,\n.col-5,\n.col-6,\n.col-7,\n.col-8,\n.col-9,\n.col-10,\n.col-11,\n.col-12 {\n width: $width;\n}\n\n.col-1-sm {\n width: ($width / 12) - ($gutter * 11 / 12);\n}\n\n.col-2-sm {\n width: ($width / 6) - ($gutter * 10 / 12);\n}\n\n.col-3-sm {\n width: ($width / 4) - ($gutter * 9 / 12);\n}\n\n.col-4-sm {\n width: ($width / 3) - ($gutter * 8 / 12);\n}\n\n.col-5-sm {\n width: ($width / (12 / 5)) - ($gutter * 7 / 12);\n}\n\n.col-6-sm {\n width: ($width / 2) - ($gutter * 6 / 12);\n}\n\n.col-7-sm {\n width: ($width / (12 / 7)) - ($gutter * 5 / 12);\n}\n\n.col-8-sm {\n width: ($width / (12 / 8)) - ($gutter * 4 / 12);\n}\n\n.col-9-sm {\n width: ($width / (12 / 9)) - ($gutter * 3 / 12);\n}\n\n.col-10-sm {\n width: ($width / (12 / 10)) - ($gutter * 2 / 12);\n}\n\n.col-11-sm {\n width: ($width / (12 / 11)) - ($gutter * 1 / 12);\n}\n\n.col-12-sm {\n width: $width;\n}\n\n@media only screen and (min-width: $breakpoint-med) {\n .col-1 {\n width: ($width / 12) - ($gutter * 11 / 12);\n }\n .col-2 {\n width: ($width / 6) - ($gutter * 10 / 12);\n }\n .col-3 {\n width: ($width / 4) - ($gutter * 9 / 12);\n }\n .col-4 {\n width: ($width / 3) - ($gutter * 8 / 12);\n }\n .col-5 {\n width: ($width / (12 / 5)) - ($gutter * 7 / 12);\n }\n .col-6 {\n width: ($width / 2) - ($gutter * 6 / 12);\n }\n .col-7 {\n width: ($width / (12 / 7)) - ($gutter * 5 / 12);\n }\n .col-8 {\n width: ($width / (12 / 8)) - ($gutter * 4 / 12);\n }\n .col-9 {\n width: ($width / (12 / 9)) - ($gutter * 3 / 12);\n }\n .col-10 {\n width: ($width / (12 / 10)) - ($gutter * 2 / 12);\n }\n .col-11 {\n width: ($width / (12 / 11)) - ($gutter * 1 / 12);\n }\n .col-12 {\n width: $width;\n }\n\n .hidden-sm {\n display: block;\n }\n}\n\n.row {\n display: -webkit-box;\n display: -webkit-flex;\n display: -ms-flexbox;\n display: flex;\n flex-wrap: wrap;\n}\n\n.row > [class*='col-'] {\n display: flex;\n flex-direction: column;\n}\n","\n/*\nMaterial Icons\n*/\n\n.material-icons {\n font-family: 'Material Icons';\n font-weight: normal;\n font-style: normal;\n font-size: 24px; /* Preferred icon size */\n display: inline-block;\n line-height: 1;\n text-transform: none;\n letter-spacing: normal;\n word-wrap: normal;\n white-space: nowrap;\n direction: ltr;\n \n /* Support for all WebKit browsers. */\n -webkit-font-smoothing: antialiased;\n /* Support for Safari and Chrome. */\n text-rendering: optimizeLegibility;\n \n /* Support for Firefox. */\n -moz-osx-font-smoothing: grayscale;\n \n /* Support for IE. */\n font-feature-settings: 'liga';\n }","html {\n font-size: $font_size;\n}\n\nbody {\n display: block !important;\n background-color: $background_color;\n font-size: 1rem;\n line-height: 1.5rem;\n font-family: $body_font_family;\n}\n\n.mdl-layout__content:focus {\n outline: none;\n }\n\n.mdl-layout__content header.mdl-layout__drawer {\n display: none;\n}\n\n.mdl-layout__container {\n height: calc(100% - 76px);\n margin-top: 76px;\n}\n.mdl-layout__header {\n position: fixed;\n transition: transform 0.5s;\n}\n.mdl-layout--fixed-drawer>.mdl-layout__content {\n margin-left: 300px; \n}\n\n@media screen and (max-width: 1024px) {\n .mdl-layout--fixed-drawer>.mdl-layout__content {\n margin-left:0\n }\n}\n\nh1, h2, h3, h4, h5, h6, blockquote, span.mdl-layout-title,\na.download > code.download {\n font-family: $body_font_family;\n}\n\nh1, h2, h3, h4, h5, h6, .toc-backref, .contents, .toctree-wrapper, .contents a, .toctree-wrapper a, .globaltoc a.current {\n color: $color-mxnet !important;\n}\n\na {\n text-decoration: none;\n}\n\n.page-content {\n font-size: 1rem;\n p, ul, ol, dl, dd, dt, table, th, td {\n font-size: 1rem;\n }\n}\n\n.brand {\n color: inherit;\n text-decoration: none;\n}\n\n.section {\n overflow-x: auto;\n}\n\n\n/*\n * Figure Directive Styles\n */\n img {\n max-width: 100%;\n display: block;\n margin-left: auto;\n margin-right: auto;\n }\n\ndiv.figure {\n p.caption {\n text-align: center;\n margin-top: .75rem;\n\n span.caption-number {\n font-style: normal;\n }\n .caption-number::after {\n content: \"\\00a0\";\n }\n }\n}\n\n.svg-icon {\n width: 16px;\n height: 16px;\n display: inline-block;\n fill: $grey-color-light;\n padding-right: 5px;\n padding-top: 4px;\n vertical-align: text-top;\n}\n\n/*\n * Download Link Styles\n */\na.download > i.material-icons {\n position: relative;\n top: 5px;\n}\n\na.download {\n text-decoration: none;\n}\n\n%clearfix:after {\n content: \"\";\n display: table;\n clear: both;\n}\n\n.wrapper {\n max-width: -webkit-calc(#{$content-width} - (#{$spacing-unit} * 2));\n max-width: calc(#{$content-width} - (#{$spacing-unit} * 2));\n margin-right: auto;\n margin-left: auto;\n padding-right: calc(#{$spacing-unit}+15px);\n padding-left: $spacing-unit;\n @extend %clearfix;\n\n @media screen and (max-width: $on-laptop) {\n max-width: -webkit-calc(#{$content-width} - (#{$spacing-unit}));\n max-width: calc(#{$content-width} - (#{$spacing-unit}));\n padding-right: $spacing-unit / 2;\n padding-left: $spacing-unit / 2;\n }\n}\n\n","/*\nVariables\n*/\n$font_size: 16px;\n\n$background_color: #fafafa;\n$code_background: rgba(0,0,0,.05);\n\n$code_font_family: \"Menlo\", \"DejaVu Sans Mono\", \"Liberation Mono\", \"Consolas\", \"Ubuntu Mono\", \"Courier New\", \"andale mono\", \"lucida console\", monospace !default;\n$body_font_family: -apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\" !default;\n$base-font-size: 17px !default;\n\n$xl-breakpoint: 1795px;\n$lg-breakpoint: 1200px;\n$md-breakpoint: 992px;\n$sm-breakpoint: 768px;\n$xs-breakpoint: 576px;\n\n$color-primary: $palette-blue-500;\n$color-primary-dark: $palette-blue-700 !default;\n$color-accent: $palette-deep-orange-A200 !default;\n$color-primary-contrast: $color-white !default;\n$color-accent-contrast: $color-white !default;\n\n\n$base-line-height: 1.5 !default;\n$spacing-unit: 30px !default;\n\n$color-mxnet: rgb(4,140,204);\n$color-mxnet-dark: rgb(4,60,110);\n$grey-color: #828282 !default;\n$grey-color-light: lighten($grey-color, 45%) !default;\n$grey-color-dark: darken($grey-color, 25%) !default;\n\n$table-text-align: left !default;\n\n// Width of the content area\n$content-width: 1150px !default;\n\n$on-palm: 600px !default;\n$on-palm: 900px !default;\n$on-laptop: 1024px !default;","/**\n * Layout Styles\n */\n $layout: (\n document: (\n xl: (\n width: 100%,\n )\n ),\n drawer-container: (\n width: $layout-drawer-width,\n ),\n side-doc-outline: (\n width: 230px,\n ),\n page-content: (\n md: (\n width: 90%,\n padding: 0 5%\n ),\n lg: (\n width: calc( 90% - 230px ),\n padding: 0 5%\n )\n )\n);\n\n.document {\n width: 100%;\n margin: 84px auto;\n display: flex;\n\n @media (min-width: $xl-breakpoint) {\n width: map-get(map-get(map-get($layout, document), xl), width);\n }\n .page-content {\n width: 100%;\n margin: 0 auto;\n padding: 0 12px;\n\n @media (min-width: $md-breakpoint) {\n width: map-get(map-get(map-get($layout, page-content), md), width);\n padding: map-get(map-get(map-get($layout, page-content), md), padding);\n }\n\n @media (min-width: $lg-breakpoint) {\n width: map-get(map-get(map-get($layout, page-content), lg), width);\n padding: map-get(map-get(map-get($layout, page-content), lg), padding);\n }\n }\n\n .side-doc-outline {\n width: map-get(map-get($layout, side-doc-outline), width);\n\n @media (max-width: $lg-breakpoint - 1) {\n display: none;\n } \n &--content {\n position: sticky;\n overflow-x: auto;\n overflow-y: auto;\n width: inherit;\n right: 0px;\n top: 80px;\n &::-webkit-scrollbar {\n width: 6px;\n }\n \n &::-webkit-scrollbar-track {\n border-radius: 6px;\n }\n \n &::-webkit-scrollbar-thumb {\n background-color: rgba(0, 0, 0, .3);\n border-radius: 6px;\n box-shadow:0 0 0 1px rgba(255, 255, 255, .3);\n }\n }\n }\n\n}","@keyframes float-in {\n 0% {\n transform: translateY(0.5rem);\n opacity: 0;\n }\n\t100% {\n\t\ttransform: translateY(0);\n\t\topacity: 1;\n\t}\n}\n\n@keyframes float-out {\n 0% {\n transform: translateY(0);\n opacity: 1;\n }\n\t100% {\n\t\ttransform: translateY(0.5rem);\n\t\topacity: 0;\n\t}\n}\n\n.page-content {\n .headerlink {\n display: inline-block;\n text-decoration: none;\n margin-left: 0.8rem;\n color: inherit;\n opacity: 0;\n &:hover {\n animation: float-in 0.2s $animation-curve-fast-out-slow-in 0s forwards;\n }\n }\n\n h1, h2, h3, h4, h5, h6 {\n .toc-backref {\n text-decoration: none;\n }\n &:hover {\n .headerlink {\n animation: float-in 0.2s $animation-curve-fast-out-slow-in 0s forwards;\n }\n }\n }\n\n h1 {\n font-size: 2rem;\n line-height: 2.25rem;\n }\n\n h2 {\n font-size: 1.75rem;\n line-height: 2rem;\n padding-top: 1.5rem;\n margin-top: 0;\n margin-bottom: 1rem;\n }\n\n h3 {\n font-size: 1.5rem;\n line-height: 1.75rem;\n padding-top: 1rem;\n margin-top: 0px;\n margin-bottom: .75rem;\n }\n\n h4 {\n font-size: 1.25rem;\n line-height: 1.5rem;\n padding-top: .75rem;\n margin-top: 0px;\n margin-bottom: .5rem;\n }\n\n div.page-content h5 {\n font-size: 1.1rem;\n line-height: 1.5rem;\n padding-top: 2rem;\n margin-top: 0px;\n margin-bottom: 1rem;\n }\n\n div.page-content h6 {\n font-size: 1rem;\n line-height: 1.5rem;\n padding-top: 2rem;\n margin-top: 0px;\n margin-bottom: 1rem;\n }\n\n\n}\n","\n/*\n * Admonition Styles\n */\n $admonitions: (\n hint: (\n font-color: rgb(0, 188, 212),\n background-color: rgba(0, 188, 212, 0.1),\n icon-content: \"help_outline\"\n ),\n note: (\n font-color: rgb(0, 188, 212),\n background-color: rgba(0, 188, 212, 0.1),\n icon-content: \"info_outline\"\n ),\n seealso: (\n font-color: rgb(0, 188, 212),\n background-color: rgba(0, 188, 212, 0.1),\n icon-content: \"search\"\n ),\n warning: (\n font-color: rgb(255, 193, 7),\n background-color: rgba(255, 193, 7, 0.1),\n icon-content: \"warning\"\n ),\n attention: (\n font-color: rgb(255, 193, 7),\n background-color: rgba(255, 193, 7, 0.1),\n icon-content: \"warning\"\n ),\n tip: (\n font-color: rgb(139, 195, 74),\n background-color: rgba(139, 195, 74, 0.1),\n icon-content: \"lightbulb_outline\"\n ),\n important: (\n font-color: rgb(139, 195, 74),\n background-color: rgba(139, 195, 74, 0.1),\n icon-content: \"check_circle\"\n ),\n error: (\n font-color: rgb(244, 67, 54),\n background-color: rgba(244, 67, 54, 0.1),\n icon-content: \"error_outline\"\n ),\n caution: (\n font-color: rgb(244, 67, 54),\n background-color: rgba(244, 67, 54, 0.1),\n icon-content: \"error_outline\"\n ),\n danger: (\n font-color: rgb(244, 67, 54),\n background-color: rgba(244, 67, 54, 0.1),\n icon-content: \"error_outline\"\n )\n);\n\n @mixin admonition-style($type) {\n border-left: solid 4px map-get(map-get($admonitions, $type), font-color);\n background-color: map-get(map-get($admonitions, $type), background-color);\n .admonition-title {\n font-size: 16px;\n font-weight: bold;\n color: map-get(map-get($admonitions, $type), font-color);\n\n margin-top: 4px;\n margin-bottom: 8px;\n &::before {\n @extend .material-icons;\n position: relative;\n margin-right: 5px;\n top: 3px;\n content: map-get(map-get($admonitions, $type), icon-content);\n font-size: 18px;\n }\n }\n}\n\n.admonition {\n @extend .mdl-shadow--2dp;\n\n padding: 12px 20px;\n margin-top: 10px;\n margin-bottom: 10px;\n p.last {\n margin: 16px;\n }\n .admonition-title {\n font-size: 16px;\n font-weight: bold;\n color: #555;\n text-transform: uppercase;\n margin-top: 7px;\n }\n\n @each $type in (note, seealso, hint, warning, attention, tip, important, error, caution, danger) {\n &.#{$type} {\n @include admonition-style($type);\n }\n }\n}\n",".page-content {\n .highlight {\n margin: 1px 0;\n pre {\n background: $code_background;\n color: rgba(0,0,0,.87);\n font-family: $code_font_family;\n padding: 0.75rem;\n overflow: auto;\n overflow-y: hidden;\n .o, .nd {\n color: rgba(0,0,0,.87);\n }\n }\n }\n\n div.highlight-console div.highlight {\n background: none;\n }\n\n // for jupyter notebook output cell\n .output {\n .highlight {\n pre {\n color: rgba(0,0,0,.87);\n background: $background_color;\n border-width: 1px;\n border-color: #999;\n border-style: solid;\n padding: 0.75rem;\n }\n }\n }\n\n .code, code:not(.download) {\n margin: 0 0;\n font-family: $code_font_family;\n border-radius: 2px;\n span.pre {\n font-family: $code_font_family;\n }\n }\n\n .viewcode-link {\n padding-left: 2em;\n font-size: 80%;\n }\n\n .rubric, .method > dt, .function > dt, .class > dt {\n display: table;\n margin: 10px 0;\n font-size: 100%;\n line-height: normal;\n background: #e7f2fa;\n color: #2B98F0;\n border-top: solid 3px #55ADF3;\n padding: 10px;\n position: relative;\n .descname, .descclassname {\n color: rgba(0,0,0,.87);\n background: #e7f2fa;\n padding: 3px;\n }\n em {\n padding: 0 2px;\n }\n }\n\n\n .rubric {\n margin: 30px 0 10px 0;\n }\n\n\n .field-body {\n padding-left: 40px;\n ul {\n padding: 0 0 0 16px;\n margin: 0;\n }\n }\n\n // .docutils > dt {\n // padding: 6px;\n // display: table;\n // margin-bottom: 6px;\n // border: none;\n // border-left: solid 3px #ccc;\n // background: #f0f0f0;\n // color: #555;\n // }\n\n .seealso .docutils > dt {\n float: left;\n clear: left;\n padding: 0 6px;\n }\n\n .seealso .docutils > dd {\n padding-left: 6em;\n }\n .nblast {\n padding-bottom: 1em;\n }\n\n pre {\n font-size: 90%;\n background: #eee;\n color: #455A64;\n padding: 16px 32px;\n width: auto;\n border-radius: 4px;\n word-wrap: break-word;\n\n &:hover {\n @extend .mdl-shadow--2dp;\n\n &:before {\n font-family: $body_font_family;\n padding: 0 0.5rem;\n content: attr(click-to-copy);\n color: rgba(0, 0, 0, 0.5);\n border-radius: 4px;\n position: relative;\n float: right;\n top: -0.5rem;\n right: -0.5rem;\n background: rgb(200, 200, 200);\n font-size: 0.8rem;\n cursor: pointer;\n }\n }\n }\n}\n","/*\n * Quotation Block Styles\n */\n .page-content {\n blockquote {\n font-size: 1rem;\n padding: 0 1rem;\n border-left: 3px solid $code_background;\n\n &:after {\n content: \"\" !important;\n margin-left: 0;\n }\n &:before {\n content: \"\" !important;\n }\n }\n }\n",".page-content {\n table:not(.footnote):not(.indextable):not(.hlist):not(.option-list):not(.field-list) {\n @extend .mdl-data-table;\n @extend .mdl-shadow--2dp;\n\n margin: 1.5rem 0;\n table-layout: fixed;\n max-width: 100%;\n min-width: 70%;\n\n th, td {\n @extend .mdl-data-table__cell--non-numeric;\n white-space: normal;\n overflow-wrap: break-word;\n }\n\n caption {\n font-size: $font_size;\n margin: 1rem 0 0.8rem 0;\n white-space: normal;\n .caption-number {\n font-style: normal;\n }\n .caption-number::after {\n content: \"\\00a0\";\n }\n }\n\n }\n}\n",".globaltoc {\n \n .caption, .toc {\n display: none;\n }\n\n ul {\n\n list-style-type: none;\n padding: 0;\n margin: 0;\n\n li {\n min-height: 18px;\n .link-wrapper {\n display: flex;\n justify-content: space-between;\n > a {\n padding: 4px 0;\n display: block;\n width: 100%;\n font-size: 1rem;\n text-decoration: none;\n color: $layout-drawer-navigation-color;\n &.current {\n font-weight: bold;\n }\n }\n }\n }\n }\n\n .nav-toggle {\n padding: 0;\n float: right;\n display: flex;\n align-items: center;\n justify-content: center;\n height: 36px;\n > a {\n padding: 0;\n margin-left: 0;\n margin-right: 4px;\n cursor: pointer;\n > i {\n font-size: 18px;\n }\n }\n &.show {\n transform: rotateZ(180deg);\n > a {\n margin-right: 0;\n margin-left: 4px;\n }\n }\n }\n\n nav {\n > ul > li > span.link-wrapper {\n padding-left: 8px;\n }\n > ul > li > ul > li > span.link-wrapper {\n padding-left: 16px;\n }\n > ul > li > ul > li > ul > li > span.link-wrapper {\n padding-left: 24px;\n }\n > ul > li > ul > li > ul > li > ul> li > span.link-wrapper {\n padding-left: 32px;\n }\n > ul > li > ul > li > ul > li > ul > li > ul> li > span.link-wrapper {\n padding-left: 40px;\n }\n > ul > li > ul > li > ul > li > ul > li > ul > li > ul> li > span.link-wrapper {\n padding-left: 48px;\n }\n }\n}\n",".localtoc {\n font-size: 0.75rem;\n padding-top: 1rem;\n\n .caption {\n padding-left: 12px;\n &-text {\n font-size: 0.9rem;\n font-weight: 700;\n }\n }\n\n > ul > li > a {\n display: none;\n }\n\n ul {\n padding: 0;\n list-style-type: none;\n }\n\n li {\n padding-left: 6px;\n }\n\n a {\n display: block;\n text-decoration: none;\n color: inherit;\n margin-top: 8px;\n padding-left: 8px;\n line-height: 1.1rem;\n \n &.current {\n padding-left: 5px;\n border-left: 3px solid;\n font-weight: bold;\n }\n }\n}","/*\r\n * Toctree and Contents Directive Styles\r\n */\r\n .toctree-wrapper,\r\n .contents.topic {\r\n border-left: 5px solid;\r\n }\r\n\r\n .toctree-wrapper > p.caption,\r\n .contents.topic > p.topic-title {\r\n color: rgb(117, 117, 117);\r\n font-size: 1rem;\r\n padding-left: 14px;\r\n }\r\n\r\n .toctree-wrapper ul,\r\n .contents.topic ul{\r\n padding-left: 14px;\r\n list-style: none;\r\n line-height: 30px;\r\n }\r\n\r\n .toctree-wrapper a,\r\n .contents.topic a {\r\n font-size: 1.2rem;\r\n text-decoration: none;\r\n .pre {\r\n font-size: 1rem;\r\n }\r\n }\r\n\r\n .toctree-wrapper > ul > li > a,\r\n .contents.topic > ul > li > a {\r\n font-size: 1.3rem;\r\n .pre {\r\n font-size: 1.1rem;\r\n }\r\n }\r\n",".page-content {\n ul {\n li {\n margin: .3rem 0;\n p {\n margin: 0;\n }\n }\n }\n .option-list {\n .option {\n font-family: $code_font_family;\n }\n td {\n padding: 0.5rem;\n border: none;\n }\n }\n}\n","/*\r\n * Drawer Styles\r\n */\r\n.mdl-layout {\r\n &__drawer {\r\n background-color: #fff;\r\n\r\n &::-webkit-scrollbar {\r\n width: 6px;\r\n }\r\n\r\n &::-webkit-scrollbar-track {\r\n border-radius: 6px;\r\n }\r\n\r\n &::-webkit-scrollbar-thumb {\r\n background-color: rgba(0, 0, 0, .3);\r\n border-radius: 6px;\r\n box-shadow:0 0 0 1px rgba(255, 255, 255, .3);\r\n }\r\n\r\n > .mdl-layout-title {\r\n font-weight: bold;\r\n text-align: right;\r\n margin: 0;\r\n padding: 0;\r\n line-height: 32px;\r\n border-bottom: 1px solid rgba(0,0,0,.1);\r\n min-height: 64px;\r\n .title {\r\n color: inherit;\r\n display: block;\r\n height: 100%;\r\n width: 100%;\r\n text-decoration: none;\r\n > img.logo {\r\n width: 100%;\r\n margin: 0;\r\n padding: 0;\r\n }\r\n\r\n &-text {\r\n font-weight: bold;\r\n text-align: right;\r\n padding: 0 10px;\r\n margin: 16px 0 8px 0;\r\n line-height: 32px;\r\n font-family: $body_font_family;\r\n color: inherit;\r\n display: block;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","/*\r\n * Header Styles\r\n */\r\n\r\nnav.breadcrumb {\r\n > a.mdl-navigation__link {\r\n padding: 0 8px;\r\n font-size: 18px;\r\n }\r\n @media (max-width: $lg-breakpoint - 1) {\r\n width: calc( 100% - 64px );\r\n a.mdl-navigation__link.is-active {\r\n overflow-x: hidden;\r\n width: 100%;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n text-overflow: ellipsis;\r\n }\r\n a.mdl-navigation__link:not(.is-active),\r\n i.material-icons {\r\n display: none;\r\n }\r\n }\r\n}\r\n\r\ndiv.mdl-layout__header {\r\n margin-top: 77px;\r\n}\r\n\r\n.mdl-layout__drawer-button {\r\n top: 13px !important;\r\n}\r\n\r\ndiv.mdl-layout__header-row.header-links {\r\n background: rgba(255,255,255,0.2);\r\n width: 100%;\r\n overflow-x: auto;\r\n overflow-y: hidden;\r\n\r\n a.mdl-navigation__link {\r\n font-size: 1rem;\r\n i {\r\n font-size: 1.2rem;\r\n margin: 0 8px;\r\n position: relative;\r\n bottom: -0.1rem;\r\n }\r\n };\r\n\r\n a.mdl-navigation__link:hover {\r\n background-color: unquote(\"rgb(#{$color-primary})\");\r\n color: #eeeeee;\r\n };\r\n a.mdl-navigation__link[href=\"#\"] {\r\n background-color: unquote(\"rgb(#{$color-primary})\");\r\n opacity: 1;\r\n color: #ffffff;\r\n };\r\n}\r\n\r\n/* mxnet-header */\r\n\r\n\r\n.site-title {\r\n font-weight: 300 !important;\r\n line-height: 57px;\r\n letter-spacing: -1px;\r\n margin-bottom: 0;\r\n float: left;\r\n color: white;\r\n\r\n &,\r\n &:visited {\r\n color: $grey-color-dark;\r\n }\r\n}\r\n\r\n\r\n.site-header {\r\n position: fixed;\r\n top: 0;\r\n width: 100%;\r\n min-height: 55px;\r\n padding-top: 10px;\r\n padding-bottom: 10px;\r\n background-color: $color-mxnet;\r\n z-index: 10;\r\n font-weight: 300;\r\n font-size: 17px;\r\n border-bottom: 1px solid white;\r\n}\r\n\r\n.site-header-logo {\r\n width: 120px;\r\n display: initial;\r\n}\r\n\r\n.site-nav {\r\n float: right;\r\n line-height: 57px;\r\n\r\n .nav-trigger {\r\n display: none;\r\n }\r\n\r\n .menu-icon {\r\n display: none;\r\n }\r\n\r\n .page-link {\r\n color: white;\r\n line-height: 1.5;\r\n font-weight: 300;\r\n // Gaps between nav items, but not on the last one\r\n &:not(:last-child) {\r\n margin-right: 40px;\r\n }\r\n\r\n &:hover {\r\n color: white;\r\n text-shadow: -0.06ex 0 white, 0.06ex 0 white;\r\n }\r\n }\r\n\r\n .page-link.page-current {\r\n color: white;\r\n text-decoration: underline;\r\n }\r\n\r\n @media screen and (max-width: $on-laptop) {\r\n position: absolute;\r\n top: 9px;\r\n right: 15px;\r\n background-color: rgb(23,141,201);\r\n border-radius: 2px;\r\n text-align: right;\r\n\r\n label[for=\"nav-trigger\"] {\r\n display: block;\r\n float: right;\r\n width: 36px;\r\n height: 36px;\r\n z-index: 2;\r\n cursor: pointer;\r\n }\r\n\r\n .menu-icon {\r\n display: block;\r\n float: right;\r\n width: 36px;\r\n height: 26px;\r\n line-height: 0;\r\n padding-top: 20px;\r\n text-align: center;\r\n\r\n > svg {\r\n fill: white;\r\n }\r\n }\r\n\r\n input ~ .trigger {\r\n clear: both;\r\n display: none;\r\n }\r\n\r\n input:checked ~ .trigger {\r\n display: block;\r\n padding-bottom: 5px;\r\n }\r\n\r\n .page-link {\r\n padding: 5px 10px;\r\n display: block;\r\n\r\n &:not(:last-child) {\r\n margin-right: 0;\r\n }\r\n\r\n margin-left: 20px;\r\n }\r\n }\r\n}","/*\r\n * Footer Styles\r\n */\r\nfooter.mdl-mini-footer {\r\n background-color: #212121;\r\n > div.mdl-mini-footer__left-section {\r\n margin-bottom: 20px;\r\n display: flex;\r\n flex-direction: column;\r\n .mdl-logo {\r\n font-size: 1.1rem;\r\n }\r\n ul {\r\n @extend .mdl-mini-footer__link-list;\r\n }\r\n }\r\n > div.mdl-mini-footer__right-section {\r\n font-size: 0.9rem;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: flex-end;\r\n\r\n a {\r\n color: inherit;\r\n font-weight: bold;\r\n text-decoration: none;\r\n }\r\n }\r\n p.caption {\r\n display: none;\r\n }\r\n}\r\n\r\n/*\r\n * Pagenation Block Styles\r\n */\r\n .pagenation {\r\n width: 100%;\r\n margin-top: 80px;\r\n height: 92px;\r\n background-color: #424242;\r\n display: flex;\r\n\r\n .button-common {\r\n text-transform: none;\r\n padding: 0;\r\n height: 92px;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n color: #ffffff;\r\n }\r\n #button-prev {\r\n @extend .button-common;\r\n margin-right: auto;\r\n .pagenation-text {\r\n text-align: left;\r\n }\r\n \r\n }\r\n #button-next {\r\n @extend .button-common;\r\n margin-left: auto;\r\n flex-direction: row-reverse;\r\n .pagenation-text {\r\n text-align: right;\r\n }\r\n }\r\n\r\n &-arrow {\r\n &-L {\r\n margin-right: 20px;\r\n }\r\n &-R {\r\n margin-left: 20px;\r\n }\r\n }\r\n\r\n &-text {\r\n line-height: 30px;\r\n font-size: 20px;\r\n }\r\n\r\n &-direction {\r\n opacity: 0.7;\r\n font-size: 18px;\r\n }\r\n @media screen and (max-width: 1024px) {\r\n #button-prev {\r\n width: 20%;\r\n }\r\n \r\n #button-next {\r\n width: 80%;\r\n }\r\n \r\n #button-prev .pagenation-text {\r\n display: none;\r\n }\r\n }\r\n @media screen and (min-width: 1025px) {\r\n #button-prev,\r\n #button-next {\r\n width: 50%;\r\n }\r\n \r\n #button-prev .pagenation-text {\r\n display: block;\r\n }\r\n }\r\n}\r\n\r\n\r\n\r\n/**\r\n * Site footer\r\n */\r\n.site-footer {\r\n border-top: 1px solid $grey-color-light;\r\n padding: $spacing-unit 0;\r\n background-color: #424242;\r\n position: relative;\r\n z-index: 10;\r\n .footer-category-title {\r\n color: $color-mxnet;\r\n }\r\n a {\r\n color: $grey-color-light !important;\r\n\r\n &:visited {\r\n color: $grey-color-light !important;\r\n }\r\n }\r\n\r\n}\r\n\r\n.site-footer2 {\r\n background-color: #424242;\r\n padding-top: 40px;\r\n padding-bottom: 10px;\r\n position: relative;\r\n z-index: 10;\r\n}\r\n\r\n.footer-heading {\r\n margin-bottom: $spacing-unit / 2;\r\n}\r\n\r\n.contact-list,\r\n.social-media-list {\r\n list-style: none;\r\n margin-left: 0;\r\n}\r\n\r\n\r\n.footer-bottom-warning {\r\n font-size: 80%;\r\n color: white;\r\n float: left;\r\n}\r\n\r\n.footer-logo {\r\n width: 200px;\r\n margin-bottom: 30px;\r\n margin-top: 30px;\r\n}\r\n\r\n.footer-col {\r\n float: left;\r\n margin-bottom: $spacing-unit / 2;\r\n padding-left: $spacing-unit / 2;\r\n}\r\n\r\n.footer-text {\r\n color: $grey-color-light;\r\n}\r\n\r\n"," /*\r\n * Search Styles\r\n */\r\n#waterfall-exp::-webkit-input-placeholder {\r\n color: #ccc;\r\n}\r\n#waterfall-exp:-ms-input-placeholder {\r\n color: #ccc;\r\n}\r\n#waterfall-exp::-moz-placeholder {\r\n color: #ccc;\r\n}\r\n\r\nul.search span.highlighted {\r\n font-weight: bold;\r\n}\r\n\r\nul.search > li {\r\n margin-bottom: 24px;\r\n}\r\n\r\n#search-results {\r\n ul {\r\n list-style: none;\r\n padding: 0;\r\n li {\r\n > a {\r\n text-decoration: none;\r\n font-size: 1.2rem;\r\n }\r\n }\r\n }\r\n}\r\n","a.download {\n &:before {\n @extend .material-icons;\n content: \"file_download\";\n position: relative;\n top: 5px;\n margin-right: 5px;\n }\n}\n\nbutton.download {\n position: sticky;\n margin-left: 1em;\n}\n",".mdl-card {\n margin: 1em 1.5em 1em 0;\n display: inline-block;\n width: 250px;\n min-height: 140px;\n padding: 18px;\n}\n.mdl-card:hover {\n box-shadow: 0 10px 20px rgba(0,0,0,0.25), 0 6px 6px rgba(0,0,0,0.22);\n color: #000;\n cursor: pointer;\n}\n.mdl-card__title {\n padding: 0 0 1em 0;\n font-size: 18px;\n color: #444;\n}\n\n.mdl-card__supporting-text {\n line-height: 1.5rem;\n padding: 0px;\n width: 100%;\n}\n\n.head-card.mdl-card {\n width: auto;\n display: block;\n max-width: 800px;\n padding: 24px;\n}\n\n.head-card > .mdl-card__title {\n padding-bottom: 0px;\n height: 60px;\n font-weight: 700;\n text-transform: uppercase;\n}\n.head-card > .mdl-card__menu {\n color: #fff;\n}\n.head-card > .mdl-card__actions {\n padding: 0;\n}\n.cards {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n}\n"]} \ No newline at end of file diff --git a/docs/python_docs/themes/mx-theme/src/js/feedback.js~HEAD b/docs/python_docs/themes/mx-theme/src/js/feedback.js~HEAD new file mode 100644 index 000000000000..f45423765b74 --- /dev/null +++ b/docs/python_docs/themes/mx-theme/src/js/feedback.js~HEAD @@ -0,0 +1,33 @@ +/*! + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +$(document).ready(function() { + $(".feedback-answer").on("click", function () { + $(".feedback-question").remove(); + $(".feedback-answer-container").remove(); + $(".feedback-thank-you").show(); + ga("send", { + hitType: "event", + eventCategory: "Did this page help you?", + eventAction: $(this).attr("data-response"), + eventLabel: window.location.pathname || "unknown", + eventValue: $(this).attr("data-response") === "yes" ? 1 : 0 + }); + }); +}); diff --git a/docs/python_docs/themes/mx-theme/src/js/feedback.js~HEAD_0 b/docs/python_docs/themes/mx-theme/src/js/feedback.js~HEAD_0 new file mode 100644 index 000000000000..f45423765b74 --- /dev/null +++ b/docs/python_docs/themes/mx-theme/src/js/feedback.js~HEAD_0 @@ -0,0 +1,33 @@ +/*! + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +$(document).ready(function() { + $(".feedback-answer").on("click", function () { + $(".feedback-question").remove(); + $(".feedback-answer-container").remove(); + $(".feedback-thank-you").show(); + ga("send", { + hitType: "event", + eventCategory: "Did this page help you?", + eventAction: $(this).attr("data-response"), + eventLabel: window.location.pathname || "unknown", + eventValue: $(this).attr("data-response") === "yes" ? 1 : 0 + }); + }); +}); diff --git a/docs/python_docs/themes/mx-theme/src/js/feedback.js~upstream_master b/docs/python_docs/themes/mx-theme/src/js/feedback.js~upstream_master new file mode 100644 index 000000000000..f45423765b74 --- /dev/null +++ b/docs/python_docs/themes/mx-theme/src/js/feedback.js~upstream_master @@ -0,0 +1,33 @@ +/*! + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +$(document).ready(function() { + $(".feedback-answer").on("click", function () { + $(".feedback-question").remove(); + $(".feedback-answer-container").remove(); + $(".feedback-thank-you").show(); + ga("send", { + hitType: "event", + eventCategory: "Did this page help you?", + eventAction: $(this).attr("data-response"), + eventLabel: window.location.pathname || "unknown", + eventValue: $(this).attr("data-response") === "yes" ? 1 : 0 + }); + }); +}); diff --git a/docs/python_docs/themes/mx-theme/src/js/feedback.js~upstream_master_0 b/docs/python_docs/themes/mx-theme/src/js/feedback.js~upstream_master_0 new file mode 100644 index 000000000000..f45423765b74 --- /dev/null +++ b/docs/python_docs/themes/mx-theme/src/js/feedback.js~upstream_master_0 @@ -0,0 +1,33 @@ +/*! + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +$(document).ready(function() { + $(".feedback-answer").on("click", function () { + $(".feedback-question").remove(); + $(".feedback-answer-container").remove(); + $(".feedback-thank-you").show(); + ga("send", { + hitType: "event", + eventCategory: "Did this page help you?", + eventAction: $(this).attr("data-response"), + eventLabel: window.location.pathname || "unknown", + eventValue: $(this).attr("data-response") === "yes" ? 1 : 0 + }); + }); +}); diff --git a/docs/python_docs/themes/mx-theme/src/scss/layout/_layout.scss b/docs/python_docs/themes/mx-theme/src/scss/layout/_layout.scss index be12d9406b16..e2cc395d2f49 100644 --- a/docs/python_docs/themes/mx-theme/src/scss/layout/_layout.scss +++ b/docs/python_docs/themes/mx-theme/src/scss/layout/_layout.scss @@ -56,11 +56,12 @@ display: none; } &--content { - position: fixed; + position: sticky; overflow-x: auto; overflow-y: auto; width: inherit; right: 0px; + top: 80px; &::-webkit-scrollbar { width: 6px; } diff --git a/docs/static_site/src/pages/api/faq/cloud.md b/docs/static_site/src/pages/api/faq/cloud.md index 2a5837b017eb..dd1643cb54a1 100644 --- a/docs/static_site/src/pages/api/faq/cloud.md +++ b/docs/static_site/src/pages/api/faq/cloud.md @@ -37,40 +37,16 @@ and maintain the resources for precisely the amount of time needed. In this document, we provide a step-by-step guide that will teach you how to set up an AWS cluster with _MXNet_. We show how to: -- [Use Amazon S3 to host data](#use-amazon-s3-to-host-data) -- [Set up an EC2 GPU instance with all dependencies installed](#set-up-an-ec2-gpu-instance) +- [Use Pre-installed EC2 GPU Instance](#use-pre-installed-ec2-gpu-instance) - [Build and run MXNet on a single computer](#build-and-run-mxnet-on-a-gpu-instance) - [Set up an EC2 GPU cluster for distributed training](#set-up-an-ec2-gpu-cluster-for-distributed-training) -### Use Amazon S3 to Host Data - -Amazon S3 provides distributed data storage which proves especially convenient for hosting large datasets. -To use S3, you need [AWS credentials](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSGettingStartedGuide/AWSCredentials.html), -including an `ACCESS_KEY_ID` and a `SECRET_ACCESS_KEY`. - -To use _MXNet_ with S3, set the environment variables `AWS_ACCESS_KEY_ID` and -`AWS_SECRET_ACCESS_KEY` by adding the following two lines in -`~/.bashrc` (replacing the strings with the correct ones): - -```bash -export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE -export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY -``` - -There are several ways to upload data to S3. One simple way is to use -[s3cmd](https://s3tools.org/s3cmd). For example: - -```bash -wget http://data.mxnet.io/mxnet/data/mnist.zip -unzip mnist.zip && s3cmd put t*-ubyte s3://dmlc/mnist/ -``` - ### Use Pre-installed EC2 GPU Instance The [Deep Learning AMIs](https://aws.amazon.com/marketplace/search/results?x=0&y=0&searchTerms=Deep+Learning+AMI) are a series of images supported and maintained by Amazon Web Services for use on Amazon Elastic Compute Cloud (Amazon EC2) and contain the latest MXNet release. -Now you can launch _MXNet_ directly on an EC2 GPU instance. +Now you can launch _MXNet_ directly on an EC2 GPU instance. You can also use [Jupyter](https://jupyter.org) notebook on EC2 machine. Here is a [good tutorial](https://github.com/dmlc/mxnet-notebooks) on how to connect to a Jupyter notebook running on an EC2 instance. @@ -81,7 +57,7 @@ on how to connect to a Jupyter notebook running on an EC2 instance. provide a foundational image with NVIDIA CUDA, cuDNN, GPU drivers, Intel MKL-DNN, Docker and Nvidia-Docker, etc. for deploying your own custom deep learning environment. You may follow the [MXNet Build From Source -instructions](= "1.5.0": + node = onnx.helper.make_node( + pool_types[pool_type], + input_nodes, # input + [name], + kernel_shape=kernel, + pads=pad_dims, + strides=stride, + name=name, + ceil_mode=ceil_mode + ) + else: + node = onnx.helper.make_node( + pool_types[pool_type], + input_nodes, # input + [name], + kernel_shape=kernel, + pads=pad_dims, + strides=stride, + name=name + ) return [node] diff --git a/python/mxnet/gluon/loss.py b/python/mxnet/gluon/loss.py index bc447b0f1c55..75d8981bd02a 100644 --- a/python/mxnet/gluon/loss.py +++ b/python/mxnet/gluon/loss.py @@ -77,18 +77,28 @@ def _reshape_like(F, x, y): def _batch_mean(F, loss, batch_axis): """Return mean on the specified batch axis, not keeping the axis""" if is_np_array(): - axes = list(range(loss.ndim)) - del axes[batch_axis] - return F.np.mean(loss, axis=axes) + if F is ndarray: + axes = list(range(loss.ndim)) + del axes[batch_axis] + return F.np.mean(loss, axis=axes) + else: + assert batch_axis == 0, 'Currently, we have not supported the "exclude" ' \ + 'flag in mean. So we only support batch_axis=0.' + return F.npx.batch_flatten(loss).mean(axis=1) else: return F.mean(loss, axis=batch_axis, exclude=True) def _batch_sum(F, loss, batch_axis): """Return sum on the specified batch axis, not keeping the axis""" if is_np_array(): - axes = list(range(loss.ndim)) - del axes[batch_axis] - return F.np.sum(loss, axis=axes) + if F is ndarray: + axes = list(range(loss.ndim)) + del axes[batch_axis] + return F.np.sum(loss, axis=axes) + else: + assert batch_axis == 0, 'Currently, we have not supported the "exclude" ' \ + 'flag in mean. So we only support batch_axis=0.' + return F.npx.batch_flatten(loss).sum(axis=1) else: return F.sum(loss, axis=batch_axis, exclude=True) @@ -899,8 +909,8 @@ def hybrid_forward(self, F, pred, target, sample_weight=None, epsilon=1e-08): stirling_factor = target * \ log_fn(target) - target + 0.5 * log_fn(2 * target * np.pi) target_gt_1 = target > 1 - stirling_factor *= target_gt_1 - loss += stirling_factor + stirling_factor = stirling_factor * target_gt_1 + loss = loss + stirling_factor loss = _apply_weighting(F, loss, self._weight, sample_weight) return _batch_mean(F, loss, self._batch_axis) @@ -1023,7 +1033,8 @@ class SDMLLoss(Loss): def __init__(self, smoothing_parameter=0.3, weight=1., batch_axis=0, **kwargs): super(SDMLLoss, self).__init__(weight, batch_axis, **kwargs) self.kl_loss = KLDivLoss(from_logits=True) - self.smoothing_parameter = smoothing_parameter # Smoothing probability mass + # Smoothing probability mass + self.smoothing_parameter = smoothing_parameter def _compute_distances(self, F, x1, x2): """ @@ -1032,17 +1043,13 @@ def _compute_distances(self, F, x1, x2): """ if is_np_array(): expand_dims_fn = F.np.expand_dims - broadcast_to_fn = F.np.broadcast_to else: expand_dims_fn = F.expand_dims - broadcast_to_fn = F.broadcast_to - - # extracting sizes expecting [batch_size, dim] - assert x1.shape == x2.shape - batch_size, dim = x1.shape - # expanding both tensor form [batch_size, dim] to [batch_size, batch_size, dim] - x1_ = broadcast_to_fn(expand_dims_fn(x1, 1), [batch_size, batch_size, dim]) - x2_ = broadcast_to_fn(expand_dims_fn(x2, 0), [batch_size, batch_size, dim]) + + # expanding x1 form [batch_size, dim] to [batch_size, 1, dim] + # and x2 to [1, batch_size, dim] + x1_ = expand_dims_fn(x1, 1) + x2_ = expand_dims_fn(x2, 0) # pointwise squared differences squared_diffs = (x1_ - x2_)**2 # sum of squared differences distance @@ -1073,7 +1080,6 @@ def _compute_labels(self, F, batch_size): labels = gold * (1 - self.smoothing_parameter) + (1 - gold) * self.smoothing_parameter / (batch_size - 1) return labels - def hybrid_forward(self, F, x1, x2): """ the function computes the kl divergence between the negative distances @@ -1092,6 +1098,7 @@ def hybrid_forward(self, F, x1, x2): learn to predict french president comparing it with all the other vectors in batch 2 """ + assert F is ndarray, 'SDMLLoss does not support symbolic ' if is_np_array(): log_softmax_fn = F.npx.log_softmax else: diff --git a/python/mxnet/gluon/trainer.py b/python/mxnet/gluon/trainer.py index dc9da80923da..7f1a7d09e585 100644 --- a/python/mxnet/gluon/trainer.py +++ b/python/mxnet/gluon/trainer.py @@ -20,6 +20,7 @@ """Parameter optimizer.""" __all__ = ['Trainer'] +import sys from collections import OrderedDict from .. import optimizer as opt @@ -77,25 +78,34 @@ class Trainer(object): """ def __init__(self, params, optimizer, optimizer_params=None, kvstore='device', compression_params=None, update_on_kvstore=None): + self._param2name = {} + self._param2idx = {} + py_version = sys.version_info + assert isinstance(params, (dict, OrderedDict)), \ + 'invalid params type: {}. Expected dict type'.format(type(params)) + names = list(params.keys()) param_list = [] - if isinstance(params, (dict, OrderedDict)): - for key in sorted(list(params.keys())): - param_list.append(params[key]) - params = param_list - if not isinstance(params, (list, tuple)): - raise ValueError( - "First argument must be a list or dict of Parameters, " \ - "got %s."%(type(params))) + # only python 3.5 requires sorting + if py_version[0] == 3 and py_version[1] == 5: + names = sorted(names) + for name in names: + p = params[name] + if not isinstance(p, Parameter): + raise ValueError( + "First argument must be a dict of Parameters, " \ + "got list of %s."%(type(p))) + param_list.append(p) + # Shared parameters have same uuid; only need to store one of the shared versions + if p._uuid in self._param2name: + continue + self._param2name[p._uuid] = name + params = param_list + self._params = [] # parameters to initialize on the kvstore self._contains_sparse_weight = False self._contains_sparse_grad = False - self._param2idx = {} for i, param in enumerate(params): - if not isinstance(param, Parameter): - raise ValueError( - "First argument must be a list or dict of Parameters, " \ - "got list of %s."%(type(param))) if param._uuid in self._param2idx: # Shared parameters have same uuid; only need to store one of the shared versions continue @@ -388,25 +398,25 @@ def _allreduce_grads(self): return for i, param in enumerate(self._params): if param.grad_req != 'null': - + idx = self._param2idx[param._uuid] grad_list = param.list_grad() # sparse gradients, call push and pull separately if grad_list[0].stype != 'default': - self._kvstore.push(i, grad_list, priority=-i) + self._kvstore.push(idx, grad_list, priority=-i) if param._stype == 'default': if self._update_on_kvstore: pull_list = param.list_data() else: pull_list = param.list_grad() - self._kvstore.pull(i, pull_list, priority=-i, + self._kvstore.pull(idx, pull_list, priority=-i, ignore_sparse=self._distributed) else: # allreduce dense gradients if not update_on_kvstore, # otherwise push dense gradients, pull dense weights if self._update_on_kvstore: - self._kvstore.pushpull(i, grad_list, out=param.list_data(), priority=-i) + self._kvstore.pushpull(idx, grad_list, out=param.list_data(), priority=-i) else: - self._kvstore.pushpull(i, grad_list, priority=-i) + self._kvstore.pushpull(idx, grad_list, priority=-i) def update(self, batch_size, ignore_stale_grad=False): """Makes one step of parameter update. diff --git a/python/mxnet/library.py b/python/mxnet/library.py index 9ce3f7b2223e..487fff940fda 100644 --- a/python/mxnet/library.py +++ b/python/mxnet/library.py @@ -73,14 +73,23 @@ def load(path, verbose=True): func = getattr(mx_sym_op, op) setattr(mx_sym, op, func) -def compiled_with_cxx11_abi(): - """Check if the library is compiled with cxx11 ABI. + +def compiled_with_gcc_cxx11_abi(): + """Check if the library is compiled with _GLIBCXX_USE_CXX11_ABI. + + Please see + https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html for + more information. When building libraries relying on MXNet C++ headers, it + is required to use the same C++ ABI in the library as well as in libmxnet. Returns ------- - bool - Whether the library is compiled with cxx11 ABI. + int + 1 If compiled with _GLIBCXX_USE_CXX11_ABI=1 + 0 If compiled with _GLIBCXX_USE_CXX11_ABI=0 + -1 If compiled with a compiler that does not support _GLIBCXX_USE_CXX11_ABI + """ - ret = ctypes.c_bool() + ret = ctypes.c_int() check_call(_LIB.MXLibInfoCompiledWithCXX11ABI(ctypes.byref(ret))) return ret.value diff --git a/python/mxnet/ndarray/numpy/_op.py b/python/mxnet/ndarray/numpy/_op.py index 14dbf94a1417..e3af383d3acd 100644 --- a/python/mxnet/ndarray/numpy/_op.py +++ b/python/mxnet/ndarray/numpy/_op.py @@ -1620,7 +1620,7 @@ def argsort(a, axis=-1, kind=None, order=None): if order is not None: raise NotImplementedError("order not supported here") - return _npi.argsort(data=a, axis=axis, is_ascend=True, dtype='int64') + return _api_internal.argsort(a, axis, True, 'int64') @set_module('mxnet.ndarray.numpy') @@ -1664,7 +1664,7 @@ def sort(a, axis=-1, kind=None, order=None): """ if order is not None: raise NotImplementedError("order not supported here") - return _npi.sort(data=a, axis=axis, is_ascend=True) + return _api_internal.sort(a, axis, True) @set_module('mxnet.ndarray.numpy') @@ -4581,7 +4581,7 @@ def get_list(arrays): return [arr for arr in arrays] arrays = get_list(arrays) - return _npi.vstack(*arrays) + return _api_internal.vstack(*arrays) @set_module('mxnet.ndarray.numpy') @@ -4626,7 +4626,7 @@ def get_list(arrays): return [arr for arr in arrays] arrays = get_list(arrays) - return _npi.vstack(*arrays) + return _api_internal.vstack(*arrays) @set_module('mxnet.ndarray.numpy') diff --git a/python/mxnet/ndarray/numpy/random.py b/python/mxnet/ndarray/numpy/random.py index c2a2c0bf78ec..f55355a64326 100644 --- a/python/mxnet/ndarray/numpy/random.py +++ b/python/mxnet/ndarray/numpy/random.py @@ -21,7 +21,6 @@ from ...context import current_context from . import _internal as _npi from . import _api_internal -from ..ndarray import NDArray __all__ = ['randint', 'uniform', 'normal', "choice", "rand", "multinomial", "multivariate_normal", @@ -331,14 +330,11 @@ def multinomial(n, pvals, size=None): >>> np.random.multinomial(100, [1.0 / 3, 2.0 / 3]) array([32, 68]) """ - if isinstance(pvals, NDArray): - return _npi.multinomial(pvals, pvals=None, n=n, size=size) - else: - if isinstance(pvals, np.ndarray): - raise ValueError('numpy ndarray is not supported!') - if any(isinstance(i, list) for i in pvals): - raise ValueError('object too deep for desired array') - return _npi.multinomial(n=n, pvals=pvals, size=size) + if isinstance(pvals, np.ndarray): + raise ValueError('numpy ndarray is not supported!') + if any(isinstance(i, list) for i in pvals): + raise ValueError('object too deep for desired array') + return _api_internal.multinomial(n, pvals, size) def rayleigh(scale=1.0, size=None, ctx=None, out=None): diff --git a/python/mxnet/symbol/numpy/_symbol.py b/python/mxnet/symbol/numpy/_symbol.py index 2df7357e0c03..ee465442d159 100644 --- a/python/mxnet/symbol/numpy/_symbol.py +++ b/python/mxnet/symbol/numpy/_symbol.py @@ -8012,7 +8012,7 @@ def diagonal(a, offset=0, axis1=0, axis2=1): # pylint:disable=redefined-outer-name, too-many-arguments @set_module('mxnet.symbol.numpy') -def sum(a, axis=None, dtype=None, out=None, keepdims=None, initial=None, where=None): +def sum(a, axis=None, dtype=None, out=None, keepdims=False, initial=None, where=None): r""" Sum of array elements over a given axis. diff --git a/python/mxnet/test_utils.py b/python/mxnet/test_utils.py index cb71c7dd46b9..da4f35f8817f 100644 --- a/python/mxnet/test_utils.py +++ b/python/mxnet/test_utils.py @@ -1764,10 +1764,15 @@ def download(url, fname=None, dirname=None, overwrite=False, retries=5): def get_mnist(path='data'): """Download and load the MNIST dataset + Parameters + ---------- + path : str + Path in which to save the files. + Returns ------- dict - A dict containing the data + A dict containing the data. """ def read_data(label_url, image_url): if not os.path.isdir(path): @@ -1782,8 +1787,7 @@ def read_data(label_url, image_url): return (label, image) # changed to mxnet.io for more stable hosting - # path = 'http://yann.lecun.com/exdb/mnist/' - url_path = 'http://data.mxnet.io/data/mnist/' + url_path = 'https://repo.mxnet.io/gluon/dataset/mnist/' (train_lbl, train_img) = read_data( url_path+'train-labels-idx1-ubyte.gz', url_path+'train-images-idx3-ubyte.gz') (test_lbl, test_img) = read_data( @@ -1791,17 +1795,6 @@ def read_data(label_url, image_url): return {'train_data':train_img, 'train_label':train_lbl, 'test_data':test_img, 'test_label':test_lbl} -def get_mnist_pkl(path='data'): - """Downloads MNIST dataset as a pkl.gz into a directory in the current directory - with the name `data` - """ - if not os.path.isdir(path): - os.makedirs(path) - if not os.path.exists(os.path.join(path, 'mnist.pkl.gz')): - mx.gluon.utils.download('http://deeplearning.net/data/mnist/mnist.pkl.gz', - sha1_hash='0b07d663e8a02d51849faa39e226ed19d7b7ed23', - path=path) - def get_mnist_ubyte(path='data'): """Downloads ubyte version of the MNIST dataset into a directory in the current directory with the name `data` and extracts all files in the zip archive to this directory. @@ -1811,12 +1804,13 @@ def get_mnist_ubyte(path='data'): files = ['train-images-idx3-ubyte', 'train-labels-idx1-ubyte', 't10k-images-idx3-ubyte', 't10k-labels-idx1-ubyte'] if not all(os.path.exists(os.path.join(path, f)) for f in files): - url = 'http://data.mxnet.io/mxnet/data/mnist.zip' - sha1 = '74fc763958b9d6e04eb32717f80355bf895f0561' - zip_file_path = mx.gluon.utils.download(url, path=path, sha1_hash=sha1, - verify_ssl=False) - with zipfile.ZipFile(zip_file_path) as zf: - zf.extractall(path) + get_mnist(path) + for f in files: + ubyte_file_path = os.path.join(path, f) + zip_file_path = ubyte_file_path + '.gz' + with gzip.GzipFile(zip_file_path) as zf: + with open(ubyte_file_path, 'wb') as ubyte_file: + ubyte_file.write(zf.read()) def get_cifar10(path='data'): """Downloads CIFAR10 dataset into a directory in the current directory with the name `data`, @@ -1828,23 +1822,23 @@ def get_cifar10(path='data'): (not os.path.exists(os.path.join(path, 'cifar', 'test.rec'))) or \ (not os.path.exists(os.path.join(path, 'cifar', 'train.lst'))) or \ (not os.path.exists(os.path.join(path, 'cifar', 'test.lst'))): - url = 'http://data.mxnet.io/mxnet/data/cifar10.zip' + url = 'https://repo.mxnet.io/gluon/dataset/cifar10/cifar10-b9ac2870.zip' sha1 = 'b9ac287012f2dad9dfb49d8271c39ecdd7db376c' zip_file_path = mx.gluon.utils.download(url, path=path, sha1_hash=sha1, verify_ssl=False) with zipfile.ZipFile(zip_file_path) as zf: zf.extractall(path) -def get_mnist_iterator(batch_size, input_shape, num_parts=1, part_index=0): +def get_mnist_iterator(batch_size, input_shape, num_parts=1, part_index=0, path='data'): """Returns training and validation iterators for MNIST dataset """ - get_mnist_ubyte() + get_mnist_ubyte(path) flat = len(input_shape) != 3 train_dataiter = mx.io.MNISTIter( - image="data/train-images-idx3-ubyte", - label="data/train-labels-idx1-ubyte", + image=os.path.join(path, "train-images-idx3-ubyte"), + label=os.path.join(path, "train-labels-idx1-ubyte"), input_shape=input_shape, batch_size=batch_size, shuffle=True, @@ -1853,8 +1847,8 @@ def get_mnist_iterator(batch_size, input_shape, num_parts=1, part_index=0): part_index=part_index) val_dataiter = mx.io.MNISTIter( - image="data/t10k-images-idx3-ubyte", - label="data/t10k-labels-idx1-ubyte", + image=os.path.join(path, "t10k-images-idx3-ubyte"), + label=os.path.join(path, "t10k-labels-idx1-ubyte"), input_shape=input_shape, batch_size=batch_size, flat=flat, @@ -1863,31 +1857,6 @@ def get_mnist_iterator(batch_size, input_shape, num_parts=1, part_index=0): return (train_dataiter, val_dataiter) -def get_zip_data(data_dir, url, data_origin_name): - """Download and extract zip data. - - Parameters - ---------- - - data_dir : str - Absolute or relative path of the directory name to store zip files - url : str - URL to download data from - data_origin_name : str - Name of the downloaded zip file - - Examples - -------- - >>> get_zip_data("data_dir", - "http://files.grouplens.org/datasets/movielens/ml-10m.zip", - "ml-10m.zip") - """ - data_origin_name = os.path.join(data_dir, data_origin_name) - if not os.path.exists(data_origin_name): - download(url, dirname=data_dir, overwrite=False) - zip_file = zipfile.ZipFile(data_origin_name) - zip_file.extractall(path=data_dir) - def get_bz2_data(data_dir, data_name, url, data_origin_name): """Download and extract bz2 data. diff --git a/src/api/operator/numpy/np_matrix_op.cc b/src/api/operator/numpy/np_matrix_op.cc index 7b53c580683a..61d179647a88 100644 --- a/src/api/operator/numpy/np_matrix_op.cc +++ b/src/api/operator/numpy/np_matrix_op.cc @@ -615,4 +615,24 @@ MXNET_REGISTER_API("_npi.tril_indices") *ret = ADT(0, ndarray_handles.begin(), ndarray_handles.end()); }); +MXNET_REGISTER_API("_npi.vstack") +.set_body([](runtime::MXNetArgs args, runtime::MXNetRetValue* ret) { + using namespace runtime; + const nnvm::Op* op = Op::Get("_npi_vstack"); + nnvm::NodeAttrs attrs; + op::NumpyVstackParam param; + param.num_args = args.size(); + + attrs.parsed = param; + attrs.op = op; + SetAttrDict(&attrs); + int num_outputs = 0; + std::vector inputs_vec(args.size(), nullptr); + for (int i = 0; i < args.size(); ++i) { + inputs_vec[i] = args[i].operator mxnet::NDArray*(); + } + NDArray** inputs = inputs_vec.data(); + auto ndoutputs = Invoke(op, &attrs, param.num_args, inputs, &num_outputs, nullptr); + *ret = ndoutputs[0]; +}); } // namespace mxnet diff --git a/src/api/operator/numpy/np_ordering_op.cc b/src/api/operator/numpy/np_ordering_op.cc new file mode 100644 index 000000000000..ec0db28b4f9a --- /dev/null +++ b/src/api/operator/numpy/np_ordering_op.cc @@ -0,0 +1,88 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/*! + * \file np_ordering_op.cc + * \brief Implementation of the API of functions in src/operator/tensor/ordering_op.cc + */ +#include +#include +#include "../utils.h" +#include "../../../operator/tensor/ordering_op-inl.h" + +namespace mxnet { + +MXNET_REGISTER_API("_npi.sort") +.set_body([](runtime::MXNetArgs args, runtime::MXNetRetValue* ret) { + using namespace runtime; + const nnvm::Op* op = Op::Get("_npi_sort"); + nnvm::NodeAttrs attrs; + op::SortParam param; + + if (args[1].type_code() == kNull) { + param.axis = dmlc::nullopt; + } else { + param.axis = args[1].operator int(); + } + param.is_ascend = true; + + attrs.parsed = std::move(param); + attrs.op = op; + + int num_inputs = 1; + NDArray* inputs[] = {args[0].operator mxnet::NDArray*()}; + + int num_outputs = 0; + SetAttrDict(&attrs); + auto ndoutputs = Invoke(op, &attrs, num_inputs, inputs, &num_outputs, nullptr); + *ret = reinterpret_cast(ndoutputs[0]); +}); + +MXNET_REGISTER_API("_npi.argsort") +.set_body([](runtime::MXNetArgs args, runtime::MXNetRetValue* ret) { + using namespace runtime; + const nnvm::Op* op = Op::Get("_npi_argsort"); + nnvm::NodeAttrs attrs; + op::ArgSortParam param; + + if (args[1].type_code() == kNull) { + param.axis = dmlc::nullopt; + } else { + param.axis = args[1].operator int(); + } + param.is_ascend = true; + if (args[3].type_code() == kNull) { + param.dtype = mshadow::kFloat32; + } else { + param.dtype = String2MXNetTypeWithBool(args[3].operator std::string()); + } + + attrs.parsed = std::move(param); + attrs.op = op; + + int num_inputs = 1; + NDArray* inputs[] = {args[0].operator mxnet::NDArray*()}; + + int num_outputs = 0; + SetAttrDict(&attrs); + auto ndoutputs = Invoke(op, &attrs, num_inputs, inputs, &num_outputs, nullptr); + *ret = reinterpret_cast(ndoutputs[0]); +}); + +} // namespace mxnet diff --git a/src/api/operator/numpy/random/np_multinomial_op.cc b/src/api/operator/numpy/random/np_multinomial_op.cc new file mode 100644 index 000000000000..591768cb0bbc --- /dev/null +++ b/src/api/operator/numpy/random/np_multinomial_op.cc @@ -0,0 +1,75 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/*! + * \file np_multinomial_op.cc + * \brief Implementation of the API of functions in src/operator/numpy/random/np_multinomial_op.cc + */ +#include +#include +#include +#include "../../utils.h" +#include "../../../../operator/numpy/random/np_multinomial_op.h" + +namespace mxnet { + +MXNET_REGISTER_API("_npi.multinomial") +.set_body([](runtime::MXNetArgs args, runtime::MXNetRetValue* ret) { + using namespace runtime; + const nnvm::Op* op = Op::Get("_npi_multinomial"); + nnvm::NodeAttrs attrs; + op::NumpyMultinomialParam param; + NDArray** inputs = new NDArray*[1](); + int num_inputs = 0; + + // parse int + param.n = args[0].operator int(); + + // parse pvals + if (args[1].type_code() == kNull) { + param.pvals = dmlc::nullopt; + } else if (args[1].type_code() == kNDArrayHandle) { + param.pvals = dmlc::nullopt; + inputs[0] = args[1].operator mxnet::NDArray*(); + num_inputs = 1; + } else { + param.pvals = Obj2Tuple(args[1].operator ObjectRef()); + } + + // parse size + if (args[2].type_code() == kNull) { + param.size = dmlc::nullopt; + } else { + if (args[2].type_code() == kDLInt) { + param.size = mxnet::Tuple(1, args[2].operator int64_t()); + } else { + param.size = mxnet::Tuple(args[2].operator ObjectRef()); + } + } + + attrs.parsed = std::move(param); + attrs.op = op; + SetAttrDict(&attrs); + inputs = num_inputs == 0 ? nullptr : inputs; + int num_outputs = 0; + auto ndoutputs = Invoke(op, &attrs, num_inputs, inputs, &num_outputs, nullptr); + *ret = ndoutputs[0]; +}); + +} // namespace mxnet diff --git a/src/c_api/c_api.cc b/src/c_api/c_api.cc index 011994b54c67..ab367b973595 100644 --- a/src/c_api/c_api.cc +++ b/src/c_api/c_api.cc @@ -1299,11 +1299,13 @@ int MXLibInfoFeatures(const struct LibFeature **lib_features, size_t *size) { API_END(); } -int MXLibInfoCompiledWithCXX11ABI(bool* result) { - using namespace features; +int MXLibInfoCompiledWithCXX11ABI(int* result) { API_BEGIN(); - LibInfo* lib_info = LibInfo::getInstance(); - *result = lib_info->cxx11_abi(); +#ifdef _GLIBCXX_USE_CXX11_ABI + *result = _GLIBCXX_USE_CXX11_ABI; +#else + *result = -1; +#endif API_END(); } diff --git a/src/operator/numpy/np_matrix_op-inl.h b/src/operator/numpy/np_matrix_op-inl.h index 0fea76b3d894..6ff792e1476e 100644 --- a/src/operator/numpy/np_matrix_op-inl.h +++ b/src/operator/numpy/np_matrix_op-inl.h @@ -61,6 +61,11 @@ struct NumpyVstackParam : public dmlc::Parameter { DMLC_DECLARE_FIELD(num_args).set_lower_bound(1) .describe("Number of inputs to be vstacked."); } + void SetAttrDict(std::unordered_map* dict) { + std::ostringstream num_args_s; + num_args_s << num_args; + (*dict)["num_args"] = num_args_s.str(); + } }; struct NumpyColumnStackParam : public dmlc::Parameter { diff --git a/src/operator/numpy/random/np_multinomial_op.h b/src/operator/numpy/random/np_multinomial_op.h index 9c5c73f3f6b4..d77f11ca1c5a 100644 --- a/src/operator/numpy/random/np_multinomial_op.h +++ b/src/operator/numpy/random/np_multinomial_op.h @@ -27,6 +27,7 @@ #include #include +#include #include "../../mshadow_op.h" #include "../../mxnet_op.h" #include "../../operator_common.h" @@ -55,6 +56,15 @@ struct NumpyMultinomialParam : public dmlc::Parameter { "e.g., (m, n, k), then m * n * k samples are drawn. " "Default is None, in which case a single value is returned."); } + void SetAttrDict(std::unordered_map* dict) { + std::ostringstream n_s, pvals_s, size_s; + n_s << n; + pvals_s << pvals; + size_s << size; + (*dict)["n"] = n_s.str(); + (*dict)["pvals"] = pvals_s.str(); + (*dict)["size"] = size_s.str(); + } }; inline bool NumpyMultinomialOpShape(const nnvm::NodeAttrs& attrs, diff --git a/src/operator/subgraph/tensorrt/tensorrt-inl.h b/src/operator/subgraph/tensorrt/tensorrt-inl.h index b35a1715000e..3119d31fa909 100644 --- a/src/operator/subgraph/tensorrt/tensorrt-inl.h +++ b/src/operator/subgraph/tensorrt/tensorrt-inl.h @@ -302,7 +302,7 @@ class TensorrtProperty : public SubgraphProperty { TRTParam param; std::ostringstream params_oss; for (auto ¶m_name : new_sym.ListInputNames(nnvm::Symbol::kAll)) { - NDArray *cache; + NDArray *cache = nullptr; auto it_args = in_args_dict.find(param_name); if (it_args != in_args_dict.end()) { cache = it_args->second; diff --git a/src/operator/tensor/elemwise_sum.cc b/src/operator/tensor/elemwise_sum.cc index 5885d73efe29..c513e65b0c0e 100644 --- a/src/operator/tensor/elemwise_sum.cc +++ b/src/operator/tensor/elemwise_sum.cc @@ -113,7 +113,14 @@ void ElementWiseSumComputeExCPU(const nnvm::NodeAttrs& attrs, CHECK_EQ(outputs.size(), 1U); CHECK_EQ(req.size(), 1U); if (req[0] == kNullOp) return; - if (common::ContainsOnlyStorage(inputs, kRowSparseStorage) || +#if MXNET_USE_MKLDNN == 1 + if (IsMKLDNNData(inputs)) { + MKLDNNRun(MKLDNNSumForward, attrs, ctx, inputs, req, outputs); + } else if (common::ContainsOnlyStorage(inputs, kDefaultStorage)) { + FallBackCompute(ElementWiseSumCompute, attrs, ctx, inputs, req, outputs); + } +#endif + else if (common::ContainsOnlyStorage(inputs, kRowSparseStorage) || // NOLINT(*) (inputs.size() == 3U && inputs[0].storage_type() == kDefaultStorage && inputs[1].storage_type() == kCSRStorage && inputs[2].storage_type() == kDefaultStorage) || (inputs.size() > 4U && common::ContainsStorageType(inputs, kDefaultStorage) && @@ -123,12 +130,6 @@ void ElementWiseSumComputeExCPU(const nnvm::NodeAttrs& attrs, ResourceRequest(ResourceRequest::kTempSpace)); NDArray out_nd = outputs[0]; mxnet::ndarray::ElementwiseSum(s, rsc, inputs, &out_nd); -#if MXNET_USE_MKLDNN == 1 - } else if (IsMKLDNNData(inputs)) { - MKLDNNRun(MKLDNNSumForward, attrs, ctx, inputs, req, outputs); - } else if (common::ContainsOnlyStorage(inputs, kDefaultStorage)) { - FallBackCompute(ElementWiseSumCompute, attrs, ctx, inputs, req, outputs); -#endif } else { LogUnimplementedOp(attrs, ctx, inputs, req, outputs); } diff --git a/src/operator/tensor/ordering_op-inl.h b/src/operator/tensor/ordering_op-inl.h index b671b6c281dd..a5e83284e532 100644 --- a/src/operator/tensor/ordering_op-inl.h +++ b/src/operator/tensor/ordering_op-inl.h @@ -30,11 +30,13 @@ #include #include #include +#include #include #include "../mshadow_op.h" #include "../elemwise_op_common.h" #include "./sort_op.h" #include "./indexing_op.h" +#include "../../api/operator/op_utils.h" namespace mshadow { template @@ -105,6 +107,13 @@ struct SortParam : public dmlc::Parameter { DMLC_DECLARE_FIELD(is_ascend).set_default(true) .describe("Whether to sort in ascending or descending order."); } + void SetAttrDict(std::unordered_map* dict) { + std::ostringstream axis_s, is_ascend_s; + axis_s << axis; + is_ascend_s << is_ascend; + (*dict)["axis"] = axis_s.str(); + (*dict)["is_ascend_s"] = is_ascend_s.str(); + } }; struct ArgSortParam : public dmlc::Parameter { @@ -130,6 +139,15 @@ struct ArgSortParam : public dmlc::Parameter { " \"both\". An error will be raised if the selected data type cannot precisely " "represent the indices."); } + void SetAttrDict(std::unordered_map* dict) { + std::ostringstream axis_s, is_ascend_s, dtype_s; + axis_s << axis; + is_ascend_s << is_ascend; + dtype_s << dtype; + (*dict)["axis"] = axis_s.str(); + (*dict)["is_ascend_s"] = is_ascend_s.str(); + (*dict)["dtype"] = MXNetTypeWithBool2String(dtype); + } }; inline void ParseTopKParam(const TShape& src_shape, diff --git a/tests/nightly/dist_async_kvstore.py b/tests/nightly/dist_async_kvstore.py index f1bf13d93d37..4e0fbf789ff2 100644 --- a/tests/nightly/dist_async_kvstore.py +++ b/tests/nightly/dist_async_kvstore.py @@ -31,7 +31,7 @@ def check_trainer_kv_update(weight_stype, update_on_kv): x = mx.gluon.Parameter('x', shape=(10,1), lr_mult=1.0, stype=weight_stype) x.initialize(ctx=[mx.cpu(0), mx.cpu(1)], init='zeros') try: - trainer = mx.gluon.Trainer([x], 'sgd', {'learning_rate': 0.1}, + trainer = mx.gluon.Trainer({'x':x}, 'sgd', {'learning_rate': 0.1}, kvstore=kv, update_on_kvstore=update_on_kv) trainer._init_kvstore() assert trainer._kv_initialized diff --git a/tests/nightly/dist_device_sync_kvstore.py b/tests/nightly/dist_device_sync_kvstore.py index b7b4e4c71f0e..c6b526f02228 100644 --- a/tests/nightly/dist_device_sync_kvstore.py +++ b/tests/nightly/dist_device_sync_kvstore.py @@ -109,7 +109,7 @@ def check_trainer_kv_update(update_on_kv): x = mx.gluon.Parameter('x', shape=(10,1), lr_mult=1.0) x.initialize(ctx=[mx.cpu(0), mx.cpu(1)], init='zeros') try: - trainer = mx.gluon.Trainer([x], 'sgd', {'learning_rate': 0.1}, + trainer = mx.gluon.Trainer({'x':x}, 'sgd', {'learning_rate': 0.1}, kvstore=kv, update_on_kvstore=update_on_kv) trainer._init_kvstore() assert trainer._kv_initialized diff --git a/tests/nightly/dist_sync_kvstore.py b/tests/nightly/dist_sync_kvstore.py index 3f5137ba09b9..4a4a5c8d9670 100644 --- a/tests/nightly/dist_sync_kvstore.py +++ b/tests/nightly/dist_sync_kvstore.py @@ -381,7 +381,7 @@ def test_gluon_trainer_type(): def check_trainer_kv_type(stype, grad_stype, update_on_kv, expected): x = mx.gluon.Parameter('x', shape=(10,1), lr_mult=1.0, stype=stype, grad_stype=grad_stype) x.initialize(ctx=[mx.cpu(0), mx.cpu(1)], init='zeros') - trainer = mx.gluon.Trainer([x], 'sgd', {'learning_rate': 0.1}, + trainer = mx.gluon.Trainer({'x':x}, 'sgd', {'learning_rate': 0.1}, kvstore=kv, update_on_kvstore=update_on_kv) try: trainer._init_kvstore() @@ -405,7 +405,7 @@ def check_trainer_step(): shape = (10, 1) x = mx.gluon.Parameter('x', shape=shape) x.initialize(ctx=ctx, init='ones') - trainer = mx.gluon.Trainer([x], 'sgd', {'learning_rate': 1.0, 'multi_precision': False}, kvstore=kv) + trainer = mx.gluon.Trainer({'x':x}, 'sgd', {'learning_rate': 1.0, 'multi_precision': False}, kvstore=kv) with mx.autograd.record(): w = x.data(ctx) y = (my_rank + 1) * w @@ -423,7 +423,7 @@ def check_trainer_sparse_step(): all_rows = mx.nd.arange(0, shape[0], ctx=ctx) x = mx.gluon.Parameter('x', shape=shape, stype='row_sparse', grad_stype='row_sparse') x.initialize(ctx=ctx, init='ones') - trainer = mx.gluon.Trainer([x], 'sgd', {'learning_rate': 1.0}, kvstore=kv) + trainer = mx.gluon.Trainer({'x':x}, 'sgd', {'learning_rate': 1.0}, kvstore=kv) with mx.autograd.record(): w = x.row_sparse_data(all_rows) y = (my_rank + 1) * w diff --git a/tests/nightly/download.sh b/tests/nightly/download.sh deleted file mode 100644 index d07fc6f4ab8a..000000000000 --- a/tests/nightly/download.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/bash - -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - - -dmlc_download() { - url=http://data.mxnet.io/mxnet/datasets/ - dir=$1 - file=$2 - if [ ! -e data/${dir}/$file ]; then - wget ${url}/${dir}/${file} -P data/${dir}/ || exit -1 - else - echo "data/${dir}/$file already exits" - fi -} - -dmlc_download mnist t10k-images-idx3-ubyte -dmlc_download mnist t10k-labels-idx1-ubyte -dmlc_download mnist train-images-idx3-ubyte -dmlc_download mnist train-labels-idx1-ubyte - -dmlc_download cifar10 train.rec -dmlc_download cifar10 test.rec diff --git a/tests/python/gpu/test_gluon_model_zoo_gpu.py b/tests/python/gpu/test_gluon_model_zoo_gpu.py index 1d0d3f4b2313..bad65489d9a1 100644 --- a/tests/python/gpu/test_gluon_model_zoo_gpu.py +++ b/tests/python/gpu/test_gluon_model_zoo_gpu.py @@ -36,7 +36,7 @@ def eprint(*args, **kwargs): VAL_DATA='data/val-5k-256.rec' def download_data(): return mx.test_utils.download( - 'http://data.mxnet.io/data/val-5k-256.rec', VAL_DATA) + 'https://repo.mxnet.io/gluon/dataset/test/val-5k-256-9e70d85e0.rec', VAL_DATA) @with_seed() @pytest.mark.serial diff --git a/tests/python/mkl/test_mkldnn.py b/tests/python/mkl/test_mkldnn.py index 0bd5d1ead13b..115baea380f2 100644 --- a/tests/python/mkl/test_mkldnn.py +++ b/tests/python/mkl/test_mkldnn.py @@ -219,6 +219,28 @@ def test_flatten_slice_after_conv(): print(p[0]) +def test_mkldnn_sum_with_mkldnn_layout(): + + x_shape = (32, 3, 224, 224) + x_npy = np.ones(x_shape, dtype='float32') + w_shape = (32, 3, 3, 3) + w_npy = np.ones(w_shape, dtype='float32') + + x = mx.sym.Variable("x") + w = mx.sym.Variable("w") + z = mx.symbol.Convolution(data=x, weight=w, num_filter=32, kernel=(3, 3)) + num_inputs = [2, 3, 4, 5] + for i in num_inputs: + inputs = [] + for n in range(i): + inputs.append(z) + y = mx.sym.add_n(*inputs) # (only MKLDNN data input) + exe = y._simple_bind(ctx=mx.cpu(), x=x_shape, w=w_shape) + out = exe.forward(is_train=False, x=x_npy, w=np.ones(w_shape))[0] + #conv with kernel (3,3) on ones should give result=27 + single_cov = 27.0 + assert_almost_equal(out[0].asnumpy()[0, 0, 0], single_cov*i) + def test_mkldnn_sum_inplace_with_cpu_layout(): x_shape = (32, 3, 224, 224) x_npy = np.ones(x_shape, dtype='float32') @@ -227,7 +249,7 @@ def test_mkldnn_sum_inplace_with_cpu_layout(): x = mx.sym.Variable("x") y = mx.sym.Variable("y") z = mx.symbol.Convolution(data=x, num_filter=32, kernel=(3, 3)) - z = mx.sym.add_n(z, y) + z = mx.sym.add_n(z, y) # (MKLDNN data, cpu data) exe = z._simple_bind(ctx=mx.cpu(), x=x_shape, y=y_shape) out = exe.forward(is_train=False, x=x_npy, y=y_npy)[0] assert_almost_equal(out[0].asnumpy()[0, 0, 0], 1.0) diff --git a/tests/python/unittest/test_contrib_gluon_data_vision.py b/tests/python/unittest/test_contrib_gluon_data_vision.py index 166b07f843d7..fee9177969a6 100644 --- a/tests/python/unittest/test_contrib_gluon_data_vision.py +++ b/tests/python/unittest/test_contrib_gluon_data_vision.py @@ -51,7 +51,7 @@ def _generate_objects(): class TestImage(unittest.TestCase): - IMAGES_URL = "http://data.mxnet.io/data/test_images.tar.gz" + IMAGES_URL = "https://repo.mxnet.io/gluon/dataset/test/test_images-9cebe48a.tar.gz" def setUp(self): self.IMAGES_DIR = tempfile.mkdtemp() @@ -146,3 +146,4 @@ def test_bbox_augmenters(self): max_attempts=50) for batch in det_iter: pass + mx.nd.waitall() diff --git a/tests/python/unittest/test_gluon.py b/tests/python/unittest/test_gluon.py index 71ae41c2cfa6..4bd2171dfd18 100644 --- a/tests/python/unittest/test_gluon.py +++ b/tests/python/unittest/test_gluon.py @@ -70,7 +70,7 @@ def test_sparse_parameter(): assert len(p.list_grad()) == 2 # getting row_sparse data without trainer throws an exception assertRaises(RuntimeError, p.list_row_sparse_data, row_id) - trainer = mx.gluon.Trainer([p], 'sgd') + trainer = mx.gluon.Trainer({'p':p}, 'sgd') assert len(p.list_row_sparse_data(row_id)) == 2 weight = p.row_sparse_data(row_id) assert weight.context == mx.cpu(1) @@ -104,7 +104,7 @@ def test_parameter_row_sparse_data(): dim0 = 4 x = gluon.Parameter('x', shape=(dim0, 2), stype='row_sparse') x.initialize(init='xavier', ctx=[ctx0, ctx1]) - trainer = gluon.Trainer([x], 'sgd') + trainer = gluon.Trainer({'x':x}, 'sgd') x_param = x._data[0].copy() assert x_param.stype == 'row_sparse' row_id_0 = mx.nd.array([0,1], ctx=ctx0) diff --git a/tests/python/unittest/test_gluon_data.py b/tests/python/unittest/test_gluon_data.py index b68d03f697fc..abdf558c2b1c 100644 --- a/tests/python/unittest/test_gluon_data.py +++ b/tests/python/unittest/test_gluon_data.py @@ -52,7 +52,7 @@ def test_array_dataset(): def prepare_record(tmpdir_factory): test_images = tmpdir_factory.mktemp("test_images") test_images_tar = test_images.join("test_images.tar.gz") - gluon.utils.download("http://data.mxnet.io/data/test_images.tar.gz", str(test_images_tar)) + gluon.utils.download("https://repo.mxnet.io/gluon/dataset/test/test_images-9cebe48a.tar.gz", str(test_images_tar)) tarfile.open(test_images_tar).extractall(str(test_images)) imgs = os.listdir(str(test_images.join("test_images"))) record = mx.recordio.MXIndexedRecordIO(str(test_images.join("test.idx")), str(test_images.join("test.rec")), 'w') diff --git a/tests/python/unittest/test_gluon_trainer.py b/tests/python/unittest/test_gluon_trainer.py index 1e3a1028cf43..5c94fc8d003c 100644 --- a/tests/python/unittest/test_gluon_trainer.py +++ b/tests/python/unittest/test_gluon_trainer.py @@ -36,7 +36,7 @@ def test_multi_trainer(): x = gluon.Parameter('x', shape=(10,), stype='row_sparse') x.initialize() # test set trainer - trainer0 = gluon.Trainer([x], 'sgd') + trainer0 = gluon.Trainer({'x':x}, 'sgd') assert(x._trainer() is trainer0) # test unset trainer x._set_trainer(None) @@ -44,13 +44,13 @@ def test_multi_trainer(): x._set_trainer(trainer0) with pytest.raises(RuntimeError): # multiple trainers for a sparse Parameter is not allowed - trainer1 = gluon.Trainer([x], 'sgd') + trainer1 = gluon.Trainer({'x':x}, 'sgd') @with_seed() def test_trainer_with_sparse_grad_on_single_context(): x = gluon.Parameter('x', shape=(10,), grad_stype='row_sparse') x.initialize(ctx=[mx.cpu(0)], init='zeros') - trainer = gluon.Trainer([x], 'sgd', {'learning_rate': 1.0, 'momentum': 0.5}) + trainer = gluon.Trainer({'x':x}, 'sgd', {'learning_rate': 1.0, 'momentum': 0.5}) with mx.autograd.record(): for w in x.list_data(): y = w + 1 @@ -66,7 +66,7 @@ def test_trainer_with_teststore(): x = gluon.Parameter('x', shape=(10,)) x.initialize(ctx=[mx.cpu(0), mx.cpu(1)], init='zeros') kv = mx.kv.create('teststore') - trainer = gluon.Trainer([x], 'sgd', {'learning_rate': 1.0, 'momentum': 0.5}, kvstore=kv) + trainer = gluon.Trainer({'x':x}, 'sgd', {'learning_rate': 1.0, 'momentum': 0.5}, kvstore=kv) with mx.autograd.record(): for w in x.list_data(): y = w + 1 @@ -77,14 +77,14 @@ def test_trainer_with_teststore(): assert (x.data(mx.cpu(1)).asnumpy() == -2).all() # Expect exceptions if update_on_kvstore is set to True, # because TestStore does not support that - invalid_trainer = gluon.Trainer([x], 'sgd', kvstore=kv, update_on_kvstore=True) + invalid_trainer = gluon.Trainer({'x':x}, 'sgd', kvstore=kv, update_on_kvstore=True) pytest.raises(ValueError, invalid_trainer._init_kvstore) @with_seed() def test_trainer(): x = gluon.Parameter('x', shape=(10,)) x.initialize(ctx=[mx.cpu(0), mx.cpu(1)], init='zeros') - trainer = gluon.Trainer([x], 'sgd', {'learning_rate': 1.0, 'momentum': 0.5}) + trainer = gluon.Trainer({'x':x}, 'sgd', {'learning_rate': 1.0, 'momentum': 0.5}) with mx.autograd.record(): for w in x.list_data(): y = w + 1 @@ -119,7 +119,7 @@ def test_trainer(): x = gluon.Parameter('x', shape=(10,)) x.initialize(ctx=[mx.cpu(0), mx.cpu(1)], init='zeros') - trainer2 = gluon.Trainer([x], 'sgd', {'learning_rate': 1.0, 'momentum': 0.5}, + trainer2 = gluon.Trainer({'x':x}, 'sgd', {'learning_rate': 1.0, 'momentum': 0.5}, update_on_kvstore=False) with mx.autograd.record(): for i, w in enumerate(x.list_data()): @@ -139,7 +139,7 @@ def test_trainer_save_load(): x = gluon.Parameter('x', shape=(10,), lr_mult=1.0) x.initialize(ctx=[mx.cpu(0), mx.cpu(1)], init='zeros') - trainer = gluon.Trainer([x], 'sgd', {'learning_rate': 0.1}) + trainer = gluon.Trainer({'x':x}, 'sgd', {'learning_rate': 0.1}) with mx.autograd.record(): for w in x.list_data(): y = w + 1 @@ -158,7 +158,7 @@ def test_trainer_sparse_save_load(): x = gluon.Parameter('x', shape=(10, 1), lr_mult=1.0, stype='row_sparse', grad_stype='row_sparse') x.initialize(ctx=[mx.cpu(0)], init='zeros') - trainer = gluon.Trainer([x], 'sgd', {'learning_rate': 0.1}) + trainer = gluon.Trainer({'x':x}, 'sgd', {'learning_rate': 0.1}) all_rows = mx.nd.arange(0, 10, ctx=mx.cpu(0)) with mx.autograd.record(): for w in x.list_row_sparse_data(all_rows): @@ -257,7 +257,7 @@ def test_trainer_sparse_kv(): def check_trainer_sparse_kv(kv, stype, grad_stype, update_on_kv, expected): x = mx.gluon.Parameter('x', shape=(10,1), lr_mult=1.0, stype=stype, grad_stype=grad_stype) x.initialize(ctx=[mx.cpu(0), mx.cpu(1)], init='zeros') - trainer = gluon.Trainer([x], 'sgd', {'learning_rate': 0.1}, + trainer = gluon.Trainer({'x':x}, 'sgd', {'learning_rate': 0.1}, kvstore=kv, update_on_kvstore=update_on_kv) all_rows = mx.nd.arange(0, 10, ctx=mx.cpu(0)) try: @@ -297,7 +297,7 @@ def test_trainer_lr_sched(): factor = 0.1 lr = 1 lr_sched = mx.lr_scheduler.FactorScheduler(freq, factor=factor, base_lr=lr) - trainer = gluon.Trainer([x], 'sgd', {'learning_rate': lr, 'lr_scheduler': lr_sched}) + trainer = gluon.Trainer({'x':x}, 'sgd', {'learning_rate': lr, 'lr_scheduler': lr_sched}) for i in range(10): with mx.autograd.record(): for w in x.list_data(): @@ -316,7 +316,7 @@ def test_trainer_lr_sched(): factor = 0.1 lr = 1 lr_sched = mx.lr_scheduler.FactorScheduler(freq, factor=factor, base_lr=lr) - trainer = gluon.Trainer([x], 'sgd', {'learning_rate': lr, 'lr_scheduler': lr_sched}, + trainer = gluon.Trainer({'x':x}, 'sgd', {'learning_rate': lr, 'lr_scheduler': lr_sched}, update_on_kvstore=False) for i in range(10): with mx.autograd.record(): @@ -359,3 +359,43 @@ def test_trainer_allreduce_hybridsequential(): out = net(mx.nd.ones((1, 1), ctx=ctx)) out.backward() trainer.allreduce_grads() + + +def test_trainer_share_parameters(): + class Net(gluon.Block): + def __init__(self, **kwargs): + super(Net, self).__init__(**kwargs) + self.dense1 = gluon.nn.Dense(5, in_units=2, use_bias=False) + params = self.dense1.collect_params() + self.dense2 = gluon.nn.Dense(5, in_units=2, + use_bias=False).share_parameters(params) + self.dense3 = gluon.nn.Dense(5, in_units=5, use_bias=False) + + def forward(self, x): + hidden = self.dense1(x) + self.dense2(x) + out = self.dense3(hidden) + return out + + net = Net() + ctxes = [mx.cpu(0), mx.cpu(1)] + net.initialize(mx.init.One(), ctx=ctxes) + trainer = gluon.Trainer(net.collect_params(), 'sgd', {'learning_rate': 1}) + data = mx.nd.array([[1, 1], [1, 1]]) + xs = gluon.utils.split_and_load(data, ctxes) + ys = [] + with mx.autograd.record(): + for x in xs: + y = net(x) + ys.append(y) + for y in ys: + y.backward() + trainer.step(1) + params = net.collect_params() + shared_params = [] + for param in params.values(): + p = param.data(mx.cpu(0)).asnumpy() + if p.shape[1] == 2: + shared_params.append(p) + + assert((shared_params[0] == shared_params[1]).all()) + diff --git a/tests/python/unittest/test_image.py b/tests/python/unittest/test_image.py index 9cb287a50b11..d638946ea10a 100644 --- a/tests/python/unittest/test_image.py +++ b/tests/python/unittest/test_image.py @@ -110,7 +110,7 @@ def _test_imageiter_last_batch(imageiter_list, assert_data_shape): class TestImage(unittest.TestCase): - IMAGES_URL = "http://data.mxnet.io/data/test_images.tar.gz" + IMAGES_URL = "https://repo.mxnet.io/gluon/dataset/test/test_images-9cebe48a.tar.gz" def setUp(self): self.IMAGES_DIR = tempfile.mkdtemp() diff --git a/tests/python/unittest/test_numpy_contrib_gluon_data_vision.py b/tests/python/unittest/test_numpy_contrib_gluon_data_vision.py index 8c3e76aac91c..6713965fd093 100644 --- a/tests/python/unittest/test_numpy_contrib_gluon_data_vision.py +++ b/tests/python/unittest/test_numpy_contrib_gluon_data_vision.py @@ -51,7 +51,7 @@ def _generate_objects(): class TestImage(unittest.TestCase): - IMAGES_URL = "http://data.mxnet.io/data/test_images.tar.gz" + IMAGES_URL = "https://repo.mxnet.io/gluon/dataset/test/test_images-9cebe48a.tar.gz" def setUp(self): self.IMAGES_DIR = tempfile.mkdtemp() diff --git a/tests/python/unittest/test_numpy_loss.py b/tests/python/unittest/test_numpy_loss.py index 6c63546f85b1..14f46f0b4a76 100644 --- a/tests/python/unittest/test_numpy_loss.py +++ b/tests/python/unittest/test_numpy_loss.py @@ -20,57 +20,94 @@ from mxnet import gluon, autograd from mxnet.test_utils import assert_almost_equal, default_context, use_np from common import setup_module, with_seed, teardown_module, xfail_when_nonstandard_decimal_separator -import unittest +import pytest @xfail_when_nonstandard_decimal_separator @with_seed() @use_np -def test_loss_np_ndarray(): +@pytest.mark.parametrize("hybridize", [False, True]) +def test_loss_np_ndarray(hybridize): output = mx.np.array([1, 2, 3, 4]) label = mx.np.array([1, 3, 5, 7]) weighting = mx.np.array([0.5, 1, 0.5, 1]) loss = gluon.loss.L1Loss() + if hybridize: + loss.hybridize() assert mx.np.sum(loss(output, label)) == 6. loss = gluon.loss.L1Loss(weight=0.5) + if hybridize: + loss.hybridize() assert mx.np.sum(loss(output, label)) == 3. loss = gluon.loss.L1Loss() + if hybridize: + loss.hybridize() assert mx.np.sum(loss(output, label, weighting)) == 5. loss = gluon.loss.L2Loss() + if hybridize: + loss.hybridize() assert mx.np.sum(loss(output, label)) == 7. loss = gluon.loss.L2Loss(weight=0.25) + if hybridize: + loss.hybridize() assert mx.np.sum(loss(output, label)) == 1.75 loss = gluon.loss.L2Loss() + if hybridize: + loss.hybridize() assert mx.np.sum(loss(output, label, weighting)) == 6 loss = gluon.loss.HuberLoss() + if hybridize: + loss.hybridize() assert mx.np.sum(loss(output, label)) == 4.5 loss = gluon.loss.HuberLoss(weight=0.25) + if hybridize: + loss.hybridize() assert mx.np.sum(loss(output, label)) == 1.125 loss = gluon.loss.HuberLoss() + if hybridize: + loss.hybridize() assert mx.np.sum(loss(output, label, weighting)) == 3.75 loss = gluon.loss.HingeLoss(margin=10) + if hybridize: + loss.hybridize() assert mx.np.sum(loss(output, label)) == 13. loss = gluon.loss.HingeLoss(margin=8, weight=0.25) + if hybridize: + loss.hybridize() assert mx.np.sum(loss(output, label)) == 2.25 loss = gluon.loss.HingeLoss(margin=7) + if hybridize: + loss.hybridize() assert mx.np.sum(loss(output, label, weighting)) == 4. loss = gluon.loss.SquaredHingeLoss(margin=10) + if hybridize: + loss.hybridize() assert mx.np.sum(loss(output, label)) == 97. loss = gluon.loss.SquaredHingeLoss(margin=8, weight=0.25) + if hybridize: + loss.hybridize() assert mx.np.sum(loss(output, label)) == 13.25 loss = gluon.loss.SquaredHingeLoss(margin=7) + if hybridize: + loss.hybridize() assert mx.np.sum(loss(output, label, weighting)) == 19. loss = gluon.loss.TripletLoss(margin=10) + if hybridize: + loss.hybridize() assert mx.np.sum(loss(output, label, -label)) == 6. loss = gluon.loss.TripletLoss(margin=8, weight=0.25) + if hybridize: + loss.hybridize() assert mx.np.sum(loss(output, label, -label)) == 1. loss = gluon.loss.TripletLoss(margin=7) + if hybridize: + loss.hybridize() assert mx.np.sum(loss(output, label, -label, weighting)) == 1.5 output = mx.np.array([[0, 2], [1, 4]]) @@ -78,30 +115,48 @@ def test_loss_np_ndarray(): weighting = mx.np.array([[0.5], [1.0]]) loss = gluon.loss.SoftmaxCrossEntropyLoss() + if hybridize: + loss.hybridize() L = loss(output, label).asnumpy() assert_almost_equal(L, np.array([ 2.12692809, 0.04858733]), rtol=1e-3, atol=1e-4) + loss = gluon.loss.SoftmaxCrossEntropyLoss() + if hybridize: + loss.hybridize() L = loss(output, label, weighting).asnumpy() assert_almost_equal(L, np.array([ 1.06346405, 0.04858733]), rtol=1e-3, atol=1e-4) @with_seed() @use_np -def test_bce_equal_ce2(): +@pytest.mark.parametrize("hybridize", [False, True]) +def test_bce_equal_ce2(hybridize): N = 100 loss1 = gluon.loss.SigmoidBCELoss(from_sigmoid=True) + if hybridize: + loss1.hybridize() loss2 = gluon.loss.SoftmaxCELoss(from_logits=True) + if hybridize: + loss2.hybridize() out1 = mx.np.random.uniform(0.1, 0.9, size=(N, 1)) out2 = mx.np.log(mx.np.concatenate((1-out1, out1), axis=1) + 1e-8) label = mx.np.round(mx.np.random.uniform(0, 1, size=(N, 1))) assert_almost_equal(loss1(out1, label).asnumpy(), loss2(out2, label).asnumpy()) + @use_np -def test_logistic_loss_equal_bce(): +@pytest.mark.parametrize("hybridize", [False, True]) +def test_logistic_loss_equal_bce(hybridize): N = 100 loss_binary = gluon.loss.LogisticLoss(label_format='binary') + if hybridize: + loss_binary.hybridize() loss_signed = gluon.loss.LogisticLoss(label_format='signed') + if hybridize: + loss_signed.hybridize() loss_bce = gluon.loss.SigmoidBCELoss(from_sigmoid=False) + if hybridize: + loss_bce.hybridize() data = mx.np.random.uniform(-10, 10, size=(N, 1)) label = mx.np.round(mx.np.random.uniform(0, 1, size=(N, 1))) assert_almost_equal(loss_binary(data, label), loss_bce(data, label), atol=1e-6) @@ -110,28 +165,41 @@ def test_logistic_loss_equal_bce(): @with_seed() @use_np -def test_ctc_loss(): +@pytest.mark.parametrize("hybridize", [False, True]) +def test_ctc_loss(hybridize): loss = gluon.loss.CTCLoss() + if hybridize: + loss.hybridize() l = loss(mx.np.ones((2,20,4)), mx.np.array([[1,0,-1,-1],[2,1,1,-1]])) assert_almost_equal(l, np.array([18.82820702, 16.50581741])) loss = gluon.loss.CTCLoss(layout='TNC') + if hybridize: + loss.hybridize() l = loss(mx.np.ones((20,2,4)), mx.np.array([[1,0,-1,-1],[2,1,1,-1]])) assert_almost_equal(l, np.array([18.82820702, 16.50581741])) loss = gluon.loss.CTCLoss(layout='TNC', label_layout='TN') + if hybridize: + loss.hybridize() l = loss(mx.np.ones((20,2,4)), mx.np.array([[1,0,-1,-1],[2,1,1,-1]]).T) assert_almost_equal(l, np.array([18.82820702, 16.50581741])) loss = gluon.loss.CTCLoss() + if hybridize: + loss.hybridize() l = loss(mx.np.ones((2,20,4)), mx.np.array([[2,1,2,2],[3,2,2,2]]), None, mx.np.array([2,3])) assert_almost_equal(l, np.array([18.82820702, 16.50581741])) loss = gluon.loss.CTCLoss() + if hybridize: + loss.hybridize() l = loss(mx.np.ones((2,25,4)), mx.np.array([[2,1,-1,-1],[3,2,2,-1]]), mx.np.array([20,20])) assert_almost_equal(l, np.array([18.82820702, 16.50581741])) loss = gluon.loss.CTCLoss() + if hybridize: + loss.hybridize() l = loss(mx.np.ones((2,25,4)), mx.np.array([[2,1,3,3],[3,2,2,3]]), mx.np.array([20,20]), mx.np.array([2,3])) assert_almost_equal(l, np.array([18.82820702, 16.50581741])) @@ -171,15 +239,19 @@ def test_sdml_loss(): avg_loss = loss.sum()/len(loss) assert(avg_loss < 0.05) + @with_seed() @use_np -def test_cosine_loss(): +@pytest.mark.parametrize("hybridize", [False, True]) +def test_cosine_loss(hybridize): #Generating samples input1 = mx.np.random.randn(3, 2) input2 = mx.np.random.randn(3, 2) label = mx.np.sign(mx.np.random.randn(input1.shape[0])) #Calculating loss from cosine embedding loss function in Gluon Loss = gluon.loss.CosineEmbeddingLoss() + if hybridize: + Loss.hybridize() loss = Loss(input1, input2, label) # Calculating the loss Numpy way @@ -192,9 +264,11 @@ def test_cosine_loss(): mx.np.where(label == 1, 1-x, mx.npx.relu(x)), (-1,)) assert_almost_equal(loss.asnumpy(), numpy_loss.asnumpy(), rtol=1e-3, atol=1e-5) + @xfail_when_nonstandard_decimal_separator @use_np -def test_poisson_nllloss(): +@pytest.mark.parametrize("hybridize", [False, True]) +def test_poisson_nllloss(hybridize): shape=(3, 4) not_axis0 = tuple(range(1, len(shape))) pred = mx.np.random.normal(size=shape) @@ -209,7 +283,11 @@ def test_poisson_nllloss(): target[:] += mx.np.abs(min_target) Loss = gluon.loss.PoissonNLLLoss(from_logits=True) + if hybridize: + Loss.hybridize() Loss_no_logits = gluon.loss.PoissonNLLLoss(from_logits=False) + if hybridize: + Loss_no_logits.hybridize() #Calculating by brute formula for default value of from_logits = True # 1) Testing for flag logits = True @@ -230,6 +308,8 @@ def test_poisson_nllloss(): np_compute_full = mx.np.mean((np_pred - np_target * mx.np.log(np_pred + 1e-08)) + ((np_target * np.log(np_target)-\ np_target + 0.5 * np.log(2 * np_target * np.pi))*(np_target > 1)), axis=1) Loss_compute_full = gluon.loss.PoissonNLLLoss(from_logits=False, compute_full=True) + if hybridize: + Loss_compute_full.hybridize() loss_compute_full = Loss_compute_full(np_pred, np_target) assert_almost_equal(np_compute_full, loss_compute_full) diff --git a/tests/python/unittest/test_runtime.py b/tests/python/unittest/test_runtime.py index d117ac0f4b30..13f992a78aff 100644 --- a/tests/python/unittest/test_runtime.py +++ b/tests/python/unittest/test_runtime.py @@ -50,5 +50,5 @@ def test_is_enabled_not_existing(): features.is_enabled('this girl is on fire') def test_cxx11_abi(): - abi = mx.library.compiled_with_cxx11_abi() - assert abi or not abi + abi = mx.library.compiled_with_gcc_cxx11_abi() + assert abi in (-1, 0, 1)