From f7a1968dcd37a2e8991bb508ac92b1617762535e Mon Sep 17 00:00:00 2001
From: Achille Mbogol Touye <achille.mbogol-touye@univ-grenoble-alpes.fr>
Date: Thu, 13 Apr 2023 13:16:36 +0200
Subject: [PATCH] Update docker_v2/fidle_env_test.py,
 docker_v2/fidle_python_pip.dockerfile, docker_v2/jupyter_lab_config.py,
 docker_v2/notebook.json, docker_v2/requirements-cpu.txt,
 docker_v2/requirements.txt, docker/jupyter_lab_config.py,
 docker/notebook.json, docker/requirements_packages.txt, docker/Dockerfile,
 docker/images/env-fidle.svg, docker/images/env-fidle.png

---
 docker/Dockerfile                             |   63 +
 docker/images/env-fidle.png                   |  Bin 0 -> 2262 bytes
 docker/images/env-fidle.svg                   |   86 ++
 docker/jupyter_lab_config.py                  |    1 -
 docker/requirements_packages.txt              |   29 +
 {docker => docker_v2}/fidle_env_test.py       |    0
 .../fidle_python_pip.dockerfile               |    0
 docker_v2/jupyter_lab_config.py               | 1019 +++++++++++++++++
 docker_v2/notebook.json                       |    6 +
 {docker => docker_v2}/requirements-cpu.txt    |    0
 {docker => docker_v2}/requirements.txt        |    0
 11 files changed, 1203 insertions(+), 1 deletion(-)
 create mode 100644 docker/Dockerfile
 create mode 100644 docker/images/env-fidle.png
 create mode 100644 docker/images/env-fidle.svg
 create mode 100644 docker/requirements_packages.txt
 rename {docker => docker_v2}/fidle_env_test.py (100%)
 rename {docker => docker_v2}/fidle_python_pip.dockerfile (100%)
 create mode 100644 docker_v2/jupyter_lab_config.py
 create mode 100644 docker_v2/notebook.json
 rename {docker => docker_v2}/requirements-cpu.txt (100%)
 rename {docker => docker_v2}/requirements.txt (100%)

diff --git a/docker/Dockerfile b/docker/Dockerfile
new file mode 100644
index 0000000..a4a8913
--- /dev/null
+++ b/docker/Dockerfile
@@ -0,0 +1,63 @@
+# base image
+ARG PYTHON_VERSION=3.7
+ARG docker_image_base=python:${PYTHON_VERSION}-slim
+FROM ${docker_image_base}
+
+# maintainers
+LABEL maintainer1=soraya.arias@inria.fr maintainer2=achille.mbogol-touye@grenoble-inp.fr
+
+# Ensure a sane environment
+ENV TZ=Europe/Paris LANG=C.UTF-8 LC_ALL=C.UTF-8 DEBIAN_FRONTEND=noninteractive
+RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone && \
+    apt update --fix-missing && \
+    apt install -y --no-install-recommends apt-utils vim \
+        python3-venv  \
+        python3-pip && \
+    apt -y dist-upgrade && \
+    apt clean && \
+    rm -fr /var/lib/apt/lists/*  
+   
+# copy Python requirement packages list in docker image
+COPY requirements_packages.txt /root/requirements_packages.txt
+
+# Update Python tools and install requirements packages
+RUN python3 -m pip install --upgrade pip && \
+    pip install --no-cache-dir -r /root/requirements_packages.txt
+
+ 
+RUN bin/rm /usr/local/share/jupyter/kernels/python3/logo*      
+    
+# Change default logo and name kernels
+COPY images/env-fidle.png /usr/local/share/jupyter/kernels/python3/logo-64x64.png
+COPY images/env-fidle.svg /usr/local/share/jupyter/kernels/python3/logo-svg.svg
+
+
+# Get Fidle datasets
+RUN mkdir /data && \
+    fid  install_datasets --datasets datasets-fidle-v2.0 --install_dir /data
+
+# Get Fidle notebooks
+RUN mkdir /notebooks/ && \
+    fid install_notebooks --quiet --install_dir /notebooks
+
+# Add Jupyter configuration (no browser, listen all interfaces, ...)
+COPY jupyter_lab_config.py /root/.jupyter/jupyter_lab_config.py
+COPY notebook.json /root/.jupyter/nbconfig/notebook.json
+
+# Jupyter notebook uses 8888 
+EXPOSE 8888
+
+VOLUME /notebooks
+WORKDIR /notebooks
+
+# Set a folder in the volume as Python Path
+ENV PYTHONPATH=/notebooks/fidle-master/:$PYTHONPATH
+
+# Force bash as the default shell (useful in the notebooks)
+ENV SHELL=/bin/bash
+
+# Set Fidle dataset directory variable
+ENV FIDLE_DATASETS_DIR=/data/datasets-fidle
+
+# Run a notebook by default
+CMD ["jupyter", "lab"]
diff --git a/docker/images/env-fidle.png b/docker/images/env-fidle.png
new file mode 100644
index 0000000000000000000000000000000000000000..5d7548194ce56bbbe9adb7d16bab5cf199051b2b
GIT binary patch
literal 2262
zcmV;{2r2i8P)<h;3K|Lk000e1NJLTq002M$002M;1^@s6s%dfF00009a7bBm000G|
z000G|0d{khW&i*Ph)G02RCt{2TYqen<sJXDy}MG{qd>KiLPF8af<Gc%l(LvfQFQx5
zM=6Pkjl*lqqETo0hdB__HdbKxhv3k;K-SV}-55eeO<b|ia~ZZ}hDM`cme}ejgDPw3
zac%E<+%2D{eXsZ9{r$doT*5xdrT4z~Jn!>-zt8jie1AM|vm%j51lKUKuVvv0dlV23
zO?}dcD_@@xAFHsYfD3)VTb00xCg77M;4hWH=s?P~K*4=mY7z1KEI-Sf0!9XaBOYL1
zIq<D_=KjCEz`iAbcOwuOu{=3B%m{zkmggB$z{Cj9)d2iqIq=zj<#wlb1I?vCPlNRt
z#=vgj3H=H<)dIY}9O!BU0++Pg2QLA=jX-ND(BE!tmMIdR&{n|LUBJFd;7~0v@{REk
zeBS^ct^<x#0vG#CO;S$yoF!$*xp8S+yYaTy4fBGs0)_{G10G=SYM|e%*i1M6;|1O+
z2fQ92sGlE{gm-UmMpnK%de6UWD<<ClJ$##ukz=v~#z%mT2H=(Dz^5v9ZWjOA4;&~3
z`n35$ukcb^B0MyR@P$DO3V7QCbTk4JI_%sm$Payu!0{?ugeQ34S+N@KZOuuhp$7RK
zkS-{gf>GfK-Y?ktYMk)F&UZ1k_qVFTIMOGrKG1$Izf@;PcsWpb@&e(waVcE)t(9%3
z-wl?o0-ic$T%xMuK+zq#o0G}IL+7H`W`t*dNqAyx?~b@<#zI>Ga~A{an}Nr>fCbBS
zPa=wimB7P&KxH%FD%6~K;K-ZNYcs+V*~KNu{rRKOYwjj0R<^C`lh)J&b$!5(JccG9
zi!u*TGXUIHr`RNMlKC5(3=1z|_Aj3kijY8)kaLgn3b=JGu(=<&zX6yv*VF`}I9v&Q
zKOF$M<^n5s0T1^B3sxmHo$T(6ey7bEVRJd;)jXB({9{S2k`?es3sBn*%qz7tcogTn
zz+cOO6B}n(zn~QOSr>43OSBo8KbH7hEAO>DG?kc@Ul6^X{QP86n`8ydw@L6se7+m_
zTY}#&m>DaPq#U>3Wy`QROJ;VFT!54@6`@c<al@?bCn8pnSNf9+DA!a;OfHkm7zO0q
zurMXhjV+rwZo4z-_tY!ku6kX~VqF#yk|8WJxYGYsw3nP&rCtFm8h}Upfzq|A^?*du
z3(B}GA~H4>_g4*E{aA8!$`EUMOu$_V{Inf-s7tjOvpEUD&UV?rC2RI<4ApqVUo9jC
zR?Z*am((M@98jblO6RVbag!u0|0~bSw#!+h%@+)MCVP%YuWA2@W=3R`7jUk;H;$+%
zz~nzV5cb8h_q_Tohy;R)&*9eh?}}GmVpJ$0<J=%)cnNurKL_XC4<OLf8@(3^27yor
zS-CERFZ+}FbLA6j2~3QX0;`Nu0ONlqL4@N6OA+WjiSM3x2L40sh)f2N<#Hjrun^xp
z`78Jj9*Xv(*SOsDtZXeoY4ybzDVE0+q~ZlhFt=hg3hSOm=<Fb}oGyfi{|o=SA7K1w
zCmhpU;NQ6k!M}f)G?bon+PDH{6;9Rk^uWE?k`gBW`7wgMA7l2a3OH^m6Zf;{&Bu60
zr%;N!b_0SZj>!to{xm18klMHjY#abqX#_X9g+N6;@QAr{013`J?}78ya)iF<#b{kM
z0w4TY{6gUipM4sWJ;yNi>ejeEBvJRaKkBX}n14Tj=Y#KgfU{oUC-p!UfKM8MAFc&f
z?*iu7n^n>rLVexHUR;Lk`9+vG+=9S+Z$`5{k{nZLqcsHUFG%o&*nb{y6-<4KO_a@K
z5d89tV1L?v@bpYP&j83(b~AFWD?)C?3b<~uRy4_|H$=jtK8zpz2$y!hhR~pV5i=2v
zg(b*ezfSN$_8j9WbjB#a|IT3yzqkWopSd&tY_}UlFK<KM{mJ33YCokPxb^62<S_i=
zc1*+sCsx3%exc?uT>SO(riCZim$8Abxz$iVMFns>@`0RSEI5F#<xlV*w0`8xRUfK(
z41pedQeR@YX@?;tC@MfA7fz7MfV54Uc8KqxLH!4ia=5r@i{({U0_Ui-dlR7=2+^)M
z!SfHU6B(EtD@A2q+_V|vAIazYc7bL}FQG+@s)0~$#Z&@8Mz%}%p_&aT7ar4d)?*5)
z3YfKWh4OC|%D>5hTypN7H3**m%1}Qmu&e+zmtw@-kUP#lRGkugR|Ch>;sR9#Fx!&M
zAnyLc5?vA4l)X=po!xLPE5r3~{7!uMT?vU^%#Z?zIkg*-?&(>5#t9@(=JBb(b#Lqu
z^O)%F6=bJ24>f3}!yJSfj<sDiZs4k4+Pz1_3aJElCz;;rIJ(l|xi4(iY%?YJYl7%f
zEj&TnW)47CZ3Vh>fmm&G(0MQXM#Kh@Q6I)SI>m(2O>%C}FGR+u=2^&LH?%3g?WS7+
zTw&U@-YhLsprrua6(L4cBp$0<F5Pe~Q}<SeN@8?<OgXOxsQA1!#$KAByUu$+-D4T9
z3DPSR?R+WiDsU_+LD9?GMJ-SZ-1dwQire;UMy#gJ1<1bXRsxCcY<Y$FUgAB9{OYPW
za}<@K>M9hswTPnWXmhKsjL=d=$c`$GnZ6X3B{1$r>1==j&*Yb9MEp;p)*?R%mP=v`
zHNSuI8N=Rzt3@G1y}@Sp$-u3+tyNcz(DKn3iE+XEhYb-_s)e7wbGz;WsjWp(+8hHW
zwcWt&OL98@V70h*-m+8>6}Pa}n!^<N?J-mxw)Jd~Hp#?9)D4?kWmlI06{ELBeLX_x
zD`y8W(S1_buUU{wxT8pZMv=0zI0dB=NR+9J9%)V#+@a&82|1+YT!5xwXTBgEhUBlW
zGA+1-v>%KJTkk#@bz6EA!YwXwg-FjW9*4!^s-FzeRD!2Zi|<qnrt=Qxw2-c4%S;`4
k>Bay5dprZ?aP<J-f0-WYlPSqdwEzGB07*qoM6N<$g7U;jy#N3J

literal 0
HcmV?d00001

diff --git a/docker/images/env-fidle.svg b/docker/images/env-fidle.svg
new file mode 100644
index 0000000..9f3f0b9
--- /dev/null
+++ b/docker/images/env-fidle.svg
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 125.8 125.8">
+  <defs>
+    <style>
+      .k {
+        fill: #fff;
+      }
+
+      .l {
+        fill: url(#h);
+      }
+
+      .m {
+        fill: none;
+      }
+
+      .n {
+        fill: #ee4c2c;
+      }
+
+      .o {
+        fill: url(#j);
+      }
+
+      .p {
+        clip-path: url(#i);
+      }
+
+      .q {
+        fill: #e12229;
+      }
+
+      .r {
+        clip-path: url(#g);
+      }
+    </style>
+    <clipPath id="g">
+      <polygon points="62.24 20.43 36.46 5.76 36.46 66.03 46.77 60.07 46.77 43.12 54.56 47.58 54.45 36.01 46.77 31.54 46.77 24.78 62.24 33.83 62.24 20.43" style="fill: none;"/>
+    </clipPath>
+    <linearGradient id="h" data-name="Dégradé sans nom 2" x1="5.98" y1="-5330.53" x2="69.23" y2="-5330.53" gradientTransform="translate(0 -5294.69) scale(1 -1)" gradientUnits="userSpaceOnUse">
+      <stop offset="0" stop-color="#ff6f00"/>
+      <stop offset="1" stop-color="#ffa800"/>
+    </linearGradient>
+    <clipPath id="i">
+      <polygon points="8.39 20.43 34.17 5.76 34.17 66.03 23.86 60.07 23.86 24.78 8.39 33.83 8.39 20.43" style="fill: none;"/>
+    </clipPath>
+    <linearGradient id="j" data-name="Dégradé sans nom 2" x1="5.64" x2="68.89" xlink:href="#h"/>
+  </defs>
+  <g id="a" data-name="Calque 1"/>
+  <g id="b" data-name="Calque 2">
+    <g id="c" data-name="Iconographie">
+      <g>
+        <rect width="125.8" height="125.8" style="fill: #fff;"/>
+        <g>
+          <g id="d" data-name="group">
+            <path id="e" data-name="Path" d="M110.22,22.14l-4.44,4.44c7.27,7.27,7.27,18.97,0,26.1-7.27,7.27-18.97,7.27-26.1,0-7.27-7.27-7.27-18.97,0-26.1l11.5-11.5,1.61-1.61V4.78l-17.36,17.36c-9.69,9.69-9.69,25.3,0,34.99,9.69,9.69,25.3,9.69,34.78,0,9.69-9.76,9.69-25.3,0-34.99Z" style="fill: #ee4c2c;"/>
+            <path id="f" data-name="Path-1" d="M104.77,17.83c0,1.78-1.45,3.23-3.23,3.23s-3.23-1.45-3.23-3.23,1.45-3.23,3.23-3.23,3.23,1.45,3.23,3.23Z" style="fill: #ee4c2c;"/>
+          </g>
+          <g>
+            <g style="clip-path: url(#g);">
+              <path d="M5.98,5.53h63.25v60.62H5.98V5.53Z" style="fill: url(#h);"/>
+            </g>
+            <g style="clip-path: url(#i);">
+              <path d="M5.64,5.53h63.25v60.62H5.64V5.53Z" style="fill: url(#j);"/>
+            </g>
+          </g>
+          <g>
+            <path d="M96.62,104.09c4.29-.4,7.17-1.94,9.48-3.18,1.58-.85,2.9-1.55,4.24-1.66,.76-2.49,1.18-5.09,1.18-7.73,0-8.79-4.27-16.92-11.53-21.81-3.37-2.27-11.13-5.29-21.33-3.6-7.49,1.24-15.26,6.91-18.3,9.45-1.83,1.53-23.6,22.17-32.68,18.06-6.14-2.78,4.83-12.91-.21-22.17-.14-.25-.5-.28-.67-.04-2.56,3.46-5.06,7.6-8.47,5.74-1.52-.83-2.89-3.49-3.95-5.17-.21-.34-.74-.17-.73,.23,.39,11.62,6.02,20.18,10.54,25.6,7.83,9.37,21.55,20.28,43.72,22.49,9.6,.96,32.37-2.07,41.47-18.44-.65,.26-1.37,.65-2.19,1.09-2.36,1.27-5.59,3-10.35,3.44-.32,.03-.63,.04-.95,.04-4.33,0-8.36-2.63-10.32-4.14-.15,.04-.3,.06-.46,.06-1.07,0-1.94-.87-1.94-1.94s.87-1.94,1.94-1.94,1.94,.87,1.94,1.94c0,.03,0,.06,0,.09,1.87,1.43,5.77,3.95,9.59,3.58Zm-29.02,8.57c-4,1.07-6.6,1.51-8.29,1.51-1.87,0-2.65-.53-3.02-1.33-.98-2.1,2.54-5.13,5.66-7.31,.52-.36,1.24-.23,1.61,.29,.36,.52,.24,1.24-.29,1.61-2.21,1.54-4.32,3.49-4.76,4.38,.61,.13,2.59,.22,8.5-1.37,.62-.17,1.25,.2,1.41,.82,.17,.62-.2,1.25-.81,1.41Zm26.71-28.1c2.28,0,4.12,1.88,4.27,4.24-.48-.92-1.43-1.56-2.55-1.56-1.59,0-2.88,1.29-2.88,2.88s1.29,2.88,2.88,2.88c.18,0,.36-.02,.53-.05-.66,.43-1.43,.7-2.26,.7-2.37,0-4.31-2.04-4.31-4.54,0-2.51,1.93-4.54,4.31-4.54Z" style="fill: #e12229;"/>
+            <g>
+              <path d="M85.39,60.57c-.55,0-.84-.41-.94-.54-.38-.54-.84-.73-1.69-.73-.25,0-.49,.02-.72,.03-.26,.02-.51,.03-.74,.03-.37,0-.92-.03-1.41-.3-1.6-.88-2.18-2.89-1.3-4.49,.58-1.06,1.69-1.71,2.9-1.71,.56,0,1.11,.14,1.59,.41,1.21,.67,3.53,5.61,3.29,6.54l-.19,.75-.79,.02Z" style="fill: #e12229;"/>
+              <path d="M81.49,53.85c.38,0,.76,.09,1.11,.29,1.02,.56,3.04,5.43,2.79,5.43-.02,0-.06-.04-.12-.12-.7-.97-1.61-1.15-2.5-1.15-.52,0-1.02,.06-1.46,.06-.36,0-.67-.04-.93-.18-1.11-.61-1.52-2.02-.91-3.13,.42-.76,1.21-1.19,2.02-1.19m0-2c-1.57,0-3.02,.85-3.77,2.23-1.15,2.08-.39,4.7,1.69,5.85,.7,.38,1.41,.43,1.89,.43,.25,0,.52-.02,.8-.03,.21-.01,.44-.03,.66-.03,.65,0,.74,.13,.87,.32,.57,.79,1.27,.96,1.75,.96h1.55l.4-1.52c.12-.46,.27-1.03-1.13-3.98-1.26-2.65-2.04-3.35-2.65-3.68-.64-.35-1.35-.54-2.08-.54h0Z" style="fill: #fff;"/>
+            </g>
+            <g>
+              <path d="M88.42,64.01c-.39,0-.9-.24-1.08-.9-.37-1.36,.54-7.02,3.38-8.69,.49-.29,1.04-.44,1.61-.44,1.2,0,2.32,.66,2.9,1.72,.43,.77,.53,1.67,.28,2.51-.25,.85-.81,1.55-1.58,1.98-.18,.1-.4,.21-.63,.33-1.14,.58-2.87,1.47-3.93,2.95-.33,.46-.73,.52-.95,.52h0Z" style="fill: #e12229;"/>
+              <path d="M92.32,54.99c.81,0,1.61,.44,2.03,1.21,.62,1.11,.21,2.52-.91,3.13-1.12,.61-3.47,1.58-4.89,3.58-.05,.07-.1,.1-.13,.1-.52,0,.12-6.15,2.8-7.72,.35-.2,.73-.3,1.11-.3m0-2c-.74,0-1.48,.2-2.12,.58-3.4,2-4.29,8.13-3.83,9.81,.31,1.13,1.25,1.63,2.05,1.63,.69,0,1.33-.34,1.76-.94,.92-1.28,2.45-2.07,3.57-2.64,.25-.13,.47-.24,.66-.35,1.01-.56,1.74-1.47,2.06-2.58,.32-1.11,.19-2.27-.37-3.28-.76-1.38-2.21-2.24-3.78-2.24h0Z" style="fill: #fff;"/>
+            </g>
+            <g>
+              <path d="M88.02,54.01c-.26,0-.75-.1-1.05-.75-.41-.89-1.01-4.47,.57-6.3,.48-.56,1.18-.88,1.92-.88,.61,0,1.2,.22,1.64,.63,1,.91,1.05,2.5,.1,3.55-.1,.11-.21,.22-.34,.36-.58,.6-1.46,1.52-1.82,2.61-.19,.58-.67,.79-1.03,.79h0Z" style="fill: #e12229;"/>
+              <path d="M89.46,47.08c.35,0,.7,.12,.97,.37,.6,.54,.62,1.5,.04,2.14-.58,.64-1.86,1.77-2.37,3.33-.02,.07-.05,.1-.08,.1-.33,0-1.07-3.84,.28-5.4,.31-.36,.74-.54,1.16-.54m0-2c-1.03,0-2,.45-2.68,1.23-1.88,2.18-1.28,6.15-.72,7.37,.57,1.24,1.64,1.34,1.96,1.34,.91,0,1.69-.58,1.98-1.48,.28-.87,1.04-1.66,1.59-2.23,.13-.14,.26-.27,.36-.38,.62-.69,.96-1.57,.94-2.48-.02-.95-.42-1.85-1.11-2.48-.63-.57-1.45-.89-2.31-.89h0Z" style="fill: #fff;"/>
+            </g>
+          </g>
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>
\ No newline at end of file
diff --git a/docker/jupyter_lab_config.py b/docker/jupyter_lab_config.py
index 672a655..dcc8405 100644
--- a/docker/jupyter_lab_config.py
+++ b/docker/jupyter_lab_config.py
@@ -902,7 +902,6 @@ c.ServerApp.quit_button = True
 #  Default: ''
 c.ServerApp.root_dir = '/notebooks/fidle-master'
 
-
 ## The session manager class to use.
 #  Default: 'jupyter_server.services.sessions.sessionmanager.SessionManager'
 # c.ServerApp.session_manager_class = 'jupyter_server.services.sessions.sessionmanager.SessionManager'
diff --git a/docker/requirements_packages.txt b/docker/requirements_packages.txt
new file mode 100644
index 0000000..276ef2c
--- /dev/null
+++ b/docker/requirements_packages.txt
@@ -0,0 +1,29 @@
+# ----------------------------------------------------
+#    ______ _     _ _       __      __             
+#   |  ____(_)   | | |      \ \    / /             
+#   | |__   _  __| | | ___   \ \  / /__ _ ____   __
+#   |  __| | |/ _` | |/ _ \   \ \/ / _ \ '_ \ \ / /
+#   | |    | | (_| | |  __/    \  /  __/ | | \ V / 
+#   |_|    |_|\__,_|_|\___|     \/ \___|_| |_|\_/  
+#                               Fidle pip virtual env
+# ----------------------------------------------------
+#
+# To install your Fidle env, see https://fidle.cnrs.fr/installation
+
+torch
+torchvision
+torch-geometric
+lightning
+-f https://download.pytorch.org/whl/cpu
+tensorflow_cpu>=2.7
+keras
+numpy
+pandas
+jupyterlab
+scikit-image
+scikit-learn
+matplotlib
+plotly
+barviz
+opencv-python
+fidle
diff --git a/docker/fidle_env_test.py b/docker_v2/fidle_env_test.py
similarity index 100%
rename from docker/fidle_env_test.py
rename to docker_v2/fidle_env_test.py
diff --git a/docker/fidle_python_pip.dockerfile b/docker_v2/fidle_python_pip.dockerfile
similarity index 100%
rename from docker/fidle_python_pip.dockerfile
rename to docker_v2/fidle_python_pip.dockerfile
diff --git a/docker_v2/jupyter_lab_config.py b/docker_v2/jupyter_lab_config.py
new file mode 100644
index 0000000..672a655
--- /dev/null
+++ b/docker_v2/jupyter_lab_config.py
@@ -0,0 +1,1019 @@
+# Configuration file for lab.
+
+#------------------------------------------------------------------------------
+# Application(SingletonConfigurable) configuration
+#------------------------------------------------------------------------------
+## This is an application.
+
+## Set the log level by value or name.
+#  Choices: any of [0, 10, 20, 30, 40, 50, 'DEBUG', 'INFO', 'WARN', 'ERROR', 'CRITICAL']
+#  Default: 30
+c.Application.log_level = 'INFO'
+
+#------------------------------------------------------------------------------
+# JupyterApp(Application) configuration
+#------------------------------------------------------------------------------
+## Base class for Jupyter applications
+
+## Answer yes to any prompts.
+#  Default: False
+# c.JupyterApp.answer_yes = False
+
+## Full path of a config file.
+#  Default: ''
+# c.JupyterApp.config_file = ''
+
+## Specify a config file to load.
+#  Default: ''
+# c.JupyterApp.config_file_name = ''
+
+## Generate default config file.
+#  Default: False
+# c.JupyterApp.generate_config = False
+
+## The date format used by logging formatters for %(asctime)s
+#  See also: Application.log_datefmt
+# c.JupyterApp.log_datefmt = '%Y-%m-%d %H:%M:%S'
+
+## The Logging format template
+#  See also: Application.log_format
+# c.JupyterApp.log_format = '[%(name)s]%(highlevel)s %(message)s'
+
+## Set the log level by value or name.
+#  See also: Application.log_level
+# c.JupyterApp.log_level = 30
+
+## Instead of starting the Application, dump configuration to stdout
+#  See also: Application.show_config
+# c.JupyterApp.show_config = False
+
+## Instead of starting the Application, dump configuration to stdout (as JSON)
+#  See also: Application.show_config_json
+# c.JupyterApp.show_config_json = False
+
+#------------------------------------------------------------------------------
+# ExtensionApp(JupyterApp) configuration
+#------------------------------------------------------------------------------
+## Base class for configurable Jupyter Server Extension Applications.
+#  
+#      ExtensionApp subclasses can be initialized two ways:
+#      1. Extension is listed as a jpserver_extension, and ServerApp calls
+#          its load_jupyter_server_extension classmethod. This is the
+#          classic way of loading a server extension.
+#      2. Extension is launched directly by calling its `launch_instance`
+#          class method. This method can be set as a entry_point in
+#          the extensions setup.py
+
+## Answer yes to any prompts.
+#  See also: JupyterApp.answer_yes
+# c.ExtensionApp.answer_yes = False
+
+## Full path of a config file.
+#  See also: JupyterApp.config_file
+# c.ExtensionApp.config_file = ''
+
+## Specify a config file to load.
+#  See also: JupyterApp.config_file_name
+# c.ExtensionApp.config_file_name = ''
+
+#  Default: ''
+# c.ExtensionApp.default_url = ''
+
+## Generate default config file.
+#  See also: JupyterApp.generate_config
+# c.ExtensionApp.generate_config = False
+
+## Handlers appended to the server.
+#  Default: []
+# c.ExtensionApp.handlers = []
+
+## The date format used by logging formatters for %(asctime)s
+#  See also: Application.log_datefmt
+# c.ExtensionApp.log_datefmt = '%Y-%m-%d %H:%M:%S'
+
+## The Logging format template
+#  See also: Application.log_format
+# c.ExtensionApp.log_format = '[%(name)s]%(highlevel)s %(message)s'
+
+## Set the log level by value or name.
+#  See also: Application.log_level
+# c.ExtensionApp.log_level = 30
+
+## Whether to open in a browser after starting.
+#          The specific browser used is platform dependent and
+#          determined by the python standard library `webbrowser`
+#          module, unless it is overridden using the --browser
+#          (ServerApp.browser) configuration option.
+#  Default: False
+# c.ExtensionApp.open_browser = False
+
+## Settings that will passed to the server.
+#  Default: {}
+# c.ExtensionApp.settings = {}
+
+## Instead of starting the Application, dump configuration to stdout
+#  See also: Application.show_config
+# c.ExtensionApp.show_config = False
+
+## Instead of starting the Application, dump configuration to stdout (as JSON)
+#  See also: Application.show_config_json
+# c.ExtensionApp.show_config_json = False
+
+## paths to search for serving static files.
+#  
+#          This allows adding javascript/css to be available from the notebook server machine,
+#          or overriding individual files in the IPython
+#  Default: []
+# c.ExtensionApp.static_paths = []
+
+## Url where the static assets for the extension are served.
+#  Default: ''
+# c.ExtensionApp.static_url_prefix = ''
+
+## Paths to search for serving jinja templates.
+#  
+#          Can be used to override templates from notebook.templates.
+#  Default: []
+# c.ExtensionApp.template_paths = []
+
+#------------------------------------------------------------------------------
+# LabServerApp(ExtensionApp) configuration
+#------------------------------------------------------------------------------
+## A Lab Server Application that runs out-of-the-box
+
+## "A list of comma-separated URIs to get the allowed extensions list
+#  
+#  .. versionchanged:: 2.0.0
+#      `LabServerApp.whitetlist_uris` renamed to `allowed_extensions_uris`
+#  Default: ''
+# c.LabServerApp.allowed_extensions_uris = ''
+
+## Answer yes to any prompts.
+#  See also: JupyterApp.answer_yes
+# c.LabServerApp.answer_yes = False
+
+## The application settings directory.
+#  Default: ''
+# c.LabServerApp.app_settings_dir = ''
+
+## The url path for the application.
+#  Default: '/lab'
+# c.LabServerApp.app_url = '/lab'
+
+## Deprecated, use `LabServerApp.blocked_extensions_uris`
+#  Default: ''
+# c.LabServerApp.blacklist_uris = ''
+
+## A list of comma-separated URIs to get the blocked extensions list
+#  
+#  .. versionchanged:: 2.0.0
+#      `LabServerApp.blacklist_uris` renamed to `blocked_extensions_uris`
+#  Default: ''
+# c.LabServerApp.blocked_extensions_uris = ''
+
+## Whether to cache files on the server. This should be `True` except in dev
+#  mode.
+#  Default: True
+# c.LabServerApp.cache_files = True
+
+## Full path of a config file.
+#  See also: JupyterApp.config_file
+# c.LabServerApp.config_file = ''
+
+## Specify a config file to load.
+#  See also: JupyterApp.config_file_name
+# c.LabServerApp.config_file_name = ''
+
+## Extra paths to look for federated JupyterLab extensions
+#  Default: []
+# c.LabServerApp.extra_labextensions_path = []
+
+## Generate default config file.
+#  See also: JupyterApp.generate_config
+# c.LabServerApp.generate_config = False
+
+## Handlers appended to the server.
+#  See also: ExtensionApp.handlers
+# c.LabServerApp.handlers = []
+
+## Options to pass to the jinja2 environment for this
+#  Default: {}
+# c.LabServerApp.jinja2_options = {}
+
+## The standard paths to look in for federated JupyterLab extensions
+#  Default: []
+# c.LabServerApp.labextensions_path = []
+
+## The url for federated JupyterLab extensions
+#  Default: ''
+# c.LabServerApp.labextensions_url = ''
+
+## The interval delay in seconds to refresh the lists
+#  Default: 3600
+# c.LabServerApp.listings_refresh_seconds = 3600
+
+## The optional kwargs to use for the listings HTTP requests             as
+#  described on https://2.python-requests.org/en/v2.7.0/api/#requests.request
+#  Default: {}
+# c.LabServerApp.listings_request_options = {}
+
+## The listings url.
+#  Default: ''
+# c.LabServerApp.listings_url = ''
+
+## The date format used by logging formatters for %(asctime)s
+#  See also: Application.log_datefmt
+# c.LabServerApp.log_datefmt = '%Y-%m-%d %H:%M:%S'
+
+## The Logging format template
+#  See also: Application.log_format
+# c.LabServerApp.log_format = '[%(name)s]%(highlevel)s %(message)s'
+
+## Set the log level by value or name.
+#  See also: Application.log_level
+# c.LabServerApp.log_level = 30
+
+## Whether to open in a browser after starting.
+#  See also: ExtensionApp.open_browser
+# c.LabServerApp.open_browser = False
+
+## The optional location of the settings schemas directory. If given, a handler
+#  will be added for settings.
+#  Default: ''
+# c.LabServerApp.schemas_dir = ''
+
+## Settings that will passed to the server.
+#  See also: ExtensionApp.settings
+# c.LabServerApp.settings = {}
+
+## The url path of the settings handler.
+#  Default: ''
+# c.LabServerApp.settings_url = ''
+
+## Instead of starting the Application, dump configuration to stdout
+#  See also: Application.show_config
+# c.LabServerApp.show_config = False
+
+## Instead of starting the Application, dump configuration to stdout (as JSON)
+#  See also: Application.show_config_json
+# c.LabServerApp.show_config_json = False
+
+## The optional location of local static files. If given, a static file handler
+#  will be added.
+#  Default: ''
+# c.LabServerApp.static_dir = ''
+
+## paths to search for serving static files.
+#  See also: ExtensionApp.static_paths
+# c.LabServerApp.static_paths = []
+
+## Url where the static assets for the extension are served.
+#  See also: ExtensionApp.static_url_prefix
+# c.LabServerApp.static_url_prefix = ''
+
+## Paths to search for serving jinja templates.
+#  See also: ExtensionApp.template_paths
+# c.LabServerApp.template_paths = []
+
+## The application templates directory.
+#  Default: ''
+# c.LabServerApp.templates_dir = ''
+
+## The optional location of the themes directory. If given, a handler will be
+#  added for themes.
+#  Default: ''
+# c.LabServerApp.themes_dir = ''
+
+## The theme url.
+#  Default: ''
+# c.LabServerApp.themes_url = ''
+
+## The url path of the translations handler.
+#  Default: ''
+# c.LabServerApp.translations_api_url = ''
+
+## The url path of the tree handler.
+#  Default: ''
+# c.LabServerApp.tree_url = ''
+
+## The optional location of the user settings directory.
+#  Default: ''
+# c.LabServerApp.user_settings_dir = ''
+
+## Deprecated, use `LabServerApp.allowed_extensions_uris`
+#  Default: ''
+# c.LabServerApp.whitelist_uris = ''
+
+## The url path of the workspaces API.
+#  Default: ''
+# c.LabServerApp.workspaces_api_url = ''
+
+## The optional location of the saved workspaces directory. If given, a handler
+#  will be added for workspaces.
+#  Default: ''
+# c.LabServerApp.workspaces_dir = ''
+
+#------------------------------------------------------------------------------
+# LabApp(LabServerApp) configuration
+#------------------------------------------------------------------------------
+## 
+#  See also: LabServerApp.allowed_extensions_uris
+# c.LabApp.allowed_extensions_uris = ''
+
+## Answer yes to any prompts.
+#  See also: JupyterApp.answer_yes
+# c.LabApp.answer_yes = False
+
+## The app directory to launch JupyterLab from.
+#  Default: None
+# c.LabApp.app_dir = None
+
+## The application settings directory.
+#  Default: ''
+# c.LabApp.app_settings_dir = ''
+
+## The url path for the application.
+#  Default: '/lab'
+# c.LabApp.app_url = '/lab'
+
+## Deprecated, use `LabServerApp.blocked_extensions_uris`
+#  See also: LabServerApp.blacklist_uris
+# c.LabApp.blacklist_uris = ''
+
+## 
+#  See also: LabServerApp.blocked_extensions_uris
+# c.LabApp.blocked_extensions_uris = ''
+
+## Whether to cache files on the server. This should be `True` except in dev
+#  mode.
+#  Default: True
+# c.LabApp.cache_files = True
+
+## Whether to enable collaborative mode (experimental).
+#  Default: False
+# c.LabApp.collaborative = False
+
+## Full path of a config file.
+#  See also: JupyterApp.config_file
+# c.LabApp.config_file = ''
+
+## Specify a config file to load.
+#  See also: JupyterApp.config_file_name
+# c.LabApp.config_file_name = ''
+
+## Whether to start the app in core mode. In this mode, JupyterLab
+#          will run using the JavaScript assets that are within the installed
+#          JupyterLab Python package. In core mode, third party extensions are disabled.
+#          The `--dev-mode` flag is an alias to this to be used when the Python package
+#          itself is installed in development mode (`pip install -e .`).
+#  Default: False
+# c.LabApp.core_mode = False
+
+## The default URL to redirect to from `/`
+#  Default: '/lab'
+# c.LabApp.default_url = '/lab'
+
+## Whether to start the app in dev mode. Uses the unpublished local
+#          JavaScript packages in the `dev_mode` folder.  In this case JupyterLab will
+#          show a red stripe at the top of the page.  It can only be used if JupyterLab
+#          is installed as `pip install -e .`.
+#  Default: False
+# c.LabApp.dev_mode = False
+
+## Whether to expose the global app instance to browser via window.jupyterlab
+#  Default: False
+# c.LabApp.expose_app_in_browser = False
+
+## Whether to load prebuilt extensions in dev mode. This may be
+#          useful to run and test prebuilt extensions in development installs of
+#          JupyterLab. APIs in a JupyterLab development install may be
+#          incompatible with published packages, so prebuilt extensions compiled
+#          against published packages may not work correctly.
+#  Default: False
+# c.LabApp.extensions_in_dev_mode = False
+
+## Extra paths to look for federated JupyterLab extensions
+#  Default: []
+# c.LabApp.extra_labextensions_path = []
+
+## Generate default config file.
+#  See also: JupyterApp.generate_config
+# c.LabApp.generate_config = False
+
+## Handlers appended to the server.
+#  See also: ExtensionApp.handlers
+# c.LabApp.handlers = []
+
+## Options to pass to the jinja2 environment for this
+#  Default: {}
+# c.LabApp.jinja2_options = {}
+
+## The standard paths to look in for federated JupyterLab extensions
+#  Default: []
+# c.LabApp.labextensions_path = []
+
+## The url for federated JupyterLab extensions
+#  Default: ''
+# c.LabApp.labextensions_url = ''
+
+## The interval delay in seconds to refresh the lists
+#  See also: LabServerApp.listings_refresh_seconds
+# c.LabApp.listings_refresh_seconds = 3600
+
+## The optional kwargs to use for the listings HTTP requests             as
+#  described on https://2.python-requests.org/en/v2.7.0/api/#requests.request
+#  See also: LabServerApp.listings_request_options
+# c.LabApp.listings_request_options = {}
+
+## The listings url.
+#  Default: ''
+# c.LabApp.listings_url = ''
+
+## The date format used by logging formatters for %(asctime)s
+#  See also: Application.log_datefmt
+# c.LabApp.log_datefmt = '%Y-%m-%d %H:%M:%S'
+
+## The Logging format template
+#  See also: Application.log_format
+# c.LabApp.log_format = '[%(name)s]%(highlevel)s %(message)s'
+
+## Set the log level by value or name.
+#  See also: Application.log_level
+# c.LabApp.log_level = 30
+
+## Whether to open in a browser after starting.
+#  See also: ExtensionApp.open_browser
+# c.LabApp.open_browser = False
+
+## The override url for static lab assets, typically a CDN.
+#  Default: ''
+# c.LabApp.override_static_url = ''
+
+## The override url for static lab theme assets, typically a CDN.
+#  Default: ''
+# c.LabApp.override_theme_url = ''
+
+## The optional location of the settings schemas directory. If given, a handler
+#  will be added for settings.
+#  Default: ''
+# c.LabApp.schemas_dir = ''
+
+## Settings that will passed to the server.
+#  See also: ExtensionApp.settings
+# c.LabApp.settings = {}
+
+## The url path of the settings handler.
+#  Default: ''
+# c.LabApp.settings_url = ''
+
+## Instead of starting the Application, dump configuration to stdout
+#  See also: Application.show_config
+# c.LabApp.show_config = False
+
+## Instead of starting the Application, dump configuration to stdout (as JSON)
+#  See also: Application.show_config_json
+# c.LabApp.show_config_json = False
+
+## Splice source packages into app directory.
+#  Default: False
+# c.LabApp.splice_source = False
+
+## The optional location of local static files. If given, a static file handler
+#  will be added.
+#  Default: ''
+# c.LabApp.static_dir = ''
+
+## paths to search for serving static files.
+#  See also: ExtensionApp.static_paths
+# c.LabApp.static_paths = []
+
+## Url where the static assets for the extension are served.
+#  See also: ExtensionApp.static_url_prefix
+# c.LabApp.static_url_prefix = ''
+
+## Paths to search for serving jinja templates.
+#  See also: ExtensionApp.template_paths
+# c.LabApp.template_paths = []
+
+## The application templates directory.
+#  Default: ''
+# c.LabApp.templates_dir = ''
+
+## The optional location of the themes directory. If given, a handler will be
+#  added for themes.
+#  Default: ''
+# c.LabApp.themes_dir = ''
+
+## The theme url.
+#  Default: ''
+# c.LabApp.themes_url = ''
+
+## The url path of the translations handler.
+#  Default: ''
+# c.LabApp.translations_api_url = ''
+
+## The url path of the tree handler.
+#  Default: ''
+# c.LabApp.tree_url = ''
+
+## The directory for user settings.
+#  Default: '/root/.jupyter/lab/user-settings'
+# c.LabApp.user_settings_dir = '/root/.jupyter/lab/user-settings'
+
+## Whether to serve the app in watch mode
+#  Default: False
+# c.LabApp.watch = False
+
+## Deprecated, use `LabServerApp.allowed_extensions_uris`
+#  See also: LabServerApp.whitelist_uris
+# c.LabApp.whitelist_uris = ''
+
+## The url path of the workspaces API.
+#  Default: ''
+# c.LabApp.workspaces_api_url = ''
+
+## The directory for workspaces
+#  Default: '/root/.jupyter/lab/workspaces'
+# c.LabApp.workspaces_dir = '/root/.jupyter/lab/workspaces'
+
+#------------------------------------------------------------------------------
+# ServerApp(JupyterApp) configuration
+#------------------------------------------------------------------------------
+## Set the Access-Control-Allow-Credentials: true header
+#  Default: False
+# c.ServerApp.allow_credentials = False
+
+## Set the Access-Control-Allow-Origin header
+#  
+#          Use '*' to allow any origin to access your server.
+#  
+#          Takes precedence over allow_origin_pat.
+#  Default: ''
+# c.ServerApp.allow_origin = ''
+
+## Use a regular expression for the Access-Control-Allow-Origin header
+#  
+#          Requests from an origin matching the expression will get replies with:
+#  
+#              Access-Control-Allow-Origin: origin
+#  
+#          where `origin` is the origin of the request.
+#  
+#          Ignored if allow_origin is set.
+#  Default: ''
+# c.ServerApp.allow_origin_pat = ''
+
+## Allow password to be changed at login for the Jupyter server.
+#  
+#                      While logging in with a token, the Jupyter server UI will give the opportunity to
+#                      the user to enter a new password at the same time that will replace
+#                      the token login mechanism.
+#  
+#                      This can be set to false to prevent changing password from
+#  the UI/API.
+#  Default: True
+c.ServerApp.allow_password_change = False
+
+## Allow requests where the Host header doesn't point to a local server
+#  
+#         By default, requests get a 403 forbidden response if the 'Host' header
+#         shows that the browser thinks it's on a non-local domain.
+#         Setting this option to True disables this check.
+#  
+#         This protects against 'DNS rebinding' attacks, where a remote web server
+#         serves you a page and then changes its DNS to send later requests to a
+#         local IP, bypassing same-origin checks.
+#  
+#         Local IP addresses (such as 127.0.0.1 and ::1) are allowed as local,
+#         along with hostnames configured in local_hostnames.
+#  Default: False
+# c.ServerApp.allow_remote_access = False
+
+## Whether to allow the user to run the server as root.
+#  Default: False
+c.ServerApp.allow_root = True
+
+## Answer yes to any prompts.
+#  See also: JupyterApp.answer_yes
+# c.ServerApp.answer_yes = False
+
+## "
+#          Require authentication to access prometheus metrics.
+#  Default: True
+# c.ServerApp.authenticate_prometheus = True
+
+## Reload the webapp when changes are made to any Python src files.
+#  Default: False
+# c.ServerApp.autoreload = False
+
+## The base URL for the Jupyter server.
+#  
+#                         Leading and trailing slashes can be omitted,
+#                         and will automatically be added.
+#  Default: '/'
+# c.ServerApp.base_url = '/'
+
+## Specify what command to use to invoke a web
+#                        browser when starting the server. If not specified, the
+#                        default browser will be determined by the `webbrowser`
+#                        standard library module, which allows setting of the
+#                        BROWSER environment variable to override it.
+#  Default: ''
+# c.ServerApp.browser = ''
+
+## The full path to an SSL/TLS certificate file.
+#  Default: ''
+# c.ServerApp.certfile = ''
+
+## The full path to a certificate authority certificate for SSL/TLS client
+#  authentication.
+#  Default: ''
+# c.ServerApp.client_ca = ''
+
+## Full path of a config file.
+#  See also: JupyterApp.config_file
+# c.ServerApp.config_file = ''
+
+## Specify a config file to load.
+#  See also: JupyterApp.config_file_name
+# c.ServerApp.config_file_name = ''
+
+## The config manager class to use
+#  Default: 'jupyter_server.services.config.manager.ConfigManager'
+# c.ServerApp.config_manager_class = 'jupyter_server.services.config.manager.ConfigManager'
+
+## The content manager class to use.
+#  Default: 'jupyter_server.services.contents.largefilemanager.LargeFileManager'
+# c.ServerApp.contents_manager_class = 'jupyter_server.services.contents.largefilemanager.LargeFileManager'
+
+## Extra keyword arguments to pass to `set_secure_cookie`. See tornado's
+#  set_secure_cookie docs for details.
+#  Default: {}
+# c.ServerApp.cookie_options = {}
+
+## The random bytes used to secure cookies.
+#          By default this is a new random number every time you start the server.
+#          Set it to a value in a config file to enable logins to persist across server sessions.
+#  
+#          Note: Cookie secrets should be kept private, do not share config files with
+#          cookie_secret stored in plaintext (you can read the value from a file).
+#  Default: b''
+# c.ServerApp.cookie_secret = b''
+
+## The file where the cookie secret is stored.
+#  Default: ''
+# c.ServerApp.cookie_secret_file = ''
+
+## Override URL shown to users.
+#  
+#          Replace actual URL, including protocol, address, port and base URL,
+#          with the given value when displaying URL to the users. Do not change
+#          the actual connection URL. If authentication token is enabled, the
+#          token is added to the custom URL automatically.
+#  
+#          This option is intended to be used when the URL to display to the user
+#          cannot be determined reliably by the Jupyter server (proxified
+#          or containerized setups for example).
+#  Default: ''
+# c.ServerApp.custom_display_url = ''
+
+## The default URL to redirect to from `/`
+#  Default: '/'
+# c.ServerApp.default_url = '/'
+
+## Disable cross-site-request-forgery protection
+#  
+#          Jupyter notebook 4.3.1 introduces protection from cross-site request forgeries,
+#          requiring API requests to either:
+#  
+#          - originate from pages served by this server (validated with XSRF cookie and token), or
+#          - authenticate with a token
+#  
+#          Some anonymous compute resources still desire the ability to run code,
+#          completely without authentication.
+#          These services can disable all authentication and security checks,
+#          with the full knowledge of what that implies.
+#  Default: False
+# c.ServerApp.disable_check_xsrf = False
+
+## handlers that should be loaded at higher priority than the default services
+#  Default: []
+# c.ServerApp.extra_services = []
+
+## Extra paths to search for serving static files.
+#  
+#          This allows adding javascript/css to be available from the Jupyter server machine,
+#          or overriding individual files in the IPython
+#  Default: []
+# c.ServerApp.extra_static_paths = []
+
+## Extra paths to search for serving jinja templates.
+#  
+#          Can be used to override templates from jupyter_server.templates.
+#  Default: []
+# c.ServerApp.extra_template_paths = []
+
+## Open the named file when the application is launched.
+#  Default: ''
+# c.ServerApp.file_to_run = ''
+
+## The URL prefix where files are opened directly.
+#  Default: 'notebooks'
+# c.ServerApp.file_url_prefix = 'notebooks'
+
+## Generate default config file.
+#  See also: JupyterApp.generate_config
+# c.ServerApp.generate_config = False
+
+## Extra keyword arguments to pass to `get_secure_cookie`. See tornado's
+#  get_secure_cookie docs for details.
+#  Default: {}
+# c.ServerApp.get_secure_cookie_kwargs = {}
+
+## (bytes/sec)
+#          Maximum rate at which stream output can be sent on iopub before they are
+#          limited.
+#  Default: 1000000
+# c.ServerApp.iopub_data_rate_limit = 1000000
+
+## (msgs/sec)
+#          Maximum rate at which messages can be sent on iopub before they are
+#          limited.
+#  Default: 1000
+# c.ServerApp.iopub_msg_rate_limit = 1000
+
+## The IP address the Jupyter server will listen on.
+#  Default: 'localhost'
+c.ServerApp.ip = '0.0.0.0'
+
+## Supply extra arguments that will be passed to Jinja environment.
+#  Default: {}
+# c.ServerApp.jinja_environment_options = {}
+
+## Extra variables to supply to jinja templates when rendering.
+#  Default: {}
+# c.ServerApp.jinja_template_vars = {}
+
+## Dict of Python modules to load as Jupyter server extensions.Entry values can
+#  be used to enable and disable the loading ofthe extensions. The extensions
+#  will be loaded in alphabetical order.
+#  Default: {}
+# c.ServerApp.jpserver_extensions = {}
+
+## The kernel manager class to use.
+#  Default: 'jupyter_server.services.kernels.kernelmanager.AsyncMappingKernelManager'
+# c.ServerApp.kernel_manager_class = 'jupyter_server.services.kernels.kernelmanager.AsyncMappingKernelManager'
+
+## The kernel spec manager class to use. Should be a subclass of
+#  `jupyter_client.kernelspec.KernelSpecManager`.
+#  
+#  The Api of KernelSpecManager is provisional and might change without warning
+#  between this version of Jupyter and the next stable one.
+#  Default: 'jupyter_client.kernelspec.KernelSpecManager'
+# c.ServerApp.kernel_spec_manager_class = 'jupyter_client.kernelspec.KernelSpecManager'
+
+## Preferred kernel message protocol over websocket to use (default: None). If an
+#  empty string is passed, select the legacy protocol. If None, the selected
+#  protocol will depend on what the front-end supports (usually the most recent
+#  protocol supported by the back-end and the front-end).
+#  Default: None
+# c.ServerApp.kernel_ws_protocol = None
+
+## The full path to a private key file for usage with SSL/TLS.
+#  Default: ''
+# c.ServerApp.keyfile = ''
+
+## Whether to limit the rate of IOPub messages (default: True). If True, use
+#  iopub_msg_rate_limit, iopub_data_rate_limit and/or rate_limit_window to tune
+#  the rate.
+#  Default: True
+# c.ServerApp.limit_rate = True
+
+## Hostnames to allow as local when allow_remote_access is False.
+#  
+#         Local IP addresses (such as 127.0.0.1 and ::1) are automatically accepted
+#         as local as well.
+#  Default: ['localhost']
+# c.ServerApp.local_hostnames = ['localhost']
+
+## The date format used by logging formatters for %(asctime)s
+#  See also: Application.log_datefmt
+# c.ServerApp.log_datefmt = '%Y-%m-%d %H:%M:%S'
+
+## The Logging format template
+#  See also: Application.log_format
+# c.ServerApp.log_format = '[%(name)s]%(highlevel)s %(message)s'
+
+## Set the log level by value or name.
+#  See also: Application.log_level
+# c.ServerApp.log_level = 30
+
+## The login handler class to use.
+#  Default: 'jupyter_server.auth.login.LoginHandler'
+# c.ServerApp.login_handler_class = 'jupyter_server.auth.login.LoginHandler'
+
+## The logout handler class to use.
+#  Default: 'jupyter_server.auth.logout.LogoutHandler'
+# c.ServerApp.logout_handler_class = 'jupyter_server.auth.logout.LogoutHandler'
+
+## Sets the maximum allowed size of the client request body, specified in the
+#  Content-Length request header field. If the size in a request exceeds the
+#  configured value, a malformed HTTP message is returned to the client.
+#  
+#  Note: max_body_size is applied even in streaming mode.
+#  Default: 536870912
+# c.ServerApp.max_body_size = 536870912
+
+## Gets or sets the maximum amount of memory, in bytes, that is allocated for use
+#  by the buffer manager.
+#  Default: 536870912
+# c.ServerApp.max_buffer_size = 536870912
+
+## Gets or sets a lower bound on the open file handles process resource limit.
+#  This may need to be increased if you run into an OSError: [Errno 24] Too many
+#  open files. This is not applicable when running on Windows.
+#  Default: 0
+# c.ServerApp.min_open_files_limit = 0
+
+## DEPRECATED, use root_dir.
+#  Default: ''
+# c.ServerApp.notebook_dir = ''
+
+## Whether to open in a browser after starting.
+#                          The specific browser used is platform dependent and
+#                          determined by the python standard library `webbrowser`
+#                          module, unless it is overridden using the --browser
+#                          (ServerApp.browser) configuration option.
+#  Default: False
+c.ServerApp.open_browser = False
+
+## Hashed password to use for web authentication.
+#  
+#                        To generate, type in a python/IPython shell:
+#  
+#                          from jupyter_server.auth import passwd; passwd()
+#  
+#                        The string should be of the form type:salt:hashed-
+#  password.
+#  Default: ''
+c.ServerApp.password = ''
+
+## Forces users to use a password for the Jupyter server.
+#                        This is useful in a multi user environment, for instance when
+#                        everybody in the LAN can access each other's machine through ssh.
+#  
+#                        In such a case, serving on localhost is not secure since
+#                        any user can connect to the Jupyter server via ssh.
+#  Default: False
+# c.ServerApp.password_required = False
+
+## The port the server will listen on (env: JUPYTER_PORT).
+#  Default: 0
+c.ServerApp.port = 8888
+
+## The number of additional ports to try if the specified port is not available
+#  (env: JUPYTER_PORT_RETRIES).
+#  Default: 50
+# c.ServerApp.port_retries = 50
+
+## Preferred starting directory to use for notebooks and kernels.
+#  Default: ''
+# c.ServerApp.preferred_dir = ''
+
+## DISABLED: use %pylab or %matplotlib in the notebook to enable matplotlib.
+#  Default: 'disabled'
+# c.ServerApp.pylab = 'disabled'
+
+## If True, display controls to shut down the Jupyter server, such as menu items
+#  or buttons.
+#  Default: True
+c.ServerApp.quit_button = True
+
+## (sec) Time window used to
+#          check the message and data rate limits.
+#  Default: 3
+# c.ServerApp.rate_limit_window = 3
+
+## Reraise exceptions encountered loading server extensions?
+#  Default: False
+# c.ServerApp.reraise_server_extension_failures = False
+
+## The directory to use for notebooks and kernels.
+#  Default: ''
+c.ServerApp.root_dir = '/notebooks/fidle-master'
+
+
+## The session manager class to use.
+#  Default: 'jupyter_server.services.sessions.sessionmanager.SessionManager'
+# c.ServerApp.session_manager_class = 'jupyter_server.services.sessions.sessionmanager.SessionManager'
+
+## Instead of starting the Application, dump configuration to stdout
+#  See also: Application.show_config
+# c.ServerApp.show_config = False
+
+## Instead of starting the Application, dump configuration to stdout (as JSON)
+#  See also: Application.show_config_json
+# c.ServerApp.show_config_json = False
+
+## Shut down the server after N seconds with no kernels or terminals running and
+#  no activity. This can be used together with culling idle kernels
+#  (MappingKernelManager.cull_idle_timeout) to shutdown the Jupyter server when
+#  it's not in use. This is not precisely timed: it may shut down up to a minute
+#  later. 0 (the default) disables this automatic shutdown.
+#  Default: 0
+# c.ServerApp.shutdown_no_activity_timeout = 0
+
+## The UNIX socket the Jupyter server will listen on.
+#  Default: ''
+# c.ServerApp.sock = ''
+
+## The permissions mode for UNIX socket creation (default: 0600).
+#  Default: '0600'
+# c.ServerApp.sock_mode = '0600'
+
+## Supply SSL options for the tornado HTTPServer.
+#              See the tornado docs for details.
+#  Default: {}
+# c.ServerApp.ssl_options = {}
+
+## Supply overrides for terminado. Currently only supports "shell_command".
+#  Default: {}
+# c.ServerApp.terminado_settings = {}
+
+## Set to False to disable terminals.
+#  
+#           This does *not* make the server more secure by itself.
+#           Anything the user can in a terminal, they can also do in a notebook.
+#  
+#           Terminals may also be automatically disabled if the terminado package
+#           is not available.
+#  Default: True
+# c.ServerApp.terminals_enabled = True
+
+## Token used for authenticating first-time connections to the server.
+#  
+#          The token can be read from the file referenced by JUPYTER_TOKEN_FILE or set directly
+#          with the JUPYTER_TOKEN environment variable.
+#  
+#          When no password is enabled,
+#          the default is to generate a new, random token.
+#  
+#          Setting to an empty string disables authentication altogether, which
+#  is NOT RECOMMENDED.
+#  Default: '<generated>'
+# c.ServerApp.token = '<generated>'
+
+## Supply overrides for the tornado.web.Application that the Jupyter server uses.
+#  Default: {}
+# c.ServerApp.tornado_settings = {}
+
+## Whether to trust or not X-Scheme/X-Forwarded-Proto and X-Real-Ip/X-Forwarded-
+#  For headerssent by the upstream reverse proxy. Necessary if the proxy handles
+#  SSL
+#  Default: False
+# c.ServerApp.trust_xheaders = False
+
+## Disable launching browser by redirect file
+#       For versions of notebook > 5.7.2, a security feature measure was added that
+#       prevented the authentication token used to launch the browser from being visible.
+#       This feature makes it difficult for other users on a multi-user system from
+#       running code in your Jupyter session as you.
+#       However, some environments (like Windows Subsystem for Linux (WSL) and Chromebooks),
+#       launching a browser using a redirect file can lead the browser failing to load.
+#       This is because of the difference in file structures/paths between the runtime and
+#       the browser.
+#  
+#       Disabling this setting to False will disable this behavior, allowing the browser
+#       to launch by using a URL and visible token (as before).
+#  Default: True
+# c.ServerApp.use_redirect_file = True
+
+## Specify where to open the server on startup. This is the
+#          `new` argument passed to the standard library method `webbrowser.open`.
+#          The behaviour is not guaranteed, but depends on browser support. Valid
+#          values are:
+#  
+#           - 2 opens a new tab,
+#           - 1 opens a new window,
+#           - 0 opens in an existing window.
+#  
+#          See the `webbrowser.open` documentation for details.
+#  Default: 2
+# c.ServerApp.webbrowser_open_new = 2
+
+## Set the tornado compression options for websocket connections.
+#  
+#  This value will be returned from
+#  :meth:`WebSocketHandler.get_compression_options`. None (default) will disable
+#  compression. A dict (even an empty one) will enable compression.
+#  
+#  See the tornado docs for WebSocketHandler.get_compression_options for details.
+#  Default: None
+# c.ServerApp.websocket_compression_options = None
+
+## The base URL for websockets,
+#          if it differs from the HTTP server (hint: it almost certainly doesn't).
+#  
+#          Should be in the form of an HTTP origin: ws[s]://hostname[:port]
+#  Default: ''
+# c.ServerApp.websocket_url = ''
diff --git a/docker_v2/notebook.json b/docker_v2/notebook.json
new file mode 100644
index 0000000..9066bef
--- /dev/null
+++ b/docker_v2/notebook.json
@@ -0,0 +1,6 @@
+{
+  "load_extensions": {
+    "execute_time/ExecuteTime": true,
+    "tree-filter/index": true
+  }
+}
diff --git a/docker/requirements-cpu.txt b/docker_v2/requirements-cpu.txt
similarity index 100%
rename from docker/requirements-cpu.txt
rename to docker_v2/requirements-cpu.txt
diff --git a/docker/requirements.txt b/docker_v2/requirements.txt
similarity index 100%
rename from docker/requirements.txt
rename to docker_v2/requirements.txt
-- 
GitLab