From 2eb8e5493f74d60ea123c8746b010c072af0449e Mon Sep 17 00:00:00 2001 From: Amit Sharma Date: Wed, 1 Jun 2022 21:46:38 +0530 Subject: [PATCH] Version Bump [0.8]: Updated version and docs (#301) * updated version and docs * updated models using _save template models to be compatible with sklearn 1.1 * added environment yml files to manifest * removed test for 3.6 Signed-off-by: Amit Sharma --- .github/workflows/pythonpackage.yml | 5 +- MANIFEST.in | 3 + .../utils/sample_trained_models/custom.sav | Bin 53460 -> 43789 bytes .../sample_trained_models/custom_binary.sav | Bin 68791 -> 63051 bytes .../custom_multiclass.sav | Bin 80017 -> 75842 bytes .../custom_regression.sav | Bin 63809 -> 67664 bytes .../sample_trained_models/custom_vars.sav | Bin 41902 -> 46290 bytes docs/_modules/dice_ml/constants.html | 159 +- .../dice_ml/counterfactual_explanations.html | 161 +- docs/_modules/dice_ml/data.html | 152 +- .../private_data_interface.html | 162 +- .../public_data_interface.html | 204 +- docs/_modules/dice_ml/dice.html | 162 +- .../dice_ml/diverse_counterfactuals.html | 161 +- .../dice_ml/explainer_interfaces/dice_KD.html | 171 +- .../explainer_interfaces/dice_genetic.html | 168 +- .../explainer_interfaces/dice_pytorch.html | 162 +- .../explainer_interfaces/dice_random.html | 161 +- .../dice_tensorflow1.html | 172 +- .../dice_tensorflow2.html | 164 +- .../explainer_interfaces/explainer_base.html | 331 +-- .../feasible_base_vae.html | 165 +- .../feasible_model_approx.html | 160 +- docs/_modules/dice_ml/model.html | 156 +- .../dice_ml/model_interfaces/base_model.html | 160 +- .../keras_tensorflow_model.html | 157 +- .../model_interfaces/pytorch_model.html | 157 +- docs/_modules/dice_ml/utils/exception.html | 152 +- docs/_modules/dice_ml/utils/helpers.html | 175 +- .../utils/sample_architecture/vae_model.html | 361 +++ docs/_modules/dice_ml/utils/serialize.html | 152 +- docs/_modules/index.html | 152 +- docs/_static/basic.css | 114 +- docs/_static/css/theme.css | 4 +- docs/_static/doctools.js | 14 +- docs/_static/documentation_options.js | 2 +- docs/_static/js/theme.js | 2 +- docs/_static/language_data.js | 6 +- docs/_static/pygments.css | 8 +- docs/_static/searchtools.js | 43 +- docs/_static/underscore-1.13.1.js | 2042 +++++++++++++++++ docs/_static/underscore.js | 37 +- docs/dice_ml.data_interfaces.html | 385 ++-- docs/dice_ml.explainer_interfaces.html | 734 +++--- docs/dice_ml.html | 417 ++-- docs/dice_ml.model_interfaces.html | 270 +-- docs/dice_ml.schema.html | 181 +- docs/dice_ml.utils.html | 312 +-- docs/dice_ml.utils.sample_architecture.html | 258 +-- docs/genindex.html | 213 +- docs/index.html | 246 +- docs/modules.html | 159 +- ...king_different_CF_explanation_methods.html | 268 +-- docs/notebooks/DiCE_feature_importances.html | 1176 +++++----- docs/notebooks/DiCE_getting_started.html | 494 ++-- .../DiCE_getting_started_feasible.html | 304 +-- docs/notebooks/DiCE_model_agnostic_CFs.html | 736 +++--- ...ticlass_classification_and_regression.html | 1141 +++------ .../notebooks/DiCE_with_advanced_options.html | 291 +-- docs/notebooks/DiCE_with_private_data.html | 259 +-- docs/notebooks/nb_index.html | 169 +- docs/objects.inv | Bin 9190 -> 9593 bytes docs/py-modindex.html | 151 +- docs/readme.html | 238 +- docs/search.html | 158 +- docs/searchindex.js | 2 +- docs/source/conf.py | 2 +- ...ing_different_CF_explanation_methods.ipynb | 2 +- setup.py | 2 +- tests/conftest.py | 83 +- 70 files changed, 6449 insertions(+), 8919 deletions(-) create mode 100644 docs/_modules/dice_ml/utils/sample_architecture/vae_model.html create mode 100644 docs/_static/underscore-1.13.1.js diff --git a/.github/workflows/pythonpackage.yml b/.github/workflows/pythonpackage.yml index 7df0cdf9..4888547b 100644 --- a/.github/workflows/pythonpackage.yml +++ b/.github/workflows/pythonpackage.yml @@ -15,11 +15,8 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - python-version: [3.6, 3.7, 3.8, 3.9, "3.10"] + python-version: [3.7, 3.8, 3.9, "3.10"] os: [ubuntu-latest, macos-latest] - exclude: - - os: macos-latest - python-version: 3.6 steps: - uses: actions/checkout@v3 - name: Set up Python ${{ matrix.python-version }} ${{ matrix.os }} diff --git a/MANIFEST.in b/MANIFEST.in index 6dbce984..c4c5ed93 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,6 +1,9 @@ include requirements.txt include requirements-deeplearning.txt include requirements-test.txt +include requirements-linting.txt +include environment.yml +include environment-deeplearning.yml include LICENSE recursive-include docs * recursive-include tests *.py diff --git a/dice_ml/utils/sample_trained_models/custom.sav b/dice_ml/utils/sample_trained_models/custom.sav index b56b67e6abe771efddf0f7e35afa42215ad5c921..f5254e8fac1eeebe9dbe4566c59946bf78820c19 100644 GIT binary patch literal 43789 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 literal 53460 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 uZDb^mqY2_0Rg6y&;+t^DPI4;CwZf{P#tNqe` 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 QKJMCV^8{NzE3%{i4^Chxl>h($ literal 68791 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

@rp&G=tYK}+O( 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 diff --git a/dice_ml/utils/sample_trained_models/custom_multiclass.sav b/dice_ml/utils/sample_trained_models/custom_multiclass.sav index 8169c1bde57c39f0b52bf5b564009174a2feb4f3..0ba3dec83774ef4e5e1c0eba31b09cb35f496d6c 100644 GIT binary patch literal 75842 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 DcLs!t literal 80017 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 diff --git a/dice_ml/utils/sample_trained_models/custom_regression.sav b/dice_ml/utils/sample_trained_models/custom_regression.sav index c409d9dbf0623ddbaf1a2a368ce25976cb244dc0..4cfe15baf3c16a0d599322934df9402e6525d708 100644 GIT binary patch literal 67664 zcmeHQ33wD$p6`U*gb)-kfuc%uupouoo_NV-EGa(JPDB;S-P ze3pWKjv}DLtcqF3dpNSf`ssL~crY`&OH^c0)QzZ-n|(*U?$@unDz7V5U1?3j*Ol(B z^S$5u{m=J*3$q>?=gM%wms}j0-5`2{{<0=tli1+%i;A3AMgDwHIpZGXPGyvw9SVz0 zA!R1`v#=>BHU$GUVki^{D)Oo1_?kdtQy?Ukd1?X;kw(8K9Q67_b%9``2=*FKfxf(s z`Yw9zLTXQZi9Y^FqatPEYfIVis=2<#rbrl`Y9P5F{-(@R?G1sO?sqNt+#pU>cZ;6A zsL>Y+`TVmyw|N^PVn~^M_kQ%?F1eq#w$|hG*ZOL_Velj^a$X4BNm!gUUy*Yf#af@& zugC>;zJ>;TtWqiG-X;dC!9#-YYe6H3;7GAnk+W(7P4kszx!9xLn+NO{@&&;0+2@pj ze@dkKK5)`djkf_l!cg)Ev8DufSmvqqhP{ehbZyw{uk{9Nuf@AZA0>aTFD!W)MQ~ru zavu5+3fC&lQfaeviZlXVLxgwU7zoZ+Dy3m9_}iI^oL?CM-2fi6LGdnCA`uv`{pg1Q2?gKQA zT-4~D=b>=mmFQ=mFq??HY{KgyG?r%DJ%5;g1h0Zr2i}BBNSas$8Rt za%Z?RmVh0k3h<gA>Wo6|R$G{7{xrMM&-2(c%Z-v^FsK>#Va+crQ zC@Pha`@kue0+{3n#YQiDpr9g61tfr)*%Ow6Vn_-!)GCvO?c>l(&hdNd1JxnWX2(+l z)iYQ0&62|4Yk)KPM0H$v>O^li5)?h~Y9UV`5(YgtApT3x5sGw!G#x&qbTfIxOz^=A zZhe#_N@t7kj*CEt;j@LnDD^1rOgT^G7Q_-#ndB4YlWCsugacq#z!P{_0~~>_kowP5 z+!1X8M-|=>o#w&>zym`&X{10 zcE2g-myt8pmBc-|NRN1_Y^frh!`rF9mrj-@#(H%I>^EsyrL;V82f+@GQ7GzY()<@l zlho!fmoAnrX_hLa%caTE6lrRubVa4)2BQyvT4k`XNA!EE8-VC(K}hKvBQl6e?Zx|$ z(Isa90Rxyt&Ztq~DD%qskRd(3+IbLU#niZfqZbY|cONeSNqkHBAdmD{M+d?x00|y( za$a@B2iVRJm^?ew;Hwc4tGP2O;dlq_`xRidEc{_M_~3H8(1!@Q66B{@fQyidQ9?wD z=nsjF;JM2@K(7!(K-vtt2JmyB@pAO>n&=@>nNkF~+5>j=H6kG|4G z+t4I=V>{uVkqiB?)(k1`TDdsdxE>%wyp171iU*`4(oyMHJ=8JlGvHe$e9MAwec)RT zcmutcUmXa9q0-d^#6*4|Q0)mpK?_jbSc!H7jOljC1#`VY^fbY+(o&xdjs<@0NAB_fZ zt66e3M7BqfkBdh-{1)g#5Z-VsW@$+RilCjPBt#gH!4aSg zx^salh5)BMQ!Y5uEpne5&YKWZR;236QF1|pSQqxxNIsxp$bExQgCL)BRY(I=#Iz7O zkH8j)V?P3TwA1Ai@IV3MkohGHZ@7Lmcn%)<*H3^=ng>3e75!8UK9#`} zt#p@wKhMU0mV!UWM)w&7KAnSq7<-=*aZd!?Rt(y%<&tLbE%=XKS?ZSB?0NX7zYDFq z_6`3i@PQEj`@r%{b;mx;7JqCP77koL`SS&91+t&ITRBt)>DN*9gZg`$x{cl!{@fwZ z$H2c6AJ=*jc^+~c5$-wU#Idb3Ve~%1^~R&~ZWw*uf!mNTF!Hre^SV0&W&c^-V9yn`av4&*opw)#uJ*%CBh z3}~Ysc;n|$GalF{Jo*THea8T8w?F^}PiG;pK0df)fMdYQ)d3ce87i<6v1UAg+J(H1 z!BeUZ@92^><2$rnaJ5;}~+$+!&B2 z0u%!%9~S-_y|m1Ti1OVI0W;-pb=!$Z*+O8y8d-3@W571Yn3yrpd+mhLUkE2noOP)$ z(B36uQpX{{6#ww7G_w7#3}ASfk7Y1kptV}Wm@XtcIT#b_JOkJNq5|zZ4WMii#cePB zl;s$(%rPbf5Ts{zsG^vNYW%xa6tj%kz5z1k>J$U3O~XV6jEVKk!4MmZnfv4gGCKfx znY~>z05}l z{8pEY*;9edCz@G+ax*5@Ef44d%_bdl-pJOR^aU0Y#jW?}04;M{m%w6m(}ly9?7jNc z#~CKF+j#j{!$f?*+NNPz0|v{E>3pN+APW0gWvU+-W8IXSJ0i`2)$4B2#Fc4a zIpl8HlQZdL$AD#x@vsMaTS~Sk?{3*>rSZV4lxuaRE{%ud(#m+~ME;ij!U*)*=aljA z-1*z@b`03&j0aW}_Zkm|jOmc^FfRO1KgWR8ZN}Vj&uKe1FZ|Pue>->Uhe!{z5xLfe{aFj`H(lKX$ zdHE2>fNhR3S+~ipcdmcA`tHAXX}sVTMeoQ#y%N~O!pul~n78es9c zF|^D;+%m-B%>vnV5_HqtWfG9A+k_X8do*qu0|ujwm)DV3>1fo=G9G0o*zO=cXUfW& zGyxXrXo`7|C?30W+Wjm1FKB>8fJlHsw)psV;Z{dPvDqX9He!;bgZKwE+2GqKz-*4y z_TBXTO^yMp+d7^LGFIt|W6SP3^p7reyq*dy1063NLux?10EFJD3uJ7}*v^=)rQ4=E z2JGZ?Ji>q!VUOyK zY&Rah3T_$W7_hp{m`Noe5Wo;oY;6((uMxl+4~A)5>ByLD5&~{+lBU&}sw9LbhWzFC zjsZJ4#v}~J0<`Vu3%BoU?K*8sV}xw7G9QsQG^b@gK4xFW7%$v9<`k6Adq6jHn&_I4 zfGx}i%>U>X=lqDt0V{zhMvPgtA^c!T)|)0pG279uaspfeWJ>g727BE~K=LxJ_C7g9 zF$T`jsNYU60o7t)eSQ4e;xuC{s-sbMOZnQJn~EOWt^pPSA^{57Mn!SLBm}#ehZV(U zftAObXo}o;ZyeE0La@n?*Zy|iD93pp4+AkdzkSS4>UO=i5Hz( zQ`$f-_K79um0->Oo2WC7gdr@JgLAikm61-pN^wrxGh4Q9o~JrGNU!7H&GxEUp;T-n zl;~bX4z6KGqR~s6qLg=jGC@dvulB)XH8~-aVAd(tZst#4ciwyd)OF1glBWQHgizHt z!9$A*Ut+YPJR`Mv-J$>K*jx^?`3qJs^uRmJS@qW}knBE=4SE^ce{}eLEohw2*6bIW z(W^t%s`f^KjJqKwlVa)u2vO)nC|l@=5NczrenTCarmHj2tiW$Iy=<`% z`akz72ULs9?#z>>Iu_B@l*z#Z{lET*_Mq$_~4&o~OK{#5*|ka>x{8 z#cRe0CP;Ixs=W}TRcIND&ylQEcnEL_kmIilChjM+x_Q&b*z55!7CVQ9o3Y~klDngk z6r$MJq`AL1cSx0Ez)DVYCml^X9y1Wgy7^_7_sLH`*45m}{(J!8?PwMtyrPf=h+*O^ z64|AePSoeUPxko?flO=eByvNNCs+XMiDZj)yw1K;vr`XjOHI;MEv=t_{m@6cz}7QK z$D*0yFEhGfahE1(`={w-lCqT~cn2RC(x*4>@1J^LTcrx1 zG`Q(cJoDTR&!-GP%{tKxeJ$ydWI-D*q+|&ea4DbQD{k!285pcxZpR}NcpNYE?hl%leD@;ejy zItFZWRyhSwrLi*8GOuc```IXTF7tcz0)_Eh=8%0Y?_ zk-T;${aY)q4S<_S4(iD}J^5&{Nqp*yqYKjv*i^^=D$~I=12Da7(&6rkMP-Q(h&V5a zFUVqG4?6eTnT`QFIR!7?35nYa&J262=&^CDU$n|Q&XKj-L(1A3Feq&jBhS=lhoad@ zDazWt`^FnCP7`1e?>NPnC_kn7+VIE~$67VM76L?~I*=_szFjCyn4e;I_+%NQ8}jOu ztTWKisYe3~PXYWs>dcF0uvoy@V#fMDX}PPmQVA(4{D5f#phQ6xc0_*+8}JqWBsli(TbW-J06T*~XmXm%;_9}?@-Vjb_@8_#D~4KrSv%lXxKD1abQSo%}L4R@~B25P%9 z9ug$swzB@d-21 zt)MlbAQBWQ#f6$*F7O(6hSR!{vVm}(M zGOZO&d^(o)I5woFF*4FCwS*L+(X&GJLTwi7c&*c)aA1B|w_?QN>|5J2`g?F-BNmm+oGF+O9>~r9{m#C>a36 z3fC}bdQCW)iEkdHKlQvQ813Yi7Qyn`KHwEd@wq^zi28 z6QJSa+XZJF%UY)88#rtzj#nbE4rxR84$YXukw;pam(MaMaRb@p?r~o~^!7AiOu}Fk zKoPJdohqJ$VdH^`j_y(E(|iEk#>AKnXQ$JCL>yu}sGH7g6R=i>U;7uwfYoi|2?2{Y zACUrNj{+89bdr}(-Df)Lm?VU!mv@*V9rHhPUUOi=iB+lqayP9TQ*qMXFFs9L6(~Vn zz*ddXPSIm^%$|}w!N;_$D!@DUw4GsSZdCvSn?!iN*Im4Yr~-Ivxr2Vv)1P`BW9;ON zC!z|(i}rRwuZk$E3a|imp~au?Wu_GHhWNB@D?XsH$MNc%Z!t*_hLfCWRR9C$sP6Lh z1Yi~$PlvOs2BaCVC{c+*irc`_%hS)-R*GkV#R9Sv6$D<+0LyGhkr$9=*VbSGX~r$u1%~BPG%iu;)q3zq>>DM3WE6*MV%uYbR61Ul)`bvovX@;~RK(pw07U?1u_!KBe(yDoF{U|DOaTkIdkPn|{q4!iy3U8BjzfOT zs)Y4L%o;De48|tf@*c-J$hnOd44j{I9pnUH76WU_BP$D14=nR#7&Hprxz~?9^UrG- z)7I`X46Tfl%`gl?mtjCyet^_e?TnhJ7We8I!b>-%Q?F8E9>)a6!(LsK;$CHi0(YSngDbvSp~meSPss-+22zqUm@SvpEQ-H2CsumI%MW=yNiI9J;7MLa)Pdj6!;1G`(n zELM%(G5v&BK6JgWYY!3+6~%POgSKii^vyocsN33Lmc4c)FF?(@bWI1dm>7ehHbvWm zXafFcB$(BqyGkwAs>lGqAq)$b#Jlo>jSkp@=CvypWxeb02pxFD)@K5$udMF_-mkd0 zy5)>CqbrJbkTKR<9vAyF5*HF+>57*glQRBjy6Pe2abFgf-jRA>TQ!{*0lT-@qoKp! zp<<6u?|RdLmCH;4D_*ffyor`zczA1RYf$=}QPg-H4eK-x10rfk5{br===lzK+Am7n zS7hnC6lKI8S@`TFjxknhBS|bktc@h`ia4!_N-P_a-x)uE^wttFe?7iHglUtQjU-_U zVRzJ1M}STIu{JsUi(E_7xb8ACZA-mdwvQJ7tYJ(75W;|Di*-~mWdqf!O_yvXHc((_ zqSB0sOSX^-^?KP#mX~bVdhD`mQ_q;azLuB;#<_}Zudl_ODIIfX)VqM>n@pOoJ_CMA zWR=e;y7r_r12%amuuX|o&Z-d3Opep45PTy2w`!FyYTB5adSF`>_Ca%)cvq=s0c!0k z^}OK}7NFW}DWbyQ0i1R^ZYN5X+AoYiFKskBMLO=6p_-c11G`rhiHV(FRRm7svpno` zc-pID(+t=#Okh=H+kd^Z_>OJcd*hj^ZlbnN8{V?22(M%@Jvk4p-m>5)wfth&@l4{K zusE;i=)O6ZI|l6h`cr{^AZh&D`Ad}gGr=z{m+S}cM1>&kC<@p}6{$iw4?6_nw!**1 z7XOa_9{q~E8CBl|4=pNWXPp|ZpNDE#B`)V^xBDyB4*2U56e!isKd-?7Rcg9jhTG>)D1>g35p&7k8qP6Q;Hy{4o8C^=4xcO`vSlP#x zI^f6dmMWy;0dA1-+AA@V2`Tdq$aI$&LvNoDPQApiD)NU5aEu=?;i8RiX#CiGUJI5{ zIc7xkkZIshcc|~W-YO2598p!1P9a4zBL2DN`ZC9W)$Pb%QeF{?X^|>otyhFsRI@qn z9MuDReh8aR!ePB4xY=W~Zi!dKW>uhK|5Xm;N?4@|AYj{Fas4J@1=dqlO?Nm_qw`kYNxdGWIGq2Gv(8P8n6t+Vmbc{hw-&A4@VOaEw%9zK9{ ztz(h_fd^39N8a#bXmv~iXq!awU$fTEPd%`$(lIe(&Y!;Sy!Z6i6zHxWmmLt!_;Hsp zdBePJBX$7t9>>mLFf8gu8&7MSVDWXWUo{@!qy|@~>MgLmdf;p8bH=0|*jD9AB(#mH32jRaLkWuGqA5d+H#6xz)r5R zO}y@j+6w_&uih)4&dYY7Hb8)T2EAhjecei+@u~*e`!oO=ZM$r)7 zQx7cjbFZmhMs<%$Bbkrp4c)|8V7wE~w7tcLMs_-bp@~jcwn59G?)^dS<=p~VAk<HuSP%h$pJs~z~J$F2TYS990%wKQ?&%&~y{ZTMQWBHBQq zqBZv!sEXV#njAJ3&_t6b%xSSG7U%!z$~0%pysH-XoA!LyqL>9};;@U|@w`^X8OY1f zY#fk#iYf{&4eZo45p4q2^G^d6ST(9SIdX{gP4C%$kI}!Mry$v|}KrXp<0Emp>Tw_2XXMEm+*E zt8Y?*si%wHUPaxRS#DFW{xUMVB=x;&X(Z>@R_ruh*a3&c;GW@-FrXt^ZRRa@N`wy) zMi$f6C&KxKsRy>D_MqMQoos0Hx18VkP`*0zN+%VcMtBcN^qhCsl_#Vg;ob7lQu;J5 z%RB13ew)U=mb5Dk8-@y_q48>3tVe)1G{d^mcnw4LdWP8^wEn&ZWqWk!F1Lay)biRz z3d-Y_Uw9boxVcQqNf3lF1Zfp?o;ISJS1ghvrFKs z8fwDlcvQE#wYpMtT$?mgR-2Yb{7dzzqEQJ*$_+Kdf)*9Y2`C=B-My9i9}+b!rb zVSHV%w+Z$s>eIGw8*Ik}CH(F6Cx2G@6oq`TWwrq+HgrD0l9wdv|11A@ML7QeQY{j=>} zRXVu3yf!$rr0?>SmerM%j!0DwN{6+HX6iq{5)A+bO5 z)!HZso1CiYmC~JPJ$FKu_i1Afg3rhGkEOw|5__ne$zf$}SXn_S!!s>9LR)mC2}ace zH9GAW8rUs3S{XXV1W|^eoq}V1h6=*qxbg`-wfE(3vmU{iFgU(Eb3UDrUOlay-HB0f zQc-&C@oCqi=>aZ7cvWd_nT`OoeJaJrG`5*DLp#|rDGbKdA6aF$piYl$ya^_7Wa*~I zbaHvm#kEh@zu=T{!Ko%V&Gr}C&z1(KXX<{2*8NNqoK;`5iA1;EMVkue3Y1 zpE&26O-HZVBe*IICN?zQ)m~?mUcWB5Chhv~Yop*g3&r&rC~k;?8=FEwmz{3trfKx_ zu#$Ac$9|I@%FQOYrT$QEwI|YTULSuu{lKJ#1G*!F8hh^2;O_pxJ(-H%tEJs%g8Q|!wqt__Y-tY`*`BE^c*v&Z!DO3O1P^m6 zKT=+1yBh7IODhMAEDfeKbktM*wxM5oG?jsFnuT9dgXoCt*!@_;V3ew=O${v{!t{qJ zPpUR7H1zP*L-(-%F>a4)Kzp28J`n{^x|xV}`K3fx4z-hwry8;gC8aZ|A!W6-soKKb zQWce2-ho)N@_L%Qo{55I-C$oKl}w0qM)91TI}K$hd)`f6YKByXI$3(b_Pga27`$j3 zU})LM(gCTOFde*9V!Owo^l1%ej_ww`OuwV^mTV6b$AQ5soNArx9j>1(9VlfLAxBVZ z176)z&k_Bz(?%_;zVodOUMq1kF>D%JTE);^8@yg(Bbg@Bbo82x8^QFFzAKW27Oyir zDmjWnu87rfC}#B#Yowf6AebXnS#tRD`7w@Pf~D=KPA%ZAjX%YwHXvT>iZJ&LNv z52iMFr_TV}3JsrCDPvOE(AwbLqV#j=m(nk%UrE23el7ia`i=CP>FMdW!{9wzNO^U2 zsFTN<;QjH|P+eVKTC3xJ@WF)ip(W|*wsW;$jVKdaYYBr7C!{$_9Xz$!>OYZSMhS&I zpMI$%&8L#)14uWvF@7k6#P(>eyM)ARWKQ=hcQk4vCpEmT*vB9nXG@-tbZ}VT+MpX zvB9qlC3@|0@HX29zv)==y9ws$SW;5rrl3Po1H;mabR`p+`L;<#Cn@!oKWr~qf1U(? zT4Wj~K2pFD+fzDoDo7i(=tWJHJ%=)=$RcX*gx#H*sR5-q0c{Bgr5zf{qG(Zie#00j zi(%l#?V!KAp$O zQu<##aQ?g2I9Xc%tHO>n?rw>JLlKn&R3(xD{*TtD58)*M#*4qnu$ja;y$|`92u=-J5 z`vqAQOC+nIiF=2a*MGfz(%vCWUyz=aZamRtb&Aq@twCyJO)XgKG*;G9NA^iCYhwvz z9aK+!S(gnXUC>C@Lv0_B{;^N{bmml-^)YMa8`#hy4I=aQV`W2i%$u<5cvAk^zYLZ2 z|Fy}M6DJnCM*X1J_cx_7Yrm=Y1m8_rOJOd&Acx9=gmg6?m&-SQy0q)nKfMp4f0_Ea z|IH{aSWeHLlm5rYIitzhBO7sKp=^wn56(t^6D;~EZc1vTD{4PQhyG^j1pRJ(nB^Uhfuaa{ZnB}ERk%5CO#ETJMfon@;?=} zrYNoFHl#+j)q>rru$?-*Q=uD{P_{?ysjveZMs`Fa*$Is~6}n^A%y+h-#Tw*Jg&yko zFP{pz9rWLGDx9fJk@Yvb_#bmB?81?UvMcJJ3O)71;#1s>)X45=)~T?EI^#}-%qfsL zC7L}I_9TZ;dZGTQ&>Kr6d!dO>1#{DsF8QAdeJD!nxi_hieY9YADwL?hI~DfD63Tw4 zJr(w6!-zp6IRMR^3X3+53I}4=%n!1m2Wt?SFFIBZQ3t0&_FToEQ@EDYQQ^olru|gZ z@69H2mHg%a1wAsSj6cfQ@^myQE?B9R^wNE4q)-k;eKZf##-mjaCpFR!wXLcjTb=Y* zr%q68Cw$Sb4HJ`QQ9Ob@xC@8+C?1I=k}@2L?aoD#-MlU8L6g`La9N06a#HMT2)Am)S_7^hU!!l9eTesJ7LI76l55C zgfblUQ5=CKl96a)6i?lFhxPMEaTG;qy+)H7Ia&*LC?2B@55)*eD954}#pBp8G6s$0 zcr*sZ6EJJ$C)&`HG{~ViRvpctm_f{;^)J4H8%HCBQiu8|>IH_j>I70FC!<*?o}x}g zG4W;Fsq7KTX{e9l=~yB;15J$LNkcbYH-8k*q$sV|S)@kJ)`A_1=cvO&@mwsSoQGNz z&u7EP1!yD}qA@65gjqAc*oI!BK@P=B)zJ)!elItpxJy4Bp+8<=uSk|zf34?oC|R#~ z=4Ai)xwO9wODLD4K8jah(N?{Z)W}t67K#(qsVHu3S^TBh%caa5Qm$r?P_99J6tBe+ z$#rOA6o0;AYTNu#yq==8UN?{$xls#tDBh$F55=3YgmMdNQM{E6Be$WE+>R=WZMcKb zwsEdF3A1K?hYh_`gUGz?Sh-6b^CtAvQte-+E6n9^3}f>eW8ciVyzZFrHo(g}W%75W zB)zGX%LO-??k1;D?m>Mn?!}^2ypPn#{iv;?wqcz-pia2xOv>N9hC4_N96X38l!s8C z0|hgZhtb3woOS#%o955KBNV0em_lk~sut`xcvKx82h*^G@)&A4c$^I*PoR-JiNd*^0$Lq0JR zLwC(E_2Q8SZ+$`zdPxy#T3&v~Ntg5-jTFlBsE^(Y+IY0;i=;+gLT#%$^j=n{c1iA< zVSd9Mo%iiu%$=N9*dvrzQ6I(Eutf4Yni$1b!tQ(LkK%NS(t5o?YUE8V*rE8AIy@BL z#uCaqs73KzHjKQ7M)E!ygW?C6HS-T`=nM^VD1M}l1*2%M8K!dadd9Su8xV4+Che7) zqLJzKnnm%E|0at0-$a#Lb9E|;u9^O5xO_dx{>7m9 z1$%@t3-wX_5=$gsp@~sktWyWcAH}aJO6&CvsgZBBV29#&>hMsUjU|*hs73L6HjMm$ zM)D&XgW^w^HS?cs=r0=NP@JodgeXqp?(+(_HT~8nzux8_)GPiZAC(HXf}y zkJQL~Gz-N))Tt=iZ+M<>M6uak@lW;$rGP=nN3ji-NESg8qj=Y)oz}@8#kLfs^=e0I zWKk{Hp}3ejJQUkw31xBAqS%2ABZX)rOQ10*E{Rz)U&@9qtw9dOWz?}?6#v}=bVnMA zuWC^r#pSf|Xw~IOjjVuXp}3+t|Iz@x5_^Qw3H4Fzj3ttl(Znd8b<)c1@<(wMiqd+m zN@`>^E!d&Bx;i`**T53Wny5u_EjEm-jYhH#swn1MGpvhQGw)(U*V7;}=bB-Cb;MmW zV9)xSQQWd?hNh!)vaYo0wT5iKk%dx(`dnd>vL71LCGC${GdDK$01YB@x}*cu5!WR#X~_DUQQXl!&G16bwPgMm49U8r zNlk8l$Uz)&CgfZsbtZR?%^Bm^!sfa$V7n4Yx5eJjmfhgwhZ7Ip~ii zk|WT>986m6p{?@gpp>Gt9!HWIDbs=-2j%MUIHYS1hW0(B|} z?vDFU4Ht5b3;F{gB9vOx=ODxq$uKlA2PZvLvRnQf45uiq#|Tm*Beh`1!6i z%F(Fh;21WHL}(<(qA^3$ahNspF*fvg4I*=frW4eWGc;k!{j;;>ZuW7#cbW`M$xiL2 zU4CXL%M69NT~I-5xrcBfEfUH}sE^)QZ9H0a9I25y)V8XAY;`hTojNqRSvgmN}&Q9OqY zBj=)#oQKAscs^#$`~n+#p$0h=FH%PiiWxMrc>GJVq+FzC{L^Pi7t=_gT!Q*2UaE~p zt6oNGk0({-kK#2HrS-a&)W~&OutV{B zb$BS=fF+b0QH$bDY#6y2jpPr_(P+LW9!#cTFojN+YdrPw$W=SbKJkBhZ z`-lkTe$?mS0W6U`h$iOX>Tf=6!IwP`QIytWGO3Y=wP44=BkJ%tn1Usgsi@`PQ8tWB zLnC<%jp>pe$E=w@VMCwPATnokd`cb7bV<0f{{F>}LOe}Ngz^mPqxY;f9uaO#gT?=+7PFIJA z;u}~(c@woLzQu--x6w%6K{F_3J;DAiX3hLP8~VNmkvUJWf1nOf9M6!J8P#G&NBd<@ z(kIw+d$ZR1*lyN&=Dz1_El;q2$cGZj4Ae*eBmJ=W6h9_4@(F4`MTh>U>ID5JPq4dc zX6{wYZ1#~1`HUPwnTh(R!sl2b`2tORDpXG1t2F=7c@{-!J-;M1@|70sPKB@4;hhTK zU>VvIy?^AVF_hX)N-&G8%Elrkt~j8y2Pxx0g%nNPk z5*kDUF*+})j%G&ZtS-Y|Fx;YFI(Gf2$+atOWdF!2_wWCYXJ(h8W}z&N`sgjAjYq3? zBsH=uYFpKzx12f~N9SLgeP*`dHp=qs5y}dvkK&40B3TJdjN;gp?%N`N6gyFr)~hqA zk(ISztrs!mOFEZ9~`5ATp;*T2~!$T~ZcQ zmcw5E)!S+Lz9hDI59z`Yhq4~(bFseGgeq=8YNQCYRdifzs7~#Y+->$ho8C^_hzQ>4 zLVXT4!4k=)XkrddJ#&gcGb339eP?l+a+ZlSan@b<18uD6*YY6xC?vm zP8I5-*b_@6yP=6u{N??(`{myy?M_izuRTbO?5PDi6nm+|L$NoOQ1(JCihbBHvNsyZ zK4?srRDxME-`9rjr$J;+m$bh+;<_a4S%0nQ9){t_LOB5Sxj0a3LKP1pHF7X&tLV5m zM4j3tHG2<3U-st(Ce-KPFf5TAjwa^d#Sf=%ls^akC`#+mpVY_^TCn4wR2?1%M`B@7 z3e<8?&W4c+G?D>m3Y2WfT0agaM(?rYz0d#%{-Hx~A6Ik#V7wp_^( zhcX!TIXFsdLKTOQ8X1aaaZsgB<-nc)a~tkuIo9cRs)^w3A=Kv}z!Hg|i8-j5_1OOT zb5KiBT91&_$S^I~aWGsR9tR_^gfbGf9E@Va$Y?Z@qtTe5=@`tKd1OP6)gUrwXgW?E z3m%&O-A{{-p^-v49`(^XK^u=&J(1MNNvLgA{n+YctU7hJ>`-fbM6cOzdd9H_Zx5k9 zisP|FG67AD;!$s$-ywe#Po^lX*D0h%PSt`Pil?c=L-BMhp`3wQ6whSC$XRG4XQMG) z(m9wl^K)(Jc^X9K3{B^&Bd$xz8kg*Bd2#y?!n=QemvjL~9Lj~L&&5Sr6RLPIsgX-i zTSdpkrRvl!$xTguYdTxLj0j%cL46Lcz!J%oXkrfL-1%vF{v2FIQCg3Qq(-jRf*l9f zsKevnS}dVlhguGA3 zdVti(gIcgd@ga41C{D%_%EPEd@ewwROhF@=ipHS$C}z!knhkwSgB*&Ft0N(b3wtR5 ze*(sZTWeVg;0YQjlqXRi#iz9KXw|1ljXZ;9q4=yi6~*S30%&sK_8fcg_7Li$_yU$l zUPKe4xXXk)i}LRkU!o|j*UO|vUeSUbim$4}L-92%p}dY-6sNOcm~Uw&@VwX~9N(vqQ<`;sfyia*d2q5O#Y=>4RPN2~r!YUCHxwyHyKt~#|#%G^uJ ze8ZC46}kWO9K^5e!K*u{kK*rGBAJIKMzQ_qHmm24;(UtIdi_Ca5@9ABd$yGy8?!)7CkkbZ4tXjz*hW(`5q=U`o}303SuYGge$i-YymsT?@G8z0?lxVO9k5xggZ z`W$SCC6bNM#2m#+%`kxjK=$3a(hcpPkoC6vuk%fS|G7}*kK(K|F| zXxbXHX1y&bgiXw@A_jqHTl zR@INKPP(g8hbDJBJHZPrJF^Gx&7eMtJ+MTw3z`_k-R5`QF#n-xSBlbl^&~a2n-=U) z++7_WihE!QWlz+i*ozG#y-^mOLu0z6KA1K0y=~||8bsy{O(p7BK$m2{$v@J5^LkdE zv*jC_JaUo|uExCf>1j{u~@iQCg3~NR1q>1v?J1rd9c8&SG^R^B6SHQ1mJK~ygUFnr=^S;$bxB$Mk^Q=@)qL}ME=SDL zZK%)1`C1dIcmb)A3sGA|$HhhJ)GjIW&8w?kiY1cE(8L@}KVyd@ z^5@`kiqd*qL2BemE!c5zl{!2QCSnQYYSeOY4I4(TMOo_%jp>rE$E=y(U_)=zATp;* zx=9^5U6Owz#WfBz0<+ zIbv6z`!Zt=GMzM()#s9g6p>!$a`_ zETKGzS`;5*!^mWm<<`&`6d%E?nNP8yQ#Ht;_^3K^P{d^aa!0x5UiZwPn~86NR4aLH zGuZ?^_nsm%>1nhGtHq%{ijQmK(W+078hH}ULh&heDvGWboLAi3m;VhDwWryG_hwKZ z#b>cZ@*J8N#esX5ZI(ZZ&r_7v>jhFHFKWRK#h29Kq4+YEP+mbTim$R^B`E*wAk^h|C!szf(suT~em2$)J#QZ7=pHXg0IHmQ+y&@2?!Rp(zqu?u_f zstoF*xIUIhHb4`jxa>nmx8OEL5k+aeHY7E&krwPw+*lnRikn~wWmD9m*p&?_Pw!o~JZ)rof(jYQtqPDd<{!tUPZ8&0(T?-xp(BC!Edh{SQvWph%IM`Jk9tSI zBYU8%b%w@tNxd*@=Dls`UK&K^Ow{_QBd1GZ)U|*9DETj53}J5?iKW_5AH5Q7JX&>M zQX~7JwpAT^`>RvCq{NFM81~>*8PrGdKrE3QgeFGumUMAh{-fi;6s7e#gw%-s{AN9h zhpNLv@h~i*9FAHP`>|o9Kgx1zXbg&_m^JewZD^SWITXv)k%OX-pun5XP zE4lq46*Lm7#i2fmDQ!Gjbs(vcL1-3=X>}@!t^phGs5N&xLn_&Ww{=h-#iOu9G6YSG zVy~KCdgYJeP>RxeRgoI0)`DHHSfdUP#Q;kvf?5=7*)S5KtoVk;pg0_}W*Fq%eU!8+7O@fdA9S~Vgyax9vK;&JNyOB1y*?7`bRsE^_a zSRy$QO^o98?-#Y;mmN={D6Q96QX}KEV25IzIy@A|V+myfYEe9y4I`(ZtoVk;pm-W) z&HQv5dWHr$6wg#gLKGKvuh;~|*3v7UMI*6b9qOZajy4{xdM>Gv^Uy35&sXPP>J=|w z4_+8TeH1Uk63NAAVid1h=c^U-?-ehhD6Q9}q(&~&f*p#NtHVR_3M`>qiCPq|V#CNp zloj7lMKNdP>uWG;=GWTL>okbWxn{Ut9dXwTIb2L>HBaT-z!9^09O`p%lh%YP-b`xb z7SvWz+ptbT@s&OC)!oi8;7;&gq@<=ip9?(t6xQYUFM$*l}== zIy?^U#S+SWsO8{(HjF%gvf>*W!@)zCHS@_f^kEHh96X|qI1ZZ3np(@d3{yB_R*yq{ z4j$E-P{nDaMjk`6ICxy0%0aX5GCV;9ug;)82Tx&%hMtf9ZM+lP>bSx zHjMm%vf>&VgJQvAF7q~|td54(qu5p*&7he3EqHUiV&=9-CO#L%)^f8x@24@^(MT*9 zhx#Zkrj5r()}GYJ;%F9%9n_iKD>nB)P{Y$0h3vr#L#U79l2{^H3QdgSDkEp@n}4sk zG(~B>mLWCLQ44k`E~^d?#pSSsvOH>0T!9TEE26BphQ>_PI$_q#JKNBeHHgfau&<(y zxQSX;muMfOk6$D7Z&)Q}RgRd|+fbj2)wL#6aSc)tczd3!0dNt@in-1@{ovqbRM%`lLoS(1INYMe6W4*bqx78=;ni zjoC1=3CfCVXbcBkF>B_V+0e~3$Z@cRI^sCU^fRuZTKcA6?ql>xR}*XchM;W85wm(5 z>T|HQ)`Tie1n)Ttb}3H$tpr8yej@ajecZ||T!2RmSiWJfeH2dCW?Y@UCA zuoFdTJ-U+`*;xyA92Bd=T|F^mPibm zn1fk2eX@A|92`JVT8{%sjU1!}I}Q$3hsVJoSVHNGS`H3n!^mMM%blSyQ8vAZBvxxfee}w;@o3cwQX>OU+p7Ap)k#X7Iz>tR zbk;!j;DsU7M=^~hl1el&igT9T`Jnt!986JKucJtf4AFueibK`mp;(0_lxozXSi^>q z0A$%#5gakAx1l~4qqHVeaWtusqfuK$ z$Hg(~)GjIWIz?tkYM7!#MDX?w>T_@$mPp2+i8;7qpr8aYu5b{w3f z4v&MeSV9?xS`O;iFftxxxid6|gOf39=BL=uQ#HtOaGE-jaL{Ug!t8X8n5ENDpMx{C zCRFh(QX^-hSsa|BPUXN|qGVpTD(KO`!MQ~6whroZa6XnuE(@F4lq_2bZYBY6x_$-Kd+izSrjP|LydY#4a~ zWuY%rIann9W1p;_19%CuX8y7beMN)FoT=)o>R9kp)n2vyYkv;lH5!R^%1|G@>DqX- z>Kmj+-b8Jy>c>_mZ>baX>Yq zG!jdtp+1UVYva+X-;f&l7R^HOJ9R3GZZyoyivGh(=(E{_S7%Tk#qY61@&lR}#ZE_e z=$k)^KT?#|>nBnpKWo7b#b4Cnp*R;yD8Hf>#oyR4@;k~}V`vPD^D%4Yf7sAJHOQe@ z&>qMCp{Te_bdQ3q1c{1cy$K#QS5*v zl0q~wioHHOV?_QaEv_RkS8laaB?ytD&}v+J<$q zx;k~D*6dO}YY@SEE2z)GT38}k8%@l?y`8pMEPoExp(w4#x}-+BXu*zy_0-{Uus)Vh zHb5;0MQj+^5M{YDG=_tXF>B_V*w9Ti$Z^nB9SJxnE@;t(Ths3fl6?mmv%u+Q95G9$ zp*{y&Xicc%mZV0uLbEv7TAj*4vkwJrLj>=spgsrNVTq(0nwW#1cb?dSC7ZUVD6Pj1 zq(*ksf*l7tsl(%-JC;y(MlA=$Y#8Z*vepS;Q}Btx(1ezFIR#8PRfk6tfrJX*Cksgb=<+p7Ap)kz<9 zHV#eAuOioQ4`FZi;Jp>pN3jG;B>SR?QCy?rHA7R# z5wmm}>T@t$YeE%AkQy0@W^ph|o&RxY8chUmY@j{|$6$#hLKAZ^Z`vZG^Pi#|OHo>n z<4BE+(SjWZ$E(BR-~=q8oQPTuPGZBzSd_KK(3qjA4zp%H-iA)lATnoYI$0eH9-8dE zq<`%N{3$dNOQoScdZ%gQ(WkK#F4A~_dL zjAF@}&+VB%isw<3*6VyyBNu4F4#f-A;h}gDmQXH6EsB@0VdPSj<<8IyidjGWd^u*# z{0bX-r3R5XKm2@^IzaKi`NPk-y;=N2T?_lC0h`Wtcz)9Uar+|o&%MyrN|vjaiF_!m z4u|^aU!xxupW?NoMy^Bcr|8hXUY(%dgR@T1|H@8Qxpq1w$5Rt?Hf0WETuEtCu}MBe7Z>>ZAFP zHXf}ynbgR`sBKk;<|FFVUODp?!2+L`ox&cxCxiMZK8huhX=q{;%huhd1#b~NMp0U? z$4QMmp#?h>pHzp3;!{{cc^b7SKEsBQXHk}0Lt`e2&tuliU$CJsY7m)o!SIqg;wFl@ zUp}{*mGEEYh*`P~^|^ReYeE%YBQ^3mYOCnDn66HpD7q0NW+nVLh~T9a)aT$WERnp8 zCgxz~btmqef0y(QMQJ_WB{lM%7VJ29UmYF?A7BaPL)3CGgAF4ep)9wC#&k)aVAjk( zwV|JB5Sh~@%~VHDm*gYhI+%a;l2M=2NURoz`smHl#-mlgBsKCCYFpKz_q95;OG>=9 z=Qr%ZODm|4;&)ggnT;k!@%39ew%{Jd9E#FJ6o0}J%Fn1p@fS9X z%tcvl4UOrNe#5Mp|87I)X%LyyCCyhyT$hwJ#Muj$R`aWhe{jSs-G=&H6fEwl*oKrB zW>8y2$3Og9wPz!b( zETImMgC((qvJ`4LSegwZ%b=`vhQ@HPEN0DoIUBmX200E^P)8gGxl^S0S^vU*mE+8u zUsB*loL1zBSvL*!Iq0M{p^BYJjjW7jaj=Rym4nQy9GTg3W;QLW62TiHsL#RbSRz>i zP0Yd5BX_IKpMy0iO6#!}sgbp{V8_8a>hL&N7fUEzP|Lx3Y#3P|WuY-NW@swHteJ0U zLpRbOGG}PoSRDz6riJ~JhPfAz~UH=&VOCk^${>#B`Mt8PYWWOLNEs(x&BvV}Tz zXlm{!4KugZ9g2(ekS*DRmsC(6#jUYKvJILT#d&ikwczctZ7E9YwH>LEZd$NIaeH-m zDDHqIlpRrv;!bQB>5j7285)CPF=oxYhYj6DgB*&xs^kAq)E;W8>!xC!4(&-Ju~ZxC zqqw^^9<90usgXU=EEIdG^Dm*;n>~0>2K7`>fK9UhANV+qBe7R3YDFmfQuT4!hsiU(uX%nz}leKp9Tc&IvZP;BYz-|i!|YM)>D z$G`r47>&eIZK#i8KW#i(wLhtmBhV}qOVz0;CVu_XkrwnmfcpI z{{TIJqO@KqQX>PkV29!$b$BSIv4m2IS`-JfVdN;3wa(BO6o+Eg%&Tl@wFWs9Yt)g0 zV$8Lp&e^AQ>37DopNc+iayu*8ZKB*etpzUQ&G(Pz-MMonE9d4CIj>c_TW_=)JJg?mPkgUiBTLorLIf~8wTCZbB zjYL|oL-AO3cqkr+C6qC!Me%qxjGTb7))}fO=B(Fr5@yYOtPLHfL1fOgW1TvZTr;$q zU(XuP5wmU@>T_|j)`TjaLTcnx)K*d3uue`>CtNiD{rBla@Tv~#b8se>NX|kNb8tx4 zeuMMp;B1Q0dYnUQR51>WFN^{*w+j>qiXB<8T2b?B-Tkoee|x<#-mjyk{Y=hwXN#VyGEUVX`*&5 zd+@dp>Z5o)mPl?u6Qg+jz~lGMAH^FfO6zqKsgawtV29!@>hMs!6-y|$p%%s4*)TE* zWvw$b2E{uuYvy;^(7QFrp?Hrv7L1}D9h>{9n*2t`*$ty?v!i2cSN>N&` zM@fxL(}Ep}kEz2$@o_AnJb_vipJc|)sYazg*{R8 zCy1=W(OM>IFVIM=7Ki#MzNC#utG-NXMX}6yL=X%6q6q@qIRoe1Njt8XAM*49uGO zM>h0h4RR=cqK*ZlXb0$pz1(nbS^ zY#8|oWw|vp2E|`6Yvyxp=&u^&Q2b3D3r5in(9Nx0w$KLX)`H^iG!m=Dp+1W9wee`x zKS+)IiDsc#&;e)TTycKGDpk!rl_71|gBO@kAH}v*p@-?@M zYBftjEXNVEbQ|h(v4YlwDy~RsWF^#AQQNRiI;j&bnqLy4GZDP7g!&w;f+dnw(Zn3= zFzWX1`FBaHQIytWby6d1Xu*zyHPzv9uojk3)#$*DU6ke4&=?NZ!>pOFZ$mfG zAjd(GI+Aek_k8u)^fsJq$Pu%28|rhgvDSntZbE8gQ#6Z%uIf|{GGBdWZg06uW?pFA zj0j#>LVXUlz!J%pXkregy*+%V{5jZ)qO=}clN#AZ3w9iAs}7HY?XZN>4YeF>&xVm5 zP?lRmV>s9evu57ihVHCEj)P)##Bq>yPeG?hQ{0kO`TiLE4LM(BCtVsOmjgbq9vm@C zx1l}dyP;Ve?53sv~Ernz^@=dqLg9zG?Vs!#yC^h8=rk;xgZyWK!p!QT+G3 zX*g}Nk8;w5G-JA;DjJEU+E5?88f`pUH6S%2sBKmK*y^NKouHTer>jEt;DsgBM{zio zNJgNEQM`4zd)noX;z)|pdW|AAGFl6EC?2g255;4!gc6|^#benpavaKXYiJCL$79ya zPq3jUYLG+mBz5GVm_aLRbozJS)*MSCv05DJqgbbnN2`t}H8KIsLh)pEDvF73Yo5X$ zyugI|D4vETlGD+|D1P?T_AOXA>kNw0dYwsXI$nrbGr!1&UaUc6&Q;ST>WCX1bGx>dJ;R>wd-yT$HeAXPvw9rrb8)%WgeqP^ zYUE1PR#DrqPOeg?j*hOUoYycqW@gPYkqF-AL46Lc!4k=}XkrfP&RD8<{$0{_6s7gJ zp47+OM6=lUYG=_uQF>B_NZ0H>t@#WuNL+Lqfh3{vUySh<4~W2d$cB0@m^9R_n}!F+^uO;8kwR6I}WC*!{gvlETK$8EeDUWVdQa?72nXz z(3JJ2;ggs(^QUa+(;7tPylME1IvAS%n{OKCb|vu_-V6Ip!`x?%XBYot-ZXrc4}}Ht zP#^W@^~2&*e1X)+i>Un+6_Yx7Nu8kHz&_G8YUvv$W!W?OK8#(MT+qhx%xKqK!wZeoAWOGt{=KLvyA& zb(ZGtT_spc@N@Ry?IF}haTbeSKMonCVrzVmQh70=NBK?H9Lp$#0Q(yOFb X9acV03JMDfQt2)w>GdW!Q`i3oZI39D diff --git a/dice_ml/utils/sample_trained_models/custom_vars.sav b/dice_ml/utils/sample_trained_models/custom_vars.sav index e2ad88457ed20cc959c5f3f6589651f03058202b..c476a572a2b4a342084beee4255619e3584eb8e9 100644 GIT binary patch literal 46290 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 literal 41902 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 C9X)9P diff --git a/docs/_modules/dice_ml/constants.html b/docs/_modules/dice_ml/constants.html index 17899779..ede7f876 100644 --- a/docs/_modules/dice_ml/constants.html +++ b/docs/_modules/dice_ml/constants.html @@ -1,69 +1,32 @@ - - - - - - - dice_ml.constants — DiCE 0.7 documentation - - - - - - - - - - - - + + + dice_ml.constants — DiCE 0.8 documentation + + - - + - - - - - - - + - - - +

- -
- - -
- - - - - - - - + \ No newline at end of file diff --git a/docs/_modules/dice_ml/counterfactual_explanations.html b/docs/_modules/dice_ml/counterfactual_explanations.html index dd54d293..8b701503 100644 --- a/docs/_modules/dice_ml/counterfactual_explanations.html +++ b/docs/_modules/dice_ml/counterfactual_explanations.html @@ -1,69 +1,32 @@ - - - - - - - dice_ml.counterfactual_explanations — DiCE 0.7 documentation - - - - - - - - - - - - + + + dice_ml.counterfactual_explanations — DiCE 0.8 documentation + + - - + - - - - - - - + - - - +
- -
- - -
- - - - - - - - + \ No newline at end of file diff --git a/docs/_modules/dice_ml/data.html b/docs/_modules/dice_ml/data.html index 802018b2..ab560d6a 100644 --- a/docs/_modules/dice_ml/data.html +++ b/docs/_modules/dice_ml/data.html @@ -1,69 +1,32 @@ - - - - - - - dice_ml.data — DiCE 0.7 documentation - - - - - - - - - - - - + + + dice_ml.data — DiCE 0.8 documentation + + - - + - - - - - - - + - - - +
- -
- - -
- - - - - - - - + \ No newline at end of file diff --git a/docs/_modules/dice_ml/data_interfaces/private_data_interface.html b/docs/_modules/dice_ml/data_interfaces/private_data_interface.html index 18c77891..92704b2e 100644 --- a/docs/_modules/dice_ml/data_interfaces/private_data_interface.html +++ b/docs/_modules/dice_ml/data_interfaces/private_data_interface.html @@ -1,69 +1,32 @@ - - - - - - - dice_ml.data_interfaces.private_data_interface — DiCE 0.7 documentation - - - - - - - - - - - - + + + dice_ml.data_interfaces.private_data_interface — DiCE 0.8 documentation + + - - + - - - - - - - + - - - +
- -
- - -
- - - - - - - - + \ No newline at end of file diff --git a/docs/_modules/dice_ml/data_interfaces/public_data_interface.html b/docs/_modules/dice_ml/data_interfaces/public_data_interface.html index ed22dd39..233055f5 100644 --- a/docs/_modules/dice_ml/data_interfaces/public_data_interface.html +++ b/docs/_modules/dice_ml/data_interfaces/public_data_interface.html @@ -1,69 +1,32 @@ - - - - - - - dice_ml.data_interfaces.public_data_interface — DiCE 0.7 documentation - - - - - - - - - - - - + + + dice_ml.data_interfaces.public_data_interface — DiCE 0.8 documentation + + - - + - - - - - - - + - - - +
- -
- - -
- - - - - - - - + \ No newline at end of file diff --git a/docs/_modules/dice_ml/dice.html b/docs/_modules/dice_ml/dice.html index dc839d6b..2bc5bb81 100644 --- a/docs/_modules/dice_ml/dice.html +++ b/docs/_modules/dice_ml/dice.html @@ -1,69 +1,32 @@ - - - - - - - dice_ml.dice — DiCE 0.7 documentation - - - - - - - - - - - - + + + dice_ml.dice — DiCE 0.8 documentation + + - - + - - - - - - - + - - - +
- -
- - -
- - - - - - - - + \ No newline at end of file diff --git a/docs/_modules/dice_ml/diverse_counterfactuals.html b/docs/_modules/dice_ml/diverse_counterfactuals.html index fd659b46..5084ce2c 100644 --- a/docs/_modules/dice_ml/diverse_counterfactuals.html +++ b/docs/_modules/dice_ml/diverse_counterfactuals.html @@ -1,69 +1,32 @@ - - - - - - - dice_ml.diverse_counterfactuals — DiCE 0.7 documentation - - - - - - - - - - - - + + + dice_ml.diverse_counterfactuals — DiCE 0.8 documentation + + - - + - - - - - - - + - - - +
- -
- - -
- - - - - - - - + \ No newline at end of file diff --git a/docs/_modules/dice_ml/explainer_interfaces/dice_KD.html b/docs/_modules/dice_ml/explainer_interfaces/dice_KD.html index ce067df3..a1a7bef6 100644 --- a/docs/_modules/dice_ml/explainer_interfaces/dice_KD.html +++ b/docs/_modules/dice_ml/explainer_interfaces/dice_KD.html @@ -1,69 +1,32 @@ - - - - - - - dice_ml.explainer_interfaces.dice_KD — DiCE 0.7 documentation - - - - - - - - - - - - + + + dice_ml.explainer_interfaces.dice_KD — DiCE 0.8 documentation + + - - + - - - - - - - + - - - +
- -
- - -
- - - - - - - - + \ No newline at end of file diff --git a/docs/_modules/dice_ml/explainer_interfaces/dice_genetic.html b/docs/_modules/dice_ml/explainer_interfaces/dice_genetic.html index 760ec49c..75d3c4ad 100644 --- a/docs/_modules/dice_ml/explainer_interfaces/dice_genetic.html +++ b/docs/_modules/dice_ml/explainer_interfaces/dice_genetic.html @@ -1,69 +1,32 @@ - - - - - - - dice_ml.explainer_interfaces.dice_genetic — DiCE 0.7 documentation - - - - - - - - - - - - + + + dice_ml.explainer_interfaces.dice_genetic — DiCE 0.8 documentation + + - - + - - - - - - - + - - - +
- -
- - -
- - - - - - - - + \ No newline at end of file diff --git a/docs/_modules/dice_ml/explainer_interfaces/dice_pytorch.html b/docs/_modules/dice_ml/explainer_interfaces/dice_pytorch.html index 34db8564..d1814803 100644 --- a/docs/_modules/dice_ml/explainer_interfaces/dice_pytorch.html +++ b/docs/_modules/dice_ml/explainer_interfaces/dice_pytorch.html @@ -1,69 +1,32 @@ - - - - - - - dice_ml.explainer_interfaces.dice_pytorch — DiCE 0.7 documentation - - - - - - - - - - - - + + + dice_ml.explainer_interfaces.dice_pytorch — DiCE 0.8 documentation + + - - + - - - - - - - + - - - +
- -
- - -
- - - - - - - - + \ No newline at end of file diff --git a/docs/_modules/dice_ml/explainer_interfaces/dice_random.html b/docs/_modules/dice_ml/explainer_interfaces/dice_random.html index d922bce1..40a9d181 100644 --- a/docs/_modules/dice_ml/explainer_interfaces/dice_random.html +++ b/docs/_modules/dice_ml/explainer_interfaces/dice_random.html @@ -1,69 +1,32 @@ - - - - - - - dice_ml.explainer_interfaces.dice_random — DiCE 0.7 documentation - - - - - - - - - - - - + + + dice_ml.explainer_interfaces.dice_random — DiCE 0.8 documentation + + - - + - - - - - - - + - - - +
- -
- - -
- - - - - - - - + \ No newline at end of file diff --git a/docs/_modules/dice_ml/explainer_interfaces/dice_tensorflow1.html b/docs/_modules/dice_ml/explainer_interfaces/dice_tensorflow1.html index 192e53a5..a12139eb 100644 --- a/docs/_modules/dice_ml/explainer_interfaces/dice_tensorflow1.html +++ b/docs/_modules/dice_ml/explainer_interfaces/dice_tensorflow1.html @@ -1,69 +1,32 @@ - - - - - - - dice_ml.explainer_interfaces.dice_tensorflow1 — DiCE 0.7 documentation - - - - - - - - - - - - + + + dice_ml.explainer_interfaces.dice_tensorflow1 — DiCE 0.8 documentation + + - - + - - - - - - - + - - - +
- -
- - -
- - - - - - - - + \ No newline at end of file diff --git a/docs/_modules/dice_ml/explainer_interfaces/dice_tensorflow2.html b/docs/_modules/dice_ml/explainer_interfaces/dice_tensorflow2.html index 50f5974a..626871fd 100644 --- a/docs/_modules/dice_ml/explainer_interfaces/dice_tensorflow2.html +++ b/docs/_modules/dice_ml/explainer_interfaces/dice_tensorflow2.html @@ -1,69 +1,32 @@ - - - - - - - dice_ml.explainer_interfaces.dice_tensorflow2 — DiCE 0.7 documentation - - - - - - - - - - - - + + + dice_ml.explainer_interfaces.dice_tensorflow2 — DiCE 0.8 documentation + + - - + - - - - - - - + - - - +
- -
- - -
- - - - - - - - + \ No newline at end of file diff --git a/docs/_modules/dice_ml/explainer_interfaces/explainer_base.html b/docs/_modules/dice_ml/explainer_interfaces/explainer_base.html index f74305fc..7659a780 100644 --- a/docs/_modules/dice_ml/explainer_interfaces/explainer_base.html +++ b/docs/_modules/dice_ml/explainer_interfaces/explainer_base.html @@ -1,69 +1,32 @@ - - - - - - - dice_ml.explainer_interfaces.explainer_base — DiCE 0.7 documentation - - - - - - - - - - - - + + + dice_ml.explainer_interfaces.explainer_base — DiCE 0.8 documentation + + - - + - - - - - - - + - - - +
- -
- - -
- - - - - - - - + \ No newline at end of file diff --git a/docs/_modules/dice_ml/explainer_interfaces/feasible_base_vae.html b/docs/_modules/dice_ml/explainer_interfaces/feasible_base_vae.html index 60fe57ce..9d0202b8 100644 --- a/docs/_modules/dice_ml/explainer_interfaces/feasible_base_vae.html +++ b/docs/_modules/dice_ml/explainer_interfaces/feasible_base_vae.html @@ -1,69 +1,32 @@ - - - - - - - dice_ml.explainer_interfaces.feasible_base_vae — DiCE 0.7 documentation - - - - - - - - - - - - + + + dice_ml.explainer_interfaces.feasible_base_vae — DiCE 0.8 documentation + + - - + - - - - - - - + - - - +
- -
- - -
- - - - - - - - + \ No newline at end of file diff --git a/docs/_modules/dice_ml/explainer_interfaces/feasible_model_approx.html b/docs/_modules/dice_ml/explainer_interfaces/feasible_model_approx.html index f3f9b408..76a2bf64 100644 --- a/docs/_modules/dice_ml/explainer_interfaces/feasible_model_approx.html +++ b/docs/_modules/dice_ml/explainer_interfaces/feasible_model_approx.html @@ -1,69 +1,32 @@ - - - - - - - dice_ml.explainer_interfaces.feasible_model_approx — DiCE 0.7 documentation - - - - - - - - - - - - + + + dice_ml.explainer_interfaces.feasible_model_approx — DiCE 0.8 documentation + + - - + - - - - - - - + - - - +
- -
- - -
- - - - - - - - + \ No newline at end of file diff --git a/docs/_modules/dice_ml/model.html b/docs/_modules/dice_ml/model.html index 9f0fa5a8..0e616719 100644 --- a/docs/_modules/dice_ml/model.html +++ b/docs/_modules/dice_ml/model.html @@ -1,69 +1,32 @@ - - - - - - - dice_ml.model — DiCE 0.7 documentation - - - - - - - - - - - - + + + dice_ml.model — DiCE 0.8 documentation + + - - + - - - - - - - + - - - +
- -
- - -
- - - - - - - - + \ No newline at end of file diff --git a/docs/_modules/dice_ml/model_interfaces/base_model.html b/docs/_modules/dice_ml/model_interfaces/base_model.html index 3b5b3fd0..091d017f 100644 --- a/docs/_modules/dice_ml/model_interfaces/base_model.html +++ b/docs/_modules/dice_ml/model_interfaces/base_model.html @@ -1,69 +1,32 @@ - - - - - - - dice_ml.model_interfaces.base_model — DiCE 0.7 documentation - - - - - - - - - - - - + + + dice_ml.model_interfaces.base_model — DiCE 0.8 documentation + + - - + - - - - - - - + - - - +
- -
- - -
- - - - - - - - + \ No newline at end of file diff --git a/docs/_modules/dice_ml/model_interfaces/keras_tensorflow_model.html b/docs/_modules/dice_ml/model_interfaces/keras_tensorflow_model.html index 00fdb07e..2947e256 100644 --- a/docs/_modules/dice_ml/model_interfaces/keras_tensorflow_model.html +++ b/docs/_modules/dice_ml/model_interfaces/keras_tensorflow_model.html @@ -1,69 +1,32 @@ - - - - - - - dice_ml.model_interfaces.keras_tensorflow_model — DiCE 0.7 documentation - - - - - - - - - - - - + + + dice_ml.model_interfaces.keras_tensorflow_model — DiCE 0.8 documentation + + - - + - - - - - - - + - - - +
- -
- - -
- - - - - - - - + \ No newline at end of file diff --git a/docs/_modules/dice_ml/model_interfaces/pytorch_model.html b/docs/_modules/dice_ml/model_interfaces/pytorch_model.html index ce98408b..d5669ed7 100644 --- a/docs/_modules/dice_ml/model_interfaces/pytorch_model.html +++ b/docs/_modules/dice_ml/model_interfaces/pytorch_model.html @@ -1,69 +1,32 @@ - - - - - - - dice_ml.model_interfaces.pytorch_model — DiCE 0.7 documentation - - - - - - - - - - - - + + + dice_ml.model_interfaces.pytorch_model — DiCE 0.8 documentation + + - - + - - - - - - - + - - - +
- -
- - -
- - - - - - - - + \ No newline at end of file diff --git a/docs/_modules/dice_ml/utils/exception.html b/docs/_modules/dice_ml/utils/exception.html index c811fb28..a73c0fbf 100644 --- a/docs/_modules/dice_ml/utils/exception.html +++ b/docs/_modules/dice_ml/utils/exception.html @@ -1,69 +1,32 @@ - - - - - - - dice_ml.utils.exception — DiCE 0.7 documentation - - - - - - - - - - - - + + + dice_ml.utils.exception — DiCE 0.8 documentation + + - - + - - - - - - - + - - - +
- -
- - -
- - - - - - - - + \ No newline at end of file diff --git a/docs/_modules/dice_ml/utils/helpers.html b/docs/_modules/dice_ml/utils/helpers.html index 5e0dc9fa..b8eb5a7f 100644 --- a/docs/_modules/dice_ml/utils/helpers.html +++ b/docs/_modules/dice_ml/utils/helpers.html @@ -1,69 +1,32 @@ - - - - - - - dice_ml.utils.helpers — DiCE 0.7 documentation - - - - - - - - - - - - + + + dice_ml.utils.helpers — DiCE 0.8 documentation + + - - + - - - - - - - + - - - +
- -
- - -
- - - - - - - - + \ No newline at end of file diff --git a/docs/_modules/dice_ml/utils/sample_architecture/vae_model.html b/docs/_modules/dice_ml/utils/sample_architecture/vae_model.html new file mode 100644 index 00000000..ecb8f0c0 --- /dev/null +++ b/docs/_modules/dice_ml/utils/sample_architecture/vae_model.html @@ -0,0 +1,361 @@ + + + + + + dice_ml.utils.sample_architecture.vae_model — DiCE 0.8 documentation + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • »
  • +
  • Module code »
  • +
  • dice_ml.utils.sample_architecture.vae_model
  • +
  • +
  • +
+
+
+
+
+ +

Source code for dice_ml.utils.sample_architecture.vae_model

+import torch
+import torch.utils.data
+from torch import nn
+
+
+
[docs]class CF_VAE(nn.Module): + + def __init__(self, d, encoded_size): + + super(CF_VAE, self).__init__() + + self.encoded_size = encoded_size + self.data_size = len(d.ohe_encoded_feature_names) + self.minx, self.maxx, self.encoded_categorical_feature_indexes, self.encoded_continuous_feature_indexes, \ + self.cont_minx, self.cont_maxx, self.cont_precisions = d.get_data_params_for_gradient_dice() + + flattened_indexes = [item for sublist in self.encoded_categorical_feature_indexes for item in sublist] + self.encoded_continuous_feature_indexes = [ix for ix in range(len(self.minx[0])) if ix not in flattened_indexes] + self.encoded_start_cat = len(self.encoded_continuous_feature_indexes) + + # Plus 1 to the input encoding size and data size to incorporate the target class label + self.encoder_mean = nn.Sequential( + nn.Linear(self.data_size+1, 20), + nn.BatchNorm1d(20), + nn.Dropout(0.1), + nn.ReLU(), + nn.Linear(20, 16), + nn.BatchNorm1d(16), + nn.Dropout(0.1), + nn.ReLU(), + nn.Linear(16, 14), + nn.BatchNorm1d(14), + nn.Dropout(0.1), + nn.ReLU(), + nn.Linear(14, 12), + nn.BatchNorm1d(12), + nn.Dropout(0.1), + nn.ReLU(), + nn.Linear(12, self.encoded_size) + ) + + self.encoder_var = nn.Sequential( + nn.Linear(self.data_size+1, 20), + nn.BatchNorm1d(20), + nn.Dropout(0.1), + nn.ReLU(), + nn.Linear(20, 16), + nn.BatchNorm1d(16), + nn.Dropout(0.1), + nn.ReLU(), + nn.Linear(16, 14), + nn.BatchNorm1d(14), + nn.Dropout(0.1), + nn.ReLU(), + nn.Linear(14, 12), + nn.BatchNorm1d(12), + nn.Dropout(0.1), + nn.ReLU(), + nn.Linear(12, self.encoded_size), + nn.Sigmoid() + ) + + # Plus 1 to the input encoding size and data size to incorporate the target class label + self.decoder_mean = nn.Sequential( + nn.Linear(self.encoded_size+1, 12), + nn.BatchNorm1d(12), + nn.Dropout(0.1), + nn.ReLU(), + nn.Linear(12, 14), + nn.BatchNorm1d(14), + nn.Dropout(0.1), + nn.ReLU(), + nn.Linear(14, 16), + nn.BatchNorm1d(16), + nn.Dropout(0.1), + nn.ReLU(), + nn.Linear(16, 20), + nn.BatchNorm1d(20), + nn.Dropout(0.1), + nn.ReLU(), + nn.Linear(20, self.data_size), + nn.Sigmoid() + ) + +
[docs] def encoder(self, x): + mean = self.encoder_mean(x) + logvar = 0.5 + self.encoder_var(x) + return mean, logvar
+ +
[docs] def decoder(self, z): + mean = self.decoder_mean(z) + return mean
+ +
[docs] def sample_latent_code(self, mean, logvar): + eps = torch.randn_like(logvar) + return mean + torch.sqrt(logvar)*eps
+ +
[docs] def normal_likelihood(self, x, mean, logvar, raxis=1): + return torch.sum(-0.5 * ((x - mean)*(1./logvar)*(x-mean) + torch.log(logvar)), axis=1)
+ +
[docs] def forward(self, x, c): + c = c.view(c.shape[0], 1) + c = torch.tensor(c).float() + res = {} + mc_samples = 50 + em, ev = self.encoder(torch.cat((x, c), 1)) + res['em'] = em + res['ev'] = ev + res['z'] = [] + res['x_pred'] = [] + res['mc_samples'] = mc_samples + for _ in range(mc_samples): + z = self.sample_latent_code(em, ev) + x_pred = self.decoder(torch.cat((z, c), 1)) + res['z'].append(z) + res['x_pred'].append(x_pred) + + return res
+ +
[docs] def compute_elbo(self, x, c, pred_model): + c = torch.tensor(c).float() + c = c.view(c.shape[0], 1) + em, ev = self.encoder(torch.cat((x, c), 1)) + kl_divergence = 0.5*torch.mean(em**2 + ev - torch.log(ev) - 1, axis=1) + + z = self.sample_latent_code(em, ev) + dm = self.decoder(torch.cat((z, c), 1)) + log_px_z = torch.tensor(0.0) + + x_pred = dm + return torch.mean(log_px_z), torch.mean(kl_divergence), x, x_pred, torch.argmax(pred_model(x_pred), dim=1)
+ + +
[docs]class AutoEncoder(nn.Module): + + def __init__(self, d, encoded_size): + + super(AutoEncoder, self).__init__() + + self.encoded_size = encoded_size + self.data_size = len(d.encoded_feature_names) + self.encoded_categorical_feature_indexes = d.get_data_params()[2] + + self.encoded_continuous_feature_indexes = [] + for i in range(self.data_size): + valid = 1 + for v in self.encoded_categorical_feature_indexes: + if i in v: + valid = 0 + if valid: + self.encoded_continuous_feature_indexes.append(i) + + self.encoded_start_cat = len(self.encoded_continuous_feature_indexes) + + self.encoder_mean = nn.Sequential( + nn.Linear(self.data_size, 20), + nn.BatchNorm1d(20), + nn.Dropout(0.1), + nn.ReLU(), + nn.Linear(20, 16), + nn.BatchNorm1d(16), + nn.Dropout(0.1), + nn.ReLU(), + nn.Linear(16, 14), + nn.BatchNorm1d(14), + nn.Dropout(0.1), + nn.ReLU(), + nn.Linear(14, 12), + nn.BatchNorm1d(12), + nn.Dropout(0.1), + nn.ReLU(), + nn.Linear(12, self.encoded_size) + ) + + self.encoder_var = nn.Sequential( + nn.Linear(self.data_size, 20), + nn.BatchNorm1d(20), + nn.Dropout(0.1), + nn.ReLU(), + nn.Linear(20, 16), + nn.BatchNorm1d(16), + nn.Dropout(0.1), + nn.ReLU(), + nn.Linear(16, 14), + nn.BatchNorm1d(14), + nn.Dropout(0.1), + nn.ReLU(), + nn.Linear(14, 12), + nn.BatchNorm1d(12), + nn.Dropout(0.1), + nn.ReLU(), + nn.Linear(12, self.encoded_size), + nn.Sigmoid() + ) + + self.decoder_mean = nn.Sequential( + nn.Linear(self.encoded_size, 12), + nn.BatchNorm1d(12), + nn.Dropout(0.1), + nn.ReLU(), + nn.Linear(12, 14), + nn.BatchNorm1d(14), + nn.Dropout(0.1), + nn.ReLU(), + nn.Linear(14, 16), + nn.BatchNorm1d(16), + nn.Dropout(0.1), + nn.ReLU(), + nn.Linear(16, 20), + nn.BatchNorm1d(20), + nn.Dropout(0.1), + nn.ReLU(), + nn.Linear(20, self.data_size), + nn.Sigmoid() + ) + +
[docs] def encoder(self, x): + mean = self.encoder_mean(x) + logvar = 0.05 + self.encoder_var(x) + return mean, logvar
+ +
[docs] def decoder(self, z): + mean = self.decoder_mean(z) + return mean
+ +
[docs] def sample_latent_code(self, mean, logvar): + eps = torch.randn_like(logvar) + return mean + torch.sqrt(logvar)*eps
+ +
[docs] def normal_likelihood(self, x, mean, logvar, raxis=1): + return torch.sum(-0.5 * ((x - mean)*(1./logvar)*(x-mean) + torch.log(logvar)), axis=1)
+ +
[docs] def forward(self, x): + res = {} + mc_samples = 50 + em, ev = self.encoder(x) + res['em'] = em + res['ev'] = ev + res['z'] = [] + res['x_pred'] = [] + res['mc_samples'] = mc_samples + for _ in range(mc_samples): + z = self.sample_latent_code(em, ev) + x_pred = self.decoder(z) + res['z'].append(z) + res['x_pred'].append(x_pred) + + return res
+
+ +
+
+
+ +
+ +
+

© Copyright 2020, Ramaravind, Amit, Chenhao.

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/_modules/dice_ml/utils/serialize.html b/docs/_modules/dice_ml/utils/serialize.html index 418363ba..94acd05d 100644 --- a/docs/_modules/dice_ml/utils/serialize.html +++ b/docs/_modules/dice_ml/utils/serialize.html @@ -1,69 +1,32 @@ - - - - - - - dice_ml.utils.serialize — DiCE 0.7 documentation - - - - - - - - - - - - + + + dice_ml.utils.serialize — DiCE 0.8 documentation + + - - + - - - - - - - + - - - +
- -
- - -
- - - - - - - - + \ No newline at end of file diff --git a/docs/_modules/index.html b/docs/_modules/index.html index 168aa07c..6ab59f55 100644 --- a/docs/_modules/index.html +++ b/docs/_modules/index.html @@ -1,69 +1,32 @@ - - - - - - - Overview: module code — DiCE 0.7 documentation - - - - - - - - - - - - + + + Overview: module code — DiCE 0.8 documentation + + - - + - - - - - - - + - - - +
- -
- - -
- - - - - - - - + \ No newline at end of file diff --git a/docs/_static/basic.css b/docs/_static/basic.css index 24a49f09..bf18350b 100644 --- a/docs/_static/basic.css +++ b/docs/_static/basic.css @@ -4,7 +4,7 @@ * * Sphinx stylesheet -- basic theme. * - * :copyright: Copyright 2007-2020 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ @@ -130,7 +130,7 @@ ul.search li a { font-weight: bold; } -ul.search li div.context { +ul.search li p.context { color: #888; margin: 2px 0 0 30px; text-align: left; @@ -277,25 +277,25 @@ p.rubric { font-weight: bold; } -img.align-left, .figure.align-left, object.align-left { +img.align-left, figure.align-left, .figure.align-left, object.align-left { clear: left; float: left; margin-right: 1em; } -img.align-right, .figure.align-right, object.align-right { +img.align-right, figure.align-right, .figure.align-right, object.align-right { clear: right; float: right; margin-left: 1em; } -img.align-center, .figure.align-center, object.align-center { +img.align-center, figure.align-center, .figure.align-center, object.align-center { display: block; margin-left: auto; margin-right: auto; } -img.align-default, .figure.align-default { +img.align-default, figure.align-default, .figure.align-default { display: block; margin-left: auto; margin-right: auto; @@ -319,7 +319,8 @@ img.align-default, .figure.align-default { /* -- sidebars -------------------------------------------------------------- */ -div.sidebar { +div.sidebar, +aside.sidebar { margin: 0 0 0.5em 1em; border: 1px solid #ddb; padding: 7px; @@ -377,12 +378,14 @@ div.body p.centered { /* -- content of sidebars/topics/admonitions -------------------------------- */ div.sidebar > :last-child, +aside.sidebar > :last-child, div.topic > :last-child, div.admonition > :last-child { margin-bottom: 0; } div.sidebar::after, +aside.sidebar::after, div.topic::after, div.admonition::after, blockquote::after { @@ -455,20 +458,22 @@ td > :last-child { /* -- figures --------------------------------------------------------------- */ -div.figure { +div.figure, figure { margin: 0.5em; padding: 0.5em; } -div.figure p.caption { +div.figure p.caption, figcaption { padding: 0.3em; } -div.figure p.caption span.caption-number { +div.figure p.caption span.caption-number, +figcaption span.caption-number { font-style: italic; } -div.figure p.caption span.caption-text { +div.figure p.caption span.caption-text, +figcaption span.caption-text { } /* -- field list styles ----------------------------------------------------- */ @@ -503,6 +508,63 @@ table.hlist td { vertical-align: top; } +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + /* -- other body styles ----------------------------------------------------- */ @@ -629,14 +691,6 @@ dl.glossary dt { font-size: 1.1em; } -.optional { - font-size: 1.3em; -} - -.sig-paren { - font-size: larger; -} - .versionmodified { font-style: italic; } @@ -677,8 +731,9 @@ dl.glossary dt { .classifier:before { font-style: normal; - margin: 0.5em; + margin: 0 0.5em; content: ":"; + display: inline-block; } abbr, acronym { @@ -702,6 +757,7 @@ span.pre { -ms-hyphens: none; -webkit-hyphens: none; hyphens: none; + white-space: nowrap; } div[class*="highlight-"] { @@ -765,8 +821,12 @@ div.code-block-caption code { table.highlighttable td.linenos, span.linenos, -div.doctest > div.highlight span.gp { /* gp: Generic.Prompt */ - user-select: none; +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ } div.code-block-caption span.caption-number { @@ -781,16 +841,6 @@ div.literal-block-wrapper { margin: 1em 0; } -code.descname { - background-color: transparent; - font-weight: bold; - font-size: 1.2em; -} - -code.descclassname { - background-color: transparent; -} - code.xref, a code { background-color: transparent; font-weight: bold; diff --git a/docs/_static/css/theme.css b/docs/_static/css/theme.css index 8cd4f101..0d9ae7e1 100644 --- a/docs/_static/css/theme.css +++ b/docs/_static/css/theme.css @@ -1,4 +1,4 @@ -html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden],audio:not([controls]){display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;text-decoration:none}ins,mark{color:#000}mark{background:#ff0;font-style:italic;font-weight:700}.rst-content code,.rst-content tt,code,kbd,pre,samp{font-family:monospace,serif;_font-family:courier new,monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:after,q:before{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}dl,ol,ul{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure,form{margin:0}label{cursor:pointer}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}textarea{resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none!important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{body,html,section{background:none!important}*{box-shadow:none!important;text-shadow:none!important;filter:none!important;-ms-filter:none!important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}.rst-content .toctree-wrapper>p.caption,h2,h3,p{orphans:3;widows:3}.rst-content .toctree-wrapper>p.caption,h2,h3{page-break-after:avoid}}.btn,.fa:before,.icon:before,.rst-content .admonition,.rst-content .admonition-title:before,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .code-block-caption .headerlink:before,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-alert,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a,.wy-menu-vertical li.current>a span.toctree-expand:before,.wy-menu-vertical li.on a,.wy-menu-vertical li.on a span.toctree-expand:before,.wy-menu-vertical li span.toctree-expand:before,.wy-nav-top a,.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a,input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}/*! +html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden],audio:not([controls]){display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;text-decoration:none}ins,mark{color:#000}mark{background:#ff0;font-style:italic;font-weight:700}.rst-content code,.rst-content tt,code,kbd,pre,samp{font-family:monospace,serif;_font-family:courier new,monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:after,q:before{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}dl,ol,ul{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure,form{margin:0}label{cursor:pointer}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}textarea{resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none!important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{body,html,section{background:none!important}*{box-shadow:none!important;text-shadow:none!important;filter:none!important;-ms-filter:none!important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}.rst-content .toctree-wrapper>p.caption,h2,h3,p{orphans:3;widows:3}.rst-content .toctree-wrapper>p.caption,h2,h3{page-break-after:avoid}}.btn,.fa:before,.icon:before,.rst-content .admonition,.rst-content .admonition-title:before,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .code-block-caption .headerlink:before,.rst-content .danger,.rst-content .eqno .headerlink:before,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-alert,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before,.wy-nav-top a,.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a,input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}/*! * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */@font-face{font-family:FontAwesome;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-menu-vertical li.current>a span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li span.toctree-expand{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-pull-left.icon,.fa.fa-pull-left,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content .fa-pull-left.admonition-title,.rst-content code.download span.fa-pull-left:first-child,.rst-content dl dt .fa-pull-left.headerlink,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content p.caption .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.wy-menu-vertical li.current>a span.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a span.fa-pull-left.toctree-expand,.wy-menu-vertical li span.fa-pull-left.toctree-expand{margin-right:.3em}.fa-pull-right.icon,.fa.fa-pull-right,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content .fa-pull-right.admonition-title,.rst-content code.download span.fa-pull-right:first-child,.rst-content dl dt .fa-pull-right.headerlink,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content p.caption .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.wy-menu-vertical li.current>a span.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a span.fa-pull-right.toctree-expand,.wy-menu-vertical li span.fa-pull-right.toctree-expand{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.pull-left.icon,.rst-content .code-block-caption .pull-left.headerlink,.rst-content .pull-left.admonition-title,.rst-content code.download span.pull-left:first-child,.rst-content dl dt .pull-left.headerlink,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content p.caption .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.wy-menu-vertical li.current>a span.pull-left.toctree-expand,.wy-menu-vertical li.on a span.pull-left.toctree-expand,.wy-menu-vertical li span.pull-left.toctree-expand{margin-right:.3em}.fa.pull-right,.pull-right.icon,.rst-content .code-block-caption .pull-right.headerlink,.rst-content .pull-right.admonition-title,.rst-content code.download span.pull-right:first-child,.rst-content dl dt .pull-right.headerlink,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content p.caption .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.wy-menu-vertical li.current>a span.pull-right.toctree-expand,.wy-menu-vertical li.on a span.pull-right.toctree-expand,.wy-menu-vertical li span.pull-right.toctree-expand{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);-ms-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.rst-content .admonition-title:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.icon-caret-down:before,.wy-dropdown .caret:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.current>a span.toctree-expand:before,.wy-menu-vertical li.on a span.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li span.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-menu-vertical li.current>a span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li span.toctree-expand{font-family:inherit}.fa:before,.icon:before,.rst-content .admonition-title:before,.rst-content .code-block-caption .headerlink:before,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a span.toctree-expand:before,.wy-menu-vertical li.on a span.toctree-expand:before,.wy-menu-vertical li span.toctree-expand:before{font-family:FontAwesome;display:inline-block;font-style:normal;font-weight:400;line-height:1;text-decoration:inherit}.rst-content .code-block-caption a .headerlink,.rst-content a .admonition-title,.rst-content code.download a span:first-child,.rst-content dl dt a .headerlink,.rst-content h1 a .headerlink,.rst-content h2 a .headerlink,.rst-content h3 a .headerlink,.rst-content h4 a .headerlink,.rst-content h5 a .headerlink,.rst-content h6 a .headerlink,.rst-content p.caption a .headerlink,.rst-content table>caption a .headerlink,.rst-content tt.download a span:first-child,.wy-menu-vertical li.current>a span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li a span.toctree-expand,a .fa,a .icon,a .rst-content .admonition-title,a .rst-content .code-block-caption .headerlink,a .rst-content code.download span:first-child,a .rst-content dl dt .headerlink,a .rst-content h1 .headerlink,a .rst-content h2 .headerlink,a .rst-content h3 .headerlink,a .rst-content h4 .headerlink,a .rst-content h5 .headerlink,a .rst-content h6 .headerlink,a .rst-content p.caption .headerlink,a .rst-content table>caption .headerlink,a .rst-content tt.download span:first-child,a .wy-menu-vertical li span.toctree-expand{display:inline-block;text-decoration:inherit}.btn .fa,.btn .icon,.btn .rst-content .admonition-title,.btn .rst-content .code-block-caption .headerlink,.btn .rst-content code.download span:first-child,.btn .rst-content dl dt .headerlink,.btn .rst-content h1 .headerlink,.btn .rst-content h2 .headerlink,.btn .rst-content h3 .headerlink,.btn .rst-content h4 .headerlink,.btn .rst-content h5 .headerlink,.btn .rst-content h6 .headerlink,.btn .rst-content p.caption .headerlink,.btn .rst-content table>caption .headerlink,.btn .rst-content tt.download span:first-child,.btn .wy-menu-vertical li.current>a span.toctree-expand,.btn .wy-menu-vertical li.on a span.toctree-expand,.btn .wy-menu-vertical li span.toctree-expand,.nav .fa,.nav .icon,.nav .rst-content .admonition-title,.nav .rst-content .code-block-caption .headerlink,.nav .rst-content code.download span:first-child,.nav .rst-content dl dt .headerlink,.nav .rst-content h1 .headerlink,.nav .rst-content h2 .headerlink,.nav .rst-content h3 .headerlink,.nav .rst-content h4 .headerlink,.nav .rst-content h5 .headerlink,.nav .rst-content h6 .headerlink,.nav .rst-content p.caption .headerlink,.nav .rst-content table>caption .headerlink,.nav .rst-content tt.download span:first-child,.nav .wy-menu-vertical li.current>a span.toctree-expand,.nav .wy-menu-vertical li.on a span.toctree-expand,.nav .wy-menu-vertical li span.toctree-expand,.rst-content .btn .admonition-title,.rst-content .code-block-caption .btn .headerlink,.rst-content .code-block-caption .nav .headerlink,.rst-content .nav .admonition-title,.rst-content code.download .btn span:first-child,.rst-content code.download .nav span:first-child,.rst-content dl dt .btn .headerlink,.rst-content dl dt .nav .headerlink,.rst-content h1 .btn .headerlink,.rst-content h1 .nav .headerlink,.rst-content h2 .btn .headerlink,.rst-content h2 .nav .headerlink,.rst-content h3 .btn .headerlink,.rst-content h3 .nav .headerlink,.rst-content h4 .btn .headerlink,.rst-content h4 .nav .headerlink,.rst-content h5 .btn .headerlink,.rst-content h5 .nav .headerlink,.rst-content h6 .btn .headerlink,.rst-content h6 .nav .headerlink,.rst-content p.caption .btn .headerlink,.rst-content p.caption .nav .headerlink,.rst-content table>caption .btn .headerlink,.rst-content table>caption .nav .headerlink,.rst-content tt.download .btn span:first-child,.rst-content tt.download .nav span:first-child,.wy-menu-vertical li .btn span.toctree-expand,.wy-menu-vertical li.current>a .btn span.toctree-expand,.wy-menu-vertical li.current>a .nav span.toctree-expand,.wy-menu-vertical li .nav span.toctree-expand,.wy-menu-vertical li.on a .btn span.toctree-expand,.wy-menu-vertical li.on a .nav span.toctree-expand{display:inline}.btn .fa-large.icon,.btn .fa.fa-large,.btn .rst-content .code-block-caption .fa-large.headerlink,.btn .rst-content .fa-large.admonition-title,.btn .rst-content code.download span.fa-large:first-child,.btn .rst-content dl dt .fa-large.headerlink,.btn .rst-content h1 .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.btn .rst-content p.caption .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.btn .wy-menu-vertical li span.fa-large.toctree-expand,.nav .fa-large.icon,.nav .fa.fa-large,.nav .rst-content .code-block-caption .fa-large.headerlink,.nav .rst-content .fa-large.admonition-title,.nav .rst-content code.download span.fa-large:first-child,.nav .rst-content dl dt .fa-large.headerlink,.nav .rst-content h1 .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.nav .rst-content p.caption .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.nav .wy-menu-vertical li span.fa-large.toctree-expand,.rst-content .btn .fa-large.admonition-title,.rst-content .code-block-caption .btn .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.rst-content .nav .fa-large.admonition-title,.rst-content code.download .btn span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.rst-content dl dt .btn .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.rst-content p.caption .btn .fa-large.headerlink,.rst-content p.caption .nav .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.rst-content tt.download .btn span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.wy-menu-vertical li .btn span.fa-large.toctree-expand,.wy-menu-vertical li .nav span.fa-large.toctree-expand{line-height:.9em}.btn .fa-spin.icon,.btn .fa.fa-spin,.btn .rst-content .code-block-caption .fa-spin.headerlink,.btn .rst-content .fa-spin.admonition-title,.btn .rst-content code.download span.fa-spin:first-child,.btn .rst-content dl dt .fa-spin.headerlink,.btn .rst-content h1 .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.btn .rst-content p.caption .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.btn .wy-menu-vertical li span.fa-spin.toctree-expand,.nav .fa-spin.icon,.nav .fa.fa-spin,.nav .rst-content .code-block-caption .fa-spin.headerlink,.nav .rst-content .fa-spin.admonition-title,.nav .rst-content code.download span.fa-spin:first-child,.nav .rst-content dl dt .fa-spin.headerlink,.nav .rst-content h1 .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.nav .rst-content p.caption .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.nav .wy-menu-vertical li span.fa-spin.toctree-expand,.rst-content .btn .fa-spin.admonition-title,.rst-content .code-block-caption .btn .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.rst-content .nav .fa-spin.admonition-title,.rst-content code.download .btn span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.rst-content dl dt .btn .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.rst-content p.caption .btn .fa-spin.headerlink,.rst-content p.caption .nav .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.rst-content tt.download .btn span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.wy-menu-vertical li .btn span.fa-spin.toctree-expand,.wy-menu-vertical li .nav span.fa-spin.toctree-expand{display:inline-block}.btn.fa:before,.btn.icon:before,.rst-content .btn.admonition-title:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content code.download span.btn:first-child:before,.rst-content dl dt .btn.headerlink:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content p.caption .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.wy-menu-vertical li span.btn.toctree-expand:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.btn.icon:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content code.download span.btn:first-child:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content p.caption .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.wy-menu-vertical li span.btn.toctree-expand:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .icon:before,.btn-mini .rst-content .admonition-title:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.btn-mini .rst-content code.download span:first-child:before,.btn-mini .rst-content dl dt .headerlink:before,.btn-mini .rst-content h1 .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.btn-mini .rst-content p.caption .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.btn-mini .wy-menu-vertical li span.toctree-expand:before,.rst-content .btn-mini .admonition-title:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.rst-content code.download .btn-mini span:first-child:before,.rst-content dl dt .btn-mini .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.rst-content p.caption .btn-mini .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.rst-content tt.download .btn-mini span:first-child:before,.wy-menu-vertical li .btn-mini span.toctree-expand:before{font-size:14px;vertical-align:-15%}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.wy-alert{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.rst-content .admonition-title,.wy-alert-title{font-weight:700;display:block;color:#fff;background:#6ab0de;padding:6px 12px;margin:-12px -12px 12px}.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.admonition,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.wy-alert.wy-alert-danger{background:#fdf3f2}.rst-content .danger .admonition-title,.rst-content .danger .wy-alert-title,.rst-content .error .admonition-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .admonition-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.wy-alert.wy-alert-danger .wy-alert-title{background:#f29f97}.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .warning,.rst-content .wy-alert-warning.admonition,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.note,.rst-content .wy-alert-warning.seealso,.rst-content .wy-alert-warning.tip,.wy-alert.wy-alert-warning{background:#ffedcc}.rst-content .admonition-todo .admonition-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .attention .admonition-title,.rst-content .attention .wy-alert-title,.rst-content .caution .admonition-title,.rst-content .caution .wy-alert-title,.rst-content .warning .admonition-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.admonition .admonition-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.wy-alert.wy-alert-warning .wy-alert-title{background:#f0b37e}.rst-content .note,.rst-content .seealso,.rst-content .wy-alert-info.admonition,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.wy-alert.wy-alert-info{background:#e7f2fa}.rst-content .note .admonition-title,.rst-content .note .wy-alert-title,.rst-content .seealso .admonition-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .admonition-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.wy-alert.wy-alert-info .wy-alert-title{background:#6ab0de}.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.admonition,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.warning,.wy-alert.wy-alert-success{background:#dbfaf4}.rst-content .hint .admonition-title,.rst-content .hint .wy-alert-title,.rst-content .important .admonition-title,.rst-content .important .wy-alert-title,.rst-content .tip .admonition-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .admonition-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.wy-alert.wy-alert-success .wy-alert-title{background:#1abc9c}.rst-content .wy-alert-neutral.admonition,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.wy-alert.wy-alert-neutral{background:#f3f6f6}.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .admonition-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.wy-alert.wy-alert-neutral .wy-alert-title{color:#404040;background:#e1e4e5}.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.wy-alert.wy-alert-neutral a{color:#2980b9}.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .note p:last-child,.rst-content .seealso p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.wy-alert p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27ae60}.wy-tray-container li.wy-tray-item-info{background:#2980b9}.wy-tray-container li.wy-tray-item-warning{background:#e67e22}.wy-tray-container li.wy-tray-item-danger{background:#e74c3c}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width:768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px;color:#fff;border:1px solid rgba(0,0,0,.1);background-color:#27ae60;text-decoration:none;font-weight:400;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 2px -1px hsla(0,0%,100%,.5),inset 0 -2px 0 0 rgba(0,0,0,.1);outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.05),inset 0 2px 0 0 rgba(0,0,0,.1);padding:8px 12px 6px}.btn:visited{color:#fff}.btn-disabled,.btn-disabled:active,.btn-disabled:focus,.btn-disabled:hover,.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980b9!important}.btn-info:hover{background-color:#2e8ece!important}.btn-neutral{background-color:#f3f6f6!important;color:#404040!important}.btn-neutral:hover{background-color:#e5ebeb!important;color:#404040}.btn-neutral:visited{color:#404040!important}.btn-success{background-color:#27ae60!important}.btn-success:hover{background-color:#295!important}.btn-danger{background-color:#e74c3c!important}.btn-danger:hover{background-color:#ea6153!important}.btn-warning{background-color:#e67e22!important}.btn-warning:hover{background-color:#e98b39!important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f!important}.btn-link{background-color:transparent!important;color:#2980b9;box-shadow:none;border-color:transparent!important}.btn-link:active,.btn-link:hover{background-color:transparent!important;color:#409ad5!important;box-shadow:none}.btn-link:visited{color:#9b59b6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:after,.wy-btn-group:before{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:1px solid #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980b9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:1px solid #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type=search]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980b9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned .wy-help-inline,.wy-form-aligned input,.wy-form-aligned label,.wy-form-aligned select,.wy-form-aligned textarea{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{margin:0}fieldset,legend{border:0;padding:0}legend{width:100%;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label,legend{display:block}label{margin:0 0 .3125em;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;max-width:1200px;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:after,.wy-control-group:before{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#e74c3c}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full input[type=color],.wy-control-group .wy-form-full input[type=date],.wy-control-group .wy-form-full input[type=datetime-local],.wy-control-group .wy-form-full input[type=datetime],.wy-control-group .wy-form-full input[type=email],.wy-control-group .wy-form-full input[type=month],.wy-control-group .wy-form-full input[type=number],.wy-control-group .wy-form-full input[type=password],.wy-control-group .wy-form-full input[type=search],.wy-control-group .wy-form-full input[type=tel],.wy-control-group .wy-form-full input[type=text],.wy-control-group .wy-form-full input[type=time],.wy-control-group .wy-form-full input[type=url],.wy-control-group .wy-form-full input[type=week],.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves input[type=color],.wy-control-group .wy-form-halves input[type=date],.wy-control-group .wy-form-halves input[type=datetime-local],.wy-control-group .wy-form-halves input[type=datetime],.wy-control-group .wy-form-halves input[type=email],.wy-control-group .wy-form-halves input[type=month],.wy-control-group .wy-form-halves input[type=number],.wy-control-group .wy-form-halves input[type=password],.wy-control-group .wy-form-halves input[type=search],.wy-control-group .wy-form-halves input[type=tel],.wy-control-group .wy-form-halves input[type=text],.wy-control-group .wy-form-halves input[type=time],.wy-control-group .wy-form-halves input[type=url],.wy-control-group .wy-form-halves input[type=week],.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds input[type=color],.wy-control-group .wy-form-thirds input[type=date],.wy-control-group .wy-form-thirds input[type=datetime-local],.wy-control-group .wy-form-thirds input[type=datetime],.wy-control-group .wy-form-thirds input[type=email],.wy-control-group .wy-form-thirds input[type=month],.wy-control-group .wy-form-thirds input[type=number],.wy-control-group .wy-form-thirds input[type=password],.wy-control-group .wy-form-thirds input[type=search],.wy-control-group .wy-form-thirds input[type=tel],.wy-control-group .wy-form-thirds input[type=text],.wy-control-group .wy-form-thirds input[type=time],.wy-control-group .wy-form-thirds input[type=url],.wy-control-group .wy-form-thirds input[type=week],.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full{float:left;display:block;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.35765%;width:48.82117%}.wy-control-group .wy-form-halves:last-child,.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(odd){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.35765%;width:31.76157%}.wy-control-group .wy-form-thirds:last-child,.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control,.wy-control-no-input{margin:6px 0 0;font-size:90%}.wy-control-no-input{display:inline-block}.wy-control-group.fluid-input input[type=color],.wy-control-group.fluid-input input[type=date],.wy-control-group.fluid-input input[type=datetime-local],.wy-control-group.fluid-input input[type=datetime],.wy-control-group.fluid-input input[type=email],.wy-control-group.fluid-input input[type=month],.wy-control-group.fluid-input input[type=number],.wy-control-group.fluid-input input[type=password],.wy-control-group.fluid-input input[type=search],.wy-control-group.fluid-input input[type=tel],.wy-control-group.fluid-input input[type=text],.wy-control-group.fluid-input input[type=time],.wy-control-group.fluid-input input[type=url],.wy-control-group.fluid-input input[type=week]{width:100%}.wy-form-message-inline{padding-left:.3em;color:#666;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;*overflow:visible}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type=datetime-local]{padding:.34375em .625em}input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type=checkbox],input[type=radio],input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus{outline:0;outline:thin dotted\9;border-color:#333}input.no-focus:focus{border-color:#ccc!important}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:1px auto #129fea}input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{color:#e74c3c;border:1px solid #e74c3c}input:focus:invalid:focus,select:focus:invalid:focus,textarea:focus:invalid:focus{border-color:#e74c3c}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus{outline-color:#e74c3c}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}input[readonly],select[disabled],select[readonly],textarea[disabled],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type=checkbox][disabled],input[type=radio][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:1px solid #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{left:0;top:0;width:36px;height:12px;background:#ccc}.wy-switch:after,.wy-switch:before{position:absolute;content:"";display:block;border-radius:4px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{width:18px;height:18px;background:#999;left:-3px;top:-3px}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27ae60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#e74c3c}.wy-control-group.wy-control-group-error input[type=color],.wy-control-group.wy-control-group-error input[type=date],.wy-control-group.wy-control-group-error input[type=datetime-local],.wy-control-group.wy-control-group-error input[type=datetime],.wy-control-group.wy-control-group-error input[type=email],.wy-control-group.wy-control-group-error input[type=month],.wy-control-group.wy-control-group-error input[type=number],.wy-control-group.wy-control-group-error input[type=password],.wy-control-group.wy-control-group-error input[type=search],.wy-control-group.wy-control-group-error input[type=tel],.wy-control-group.wy-control-group-error input[type=text],.wy-control-group.wy-control-group-error input[type=time],.wy-control-group.wy-control-group-error input[type=url],.wy-control-group.wy-control-group-error input[type=week],.wy-control-group.wy-control-group-error textarea{border:1px solid #e74c3c}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27ae60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#e74c3c}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#e67e22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980b9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width:480px){.wy-form button[type=submit]{margin:.7em 0 0}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=text],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week],.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0}.wy-form-message,.wy-form-message-inline,.wy-form .wy-help-inline{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width:768px){.tablet-hide{display:none}}@media screen and (max-width:480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.rst-content table.docutils,.rst-content table.field-list,.wy-table{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.rst-content table.docutils caption,.rst-content table.field-list caption,.wy-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.rst-content table.docutils td,.rst-content table.docutils th,.rst-content table.field-list td,.rst-content table.field-list th,.wy-table td,.wy-table th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.rst-content table.docutils td:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list td:first-child,.rst-content table.field-list th:first-child,.wy-table td:first-child,.wy-table th:first-child{border-left-width:0}.rst-content table.docutils thead,.rst-content table.field-list thead,.wy-table thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.rst-content table.docutils thead th,.rst-content table.field-list thead th,.wy-table thead th{font-weight:700;border-bottom:2px solid #e1e4e5}.rst-content table.docutils td,.rst-content table.field-list td,.wy-table td{background-color:transparent;vertical-align:middle}.rst-content table.docutils td p,.rst-content table.field-list td p,.wy-table td p{line-height:18px}.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child,.wy-table td p:last-child{margin-bottom:0}.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min,.wy-table .wy-table-cell-min{width:1%;padding-right:0}.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:grey;font-size:90%}.wy-table-tertiary{color:grey;font-size:80%}.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,.wy-table-backed,.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td{background-color:#f3f6f6}.rst-content table.docutils,.wy-table-bordered-all{border:1px solid #e1e4e5}.rst-content table.docutils td,.wy-table-bordered-all td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.rst-content table.docutils tbody>tr:last-child td,.wy-table-bordered-all tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0!important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980b9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9b59b6}html{height:100%}body,html{overflow-x:hidden}body{font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-weight:400;color:#404040;min-height:100%;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#e67e22!important}a.wy-text-warning:hover{color:#eb9950!important}.wy-text-info{color:#2980b9!important}a.wy-text-info:hover{color:#409ad5!important}.wy-text-success{color:#27ae60!important}a.wy-text-success:hover{color:#36d278!important}.wy-text-danger{color:#e74c3c!important}a.wy-text-danger:hover{color:#ed7669!important}.wy-text-neutral{color:#404040!important}a.wy-text-neutral:hover{color:#595959!important}.rst-content .toctree-wrapper>p.caption,h1,h2,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif}p{line-height:24px;font-size:16px;margin:0 0 24px}h1{font-size:175%}.rst-content .toctree-wrapper>p.caption,h2{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}.rst-content code,.rst-content tt,code{white-space:nowrap;max-width:100%;background:#fff;border:1px solid #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#e74c3c;overflow-x:auto}.rst-content tt.code-large,code.code-large{font-size:90%}.rst-content .section ul,.rst-content .toctree-wrapper ul,.wy-plain-list-disc,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.rst-content .section ul li,.rst-content .toctree-wrapper ul li,.wy-plain-list-disc li,article ul li{list-style:disc;margin-left:24px}.rst-content .section ul li p:last-child,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li p:last-child,.rst-content .toctree-wrapper ul li ul,.wy-plain-list-disc li p:last-child,.wy-plain-list-disc li ul,article ul li p:last-child,article ul li ul{margin-bottom:0}.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,.wy-plain-list-disc li li,article ul li li{list-style:circle}.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,.wy-plain-list-disc li li li,article ul li li li{list-style:square}.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,.wy-plain-list-disc li ol li,article ul li ol li{list-style:decimal}.rst-content .section ol,.rst-content ol.arabic,.wy-plain-list-decimal,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.rst-content .section ol li,.rst-content ol.arabic li,.wy-plain-list-decimal li,article ol li{list-style:decimal;margin-left:24px}.rst-content .section ol li p:last-child,.rst-content .section ol li ul,.rst-content ol.arabic li p:last-child,.rst-content ol.arabic li ul,.wy-plain-list-decimal li p:last-child,.wy-plain-list-decimal li ul,article ol li p:last-child,article ol li ul{margin-bottom:0}.rst-content .section ol li ul li,.rst-content ol.arabic li ul li,.wy-plain-list-decimal li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:after,.wy-breadcrumbs:before{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs li{display:inline-block}.wy-breadcrumbs li.wy-breadcrumbs-aside{float:right}.wy-breadcrumbs li a{display:inline-block;padding:5px}.wy-breadcrumbs li a:first-child{padding-left:0}.rst-content .wy-breadcrumbs li tt,.wy-breadcrumbs li .rst-content tt,.wy-breadcrumbs li code{padding:5px;border:none;background:none}.rst-content .wy-breadcrumbs li tt.literal,.wy-breadcrumbs li .rst-content tt.literal,.wy-breadcrumbs li code.literal{color:#404040}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width:480px){.wy-breadcrumbs-extra,.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:after,.wy-menu-horiz:before{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz li,.wy-menu-horiz ul{display:inline-block}.wy-menu-horiz li:hover{background:hsla(0,0%,100%,.1)}.wy-menu-horiz li.divide-left{border-left:1px solid #404040}.wy-menu-horiz li.divide-right{border-right:1px solid #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#55a5d9;height:32px;line-height:32px;padding:0 1.618em;margin:12px 0 0;display:block;font-weight:700;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:1px solid #404040}.wy-menu-vertical li.divide-bottom{border-bottom:1px solid #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:grey;border-right:1px solid #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.rst-content .wy-menu-vertical li tt,.wy-menu-vertical li .rst-content tt,.wy-menu-vertical li code{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li span.toctree-expand{display:block;float:left;margin-left:-1.2em;font-size:.8em;line-height:1.6em;color:#4d4d4d}.wy-menu-vertical li.current>a,.wy-menu-vertical li.on a{color:#404040;font-weight:700;position:relative;background:#fcfcfc;border:none;padding:.4045em 1.618em}.wy-menu-vertical li.current>a:hover,.wy-menu-vertical li.on a:hover{background:#fcfcfc}.wy-menu-vertical li.current>a:hover span.toctree-expand,.wy-menu-vertical li.on a:hover span.toctree-expand{color:grey}.wy-menu-vertical li.current>a span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand{display:block;font-size:.8em;line-height:1.6em;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:1px solid #c9c9c9;border-top:1px solid #c9c9c9}.wy-menu-vertical .toctree-l1.current .toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .toctree-l11>ul{display:none}.wy-menu-vertical .toctree-l1.current .current.toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .current.toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .current.toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .current.toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .current.toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .current.toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .current.toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .current.toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .current.toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .current.toctree-l11>ul{display:block}.wy-menu-vertical li.toctree-l3,.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a,.wy-menu-vertical li.toctree-l5 a,.wy-menu-vertical li.toctree-l6 a,.wy-menu-vertical li.toctree-l7 a,.wy-menu-vertical li.toctree-l8 a,.wy-menu-vertical li.toctree-l9 a,.wy-menu-vertical li.toctree-l10 a{color:#404040}.wy-menu-vertical li.toctree-l2 a:hover span.toctree-expand,.wy-menu-vertical li.toctree-l3 a:hover span.toctree-expand,.wy-menu-vertical li.toctree-l4 a:hover span.toctree-expand,.wy-menu-vertical li.toctree-l5 a:hover span.toctree-expand,.wy-menu-vertical li.toctree-l6 a:hover span.toctree-expand,.wy-menu-vertical li.toctree-l7 a:hover span.toctree-expand,.wy-menu-vertical li.toctree-l8 a:hover span.toctree-expand,.wy-menu-vertical li.toctree-l9 a:hover span.toctree-expand,.wy-menu-vertical li.toctree-l10 a:hover span.toctree-expand{color:grey}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{display:block}.wy-menu-vertical li.toctree-l2.current>a{padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current>a{padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current>a{padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current>a{padding:.4045em 7.281em}.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current>a{padding:.4045em 8.899em}.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current>a{padding:.4045em 10.517em}.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current>a{padding:.4045em 12.135em}.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current>a{padding:.4045em 13.753em}.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current>a{padding:.4045em 15.371em}.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{padding:.4045em 16.989em}.wy-menu-vertical li.toctree-l2.current>a,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{background:#c9c9c9}.wy-menu-vertical li.toctree-l2 span.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3.current>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{background:#bdbdbd}.wy-menu-vertical li.toctree-l3 span.toctree-expand{color:#969696}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:400}.wy-menu-vertical a{line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover span.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980b9;cursor:pointer;color:#fff}.wy-menu-vertical a:active span.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980b9;text-align:center;color:#fcfcfc}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a{color:#fcfcfc;font-size:100%;font-weight:700;display:inline-block;padding:4px 6px;margin-bottom:.809em}.wy-side-nav-search .wy-dropdown>a:hover,.wy-side-nav-search>a:hover{background:hsla(0,0%,100%,.1)}.wy-side-nav-search .wy-dropdown>a img.logo,.wy-side-nav-search>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search .wy-dropdown>a.icon img.logo,.wy-side-nav-search>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.version{margin-top:-.4045em;margin-bottom:.809em;font-weight:400;color:hsla(0,0%,100%,.3)}.wy-nav .wy-menu-vertical header{color:#2980b9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980b9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980b9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:after,.wy-nav-top:before{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:700}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:grey}footer p{margin-bottom:12px}.rst-content footer span.commit tt,footer span.commit .rst-content tt,footer span.commit code{padding:0;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:1em;background:none;border:none;color:grey}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:after,.rst-footer-buttons:before{width:100%;display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:after,.rst-breadcrumbs-buttons:before{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:1px solid #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:1px solid #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:grey;font-size:90%}.genindextable li>ul{margin-left:24px}@media screen and (max-width:768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-menu.wy-menu-vertical,.wy-side-nav-search,.wy-side-scroll{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width:1100px){.wy-nav-content-wrap{background:rgba(0,0,0,.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,.wy-nav-side,footer{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60;*zoom:1}.rst-versions .rst-current-version:after,.rst-versions .rst-current-version:before{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-content p.caption .rst-versions .rst-current-version .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .icon,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-versions .rst-current-version .rst-content p.caption .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-versions .rst-current-version .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version span.toctree-expand{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}.rst-content img{max-width:100%;height:auto}.rst-content div.figure{margin-bottom:24px}.rst-content div.figure p.caption{font-style:italic}.rst-content div.figure p:last-child.caption{margin-bottom:0}.rst-content div.figure.align-center{text-align:center}.rst-content .section>a>img,.rst-content .section>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"\f08e";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;display:block;overflow:auto}.rst-content div[class^=highlight],.rst-content pre.literal-block{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px}.rst-content div[class^=highlight] div[class^=highlight],.rst-content pre.literal-block div[class^=highlight]{padding:0;border:none;margin:0}.rst-content div[class^=highlight] td.code{width:100%}.rst-content .linenodiv pre{border-right:1px solid #e6e9ea;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^=highlight] pre{white-space:pre;margin:0;padding:12px;display:block;overflow:auto}.rst-content div[class^=highlight] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content .linenodiv pre,.rst-content div[class^=highlight] pre,.rst-content pre.literal-block{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:12px;line-height:1.4}.rst-content div.highlight .gp{user-select:none;pointer-events:none}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^=highlight],.rst-content div[class^=highlight] pre{white-space:pre-wrap}}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning{clear:both}.rst-content .admonition-todo .last,.rst-content .admonition-todo>:last-child,.rst-content .admonition .last,.rst-content .admonition>:last-child,.rst-content .attention .last,.rst-content .attention>:last-child,.rst-content .caution .last,.rst-content .caution>:last-child,.rst-content .danger .last,.rst-content .danger>:last-child,.rst-content .error .last,.rst-content .error>:last-child,.rst-content .hint .last,.rst-content .hint>:last-child,.rst-content .important .last,.rst-content .important>:last-child,.rst-content .note .last,.rst-content .note>:last-child,.rst-content .seealso .last,.rst-content .seealso>:last-child,.rst-content .tip .last,.rst-content .tip>:last-child,.rst-content .warning .last,.rst-content .warning>:last-child{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent!important;border-color:rgba(0,0,0,.1)!important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha>li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha>li{list-style:upper-alpha}.rst-content .section ol li>*,.rst-content .section ul li>*{margin-top:12px;margin-bottom:12px}.rst-content .section ol li>:first-child,.rst-content .section ul li>:first-child{margin-top:0}.rst-content .section ol li>p,.rst-content .section ol li>p:last-child,.rst-content .section ul li>p,.rst-content .section ul li>p:last-child{margin-bottom:12px}.rst-content .section ol li>p:only-child,.rst-content .section ol li>p:only-child:last-child,.rst-content .section ul li>p:only-child,.rst-content .section ul li>p:only-child:last-child{margin-bottom:0}.rst-content .section ol li>ol,.rst-content .section ol li>ul,.rst-content .section ul li>ol,.rst-content .section ul li>ul{margin-bottom:12px}.rst-content .section ol.simple li>*,.rst-content .section ol.simple li ol,.rst-content .section ol.simple li ul,.rst-content .section ul.simple li>*,.rst-content .section ul.simple li ol,.rst-content .section ul.simple li ul{margin-top:0;margin-bottom:0}.rst-content .line-block{margin-left:0;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0}.rst-content .topic-title{font-weight:700;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0 0 24px 24px}.rst-content .align-left{float:left;margin:0 24px 24px 0}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content .code-block-caption .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content table>caption .headerlink{visibility:hidden;font-size:14px}.rst-content .code-block-caption .headerlink:after,.rst-content .toctree-wrapper>p.caption .headerlink:after,.rst-content dl dt .headerlink:after,.rst-content h1 .headerlink:after,.rst-content h2 .headerlink:after,.rst-content h3 .headerlink:after,.rst-content h4 .headerlink:after,.rst-content h5 .headerlink:after,.rst-content h6 .headerlink:after,.rst-content p.caption .headerlink:after,.rst-content table>caption .headerlink:after{content:"\f0c1";font-family:FontAwesome}.rst-content .code-block-caption:hover .headerlink:after,.rst-content .toctree-wrapper>p.caption:hover .headerlink:after,.rst-content dl dt:hover .headerlink:after,.rst-content h1:hover .headerlink:after,.rst-content h2:hover .headerlink:after,.rst-content h3:hover .headerlink:after,.rst-content h4:hover .headerlink:after,.rst-content h5:hover .headerlink:after,.rst-content h6:hover .headerlink:after,.rst-content p.caption:hover .headerlink:after,.rst-content table>caption:hover .headerlink:after{visibility:visible}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:1px solid #e1e4e5}.rst-content .sidebar dl,.rst-content .sidebar p,.rst-content .sidebar ul{font-size:90%}.rst-content .sidebar .last,.rst-content .sidebar>:last-child{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif;font-weight:700;background:#e1e4e5;padding:6px 12px;margin:-24px -24px 24px;font-size:100%}.rst-content .highlighted{background:#f1c40f;box-shadow:0 0 0 2px #f1c40f;display:inline;font-weight:700}.rst-content .citation-reference,.rst-content .footnote-reference{vertical-align:baseline;position:relative;top:-.4em;line-height:0;font-size:90%}.rst-content .hlist{width:100%}html.writer-html4 .rst-content table.docutils.citation,html.writer-html4 .rst-content table.docutils.footnote{background:none;border:none}html.writer-html4 .rst-content table.docutils.citation td,html.writer-html4 .rst-content table.docutils.citation tr,html.writer-html4 .rst-content table.docutils.footnote td,html.writer-html4 .rst-content table.docutils.footnote tr{border:none;background-color:transparent!important;white-space:normal}html.writer-html4 .rst-content table.docutils.citation td.label,html.writer-html4 .rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}html.writer-html5 .rst-content dl dt span.classifier:before{content:" : "}html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{display:grid;grid-template-columns:max-content auto}html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{padding-left:1rem}html.writer-html5 .rst-content dl.field-list>dt:after,html.writer-html5 .rst-content dl.footnote>dt:after{content:":"}html.writer-html5 .rst-content dl.field-list>dd,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dd,html.writer-html5 .rst-content dl.footnote>dt{margin-bottom:0}html.writer-html5 .rst-content dl.footnote{font-size:.9rem}html.writer-html5 .rst-content dl.footnote>dt{margin:0 .5rem .5rem 0;line-height:1.2rem;word-break:break-all;font-weight:400}html.writer-html5 .rst-content dl.footnote>dt>span.brackets{margin-right:.5rem}html.writer-html5 .rst-content dl.footnote>dt>span.brackets:before{content:"["}html.writer-html5 .rst-content dl.footnote>dt>span.brackets:after{content:"]"}html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref{font-style:italic}html.writer-html5 .rst-content dl.footnote>dd{margin:0 0 .5rem;line-height:1.2rem}html.writer-html5 .rst-content dl.footnote>dd p,html.writer-html5 .rst-content dl.option-list kbd{font-size:.9rem}.rst-content table.docutils.footnote,html.writer-html4 .rst-content table.docutils.citation,html.writer-html5 .rst-content dl.footnote{color:grey}.rst-content table.docutils.footnote code,.rst-content table.docutils.footnote tt,html.writer-html4 .rst-content table.docutils.citation code,html.writer-html4 .rst-content table.docutils.citation tt,html.writer-html5 .rst-content dl.footnote code,html.writer-html5 .rst-content dl.footnote tt{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}html.writer-html5 .rst-content table.docutils th{border:1px solid #e1e4e5}html.writer-html5 .rst-content table.docutils td>p,html.writer-html5 .rst-content table.docutils th>p{line-height:1rem;margin-bottom:0;font-size:.9rem}.rst-content table.docutils td .last,.rst-content table.docutils td .last>:last-child{margin-bottom:0}.rst-content table.field-list,.rst-content table.field-list td{border:none}.rst-content table.field-list td p{font-size:inherit;line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content code,.rst-content tt{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;padding:2px 5px}.rst-content code big,.rst-content code em,.rst-content tt big,.rst-content tt em{font-size:100%!important;line-height:normal}.rst-content code.literal,.rst-content tt.literal{color:#e74c3c}.rst-content code.xref,.rst-content tt.xref,a .rst-content code,a .rst-content tt{font-weight:700;color:#404040}.rst-content kbd,.rst-content pre,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace}.rst-content a code,.rst-content a tt{color:#2980b9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:700;margin-bottom:12px}.rst-content dl ol,.rst-content dl p,.rst-content dl table,.rst-content dl ul{margin-bottom:12px}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}html.writer-html4 .rst-content dl:not(.docutils),html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple){margin-bottom:24px}html.writer-html4 .rst-content dl:not(.docutils)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980b9;border-top:3px solid #6ab0de;padding:6px;position:relative}html.writer-html4 .rst-content dl:not(.docutils)>dt:before,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt:before{color:#6ab0de}html.writer-html4 .rst-content dl:not(.docutils)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.field-list)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dl:not(.field-list)>dt{margin-bottom:6px;border:none;border-left:3px solid #ccc;background:#f0f0f0;color:#555}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.field-list)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dl:not(.field-list)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils)>dt:first-child,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt:first-child{margin-top:0}html.writer-html4 .rst-content dl:not(.docutils) code,html.writer-html4 .rst-content dl:not(.docutils) tt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) code.descclassname,html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descclassname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt.descname{background-color:transparent;border:none;padding:0;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt.descname{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .optional,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .property,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .property{display:inline-block;padding-right:8px}.rst-content .viewcode-back,.rst-content .viewcode-link{display:inline-block;color:#27ae60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:700}.rst-content code.download,.rst-content tt.download{background:inherit;padding:inherit;font-weight:400;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content code.download span:first-child,.rst-content tt.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{margin-right:4px}.rst-content .guilabel{border:1px solid #7fbbe3;background:#e7f2fa;font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .versionmodified{font-style:italic}@media screen and (max-width:480px){.rst-content .sidebar{width:100%}}span[id*=MathJax-Span]{color:#404040}.math{text-align:center}@font-face{font-family:Lato;src:url(fonts/lato-normal.woff2?bd03a2cc277bbbc338d464e679fe9942) format("woff2"),url(fonts/lato-normal.woff?27bd77b9162d388cb8d4c4217c7c5e2a) format("woff");font-weight:400;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold.woff2?cccb897485813c7c256901dbca54ecf2) format("woff2"),url(fonts/lato-bold.woff?d878b6c29b10beca227e9eef4246111b) format("woff");font-weight:700;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold-italic.woff2?0b6bb6725576b072c5d0b02ecdd1900d) format("woff2"),url(fonts/lato-bold-italic.woff?9c7e4e9eb485b4a121c760e61bc3707c) format("woff");font-weight:700;font-style:italic;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-normal-italic.woff2?4eb103b4d12be57cb1d040ed5e162e9d) format("woff2"),url(fonts/lato-normal-italic.woff?f28f2d6482446544ef1ea1ccc6dd5892) format("woff");font-weight:400;font-style:italic;font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:400;src:url(fonts/Roboto-Slab-Regular.woff2?7abf5b8d04d26a2cafea937019bca958) format("woff2"),url(fonts/Roboto-Slab-Regular.woff?c1be9284088d487c5e3ff0a10a92e58c) format("woff");font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:700;src:url(fonts/Roboto-Slab-Bold.woff2?9984f4a9bda09be08e83f2506954adbe) format("woff2"),url(fonts/Roboto-Slab-Bold.woff?bed5564a116b05148e3b3bea6fb1162a) format("woff");font-display:block} \ No newline at end of file + */@font-face{font-family:FontAwesome;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-pull-left.icon,.fa.fa-pull-left,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content .eqno .fa-pull-left.headerlink,.rst-content .fa-pull-left.admonition-title,.rst-content code.download span.fa-pull-left:first-child,.rst-content dl dt .fa-pull-left.headerlink,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content p .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.wy-menu-vertical li.current>a button.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-left.toctree-expand,.wy-menu-vertical li button.fa-pull-left.toctree-expand{margin-right:.3em}.fa-pull-right.icon,.fa.fa-pull-right,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content .eqno .fa-pull-right.headerlink,.rst-content .fa-pull-right.admonition-title,.rst-content code.download span.fa-pull-right:first-child,.rst-content dl dt .fa-pull-right.headerlink,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content p .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.wy-menu-vertical li.current>a button.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-right.toctree-expand,.wy-menu-vertical li button.fa-pull-right.toctree-expand{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.pull-left.icon,.rst-content .code-block-caption .pull-left.headerlink,.rst-content .eqno .pull-left.headerlink,.rst-content .pull-left.admonition-title,.rst-content code.download span.pull-left:first-child,.rst-content dl dt .pull-left.headerlink,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content p .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.wy-menu-vertical li.current>a button.pull-left.toctree-expand,.wy-menu-vertical li.on a button.pull-left.toctree-expand,.wy-menu-vertical li button.pull-left.toctree-expand{margin-right:.3em}.fa.pull-right,.pull-right.icon,.rst-content .code-block-caption .pull-right.headerlink,.rst-content .eqno .pull-right.headerlink,.rst-content .pull-right.admonition-title,.rst-content code.download span.pull-right:first-child,.rst-content dl dt .pull-right.headerlink,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content p .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.wy-menu-vertical li.current>a button.pull-right.toctree-expand,.wy-menu-vertical li.on a button.pull-right.toctree-expand,.wy-menu-vertical li button.pull-right.toctree-expand{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);-ms-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.rst-content .admonition-title:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.icon-caret-down:before,.wy-dropdown .caret:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li button.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{font-family:inherit}.fa:before,.icon:before,.rst-content .admonition-title:before,.rst-content .code-block-caption .headerlink:before,.rst-content .eqno .headerlink:before,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before{font-family:FontAwesome;display:inline-block;font-style:normal;font-weight:400;line-height:1;text-decoration:inherit}.rst-content .code-block-caption a .headerlink,.rst-content .eqno a .headerlink,.rst-content a .admonition-title,.rst-content code.download a span:first-child,.rst-content dl dt a .headerlink,.rst-content h1 a .headerlink,.rst-content h2 a .headerlink,.rst-content h3 a .headerlink,.rst-content h4 a .headerlink,.rst-content h5 a .headerlink,.rst-content h6 a .headerlink,.rst-content p.caption a .headerlink,.rst-content p a .headerlink,.rst-content table>caption a .headerlink,.rst-content tt.download a span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li a button.toctree-expand,a .fa,a .icon,a .rst-content .admonition-title,a .rst-content .code-block-caption .headerlink,a .rst-content .eqno .headerlink,a .rst-content code.download span:first-child,a .rst-content dl dt .headerlink,a .rst-content h1 .headerlink,a .rst-content h2 .headerlink,a .rst-content h3 .headerlink,a .rst-content h4 .headerlink,a .rst-content h5 .headerlink,a .rst-content h6 .headerlink,a .rst-content p.caption .headerlink,a .rst-content p .headerlink,a .rst-content table>caption .headerlink,a .rst-content tt.download span:first-child,a .wy-menu-vertical li button.toctree-expand{display:inline-block;text-decoration:inherit}.btn .fa,.btn .icon,.btn .rst-content .admonition-title,.btn .rst-content .code-block-caption .headerlink,.btn .rst-content .eqno .headerlink,.btn .rst-content code.download span:first-child,.btn .rst-content dl dt .headerlink,.btn .rst-content h1 .headerlink,.btn .rst-content h2 .headerlink,.btn .rst-content h3 .headerlink,.btn .rst-content h4 .headerlink,.btn .rst-content h5 .headerlink,.btn .rst-content h6 .headerlink,.btn .rst-content p .headerlink,.btn .rst-content table>caption .headerlink,.btn .rst-content tt.download span:first-child,.btn .wy-menu-vertical li.current>a button.toctree-expand,.btn .wy-menu-vertical li.on a button.toctree-expand,.btn .wy-menu-vertical li button.toctree-expand,.nav .fa,.nav .icon,.nav .rst-content .admonition-title,.nav .rst-content .code-block-caption .headerlink,.nav .rst-content .eqno .headerlink,.nav .rst-content code.download span:first-child,.nav .rst-content dl dt .headerlink,.nav .rst-content h1 .headerlink,.nav .rst-content h2 .headerlink,.nav .rst-content h3 .headerlink,.nav .rst-content h4 .headerlink,.nav .rst-content h5 .headerlink,.nav .rst-content h6 .headerlink,.nav .rst-content p .headerlink,.nav .rst-content table>caption .headerlink,.nav .rst-content tt.download span:first-child,.nav .wy-menu-vertical li.current>a button.toctree-expand,.nav .wy-menu-vertical li.on a button.toctree-expand,.nav .wy-menu-vertical li button.toctree-expand,.rst-content .btn .admonition-title,.rst-content .code-block-caption .btn .headerlink,.rst-content .code-block-caption .nav .headerlink,.rst-content .eqno .btn .headerlink,.rst-content .eqno .nav .headerlink,.rst-content .nav .admonition-title,.rst-content code.download .btn span:first-child,.rst-content code.download .nav span:first-child,.rst-content dl dt .btn .headerlink,.rst-content dl dt .nav .headerlink,.rst-content h1 .btn .headerlink,.rst-content h1 .nav .headerlink,.rst-content h2 .btn .headerlink,.rst-content h2 .nav .headerlink,.rst-content h3 .btn .headerlink,.rst-content h3 .nav .headerlink,.rst-content h4 .btn .headerlink,.rst-content h4 .nav .headerlink,.rst-content h5 .btn .headerlink,.rst-content h5 .nav .headerlink,.rst-content h6 .btn .headerlink,.rst-content h6 .nav .headerlink,.rst-content p .btn .headerlink,.rst-content p .nav .headerlink,.rst-content table>caption .btn .headerlink,.rst-content table>caption .nav .headerlink,.rst-content tt.download .btn span:first-child,.rst-content tt.download .nav span:first-child,.wy-menu-vertical li .btn button.toctree-expand,.wy-menu-vertical li.current>a .btn button.toctree-expand,.wy-menu-vertical li.current>a .nav button.toctree-expand,.wy-menu-vertical li .nav button.toctree-expand,.wy-menu-vertical li.on a .btn button.toctree-expand,.wy-menu-vertical li.on a .nav button.toctree-expand{display:inline}.btn .fa-large.icon,.btn .fa.fa-large,.btn .rst-content .code-block-caption .fa-large.headerlink,.btn .rst-content .eqno .fa-large.headerlink,.btn .rst-content .fa-large.admonition-title,.btn .rst-content code.download span.fa-large:first-child,.btn .rst-content dl dt .fa-large.headerlink,.btn .rst-content h1 .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.btn .rst-content p .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.btn .wy-menu-vertical li button.fa-large.toctree-expand,.nav .fa-large.icon,.nav .fa.fa-large,.nav .rst-content .code-block-caption .fa-large.headerlink,.nav .rst-content .eqno .fa-large.headerlink,.nav .rst-content .fa-large.admonition-title,.nav .rst-content code.download span.fa-large:first-child,.nav .rst-content dl dt .fa-large.headerlink,.nav .rst-content h1 .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.nav .rst-content p .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.nav .wy-menu-vertical li button.fa-large.toctree-expand,.rst-content .btn .fa-large.admonition-title,.rst-content .code-block-caption .btn .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.rst-content .eqno .btn .fa-large.headerlink,.rst-content .eqno .nav .fa-large.headerlink,.rst-content .nav .fa-large.admonition-title,.rst-content code.download .btn span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.rst-content dl dt .btn .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.rst-content p .btn .fa-large.headerlink,.rst-content p .nav .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.rst-content tt.download .btn span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.wy-menu-vertical li .btn button.fa-large.toctree-expand,.wy-menu-vertical li .nav button.fa-large.toctree-expand{line-height:.9em}.btn .fa-spin.icon,.btn .fa.fa-spin,.btn .rst-content .code-block-caption .fa-spin.headerlink,.btn .rst-content .eqno .fa-spin.headerlink,.btn .rst-content .fa-spin.admonition-title,.btn .rst-content code.download span.fa-spin:first-child,.btn .rst-content dl dt .fa-spin.headerlink,.btn .rst-content h1 .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.btn .rst-content p .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.btn .wy-menu-vertical li button.fa-spin.toctree-expand,.nav .fa-spin.icon,.nav .fa.fa-spin,.nav .rst-content .code-block-caption .fa-spin.headerlink,.nav .rst-content .eqno .fa-spin.headerlink,.nav .rst-content .fa-spin.admonition-title,.nav .rst-content code.download span.fa-spin:first-child,.nav .rst-content dl dt .fa-spin.headerlink,.nav .rst-content h1 .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.nav .rst-content p .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.nav .wy-menu-vertical li button.fa-spin.toctree-expand,.rst-content .btn .fa-spin.admonition-title,.rst-content .code-block-caption .btn .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.rst-content .eqno .btn .fa-spin.headerlink,.rst-content .eqno .nav .fa-spin.headerlink,.rst-content .nav .fa-spin.admonition-title,.rst-content code.download .btn span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.rst-content dl dt .btn .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.rst-content p .btn .fa-spin.headerlink,.rst-content p .nav .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.rst-content tt.download .btn span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.wy-menu-vertical li .btn button.fa-spin.toctree-expand,.wy-menu-vertical li .nav button.fa-spin.toctree-expand{display:inline-block}.btn.fa:before,.btn.icon:before,.rst-content .btn.admonition-title:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content .eqno .btn.headerlink:before,.rst-content code.download span.btn:first-child:before,.rst-content dl dt .btn.headerlink:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content p .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.wy-menu-vertical li button.btn.toctree-expand:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.btn.icon:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content .eqno .btn.headerlink:hover:before,.rst-content code.download span.btn:first-child:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content p .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.wy-menu-vertical li button.btn.toctree-expand:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .icon:before,.btn-mini .rst-content .admonition-title:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.btn-mini .rst-content .eqno .headerlink:before,.btn-mini .rst-content code.download span:first-child:before,.btn-mini .rst-content dl dt .headerlink:before,.btn-mini .rst-content h1 .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.btn-mini .rst-content p .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.btn-mini .wy-menu-vertical li button.toctree-expand:before,.rst-content .btn-mini .admonition-title:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.rst-content .eqno .btn-mini .headerlink:before,.rst-content code.download .btn-mini span:first-child:before,.rst-content dl dt .btn-mini .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.rst-content p .btn-mini .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.rst-content tt.download .btn-mini span:first-child:before,.wy-menu-vertical li .btn-mini button.toctree-expand:before{font-size:14px;vertical-align:-15%}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.wy-alert{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.rst-content .admonition-title,.wy-alert-title{font-weight:700;display:block;color:#fff;background:#6ab0de;padding:6px 12px;margin:-12px -12px 12px}.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.admonition,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.wy-alert.wy-alert-danger{background:#fdf3f2}.rst-content .danger .admonition-title,.rst-content .danger .wy-alert-title,.rst-content .error .admonition-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .admonition-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.wy-alert.wy-alert-danger .wy-alert-title{background:#f29f97}.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .warning,.rst-content .wy-alert-warning.admonition,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.note,.rst-content .wy-alert-warning.seealso,.rst-content .wy-alert-warning.tip,.wy-alert.wy-alert-warning{background:#ffedcc}.rst-content .admonition-todo .admonition-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .attention .admonition-title,.rst-content .attention .wy-alert-title,.rst-content .caution .admonition-title,.rst-content .caution .wy-alert-title,.rst-content .warning .admonition-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.admonition .admonition-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.wy-alert.wy-alert-warning .wy-alert-title{background:#f0b37e}.rst-content .note,.rst-content .seealso,.rst-content .wy-alert-info.admonition,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.wy-alert.wy-alert-info{background:#e7f2fa}.rst-content .note .admonition-title,.rst-content .note .wy-alert-title,.rst-content .seealso .admonition-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .admonition-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.wy-alert.wy-alert-info .wy-alert-title{background:#6ab0de}.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.admonition,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.warning,.wy-alert.wy-alert-success{background:#dbfaf4}.rst-content .hint .admonition-title,.rst-content .hint .wy-alert-title,.rst-content .important .admonition-title,.rst-content .important .wy-alert-title,.rst-content .tip .admonition-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .admonition-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.wy-alert.wy-alert-success .wy-alert-title{background:#1abc9c}.rst-content .wy-alert-neutral.admonition,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.wy-alert.wy-alert-neutral{background:#f3f6f6}.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .admonition-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.wy-alert.wy-alert-neutral .wy-alert-title{color:#404040;background:#e1e4e5}.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.wy-alert.wy-alert-neutral a{color:#2980b9}.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .note p:last-child,.rst-content .seealso p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.wy-alert p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27ae60}.wy-tray-container li.wy-tray-item-info{background:#2980b9}.wy-tray-container li.wy-tray-item-warning{background:#e67e22}.wy-tray-container li.wy-tray-item-danger{background:#e74c3c}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width:768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px;color:#fff;border:1px solid rgba(0,0,0,.1);background-color:#27ae60;text-decoration:none;font-weight:400;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 2px -1px hsla(0,0%,100%,.5),inset 0 -2px 0 0 rgba(0,0,0,.1);outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.05),inset 0 2px 0 0 rgba(0,0,0,.1);padding:8px 12px 6px}.btn:visited{color:#fff}.btn-disabled,.btn-disabled:active,.btn-disabled:focus,.btn-disabled:hover,.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980b9!important}.btn-info:hover{background-color:#2e8ece!important}.btn-neutral{background-color:#f3f6f6!important;color:#404040!important}.btn-neutral:hover{background-color:#e5ebeb!important;color:#404040}.btn-neutral:visited{color:#404040!important}.btn-success{background-color:#27ae60!important}.btn-success:hover{background-color:#295!important}.btn-danger{background-color:#e74c3c!important}.btn-danger:hover{background-color:#ea6153!important}.btn-warning{background-color:#e67e22!important}.btn-warning:hover{background-color:#e98b39!important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f!important}.btn-link{background-color:transparent!important;color:#2980b9;box-shadow:none;border-color:transparent!important}.btn-link:active,.btn-link:hover{background-color:transparent!important;color:#409ad5!important;box-shadow:none}.btn-link:visited{color:#9b59b6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:after,.wy-btn-group:before{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:1px solid #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980b9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:1px solid #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type=search]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980b9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned .wy-help-inline,.wy-form-aligned input,.wy-form-aligned label,.wy-form-aligned select,.wy-form-aligned textarea{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{margin:0}fieldset,legend{border:0;padding:0}legend{width:100%;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label,legend{display:block}label{margin:0 0 .3125em;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;max-width:1200px;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:after,.wy-control-group:before{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#e74c3c}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full input[type=color],.wy-control-group .wy-form-full input[type=date],.wy-control-group .wy-form-full input[type=datetime-local],.wy-control-group .wy-form-full input[type=datetime],.wy-control-group .wy-form-full input[type=email],.wy-control-group .wy-form-full input[type=month],.wy-control-group .wy-form-full input[type=number],.wy-control-group .wy-form-full input[type=password],.wy-control-group .wy-form-full input[type=search],.wy-control-group .wy-form-full input[type=tel],.wy-control-group .wy-form-full input[type=text],.wy-control-group .wy-form-full input[type=time],.wy-control-group .wy-form-full input[type=url],.wy-control-group .wy-form-full input[type=week],.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves input[type=color],.wy-control-group .wy-form-halves input[type=date],.wy-control-group .wy-form-halves input[type=datetime-local],.wy-control-group .wy-form-halves input[type=datetime],.wy-control-group .wy-form-halves input[type=email],.wy-control-group .wy-form-halves input[type=month],.wy-control-group .wy-form-halves input[type=number],.wy-control-group .wy-form-halves input[type=password],.wy-control-group .wy-form-halves input[type=search],.wy-control-group .wy-form-halves input[type=tel],.wy-control-group .wy-form-halves input[type=text],.wy-control-group .wy-form-halves input[type=time],.wy-control-group .wy-form-halves input[type=url],.wy-control-group .wy-form-halves input[type=week],.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds input[type=color],.wy-control-group .wy-form-thirds input[type=date],.wy-control-group .wy-form-thirds input[type=datetime-local],.wy-control-group .wy-form-thirds input[type=datetime],.wy-control-group .wy-form-thirds input[type=email],.wy-control-group .wy-form-thirds input[type=month],.wy-control-group .wy-form-thirds input[type=number],.wy-control-group .wy-form-thirds input[type=password],.wy-control-group .wy-form-thirds input[type=search],.wy-control-group .wy-form-thirds input[type=tel],.wy-control-group .wy-form-thirds input[type=text],.wy-control-group .wy-form-thirds input[type=time],.wy-control-group .wy-form-thirds input[type=url],.wy-control-group .wy-form-thirds input[type=week],.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full{float:left;display:block;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.35765%;width:48.82117%}.wy-control-group .wy-form-halves:last-child,.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(odd){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.35765%;width:31.76157%}.wy-control-group .wy-form-thirds:last-child,.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control,.wy-control-no-input{margin:6px 0 0;font-size:90%}.wy-control-no-input{display:inline-block}.wy-control-group.fluid-input input[type=color],.wy-control-group.fluid-input input[type=date],.wy-control-group.fluid-input input[type=datetime-local],.wy-control-group.fluid-input input[type=datetime],.wy-control-group.fluid-input input[type=email],.wy-control-group.fluid-input input[type=month],.wy-control-group.fluid-input input[type=number],.wy-control-group.fluid-input input[type=password],.wy-control-group.fluid-input input[type=search],.wy-control-group.fluid-input input[type=tel],.wy-control-group.fluid-input input[type=text],.wy-control-group.fluid-input input[type=time],.wy-control-group.fluid-input input[type=url],.wy-control-group.fluid-input input[type=week]{width:100%}.wy-form-message-inline{padding-left:.3em;color:#666;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;*overflow:visible}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type=datetime-local]{padding:.34375em .625em}input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type=checkbox],input[type=radio],input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus{outline:0;outline:thin dotted\9;border-color:#333}input.no-focus:focus{border-color:#ccc!important}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:1px auto #129fea}input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{color:#e74c3c;border:1px solid #e74c3c}input:focus:invalid:focus,select:focus:invalid:focus,textarea:focus:invalid:focus{border-color:#e74c3c}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus{outline-color:#e74c3c}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}input[readonly],select[disabled],select[readonly],textarea[disabled],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type=checkbox][disabled],input[type=radio][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:1px solid #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{left:0;top:0;width:36px;height:12px;background:#ccc}.wy-switch:after,.wy-switch:before{position:absolute;content:"";display:block;border-radius:4px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{width:18px;height:18px;background:#999;left:-3px;top:-3px}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27ae60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#e74c3c}.wy-control-group.wy-control-group-error input[type=color],.wy-control-group.wy-control-group-error input[type=date],.wy-control-group.wy-control-group-error input[type=datetime-local],.wy-control-group.wy-control-group-error input[type=datetime],.wy-control-group.wy-control-group-error input[type=email],.wy-control-group.wy-control-group-error input[type=month],.wy-control-group.wy-control-group-error input[type=number],.wy-control-group.wy-control-group-error input[type=password],.wy-control-group.wy-control-group-error input[type=search],.wy-control-group.wy-control-group-error input[type=tel],.wy-control-group.wy-control-group-error input[type=text],.wy-control-group.wy-control-group-error input[type=time],.wy-control-group.wy-control-group-error input[type=url],.wy-control-group.wy-control-group-error input[type=week],.wy-control-group.wy-control-group-error textarea{border:1px solid #e74c3c}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27ae60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#e74c3c}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#e67e22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980b9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width:480px){.wy-form button[type=submit]{margin:.7em 0 0}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=text],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week],.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0}.wy-form-message,.wy-form-message-inline,.wy-form .wy-help-inline{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width:768px){.tablet-hide{display:none}}@media screen and (max-width:480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.rst-content table.docutils,.rst-content table.field-list,.wy-table{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.rst-content table.docutils caption,.rst-content table.field-list caption,.wy-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.rst-content table.docutils td,.rst-content table.docutils th,.rst-content table.field-list td,.rst-content table.field-list th,.wy-table td,.wy-table th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.rst-content table.docutils td:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list td:first-child,.rst-content table.field-list th:first-child,.wy-table td:first-child,.wy-table th:first-child{border-left-width:0}.rst-content table.docutils thead,.rst-content table.field-list thead,.wy-table thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.rst-content table.docutils thead th,.rst-content table.field-list thead th,.wy-table thead th{font-weight:700;border-bottom:2px solid #e1e4e5}.rst-content table.docutils td,.rst-content table.field-list td,.wy-table td{background-color:transparent;vertical-align:middle}.rst-content table.docutils td p,.rst-content table.field-list td p,.wy-table td p{line-height:18px}.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child,.wy-table td p:last-child{margin-bottom:0}.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min,.wy-table .wy-table-cell-min{width:1%;padding-right:0}.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:grey;font-size:90%}.wy-table-tertiary{color:grey;font-size:80%}.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,.wy-table-backed,.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td{background-color:#f3f6f6}.rst-content table.docutils,.wy-table-bordered-all{border:1px solid #e1e4e5}.rst-content table.docutils td,.wy-table-bordered-all td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.rst-content table.docutils tbody>tr:last-child td,.wy-table-bordered-all tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0!important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980b9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9b59b6}html{height:100%}body,html{overflow-x:hidden}body{font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-weight:400;color:#404040;min-height:100%;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#e67e22!important}a.wy-text-warning:hover{color:#eb9950!important}.wy-text-info{color:#2980b9!important}a.wy-text-info:hover{color:#409ad5!important}.wy-text-success{color:#27ae60!important}a.wy-text-success:hover{color:#36d278!important}.wy-text-danger{color:#e74c3c!important}a.wy-text-danger:hover{color:#ed7669!important}.wy-text-neutral{color:#404040!important}a.wy-text-neutral:hover{color:#595959!important}.rst-content .toctree-wrapper>p.caption,h1,h2,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif}p{line-height:24px;font-size:16px;margin:0 0 24px}h1{font-size:175%}.rst-content .toctree-wrapper>p.caption,h2{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}.rst-content code,.rst-content tt,code{white-space:nowrap;max-width:100%;background:#fff;border:1px solid #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#e74c3c;overflow-x:auto}.rst-content tt.code-large,code.code-large{font-size:90%}.rst-content .section ul,.rst-content .toctree-wrapper ul,.rst-content section ul,.wy-plain-list-disc,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.rst-content .section ul li,.rst-content .toctree-wrapper ul li,.rst-content section ul li,.wy-plain-list-disc li,article ul li{list-style:disc;margin-left:24px}.rst-content .section ul li p:last-child,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li p:last-child,.rst-content .toctree-wrapper ul li ul,.rst-content section ul li p:last-child,.rst-content section ul li ul,.wy-plain-list-disc li p:last-child,.wy-plain-list-disc li ul,article ul li p:last-child,article ul li ul{margin-bottom:0}.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,.rst-content section ul li li,.wy-plain-list-disc li li,article ul li li{list-style:circle}.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,.rst-content section ul li li li,.wy-plain-list-disc li li li,article ul li li li{list-style:square}.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,.rst-content section ul li ol li,.wy-plain-list-disc li ol li,article ul li ol li{list-style:decimal}.rst-content .section ol,.rst-content .section ol.arabic,.rst-content .toctree-wrapper ol,.rst-content .toctree-wrapper ol.arabic,.rst-content section ol,.rst-content section ol.arabic,.wy-plain-list-decimal,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.rst-content .section ol.arabic li,.rst-content .section ol li,.rst-content .toctree-wrapper ol.arabic li,.rst-content .toctree-wrapper ol li,.rst-content section ol.arabic li,.rst-content section ol li,.wy-plain-list-decimal li,article ol li{list-style:decimal;margin-left:24px}.rst-content .section ol.arabic li ul,.rst-content .section ol li p:last-child,.rst-content .section ol li ul,.rst-content .toctree-wrapper ol.arabic li ul,.rst-content .toctree-wrapper ol li p:last-child,.rst-content .toctree-wrapper ol li ul,.rst-content section ol.arabic li ul,.rst-content section ol li p:last-child,.rst-content section ol li ul,.wy-plain-list-decimal li p:last-child,.wy-plain-list-decimal li ul,article ol li p:last-child,article ol li ul{margin-bottom:0}.rst-content .section ol.arabic li ul li,.rst-content .section ol li ul li,.rst-content .toctree-wrapper ol.arabic li ul li,.rst-content .toctree-wrapper ol li ul li,.rst-content section ol.arabic li ul li,.rst-content section ol li ul li,.wy-plain-list-decimal li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:after,.wy-breadcrumbs:before{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs li{display:inline-block}.wy-breadcrumbs li.wy-breadcrumbs-aside{float:right}.wy-breadcrumbs li a{display:inline-block;padding:5px}.wy-breadcrumbs li a:first-child{padding-left:0}.rst-content .wy-breadcrumbs li tt,.wy-breadcrumbs li .rst-content tt,.wy-breadcrumbs li code{padding:5px;border:none;background:none}.rst-content .wy-breadcrumbs li tt.literal,.wy-breadcrumbs li .rst-content tt.literal,.wy-breadcrumbs li code.literal{color:#404040}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width:480px){.wy-breadcrumbs-extra,.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:after,.wy-menu-horiz:before{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz li,.wy-menu-horiz ul{display:inline-block}.wy-menu-horiz li:hover{background:hsla(0,0%,100%,.1)}.wy-menu-horiz li.divide-left{border-left:1px solid #404040}.wy-menu-horiz li.divide-right{border-right:1px solid #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#55a5d9;height:32px;line-height:32px;padding:0 1.618em;margin:12px 0 0;display:block;font-weight:700;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:1px solid #404040}.wy-menu-vertical li.divide-bottom{border-bottom:1px solid #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:grey;border-right:1px solid #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.rst-content .wy-menu-vertical li tt,.wy-menu-vertical li .rst-content tt,.wy-menu-vertical li code{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li button.toctree-expand{display:block;float:left;margin-left:-1.2em;line-height:18px;color:#4d4d4d;border:none;background:none;padding:0}.wy-menu-vertical li.current>a,.wy-menu-vertical li.on a{color:#404040;font-weight:700;position:relative;background:#fcfcfc;border:none;padding:.4045em 1.618em}.wy-menu-vertical li.current>a:hover,.wy-menu-vertical li.on a:hover{background:#fcfcfc}.wy-menu-vertical li.current>a:hover button.toctree-expand,.wy-menu-vertical li.on a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand{display:block;line-height:18px;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:1px solid #c9c9c9;border-top:1px solid #c9c9c9}.wy-menu-vertical .toctree-l1.current .toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .toctree-l11>ul{display:none}.wy-menu-vertical .toctree-l1.current .current.toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .current.toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .current.toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .current.toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .current.toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .current.toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .current.toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .current.toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .current.toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .current.toctree-l11>ul{display:block}.wy-menu-vertical li.toctree-l3,.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a,.wy-menu-vertical li.toctree-l5 a,.wy-menu-vertical li.toctree-l6 a,.wy-menu-vertical li.toctree-l7 a,.wy-menu-vertical li.toctree-l8 a,.wy-menu-vertical li.toctree-l9 a,.wy-menu-vertical li.toctree-l10 a{color:#404040}.wy-menu-vertical li.toctree-l2 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l3 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l4 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l5 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l6 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l7 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l8 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l9 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l10 a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{display:block}.wy-menu-vertical li.toctree-l2.current>a{padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{padding:.4045em 1.618em .4045em 4.045em}.wy-menu-vertical li.toctree-l3.current>a{padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{padding:.4045em 1.618em .4045em 5.663em}.wy-menu-vertical li.toctree-l4.current>a{padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a{padding:.4045em 1.618em .4045em 7.281em}.wy-menu-vertical li.toctree-l5.current>a{padding:.4045em 7.281em}.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a{padding:.4045em 1.618em .4045em 8.899em}.wy-menu-vertical li.toctree-l6.current>a{padding:.4045em 8.899em}.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a{padding:.4045em 1.618em .4045em 10.517em}.wy-menu-vertical li.toctree-l7.current>a{padding:.4045em 10.517em}.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a{padding:.4045em 1.618em .4045em 12.135em}.wy-menu-vertical li.toctree-l8.current>a{padding:.4045em 12.135em}.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a{padding:.4045em 1.618em .4045em 13.753em}.wy-menu-vertical li.toctree-l9.current>a{padding:.4045em 13.753em}.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a{padding:.4045em 1.618em .4045em 15.371em}.wy-menu-vertical li.toctree-l10.current>a{padding:.4045em 15.371em}.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{padding:.4045em 1.618em .4045em 16.989em}.wy-menu-vertical li.toctree-l2.current>a,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{background:#c9c9c9}.wy-menu-vertical li.toctree-l2 button.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3.current>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{background:#bdbdbd}.wy-menu-vertical li.toctree-l3 button.toctree-expand{color:#969696}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:400}.wy-menu-vertical a{line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover button.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980b9;cursor:pointer;color:#fff}.wy-menu-vertical a:active button.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980b9;text-align:center;color:#fcfcfc}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a{color:#fcfcfc;font-size:100%;font-weight:700;display:inline-block;padding:4px 6px;margin-bottom:.809em;max-width:100%}.wy-side-nav-search .wy-dropdown>a:hover,.wy-side-nav-search>a:hover{background:hsla(0,0%,100%,.1)}.wy-side-nav-search .wy-dropdown>a img.logo,.wy-side-nav-search>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search .wy-dropdown>a.icon img.logo,.wy-side-nav-search>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.version{margin-top:-.4045em;margin-bottom:.809em;font-weight:400;color:hsla(0,0%,100%,.3)}.wy-nav .wy-menu-vertical header{color:#2980b9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980b9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980b9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:after,.wy-nav-top:before{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:700}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:grey}footer p{margin-bottom:12px}.rst-content footer span.commit tt,footer span.commit .rst-content tt,footer span.commit code{padding:0;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:1em;background:none;border:none;color:grey}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:after,.rst-footer-buttons:before{width:100%;display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:after,.rst-breadcrumbs-buttons:before{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:1px solid #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:1px solid #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:grey;font-size:90%}.genindextable li>ul{margin-left:24px}@media screen and (max-width:768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-menu.wy-menu-vertical,.wy-side-nav-search,.wy-side-scroll{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width:1100px){.wy-nav-content-wrap{background:rgba(0,0,0,.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,.wy-nav-side,footer{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60;*zoom:1}.rst-versions .rst-current-version:after,.rst-versions .rst-current-version:before{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-content .eqno .rst-versions .rst-current-version .headerlink,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-content p .rst-versions .rst-current-version .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .icon,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-versions .rst-current-version .rst-content .eqno .headerlink,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-versions .rst-current-version .rst-content p .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-versions .rst-current-version .wy-menu-vertical li button.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version button.toctree-expand{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}.rst-content .toctree-wrapper>p.caption,.rst-content h1,.rst-content h2,.rst-content h3,.rst-content h4,.rst-content h5,.rst-content h6{margin-bottom:24px}.rst-content img{max-width:100%;height:auto}.rst-content div.figure,.rst-content figure{margin-bottom:24px}.rst-content div.figure .caption-text,.rst-content figure .caption-text{font-style:italic}.rst-content div.figure p:last-child.caption,.rst-content figure p:last-child.caption{margin-bottom:0}.rst-content div.figure.align-center,.rst-content figure.align-center{text-align:center}.rst-content .section>a>img,.rst-content .section>img,.rst-content section>a>img,.rst-content section>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"\f08e";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;display:block;overflow:auto}.rst-content div[class^=highlight],.rst-content pre.literal-block{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px}.rst-content div[class^=highlight] div[class^=highlight],.rst-content pre.literal-block div[class^=highlight]{padding:0;border:none;margin:0}.rst-content div[class^=highlight] td.code{width:100%}.rst-content .linenodiv pre{border-right:1px solid #e6e9ea;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^=highlight] pre{white-space:pre;margin:0;padding:12px;display:block;overflow:auto}.rst-content div[class^=highlight] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content .linenodiv pre,.rst-content div[class^=highlight] pre,.rst-content pre.literal-block{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:12px;line-height:1.4}.rst-content div.highlight .gp,.rst-content div.highlight span.linenos{user-select:none;pointer-events:none}.rst-content div.highlight span.linenos{display:inline-block;padding-left:0;padding-right:12px;margin-right:12px;border-right:1px solid #e6e9ea}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^=highlight],.rst-content div[class^=highlight] pre{white-space:pre-wrap}}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning{clear:both}.rst-content .admonition-todo .last,.rst-content .admonition-todo>:last-child,.rst-content .admonition .last,.rst-content .admonition>:last-child,.rst-content .attention .last,.rst-content .attention>:last-child,.rst-content .caution .last,.rst-content .caution>:last-child,.rst-content .danger .last,.rst-content .danger>:last-child,.rst-content .error .last,.rst-content .error>:last-child,.rst-content .hint .last,.rst-content .hint>:last-child,.rst-content .important .last,.rst-content .important>:last-child,.rst-content .note .last,.rst-content .note>:last-child,.rst-content .seealso .last,.rst-content .seealso>:last-child,.rst-content .tip .last,.rst-content .tip>:last-child,.rst-content .warning .last,.rst-content .warning>:last-child{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent!important;border-color:rgba(0,0,0,.1)!important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha>li,.rst-content .toctree-wrapper ol.loweralpha,.rst-content .toctree-wrapper ol.loweralpha>li,.rst-content section ol.loweralpha,.rst-content section ol.loweralpha>li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha>li,.rst-content .toctree-wrapper ol.upperalpha,.rst-content .toctree-wrapper ol.upperalpha>li,.rst-content section ol.upperalpha,.rst-content section ol.upperalpha>li{list-style:upper-alpha}.rst-content .section ol li>*,.rst-content .section ul li>*,.rst-content .toctree-wrapper ol li>*,.rst-content .toctree-wrapper ul li>*,.rst-content section ol li>*,.rst-content section ul li>*{margin-top:12px;margin-bottom:12px}.rst-content .section ol li>:first-child,.rst-content .section ul li>:first-child,.rst-content .toctree-wrapper ol li>:first-child,.rst-content .toctree-wrapper ul li>:first-child,.rst-content section ol li>:first-child,.rst-content section ul li>:first-child{margin-top:0}.rst-content .section ol li>p,.rst-content .section ol li>p:last-child,.rst-content .section ul li>p,.rst-content .section ul li>p:last-child,.rst-content .toctree-wrapper ol li>p,.rst-content .toctree-wrapper ol li>p:last-child,.rst-content .toctree-wrapper ul li>p,.rst-content .toctree-wrapper ul li>p:last-child,.rst-content section ol li>p,.rst-content section ol li>p:last-child,.rst-content section ul li>p,.rst-content section ul li>p:last-child{margin-bottom:12px}.rst-content .section ol li>p:only-child,.rst-content .section ol li>p:only-child:last-child,.rst-content .section ul li>p:only-child,.rst-content .section ul li>p:only-child:last-child,.rst-content .toctree-wrapper ol li>p:only-child,.rst-content .toctree-wrapper ol li>p:only-child:last-child,.rst-content .toctree-wrapper ul li>p:only-child,.rst-content .toctree-wrapper ul li>p:only-child:last-child,.rst-content section ol li>p:only-child,.rst-content section ol li>p:only-child:last-child,.rst-content section ul li>p:only-child,.rst-content section ul li>p:only-child:last-child{margin-bottom:0}.rst-content .section ol li>ol,.rst-content .section ol li>ul,.rst-content .section ul li>ol,.rst-content .section ul li>ul,.rst-content .toctree-wrapper ol li>ol,.rst-content .toctree-wrapper ol li>ul,.rst-content .toctree-wrapper ul li>ol,.rst-content .toctree-wrapper ul li>ul,.rst-content section ol li>ol,.rst-content section ol li>ul,.rst-content section ul li>ol,.rst-content section ul li>ul{margin-bottom:12px}.rst-content .section ol.simple li>*,.rst-content .section ol.simple li ol,.rst-content .section ol.simple li ul,.rst-content .section ul.simple li>*,.rst-content .section ul.simple li ol,.rst-content .section ul.simple li ul,.rst-content .toctree-wrapper ol.simple li>*,.rst-content .toctree-wrapper ol.simple li ol,.rst-content .toctree-wrapper ol.simple li ul,.rst-content .toctree-wrapper ul.simple li>*,.rst-content .toctree-wrapper ul.simple li ol,.rst-content .toctree-wrapper ul.simple li ul,.rst-content section ol.simple li>*,.rst-content section ol.simple li ol,.rst-content section ol.simple li ul,.rst-content section ul.simple li>*,.rst-content section ul.simple li ol,.rst-content section ul.simple li ul{margin-top:0;margin-bottom:0}.rst-content .line-block{margin-left:0;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0}.rst-content .topic-title{font-weight:700;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0 0 24px 24px}.rst-content .align-left{float:left;margin:0 24px 24px 0}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink{opacity:0;font-size:14px;font-family:FontAwesome;margin-left:.5em}.rst-content .code-block-caption .headerlink:focus,.rst-content .code-block-caption:hover .headerlink,.rst-content .eqno .headerlink:focus,.rst-content .eqno:hover .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink:focus,.rst-content .toctree-wrapper>p.caption:hover .headerlink,.rst-content dl dt .headerlink:focus,.rst-content dl dt:hover .headerlink,.rst-content h1 .headerlink:focus,.rst-content h1:hover .headerlink,.rst-content h2 .headerlink:focus,.rst-content h2:hover .headerlink,.rst-content h3 .headerlink:focus,.rst-content h3:hover .headerlink,.rst-content h4 .headerlink:focus,.rst-content h4:hover .headerlink,.rst-content h5 .headerlink:focus,.rst-content h5:hover .headerlink,.rst-content h6 .headerlink:focus,.rst-content h6:hover .headerlink,.rst-content p.caption .headerlink:focus,.rst-content p.caption:hover .headerlink,.rst-content p .headerlink:focus,.rst-content p:hover .headerlink,.rst-content table>caption .headerlink:focus,.rst-content table>caption:hover .headerlink{opacity:1}.rst-content .btn:focus{outline:2px solid}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:1px solid #e1e4e5}.rst-content .sidebar dl,.rst-content .sidebar p,.rst-content .sidebar ul{font-size:90%}.rst-content .sidebar .last,.rst-content .sidebar>:last-child{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif;font-weight:700;background:#e1e4e5;padding:6px 12px;margin:-24px -24px 24px;font-size:100%}.rst-content .highlighted{background:#f1c40f;box-shadow:0 0 0 2px #f1c40f;display:inline;font-weight:700}.rst-content .citation-reference,.rst-content .footnote-reference{vertical-align:baseline;position:relative;top:-.4em;line-height:0;font-size:90%}.rst-content .hlist{width:100%}.rst-content dl dt span.classifier:before{content:" : "}.rst-content dl dt span.classifier-delimiter{display:none!important}html.writer-html4 .rst-content table.docutils.citation,html.writer-html4 .rst-content table.docutils.footnote{background:none;border:none}html.writer-html4 .rst-content table.docutils.citation td,html.writer-html4 .rst-content table.docutils.citation tr,html.writer-html4 .rst-content table.docutils.footnote td,html.writer-html4 .rst-content table.docutils.footnote tr{border:none;background-color:transparent!important;white-space:normal}html.writer-html4 .rst-content table.docutils.citation td.label,html.writer-html4 .rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{display:grid;grid-template-columns:max-content auto}html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{padding-left:1rem}html.writer-html5 .rst-content dl.field-list>dt:after,html.writer-html5 .rst-content dl.footnote>dt:after{content:":"}html.writer-html5 .rst-content dl.field-list>dd,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dd,html.writer-html5 .rst-content dl.footnote>dt{margin-bottom:0}html.writer-html5 .rst-content dl.footnote{font-size:.9rem}html.writer-html5 .rst-content dl.footnote>dt{margin:0 .5rem .5rem 0;line-height:1.2rem;word-break:break-all;font-weight:400}html.writer-html5 .rst-content dl.footnote>dt>span.brackets{margin-right:.5rem}html.writer-html5 .rst-content dl.footnote>dt>span.brackets:before{content:"["}html.writer-html5 .rst-content dl.footnote>dt>span.brackets:after{content:"]"}html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref{font-style:italic}html.writer-html5 .rst-content dl.footnote>dd{margin:0 0 .5rem;line-height:1.2rem}html.writer-html5 .rst-content dl.footnote>dd p,html.writer-html5 .rst-content dl.option-list kbd{font-size:.9rem}.rst-content table.docutils.footnote,html.writer-html4 .rst-content table.docutils.citation,html.writer-html5 .rst-content dl.footnote{color:grey}.rst-content table.docutils.footnote code,.rst-content table.docutils.footnote tt,html.writer-html4 .rst-content table.docutils.citation code,html.writer-html4 .rst-content table.docutils.citation tt,html.writer-html5 .rst-content dl.footnote code,html.writer-html5 .rst-content dl.footnote tt{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}html.writer-html5 .rst-content table.docutils th{border:1px solid #e1e4e5}html.writer-html5 .rst-content table.docutils td>p,html.writer-html5 .rst-content table.docutils th>p{line-height:1rem;margin-bottom:0;font-size:.9rem}.rst-content table.docutils td .last,.rst-content table.docutils td .last>:last-child{margin-bottom:0}.rst-content table.field-list,.rst-content table.field-list td{border:none}.rst-content table.field-list td p{font-size:inherit;line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content code,.rst-content tt{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;padding:2px 5px}.rst-content code big,.rst-content code em,.rst-content tt big,.rst-content tt em{font-size:100%!important;line-height:normal}.rst-content code.literal,.rst-content tt.literal{color:#e74c3c;white-space:normal}.rst-content code.xref,.rst-content tt.xref,a .rst-content code,a .rst-content tt{font-weight:700;color:#404040}.rst-content kbd,.rst-content pre,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace}.rst-content a code,.rst-content a tt{color:#2980b9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:700;margin-bottom:12px}.rst-content dl ol,.rst-content dl p,.rst-content dl table,.rst-content dl ul{margin-bottom:12px}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}html.writer-html4 .rst-content dl:not(.docutils),html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple){margin-bottom:24px}html.writer-html4 .rst-content dl:not(.docutils)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980b9;border-top:3px solid #6ab0de;padding:6px;position:relative}html.writer-html4 .rst-content dl:not(.docutils)>dt:before,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt:before{color:#6ab0de}html.writer-html4 .rst-content dl:not(.docutils)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.field-list)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dl:not(.field-list)>dt{margin-bottom:6px;border:none;border-left:3px solid #ccc;background:#f0f0f0;color:#555}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.field-list)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dl:not(.field-list)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils)>dt:first-child,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt:first-child{margin-top:0}html.writer-html4 .rst-content dl:not(.docutils) code.descclassname,html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descclassname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt.descname{background-color:transparent;border:none;padding:0;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt.descname{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .optional,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .property,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .property{display:inline-block;padding-right:8px;max-width:100%}html.writer-html4 .rst-content dl:not(.docutils) .k,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .k{font-style:italic}html.writer-html4 .rst-content dl:not(.docutils) .descclassname,html.writer-html4 .rst-content dl:not(.docutils) .descname,html.writer-html4 .rst-content dl:not(.docutils) .sig-name,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .sig-name{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#000}.rst-content .viewcode-back,.rst-content .viewcode-link{display:inline-block;color:#27ae60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:700}.rst-content code.download,.rst-content tt.download{background:inherit;padding:inherit;font-weight:400;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content code.download span:first-child,.rst-content tt.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{margin-right:4px}.rst-content .guilabel{border:1px solid #7fbbe3;background:#e7f2fa;font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .versionmodified{font-style:italic}@media screen and (max-width:480px){.rst-content .sidebar{width:100%}}span[id*=MathJax-Span]{color:#404040}.math{text-align:center}@font-face{font-family:Lato;src:url(fonts/lato-normal.woff2?bd03a2cc277bbbc338d464e679fe9942) format("woff2"),url(fonts/lato-normal.woff?27bd77b9162d388cb8d4c4217c7c5e2a) format("woff");font-weight:400;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold.woff2?cccb897485813c7c256901dbca54ecf2) format("woff2"),url(fonts/lato-bold.woff?d878b6c29b10beca227e9eef4246111b) format("woff");font-weight:700;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold-italic.woff2?0b6bb6725576b072c5d0b02ecdd1900d) format("woff2"),url(fonts/lato-bold-italic.woff?9c7e4e9eb485b4a121c760e61bc3707c) format("woff");font-weight:700;font-style:italic;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-normal-italic.woff2?4eb103b4d12be57cb1d040ed5e162e9d) format("woff2"),url(fonts/lato-normal-italic.woff?f28f2d6482446544ef1ea1ccc6dd5892) format("woff");font-weight:400;font-style:italic;font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:400;src:url(fonts/Roboto-Slab-Regular.woff2?7abf5b8d04d26a2cafea937019bca958) format("woff2"),url(fonts/Roboto-Slab-Regular.woff?c1be9284088d487c5e3ff0a10a92e58c) format("woff");font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:700;src:url(fonts/Roboto-Slab-Bold.woff2?9984f4a9bda09be08e83f2506954adbe) format("woff2"),url(fonts/Roboto-Slab-Bold.woff?bed5564a116b05148e3b3bea6fb1162a) format("woff");font-display:block} \ No newline at end of file diff --git a/docs/_static/doctools.js b/docs/_static/doctools.js index 7d88f807..e509e483 100644 --- a/docs/_static/doctools.js +++ b/docs/_static/doctools.js @@ -4,7 +4,7 @@ * * Sphinx JavaScript utilities for all documentation. * - * :copyright: Copyright 2007-2020 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ @@ -29,9 +29,14 @@ if (!window.console || !console.firebug) { /** * small helper function to urldecode strings + * + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL */ jQuery.urldecode = function(x) { - return decodeURIComponent(x).replace(/\+/g, ' '); + if (!x) { + return x + } + return decodeURIComponent(x.replace(/\+/g, ' ')); }; /** @@ -259,6 +264,9 @@ var Documentation = { hideSearchWords : function() { $('#searchbox .highlight-link').fadeOut(300); $('span.highlighted').removeClass('highlighted'); + var url = new URL(window.location); + url.searchParams.delete('highlight'); + window.history.replaceState({}, '', url); }, /** @@ -296,12 +304,14 @@ var Documentation = { window.location.href = prevHref; return false; } + break; case 39: // right var nextHref = $('link[rel="next"]').prop('href'); if (nextHref) { window.location.href = nextHref; return false; } + break; } } }); diff --git a/docs/_static/documentation_options.js b/docs/_static/documentation_options.js index 6b431870..f788b8b0 100644 --- a/docs/_static/documentation_options.js +++ b/docs/_static/documentation_options.js @@ -1,6 +1,6 @@ var DOCUMENTATION_OPTIONS = { URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), - VERSION: '0.7', + VERSION: '0.8', LANGUAGE: 'en', COLLAPSE_INDEX: false, BUILDER: 'html', diff --git a/docs/_static/js/theme.js b/docs/_static/js/theme.js index 839d07e2..1fddb6ee 100644 --- a/docs/_static/js/theme.js +++ b/docs/_static/js/theme.js @@ -1 +1 @@ -!function(n){var e={};function t(i){if(e[i])return e[i].exports;var o=e[i]={i:i,l:!1,exports:{}};return n[i].call(o.exports,o,o.exports,t),o.l=!0,o.exports}t.m=n,t.c=e,t.d=function(n,e,i){t.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:i})},t.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},t.t=function(n,e){if(1&e&&(n=t(n)),8&e)return n;if(4&e&&"object"==typeof n&&n&&n.__esModule)return n;var i=Object.create(null);if(t.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:n}),2&e&&"string"!=typeof n)for(var o in n)t.d(i,o,function(e){return n[e]}.bind(null,o));return i},t.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return t.d(e,"a",e),e},t.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},t.p="",t(t.s=0)}([function(n,e,t){t(1),n.exports=t(3)},function(n,e,t){(function(){var e="undefined"!=typeof window?window.jQuery:t(2);n.exports.ThemeNav={navBar:null,win:null,winScroll:!1,winResize:!1,linkScroll:!1,winPosition:0,winHeight:null,docHeight:null,isRunning:!1,enable:function(n){var t=this;void 0===n&&(n=!0),t.isRunning||(t.isRunning=!0,e((function(e){t.init(e),t.reset(),t.win.on("hashchange",t.reset),n&&t.win.on("scroll",(function(){t.linkScroll||t.winScroll||(t.winScroll=!0,requestAnimationFrame((function(){t.onScroll()})))})),t.win.on("resize",(function(){t.winResize||(t.winResize=!0,requestAnimationFrame((function(){t.onResize()})))})),t.onResize()})))},enableSticky:function(){this.enable(!0)},init:function(n){n(document);var e=this;this.navBar=n("div.wy-side-scroll:first"),this.win=n(window),n(document).on("click","[data-toggle='wy-nav-top']",(function(){n("[data-toggle='wy-nav-shift']").toggleClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift")})).on("click",".wy-menu-vertical .current ul li a",(function(){var t=n(this);n("[data-toggle='wy-nav-shift']").removeClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift"),e.toggleCurrent(t),e.hashChange()})).on("click","[data-toggle='rst-current-version']",(function(){n("[data-toggle='rst-versions']").toggleClass("shift-up")})),n("table.docutils:not(.field-list,.footnote,.citation)").wrap("
"),n("table.docutils.footnote").wrap("
"),n("table.docutils.citation").wrap("
"),n(".wy-menu-vertical ul").not(".simple").siblings("a").each((function(){var t=n(this);expand=n(''),expand.on("click",(function(n){return e.toggleCurrent(t),n.stopPropagation(),!1})),t.prepend(expand)}))},reset:function(){var n=encodeURI(window.location.hash)||"#";try{var e=$(".wy-menu-vertical"),t=e.find('[href="'+n+'"]');if(0===t.length){var i=$('.document [id="'+n.substring(1)+'"]').closest("div.section");0===(t=e.find('[href="#'+i.attr("id")+'"]')).length&&(t=e.find('[href="#"]'))}t.length>0&&($(".wy-menu-vertical .current").removeClass("current"),t.addClass("current"),t.closest("li.toctree-l1").addClass("current"),t.closest("li.toctree-l1").parent().addClass("current"),t.closest("li.toctree-l1").addClass("current"),t.closest("li.toctree-l2").addClass("current"),t.closest("li.toctree-l3").addClass("current"),t.closest("li.toctree-l4").addClass("current"),t.closest("li.toctree-l5").addClass("current"),t[0].scrollIntoView())}catch(n){console.log("Error expanding nav for anchor",n)}},onScroll:function(){this.winScroll=!1;var n=this.win.scrollTop(),e=n+this.winHeight,t=this.navBar.scrollTop()+(n-this.winPosition);n<0||e>this.docHeight||(this.navBar.scrollTop(t),this.winPosition=n)},onResize:function(){this.winResize=!1,this.winHeight=this.win.height(),this.docHeight=$(document).height()},hashChange:function(){this.linkScroll=!0,this.win.one("hashchange",(function(){this.linkScroll=!1}))},toggleCurrent:function(n){var e=n.closest("li");e.siblings("li.current").removeClass("current"),e.siblings().find("li.current").removeClass("current"),e.find("> ul li.current").removeClass("current"),e.toggleClass("current")}},"undefined"!=typeof window&&(window.SphinxRtdTheme={Navigation:n.exports.ThemeNav,StickyNav:n.exports.ThemeNav}),function(){for(var n=0,e=["ms","moz","webkit","o"],t=0;t"),n("table.docutils.footnote").wrap("
"),n("table.docutils.citation").wrap("
"),n(".wy-menu-vertical ul").not(".simple").siblings("a").each((function(){var t=n(this);expand=n(''),expand.on("click",(function(n){return e.toggleCurrent(t),n.stopPropagation(),!1})),t.prepend(expand)}))},reset:function(){var n=encodeURI(window.location.hash)||"#";try{var e=$(".wy-menu-vertical"),t=e.find('[href="'+n+'"]');if(0===t.length){var i=$('.document [id="'+n.substring(1)+'"]').closest("div.section");0===(t=e.find('[href="#'+i.attr("id")+'"]')).length&&(t=e.find('[href="#"]'))}if(t.length>0){$(".wy-menu-vertical .current").removeClass("current").attr("aria-expanded","false"),t.addClass("current").attr("aria-expanded","true"),t.closest("li.toctree-l1").parent().addClass("current").attr("aria-expanded","true");for(let n=1;n<=10;n++)t.closest("li.toctree-l"+n).addClass("current").attr("aria-expanded","true");t[0].scrollIntoView()}}catch(n){console.log("Error expanding nav for anchor",n)}},onScroll:function(){this.winScroll=!1;var n=this.win.scrollTop(),e=n+this.winHeight,t=this.navBar.scrollTop()+(n-this.winPosition);n<0||e>this.docHeight||(this.navBar.scrollTop(t),this.winPosition=n)},onResize:function(){this.winResize=!1,this.winHeight=this.win.height(),this.docHeight=$(document).height()},hashChange:function(){this.linkScroll=!0,this.win.one("hashchange",(function(){this.linkScroll=!1}))},toggleCurrent:function(n){var e=n.closest("li");e.siblings("li.current").removeClass("current").attr("aria-expanded","false"),e.siblings().find("li.current").removeClass("current").attr("aria-expanded","false");var t=e.find("> ul li");t.length&&(t.removeClass("current").attr("aria-expanded","false"),e.toggleClass("current").attr("aria-expanded",(function(n,e){return"true"==e?"false":"true"})))}},"undefined"!=typeof window&&(window.SphinxRtdTheme={Navigation:n.exports.ThemeNav,StickyNav:n.exports.ThemeNav}),function(){for(var n=0,e=["ms","moz","webkit","o"],t=0;t'); + var listItem = $('
  • '); var requestUrl = ""; var linkUrl = ""; if (DOCUMENTATION_OPTIONS.BUILDER === 'dirhtml') { @@ -273,28 +273,31 @@ var Search = { if (item[3]) { listItem.append($(' (' + item[3] + ')')); Search.output.append(listItem); - listItem.slideDown(5, function() { + setTimeout(function() { displayNextItem(); - }); + }, 5); } else if (DOCUMENTATION_OPTIONS.HAS_SOURCE) { $.ajax({url: requestUrl, dataType: "text", complete: function(jqxhr, textstatus) { var data = jqxhr.responseText; if (data !== '' && data !== undefined) { - listItem.append(Search.makeSearchSummary(data, searchterms, hlterms)); + var summary = Search.makeSearchSummary(data, searchterms, hlterms); + if (summary) { + listItem.append(summary); + } } Search.output.append(listItem); - listItem.slideDown(5, function() { + setTimeout(function() { displayNextItem(); - }); + }, 5); }}); } else { // no source available, just display title Search.output.append(listItem); - listItem.slideDown(5, function() { + setTimeout(function() { displayNextItem(); - }); + }, 5); } } // search finished, update title and status message @@ -325,7 +328,9 @@ var Search = { var results = []; for (var prefix in objects) { - for (var name in objects[prefix]) { + for (var iMatch = 0; iMatch != objects[prefix].length; ++iMatch) { + var match = objects[prefix][iMatch]; + var name = match[4]; var fullname = (prefix ? prefix + '.' : '') + name; var fullnameLower = fullname.toLowerCase() if (fullnameLower.indexOf(object) > -1) { @@ -339,7 +344,6 @@ var Search = { } else if (parts[parts.length - 1].indexOf(object) > -1) { score += Scorer.objPartialMatch; } - var match = objects[prefix][name]; var objname = objnames[match[1]][2]; var title = titles[match[0]]; // If more than one term searched for, we require other words to be @@ -379,6 +383,13 @@ var Search = { return results; }, + /** + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions + */ + escapeRegExp : function(string) { + return string.replace(/[.*+\-?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string + }, + /** * search for full-text terms in the index */ @@ -402,13 +413,14 @@ var Search = { ]; // add support for partial matches if (word.length > 2) { + var word_regex = this.escapeRegExp(word); for (var w in terms) { - if (w.match(word) && !terms[word]) { + if (w.match(word_regex) && !terms[word]) { _o.push({files: terms[w], score: Scorer.partialTerm}) } } for (var w in titleterms) { - if (w.match(word) && !titleterms[word]) { + if (w.match(word_regex) && !titleterms[word]) { _o.push({files: titleterms[w], score: Scorer.partialTitle}) } } @@ -490,6 +502,9 @@ var Search = { */ makeSearchSummary : function(htmlText, keywords, hlwords) { var text = Search.htmlToText(htmlText); + if (text == "") { + return null; + } var textLower = text.toLowerCase(); var start = 0; $.each(keywords, function() { @@ -501,7 +516,7 @@ var Search = { var excerpt = ((start > 0) ? '...' : '') + $.trim(text.substr(start, 240)) + ((start + 240 - text.length) ? '...' : ''); - var rv = $('
    ').text(excerpt); + var rv = $('

    ').text(excerpt); $.each(hlwords, function() { rv = rv.highlightText(this, 'highlighted'); }); diff --git a/docs/_static/underscore-1.13.1.js b/docs/_static/underscore-1.13.1.js new file mode 100644 index 00000000..ffd77af9 --- /dev/null +++ b/docs/_static/underscore-1.13.1.js @@ -0,0 +1,2042 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define('underscore', factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, (function () { + var current = global._; + var exports = global._ = factory(); + exports.noConflict = function () { global._ = current; return exports; }; + }())); +}(this, (function () { + // Underscore.js 1.13.1 + // https://underscorejs.org + // (c) 2009-2021 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors + // Underscore may be freely distributed under the MIT license. + + // Current version. + var VERSION = '1.13.1'; + + // Establish the root object, `window` (`self`) in the browser, `global` + // on the server, or `this` in some virtual machines. We use `self` + // instead of `window` for `WebWorker` support. + var root = typeof self == 'object' && self.self === self && self || + typeof global == 'object' && global.global === global && global || + Function('return this')() || + {}; + + // Save bytes in the minified (but not gzipped) version: + var ArrayProto = Array.prototype, ObjProto = Object.prototype; + var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; + + // Create quick reference variables for speed access to core prototypes. + var push = ArrayProto.push, + slice = ArrayProto.slice, + toString = ObjProto.toString, + hasOwnProperty = ObjProto.hasOwnProperty; + + // Modern feature detection. + var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', + supportsDataView = typeof DataView !== 'undefined'; + + // All **ECMAScript 5+** native function implementations that we hope to use + // are declared here. + var nativeIsArray = Array.isArray, + nativeKeys = Object.keys, + nativeCreate = Object.create, + nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; + + // Create references to these builtin functions because we override them. + var _isNaN = isNaN, + _isFinite = isFinite; + + // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. + var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); + var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', + 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; + + // The largest integer that can be represented exactly. + var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; + + // Some functions take a variable number of arguments, or a few expected + // arguments at the beginning and then a variable number of values to operate + // on. This helper accumulates all remaining arguments past the function’s + // argument length (or an explicit `startIndex`), into an array that becomes + // the last argument. Similar to ES6’s "rest parameter". + function restArguments(func, startIndex) { + startIndex = startIndex == null ? func.length - 1 : +startIndex; + return function() { + var length = Math.max(arguments.length - startIndex, 0), + rest = Array(length), + index = 0; + for (; index < length; index++) { + rest[index] = arguments[index + startIndex]; + } + switch (startIndex) { + case 0: return func.call(this, rest); + case 1: return func.call(this, arguments[0], rest); + case 2: return func.call(this, arguments[0], arguments[1], rest); + } + var args = Array(startIndex + 1); + for (index = 0; index < startIndex; index++) { + args[index] = arguments[index]; + } + args[startIndex] = rest; + return func.apply(this, args); + }; + } + + // Is a given variable an object? + function isObject(obj) { + var type = typeof obj; + return type === 'function' || type === 'object' && !!obj; + } + + // Is a given value equal to null? + function isNull(obj) { + return obj === null; + } + + // Is a given variable undefined? + function isUndefined(obj) { + return obj === void 0; + } + + // Is a given value a boolean? + function isBoolean(obj) { + return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; + } + + // Is a given value a DOM element? + function isElement(obj) { + return !!(obj && obj.nodeType === 1); + } + + // Internal function for creating a `toString`-based type tester. + function tagTester(name) { + var tag = '[object ' + name + ']'; + return function(obj) { + return toString.call(obj) === tag; + }; + } + + var isString = tagTester('String'); + + var isNumber = tagTester('Number'); + + var isDate = tagTester('Date'); + + var isRegExp = tagTester('RegExp'); + + var isError = tagTester('Error'); + + var isSymbol = tagTester('Symbol'); + + var isArrayBuffer = tagTester('ArrayBuffer'); + + var isFunction = tagTester('Function'); + + // Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old + // v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). + var nodelist = root.document && root.document.childNodes; + if (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') { + isFunction = function(obj) { + return typeof obj == 'function' || false; + }; + } + + var isFunction$1 = isFunction; + + var hasObjectTag = tagTester('Object'); + + // In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. + // In IE 11, the most common among them, this problem also applies to + // `Map`, `WeakMap` and `Set`. + var hasStringTagBug = ( + supportsDataView && hasObjectTag(new DataView(new ArrayBuffer(8))) + ), + isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map)); + + var isDataView = tagTester('DataView'); + + // In IE 10 - Edge 13, we need a different heuristic + // to determine whether an object is a `DataView`. + function ie10IsDataView(obj) { + return obj != null && isFunction$1(obj.getInt8) && isArrayBuffer(obj.buffer); + } + + var isDataView$1 = (hasStringTagBug ? ie10IsDataView : isDataView); + + // Is a given value an array? + // Delegates to ECMA5's native `Array.isArray`. + var isArray = nativeIsArray || tagTester('Array'); + + // Internal function to check whether `key` is an own property name of `obj`. + function has$1(obj, key) { + return obj != null && hasOwnProperty.call(obj, key); + } + + var isArguments = tagTester('Arguments'); + + // Define a fallback version of the method in browsers (ahem, IE < 9), where + // there isn't any inspectable "Arguments" type. + (function() { + if (!isArguments(arguments)) { + isArguments = function(obj) { + return has$1(obj, 'callee'); + }; + } + }()); + + var isArguments$1 = isArguments; + + // Is a given object a finite number? + function isFinite$1(obj) { + return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); + } + + // Is the given value `NaN`? + function isNaN$1(obj) { + return isNumber(obj) && _isNaN(obj); + } + + // Predicate-generating function. Often useful outside of Underscore. + function constant(value) { + return function() { + return value; + }; + } + + // Common internal logic for `isArrayLike` and `isBufferLike`. + function createSizePropertyCheck(getSizeProperty) { + return function(collection) { + var sizeProperty = getSizeProperty(collection); + return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; + } + } + + // Internal helper to generate a function to obtain property `key` from `obj`. + function shallowProperty(key) { + return function(obj) { + return obj == null ? void 0 : obj[key]; + }; + } + + // Internal helper to obtain the `byteLength` property of an object. + var getByteLength = shallowProperty('byteLength'); + + // Internal helper to determine whether we should spend extensive checks against + // `ArrayBuffer` et al. + var isBufferLike = createSizePropertyCheck(getByteLength); + + // Is a given value a typed array? + var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; + function isTypedArray(obj) { + // `ArrayBuffer.isView` is the most future-proof, so use it when available. + // Otherwise, fall back on the above regular expression. + return nativeIsView ? (nativeIsView(obj) && !isDataView$1(obj)) : + isBufferLike(obj) && typedArrayPattern.test(toString.call(obj)); + } + + var isTypedArray$1 = supportsArrayBuffer ? isTypedArray : constant(false); + + // Internal helper to obtain the `length` property of an object. + var getLength = shallowProperty('length'); + + // Internal helper to create a simple lookup structure. + // `collectNonEnumProps` used to depend on `_.contains`, but this led to + // circular imports. `emulatedSet` is a one-off solution that only works for + // arrays of strings. + function emulatedSet(keys) { + var hash = {}; + for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; + return { + contains: function(key) { return hash[key]; }, + push: function(key) { + hash[key] = true; + return keys.push(key); + } + }; + } + + // Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't + // be iterated by `for key in ...` and thus missed. Extends `keys` in place if + // needed. + function collectNonEnumProps(obj, keys) { + keys = emulatedSet(keys); + var nonEnumIdx = nonEnumerableProps.length; + var constructor = obj.constructor; + var proto = isFunction$1(constructor) && constructor.prototype || ObjProto; + + // Constructor is a special case. + var prop = 'constructor'; + if (has$1(obj, prop) && !keys.contains(prop)) keys.push(prop); + + while (nonEnumIdx--) { + prop = nonEnumerableProps[nonEnumIdx]; + if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { + keys.push(prop); + } + } + } + + // Retrieve the names of an object's own properties. + // Delegates to **ECMAScript 5**'s native `Object.keys`. + function keys(obj) { + if (!isObject(obj)) return []; + if (nativeKeys) return nativeKeys(obj); + var keys = []; + for (var key in obj) if (has$1(obj, key)) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; + } + + // Is a given array, string, or object empty? + // An "empty" object has no enumerable own-properties. + function isEmpty(obj) { + if (obj == null) return true; + // Skip the more expensive `toString`-based type checks if `obj` has no + // `.length`. + var length = getLength(obj); + if (typeof length == 'number' && ( + isArray(obj) || isString(obj) || isArguments$1(obj) + )) return length === 0; + return getLength(keys(obj)) === 0; + } + + // Returns whether an object has a given set of `key:value` pairs. + function isMatch(object, attrs) { + var _keys = keys(attrs), length = _keys.length; + if (object == null) return !length; + var obj = Object(object); + for (var i = 0; i < length; i++) { + var key = _keys[i]; + if (attrs[key] !== obj[key] || !(key in obj)) return false; + } + return true; + } + + // If Underscore is called as a function, it returns a wrapped object that can + // be used OO-style. This wrapper holds altered versions of all functions added + // through `_.mixin`. Wrapped objects may be chained. + function _$1(obj) { + if (obj instanceof _$1) return obj; + if (!(this instanceof _$1)) return new _$1(obj); + this._wrapped = obj; + } + + _$1.VERSION = VERSION; + + // Extracts the result from a wrapped and chained object. + _$1.prototype.value = function() { + return this._wrapped; + }; + + // Provide unwrapping proxies for some methods used in engine operations + // such as arithmetic and JSON stringification. + _$1.prototype.valueOf = _$1.prototype.toJSON = _$1.prototype.value; + + _$1.prototype.toString = function() { + return String(this._wrapped); + }; + + // Internal function to wrap or shallow-copy an ArrayBuffer, + // typed array or DataView to a new view, reusing the buffer. + function toBufferView(bufferSource) { + return new Uint8Array( + bufferSource.buffer || bufferSource, + bufferSource.byteOffset || 0, + getByteLength(bufferSource) + ); + } + + // We use this string twice, so give it a name for minification. + var tagDataView = '[object DataView]'; + + // Internal recursive comparison function for `_.isEqual`. + function eq(a, b, aStack, bStack) { + // Identical objects are equal. `0 === -0`, but they aren't identical. + // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal). + if (a === b) return a !== 0 || 1 / a === 1 / b; + // `null` or `undefined` only equal to itself (strict comparison). + if (a == null || b == null) return false; + // `NaN`s are equivalent, but non-reflexive. + if (a !== a) return b !== b; + // Exhaust primitive checks + var type = typeof a; + if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; + return deepEq(a, b, aStack, bStack); + } + + // Internal recursive comparison function for `_.isEqual`. + function deepEq(a, b, aStack, bStack) { + // Unwrap any wrapped objects. + if (a instanceof _$1) a = a._wrapped; + if (b instanceof _$1) b = b._wrapped; + // Compare `[[Class]]` names. + var className = toString.call(a); + if (className !== toString.call(b)) return false; + // Work around a bug in IE 10 - Edge 13. + if (hasStringTagBug && className == '[object Object]' && isDataView$1(a)) { + if (!isDataView$1(b)) return false; + className = tagDataView; + } + switch (className) { + // These types are compared by value. + case '[object RegExp]': + // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') + case '[object String]': + // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is + // equivalent to `new String("5")`. + return '' + a === '' + b; + case '[object Number]': + // `NaN`s are equivalent, but non-reflexive. + // Object(NaN) is equivalent to NaN. + if (+a !== +a) return +b !== +b; + // An `egal` comparison is performed for other numeric values. + return +a === 0 ? 1 / +a === 1 / b : +a === +b; + case '[object Date]': + case '[object Boolean]': + // Coerce dates and booleans to numeric primitive values. Dates are compared by their + // millisecond representations. Note that invalid dates with millisecond representations + // of `NaN` are not equivalent. + return +a === +b; + case '[object Symbol]': + return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); + case '[object ArrayBuffer]': + case tagDataView: + // Coerce to typed array so we can fall through. + return deepEq(toBufferView(a), toBufferView(b), aStack, bStack); + } + + var areArrays = className === '[object Array]'; + if (!areArrays && isTypedArray$1(a)) { + var byteLength = getByteLength(a); + if (byteLength !== getByteLength(b)) return false; + if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true; + areArrays = true; + } + if (!areArrays) { + if (typeof a != 'object' || typeof b != 'object') return false; + + // Objects with different constructors are not equivalent, but `Object`s or `Array`s + // from different frames are. + var aCtor = a.constructor, bCtor = b.constructor; + if (aCtor !== bCtor && !(isFunction$1(aCtor) && aCtor instanceof aCtor && + isFunction$1(bCtor) && bCtor instanceof bCtor) + && ('constructor' in a && 'constructor' in b)) { + return false; + } + } + // Assume equality for cyclic structures. The algorithm for detecting cyclic + // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. + + // Initializing stack of traversed objects. + // It's done here since we only need them for objects and arrays comparison. + aStack = aStack || []; + bStack = bStack || []; + var length = aStack.length; + while (length--) { + // Linear search. Performance is inversely proportional to the number of + // unique nested structures. + if (aStack[length] === a) return bStack[length] === b; + } + + // Add the first object to the stack of traversed objects. + aStack.push(a); + bStack.push(b); + + // Recursively compare objects and arrays. + if (areArrays) { + // Compare array lengths to determine if a deep comparison is necessary. + length = a.length; + if (length !== b.length) return false; + // Deep compare the contents, ignoring non-numeric properties. + while (length--) { + if (!eq(a[length], b[length], aStack, bStack)) return false; + } + } else { + // Deep compare objects. + var _keys = keys(a), key; + length = _keys.length; + // Ensure that both objects contain the same number of properties before comparing deep equality. + if (keys(b).length !== length) return false; + while (length--) { + // Deep compare each member + key = _keys[length]; + if (!(has$1(b, key) && eq(a[key], b[key], aStack, bStack))) return false; + } + } + // Remove the first object from the stack of traversed objects. + aStack.pop(); + bStack.pop(); + return true; + } + + // Perform a deep comparison to check if two objects are equal. + function isEqual(a, b) { + return eq(a, b); + } + + // Retrieve all the enumerable property names of an object. + function allKeys(obj) { + if (!isObject(obj)) return []; + var keys = []; + for (var key in obj) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; + } + + // Since the regular `Object.prototype.toString` type tests don't work for + // some types in IE 11, we use a fingerprinting heuristic instead, based + // on the methods. It's not great, but it's the best we got. + // The fingerprint method lists are defined below. + function ie11fingerprint(methods) { + var length = getLength(methods); + return function(obj) { + if (obj == null) return false; + // `Map`, `WeakMap` and `Set` have no enumerable keys. + var keys = allKeys(obj); + if (getLength(keys)) return false; + for (var i = 0; i < length; i++) { + if (!isFunction$1(obj[methods[i]])) return false; + } + // If we are testing against `WeakMap`, we need to ensure that + // `obj` doesn't have a `forEach` method in order to distinguish + // it from a regular `Map`. + return methods !== weakMapMethods || !isFunction$1(obj[forEachName]); + }; + } + + // In the interest of compact minification, we write + // each string in the fingerprints only once. + var forEachName = 'forEach', + hasName = 'has', + commonInit = ['clear', 'delete'], + mapTail = ['get', hasName, 'set']; + + // `Map`, `WeakMap` and `Set` each have slightly different + // combinations of the above sublists. + var mapMethods = commonInit.concat(forEachName, mapTail), + weakMapMethods = commonInit.concat(mapTail), + setMethods = ['add'].concat(commonInit, forEachName, hasName); + + var isMap = isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map'); + + var isWeakMap = isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap'); + + var isSet = isIE11 ? ie11fingerprint(setMethods) : tagTester('Set'); + + var isWeakSet = tagTester('WeakSet'); + + // Retrieve the values of an object's properties. + function values(obj) { + var _keys = keys(obj); + var length = _keys.length; + var values = Array(length); + for (var i = 0; i < length; i++) { + values[i] = obj[_keys[i]]; + } + return values; + } + + // Convert an object into a list of `[key, value]` pairs. + // The opposite of `_.object` with one argument. + function pairs(obj) { + var _keys = keys(obj); + var length = _keys.length; + var pairs = Array(length); + for (var i = 0; i < length; i++) { + pairs[i] = [_keys[i], obj[_keys[i]]]; + } + return pairs; + } + + // Invert the keys and values of an object. The values must be serializable. + function invert(obj) { + var result = {}; + var _keys = keys(obj); + for (var i = 0, length = _keys.length; i < length; i++) { + result[obj[_keys[i]]] = _keys[i]; + } + return result; + } + + // Return a sorted list of the function names available on the object. + function functions(obj) { + var names = []; + for (var key in obj) { + if (isFunction$1(obj[key])) names.push(key); + } + return names.sort(); + } + + // An internal function for creating assigner functions. + function createAssigner(keysFunc, defaults) { + return function(obj) { + var length = arguments.length; + if (defaults) obj = Object(obj); + if (length < 2 || obj == null) return obj; + for (var index = 1; index < length; index++) { + var source = arguments[index], + keys = keysFunc(source), + l = keys.length; + for (var i = 0; i < l; i++) { + var key = keys[i]; + if (!defaults || obj[key] === void 0) obj[key] = source[key]; + } + } + return obj; + }; + } + + // Extend a given object with all the properties in passed-in object(s). + var extend = createAssigner(allKeys); + + // Assigns a given object with all the own properties in the passed-in + // object(s). + // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) + var extendOwn = createAssigner(keys); + + // Fill in a given object with default properties. + var defaults = createAssigner(allKeys, true); + + // Create a naked function reference for surrogate-prototype-swapping. + function ctor() { + return function(){}; + } + + // An internal function for creating a new object that inherits from another. + function baseCreate(prototype) { + if (!isObject(prototype)) return {}; + if (nativeCreate) return nativeCreate(prototype); + var Ctor = ctor(); + Ctor.prototype = prototype; + var result = new Ctor; + Ctor.prototype = null; + return result; + } + + // Creates an object that inherits from the given prototype object. + // If additional properties are provided then they will be added to the + // created object. + function create(prototype, props) { + var result = baseCreate(prototype); + if (props) extendOwn(result, props); + return result; + } + + // Create a (shallow-cloned) duplicate of an object. + function clone(obj) { + if (!isObject(obj)) return obj; + return isArray(obj) ? obj.slice() : extend({}, obj); + } + + // Invokes `interceptor` with the `obj` and then returns `obj`. + // The primary purpose of this method is to "tap into" a method chain, in + // order to perform operations on intermediate results within the chain. + function tap(obj, interceptor) { + interceptor(obj); + return obj; + } + + // Normalize a (deep) property `path` to array. + // Like `_.iteratee`, this function can be customized. + function toPath$1(path) { + return isArray(path) ? path : [path]; + } + _$1.toPath = toPath$1; + + // Internal wrapper for `_.toPath` to enable minification. + // Similar to `cb` for `_.iteratee`. + function toPath(path) { + return _$1.toPath(path); + } + + // Internal function to obtain a nested property in `obj` along `path`. + function deepGet(obj, path) { + var length = path.length; + for (var i = 0; i < length; i++) { + if (obj == null) return void 0; + obj = obj[path[i]]; + } + return length ? obj : void 0; + } + + // Get the value of the (deep) property on `path` from `object`. + // If any property in `path` does not exist or if the value is + // `undefined`, return `defaultValue` instead. + // The `path` is normalized through `_.toPath`. + function get(object, path, defaultValue) { + var value = deepGet(object, toPath(path)); + return isUndefined(value) ? defaultValue : value; + } + + // Shortcut function for checking if an object has a given property directly on + // itself (in other words, not on a prototype). Unlike the internal `has` + // function, this public version can also traverse nested properties. + function has(obj, path) { + path = toPath(path); + var length = path.length; + for (var i = 0; i < length; i++) { + var key = path[i]; + if (!has$1(obj, key)) return false; + obj = obj[key]; + } + return !!length; + } + + // Keep the identity function around for default iteratees. + function identity(value) { + return value; + } + + // Returns a predicate for checking whether an object has a given set of + // `key:value` pairs. + function matcher(attrs) { + attrs = extendOwn({}, attrs); + return function(obj) { + return isMatch(obj, attrs); + }; + } + + // Creates a function that, when passed an object, will traverse that object’s + // properties down the given `path`, specified as an array of keys or indices. + function property(path) { + path = toPath(path); + return function(obj) { + return deepGet(obj, path); + }; + } + + // Internal function that returns an efficient (for current engines) version + // of the passed-in callback, to be repeatedly applied in other Underscore + // functions. + function optimizeCb(func, context, argCount) { + if (context === void 0) return func; + switch (argCount == null ? 3 : argCount) { + case 1: return function(value) { + return func.call(context, value); + }; + // The 2-argument case is omitted because we’re not using it. + case 3: return function(value, index, collection) { + return func.call(context, value, index, collection); + }; + case 4: return function(accumulator, value, index, collection) { + return func.call(context, accumulator, value, index, collection); + }; + } + return function() { + return func.apply(context, arguments); + }; + } + + // An internal function to generate callbacks that can be applied to each + // element in a collection, returning the desired result — either `_.identity`, + // an arbitrary callback, a property matcher, or a property accessor. + function baseIteratee(value, context, argCount) { + if (value == null) return identity; + if (isFunction$1(value)) return optimizeCb(value, context, argCount); + if (isObject(value) && !isArray(value)) return matcher(value); + return property(value); + } + + // External wrapper for our callback generator. Users may customize + // `_.iteratee` if they want additional predicate/iteratee shorthand styles. + // This abstraction hides the internal-only `argCount` argument. + function iteratee(value, context) { + return baseIteratee(value, context, Infinity); + } + _$1.iteratee = iteratee; + + // The function we call internally to generate a callback. It invokes + // `_.iteratee` if overridden, otherwise `baseIteratee`. + function cb(value, context, argCount) { + if (_$1.iteratee !== iteratee) return _$1.iteratee(value, context); + return baseIteratee(value, context, argCount); + } + + // Returns the results of applying the `iteratee` to each element of `obj`. + // In contrast to `_.map` it returns an object. + function mapObject(obj, iteratee, context) { + iteratee = cb(iteratee, context); + var _keys = keys(obj), + length = _keys.length, + results = {}; + for (var index = 0; index < length; index++) { + var currentKey = _keys[index]; + results[currentKey] = iteratee(obj[currentKey], currentKey, obj); + } + return results; + } + + // Predicate-generating function. Often useful outside of Underscore. + function noop(){} + + // Generates a function for a given object that returns a given property. + function propertyOf(obj) { + if (obj == null) return noop; + return function(path) { + return get(obj, path); + }; + } + + // Run a function **n** times. + function times(n, iteratee, context) { + var accum = Array(Math.max(0, n)); + iteratee = optimizeCb(iteratee, context, 1); + for (var i = 0; i < n; i++) accum[i] = iteratee(i); + return accum; + } + + // Return a random integer between `min` and `max` (inclusive). + function random(min, max) { + if (max == null) { + max = min; + min = 0; + } + return min + Math.floor(Math.random() * (max - min + 1)); + } + + // A (possibly faster) way to get the current timestamp as an integer. + var now = Date.now || function() { + return new Date().getTime(); + }; + + // Internal helper to generate functions for escaping and unescaping strings + // to/from HTML interpolation. + function createEscaper(map) { + var escaper = function(match) { + return map[match]; + }; + // Regexes for identifying a key that needs to be escaped. + var source = '(?:' + keys(map).join('|') + ')'; + var testRegexp = RegExp(source); + var replaceRegexp = RegExp(source, 'g'); + return function(string) { + string = string == null ? '' : '' + string; + return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string; + }; + } + + // Internal list of HTML entities for escaping. + var escapeMap = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''', + '`': '`' + }; + + // Function for escaping strings to HTML interpolation. + var _escape = createEscaper(escapeMap); + + // Internal list of HTML entities for unescaping. + var unescapeMap = invert(escapeMap); + + // Function for unescaping strings from HTML interpolation. + var _unescape = createEscaper(unescapeMap); + + // By default, Underscore uses ERB-style template delimiters. Change the + // following template settings to use alternative delimiters. + var templateSettings = _$1.templateSettings = { + evaluate: /<%([\s\S]+?)%>/g, + interpolate: /<%=([\s\S]+?)%>/g, + escape: /<%-([\s\S]+?)%>/g + }; + + // When customizing `_.templateSettings`, if you don't want to define an + // interpolation, evaluation or escaping regex, we need one that is + // guaranteed not to match. + var noMatch = /(.)^/; + + // Certain characters need to be escaped so that they can be put into a + // string literal. + var escapes = { + "'": "'", + '\\': '\\', + '\r': 'r', + '\n': 'n', + '\u2028': 'u2028', + '\u2029': 'u2029' + }; + + var escapeRegExp = /\\|'|\r|\n|\u2028|\u2029/g; + + function escapeChar(match) { + return '\\' + escapes[match]; + } + + // In order to prevent third-party code injection through + // `_.templateSettings.variable`, we test it against the following regular + // expression. It is intentionally a bit more liberal than just matching valid + // identifiers, but still prevents possible loopholes through defaults or + // destructuring assignment. + var bareIdentifier = /^\s*(\w|\$)+\s*$/; + + // JavaScript micro-templating, similar to John Resig's implementation. + // Underscore templating handles arbitrary delimiters, preserves whitespace, + // and correctly escapes quotes within interpolated code. + // NB: `oldSettings` only exists for backwards compatibility. + function template(text, settings, oldSettings) { + if (!settings && oldSettings) settings = oldSettings; + settings = defaults({}, settings, _$1.templateSettings); + + // Combine delimiters into one regular expression via alternation. + var matcher = RegExp([ + (settings.escape || noMatch).source, + (settings.interpolate || noMatch).source, + (settings.evaluate || noMatch).source + ].join('|') + '|$', 'g'); + + // Compile the template source, escaping string literals appropriately. + var index = 0; + var source = "__p+='"; + text.replace(matcher, function(match, escape, interpolate, evaluate, offset) { + source += text.slice(index, offset).replace(escapeRegExp, escapeChar); + index = offset + match.length; + + if (escape) { + source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'"; + } else if (interpolate) { + source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'"; + } else if (evaluate) { + source += "';\n" + evaluate + "\n__p+='"; + } + + // Adobe VMs need the match returned to produce the correct offset. + return match; + }); + source += "';\n"; + + var argument = settings.variable; + if (argument) { + // Insure against third-party code injection. (CVE-2021-23358) + if (!bareIdentifier.test(argument)) throw new Error( + 'variable is not a bare identifier: ' + argument + ); + } else { + // If a variable is not specified, place data values in local scope. + source = 'with(obj||{}){\n' + source + '}\n'; + argument = 'obj'; + } + + source = "var __t,__p='',__j=Array.prototype.join," + + "print=function(){__p+=__j.call(arguments,'');};\n" + + source + 'return __p;\n'; + + var render; + try { + render = new Function(argument, '_', source); + } catch (e) { + e.source = source; + throw e; + } + + var template = function(data) { + return render.call(this, data, _$1); + }; + + // Provide the compiled source as a convenience for precompilation. + template.source = 'function(' + argument + '){\n' + source + '}'; + + return template; + } + + // Traverses the children of `obj` along `path`. If a child is a function, it + // is invoked with its parent as context. Returns the value of the final + // child, or `fallback` if any child is undefined. + function result(obj, path, fallback) { + path = toPath(path); + var length = path.length; + if (!length) { + return isFunction$1(fallback) ? fallback.call(obj) : fallback; + } + for (var i = 0; i < length; i++) { + var prop = obj == null ? void 0 : obj[path[i]]; + if (prop === void 0) { + prop = fallback; + i = length; // Ensure we don't continue iterating. + } + obj = isFunction$1(prop) ? prop.call(obj) : prop; + } + return obj; + } + + // Generate a unique integer id (unique within the entire client session). + // Useful for temporary DOM ids. + var idCounter = 0; + function uniqueId(prefix) { + var id = ++idCounter + ''; + return prefix ? prefix + id : id; + } + + // Start chaining a wrapped Underscore object. + function chain(obj) { + var instance = _$1(obj); + instance._chain = true; + return instance; + } + + // Internal function to execute `sourceFunc` bound to `context` with optional + // `args`. Determines whether to execute a function as a constructor or as a + // normal function. + function executeBound(sourceFunc, boundFunc, context, callingContext, args) { + if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args); + var self = baseCreate(sourceFunc.prototype); + var result = sourceFunc.apply(self, args); + if (isObject(result)) return result; + return self; + } + + // Partially apply a function by creating a version that has had some of its + // arguments pre-filled, without changing its dynamic `this` context. `_` acts + // as a placeholder by default, allowing any combination of arguments to be + // pre-filled. Set `_.partial.placeholder` for a custom placeholder argument. + var partial = restArguments(function(func, boundArgs) { + var placeholder = partial.placeholder; + var bound = function() { + var position = 0, length = boundArgs.length; + var args = Array(length); + for (var i = 0; i < length; i++) { + args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i]; + } + while (position < arguments.length) args.push(arguments[position++]); + return executeBound(func, bound, this, this, args); + }; + return bound; + }); + + partial.placeholder = _$1; + + // Create a function bound to a given object (assigning `this`, and arguments, + // optionally). + var bind = restArguments(function(func, context, args) { + if (!isFunction$1(func)) throw new TypeError('Bind must be called on a function'); + var bound = restArguments(function(callArgs) { + return executeBound(func, bound, context, this, args.concat(callArgs)); + }); + return bound; + }); + + // Internal helper for collection methods to determine whether a collection + // should be iterated as an array or as an object. + // Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength + // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094 + var isArrayLike = createSizePropertyCheck(getLength); + + // Internal implementation of a recursive `flatten` function. + function flatten$1(input, depth, strict, output) { + output = output || []; + if (!depth && depth !== 0) { + depth = Infinity; + } else if (depth <= 0) { + return output.concat(input); + } + var idx = output.length; + for (var i = 0, length = getLength(input); i < length; i++) { + var value = input[i]; + if (isArrayLike(value) && (isArray(value) || isArguments$1(value))) { + // Flatten current level of array or arguments object. + if (depth > 1) { + flatten$1(value, depth - 1, strict, output); + idx = output.length; + } else { + var j = 0, len = value.length; + while (j < len) output[idx++] = value[j++]; + } + } else if (!strict) { + output[idx++] = value; + } + } + return output; + } + + // Bind a number of an object's methods to that object. Remaining arguments + // are the method names to be bound. Useful for ensuring that all callbacks + // defined on an object belong to it. + var bindAll = restArguments(function(obj, keys) { + keys = flatten$1(keys, false, false); + var index = keys.length; + if (index < 1) throw new Error('bindAll must be passed function names'); + while (index--) { + var key = keys[index]; + obj[key] = bind(obj[key], obj); + } + return obj; + }); + + // Memoize an expensive function by storing its results. + function memoize(func, hasher) { + var memoize = function(key) { + var cache = memoize.cache; + var address = '' + (hasher ? hasher.apply(this, arguments) : key); + if (!has$1(cache, address)) cache[address] = func.apply(this, arguments); + return cache[address]; + }; + memoize.cache = {}; + return memoize; + } + + // Delays a function for the given number of milliseconds, and then calls + // it with the arguments supplied. + var delay = restArguments(function(func, wait, args) { + return setTimeout(function() { + return func.apply(null, args); + }, wait); + }); + + // Defers a function, scheduling it to run after the current call stack has + // cleared. + var defer = partial(delay, _$1, 1); + + // Returns a function, that, when invoked, will only be triggered at most once + // during a given window of time. Normally, the throttled function will run + // as much as it can, without ever going more than once per `wait` duration; + // but if you'd like to disable the execution on the leading edge, pass + // `{leading: false}`. To disable execution on the trailing edge, ditto. + function throttle(func, wait, options) { + var timeout, context, args, result; + var previous = 0; + if (!options) options = {}; + + var later = function() { + previous = options.leading === false ? 0 : now(); + timeout = null; + result = func.apply(context, args); + if (!timeout) context = args = null; + }; + + var throttled = function() { + var _now = now(); + if (!previous && options.leading === false) previous = _now; + var remaining = wait - (_now - previous); + context = this; + args = arguments; + if (remaining <= 0 || remaining > wait) { + if (timeout) { + clearTimeout(timeout); + timeout = null; + } + previous = _now; + result = func.apply(context, args); + if (!timeout) context = args = null; + } else if (!timeout && options.trailing !== false) { + timeout = setTimeout(later, remaining); + } + return result; + }; + + throttled.cancel = function() { + clearTimeout(timeout); + previous = 0; + timeout = context = args = null; + }; + + return throttled; + } + + // When a sequence of calls of the returned function ends, the argument + // function is triggered. The end of a sequence is defined by the `wait` + // parameter. If `immediate` is passed, the argument function will be + // triggered at the beginning of the sequence instead of at the end. + function debounce(func, wait, immediate) { + var timeout, previous, args, result, context; + + var later = function() { + var passed = now() - previous; + if (wait > passed) { + timeout = setTimeout(later, wait - passed); + } else { + timeout = null; + if (!immediate) result = func.apply(context, args); + // This check is needed because `func` can recursively invoke `debounced`. + if (!timeout) args = context = null; + } + }; + + var debounced = restArguments(function(_args) { + context = this; + args = _args; + previous = now(); + if (!timeout) { + timeout = setTimeout(later, wait); + if (immediate) result = func.apply(context, args); + } + return result; + }); + + debounced.cancel = function() { + clearTimeout(timeout); + timeout = args = context = null; + }; + + return debounced; + } + + // Returns the first function passed as an argument to the second, + // allowing you to adjust arguments, run code before and after, and + // conditionally execute the original function. + function wrap(func, wrapper) { + return partial(wrapper, func); + } + + // Returns a negated version of the passed-in predicate. + function negate(predicate) { + return function() { + return !predicate.apply(this, arguments); + }; + } + + // Returns a function that is the composition of a list of functions, each + // consuming the return value of the function that follows. + function compose() { + var args = arguments; + var start = args.length - 1; + return function() { + var i = start; + var result = args[start].apply(this, arguments); + while (i--) result = args[i].call(this, result); + return result; + }; + } + + // Returns a function that will only be executed on and after the Nth call. + function after(times, func) { + return function() { + if (--times < 1) { + return func.apply(this, arguments); + } + }; + } + + // Returns a function that will only be executed up to (but not including) the + // Nth call. + function before(times, func) { + var memo; + return function() { + if (--times > 0) { + memo = func.apply(this, arguments); + } + if (times <= 1) func = null; + return memo; + }; + } + + // Returns a function that will be executed at most one time, no matter how + // often you call it. Useful for lazy initialization. + var once = partial(before, 2); + + // Returns the first key on an object that passes a truth test. + function findKey(obj, predicate, context) { + predicate = cb(predicate, context); + var _keys = keys(obj), key; + for (var i = 0, length = _keys.length; i < length; i++) { + key = _keys[i]; + if (predicate(obj[key], key, obj)) return key; + } + } + + // Internal function to generate `_.findIndex` and `_.findLastIndex`. + function createPredicateIndexFinder(dir) { + return function(array, predicate, context) { + predicate = cb(predicate, context); + var length = getLength(array); + var index = dir > 0 ? 0 : length - 1; + for (; index >= 0 && index < length; index += dir) { + if (predicate(array[index], index, array)) return index; + } + return -1; + }; + } + + // Returns the first index on an array-like that passes a truth test. + var findIndex = createPredicateIndexFinder(1); + + // Returns the last index on an array-like that passes a truth test. + var findLastIndex = createPredicateIndexFinder(-1); + + // Use a comparator function to figure out the smallest index at which + // an object should be inserted so as to maintain order. Uses binary search. + function sortedIndex(array, obj, iteratee, context) { + iteratee = cb(iteratee, context, 1); + var value = iteratee(obj); + var low = 0, high = getLength(array); + while (low < high) { + var mid = Math.floor((low + high) / 2); + if (iteratee(array[mid]) < value) low = mid + 1; else high = mid; + } + return low; + } + + // Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions. + function createIndexFinder(dir, predicateFind, sortedIndex) { + return function(array, item, idx) { + var i = 0, length = getLength(array); + if (typeof idx == 'number') { + if (dir > 0) { + i = idx >= 0 ? idx : Math.max(idx + length, i); + } else { + length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1; + } + } else if (sortedIndex && idx && length) { + idx = sortedIndex(array, item); + return array[idx] === item ? idx : -1; + } + if (item !== item) { + idx = predicateFind(slice.call(array, i, length), isNaN$1); + return idx >= 0 ? idx + i : -1; + } + for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) { + if (array[idx] === item) return idx; + } + return -1; + }; + } + + // Return the position of the first occurrence of an item in an array, + // or -1 if the item is not included in the array. + // If the array is large and already in sort order, pass `true` + // for **isSorted** to use binary search. + var indexOf = createIndexFinder(1, findIndex, sortedIndex); + + // Return the position of the last occurrence of an item in an array, + // or -1 if the item is not included in the array. + var lastIndexOf = createIndexFinder(-1, findLastIndex); + + // Return the first value which passes a truth test. + function find(obj, predicate, context) { + var keyFinder = isArrayLike(obj) ? findIndex : findKey; + var key = keyFinder(obj, predicate, context); + if (key !== void 0 && key !== -1) return obj[key]; + } + + // Convenience version of a common use case of `_.find`: getting the first + // object containing specific `key:value` pairs. + function findWhere(obj, attrs) { + return find(obj, matcher(attrs)); + } + + // The cornerstone for collection functions, an `each` + // implementation, aka `forEach`. + // Handles raw objects in addition to array-likes. Treats all + // sparse array-likes as if they were dense. + function each(obj, iteratee, context) { + iteratee = optimizeCb(iteratee, context); + var i, length; + if (isArrayLike(obj)) { + for (i = 0, length = obj.length; i < length; i++) { + iteratee(obj[i], i, obj); + } + } else { + var _keys = keys(obj); + for (i = 0, length = _keys.length; i < length; i++) { + iteratee(obj[_keys[i]], _keys[i], obj); + } + } + return obj; + } + + // Return the results of applying the iteratee to each element. + function map(obj, iteratee, context) { + iteratee = cb(iteratee, context); + var _keys = !isArrayLike(obj) && keys(obj), + length = (_keys || obj).length, + results = Array(length); + for (var index = 0; index < length; index++) { + var currentKey = _keys ? _keys[index] : index; + results[index] = iteratee(obj[currentKey], currentKey, obj); + } + return results; + } + + // Internal helper to create a reducing function, iterating left or right. + function createReduce(dir) { + // Wrap code that reassigns argument variables in a separate function than + // the one that accesses `arguments.length` to avoid a perf hit. (#1991) + var reducer = function(obj, iteratee, memo, initial) { + var _keys = !isArrayLike(obj) && keys(obj), + length = (_keys || obj).length, + index = dir > 0 ? 0 : length - 1; + if (!initial) { + memo = obj[_keys ? _keys[index] : index]; + index += dir; + } + for (; index >= 0 && index < length; index += dir) { + var currentKey = _keys ? _keys[index] : index; + memo = iteratee(memo, obj[currentKey], currentKey, obj); + } + return memo; + }; + + return function(obj, iteratee, memo, context) { + var initial = arguments.length >= 3; + return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial); + }; + } + + // **Reduce** builds up a single result from a list of values, aka `inject`, + // or `foldl`. + var reduce = createReduce(1); + + // The right-associative version of reduce, also known as `foldr`. + var reduceRight = createReduce(-1); + + // Return all the elements that pass a truth test. + function filter(obj, predicate, context) { + var results = []; + predicate = cb(predicate, context); + each(obj, function(value, index, list) { + if (predicate(value, index, list)) results.push(value); + }); + return results; + } + + // Return all the elements for which a truth test fails. + function reject(obj, predicate, context) { + return filter(obj, negate(cb(predicate)), context); + } + + // Determine whether all of the elements pass a truth test. + function every(obj, predicate, context) { + predicate = cb(predicate, context); + var _keys = !isArrayLike(obj) && keys(obj), + length = (_keys || obj).length; + for (var index = 0; index < length; index++) { + var currentKey = _keys ? _keys[index] : index; + if (!predicate(obj[currentKey], currentKey, obj)) return false; + } + return true; + } + + // Determine if at least one element in the object passes a truth test. + function some(obj, predicate, context) { + predicate = cb(predicate, context); + var _keys = !isArrayLike(obj) && keys(obj), + length = (_keys || obj).length; + for (var index = 0; index < length; index++) { + var currentKey = _keys ? _keys[index] : index; + if (predicate(obj[currentKey], currentKey, obj)) return true; + } + return false; + } + + // Determine if the array or object contains a given item (using `===`). + function contains(obj, item, fromIndex, guard) { + if (!isArrayLike(obj)) obj = values(obj); + if (typeof fromIndex != 'number' || guard) fromIndex = 0; + return indexOf(obj, item, fromIndex) >= 0; + } + + // Invoke a method (with arguments) on every item in a collection. + var invoke = restArguments(function(obj, path, args) { + var contextPath, func; + if (isFunction$1(path)) { + func = path; + } else { + path = toPath(path); + contextPath = path.slice(0, -1); + path = path[path.length - 1]; + } + return map(obj, function(context) { + var method = func; + if (!method) { + if (contextPath && contextPath.length) { + context = deepGet(context, contextPath); + } + if (context == null) return void 0; + method = context[path]; + } + return method == null ? method : method.apply(context, args); + }); + }); + + // Convenience version of a common use case of `_.map`: fetching a property. + function pluck(obj, key) { + return map(obj, property(key)); + } + + // Convenience version of a common use case of `_.filter`: selecting only + // objects containing specific `key:value` pairs. + function where(obj, attrs) { + return filter(obj, matcher(attrs)); + } + + // Return the maximum element (or element-based computation). + function max(obj, iteratee, context) { + var result = -Infinity, lastComputed = -Infinity, + value, computed; + if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) { + obj = isArrayLike(obj) ? obj : values(obj); + for (var i = 0, length = obj.length; i < length; i++) { + value = obj[i]; + if (value != null && value > result) { + result = value; + } + } + } else { + iteratee = cb(iteratee, context); + each(obj, function(v, index, list) { + computed = iteratee(v, index, list); + if (computed > lastComputed || computed === -Infinity && result === -Infinity) { + result = v; + lastComputed = computed; + } + }); + } + return result; + } + + // Return the minimum element (or element-based computation). + function min(obj, iteratee, context) { + var result = Infinity, lastComputed = Infinity, + value, computed; + if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) { + obj = isArrayLike(obj) ? obj : values(obj); + for (var i = 0, length = obj.length; i < length; i++) { + value = obj[i]; + if (value != null && value < result) { + result = value; + } + } + } else { + iteratee = cb(iteratee, context); + each(obj, function(v, index, list) { + computed = iteratee(v, index, list); + if (computed < lastComputed || computed === Infinity && result === Infinity) { + result = v; + lastComputed = computed; + } + }); + } + return result; + } + + // Sample **n** random values from a collection using the modern version of the + // [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle). + // If **n** is not specified, returns a single random element. + // The internal `guard` argument allows it to work with `_.map`. + function sample(obj, n, guard) { + if (n == null || guard) { + if (!isArrayLike(obj)) obj = values(obj); + return obj[random(obj.length - 1)]; + } + var sample = isArrayLike(obj) ? clone(obj) : values(obj); + var length = getLength(sample); + n = Math.max(Math.min(n, length), 0); + var last = length - 1; + for (var index = 0; index < n; index++) { + var rand = random(index, last); + var temp = sample[index]; + sample[index] = sample[rand]; + sample[rand] = temp; + } + return sample.slice(0, n); + } + + // Shuffle a collection. + function shuffle(obj) { + return sample(obj, Infinity); + } + + // Sort the object's values by a criterion produced by an iteratee. + function sortBy(obj, iteratee, context) { + var index = 0; + iteratee = cb(iteratee, context); + return pluck(map(obj, function(value, key, list) { + return { + value: value, + index: index++, + criteria: iteratee(value, key, list) + }; + }).sort(function(left, right) { + var a = left.criteria; + var b = right.criteria; + if (a !== b) { + if (a > b || a === void 0) return 1; + if (a < b || b === void 0) return -1; + } + return left.index - right.index; + }), 'value'); + } + + // An internal function used for aggregate "group by" operations. + function group(behavior, partition) { + return function(obj, iteratee, context) { + var result = partition ? [[], []] : {}; + iteratee = cb(iteratee, context); + each(obj, function(value, index) { + var key = iteratee(value, index, obj); + behavior(result, value, key); + }); + return result; + }; + } + + // Groups the object's values by a criterion. Pass either a string attribute + // to group by, or a function that returns the criterion. + var groupBy = group(function(result, value, key) { + if (has$1(result, key)) result[key].push(value); else result[key] = [value]; + }); + + // Indexes the object's values by a criterion, similar to `_.groupBy`, but for + // when you know that your index values will be unique. + var indexBy = group(function(result, value, key) { + result[key] = value; + }); + + // Counts instances of an object that group by a certain criterion. Pass + // either a string attribute to count by, or a function that returns the + // criterion. + var countBy = group(function(result, value, key) { + if (has$1(result, key)) result[key]++; else result[key] = 1; + }); + + // Split a collection into two arrays: one whose elements all pass the given + // truth test, and one whose elements all do not pass the truth test. + var partition = group(function(result, value, pass) { + result[pass ? 0 : 1].push(value); + }, true); + + // Safely create a real, live array from anything iterable. + var reStrSymbol = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g; + function toArray(obj) { + if (!obj) return []; + if (isArray(obj)) return slice.call(obj); + if (isString(obj)) { + // Keep surrogate pair characters together. + return obj.match(reStrSymbol); + } + if (isArrayLike(obj)) return map(obj, identity); + return values(obj); + } + + // Return the number of elements in a collection. + function size(obj) { + if (obj == null) return 0; + return isArrayLike(obj) ? obj.length : keys(obj).length; + } + + // Internal `_.pick` helper function to determine whether `key` is an enumerable + // property name of `obj`. + function keyInObj(value, key, obj) { + return key in obj; + } + + // Return a copy of the object only containing the allowed properties. + var pick = restArguments(function(obj, keys) { + var result = {}, iteratee = keys[0]; + if (obj == null) return result; + if (isFunction$1(iteratee)) { + if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]); + keys = allKeys(obj); + } else { + iteratee = keyInObj; + keys = flatten$1(keys, false, false); + obj = Object(obj); + } + for (var i = 0, length = keys.length; i < length; i++) { + var key = keys[i]; + var value = obj[key]; + if (iteratee(value, key, obj)) result[key] = value; + } + return result; + }); + + // Return a copy of the object without the disallowed properties. + var omit = restArguments(function(obj, keys) { + var iteratee = keys[0], context; + if (isFunction$1(iteratee)) { + iteratee = negate(iteratee); + if (keys.length > 1) context = keys[1]; + } else { + keys = map(flatten$1(keys, false, false), String); + iteratee = function(value, key) { + return !contains(keys, key); + }; + } + return pick(obj, iteratee, context); + }); + + // Returns everything but the last entry of the array. Especially useful on + // the arguments object. Passing **n** will return all the values in + // the array, excluding the last N. + function initial(array, n, guard) { + return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n))); + } + + // Get the first element of an array. Passing **n** will return the first N + // values in the array. The **guard** check allows it to work with `_.map`. + function first(array, n, guard) { + if (array == null || array.length < 1) return n == null || guard ? void 0 : []; + if (n == null || guard) return array[0]; + return initial(array, array.length - n); + } + + // Returns everything but the first entry of the `array`. Especially useful on + // the `arguments` object. Passing an **n** will return the rest N values in the + // `array`. + function rest(array, n, guard) { + return slice.call(array, n == null || guard ? 1 : n); + } + + // Get the last element of an array. Passing **n** will return the last N + // values in the array. + function last(array, n, guard) { + if (array == null || array.length < 1) return n == null || guard ? void 0 : []; + if (n == null || guard) return array[array.length - 1]; + return rest(array, Math.max(0, array.length - n)); + } + + // Trim out all falsy values from an array. + function compact(array) { + return filter(array, Boolean); + } + + // Flatten out an array, either recursively (by default), or up to `depth`. + // Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. + function flatten(array, depth) { + return flatten$1(array, depth, false); + } + + // Take the difference between one array and a number of other arrays. + // Only the elements present in just the first array will remain. + var difference = restArguments(function(array, rest) { + rest = flatten$1(rest, true, true); + return filter(array, function(value){ + return !contains(rest, value); + }); + }); + + // Return a version of the array that does not contain the specified value(s). + var without = restArguments(function(array, otherArrays) { + return difference(array, otherArrays); + }); + + // Produce a duplicate-free version of the array. If the array has already + // been sorted, you have the option of using a faster algorithm. + // The faster algorithm will not work with an iteratee if the iteratee + // is not a one-to-one function, so providing an iteratee will disable + // the faster algorithm. + function uniq(array, isSorted, iteratee, context) { + if (!isBoolean(isSorted)) { + context = iteratee; + iteratee = isSorted; + isSorted = false; + } + if (iteratee != null) iteratee = cb(iteratee, context); + var result = []; + var seen = []; + for (var i = 0, length = getLength(array); i < length; i++) { + var value = array[i], + computed = iteratee ? iteratee(value, i, array) : value; + if (isSorted && !iteratee) { + if (!i || seen !== computed) result.push(value); + seen = computed; + } else if (iteratee) { + if (!contains(seen, computed)) { + seen.push(computed); + result.push(value); + } + } else if (!contains(result, value)) { + result.push(value); + } + } + return result; + } + + // Produce an array that contains the union: each distinct element from all of + // the passed-in arrays. + var union = restArguments(function(arrays) { + return uniq(flatten$1(arrays, true, true)); + }); + + // Produce an array that contains every item shared between all the + // passed-in arrays. + function intersection(array) { + var result = []; + var argsLength = arguments.length; + for (var i = 0, length = getLength(array); i < length; i++) { + var item = array[i]; + if (contains(result, item)) continue; + var j; + for (j = 1; j < argsLength; j++) { + if (!contains(arguments[j], item)) break; + } + if (j === argsLength) result.push(item); + } + return result; + } + + // Complement of zip. Unzip accepts an array of arrays and groups + // each array's elements on shared indices. + function unzip(array) { + var length = array && max(array, getLength).length || 0; + var result = Array(length); + + for (var index = 0; index < length; index++) { + result[index] = pluck(array, index); + } + return result; + } + + // Zip together multiple lists into a single array -- elements that share + // an index go together. + var zip = restArguments(unzip); + + // Converts lists into objects. Pass either a single array of `[key, value]` + // pairs, or two parallel arrays of the same length -- one of keys, and one of + // the corresponding values. Passing by pairs is the reverse of `_.pairs`. + function object(list, values) { + var result = {}; + for (var i = 0, length = getLength(list); i < length; i++) { + if (values) { + result[list[i]] = values[i]; + } else { + result[list[i][0]] = list[i][1]; + } + } + return result; + } + + // Generate an integer Array containing an arithmetic progression. A port of + // the native Python `range()` function. See + // [the Python documentation](https://docs.python.org/library/functions.html#range). + function range(start, stop, step) { + if (stop == null) { + stop = start || 0; + start = 0; + } + if (!step) { + step = stop < start ? -1 : 1; + } + + var length = Math.max(Math.ceil((stop - start) / step), 0); + var range = Array(length); + + for (var idx = 0; idx < length; idx++, start += step) { + range[idx] = start; + } + + return range; + } + + // Chunk a single array into multiple arrays, each containing `count` or fewer + // items. + function chunk(array, count) { + if (count == null || count < 1) return []; + var result = []; + var i = 0, length = array.length; + while (i < length) { + result.push(slice.call(array, i, i += count)); + } + return result; + } + + // Helper function to continue chaining intermediate results. + function chainResult(instance, obj) { + return instance._chain ? _$1(obj).chain() : obj; + } + + // Add your own custom functions to the Underscore object. + function mixin(obj) { + each(functions(obj), function(name) { + var func = _$1[name] = obj[name]; + _$1.prototype[name] = function() { + var args = [this._wrapped]; + push.apply(args, arguments); + return chainResult(this, func.apply(_$1, args)); + }; + }); + return _$1; + } + + // Add all mutator `Array` functions to the wrapper. + each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { + var method = ArrayProto[name]; + _$1.prototype[name] = function() { + var obj = this._wrapped; + if (obj != null) { + method.apply(obj, arguments); + if ((name === 'shift' || name === 'splice') && obj.length === 0) { + delete obj[0]; + } + } + return chainResult(this, obj); + }; + }); + + // Add all accessor `Array` functions to the wrapper. + each(['concat', 'join', 'slice'], function(name) { + var method = ArrayProto[name]; + _$1.prototype[name] = function() { + var obj = this._wrapped; + if (obj != null) obj = method.apply(obj, arguments); + return chainResult(this, obj); + }; + }); + + // Named Exports + + var allExports = { + __proto__: null, + VERSION: VERSION, + restArguments: restArguments, + isObject: isObject, + isNull: isNull, + isUndefined: isUndefined, + isBoolean: isBoolean, + isElement: isElement, + isString: isString, + isNumber: isNumber, + isDate: isDate, + isRegExp: isRegExp, + isError: isError, + isSymbol: isSymbol, + isArrayBuffer: isArrayBuffer, + isDataView: isDataView$1, + isArray: isArray, + isFunction: isFunction$1, + isArguments: isArguments$1, + isFinite: isFinite$1, + isNaN: isNaN$1, + isTypedArray: isTypedArray$1, + isEmpty: isEmpty, + isMatch: isMatch, + isEqual: isEqual, + isMap: isMap, + isWeakMap: isWeakMap, + isSet: isSet, + isWeakSet: isWeakSet, + keys: keys, + allKeys: allKeys, + values: values, + pairs: pairs, + invert: invert, + functions: functions, + methods: functions, + extend: extend, + extendOwn: extendOwn, + assign: extendOwn, + defaults: defaults, + create: create, + clone: clone, + tap: tap, + get: get, + has: has, + mapObject: mapObject, + identity: identity, + constant: constant, + noop: noop, + toPath: toPath$1, + property: property, + propertyOf: propertyOf, + matcher: matcher, + matches: matcher, + times: times, + random: random, + now: now, + escape: _escape, + unescape: _unescape, + templateSettings: templateSettings, + template: template, + result: result, + uniqueId: uniqueId, + chain: chain, + iteratee: iteratee, + partial: partial, + bind: bind, + bindAll: bindAll, + memoize: memoize, + delay: delay, + defer: defer, + throttle: throttle, + debounce: debounce, + wrap: wrap, + negate: negate, + compose: compose, + after: after, + before: before, + once: once, + findKey: findKey, + findIndex: findIndex, + findLastIndex: findLastIndex, + sortedIndex: sortedIndex, + indexOf: indexOf, + lastIndexOf: lastIndexOf, + find: find, + detect: find, + findWhere: findWhere, + each: each, + forEach: each, + map: map, + collect: map, + reduce: reduce, + foldl: reduce, + inject: reduce, + reduceRight: reduceRight, + foldr: reduceRight, + filter: filter, + select: filter, + reject: reject, + every: every, + all: every, + some: some, + any: some, + contains: contains, + includes: contains, + include: contains, + invoke: invoke, + pluck: pluck, + where: where, + max: max, + min: min, + shuffle: shuffle, + sample: sample, + sortBy: sortBy, + groupBy: groupBy, + indexBy: indexBy, + countBy: countBy, + partition: partition, + toArray: toArray, + size: size, + pick: pick, + omit: omit, + first: first, + head: first, + take: first, + initial: initial, + last: last, + rest: rest, + tail: rest, + drop: rest, + compact: compact, + flatten: flatten, + without: without, + uniq: uniq, + unique: uniq, + union: union, + intersection: intersection, + difference: difference, + unzip: unzip, + transpose: unzip, + zip: zip, + object: object, + range: range, + chunk: chunk, + mixin: mixin, + 'default': _$1 + }; + + // Default Export + + // Add all of the Underscore functions to the wrapper object. + var _ = mixin(allExports); + // Legacy Node.js API. + _._ = _; + + return _; + +}))); +//# sourceMappingURL=underscore-umd.js.map diff --git a/docs/_static/underscore.js b/docs/_static/underscore.js index 5b55f32b..cf177d42 100644 --- a/docs/_static/underscore.js +++ b/docs/_static/underscore.js @@ -1,31 +1,6 @@ -// Underscore.js 1.3.1 -// (c) 2009-2012 Jeremy Ashkenas, DocumentCloud Inc. -// Underscore is freely distributable under the MIT license. -// Portions of Underscore are inspired or borrowed from Prototype, -// Oliver Steele's Functional, and John Resig's Micro-Templating. -// For all details and documentation: -// http://documentcloud.github.com/underscore -(function(){function q(a,c,d){if(a===c)return a!==0||1/a==1/c;if(a==null||c==null)return a===c;if(a._chain)a=a._wrapped;if(c._chain)c=c._wrapped;if(a.isEqual&&b.isFunction(a.isEqual))return a.isEqual(c);if(c.isEqual&&b.isFunction(c.isEqual))return c.isEqual(a);var e=l.call(a);if(e!=l.call(c))return false;switch(e){case "[object String]":return a==String(c);case "[object Number]":return a!=+a?c!=+c:a==0?1/a==1/c:a==+c;case "[object Date]":case "[object Boolean]":return+a==+c;case "[object RegExp]":return a.source== -c.source&&a.global==c.global&&a.multiline==c.multiline&&a.ignoreCase==c.ignoreCase}if(typeof a!="object"||typeof c!="object")return false;for(var f=d.length;f--;)if(d[f]==a)return true;d.push(a);var f=0,g=true;if(e=="[object Array]"){if(f=a.length,g=f==c.length)for(;f--;)if(!(g=f in a==f in c&&q(a[f],c[f],d)))break}else{if("constructor"in a!="constructor"in c||a.constructor!=c.constructor)return false;for(var h in a)if(b.has(a,h)&&(f++,!(g=b.has(c,h)&&q(a[h],c[h],d))))break;if(g){for(h in c)if(b.has(c, -h)&&!f--)break;g=!f}}d.pop();return g}var r=this,G=r._,n={},k=Array.prototype,o=Object.prototype,i=k.slice,H=k.unshift,l=o.toString,I=o.hasOwnProperty,w=k.forEach,x=k.map,y=k.reduce,z=k.reduceRight,A=k.filter,B=k.every,C=k.some,p=k.indexOf,D=k.lastIndexOf,o=Array.isArray,J=Object.keys,s=Function.prototype.bind,b=function(a){return new m(a)};if(typeof exports!=="undefined"){if(typeof module!=="undefined"&&module.exports)exports=module.exports=b;exports._=b}else r._=b;b.VERSION="1.3.1";var j=b.each= -b.forEach=function(a,c,d){if(a!=null)if(w&&a.forEach===w)a.forEach(c,d);else if(a.length===+a.length)for(var e=0,f=a.length;e2;a== -null&&(a=[]);if(y&&a.reduce===y)return e&&(c=b.bind(c,e)),f?a.reduce(c,d):a.reduce(c);j(a,function(a,b,i){f?d=c.call(e,d,a,b,i):(d=a,f=true)});if(!f)throw new TypeError("Reduce of empty array with no initial value");return d};b.reduceRight=b.foldr=function(a,c,d,e){var f=arguments.length>2;a==null&&(a=[]);if(z&&a.reduceRight===z)return e&&(c=b.bind(c,e)),f?a.reduceRight(c,d):a.reduceRight(c);var g=b.toArray(a).reverse();e&&!f&&(c=b.bind(c,e));return f?b.reduce(g,c,d,e):b.reduce(g,c)};b.find=b.detect= -function(a,c,b){var e;E(a,function(a,g,h){if(c.call(b,a,g,h))return e=a,true});return e};b.filter=b.select=function(a,c,b){var e=[];if(a==null)return e;if(A&&a.filter===A)return a.filter(c,b);j(a,function(a,g,h){c.call(b,a,g,h)&&(e[e.length]=a)});return e};b.reject=function(a,c,b){var e=[];if(a==null)return e;j(a,function(a,g,h){c.call(b,a,g,h)||(e[e.length]=a)});return e};b.every=b.all=function(a,c,b){var e=true;if(a==null)return e;if(B&&a.every===B)return a.every(c,b);j(a,function(a,g,h){if(!(e= -e&&c.call(b,a,g,h)))return n});return e};var E=b.some=b.any=function(a,c,d){c||(c=b.identity);var e=false;if(a==null)return e;if(C&&a.some===C)return a.some(c,d);j(a,function(a,b,h){if(e||(e=c.call(d,a,b,h)))return n});return!!e};b.include=b.contains=function(a,c){var b=false;if(a==null)return b;return p&&a.indexOf===p?a.indexOf(c)!=-1:b=E(a,function(a){return a===c})};b.invoke=function(a,c){var d=i.call(arguments,2);return b.map(a,function(a){return(b.isFunction(c)?c||a:a[c]).apply(a,d)})};b.pluck= -function(a,c){return b.map(a,function(a){return a[c]})};b.max=function(a,c,d){if(!c&&b.isArray(a))return Math.max.apply(Math,a);if(!c&&b.isEmpty(a))return-Infinity;var e={computed:-Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b>=e.computed&&(e={value:a,computed:b})});return e.value};b.min=function(a,c,d){if(!c&&b.isArray(a))return Math.min.apply(Math,a);if(!c&&b.isEmpty(a))return Infinity;var e={computed:Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;bd?1:0}),"value")};b.groupBy=function(a,c){var d={},e=b.isFunction(c)?c:function(a){return a[c]};j(a,function(a,b){var c=e(a,b);(d[c]||(d[c]=[])).push(a)});return d};b.sortedIndex=function(a, -c,d){d||(d=b.identity);for(var e=0,f=a.length;e>1;d(a[g])=0})})};b.difference=function(a){var c=b.flatten(i.call(arguments,1));return b.filter(a,function(a){return!b.include(c,a)})};b.zip=function(){for(var a=i.call(arguments),c=b.max(b.pluck(a,"length")),d=Array(c),e=0;e=0;d--)b=[a[d].apply(this,b)];return b[0]}}; -b.after=function(a,b){return a<=0?b():function(){if(--a<1)return b.apply(this,arguments)}};b.keys=J||function(a){if(a!==Object(a))throw new TypeError("Invalid object");var c=[],d;for(d in a)b.has(a,d)&&(c[c.length]=d);return c};b.values=function(a){return b.map(a,b.identity)};b.functions=b.methods=function(a){var c=[],d;for(d in a)b.isFunction(a[d])&&c.push(d);return c.sort()};b.extend=function(a){j(i.call(arguments,1),function(b){for(var d in b)a[d]=b[d]});return a};b.defaults=function(a){j(i.call(arguments, -1),function(b){for(var d in b)a[d]==null&&(a[d]=b[d])});return a};b.clone=function(a){return!b.isObject(a)?a:b.isArray(a)?a.slice():b.extend({},a)};b.tap=function(a,b){b(a);return a};b.isEqual=function(a,b){return q(a,b,[])};b.isEmpty=function(a){if(b.isArray(a)||b.isString(a))return a.length===0;for(var c in a)if(b.has(a,c))return false;return true};b.isElement=function(a){return!!(a&&a.nodeType==1)};b.isArray=o||function(a){return l.call(a)=="[object Array]"};b.isObject=function(a){return a===Object(a)}; -b.isArguments=function(a){return l.call(a)=="[object Arguments]"};if(!b.isArguments(arguments))b.isArguments=function(a){return!(!a||!b.has(a,"callee"))};b.isFunction=function(a){return l.call(a)=="[object Function]"};b.isString=function(a){return l.call(a)=="[object String]"};b.isNumber=function(a){return l.call(a)=="[object Number]"};b.isNaN=function(a){return a!==a};b.isBoolean=function(a){return a===true||a===false||l.call(a)=="[object Boolean]"};b.isDate=function(a){return l.call(a)=="[object Date]"}; -b.isRegExp=function(a){return l.call(a)=="[object RegExp]"};b.isNull=function(a){return a===null};b.isUndefined=function(a){return a===void 0};b.has=function(a,b){return I.call(a,b)};b.noConflict=function(){r._=G;return this};b.identity=function(a){return a};b.times=function(a,b,d){for(var e=0;e/g,">").replace(/"/g,""").replace(/'/g,"'").replace(/\//g,"/")};b.mixin=function(a){j(b.functions(a), -function(c){K(c,b[c]=a[c])})};var L=0;b.uniqueId=function(a){var b=L++;return a?a+b:b};b.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var t=/.^/,u=function(a){return a.replace(/\\\\/g,"\\").replace(/\\'/g,"'")};b.template=function(a,c){var d=b.templateSettings,d="var __p=[],print=function(){__p.push.apply(__p,arguments);};with(obj||{}){__p.push('"+a.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(d.escape||t,function(a,b){return"',_.escape("+ -u(b)+"),'"}).replace(d.interpolate||t,function(a,b){return"',"+u(b)+",'"}).replace(d.evaluate||t,function(a,b){return"');"+u(b).replace(/[\r\n\t]/g," ")+";__p.push('"}).replace(/\r/g,"\\r").replace(/\n/g,"\\n").replace(/\t/g,"\\t")+"');}return __p.join('');",e=new Function("obj","_",d);return c?e(c,b):function(a){return e.call(this,a,b)}};b.chain=function(a){return b(a).chain()};var m=function(a){this._wrapped=a};b.prototype=m.prototype;var v=function(a,c){return c?b(a).chain():a},K=function(a,c){m.prototype[a]= -function(){var a=i.call(arguments);H.call(a,this._wrapped);return v(c.apply(b,a),this._chain)}};b.mixin(b);j("pop,push,reverse,shift,sort,splice,unshift".split(","),function(a){var b=k[a];m.prototype[a]=function(){var d=this._wrapped;b.apply(d,arguments);var e=d.length;(a=="shift"||a=="splice")&&e===0&&delete d[0];return v(d,this._chain)}});j(["concat","join","slice"],function(a){var b=k[a];m.prototype[a]=function(){return v(b.apply(this._wrapped,arguments),this._chain)}});m.prototype.chain=function(){this._chain= -true;return this};m.prototype.value=function(){return this._wrapped}}).call(this); +!function(n,r){"object"==typeof exports&&"undefined"!=typeof module?module.exports=r():"function"==typeof define&&define.amd?define("underscore",r):(n="undefined"!=typeof globalThis?globalThis:n||self,function(){var t=n._,e=n._=r();e.noConflict=function(){return n._=t,e}}())}(this,(function(){ +// Underscore.js 1.13.1 +// https://underscorejs.org +// (c) 2009-2021 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors +// Underscore may be freely distributed under the MIT license. +var n="1.13.1",r="object"==typeof self&&self.self===self&&self||"object"==typeof global&&global.global===global&&global||Function("return this")()||{},t=Array.prototype,e=Object.prototype,u="undefined"!=typeof Symbol?Symbol.prototype:null,o=t.push,i=t.slice,a=e.toString,f=e.hasOwnProperty,c="undefined"!=typeof ArrayBuffer,l="undefined"!=typeof DataView,s=Array.isArray,p=Object.keys,v=Object.create,h=c&&ArrayBuffer.isView,y=isNaN,d=isFinite,g=!{toString:null}.propertyIsEnumerable("toString"),b=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"],m=Math.pow(2,53)-1;function j(n,r){return r=null==r?n.length-1:+r,function(){for(var t=Math.max(arguments.length-r,0),e=Array(t),u=0;u=0&&t<=m}}function J(n){return function(r){return null==r?void 0:r[n]}}var G=J("byteLength"),H=K(G),Q=/\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/;var X=c?function(n){return h?h(n)&&!q(n):H(n)&&Q.test(a.call(n))}:C(!1),Y=J("length");function Z(n,r){r=function(n){for(var r={},t=n.length,e=0;e":">",'"':""","'":"'","`":"`"},Cn=Ln($n),Kn=Ln(_n($n)),Jn=tn.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g},Gn=/(.)^/,Hn={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},Qn=/\\|'|\r|\n|\u2028|\u2029/g;function Xn(n){return"\\"+Hn[n]}var Yn=/^\s*(\w|\$)+\s*$/;var Zn=0;function nr(n,r,t,e,u){if(!(e instanceof r))return n.apply(t,u);var o=Mn(n.prototype),i=n.apply(o,u);return _(i)?i:o}var rr=j((function(n,r){var t=rr.placeholder,e=function(){for(var u=0,o=r.length,i=Array(o),a=0;a1)ur(a,r-1,t,e),u=e.length;else for(var f=0,c=a.length;f0&&(t=r.apply(this,arguments)),n<=1&&(r=null),t}}var lr=rr(cr,2);function sr(n,r,t){r=qn(r,t);for(var e,u=nn(n),o=0,i=u.length;o0?0:u-1;o>=0&&o0?a=o>=0?o:Math.max(o+f,a):f=o>=0?Math.min(o+1,f):o+f+1;else if(t&&o&&f)return e[o=t(e,u)]===u?o:-1;if(u!=u)return(o=r(i.call(e,a,f),$))>=0?o+a:-1;for(o=n>0?a:f-1;o>=0&&o0?0:i-1;for(u||(e=r[o?o[a]:a],a+=n);a>=0&&a=3;return r(n,Fn(t,u,4),e,o)}}var Ar=wr(1),xr=wr(-1);function Sr(n,r,t){var e=[];return r=qn(r,t),jr(n,(function(n,t,u){r(n,t,u)&&e.push(n)})),e}function Or(n,r,t){r=qn(r,t);for(var e=!er(n)&&nn(n),u=(e||n).length,o=0;o=0}var Br=j((function(n,r,t){var e,u;return D(r)?u=r:(r=Nn(r),e=r.slice(0,-1),r=r[r.length-1]),_r(n,(function(n){var o=u;if(!o){if(e&&e.length&&(n=In(n,e)),null==n)return;o=n[r]}return null==o?o:o.apply(n,t)}))}));function Nr(n,r){return _r(n,Rn(r))}function Ir(n,r,t){var e,u,o=-1/0,i=-1/0;if(null==r||"number"==typeof r&&"object"!=typeof n[0]&&null!=n)for(var a=0,f=(n=er(n)?n:jn(n)).length;ao&&(o=e);else r=qn(r,t),jr(n,(function(n,t,e){((u=r(n,t,e))>i||u===-1/0&&o===-1/0)&&(o=n,i=u)}));return o}function Tr(n,r,t){if(null==r||t)return er(n)||(n=jn(n)),n[Wn(n.length-1)];var e=er(n)?En(n):jn(n),u=Y(e);r=Math.max(Math.min(r,u),0);for(var o=u-1,i=0;i1&&(e=Fn(e,r[1])),r=an(n)):(e=qr,r=ur(r,!1,!1),n=Object(n));for(var u=0,o=r.length;u1&&(t=r[1])):(r=_r(ur(r,!1,!1),String),e=function(n,t){return!Er(r,t)}),Ur(n,e,t)}));function zr(n,r,t){return i.call(n,0,Math.max(0,n.length-(null==r||t?1:r)))}function Lr(n,r,t){return null==n||n.length<1?null==r||t?void 0:[]:null==r||t?n[0]:zr(n,n.length-r)}function $r(n,r,t){return i.call(n,null==r||t?1:r)}var Cr=j((function(n,r){return r=ur(r,!0,!0),Sr(n,(function(n){return!Er(r,n)}))})),Kr=j((function(n,r){return Cr(n,r)}));function Jr(n,r,t,e){A(r)||(e=t,t=r,r=!1),null!=t&&(t=qn(t,e));for(var u=[],o=[],i=0,a=Y(n);ir?(e&&(clearTimeout(e),e=null),a=c,i=n.apply(u,o),e||(u=o=null)):e||!1===t.trailing||(e=setTimeout(f,l)),i};return c.cancel=function(){clearTimeout(e),a=0,e=u=o=null},c},debounce:function(n,r,t){var e,u,o,i,a,f=function(){var c=zn()-u;r>c?e=setTimeout(f,r-c):(e=null,t||(i=n.apply(a,o)),e||(o=a=null))},c=j((function(c){return a=this,o=c,u=zn(),e||(e=setTimeout(f,r),t&&(i=n.apply(a,o))),i}));return c.cancel=function(){clearTimeout(e),e=o=a=null},c},wrap:function(n,r){return rr(r,n)},negate:fr,compose:function(){var n=arguments,r=n.length-1;return function(){for(var t=r,e=n[r].apply(this,arguments);t--;)e=n[t].call(this,e);return e}},after:function(n,r){return function(){if(--n<1)return r.apply(this,arguments)}},before:cr,once:lr,findKey:sr,findIndex:vr,findLastIndex:hr,sortedIndex:yr,indexOf:gr,lastIndexOf:br,find:mr,detect:mr,findWhere:function(n,r){return mr(n,Dn(r))},each:jr,forEach:jr,map:_r,collect:_r,reduce:Ar,foldl:Ar,inject:Ar,reduceRight:xr,foldr:xr,filter:Sr,select:Sr,reject:function(n,r,t){return Sr(n,fr(qn(r)),t)},every:Or,all:Or,some:Mr,any:Mr,contains:Er,includes:Er,include:Er,invoke:Br,pluck:Nr,where:function(n,r){return Sr(n,Dn(r))},max:Ir,min:function(n,r,t){var e,u,o=1/0,i=1/0;if(null==r||"number"==typeof r&&"object"!=typeof n[0]&&null!=n)for(var a=0,f=(n=er(n)?n:jn(n)).length;ae||void 0===t)return 1;if(t - - - - - dice_ml.data_interfaces package — DiCE 0.7 documentation - - - - - - - - - - + - + + dice_ml.data_interfaces package — DiCE 0.8 documentation + + - - + - - - - - - - + - - - +
    - -
    - - -
    -
    -

    dice_ml.data_interfaces.public_data_interface module

    + +
    +

    dice_ml.data_interfaces.public_data_interface module

    Module containing all required information about the interface between raw (or transformed) public data and DiCE explainers.

    -
    -class dice_ml.data_interfaces.public_data_interface.PublicData(params)[source]
    +
    +class dice_ml.data_interfaces.public_data_interface.PublicData(params)[source]

    Bases: dice_ml.data_interfaces.base_data_interface._BaseData

    A data interface for public data. This class is an interface to DiCE explainers and contains methods to transform user-fed raw data into the format a DiCE explainer requires, and vice versa.

    -
    -check_features_to_vary(features_to_vary)[source]
    +
    +check_features_to_vary(features_to_vary)[source]
    -
    -check_mad_validity(feature_weights)[source]
    +
    +check_mad_validity(feature_weights)[source]

    checks feature MAD validity and throw warnings. TODO: add comments as to where this is used if this function is necessary, else remove.

    -
    -check_permitted_range(permitted_range)[source]
    +
    +check_permitted_range(permitted_range)[source]
    -
    -create_ohe_params()[source]
    +
    +create_ohe_params()[source]
    -
    -de_normalize_data(df)[source]
    +
    +de_normalize_data(df)[source]

    De-normalizes continuous features from [0,1] range to original range.

    -
    -from_dummies(data, prefix_sep='_')[source]
    +
    +from_dummies(data, prefix_sep='_')[source]

    Gets the original data from dummy encoded data with k levels.

    -
    -from_label(data)[source]
    +
    +from_label(data)[source]

    Transforms label encoded data back to categorical values

    -
    -get_data_params_for_gradient_dice()[source]
    +
    +get_data_params_for_gradient_dice()[source]

    Gets all data related params for DiCE.

    -
    -get_data_type(col)[source]
    +
    +get_data_type(col)[source]

    Infers data type of a continuous feature from the training data.

    -
    -get_decimal_precisions(output_type='list')[source]
    +
    +get_decimal_precisions(output_type='list')[source]

    “Gets the precision of continuous features in the data.

    -
    -get_decoded_data(data, encoding='one-hot')[source]
    +
    +get_decoded_data(data, encoding='one-hot')[source]

    Gets the original data from encoded data.

    -
    -get_encoded_categorical_feature_indexes()[source]
    +
    +get_encoded_categorical_feature_indexes()[source]

    Gets the column indexes categorical features after one-hot-encoding.

    -
    -get_features_range(permitted_range_input=None)[source]
    +
    +get_features_range(permitted_range_input=None)[source]
    -
    -get_indexes_of_features_to_vary(features_to_vary='all')[source]
    +
    +get_indexes_of_features_to_vary(features_to_vary='all')[source]

    Gets indexes from feature names of one-hot-encoded data.

    -
    -get_inverse_ohe_min_max_normalized_data(transformed_data)[source]
    +
    +get_inverse_ohe_min_max_normalized_data(transformed_data)[source]

    Transforms one-hot-encoded and min-max normalized data into raw user-fed data format. transformed_data should be a dataframe or an array

    -
    -get_mads(normalized=False)[source]
    +
    +get_mads(normalized=False)[source]

    Computes Median Absolute Deviation of features.

    -
    -get_minx_maxx(normalized=True)[source]
    +
    +get_minx_maxx(normalized=True)[source]

    Gets the min/max value of features in normalized or de-normalized form.

    -
    -get_ohe_min_max_normalized_data(query_instance)[source]
    +
    +get_ohe_min_max_normalized_data(query_instance)[source]

    Transforms query_instance into one-hot-encoded and min-max normalized data. query_instance should be a dict, a dataframe, a list, or a list of dicts

    -
    -get_quantiles_from_training_data(quantile=0.05, normalized=False)[source]
    +
    +get_quantiles_from_training_data(quantile=0.05, normalized=False)[source]

    Computes required quantile of Absolute Deviations of features.

    -
    -get_valid_feature_range(feature_range_input, normalized=True)[source]
    +
    +get_valid_feature_range(feature_range_input, normalized=True)[source]

    Gets the min/max value of features in normalized or de-normalized form. Assumes that all features are already encoded to numerical form such that the number of features remains the same.

    @@ -487,97 +397,72 @@

    Submodules -
    -get_valid_mads(normalized=False, display_warnings=False, return_mads=True)[source]
    +
    +get_valid_mads(normalized=False, display_warnings=False, return_mads=True)[source]

    Computes Median Absolute Deviation of features. If they are <=0, returns a practical value instead

    -
    -normalize_data(df)[source]
    +
    +normalize_data(df)[source]

    Normalizes continuous features to make them fall in the range [0,1].

    -
    -one_hot_encode_data(data)[source]
    +
    +one_hot_encode_data(data)[source]

    One-hot-encodes the data.

    -
    -prepare_df_for_ohe_encoding()[source]
    +
    +prepare_df_for_ohe_encoding()[source]

    Create base dataframe to do OHE for a single instance or a set of instances

    -
    -prepare_query_instance(query_instance)[source]
    +
    +prepare_query_instance(query_instance)[source]

    Prepares user defined test input(s) for DiCE.

    -
    -
    -

    Module contents

    -
    - + +
    +

    Module contents

    +
    + - - - - - - - - - - - - + \ No newline at end of file diff --git a/docs/dice_ml.explainer_interfaces.html b/docs/dice_ml.explainer_interfaces.html index 0205b3a7..7dfb634e 100644 --- a/docs/dice_ml.explainer_interfaces.html +++ b/docs/dice_ml.explainer_interfaces.html @@ -1,71 +1,35 @@ - - - - - - - dice_ml.explainer_interfaces package — DiCE 0.7 documentation - - - - - - - - - - + - + + dice_ml.explainer_interfaces package — DiCE 0.8 documentation + + - - + - - - - - - - + - - - +
    - -
    - - -
    -
    -

    dice_ml.explainer_interfaces.dice_pytorch module

    + +
    +

    dice_ml.explainer_interfaces.dice_pytorch module

    Module to generate diverse counterfactual explanations based on PyTorch framework

    -
    -class dice_ml.explainer_interfaces.dice_pytorch.DicePyTorch(data_interface, model_interface)[source]
    +
    +class dice_ml.explainer_interfaces.dice_pytorch.DicePyTorch(data_interface, model_interface)[source]

    Bases: dice_ml.explainer_interfaces.explainer_base.ExplainerBase

    -
    -compute_dist(x_hat, x1)[source]
    +
    +compute_dist(x_hat, x1)[source]

    Compute weighted distance between two vectors.

    -
    -compute_diversity_loss()[source]
    +
    +compute_diversity_loss()[source]

    Computes the third part (diversity) of the loss function.

    -
    -compute_loss()[source]
    +
    +compute_loss()[source]

    Computes the overall loss

    -
    -compute_proximity_loss()[source]
    +
    +compute_proximity_loss()[source]

    Compute the second part (distance from x1) of the loss function.

    -
    -compute_regularization_loss()[source]
    +
    +compute_regularization_loss()[source]

    Adds a linear equality constraints to the loss functions - to ensure all levels of a categorical variable sums to one

    -
    -compute_yloss()[source]
    +
    +compute_yloss()[source]

    Computes the first part (y-loss) of the loss function.

    -
    -do_cf_initializations(total_CFs, algorithm, features_to_vary)[source]
    +
    +do_cf_initializations(total_CFs, algorithm, features_to_vary)[source]

    Intializes CFs and other related variables.

    -
    -do_loss_initializations(yloss_type, diversity_loss_type, feature_weights)[source]
    +
    +do_loss_initializations(yloss_type, diversity_loss_type, feature_weights)[source]

    Intializes variables related to main loss function

    -
    -do_optimizer_initializations(optimizer, learning_rate)[source]
    +
    +do_optimizer_initializations(optimizer, learning_rate)[source]

    Initializes gradient-based PyTorch optimizers.

    -
    -dpp_style(submethod)[source]
    +
    +dpp_style(submethod)[source]

    Computes the DPP of a matrix.

    -
    -find_counterfactuals(query_instance, desired_class, optimizer, learning_rate, min_iter, max_iter, project_iter, loss_diff_thres, loss_converge_maxiter, verbose, init_near_query_instance, tie_random, stopping_threshold, posthoc_sparsity_param, posthoc_sparsity_algorithm)[source]
    +
    +find_counterfactuals(query_instance, desired_class, optimizer, learning_rate, min_iter, max_iter, project_iter, loss_diff_thres, loss_converge_maxiter, verbose, init_near_query_instance, tie_random, stopping_threshold, posthoc_sparsity_param, posthoc_sparsity_algorithm)[source]

    Finds counterfactuals by gradient-descent.

    -
    -generate_counterfactuals(query_instance, total_CFs, desired_class='opposite', proximity_weight=0.5, diversity_weight=1.0, categorical_penalty=0.1, algorithm='DiverseCF', features_to_vary='all', permitted_range=None, yloss_type='hinge_loss', diversity_loss_type='dpp_style:inverse_dist', feature_weights='inverse_mad', optimizer='pytorch:adam', learning_rate=0.05, min_iter=500, max_iter=5000, project_iter=0, loss_diff_thres=1e-05, loss_converge_maxiter=1, verbose=False, init_near_query_instance=True, tie_random=False, stopping_threshold=0.5, posthoc_sparsity_param=0.1, posthoc_sparsity_algorithm='linear')[source]
    +
    +generate_counterfactuals(query_instance, total_CFs, desired_class='opposite', proximity_weight=0.5, diversity_weight=1.0, categorical_penalty=0.1, algorithm='DiverseCF', features_to_vary='all', permitted_range=None, yloss_type='hinge_loss', diversity_loss_type='dpp_style:inverse_dist', feature_weights='inverse_mad', optimizer='pytorch:adam', learning_rate=0.05, min_iter=500, max_iter=5000, project_iter=0, loss_diff_thres=1e-05, loss_converge_maxiter=1, verbose=False, init_near_query_instance=True, tie_random=False, stopping_threshold=0.5, posthoc_sparsity_param=0.1, posthoc_sparsity_algorithm='linear')[source]

    Generates diverse counterfactual explanations.

    Parameters
    @@ -511,142 +424,142 @@

    Submodules -
    -get_model_output(input_instance)[source]
    +
    +get_model_output(input_instance)[source]

    get output probability of ML model

    -
    -initialize_CFs(query_instance, init_near_query_instance=False)[source]
    +
    +initialize_CFs(query_instance, init_near_query_instance=False)[source]

    Initialize counterfactuals.

    -
    -predict_fn(input_instance)[source]
    +
    +predict_fn(input_instance)[source]

    prediction function

    -
    -predict_fn_for_sparsity(input_instance)[source]
    +
    +predict_fn_for_sparsity(input_instance)[source]

    prediction function for sparsity correction

    -
    -round_off_cfs(assign=False)[source]
    +
    +round_off_cfs(assign=False)[source]

    function for intermediate projection of CFs.

    -
    -stop_loop(itr, loss_diff)[source]
    +
    +stop_loop(itr, loss_diff)[source]

    Determines the stopping condition for gradient descent.

    -
    -update_hyperparameters(proximity_weight, diversity_weight, categorical_penalty)[source]
    +
    +update_hyperparameters(proximity_weight, diversity_weight, categorical_penalty)[source]

    Update hyperparameters of the loss function

    -
    -
    -

    dice_ml.explainer_interfaces.dice_random module

    + +
    +

    dice_ml.explainer_interfaces.dice_random module

    Module to generate diverse counterfactual explanations based on random sampling. A simple implementation.

    -
    -class dice_ml.explainer_interfaces.dice_random.DiceRandom(data_interface, model_interface)[source]
    +
    +class dice_ml.explainer_interfaces.dice_random.DiceRandom(data_interface, model_interface)[source]

    Bases: dice_ml.explainer_interfaces.explainer_base.ExplainerBase

    -
    -get_continuous_samples(low, high, precision, size=1000, seed=None)[source]
    +
    +get_continuous_samples(low, high, precision, size=1000, seed=None)[source]
    -
    -get_samples(fixed_features_values, feature_range, sampling_random_seed, sampling_size)[source]
    +
    +get_samples(fixed_features_values, feature_range, sampling_random_seed, sampling_size)[source]
    -
    -
    -

    dice_ml.explainer_interfaces.dice_tensorflow1 module

    + +
    +

    dice_ml.explainer_interfaces.dice_tensorflow1 module

    Module to generate diverse counterfactual explanations based on tensorflow 1.x

    -
    -class dice_ml.explainer_interfaces.dice_tensorflow1.DiceTensorFlow1(data_interface, model_interface)[source]
    +
    +class dice_ml.explainer_interfaces.dice_tensorflow1.DiceTensorFlow1(data_interface, model_interface)[source]

    Bases: dice_ml.explainer_interfaces.explainer_base.ExplainerBase

    -
    -compute_dist(x_hat, x1)[source]
    +
    +compute_dist(x_hat, x1)[source]

    Compute weighted distance between two vectors.

    -
    -compute_diversity_loss(method)[source]
    +
    +compute_diversity_loss(method)[source]

    Computes the third part (diversity) of the loss function.

    -
    -compute_proximity_loss()[source]
    +
    +compute_proximity_loss()[source]

    Compute the second part (distance from x1) of the loss function.

    -
    -compute_regularization_loss()[source]
    +
    +compute_regularization_loss()[source]

    Adds a linear equality constraints to the loss functions - to ensure all levels of a categorical variable sums to one

    -
    -compute_yloss(method)[source]
    +
    +compute_yloss(method)[source]

    Computes the first part (y-loss) of the loss function.

    -
    -do_cf_initializations(total_CFs, algorithm, features_to_vary)[source]
    +
    +do_cf_initializations(total_CFs, algorithm, features_to_vary)[source]

    Intializes TF variables required for CF generation.

    -
    -do_loss_initializations(yloss_type='hinge_loss', diversity_loss_type='dpp_style:inverse_dist', feature_weights='inverse_mad')[source]
    +
    +do_loss_initializations(yloss_type='hinge_loss', diversity_loss_type='dpp_style:inverse_dist', feature_weights='inverse_mad')[source]

    Defines the optimization loss

    -
    -do_optimizer_initializations(optimizer)[source]
    +
    +do_optimizer_initializations(optimizer)[source]

    Initializes gradient-based TF optimizers.

    -
    -dpp_style(submethod)[source]
    +
    +dpp_style(submethod)[source]

    Computes the DPP of a matrix.

    -
    -find_counterfactuals(query_instance, desired_class='opposite', learning_rate=0.05, min_iter=500, max_iter=5000, project_iter=0, loss_diff_thres=1e-05, loss_converge_maxiter=1, verbose=False, init_near_query_instance=False, tie_random=False, stopping_threshold=0.5, posthoc_sparsity_param=0.1, posthoc_sparsity_algorithm='linear')[source]
    +
    +find_counterfactuals(query_instance, desired_class='opposite', learning_rate=0.05, min_iter=500, max_iter=5000, project_iter=0, loss_diff_thres=1e-05, loss_converge_maxiter=1, verbose=False, init_near_query_instance=False, tie_random=False, stopping_threshold=0.5, posthoc_sparsity_param=0.1, posthoc_sparsity_algorithm='linear')[source]

    Finds counterfactuals by gradient-descent.

    -
    -generate_counterfactuals(query_instance, total_CFs, desired_class='opposite', proximity_weight=0.5, diversity_weight=1.0, categorical_penalty=0.1, algorithm='DiverseCF', features_to_vary='all', permitted_range=None, yloss_type='hinge_loss', diversity_loss_type='dpp_style:inverse_dist', feature_weights='inverse_mad', optimizer='tensorflow:adam', learning_rate=0.05, min_iter=500, max_iter=5000, project_iter=0, loss_diff_thres=1e-05, loss_converge_maxiter=1, verbose=False, init_near_query_instance=True, tie_random=False, stopping_threshold=0.5, posthoc_sparsity_param=0.1, posthoc_sparsity_algorithm='linear')[source]
    +
    +generate_counterfactuals(query_instance, total_CFs, desired_class='opposite', proximity_weight=0.5, diversity_weight=1.0, categorical_penalty=0.1, algorithm='DiverseCF', features_to_vary='all', permitted_range=None, yloss_type='hinge_loss', diversity_loss_type='dpp_style:inverse_dist', feature_weights='inverse_mad', optimizer='tensorflow:adam', learning_rate=0.05, min_iter=500, max_iter=5000, project_iter=0, loss_diff_thres=1e-05, loss_converge_maxiter=1, verbose=False, init_near_query_instance=True, tie_random=False, stopping_threshold=0.5, posthoc_sparsity_param=0.1, posthoc_sparsity_algorithm='linear')[source]

    Generates diverse counterfactual explanations

    Parameters
    @@ -699,132 +612,132 @@

    Submodules -
    -initialize_CFs(query_instance, init_near_query_instance=False)[source]
    +
    +initialize_CFs(query_instance, init_near_query_instance=False)[source]

    Initialize counterfactuals.

    -
    -predict_fn(input_instance)[source]
    +
    +predict_fn(input_instance)[source]

    prediction function

    -
    -predict_fn_for_sparsity(input_instance)[source]
    +
    +predict_fn_for_sparsity(input_instance)[source]

    prediction function for sparsity correction

    -
    -round_off_cfs(assign=False)[source]
    +
    +round_off_cfs(assign=False)[source]

    function for intermediate projection of CFs.

    -
    -scipy_optimizers(method='Nelder-Mead')[source]
    +
    +scipy_optimizers(method='Nelder-Mead')[source]
    -
    -stop_loop(itr, loss_diff)[source]
    +
    +stop_loop(itr, loss_diff)[source]

    Determines the stopping condition for gradient descent.

    -
    -tensorflow_optimizers(method='adam')[source]
    +
    +tensorflow_optimizers(method='adam')[source]

    Initializes tensorflow optimizers.

    -
    -update_hyperparameters(proximity_weight=0.5, diversity_weight=0.5, categorical_penalty=0.1)[source]
    +
    +update_hyperparameters(proximity_weight=0.5, diversity_weight=0.5, categorical_penalty=0.1)[source]

    Updates hyperparameters.

    -
    -
    -

    dice_ml.explainer_interfaces.dice_tensorflow2 module

    + +
    +

    dice_ml.explainer_interfaces.dice_tensorflow2 module

    Module to generate diverse counterfactual explanations based on tensorflow 2.x

    -
    -class dice_ml.explainer_interfaces.dice_tensorflow2.DiceTensorFlow2(data_interface, model_interface)[source]
    +
    +class dice_ml.explainer_interfaces.dice_tensorflow2.DiceTensorFlow2(data_interface, model_interface)[source]

    Bases: dice_ml.explainer_interfaces.explainer_base.ExplainerBase

    -
    -compute_dist(x_hat, x1)[source]
    +
    +compute_dist(x_hat, x1)[source]

    Compute weighted distance between two vectors.

    -
    -compute_diversity_loss()[source]
    +
    +compute_diversity_loss()[source]

    Computes the third part (diversity) of the loss function.

    -
    -compute_loss()[source]
    +
    +compute_loss()[source]

    Computes the overall loss

    -
    -compute_proximity_loss()[source]
    +
    +compute_proximity_loss()[source]

    Compute the second part (distance from x1) of the loss function.

    -
    -compute_regularization_loss()[source]
    +
    +compute_regularization_loss()[source]

    Adds a linear equality constraints to the loss functions - to ensure all levels of a categorical variable sums to one

    -
    -compute_yloss()[source]
    +
    +compute_yloss()[source]

    Computes the first part (y-loss) of the loss function.

    -
    -do_cf_initializations(total_CFs, algorithm, features_to_vary)[source]
    +
    +do_cf_initializations(total_CFs, algorithm, features_to_vary)[source]

    Intializes CFs and other related variables.

    -
    -do_loss_initializations(yloss_type, diversity_loss_type, feature_weights)[source]
    +
    +do_loss_initializations(yloss_type, diversity_loss_type, feature_weights)[source]

    Intializes variables related to main loss function

    -
    -do_optimizer_initializations(optimizer, learning_rate)[source]
    +
    +do_optimizer_initializations(optimizer, learning_rate)[source]

    Initializes gradient-based TensorFLow optimizers.

    -
    -dpp_style(submethod)[source]
    +
    +dpp_style(submethod)[source]

    Computes the DPP of a matrix.

    -
    -find_counterfactuals(query_instance, desired_class, optimizer, learning_rate, min_iter, max_iter, project_iter, loss_diff_thres, loss_converge_maxiter, verbose, init_near_query_instance, tie_random, stopping_threshold, posthoc_sparsity_param, posthoc_sparsity_algorithm)[source]
    +
    +find_counterfactuals(query_instance, desired_class, optimizer, learning_rate, min_iter, max_iter, project_iter, loss_diff_thres, loss_converge_maxiter, verbose, init_near_query_instance, tie_random, stopping_threshold, posthoc_sparsity_param, posthoc_sparsity_algorithm)[source]

    Finds counterfactuals by gradient-descent.

    -
    -generate_counterfactuals(query_instance, total_CFs, desired_class='opposite', proximity_weight=0.5, diversity_weight=1.0, categorical_penalty=0.1, algorithm='DiverseCF', features_to_vary='all', permitted_range=None, yloss_type='hinge_loss', diversity_loss_type='dpp_style:inverse_dist', feature_weights='inverse_mad', optimizer='tensorflow:adam', learning_rate=0.05, min_iter=500, max_iter=5000, project_iter=0, loss_diff_thres=1e-05, loss_converge_maxiter=1, verbose=False, init_near_query_instance=True, tie_random=False, stopping_threshold=0.5, posthoc_sparsity_param=0.1, posthoc_sparsity_algorithm='linear')[source]
    +
    +generate_counterfactuals(query_instance, total_CFs, desired_class='opposite', proximity_weight=0.5, diversity_weight=1.0, categorical_penalty=0.1, algorithm='DiverseCF', features_to_vary='all', permitted_range=None, yloss_type='hinge_loss', diversity_loss_type='dpp_style:inverse_dist', feature_weights='inverse_mad', optimizer='tensorflow:adam', learning_rate=0.05, min_iter=500, max_iter=5000, project_iter=0, loss_diff_thres=1e-05, loss_converge_maxiter=1, verbose=False, init_near_query_instance=True, tie_random=False, stopping_threshold=0.5, posthoc_sparsity_param=0.1, posthoc_sparsity_algorithm='linear')[source]

    Generates diverse counterfactual explanations

    Parameters
    @@ -877,92 +790,98 @@

    Submodules -
    -initialize_CFs(query_instance, init_near_query_instance=False)[source]
    +
    +initialize_CFs(query_instance, init_near_query_instance=False)[source]

    Initialize counterfactuals.

    -
    -predict_fn(input_instance)[source]
    +
    +predict_fn(input_instance)[source]

    prediction function

    -
    -predict_fn_for_sparsity(input_instance)[source]
    +
    +predict_fn_for_sparsity(input_instance)[source]

    prediction function for sparsity correction

    -
    -round_off_cfs(assign=False)[source]
    +
    +round_off_cfs(assign=False)[source]

    function for intermediate projection of CFs.

    -
    -stop_loop(itr, loss_diff)[source]
    +
    +stop_loop(itr, loss_diff)[source]

    Determines the stopping condition for gradient descent.

    -
    -update_hyperparameters(proximity_weight, diversity_weight, categorical_penalty)[source]
    +
    +update_hyperparameters(proximity_weight, diversity_weight, categorical_penalty)[source]

    Update hyperparameters of the loss function

    -
    -
    -

    dice_ml.explainer_interfaces.explainer_base module

    + +
    +

    dice_ml.explainer_interfaces.explainer_base module

    Module containing a template class to generate counterfactual explanations. Subclasses implement interfaces for different ML frameworks such as TensorFlow or PyTorch. All methods are in dice_ml.explainer_interfaces

    -
    -class dice_ml.explainer_interfaces.explainer_base.ExplainerBase(data_interface, model_interface=None)[source]
    +
    +class dice_ml.explainer_interfaces.explainer_base.ExplainerBase(data_interface, model_interface=None)[source]

    Bases: abc.ABC

    -
    -build_KD_tree(data_df_copy, desired_range, desired_class, predicted_outcome_name)[source]
    +
    +build_KD_tree(data_df_copy, desired_range, desired_class, predicted_outcome_name)[source]
    -
    -check_permitted_range(permitted_range)[source]
    +
    +check_permitted_range(permitted_range)[source]

    checks permitted range for continuous features TODO: add comments as to where this is used if this function is necessary, else remove.

    -
    -check_query_instance_validity(features_to_vary, permitted_range, query_instance, feature_ranges_orig)[source]
    +
    +check_query_instance_validity(features_to_vary, permitted_range, query_instance, feature_ranges_orig)[source]
    -
    -decide_cf_validity(model_outputs)[source]
    +
    +decide_cf_validity(model_outputs)[source]
    - +
    +static deserialize_explainer(path)[source]
    +

    Reload the explainer into the memory by reading the file specified by path.

    +
    + +
    +

    Performs a binary search between continuous features of a CF and corresponding values in query_instance until the prediction class changes.

    - +

    Performs a greedy linear search - moves the continuous features in CFs towards original values in query_instance greedily until the prediction class changes.

    -
    -do_posthoc_sparsity_enhancement(final_cfs_sparse, query_instance, posthoc_sparsity_param, posthoc_sparsity_algorithm)[source]
    +
    +do_posthoc_sparsity_enhancement(final_cfs_sparse, query_instance, posthoc_sparsity_param, posthoc_sparsity_algorithm)[source]

    Post-hoc method to encourage sparsity in a generated counterfactuals.

    Parameters
    @@ -981,8 +900,8 @@

    Submodules -
    -feature_importance(query_instances, cf_examples_list=None, total_CFs=10, local_importance=True, global_importance=True, desired_class='opposite', desired_range=None, permitted_range=None, features_to_vary='all', stopping_threshold=0.5, posthoc_sparsity_param=0.1, posthoc_sparsity_algorithm='linear', **kwargs)[source]
    +
    +feature_importance(query_instances, cf_examples_list=None, total_CFs=10, local_importance=True, global_importance=True, desired_class='opposite', desired_range=None, permitted_range=None, features_to_vary='all', stopping_threshold=0.5, posthoc_sparsity_param=0.1, posthoc_sparsity_algorithm='linear', **kwargs)[source]

    Estimate feature importance scores for the given inputs.

    Parameters
    @@ -1006,8 +925,8 @@

    Submodules -
    -generate_counterfactuals(query_instances, total_CFs, desired_class='opposite', desired_range=None, permitted_range=None, features_to_vary='all', stopping_threshold=0.5, posthoc_sparsity_param=0.1, posthoc_sparsity_algorithm='linear', verbose=False, **kwargs)[source]
    +
    +generate_counterfactuals(query_instances, total_CFs, desired_class='opposite', desired_range=None, permitted_range=None, features_to_vary='all', stopping_threshold=0.5, posthoc_sparsity_param=0.1, proximity_weight=0.2, sparsity_weight=0.2, diversity_weight=5.0, categorical_penalty=0.1, posthoc_sparsity_algorithm='linear', verbose=False, **kwargs)[source]

    General method for generating counterfactuals.

    Parameters
    @@ -1018,12 +937,22 @@

    Submodules -
    -get_model_output_from_scores(model_scores)[source]
    +
    +get_model_output_from_scores(model_scores)[source]

    -
    -global_feature_importance(query_instances, cf_examples_list=None, total_CFs=10, local_importance=True, desired_class='opposite', desired_range=None, permitted_range=None, features_to_vary='all', stopping_threshold=0.5, posthoc_sparsity_param=0.1, posthoc_sparsity_algorithm='linear', **kwargs)[source]
    +
    +global_feature_importance(query_instances, cf_examples_list=None, total_CFs=10, local_importance=True, desired_class='opposite', desired_range=None, permitted_range=None, features_to_vary='all', stopping_threshold=0.5, posthoc_sparsity_param=0.1, posthoc_sparsity_algorithm='linear', **kwargs)[source]

    Estimate global feature importance scores for the given inputs.

    Parameters
    @@ -1075,8 +1004,8 @@

    Submodules -
    -infer_target_cfs_class(desired_class_input, original_pred, num_output_nodes)[source]
    +
    +infer_target_cfs_class(desired_class_input, original_pred, num_output_nodes)[source]

    Infer the target class for generating CFs. Only called when model_type==”classifier”. TODO: Add support for opposite desired class in multiclass. @@ -1084,19 +1013,19 @@

    Submodules -
    -infer_target_cfs_range(desired_range_input)[source]
    +
    +infer_target_cfs_range(desired_range_input)[source]

    -
    -is_cf_valid(model_score)[source]
    +
    +is_cf_valid(model_score)[source]

    Check if a cf belongs to the target class or target range.

    -
    -local_feature_importance(query_instances, cf_examples_list=None, total_CFs=10, desired_class='opposite', desired_range=None, permitted_range=None, features_to_vary='all', stopping_threshold=0.5, posthoc_sparsity_param=0.1, posthoc_sparsity_algorithm='linear', **kwargs)[source]
    +
    +local_feature_importance(query_instances, cf_examples_list=None, total_CFs=10, desired_class='opposite', desired_range=None, permitted_range=None, features_to_vary='all', stopping_threshold=0.5, posthoc_sparsity_param=0.1, posthoc_sparsity_algorithm='linear', **kwargs)[source]

    Estimate local feature importance scores for the given inputs.

    Parameters
    @@ -1121,55 +1050,61 @@

    Submodules -
    -misc_init(stopping_threshold, desired_class, desired_range, test_pred)[source]
    +
    +misc_init(stopping_threshold, desired_class, desired_range, test_pred)[source]

    -
    -predict_fn(input_instance)[source]
    +
    +predict_fn(input_instance)[source]

    prediction function

    -
    -predict_fn_for_sparsity(input_instance)[source]
    +
    +predict_fn_for_sparsity(input_instance)[source]

    prediction function for sparsity correction

    -
    -round_to_precision()[source]
    +
    +round_to_precision()[source]
    -
    -setup(features_to_vary, permitted_range, query_instance, feature_weights)[source]
    +
    +serialize_explainer(path)[source]
    +

    Serialize the explainer to the file specified by path.

    +
    + +
    +
    +setup(features_to_vary, permitted_range, query_instance, feature_weights)[source]
    -
    -sigmoid(z)[source]
    +
    +sigmoid(z)[source]

    This is used in VAE-based CF explainers.

    -

    -
    -

    dice_ml.explainer_interfaces.feasible_base_vae module

    + +
    +

    dice_ml.explainer_interfaces.feasible_base_vae module

    -
    -class dice_ml.explainer_interfaces.feasible_base_vae.FeasibleBaseVAE(data_interface, model_interface, **kwargs)[source]
    +
    +class dice_ml.explainer_interfaces.feasible_base_vae.FeasibleBaseVAE(data_interface, model_interface, **kwargs)[source]

    Bases: dice_ml.explainer_interfaces.explainer_base.ExplainerBase

    -
    -compute_loss(model_out, x, target_label)[source]
    +
    +compute_loss(model_out, x, target_label)[source]
    -
    -generate_counterfactuals(query_instance, total_CFs, desired_class='opposite')[source]
    +
    +generate_counterfactuals(query_instance, total_CFs, desired_class='opposite')[source]

    General method for generating counterfactuals.

    Parameters
    @@ -1180,12 +1115,22 @@

    Submodules -
    -train(pre_trained=False)[source]
    +
    +train(pre_trained=False)[source]

    pre_trained: Bool Variable to check whether pre trained model exists to avoid training again

    -
    -
    -

    dice_ml.explainer_interfaces.feasible_model_approx module

    + +
    +

    dice_ml.explainer_interfaces.feasible_model_approx module

    -
    -class dice_ml.explainer_interfaces.feasible_model_approx.FeasibleModelApprox(data_interface, model_interface, **kwargs)[source]
    +
    +class dice_ml.explainer_interfaces.feasible_model_approx.FeasibleModelApprox(data_interface, model_interface, **kwargs)[source]

    Bases: dice_ml.explainer_interfaces.feasible_base_vae.FeasibleBaseVAE, dice_ml.explainer_interfaces.explainer_base.ExplainerBase

    -
    -train(constraint_type, constraint_variables, constraint_direction, constraint_reg, pre_trained=False)[source]
    +
    +train(constraint_type, constraint_variables, constraint_direction, constraint_reg, pre_trained=False)[source]
    Parameters
    - + +
    +

    Module contents

    +
    + - - - - - - - - - - - - + \ No newline at end of file diff --git a/docs/dice_ml.html b/docs/dice_ml.html index ef34d2d9..19d8e332 100644 --- a/docs/dice_ml.html +++ b/docs/dice_ml.html @@ -1,71 +1,35 @@ - - - - - - - dice_ml package — DiCE 0.7 documentation - - - - - - - - - - + - + + dice_ml package — DiCE 0.8 documentation + + - - + - - - - - - - + - - - +
    - -
    - - -
    -
    -

    dice_ml.data module

    + +
    +

    dice_ml.data module

    Module pointing to different implementations of Data class

    DiCE requires only few parameters about the data such as the range of continuous features and the levels of categorical features. Hence, DiCE can be used for a private data whose meta data are only available (such as the feature names and range/levels of different features) by specifying appropriate parameters.

    -
    -class dice_ml.data.Data(**params)[source]
    +
    +class dice_ml.data.Data(**params)[source]

    Bases: dice_ml.data_interfaces.base_data_interface._BaseData

    Class containing all required information about the data for DiCE.

    -
    -decide_implementation_type(params)[source]
    +
    +decide_implementation_type(params)[source]

    Decides if the Data class is for public or private data.

    -
    -dice_ml.data.decide(params)[source]
    +
    +dice_ml.data.decide(params)[source]

    Decides if the Data class is for public or private data.

    To add new implementations of Data, add the class in data_interfaces subpackage and import-and-return the class in an elif loop as shown in the below method.

    -
    -
    -

    dice_ml.dice module

    + +
    +

    dice_ml.dice module

    Module pointing to different implementations of DiCE based on different frameworks such as Tensorflow or PyTorch or sklearn, and different methods such as RandomSampling, DiCEKD or DiCEGenetic

    -
    -class dice_ml.dice.Dice(data_interface, model_interface, method='random', **kwargs)[source]
    +
    +class dice_ml.dice.Dice(data_interface, model_interface, method='random', **kwargs)[source]

    Bases: dice_ml.explainer_interfaces.explainer_base.ExplainerBase

    An interface class to different DiCE implementations.

    -
    -decide_implementation_type(data_interface, model_interface, method, **kwargs)[source]
    +
    +decide_implementation_type(data_interface, model_interface, method, **kwargs)[source]

    Decides DiCE implementation type.

    -
    -dice_ml.dice.decide(model_interface, method)[source]
    +
    +dice_ml.dice.decide(model_interface, method)[source]

    Decides DiCE implementation type.

    To add new implementations of DiCE, add the class in explainer_interfaces subpackage and import-and-return the class in an elif loop as shown in the below method.

    -
    -
    -

    dice_ml.diverse_counterfactuals module

    + +
    +

    dice_ml.diverse_counterfactuals module

    -
    -class dice_ml.diverse_counterfactuals.CounterfactualExamples(data_interface=None, final_cfs_df=None, test_instance_df=None, final_cfs_df_sparse=None, posthoc_sparsity_param=0, desired_range=None, desired_class='opposite', model_type='classifier')[source]
    +
    +class dice_ml.diverse_counterfactuals.CounterfactualExamples(data_interface=None, final_cfs_df=None, test_instance_df=None, final_cfs_df_sparse=None, posthoc_sparsity_param=0, desired_range=None, desired_class='opposite', model_type='classifier')[source]

    Bases: object

    A class to store and visualize the resulting counterfactual explanations.

    -
    -display_df(df, show_only_changes)[source]
    +
    +display_df(df, show_only_changes)[source]
    -
    -static from_json(cf_example_json_str)[source]
    +
    +static from_json(cf_example_json_str)[source]
    -
    -print_list(li, show_only_changes)[source]
    +
    +print_list(li, show_only_changes)[source]
    -
    -to_json(serialization_version)[source]
    +
    +to_json(serialization_version)[source]
    -
    -visualize_as_dataframe(display_sparse_df=True, show_only_changes=False)[source]
    +
    +visualize_as_dataframe(display_sparse_df=True, show_only_changes=False)[source]
    -
    -visualize_as_list(display_sparse_df=True, show_only_changes=False)[source]
    +
    +visualize_as_list(display_sparse_df=True, show_only_changes=False)[source]
    -
    -dice_ml.diverse_counterfactuals.json_converter(obj)[source]
    +
    +dice_ml.diverse_counterfactuals.json_converter(obj)[source]

    Helper function to convert object to json.

    -
    -
    -

    dice_ml.model module

    + +
    +

    dice_ml.model module

    Module pointing to different implementations of Model class

    The implementations contain methods to access the output or gradients of ML models trained based on different frameworks such as Tensorflow or PyTorch.

    -
    -class dice_ml.model.Model(model=None, model_path='', backend='TF1', model_type='classifier', func=None, kw_args=None)[source]
    +
    +class dice_ml.model.Model(model=None, model_path='', backend='TF1', model_type='classifier', func=None, kw_args=None)[source]

    Bases: object

    An interface class to different ML Model implementations.

    -
    -decide_implementation_type(model, model_path, backend, func, kw_args)[source]
    +
    +decide_implementation_type(model, model_path, backend, func, kw_args)[source]

    Decides the Model implementation type.

    -
    -dice_ml.model.decide(backend)[source]
    +
    +dice_ml.model.decide(backend)[source]

    Decides the Model implementation type.

    To add new implementations of Model, add the class in model_interfaces subpackage and import-and-return the class in an elif loop as shown in the below method.

    -
    -
    -

    Module contents

    + +
    +

    Module contents

    -
    -class dice_ml.Data(**params)[source]
    +
    +class dice_ml.Data(**params)[source]

    Bases: dice_ml.data_interfaces.base_data_interface._BaseData

    Class containing all required information about the data for DiCE.

    -
    -decide_implementation_type(params)[source]
    +
    +decide_implementation_type(params)[source]

    Decides if the Data class is for public or private data.

    -
    -class dice_ml.Dice(data_interface, model_interface, method='random', **kwargs)[source]
    +
    +class dice_ml.Dice(data_interface, model_interface, method='random', **kwargs)[source]

    Bases: dice_ml.explainer_interfaces.explainer_base.ExplainerBase

    An interface class to different DiCE implementations.

    -
    -decide_implementation_type(data_interface, model_interface, method, **kwargs)[source]
    +
    +decide_implementation_type(data_interface, model_interface, method, **kwargs)[source]

    Decides DiCE implementation type.

    -
    -class dice_ml.Model(model=None, model_path='', backend='TF1', model_type='classifier', func=None, kw_args=None)[source]
    +
    +class dice_ml.Model(model=None, model_path='', backend='TF1', model_type='classifier', func=None, kw_args=None)[source]

    Bases: object

    An interface class to different ML Model implementations.

    -
    -decide_implementation_type(model, model_path, backend, func, kw_args)[source]
    +
    +decide_implementation_type(model, model_path, backend, func, kw_args)[source]

    Decides the Model implementation type.

    -
    - + + - - - - - - - - - - - - + \ No newline at end of file diff --git a/docs/dice_ml.model_interfaces.html b/docs/dice_ml.model_interfaces.html index e5d23059..7e436f06 100644 --- a/docs/dice_ml.model_interfaces.html +++ b/docs/dice_ml.model_interfaces.html @@ -1,71 +1,35 @@ - - - - - - - dice_ml.model_interfaces package — DiCE 0.7 documentation - - - - - - - - - - + - + + dice_ml.model_interfaces package — DiCE 0.8 documentation + + - - + - - - - - - - + - - - +
    - -
    - - -
    -
    -

    dice_ml.model_interfaces.pytorch_model module

    + +
    +

    dice_ml.model_interfaces.pytorch_model module

    Module containing an interface to trained PyTorch model.

    -
    -class dice_ml.model_interfaces.pytorch_model.PyTorchModel(model=None, model_path='', backend='PYT', func=None, kw_args=None)[source]
    +
    +class dice_ml.model_interfaces.pytorch_model.PyTorchModel(model=None, model_path='', backend='PYT', func=None, kw_args=None)[source]

    Bases: dice_ml.model_interfaces.base_model.BaseModel

    -
    -get_gradient(input)[source]
    +
    +get_gradient(input_instance)[source]
    -
    -get_num_output_nodes(inp_size)[source]
    +
    +get_num_output_nodes(inp_size)[source]
    -
    -get_output(input_tensor, transform_data=False)[source]
    +
    +get_output(input_tensor, transform_data=False)[source]

    returns prediction probabilities

    Parameters
    @@ -341,77 +254,52 @@

    Submodules -
    -load_model()[source]
    +
    +load_model()[source]

    -
    -set_eval_mode()[source]
    +
    +set_eval_mode()[source]
    -
    -
    -

    Module contents

    -
    - + +
    +

    Module contents

    +
    + - - - - - - - - - - - - + \ No newline at end of file diff --git a/docs/dice_ml.schema.html b/docs/dice_ml.schema.html index 482ca92d..58907b77 100644 --- a/docs/dice_ml.schema.html +++ b/docs/dice_ml.schema.html @@ -1,71 +1,35 @@ - - - - - - - dice_ml.schema package — DiCE 0.7 documentation - - - - - + - - - - - - + + dice_ml.schema package — DiCE 0.8 documentation + + - - + - - - - - - - + - - - +
    - -
    - - -
    - - - - - - - - + \ No newline at end of file diff --git a/docs/dice_ml.utils.html b/docs/dice_ml.utils.html index 8c73d6c6..87dceb57 100644 --- a/docs/dice_ml.utils.html +++ b/docs/dice_ml.utils.html @@ -1,71 +1,35 @@ - - - - - - - dice_ml.utils package — DiCE 0.7 documentation - + - - - - - - - - - - + + dice_ml.utils package — DiCE 0.8 documentation + + - - + - - - - - - - + - - - +
    - -
    - - -
    -
    -

    Module contents

    -
    - + +
    +

    Module contents

    +
    + - - - - - - - - - - - - + \ No newline at end of file diff --git a/docs/dice_ml.utils.sample_architecture.html b/docs/dice_ml.utils.sample_architecture.html index 89d51238..8ff72da0 100644 --- a/docs/dice_ml.utils.sample_architecture.html +++ b/docs/dice_ml.utils.sample_architecture.html @@ -1,70 +1,34 @@ - - - - - - - dice_ml.utils.sample_architecture package — DiCE 0.7 documentation - - - - - - - - - - + - + + dice_ml.utils.sample_architecture package — DiCE 0.8 documentation + + - - + - - - - - - - + - - - +
    - -
    - - -
    - - - - - - - - + \ No newline at end of file diff --git a/docs/genindex.html b/docs/genindex.html index 38a0784a..7f38acbc 100644 --- a/docs/genindex.html +++ b/docs/genindex.html @@ -1,69 +1,32 @@ - - - - - - - Index — DiCE 0.7 documentation - - - - - - - - - - - - + + + Index — DiCE 0.8 documentation + + - - + - - - - - - - + - - - +
    - -
    - - -
    @@ -2400,123 +2301,123 @@

    Convert the json output to a counterfactual object 0 + 80.0 + Government + Bachelors + Married - - - - Widowed - - - Other - - - - 0 + 1 1 + 35.0 + Self-Employed + Prof-school + Married - - - - Widowed - - - - - - 56.0 - 0 + 1 2 + 46.0 - + Assoc + Married - - + Male - - Other/Unknown - - - - - 35.0 - 0 + 1 3 + 47.0 - + Prof-school + Married + Sales - - School - - - - - Other - - - 0 + 1 4 - 17.0 - - - - - - - - + 80.0 + Government + Bachelors + Married - - + Male - - 0 + 1 5 + 47.0 + Other/Unknown + Prof-school + Married + Sales - - - - - - - - - - - - 91.0 - 0 + 1 6 - 18.0 - - - - + 53.0 - + Masters + Married + White-Collar - - - - 55.0 - 0 + 1 - 7 - - - - - Assoc - Divorced - - - - + 7 + 71.0 - + Some-college + Married + White-Collar - - 0 + Male + 59.0 + 1 8 - + Self-Employed + Doctorate + Married + Professional + Other - - - - - - - - - - - 72.0 - 0 + 1 9 + 50.0 - - Government - - - - - Blue-Collar - - + Masters + Married + White-Collar - - - 0 + 46.0 + 1 @@ -2566,14 +2467,14 @@

    Convert the json output to a counterfactual object 0 - 36 - Private + 19 + Other/Unknown HS-grad - Married - Blue-Collar - White - Male - 45 + Single + Other/Unknown + Other + Female + 40 0 @@ -2625,108 +2526,108 @@

    Convert the json output to a counterfactual object 0 - 58.0 - - - - - - - - + Masters + Married - - + Male + 90.0 1 1 + 85.0 + Government + Some-college + Married - - - Assoc - - - - - - - Female - + 53.0 1 2 - - - - School - - - - + Government + Prof-school + Married + White-Collar - - - 46.0 + 84.0 1 3 - - - Prof-school - - - - + Masters + Married + Service - - Female + Male + 90.0 - - 1 4 + 54.0 - - Government - Doctorate - - - - - - + Some-college + Married - - + Male + 96.0 1 5 - 54.0 + 86.0 - - - - - - Service + School + Married + Professional + White - - - - 1 6 - 66.0 - - - Doctorate - - - - + 75.0 - + Some-college + Married - - + Male + 92.0 1 7 - - + 88.0 - Doctorate - - - - - + Professional + White - - 1 8 - 45.0 - - - - - - + 78.0 - + Bachelors + Married - + White - - 1 @@ -2735,10 +2636,10 @@

    Convert the json output to a counterfactual object9 - - - Doctorate - - - White-Collar - - + Masters + Married + Professional + White - - 1 @@ -2791,14 +2692,14 @@

    Convert the json output to a counterfactual object 0 - 47 - Private + 28 + Other/Unknown Some-college Married - Service + Other/Unknown White - Male - 47 + Female + 40 1 @@ -2850,34 +2751,34 @@

    Convert the json output to a counterfactual object 0 - 82.0 - Government - - - + Separated - - - + 79.0 0 1 - 17.0 - - Prof-school - + Assoc - - - + Male - 0 2 + 65.0 - - - - - Single + Widowed - - - @@ -2889,11 +2790,11 @@

    Convert the json output to a counterfactual object- - - + Separated - - - Other - - 66.0 + 8.0 0 @@ -2901,22 +2802,22 @@

    Convert the json output to a counterfactual object- - - - Separated - + Blue-Collar - - Female - + 91.0 0 5 - 67.0 - - - Widowed + School - - - + Male - 0 @@ -2924,22 +2825,22 @@

    Convert the json output to a counterfactual object6 - - - Assoc - - Other/Unknown + Divorced - - - + 79.0 0 7 - - Other/Unknown - - - Other/Unknown - + Blue-Collar + Other - - 0 @@ -2948,9 +2849,9 @@

    Convert the json output to a counterfactual object8 - - - School - - - + Single + White-Collar - - - @@ -2959,13 +2860,13 @@

    Convert the json output to a counterfactual object 9 - - Government - - - + Blue-Collar - - - 78.0 + 1.0 0 @@ -2977,7 +2878,7 @@

    Convert the json output to a counterfactual object
    -Query instance (original outcome : 0)
    +Query instance (original outcome : 1)
     

    @@ -3075,15 +2976,15 @@

    Convert the json output to a counterfactual object 0 - 78.0 - - + Prof-school - - Professional - - - - 1 + 7.0 + 0 1 @@ -3091,107 +2992,107 @@

    Convert the json output to a counterfactual object- - - - Professional + Sales - + Female - - 71.0 - 1 + 0 2 - + Self-Employed + School - - - - Professional - White - - - 1 + 0 3 - + Self-Employed - + Widowed - - - Professional - - - 10.0 - 1 + 0 4 + 77.0 - - - Masters - - Professional + Service - - - - 1 + 0 5 + 68.0 - - Self-Employed - Masters - + Single - - - - - 1 + 0 6 + 38.0 + Government - - - Masters - - - - - 17.0 - 1 + 0 7 - - - Masters + Some-college + Single - - - - - 94.0 - 1 + 0 8 - 76.0 + 89.0 - - - - Professional - - - - 1 + 21.0 + 0 9 - - - + Divorced - - Professional - - + Other - - - 1 + 0 @@ -3203,67 +3104,42 @@

    Convert the json output to a counterfactual object
     [None, None, None, None, None, None, None, None, None, None]
    -[{'marital_status': 0.5, 'age': 0.4, 'occupation': 0.4, 'hours_per_week': 0.3, 'workclass': 0.1, 'education': 0.1, 'race': 0.1, 'gender': 0.0}, {'marital_status': 0.8, 'age': 0.6, 'education': 0.3, 'gender': 0.2, 'occupation': 0.1, 'workclass': 0.0, 'race': 0.0, 'hours_per_week': 0.0}, {'age': 1.0, 'education': 1.0, 'marital_status': 1.0, 'hours_per_week': 0.7, 'workclass': 0.3, 'gender': 0.3, 'occupation': 0.1, 'race': 0.0}, {'marital_status': 0.5, 'hours_per_week': 0.4, 'age': 0.3, 'workclass': 0.2, 'education': 0.2, 'occupation': 0.2, 'race': 0.1, 'gender': 0.0}, {'education': 0.8, 'hours_per_week': 0.8, 'marital_status': 0.4, 'age': 0.0, 'workclass': 0.0, 'occupation': 0.0, 'race': 0.0, 'gender': 0.0}, {'age': 0.4, 'hours_per_week': 0.4, 'workclass': 0.2, 'education': 0.2, 'marital_status': 0.1, 'occupation': 0.1, 'race': 0.1, 'gender': 0.1}, {'hours_per_week': 0.5, 'marital_status': 0.3, 'age': 0.2, 'education': 0.2, 'occupation': 0.2, 'race': 0.2, 'workclass': 0.1, 'gender': 0.0}, {'education': 0.7, 'age': 0.4, 'occupation': 0.2, 'gender': 0.2, 'workclass': 0.1, 'hours_per_week': 0.1, 'marital_status': 0.0, 'race': 0.0}, {'age': 0.3, 'workclass': 0.3, 'education': 0.3, 'marital_status': 0.3, 'occupation': 0.2, 'hours_per_week': 0.2, 'race': 0.1, 'gender': 0.1}, {'occupation': 0.7, 'education': 0.4, 'hours_per_week': 0.4, 'age': 0.2, 'workclass': 0.1, 'race': 0.1, 'marital_status': 0.0, 'gender': 0.0}]
    -{'education': 0.42, 'marital_status': 0.39, 'age': 0.38, 'hours_per_week': 0.38, 'occupation': 0.22, 'workclass': 0.14, 'gender': 0.09, 'race': 0.07}
    +[{'hours_per_week': 0.6, 'education': 0.4, 'occupation': 0.4, 'age': 0.2, 'race': 0.2, 'workclass': 0.1, 'marital_status': 0.0, 'gender': 0.0}, {'hours_per_week': 0.8, 'marital_status': 0.5, 'age': 0.2, 'education': 0.2, 'race': 0.1, 'workclass': 0.0, 'occupation': 0.0, 'gender': 0.0}, {'age': 1.0, 'marital_status': 0.8, 'education': 0.6, 'hours_per_week': 0.4, 'workclass': 0.3, 'occupation': 0.3, 'race': 0.1, 'gender': 0.0}, {'age': 1.0, 'education': 0.7, 'marital_status': 0.6, 'gender': 0.3, 'occupation': 0.2, 'hours_per_week': 0.2, 'workclass': 0.1, 'race': 0.0}, {'marital_status': 0.5, 'occupation': 0.4, 'age': 0.3, 'workclass': 0.2, 'education': 0.1, 'gender': 0.1, 'hours_per_week': 0.1, 'race': 0.0}, {'hours_per_week': 0.6, 'marital_status': 0.5, 'education': 0.4, 'occupation': 0.3, 'age': 0.1, 'race': 0.1, 'workclass': 0.0, 'gender': 0.0}, {'education': 1.0, 'marital_status': 1.0, 'age': 0.9, 'occupation': 0.6, 'workclass': 0.5, 'gender': 0.3, 'hours_per_week': 0.2, 'race': 0.1}, {'education': 1.0, 'marital_status': 0.9, 'age': 0.6, 'hours_per_week': 0.6, 'occupation': 0.5, 'race': 0.4, 'gender': 0.4, 'workclass': 0.2}, {'marital_status': 0.5, 'hours_per_week': 0.5, 'occupation': 0.4, 'education': 0.2, 'gender': 0.2, 'age': 0.1, 'race': 0.1, 'workclass': 0.0}, {'age': 0.4, 'marital_status': 0.4, 'workclass': 0.3, 'education': 0.3, 'occupation': 0.2, 'hours_per_week': 0.2, 'race': 0.1, 'gender': 0.1}]
    +{'marital_status': 0.57, 'education': 0.49, 'age': 0.48, 'hours_per_week': 0.42, 'occupation': 0.33, 'workclass': 0.17, 'gender': 0.14, 'race': 0.12}
     

    - - + + - - - - - - - - - - - - + \ No newline at end of file diff --git a/docs/notebooks/DiCE_getting_started.html b/docs/notebooks/DiCE_getting_started.html index c0b58b7b..12bbf737 100644 --- a/docs/notebooks/DiCE_getting_started.html +++ b/docs/notebooks/DiCE_getting_started.html @@ -1,71 +1,37 @@ - - - - - - - Quick introduction to generating counterfactual explanations using DiCE — DiCE 0.7 documentation - - - - - - - - - - + - + + Quick introduction to generating counterfactual explanations using DiCE — DiCE 0.8 documentation + + - - + - - - - - - - + + + - - - +
    - -
    - - -
    - - - - - - - - - - - - + \ No newline at end of file diff --git a/docs/notebooks/DiCE_getting_started_feasible.html b/docs/notebooks/DiCE_getting_started_feasible.html index c75bd075..01f3614b 100644 --- a/docs/notebooks/DiCE_getting_started_feasible.html +++ b/docs/notebooks/DiCE_getting_started_feasible.html @@ -1,71 +1,37 @@ - - - - - - - Generate feasible counterfactual explanations using a VAE — DiCE 0.7 documentation - + - - - - - - - - - - + + Generate feasible counterfactual explanations using a VAE — DiCE 0.8 documentation + + - - + - - - - - - - + + + - - - +
    - -
    - - -
    - - - - - - - - + \ No newline at end of file diff --git a/docs/notebooks/DiCE_model_agnostic_CFs.html b/docs/notebooks/DiCE_model_agnostic_CFs.html index 9018f75c..f565e63b 100644 --- a/docs/notebooks/DiCE_model_agnostic_CFs.html +++ b/docs/notebooks/DiCE_model_agnostic_CFs.html @@ -1,71 +1,37 @@ - - - - - - - Generating counterfactual explanations with any ML model — DiCE 0.7 documentation - - - - - - - - - - + - + + Generating counterfactual explanations with any ML model — DiCE 0.8 documentation + + - - + - - - - - - - + + + - - - +
    - -
    - - -
    +
    +

    3. Querying a KD Tree

    Here, we show how to use DiCE can be used to generate CFs for any ML model by finding the closest points in the dataset that give the output as the desired class. We do this efficiently by building KD trees for each class, and querying the KD tree of the desired class to find the k closest counterfactuals from the dataset. The idea behind finding the closest points from the training data itself is to ensure that the counterfactuals displayed are feasible.

    -
    -

    Training a custom ML model

    +
    +

    Training a custom ML model

    Currently, the KD tree algorithm method works with scikit-learn models. Again, we will use the same model as shown previously in the notebook. Support for Tensorflow 1&2 and Pytorch will be implemented soon.

    -
    -
    -

    Generate diverse counterfactuals

    +
    +
    +

    Generate diverse counterfactuals

    [23]:
     
    -
    @@ -3294,7 +3183,7 @@

    Generate diverse counterfactuals -

    Selecting the features to vary

    +
    +

    Selecting the features to vary

    Here, again, you can vary only features that you wish to vary. Please note that the output counterfactuals are only from the training data. If you want other counterfactuals, please use the random or genetic method.

    +
    +

    Selecting the feature ranges

    Here, you can control the ranges of continuous features.

    [28]:
     
    -
    @@ -3818,7 +3647,7 @@

    Selecting the feature ranges - - - - - - +
    -
    -

    - - © Copyright 2020, Ramaravind, Amit, Chenhao - -

    +

    © Copyright 2020, Ramaravind, Amit, Chenhao.

    - - - - Built with Sphinx using a - - theme - - provided by Read the Docs. -
    + Built with Sphinx using a + theme + provided by Read the Docs. + +

    -
    -

    - - - - - - - - + \ No newline at end of file diff --git a/docs/notebooks/DiCE_multiclass_classification_and_regression.html b/docs/notebooks/DiCE_multiclass_classification_and_regression.html index 2ee5e6cd..0d85d215 100644 --- a/docs/notebooks/DiCE_multiclass_classification_and_regression.html +++ b/docs/notebooks/DiCE_multiclass_classification_and_regression.html @@ -1,71 +1,37 @@ - - - - - - - Generating counterfactuals for multi-class classification and regression models — DiCE 0.7 documentation - - - - - + - - - - - - + + Generating counterfactuals for multi-class classification and regression models — DiCE 0.8 documentation + + - - + - - - - - - - + + + - - - +
    - -
    - - -
    +
    - - - - - - - - - - - - + \ No newline at end of file diff --git a/docs/notebooks/DiCE_with_advanced_options.html b/docs/notebooks/DiCE_with_advanced_options.html index a82737e4..6ec02779 100644 --- a/docs/notebooks/DiCE_with_advanced_options.html +++ b/docs/notebooks/DiCE_with_advanced_options.html @@ -1,71 +1,37 @@ - - - - - - - Advanced options to customize Counterfactual Explanations — DiCE 0.7 documentation - - - - - - - - - - + - + + Advanced options to customize Counterfactual Explanations — DiCE 0.8 documentation + + - - + - - - - - - - + + + - - - +
    - -
    - - -
    - - - - - - - - - - - - + \ No newline at end of file diff --git a/docs/notebooks/DiCE_with_private_data.html b/docs/notebooks/DiCE_with_private_data.html index 735477f2..76732160 100644 --- a/docs/notebooks/DiCE_with_private_data.html +++ b/docs/notebooks/DiCE_with_private_data.html @@ -1,71 +1,37 @@ - - - - - - - Generating Counterfactual Explanations without access to training data — DiCE 0.7 documentation - - - - - - - - - - + - + + Generating Counterfactual Explanations without access to training data — DiCE 0.8 documentation + + - - + - - - - - - - + + + - - - +
    - -
    - - -
    - - - - - - - - + \ No newline at end of file diff --git a/docs/notebooks/nb_index.html b/docs/notebooks/nb_index.html index 23177ec1..8d1d6522 100644 --- a/docs/notebooks/nb_index.html +++ b/docs/notebooks/nb_index.html @@ -1,71 +1,35 @@ - - - - - - - <no title> — DiCE 0.7 documentation - - - - - + - - - - - - + + <no title> — DiCE 0.8 documentation + + - - + - - - - - - - + - - - +
    - -
    - - -
    - - - - - - - - + \ No newline at end of file diff --git a/docs/objects.inv b/docs/objects.inv index ff695f86bc8eb72af0889687cfaf0495598d7859..b357406f00b3cf8cc89ec13eaee843d4e6c81f73 100644 GIT binary patch delta 9491 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 delta 9111 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 Vr6KGXLwsQ8zmcce{{uMvEkfLx;)MVJ diff --git a/docs/py-modindex.html b/docs/py-modindex.html index 7a64d869..5be6aa68 100644 --- a/docs/py-modindex.html +++ b/docs/py-modindex.html @@ -1,42 +1,21 @@ - - - - - - - Python Module Index — DiCE 0.7 documentation - - - - - - - - - - - - + + + Python Module Index — DiCE 0.8 documentation + + - - + - - - - - - - + @@ -44,29 +23,13 @@ - - - +
    - -
    - - -
    - - - - - - - - + \ No newline at end of file diff --git a/docs/readme.html b/docs/readme.html index 58e664de..2d786adb 100644 --- a/docs/readme.html +++ b/docs/readme.html @@ -1,71 +1,35 @@ - - - - - - - Diverse Counterfactual Explanations (DiCE) for ML — DiCE 0.7 documentation - + - - - - - - - - - - + + Diverse Counterfactual Explanations (DiCE) for ML — DiCE 0.8 documentation + + - - + - - - - - - - + - - - +
    - -
    - - -
    - -
    -

    Contributing

    + +
    +

    Contributing

    This project welcomes contributions and suggestions. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. For details, visit https://cla.microsoft.com.

    @@ -437,63 +358,38 @@

    ContributingMicrosoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact opencode@microsoft.com with any additional questions or comments.

    -

    - + + - - - - - - - - - - - - + \ No newline at end of file diff --git a/docs/search.html b/docs/search.html index 99e153ea..37883ffb 100644 --- a/docs/search.html +++ b/docs/search.html @@ -1,71 +1,35 @@ - - - - - - - Search — DiCE 0.7 documentation - - - - - - - - - - - - + + + Search — DiCE 0.8 documentation + + - - + - - - - - - - - + + + - - - +
    - -
    - - -
    - - - - - - - - - - + diff --git a/docs/searchindex.js b/docs/searchindex.js index 82805f26..28ef4a1c 100644 --- a/docs/searchindex.js +++ b/docs/searchindex.js @@ -1 +1 @@ -Search.setIndex({docnames:["dice_ml","dice_ml.data_interfaces","dice_ml.explainer_interfaces","dice_ml.model_interfaces","dice_ml.schema","dice_ml.utils","dice_ml.utils.sample_architecture","index","modules","notebooks/Benchmarking_different_CF_explanation_methods","notebooks/DiCE_feature_importances","notebooks/DiCE_getting_started","notebooks/DiCE_getting_started_feasible","notebooks/DiCE_model_agnostic_CFs","notebooks/DiCE_multiclass_classification_and_regression","notebooks/DiCE_with_advanced_options","notebooks/DiCE_with_private_data","notebooks/nb_index","readme"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":2,"sphinx.domains.rst":2,"sphinx.domains.std":1,"sphinx.ext.todo":2,"sphinx.ext.viewcode":1,nbsphinx:3,sphinx:56},filenames:["dice_ml.rst","dice_ml.data_interfaces.rst","dice_ml.explainer_interfaces.rst","dice_ml.model_interfaces.rst","dice_ml.schema.rst","dice_ml.utils.rst","dice_ml.utils.sample_architecture.rst","index.rst","modules.rst","notebooks/Benchmarking_different_CF_explanation_methods.ipynb","notebooks/DiCE_feature_importances.ipynb","notebooks/DiCE_getting_started.ipynb","notebooks/DiCE_getting_started_feasible.ipynb","notebooks/DiCE_model_agnostic_CFs.ipynb","notebooks/DiCE_multiclass_classification_and_regression.ipynb","notebooks/DiCE_with_advanced_options.ipynb","notebooks/DiCE_with_private_data.ipynb","notebooks/nb_index.rst","readme.rst"],objects:{"":{dice_ml:[0,0,0,"-"]},"dice_ml.Data":{decide_implementation_type:[0,2,1,""]},"dice_ml.Dice":{decide_implementation_type:[0,2,1,""]},"dice_ml.Model":{decide_implementation_type:[0,2,1,""]},"dice_ml.constants":{BackEndTypes:[0,1,1,""],ModelTypes:[0,1,1,""],SamplingStrategy:[0,1,1,""]},"dice_ml.constants.BackEndTypes":{ALL:[0,3,1,""],Pytorch:[0,3,1,""],Sklearn:[0,3,1,""],Tensorflow1:[0,3,1,""],Tensorflow2:[0,3,1,""]},"dice_ml.constants.ModelTypes":{ALL:[0,3,1,""],Classifier:[0,3,1,""],Regressor:[0,3,1,""]},"dice_ml.constants.SamplingStrategy":{Genetic:[0,3,1,""],KdTree:[0,3,1,""],Random:[0,3,1,""]},"dice_ml.counterfactual_explanations":{CounterfactualExplanations:[0,1,1,""]},"dice_ml.counterfactual_explanations.CounterfactualExplanations":{cf_examples_list:[0,2,1,""],from_json:[0,2,1,""],local_importance:[0,2,1,""],metadata:[0,2,1,""],summary_importance:[0,2,1,""],to_json:[0,2,1,""],visualize_as_dataframe:[0,2,1,""],visualize_as_list:[0,2,1,""]},"dice_ml.data":{Data:[0,1,1,""],decide:[0,4,1,""]},"dice_ml.data.Data":{decide_implementation_type:[0,2,1,""]},"dice_ml.data_interfaces":{base_data_interface:[1,0,0,"-"],private_data_interface:[1,0,0,"-"],public_data_interface:[1,0,0,"-"]},"dice_ml.data_interfaces.private_data_interface":{PrivateData:[1,1,1,""]},"dice_ml.data_interfaces.private_data_interface.PrivateData":{create_ohe_params:[1,2,1,""],de_normalize_data:[1,2,1,""],from_dummies:[1,2,1,""],from_label:[1,2,1,""],get_data_params_for_gradient_dice:[1,2,1,""],get_decimal_precisions:[1,2,1,""],get_decoded_data:[1,2,1,""],get_encoded_categorical_feature_indexes:[1,2,1,""],get_indexes_of_features_to_vary:[1,2,1,""],get_inverse_ohe_min_max_normalized_data:[1,2,1,""],get_mads:[1,2,1,""],get_minx_maxx:[1,2,1,""],get_ohe_min_max_normalized_data:[1,2,1,""],get_valid_mads:[1,2,1,""],normalize_data:[1,2,1,""],one_hot_encode_data:[1,2,1,""],prepare_df_for_ohe_encoding:[1,2,1,""],prepare_query_instance:[1,2,1,""]},"dice_ml.data_interfaces.public_data_interface":{PublicData:[1,1,1,""]},"dice_ml.data_interfaces.public_data_interface.PublicData":{check_features_to_vary:[1,2,1,""],check_mad_validity:[1,2,1,""],check_permitted_range:[1,2,1,""],create_ohe_params:[1,2,1,""],de_normalize_data:[1,2,1,""],from_dummies:[1,2,1,""],from_label:[1,2,1,""],get_data_params_for_gradient_dice:[1,2,1,""],get_data_type:[1,2,1,""],get_decimal_precisions:[1,2,1,""],get_decoded_data:[1,2,1,""],get_encoded_categorical_feature_indexes:[1,2,1,""],get_features_range:[1,2,1,""],get_indexes_of_features_to_vary:[1,2,1,""],get_inverse_ohe_min_max_normalized_data:[1,2,1,""],get_mads:[1,2,1,""],get_minx_maxx:[1,2,1,""],get_ohe_min_max_normalized_data:[1,2,1,""],get_quantiles_from_training_data:[1,2,1,""],get_valid_feature_range:[1,2,1,""],get_valid_mads:[1,2,1,""],normalize_data:[1,2,1,""],one_hot_encode_data:[1,2,1,""],prepare_df_for_ohe_encoding:[1,2,1,""],prepare_query_instance:[1,2,1,""]},"dice_ml.dice":{Dice:[0,1,1,""],decide:[0,4,1,""]},"dice_ml.dice.Dice":{decide_implementation_type:[0,2,1,""]},"dice_ml.diverse_counterfactuals":{CounterfactualExamples:[0,1,1,""],json_converter:[0,4,1,""]},"dice_ml.diverse_counterfactuals.CounterfactualExamples":{display_df:[0,2,1,""],from_json:[0,2,1,""],print_list:[0,2,1,""],to_json:[0,2,1,""],visualize_as_dataframe:[0,2,1,""],visualize_as_list:[0,2,1,""]},"dice_ml.explainer_interfaces":{dice_KD:[2,0,0,"-"],dice_genetic:[2,0,0,"-"],dice_pytorch:[2,0,0,"-"],dice_random:[2,0,0,"-"],dice_tensorflow1:[2,0,0,"-"],dice_tensorflow2:[2,0,0,"-"],explainer_base:[2,0,0,"-"],feasible_base_vae:[2,0,0,"-"],feasible_model_approx:[2,0,0,"-"]},"dice_ml.explainer_interfaces.dice_KD":{DiceKD:[2,1,1,""]},"dice_ml.explainer_interfaces.dice_KD.DiceKD":{do_sparsity_check:[2,2,1,""],duplicates:[2,2,1,""],find_counterfactuals:[2,2,1,""],predict_fn:[2,2,1,""],vary_valid:[2,2,1,""]},"dice_ml.explainer_interfaces.dice_genetic":{DiceGenetic:[2,1,1,""]},"dice_ml.explainer_interfaces.dice_genetic.DiceGenetic":{compute_loss:[2,2,1,""],compute_proximity_loss:[2,2,1,""],compute_sparsity_loss:[2,2,1,""],compute_yloss:[2,2,1,""],do_KD_init:[2,2,1,""],do_cf_initializations:[2,2,1,""],do_loss_initializations:[2,2,1,""],do_param_initializations:[2,2,1,""],do_random_init:[2,2,1,""],find_counterfactuals:[2,2,1,""],get_valid_feature_range:[2,2,1,""],label_decode:[2,2,1,""],label_decode_cfs:[2,2,1,""],label_encode:[2,2,1,""],mate:[2,2,1,""],predict_fn:[2,2,1,""],predict_fn_scores:[2,2,1,""],update_hyperparameters:[2,2,1,""]},"dice_ml.explainer_interfaces.dice_pytorch":{DicePyTorch:[2,1,1,""]},"dice_ml.explainer_interfaces.dice_pytorch.DicePyTorch":{compute_dist:[2,2,1,""],compute_diversity_loss:[2,2,1,""],compute_loss:[2,2,1,""],compute_proximity_loss:[2,2,1,""],compute_regularization_loss:[2,2,1,""],compute_yloss:[2,2,1,""],do_cf_initializations:[2,2,1,""],do_loss_initializations:[2,2,1,""],do_optimizer_initializations:[2,2,1,""],dpp_style:[2,2,1,""],find_counterfactuals:[2,2,1,""],generate_counterfactuals:[2,2,1,""],get_model_output:[2,2,1,""],initialize_CFs:[2,2,1,""],predict_fn:[2,2,1,""],predict_fn_for_sparsity:[2,2,1,""],round_off_cfs:[2,2,1,""],stop_loop:[2,2,1,""],update_hyperparameters:[2,2,1,""]},"dice_ml.explainer_interfaces.dice_random":{DiceRandom:[2,1,1,""]},"dice_ml.explainer_interfaces.dice_random.DiceRandom":{get_continuous_samples:[2,2,1,""],get_samples:[2,2,1,""]},"dice_ml.explainer_interfaces.dice_tensorflow1":{DiceTensorFlow1:[2,1,1,""]},"dice_ml.explainer_interfaces.dice_tensorflow1.DiceTensorFlow1":{compute_dist:[2,2,1,""],compute_diversity_loss:[2,2,1,""],compute_proximity_loss:[2,2,1,""],compute_regularization_loss:[2,2,1,""],compute_yloss:[2,2,1,""],do_cf_initializations:[2,2,1,""],do_loss_initializations:[2,2,1,""],do_optimizer_initializations:[2,2,1,""],dpp_style:[2,2,1,""],find_counterfactuals:[2,2,1,""],generate_counterfactuals:[2,2,1,""],initialize_CFs:[2,2,1,""],predict_fn:[2,2,1,""],predict_fn_for_sparsity:[2,2,1,""],round_off_cfs:[2,2,1,""],scipy_optimizers:[2,2,1,""],stop_loop:[2,2,1,""],tensorflow_optimizers:[2,2,1,""],update_hyperparameters:[2,2,1,""]},"dice_ml.explainer_interfaces.dice_tensorflow2":{DiceTensorFlow2:[2,1,1,""]},"dice_ml.explainer_interfaces.dice_tensorflow2.DiceTensorFlow2":{compute_dist:[2,2,1,""],compute_diversity_loss:[2,2,1,""],compute_loss:[2,2,1,""],compute_proximity_loss:[2,2,1,""],compute_regularization_loss:[2,2,1,""],compute_yloss:[2,2,1,""],do_cf_initializations:[2,2,1,""],do_loss_initializations:[2,2,1,""],do_optimizer_initializations:[2,2,1,""],dpp_style:[2,2,1,""],find_counterfactuals:[2,2,1,""],generate_counterfactuals:[2,2,1,""],initialize_CFs:[2,2,1,""],predict_fn:[2,2,1,""],predict_fn_for_sparsity:[2,2,1,""],round_off_cfs:[2,2,1,""],stop_loop:[2,2,1,""],update_hyperparameters:[2,2,1,""]},"dice_ml.explainer_interfaces.explainer_base":{ExplainerBase:[2,1,1,""]},"dice_ml.explainer_interfaces.explainer_base.ExplainerBase":{build_KD_tree:[2,2,1,""],check_permitted_range:[2,2,1,""],check_query_instance_validity:[2,2,1,""],decide_cf_validity:[2,2,1,""],do_binary_search:[2,2,1,""],do_linear_search:[2,2,1,""],do_posthoc_sparsity_enhancement:[2,2,1,""],feature_importance:[2,2,1,""],generate_counterfactuals:[2,2,1,""],get_model_output_from_scores:[2,2,1,""],global_feature_importance:[2,2,1,""],infer_target_cfs_class:[2,2,1,""],infer_target_cfs_range:[2,2,1,""],is_cf_valid:[2,2,1,""],local_feature_importance:[2,2,1,""],misc_init:[2,2,1,""],predict_fn:[2,2,1,""],predict_fn_for_sparsity:[2,2,1,""],round_to_precision:[2,2,1,""],setup:[2,2,1,""],sigmoid:[2,2,1,""]},"dice_ml.explainer_interfaces.feasible_base_vae":{FeasibleBaseVAE:[2,1,1,""]},"dice_ml.explainer_interfaces.feasible_base_vae.FeasibleBaseVAE":{compute_loss:[2,2,1,""],generate_counterfactuals:[2,2,1,""],train:[2,2,1,""]},"dice_ml.explainer_interfaces.feasible_model_approx":{FeasibleModelApprox:[2,1,1,""]},"dice_ml.explainer_interfaces.feasible_model_approx.FeasibleModelApprox":{train:[2,2,1,""]},"dice_ml.model":{Model:[0,1,1,""],decide:[0,4,1,""]},"dice_ml.model.Model":{decide_implementation_type:[0,2,1,""]},"dice_ml.model_interfaces":{base_model:[3,0,0,"-"],keras_tensorflow_model:[3,0,0,"-"],pytorch_model:[3,0,0,"-"]},"dice_ml.model_interfaces.base_model":{BaseModel:[3,1,1,""]},"dice_ml.model_interfaces.base_model.BaseModel":{get_gradient:[3,2,1,""],get_num_output_nodes2:[3,2,1,""],get_num_output_nodes:[3,2,1,""],get_output:[3,2,1,""],load_model:[3,2,1,""]},"dice_ml.model_interfaces.keras_tensorflow_model":{KerasTensorFlowModel:[3,1,1,""]},"dice_ml.model_interfaces.keras_tensorflow_model.KerasTensorFlowModel":{get_gradient:[3,2,1,""],get_num_output_nodes:[3,2,1,""],get_output:[3,2,1,""],load_model:[3,2,1,""]},"dice_ml.model_interfaces.pytorch_model":{PyTorchModel:[3,1,1,""]},"dice_ml.model_interfaces.pytorch_model.PyTorchModel":{get_gradient:[3,2,1,""],get_num_output_nodes:[3,2,1,""],get_output:[3,2,1,""],load_model:[3,2,1,""],set_eval_mode:[3,2,1,""]},"dice_ml.utils":{exception:[5,0,0,"-"],helpers:[5,0,0,"-"],sample_architecture:[6,0,0,"-"],serialize:[5,0,0,"-"]},"dice_ml.utils.exception":{SystemException:[5,5,1,""],UserConfigValidationException:[5,5,1,""]},"dice_ml.utils.helpers":{DataTransfomer:[5,1,1,""],get_adult_data_info:[5,4,1,""],get_adult_income_modelpath:[5,4,1,""],get_base_gen_cf_initialization:[5,4,1,""],get_custom_dataset_modelpath_pipeline:[5,4,1,""],get_custom_dataset_modelpath_pipeline_binary:[5,4,1,""],get_custom_dataset_modelpath_pipeline_multiclass:[5,4,1,""],get_custom_dataset_modelpath_pipeline_regression:[5,4,1,""],load_adult_income_dataset:[5,4,1,""],load_custom_testing_dataset:[5,4,1,""],load_custom_testing_dataset_binary:[5,4,1,""],load_custom_testing_dataset_multiclass:[5,4,1,""],load_custom_testing_dataset_regression:[5,4,1,""],load_min_max_equal_dataset:[5,4,1,""],load_outcome_not_last_column_dataset:[5,4,1,""],ohe_min_max_transformation:[5,4,1,""]},"dice_ml.utils.helpers.DataTransfomer":{feed_data_params:[5,2,1,""],initialize_transform_func:[5,2,1,""],inverse_transform:[5,2,1,""],transform:[5,2,1,""]},"dice_ml.utils.sample_architecture":{vae_model:[6,0,0,"-"]},"dice_ml.utils.serialize":{DummyDataInterface:[5,1,1,""]},"dice_ml.utils.serialize.DummyDataInterface":{to_json:[5,2,1,""]},dice_ml:{Data:[0,1,1,""],Dice:[0,1,1,""],Model:[0,1,1,""],constants:[0,0,0,"-"],counterfactual_explanations:[0,0,0,"-"],data:[0,0,0,"-"],data_interfaces:[1,0,0,"-"],dice:[0,0,0,"-"],diverse_counterfactuals:[0,0,0,"-"],explainer_interfaces:[2,0,0,"-"],model:[0,0,0,"-"],model_interfaces:[3,0,0,"-"],schema:[4,0,0,"-"],utils:[5,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"],"3":["py","attribute","Python attribute"],"4":["py","function","Python function"],"5":["py","exception","Python exception"]},objtypes:{"0":"py:module","1":"py:class","2":"py:method","3":"py:attribute","4":"py:function","5":"py:exception"},terms:{"000":[7,18],"000000":[],"001":[7,18],"00632":14,"00s":13,"01292":2,"01301":[],"01381":14,"014":[],"01501":14,"01538":[],"019":[11,15,16],"01it":9,"02009":[],"02177":14,"02584":2,"02729":14,"02731":14,"02d":9,"02it":13,"03237":14,"03277":12,"034":14,"0351":14,"03578":14,"03799819946289":[],"03it":[9,11],"047000885009766":[],"04it":9,"04s":[],"050000":[],"055":[],"06129":[],"0622":14,"06905":14,"06911":14,"08221":14,"08s":13,"0900":14,"095":[],"099998":[],"09it":[],"100":[7,9,10,11,13,14,18],"1000":2,"1000k":2,"10469":[],"105":11,"108":[],"108001708984375":[],"10d3610aced6":[],"10it":13,"10k":2,"111":[],"112":[],"113":[],"11329":14,"114":[],"115":[],"117":12,"118":[],"121":12,"122":[],"123":[],"124":[],"125":[],"1296":14,"130":11,"14296":9,"147":14,"149":14,"150":14,"165":[11,12],"1676":9,"16it":11,"185":14,"187":14,"1907":2,"1912":12,"198":14,"19it":[],"19s":13,"2019":[7,18],"2020":[7,18],"2048":12,"205":11,"20900000000005":[],"2101":2,"21099999999999":14,"2119":[],"215":[],"216":14,"22027":9,"222":14,"224":[],"22599999999999":14,"235617":5,"23it":9,"242":14,"244":[],"245":[],"246":[],"248000000000026":[],"250000":[],"254":[],"255":14,"259":[],"260":[],"26048":12,"261":[],"262":[],"263":[],"265":11,"267":[],"283302":[],"28s":[],"295":[],"296":14,"300":14,"319":[],"3191":11,"329":14,"330":14,"3361":14,"33it":[],"344":12,"348":[],"35it":9,"377":14,"385":14,"386":14,"387":14,"389":14,"38it":10,"390":14,"391":14,"392":14,"394":14,"395":14,"396":14,"398":14,"401":14,"40999984741211":[],"40it":13,"415":[],"416":14,"41it":[],"421":14,"422":14,"428":14,"431":14,"433":14,"437":14,"443":14,"447":[],"450001":[],"454":14,"458":14,"4640007019043":[],"469":14,"46s":[],"471000000000004":[],"4798":14,"47s":[],"48it":13,"4917":14,"494":[],"4952":14,"500":2,"5000":[2,10],"505":14,"506":14,"50899887084961":[],"50k":[10,11,12],"525":16,"538":14,"54s":14,"558000000000014":[],"575":14,"59500000000002":14,"59it":13,"605":[],"607":[7,18],"61499999999999":14,"617":[7,18],"61it":11,"63it":10,"645":[],"6484":14,"655":11,"658":12,"65s":[],"665ab97996ff":[],"675":[],"68299865722656":[],"6947":14,"70500000000001":[],"71it":11,"72200000000001":[],"72it":14,"72s":[],"739":14,"741":[],"74it":13,"750000":[],"755":16,"76it":14,"785":[],"7872":[],"80it":13,"81899999999999":14,"81it":14,"827":[],"82it":13,"84800000000002":14,"853":[],"86it":[],"875":14,"87it":11,"885":14,"886":[],"887":[],"888":[],"889":[],"890":[],"891":[],"897":14,"9067":14,"90it":[],"911":16,"915":[],"923":14,"925000":[],"928999999999977":14,"92a433869455":[],"93it":10,"94it":[],"95500183105469":[],"957":14,"9608":9,"9671":14,"975":[],"97it":[],"982":14,"98it":14,"998":14,"boolean":[2,3],"case":[10,11,12,15,16],"class":[0,1,2,3,5,7,10,11,12,13,17,18],"default":[2,7,11,12,13,15,16,18],"final":[2,7,11,18],"float":[2,12],"function":[0,1,2,5,7,9,10,11,12,13,15,16,18],"import":[0,2,7,9,12,13,14,15,16,17,18],"int":[],"new":[0,2,7,10,11,12,13,14,15,16,18],"null":[10,14],"public":[0,1],"return":[0,1,2,3,5,9,11,12],"static":0,"super":12,"throw":1,"true":[0,1,2,3,5,10,11,12,13,14,15,16],"try":[7,9,11,12,13,15,18],"while":[11,12],AGE:14,Adding:[7,17],Age:[11,12],Being:[7,18],CFs:[2,11,12,13,14],DIS:14,For:[2,7,9,10,11,12,14,15,18],OHE:1,One:1,That:[10,11,12],The:[0,2,11,12,13,14,15,16],These:[2,10,11],Use:11,Used:2,Using:[7,11,18],With:[7,18],_2node:12,__init__:11,__version__:[11,15,16],_basedata:[0,1],_execution_engin:11,_generate_counterfactu:1,_setitem_single_column:9,abc:2,about:[0,1,12,16],abov:[11,12,15,16],abs:12,absenc:11,absolut:[1,2,7,15,16,18],accept:2,access:[0,7,11,12,17,18],account:[7,18],accuraci:[7,11,12,16,18],accuracy_scor:[],achiev:11,acknowledg:[7,15,18],across:[7,13,18],action:[7,18],activ:[7,12,18],actual:[2,7,18],adam:[2,7,18],adapt:12,add:[0,1,2,7,11,18],adding:[7,18],addit:[7,11,12,18],addition:[7,18],adher:1,adopt:[7,18],adpat:12,adult:[5,9,12,13,15,16],adult_data:5,adult_info:[11,12],advanc:[7,12,16,17],adversari:[7,18],affect:15,after:1,again:[2,12,13],age:[7,9,10,11,12,13,15,16,18],age_v:[],aggreg:[7,11,18],agnost:[7,9,11,18],agre:[7,18],agreement:[7,18],aim:[7,18],algorithm:[2,7,9,11,14,17,18],all:[0,1,2,3,7,9,10,11,14,15,16,18],allow:[2,7,11,12,15,18],alreadi:1,also:[2,7,10,11,12,13,15,18],altern:[7,18],amit:[7,9,11,12,18],among:11,amshar:[],analysi:5,analyt:[7,18],ani:[7,10,11,14,17,18],ann_model:[7,18],anoth:[11,12],answer:11,append:[9,10,11,13,14],appli:[7,11,18],approach:12,appropri:[0,7,18],approv:[7,18],approxim:[7,15,18],archiv:[5,9,11,12,13,15,16],argument:[10,11,12,14],around:11,arrai:[1,3],artifici:15,arug:12,arxiv:[2,12],as_counterfactual_explan:[],as_fram:14,aspx:11,assess:[7,18],assign:[2,7,15,18],assoc:[7,9,10,11,12,13,15,16,18],assum:1,assumpt:12,astyp:11,attribut:[2,7,12,17,18],author:[7,18],autoencod:[7,18],autograd:11,automat:[7,18],autoreload:[9,10,11,12,13,14,15,16],avail:[0,7,16,18],avg_dist:2,avoid:[2,12,14],axi:[9,10,11,13,14],bachelor:[7,9,10,11,12,13,15,16,18],back:[1,2],backend:[0,3,5,9,10,11,12,13,14,15,16],backendtyp:0,balanc:[7,18],bar:[7,18],base:[0,1,2,3,5,7,11,12,15,18],base_data_interfac:[0,8],base_model:[0,8],baselin:[11,12,16],basemodel:3,baseva:[7,12,18],basic:16,batch:[],batch_siz:12,bayesian:[7,18],becaus:12,been:[7,12,15,18],befor:15,behavior:15,behind:13,being:[7,11,18],belong:2,below:[0,10,11,12,13,14,15,16],best:13,better:[7,11,18],between:[1,2,7,11,16,17,18],bia:12,bibtex:[7,18],binar:[11,12],binari:[2,7,12,18],binary_crossentropi:[7,18],binarycrossentropi:[],black:11,blank:10,blog:[7,18],blue:[7,9,10,11,12,13,16,18],book:[7,18],booktitl:[7,18],bool:2,boston:14,boston_data:14,bot:[7,18],both:[1,7,9,10,12,13,14,15,18],box:11,bring:11,buffer_s:[],build:[10,13],build_kd_tre:2,built:16,c10:11,cabin:[],calcul:10,call:[2,5,12],can:[0,2,7,9,10,11,12,13,14,16,18],cannot:15,captur:[15,16],cat:[9,10,11,13,14],categor:[0,1,2,7,9,10,11,13,14,15,16,18],categori:[15,16],categorical_column:[],categorical_column_with_vocabulary_list:[],categorical_featur:14,categorical_feature_nam:9,categorical_penalti:2,categorical_transform:[9,10,11,13,14],caus:[10,11,12],causal:[7,18],cause1:2,cause2:2,cause_1:12,cause_n:12,caveat:[9,11],certain:11,cf_example_json_str:0,cf_examples_list:[0,2,10],cf_ix:2,cfs:2,cfs_arr:2,cfs_list:10,cha:14,chanc:[7,18],chang:[2,7,10,11,12,17,18],changeabl:[7,18],check:[1,2,7,9,11,18],check_features_to_vari:1,check_mad_valid:1,check_permitted_rang:[1,2],check_query_instance_valid:2,chenhao:[7,18],choic:[9,12],choos:[7,15,18],cla:[7,18],class_weight:[7,18],classif:[2,7,11,17],classifi:[0,2,3,7,9,10,11,13,14,18],classification_report:[],clf:[9,10,11,13],clf_iri:14,clone:[7,12,18],close:[2,11,13],closer:[7,15,18],closest:13,cobj:10,code:[2,7,11,12,14,18],col:1,col_index:[9,11],col_nam:[],collar:[7,9,10,11,12,13,15,16,18],colleg:[7,9,10,11,12,13,15,16,18],column:[1,7,9,10,11,12,13,14,18],columntransform:[9,10,11,13,14],com:[5,7,11,18],combin:[10,15],come:16,comment:[1,2,7,18],compani:[7,18],compar:[11,12,15,16],compat:[11,15,16],compil:[7,18],complement:[7,18],complet:[13,14],complex:[11,12],compon:11,compos:[9,10,11,13,14],comput:[1,2,7,11,15,18],compute_dist:2,compute_diversity_loss:2,compute_loss:2,compute_proximity_loss:2,compute_regularization_loss:2,compute_sparsity_loss:2,compute_yloss:2,concept:11,condit:[2,11],conduct:[7,18],confer:[7,18],configur:[5,11,13],consequ:11,conserv:[2,11],consid:[7,18],consider:11,consist:14,constant:[7,8,11,16],constrain:[11,12,13],constraint:[2,7,11,17,18],constraint_direct:2,constraint_reg:2,constraint_typ:2,constraint_vari:2,construct:[7,11,12,18],cont_maxx:5,cont_minx:5,contact:[7,18],contain:[0,1,2,3,12,14],containt:5,content:[7,8],continu:[0,1,2,7,11,12,13,15,16,18],continuous_featur:[7,9,10,11,12,13,14,15,18],continuous_features_boston:14,continuous_features_iri:14,contrast:13,contributor:[7,18],control:13,convei:15,conveni:[11,12],converg:[2,11,13],convert:[0,7,17],copi:[9,11,12],core:[7,9,11,14,18],correct:[2,16],correspond:2,could:[7,18],count:14,counterfactu:[0,2,17],counterfactual_explan:[7,8],counterfactualexampl:[0,2],counterfactualexplan:[0,2],cours:15,cpp:11,creat:[1,7,9,10,11,13,14,15,18],create_ohe_param:1,credit:[7,18],crim:14,crimin:[7,18],criterion:11,critic:[7,18],csv:[],cuda:11,cudafunct:11,current:[2,9,11,13],current_pr:2,current_pred_orig:2,custom:[7,11,17],d_boston:14,d_iri:14,data:[1,2,3,5,7,8,9,11,12,13,14,15,17,18],data_df:[5,10,11],data_df_copi:2,data_interfac:[0,2,5,8,10,11],data_nam:12,datafram:[1,2,7,9,10,11,12,13,14,15,18],dataset:[2,5,7,10,14,16,17,18],datasetx:[9,10,13,14],datatransfom:5,de_normalize_data:1,debug:[7,18],decid:[0,2,7,15,18],decide_cf_valid:2,decide_implementation_typ:0,decimal_prec:2,decis:[7,11,18],declar:[2,7,18],decod:12,decor:[7,18],decreas:12,deep:[7,17,18],deeplearn:[7,18],def:[],default_tim:9,defin:[1,2,5,7,11,15,17],definit:11,degre:[7,18],demonstr:[9,11,12,13,14,15],denot:11,dens:[7,18],densefeatur:[],depend:[7,18],dependendi:[7,18],deprec:[11,12,15,16],deriv:11,descent:2,describ:[5,7,9,11,12,13,18],descript:[11,12],deseri:0,desir:[2,7,11,13,14,18],desired_class:[0,2,7,9,10,11,12,13,14,15,16,18],desired_class_input:2,desired_rang:[0,2,10,14],desired_range_input:2,deta:5,detach:12,detail:[2,7,11,12,15,18],determin:[2,3,7,12,18],dev:[7,18],develop:[7,18],deviat:[1,7,15,16,18],devid:2,df_boston:14,df_iri:14,df_to_dataset:[],dice:[1,8,9,12,13,14,15,16,17],dice_exp:[7,9,11,12,15,16,18],dice_exp_genet:13,dice_exp_kd:13,dice_exp_random:[9,13],dice_genet:[0,8],dice_getting_start:16,dice_interfac:11,dice_kd:[0,8,9],dice_ml:[7,9,10,11,12,13,14,15,16,18],dice_pytorch:[0,8],dice_random:[0,8],dice_tensorflow1:[0,8],dice_tensorflow2:[0,8],dice_tensorflow:11,dicegenet:[0,2,13],dicekd:[0,2,13],dicepytorch:2,dicerandom:2,dicetensorflow1:2,dicetensorflow2:2,dict:[1,11],dictionari:[2,11,12,15,16],diff:2,differ:[0,2,3,7,10,11,12,13,14,16,18],differenti:[7,11,18],difficult:[7,15,18],difficulti:[7,15,18],dim:12,dimens:12,direct:12,directli:[10,16],discret:[1,11,12],discuss:[15,16],displai:13,display_df:0,display_sparse_df:0,display_warn:1,distanc:[2,7,11,15,16,18],distribut:[7,18],divers:[2,9,10,11,14,17],diverse_counterfactu:[2,7,8],diversecf:2,diversity_loss_typ:2,diversity_weight:[2,7,15,18],divid:[7,15,18],divmod:9,divorc:[7,10,11,12,13,16,18],do_binary_search:2,do_cf_initi:2,do_kd_init:2,do_linear_search:2,do_loss_initi:2,do_optimizer_initi:2,do_param_initi:2,do_posthoc_sparsity_enhanc:2,do_random_init:2,do_sparsity_check:2,doc:[7,9,11,18],doctor:[7,10,11,12,13,15,16,18],document:[9,11],doe:[7,11,18],domain:[7,18],done:[7,16,18],download:11,downsampl:10,downstream:2,dpp:2,dpp_style:2,driver:11,drop:[9,10,11,13,14],dropout:[],dtype:[12,14],due:[7,18],dummi:1,dummy_data:10,dummydatainterfac:5,dump_patch:12,duplic:2,dure:[5,13],each:[0,2,7,9,10,11,12,13,16,18],eager:[11,16],eas:[7,15,18],easi:11,easili:11,edu:[5,9,11,12,13,15,16],educ:[7,9,10,11,12,13,15,16,18],education_assoc:12,education_bachelor:12,education_doctor:12,education_h:12,education_mast:12,education_prof:12,education_school:12,education_som:12,effect:[2,12],effici:13,either:[2,11],elapsed_genet:9,elapsed_kd:9,elapsed_random:9,elif:0,els:[1,2,9,12],embark:[],emploi:[7,9,10,11,12,13,15,16,18],enabl:[7,18],encod:[1,2,5,12,15],encoded_s:[5,12],encourag:2,end:[7,11,18],english:[7,18],enhanc:2,enough:[7,18],ensembl:[9,10,11,13,14],ensur:[2,7,13,18],entri:14,env3:[9,11,12],env:[9,11,12],epoch:[5,7,12,18],equal:[2,15,16],error:[5,11,14,15,16],especi:[7,18],estim:[0,2,7,11,17,18],evalu:[7,18],even:[7,11,12,18],everi:[2,11],exampl:[0,2,7,10,12,13,16,17,18],except:[0,8,11],exception_messag:5,execut:[5,11,16],exist:2,exp:[7,10,11,12,15,16,18],exp_genet:[9,13],exp_genetic_boston:14,exp_genetic_iri:14,exp_kd:[9,13],exp_random:[9,13],experi:12,experiment:11,explain:[1,2,7,17,18],explainer_bas:[0,8],explainer_interfac:[0,8],explainerbas:[0,2],explan:[0,2,17],explicit:[7,11,18],explor:[7,11,18],extrem:15,face:[7,18],factor:15,fair:[7,18],fall:[1,15],fals:[0,1,2,3,9,11,13],faq:[7,18],fare:[],fareast:[],fast:12,fat:[7,18],feasibl:[11,13,15,17],feasible_base_va:[0,8,12],feasible_model_approx:[0,8,12],feasiblebaseva:[2,12],feasiblemodelapprox:[2,7,17],featur:[0,1,2,7,9,12,14,16,17,18],feature_column:[],feature_import:2,feature_lay:[],feature_nam:[10,14],feature_names_including_target:10,feature_rang:2,feature_range_input:1,feature_ranges_orig:2,feature_weight:[1,2,7,15,16,18],features_to_vari:[1,2,7,10,11,13,18],fed:[1,2,5],feed:[],feed_data_param:5,femal:[7,9,10,11,12,13,15,16,18],few:[0,15],fillna:[],final_cfs_df:0,final_cfs_df_spars:0,final_cfs_spars:2,final_indic:2,financ:[7,18],financi:[7,18],find:[2,7,11,13,16,18],find_counterfactu:2,first:[2,10,11,12],fit:[7,9,10,11,12,13,14,18],fixed_features_valu:2,flag:2,flip:[7,18],float64:14,folder:[7,18],follow:[2,7,11,18],forest:[],form:[1,11,12,15,16],formal:11,format:[1,2],formul:11,found:[11,12,13,15,16],four:11,fourth:12,frame:[11,14],framework:[0,2,3,12,13,15],freeli:13,frequenc:11,from:[1,2,5,7,9,10,11,12,13,14,15,16,18],from_dummi:1,from_json:[0,10],from_label:1,from_logit:[],from_tensor_slic:[],full:[7,9,10,11,12,13,14,18],func:[0,3,5],functiontransform:5,further:13,futur:[7,11,18],futurewarn:[],geco:2,gender:[7,9,10,11,12,13,15,16,18],gender_femal:12,gender_mal:12,gener:[2,5,10,17],generate_counterfactu:[2,7,9,10,11,12,13,14,15,16,18],genet:[0,2,7,9,11,14,17,18],genetic_boston:14,genetic_iri:14,get:[1,2,5,15],get_adult_data_info:[5,10,11,12],get_adult_income_modelpath:[5,7,11,12,15,16,18],get_base_gen_cf_initi:5,get_continuous_sampl:2,get_custom_dataset_modelpath_pipelin:5,get_custom_dataset_modelpath_pipeline_binari:5,get_custom_dataset_modelpath_pipeline_multiclass:5,get_custom_dataset_modelpath_pipeline_regress:5,get_data_params_for_gradient_dic:1,get_data_typ:1,get_decimal_precis:1,get_decoded_data:1,get_encoded_categorical_feature_index:1,get_features_rang:1,get_gradi:3,get_indexes_of_features_to_vari:1,get_inverse_ohe_min_max_normalized_data:1,get_mad:[1,15],get_minx_maxx:1,get_model_output:2,get_model_output_from_scor:2,get_num_output_nod:3,get_num_output_nodes2:3,get_ohe_min_max_normalized_data:1,get_output:3,get_quantiles_from_training_data:1,get_sampl:2,get_valid_feature_rang:[1,2],get_valid_mad:1,give:[11,13],given:[2,7,10,11,12,13,14,16,18],global:[0,2,7,17,18],global_feature_import:[2,10,11],global_import:2,goal:[7,13,17],govern:[7,10,11,12,13,16,18],gpu:11,grad:[7,9,10,11,12,13,15,16,18],gradient:[0,2,7,11,18],graident:[],grant:[7,18],graph:[11,16],greater:[11,16],greedi:2,greedili:2,guid:2,h5py:[7,18],h_zhu:5,handl:15,handle_unknown:[9,10,11,13,14],happen:5,harder:[7,15,18],hardli:[7,18],has:[2,7,11,12,18],have:[7,9,10,11,12,13,14,15,18],head:[9,11,12,13,14,15],header:[],healthcar:[7,18],help:[7,11,15,18],helper:[0,7,8,9,10,11,12,13,15,16,18],henc:[0,15,16],here:[7,12,13,15,18],high:[2,7,11,12,16,18],higher:[7,11,15,18],highlight:[7,11,18],hinge_loss:[2,9],histori:[7,18],hoc:2,hold:2,home:[9,11,12],hot:[1,2,5,15],hotel:[7,18],hour:[7,10,11,12,15,18],hours_per_week:[7,9,10,11,12,13,15,16,18],hous:14,how:[7,10,11,12,13,14,15,18],howev:[7,11,12,15,16,18],html:[5,9,11,14],http:[2,5,7,9,11,12,13,14,15,16,18],hyperparamet:2,hyperparamt:2,ics:[5,9,11,12,13,15,16],idea:[7,13,18],ideal:[7,11,18],ident:14,ignor:[2,9,10,11,13,14],iloc:9,imp:[10,11],imp_r:10,implement:[0,2,3,7,9,11,13,16,18],impli:[12,15],implicit:12,importerror:[],imposs:[7,11,18],improv:[7,18],imput:[],in_featur:12,includ:[2,11,12],incom:[2,5,7,9,10,11,12,13,15,16,18],increas:[12,13,15],independ:[7,9,17],index:[1,7,9,11,12],indic:[2,3,5,11,16],indicator_column:[],individu:[7,11,15,18],indu:14,industri:[10,11,12],infeas:12,infer:[1,2,12],infer_target_cfs_class:2,infer_target_cfs_rang:2,info:[11,14,16],inform:[0,1,7,14,16,18],init_near_query_inst:2,initi:[2,11,12,13,14,15,16],initialize_cf:2,initialize_transform_func:5,initil:[7,17],inp_siz:3,inplac:[],inproceed:[7,18],input:[0,1,2,3,7,10,11,12,14,15,18],input_inst:[2,3],input_shap:[7,18],input_tensor:3,inspect:11,instal:11,instanc:[0,1,2,7,10,11,12,13,14,15,16,18],instanti:[11,12],instead:[1,9,11,16],instruct:[7,18],int64:14,intend:12,interactivesess:[7,18],interest:[2,7,11,18],interfac:[0,1,2,3,11,16],intermedi:2,intern:[5,7,11,14,15,18],interpret:[2,7,10,18],interv:2,intial:2,introduct:[7,17],intuit:[10,11],invers:[2,15,16],inverse_dist:2,inverse_mad:2,inverse_transform:5,invok:[7,18],ipython:[],iri:14,iris:14,is_cf_valid:2,isinst:[],issu:[7,13,18],item:[],iter:2,itr:2,its:[2,7,12,18],itself:13,json:[0,7,17],json_convert:0,json_dict:[],json_str:[0,10],judg:[7,18],jupyt:[7,18],just:[11,14],justic:[7,18],kd_query_inst:2,kdtree:[0,9,13,14],keep:11,kei:[2,11,12,15,16],kera:[3,7,18],keras_tensorflow_model:[0,8],kerastensorflowmodel:3,kernel_regular:[7,18],kind:[7,11,18],know:[11,16],known:11,kw_arg:[0,3,5],kwarg:[0,2],l2_loss:2,label:[1,2,7,18],label_decod:2,label_decode_cf:2,label_encod:2,labelled_input:2,languag:[7,18],larg:2,larger:[2,11],last:[7,11,18],latest:[7,12,18],law:[7,18],layer:[7,18],lead:[7,11,18],learn:[2,5,7,9,12,13,14,15,16,17,18],learning_r:[2,5],leav:10,len:[],length:14,less:[11,13,15],let:15,level:[0,1,2,7,10,11,12,15,18],lib:[9,11,12],librari:[11,12,14,15],licens:[7,18],lie:14,like:[7,10,11,12,18],likelihood:11,lime:[7,11,18],limit:11,linear:[2,7,12,18],list:[0,1,2,7,12,18],live:[7,18],load:[5,7,17],load_adult_income_dataset:[5,7,9,10,11,12,13,15,18],load_boston:14,load_custom_testing_dataset:5,load_custom_testing_dataset_binari:5,load_custom_testing_dataset_multiclass:5,load_custom_testing_dataset_regress:5,load_ext:[9,10,11,12,13,14,15,16],load_iri:14,load_min_max_equal_dataset:5,load_model:[3,12],load_outcome_not_last_column_dataset:5,loan:[7,18],loc:[7,9,11,18],local:[0,2,7,12,17,18],local_feature_import:[2,10,11],local_import:[0,2,10,11],log:[11,15,16],log_loss:2,logic:11,loop:[0,9],loss:[2,7,11,18],loss_converge_maxit:[2,11],loss_diff:2,loss_diff_thr:2,low:[2,7,11,12,18],lower:[7,18],lstat:14,m_boston:14,m_genet:9,m_iri:14,m_kd:9,m_random:9,machin:[7,9,11,12,13,15,16,18],mad:[1,2,7,14,15,16,18],made:[7,11,18],mahajan:[7,18],mai:[7,11,15,18],main:2,make:[1,7,13,18],maker:[7,18],male:[7,9,10,11,12,13,15,16,18],mani:[2,11],manual:[7,16,18],margin:[5,12],marit:[10,11,12],marital_statu:[7,9,10,11,12,13,15,16,18],marital_status_divorc:12,marital_status_marri:12,marital_status_separ:12,marital_status_singl:12,marital_status_widow:12,marri:[7,9,10,11,12,13,15,16,18],master:[7,10,11,12,15,16,18],mate:2,matrix:2,max:[1,2,5,7,9,18],max_it:2,maximum:2,maxiter:2,mead:2,mean:[7,11,12,15,18],mean_absolute_error:[],measur:[7,10,15,18],median:[1,2,7,15,16,18],memori:14,messag:[2,5],meta:[0,1,5,7,17],metadata:[0,7,10,16,18],method:[0,1,2,3,10,11,12,13,14,16],method_nam:13,metric:[2,7,11,18],microsoft:[7,18],might:12,min:[1,2,5,7,9,11,13,15,16,18],min_it:2,minim:11,minimum:2,misc_init:2,ml_modelpath:[11,12,15,16],mlpclassifi:[],mnt:[],mode:[3,7,18],model:[2,3,5,7,8,17,18],model_boston:14,model_interfac:[0,2,8],model_iri:14,model_out:2,model_output:2,model_path:[0,3,7,11,12,15,16,18],model_scor:[2,3],model_select:[9,10,11,13,14],model_typ:[0,2,10,14],modelapprox:[7,17],modeltyp:0,modifi:9,modul:[7,8,9,11,12,13,15],monoton:[2,12],more:[0,2,7,10,12,14,15,17,18],most:[7,15,18],mothil:[7,18],mothilal2020dic:[7,18],move:2,msg:12,multi:[7,11,17,18],multiclass:[2,7,17],multipl:[7,11,14,15,18],n_estim:[],name:[0,1,2,11,12,15,16],nameerror:[],nearbi:11,nearest:2,necess:[7,10,11,18],necessari:[1,2,11],need:[1,7,10,11,12,18],neg:2,neither:11,nelder:2,network:[7,15,18],neural:[7,15,18],neural_network:[],never:12,next:[7,17,18],non:[14,15],none:[0,1,2,3,5,10,12],nonetheless:16,nor:11,normal:[1,2,5,15,16],normalize_data:[1,7,18],note:[11,12,13,15,16],notebook:[7,9,11,12,13,14,16,17,18],notic:12,now:[7,9,10,11,12,13,14,15,18],nox:14,num:[9,10,13,14],num_init:2,num_loop:9,num_output_nod:2,number:[0,1,2,9,11,15],numer:[1,9,10,11,13,14],numeric_column:[],numeric_transform:[9,10,13,14],numpi:[7,9,15,18],nvidia:11,obj:0,object:[0,2,3,5,7,11,12,13,15,17],observ:[13,15,16],obtain:11,occup:[7,9,10,11,12,13,15,16,18],occupation_blu:12,occupation_oth:12,occupation_profession:12,occupation_sal:12,occupation_servic:12,occupation_whit:12,odd:15,off:[2,7,17],offspr:2,often:[10,11],ohe_min_max_transform:5,onc:[7,14,18],one:[0,1,2,5,7,11,15,18],one_hot_encode_data:1,one_hot_encoded_data:[7,18],onehot:[9,10,11,13,14],onehotencod:[9,10,11,13,14],onli:[0,2,7,11,12,13,16,18],only_train:5,open:[7,18],opencod:[7,18],oper:2,operation:11,opposit:[0,2,7,10,11,12,13,15,16,18],optim:[2,7,11,12,15,18],option:[2,7,11,17,18],oraclegencf:12,order:[15,16],ordereddict:16,org:[2,5,9,11,12,14],origin:[1,2,7,10,11,12,13,14,15,16,18],original_pr:2,other:[2,7,9,10,11,12,13,15,16,18],other_paramet:2,our:[7,11,12,13,15,16,18],out:[7,11,18],out_featur:12,outcom:[2,5,7,10,11,12,13,14,15,16,18],outcome_nam:[5,7,9,10,11,12,13,14,15,16,18],outlier:15,output:[0,2,3,7,11,12,13,17,18],output_typ:1,outsid:11,over:[2,7,15,17],overal:2,own:[],packag:[7,8,9,11,12,16,18],page:[7,18],panda:[2,7,9,11,14,18],paper:[2,7,11,12,15,16,18],param:[0,1],paramet:[0,2,3,5,7,11,13,14,15,16,18],parameter:11,parch:[],part:2,particular:[7,10,11,15,16,18],pass:13,passengerid:[],patch:12,pclass:[],pdf:2,penalti:12,peopl:[7,18],per:[2,7,10,11,12,15,18],perform:2,perhap:[11,13],permiss:[7,18],permit:[2,11,13],permitted_rang:[1,2,7,10,11,13,18],permitted_range_input:1,person:[7,11,15,18],perturb:[7,11,12,15,18],petal:14,phrase:[7,18],pip:[7,18],pipelin:[9,10,11,13,14],plan:[7,18],plant:14,pleas:[7,11,13,16,18],point:[0,2,10,11,12,13],poor:[7,18],pop:[],popular:16,posit:2,possibl:[7,11,15,18],post:[2,7,18],posthoc_sparsity_algorithm:2,posthoc_sparsity_param:[0,2,10],potenti:[7,18],practic:[1,7,11,18],pre:[2,7,11,12,18],pre_train:[2,12],precis:[1,2],precomput:2,predict:[2,3,5,7,9,10,11,12,13,14,18],predict_fn:2,predict_fn_for_spars:2,predict_fn_scor:2,predicted_outcome_nam:2,prefer:2,prefix_sep:1,preliminari:[7,17],prepar:[1,5],prepare_df_for_ohe_encod:1,prepare_query_inst:1,preprocess:[5,9,10,11,13,14],preprocessor:[9,10,11,13,14],present:12,preserv:12,preval:[15,16],previous:13,price:14,print:[2,9,10,11,12,15],print_list:0,privaci:11,privat:[0,1,7,9,10,11,12,13,15,16,18],private_data_interfac:[0,8],privatedata:1,probabl:[2,3],probe:[7,18],problem:[2,7,18],problemat:[7,18],proceed:[7,18],process:[7,18],prodcu:12,produc:[2,11,12,13,16],prof:[7,10,11,12,13,15,16,18],profession:[7,9,10,11,12,13,15,16,18],profil:[7,15,18],progress:[],project:[2,7,18],project_it:2,promot:13,properti:[0,7,18],prototyp:2,provid:[1,2,7,10,11,12,13,14,15,16,18],proxim:[7,10,11,17,18],proximity_weight:[2,7,15,18],pth:12,ptratio:14,public_data_interfac:[0,8,11],publicdata:1,pull:[7,18],purpos:[9,11,12,15],pydata:[9,11],pypi:[7,18],pyt:[0,3,11,12,16],python3:[9,11,12],python:[7,16,18],pytorch:[0,2,3,7,9,12,13,16,17,18],pytorch_model:[0,8,12],pytorchmodel:[3,12],qualiti:2,quantil:1,queri:[2,7,9,10,11,12,14,15,16,17],query_inst:[1,2,7,9,10,11,12,13,15,16,18],query_instance_df_dummi:2,query_instance_norm:2,query_instance_orig:2,query_instances_boston:14,query_instances_iri:14,query_instances_list:[],question:[7,11,18],quick:[7,17],quickli:13,race:[7,9,10,11,12,13,15,16,18],race_oth:12,race_whit:12,rad:14,rais:[7,18],ramaravind:[7,18],random:[0,2,7,9,10,11,14,15,17,18],random_se:[2,13],random_st:[9,10,11,13,14],randomforestclassifi:[9,10,11,13,14],randomforestregressor:14,randominitcf:2,randomli:13,randomsampl:0,rang:[0,1,2,7,9,11,14,15,16,18],rangeindex:14,rank:11,ranomd:[],rate:2,rather:[11,12],raw:1,reach:15,read_csv:[],real:2,reason:[11,15],receiv:[7,11,18],recent:[7,18],recommend:12,recours:[7,18],reduc:10,refer:[11,12],refin:11,reflect:[7,15,18],regr_boston:14,regress:[2,7,10,11,17],regressor:[0,3,7,11,14,18],regular:[7,18],reject:[7,18],rel:[7,11,15,16,18],relat:[1,2,11],relationship:2,releas:11,relu:[7,12,18],remain:1,remov:[1,2],repeat:12,replac:14,replic:11,repo:[7,18],repositori:[9,11,12,13,15,16],repres:10,reproduc:[2,15],request:[7,18],requir:[0,1,2,3,7,11,12,13,16,18],requires_grad_:12,res:[],research:[7,18],resourc:[7,17],respect:[15,16],rest:14,restrict:11,result:[0,2,11,12,16],resutl:15,retriev:12,return_mad:1,revers:11,revert:12,ride:15,right:[7,18],rigor:11,robust:15,root:[14,16],round:[2,15],round_off_cf:2,round_to_precis:2,row:[2,11],row_index:[9,11],rpub:5,run:[2,7,12,15,18],run_backward:11,runtim:9,s_genet:9,s_kd:9,s_random:9,sale:[7,9,10,11,12,13,16,18],same:[1,2,7,11,12,13,16,18],sampl:[2,7,9,10,11,12,16,17,18],sample_architectur:[0,5,12],sample_s:2,sampling_random_se:2,sampling_s:2,samplingstrategi:0,scale:[15,16],scaler:[9,10,13,14],scenario:11,schema:[0,8],school:[7,9,10,11,12,13,15,16,18],scienc:[7,18],scikit:[5,7,9,13,14,18],scipy_optim:2,scmgencf:12,score:[0,2,3,7,17,18],search:[2,7,11],sec:[9,11,13,15,16],second:[2,12],section:12,see:[2,7,9,11,12,14,15,18],seed:[2,13,15],select:[7,15,18],self:[7,9,10,11,12,13,15,16,18],sens:13,sensit:[7,11,18],sepal:14,separ:[7,10,11,12,13,16,18],sequenti:[7,12,18],seri:14,serial:[0,8,12],serialization_vers:0,servic:[7,9,10,11,12,13,15,16,18],sess:[7,18],set:[0,1,2,7,9,10,11,12,13,14,15,16,18],set_eval_mod:3,set_random_se:15,set_se:15,set_verbos:[11,15,16],setosa:14,settingwithcopywarn:[9,11],setup:[2,7,18],seven:15,sex:[],shap:[7,11,18],shape:[7,12,18],share:2,sharma:[7,18],should:[1,2,7,11,16,18],show:[7,9,10,11,12,13,15,16,18],show_only_chang:[0,10,11,12,13,14,15,16],shown:[0,11,13,16],shuffl:[],sibsp:[],sigmoid:[2,7,18],significantli:[10,11,16],similar:[2,7,12,18],similarli:11,simpl:[2,7,11,12,18],simpleimput:[],simplest:11,simpli:[7,11,18],simul:16,sinc:[11,12,13,15,16],singl:[1,2,7,9,10,11,12,13,14,15,16,18],singleton:3,site:[9,11,12],size:[0,2],sklearn:[0,3,5,7,9,10,11,13,14,18],sklearn_dataset:[],sklearn_to_df:[],slice:[9,11],slightli:11,slow:[],slower:11,snippet:11,societ:[7,18],softmax:12,some:[5,7,9,10,11,12,13,15,16,18],soon:[9,12,13],sound:15,sourc:[0,1,2,3,5,7,12,18],sourcechangewarn:12,sourcetensor:12,space:11,spars:[11,13],sparsiti:[2,11,13,16],sparsity_weight:2,specif:[2,7,14,18],specifi:[0,7,11,12,15,18],split:[9,10,11,13,14],split_data:[7,18],stabl:[5,7,9,11,14,18],stakehold:[7,18],standard:15,standardscal:[9,10,13,14],start_tim:9,statu:[10,11,12],step:[7,9,10,11,13,14,15,18],still:[12,16],stop:2,stop_loop:2,stopping_threshold:2,store:[0,2],str:[5,11],stratifi:[9,10,11,13,14],string:[0,2],structured_data:[],studi:[7,18],style:[11,16],subclass:[2,3],subject:[7,18],submethod:2,submit:[7,18],submodul:[7,8],subpackag:[7,8],success:2,suffici:[7,11,18],suggest:[7,18],sum:2,summar:[2,11],summari:[10,11],summary_import:[0,10,11],support:[1,2,9,11,13],supress:[11,15,16],surviv:[],system:[5,7,11,18],systemexcept:5,tabl:[15,18],take:[2,15],taken:[9,11,13,15,16],tan:[7,18],target:[2,9,10,11,13,14],target_col:[],target_label:2,tax:14,templat:[2,3],tend:11,tensor:12,tensorflow1:0,tensorflow2:[0,15],tensorflow:[0,2,3,7,9,12,13,15,16,17,18],tensorflow_optim:2,term:11,test:[1,2,3,7,9,10,11,13,14,16,18],test_d:[],test_data:10,test_dataset:11,test_instance_df:0,test_pr:2,test_siz:[9,10,11,12,13,14],tf1:[0,3,5,11,15,16],tf2:[0,3,11,16],than:[7,11,12,13,15,16,18],thei:[1,7,11,13,18],them:[1,15,16],therefor:[7,11,18],thi:[1,2,5,7,9,10,11,12,13,14,15,16,18],third:[2,12],those:[7,10,11,16,18],three:[7,9,11,13,15,18],thresh:2,threshold:2,through:[2,7,11,15,16,18],thu:[7,15,18],ticket:[],tie_random:2,time:[2,9,10,11,12,13,15,16],timeit:9,titan:[7,18],titl:[7,18],to_json:[0,5,10],todo:[1,2],tolist:14,too:[7,12,18],tool:12,top:[7,18],torch:[11,12],total:[2,9,10,11,12,13,14,15,16],total_cf:[2,7,9,10,11,12,13,14,15,16,18],toward:[2,7,11,12,18],toy_dataset:14,tqdm:[7,18],traceback:[],trade:[7,17],train:[0,1,2,3,7,10,12,14,15,17,18],train_d:[],train_dataset:11,train_siz:[],train_test_split:[9,10,11,13,14],transform:[1,2,3,5,9,10,11,12,13,14,15],transform_data:3,transformed_data:1,translat:11,transpar:[7,18],tree:[2,7,9,11,17,18],trigger:11,trust:[7,18],truth:[7,18],tunabl:[2,7,15,18],tutori:[],two:[2,7,11,12,16,18],txt:[7,18],type:[0,1,10,11,12,14,16],typic:[7,18],uci:[5,9,11,12,13,15,16],unari:[2,12],uncov:[7,18],under:12,understand:[7,11,18],unifi:11,uniform:9,uniqu:9,unit:[7,15,18],unknown:[7,10,11,12,13,15,16,18],unlik:12,until:2,updat:2,update_hyperparamet:2,usag:14,use:[9,10,11,12,13,14,15,16],used:[0,1,2,7,10,11,13,14,15,16,18],useful:[7,11,18],user:[1,2,5,7,15,18],user_guid:[9,11],userconfigvalidationexcept:5,userwarn:[11,12],uses:[2,16],using:[7,9,13,14,16,17,18],util:[0,7,8,9,10,11,12,13,15,16,18],vae:[2,7,11,17,18],vae_model:[0,5,12],val:[],val_d:[],valid:[1,5,7,11,18],validation_data:[],validation_split:[7,18],validity_reg:[5,12],valu:[1,2,3,7,9,10,11,12,14,15,16,18],valueerror:[],vari:[2,7,11,15,18],variabl:[2,11,12,15,16],variat:[7,12,18],vary_valid:2,vector:2,verbos:[2,7,9,13,18],veri:15,versa:[1,12],versicolour:14,version:[0,7,10,18],versu:[9,11],vice:[1,12],vidhya:[7,18],view:[9,11],virginica:14,visit:[7,18],visual:[0,2,7,11,12,15,16,18],visualize_as_datafram:[0,7,10,11,12,13,14,15,16,18],visualize_as_list:0,wai:[7,11,12,15,18],want:[11,13,16],warn:[1,11,12,14,15,16],week:[7,10,11,12,15,18],weigh:11,weight:[2,7,12,16,17,18],welcom:[7,18],well:[7,18],what:[7,15,17,18],when:[1,2,7,11,15,16,18],where:[1,2,11,12,15,16],whether:[2,7,11,12,18],which:[2,7,11,12,16,18],white:[7,9,10,11,12,13,15,16,18],who:[7,18],whose:[0,11,12],why:[7,15,18],wide:[7,18],widow:[7,10,11,12,13,16,18],width:14,wish:13,within:[7,11,13,18],without:[7,11,12,17],wm1:[5,12],wm2:[5,12],wm3:[5,12],word:[7,18],work:[1,7,9,10,12,13,15,17,18],workclass:[7,9,10,11,12,13,15,16,18],workclass_govern:12,workclass_oth:12,workclass_priv:12,workclass_self:12,world:[7,18],worsen:13,would:[7,11,12,15,18],www:11,x_hat:2,x_hat_unnorm:2,x_i:11,x_test:[9,10,11,13,14],x_train:[7,9,10,11,13,14,18],x_valid:[],y_test:[9,10,11,13,14],y_train:[7,9,10,11,13,14,18],y_valid:[],year:[7,11,18],yet:[7,18],yield:10,yloss_typ:[2,9],you:[7,9,11,12,13,14,16,18],your:[7,11,18]},titles:["dice_ml package","dice_ml.data_interfaces package","dice_ml.explainer_interfaces package","dice_ml.model_interfaces package","dice_ml.schema package","dice_ml.utils package","dice_ml.utils.sample_architecture package","Diverse Counterfactual Explanations (DiCE) for ML","dice_ml","Benchmarking different CF explanation methods","Estimating local and global feature importance scores using DiCE","Quick introduction to generating counterfactual explanations using DiCE","Generate feasible counterfactual explanations using a VAE","Generating counterfactual explanations with any ML model","Generating counterfactuals for multi-class classification and regression models","Advanced options to customize Counterfactual Explanations","Generating Counterfactual Explanations without access to training data","<no title>","Diverse Counterfactual Explanations (DiCE) for ML"],titleterms:{"case":[7,18],"class":14,"import":[10,11],Adding:12,The:[7,18],access:16,adult:11,advanc:15,algorithm:13,ani:13,attribut:11,base_data_interfac:1,base_model:3,benchmark:9,between:15,chang:15,choos:13,cite:[7,18],classif:14,constant:0,constraint:12,content:[0,1,2,3,4,5,6],contribut:[7,18],convert:10,counterfactu:[7,9,10,11,12,13,14,15,16,18],counterfactual_explan:0,custom:[13,15],data:[0,10,16],data_interfac:1,dataset:[9,11,12,13,15],deep:11,defin:16,dice:[0,7,10,11,18],dice_genet:2,dice_kd:2,dice_ml:[0,1,2,3,4,5,6,8],dice_pytorch:2,dice_random:2,dice_tensorflow1:2,dice_tensorflow2:2,differ:9,divers:[7,13,15,16,18],diverse_counterfactu:0,estim:10,exampl:11,except:5,explain:[11,12],explainer_bas:2,explainer_interfac:2,explan:[7,9,11,12,13,15,16,18],feasibl:[7,12,18],feasible_base_va:2,feasible_model_approx:2,feasiblemodelapprox:12,featur:[10,11,13,15],gener:[7,9,11,12,13,14,15,16,18],genet:13,get:[7,18],global:[10,11],goal:15,helper:5,independ:13,indic:7,initi:9,initil:12,instal:[7,18],introduct:11,json:10,keras_tensorflow_model:3,learn:11,load:[9,10,11,12,13,15,16],local:[10,11],meta:16,method:[7,9,18],model:[0,9,10,11,12,13,14,15,16],model_interfac:3,modelapprox:12,modul:[0,1,2,3,4,5,6],more:11,multi:14,multiclass:14,next:11,object:10,off:15,option:15,output:10,over:11,packag:[0,1,2,3,4,5,6],preliminari:[10,11],private_data_interfac:1,promis:[7,18],proxim:15,public_data_interfac:1,pytorch:11,pytorch_model:3,queri:13,quick:11,random:13,rang:13,regress:14,resourc:11,roadmap:[7,18],sampl:13,sample_architectur:6,schema:4,score:[10,11],select:13,serial:5,start:[7,18],submodul:[0,1,2,3,5,6],subpackag:[0,5],support:[7,18],tabl:7,tensorflow:11,trade:15,train:[9,11,13,16],tree:13,use:[7,18],using:[10,11,12],util:[5,6],vae:12,vae_model:6,vari:13,weight:15,what:11,without:16,work:11}}) \ No newline at end of file +Search.setIndex({docnames:["dice_ml","dice_ml.data_interfaces","dice_ml.explainer_interfaces","dice_ml.model_interfaces","dice_ml.schema","dice_ml.utils","dice_ml.utils.sample_architecture","index","modules","notebooks/Benchmarking_different_CF_explanation_methods","notebooks/DiCE_feature_importances","notebooks/DiCE_getting_started","notebooks/DiCE_getting_started_feasible","notebooks/DiCE_model_agnostic_CFs","notebooks/DiCE_multiclass_classification_and_regression","notebooks/DiCE_with_advanced_options","notebooks/DiCE_with_private_data","notebooks/Untitled","notebooks/nb_index","readme"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":4,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":3,"sphinx.domains.rst":2,"sphinx.domains.std":2,"sphinx.ext.todo":2,"sphinx.ext.viewcode":1,nbsphinx:4,sphinx:56},filenames:["dice_ml.rst","dice_ml.data_interfaces.rst","dice_ml.explainer_interfaces.rst","dice_ml.model_interfaces.rst","dice_ml.schema.rst","dice_ml.utils.rst","dice_ml.utils.sample_architecture.rst","index.rst","modules.rst","notebooks/Benchmarking_different_CF_explanation_methods.ipynb","notebooks/DiCE_feature_importances.ipynb","notebooks/DiCE_getting_started.ipynb","notebooks/DiCE_getting_started_feasible.ipynb","notebooks/DiCE_model_agnostic_CFs.ipynb","notebooks/DiCE_multiclass_classification_and_regression.ipynb","notebooks/DiCE_with_advanced_options.ipynb","notebooks/DiCE_with_private_data.ipynb","notebooks/Untitled.ipynb","notebooks/nb_index.rst","readme.rst"],objects:{"":[[0,0,0,"-","dice_ml"]],"dice_ml.Data":[[0,2,1,"","decide_implementation_type"]],"dice_ml.Dice":[[0,2,1,"","decide_implementation_type"]],"dice_ml.Model":[[0,2,1,"","decide_implementation_type"]],"dice_ml.constants":[[0,1,1,"","BackEndTypes"],[0,1,1,"","ModelTypes"],[0,1,1,"","SamplingStrategy"]],"dice_ml.constants.BackEndTypes":[[0,3,1,"","ALL"],[0,3,1,"","Pytorch"],[0,3,1,"","Sklearn"],[0,3,1,"","Tensorflow1"],[0,3,1,"","Tensorflow2"]],"dice_ml.constants.ModelTypes":[[0,3,1,"","ALL"],[0,3,1,"","Classifier"],[0,3,1,"","Regressor"]],"dice_ml.constants.SamplingStrategy":[[0,3,1,"","Genetic"],[0,3,1,"","KdTree"],[0,3,1,"","Random"]],"dice_ml.counterfactual_explanations":[[0,1,1,"","CounterfactualExplanations"]],"dice_ml.counterfactual_explanations.CounterfactualExplanations":[[0,4,1,"","cf_examples_list"],[0,2,1,"","from_json"],[0,4,1,"","local_importance"],[0,4,1,"","metadata"],[0,4,1,"","summary_importance"],[0,2,1,"","to_json"],[0,2,1,"","visualize_as_dataframe"],[0,2,1,"","visualize_as_list"]],"dice_ml.data":[[0,1,1,"","Data"],[0,5,1,"","decide"]],"dice_ml.data.Data":[[0,2,1,"","decide_implementation_type"]],"dice_ml.data_interfaces":[[1,0,0,"-","base_data_interface"],[1,0,0,"-","private_data_interface"],[1,0,0,"-","public_data_interface"]],"dice_ml.data_interfaces.private_data_interface":[[1,1,1,"","PrivateData"]],"dice_ml.data_interfaces.private_data_interface.PrivateData":[[1,2,1,"","create_ohe_params"],[1,2,1,"","de_normalize_data"],[1,2,1,"","from_dummies"],[1,2,1,"","from_label"],[1,2,1,"","get_data_params_for_gradient_dice"],[1,2,1,"","get_decimal_precisions"],[1,2,1,"","get_decoded_data"],[1,2,1,"","get_encoded_categorical_feature_indexes"],[1,2,1,"","get_indexes_of_features_to_vary"],[1,2,1,"","get_inverse_ohe_min_max_normalized_data"],[1,2,1,"","get_mads"],[1,2,1,"","get_minx_maxx"],[1,2,1,"","get_ohe_min_max_normalized_data"],[1,2,1,"","get_valid_mads"],[1,2,1,"","normalize_data"],[1,2,1,"","one_hot_encode_data"],[1,2,1,"","prepare_df_for_ohe_encoding"],[1,2,1,"","prepare_query_instance"]],"dice_ml.data_interfaces.public_data_interface":[[1,1,1,"","PublicData"]],"dice_ml.data_interfaces.public_data_interface.PublicData":[[1,2,1,"","check_features_to_vary"],[1,2,1,"","check_mad_validity"],[1,2,1,"","check_permitted_range"],[1,2,1,"","create_ohe_params"],[1,2,1,"","de_normalize_data"],[1,2,1,"","from_dummies"],[1,2,1,"","from_label"],[1,2,1,"","get_data_params_for_gradient_dice"],[1,2,1,"","get_data_type"],[1,2,1,"","get_decimal_precisions"],[1,2,1,"","get_decoded_data"],[1,2,1,"","get_encoded_categorical_feature_indexes"],[1,2,1,"","get_features_range"],[1,2,1,"","get_indexes_of_features_to_vary"],[1,2,1,"","get_inverse_ohe_min_max_normalized_data"],[1,2,1,"","get_mads"],[1,2,1,"","get_minx_maxx"],[1,2,1,"","get_ohe_min_max_normalized_data"],[1,2,1,"","get_quantiles_from_training_data"],[1,2,1,"","get_valid_feature_range"],[1,2,1,"","get_valid_mads"],[1,2,1,"","normalize_data"],[1,2,1,"","one_hot_encode_data"],[1,2,1,"","prepare_df_for_ohe_encoding"],[1,2,1,"","prepare_query_instance"]],"dice_ml.dice":[[0,1,1,"","Dice"],[0,5,1,"","decide"]],"dice_ml.dice.Dice":[[0,2,1,"","decide_implementation_type"]],"dice_ml.diverse_counterfactuals":[[0,1,1,"","CounterfactualExamples"],[0,5,1,"","json_converter"]],"dice_ml.diverse_counterfactuals.CounterfactualExamples":[[0,2,1,"","display_df"],[0,2,1,"","from_json"],[0,2,1,"","print_list"],[0,2,1,"","to_json"],[0,2,1,"","visualize_as_dataframe"],[0,2,1,"","visualize_as_list"]],"dice_ml.explainer_interfaces":[[2,0,0,"-","dice_KD"],[2,0,0,"-","dice_genetic"],[2,0,0,"-","dice_pytorch"],[2,0,0,"-","dice_random"],[2,0,0,"-","dice_tensorflow1"],[2,0,0,"-","dice_tensorflow2"],[2,0,0,"-","explainer_base"],[2,0,0,"-","feasible_base_vae"],[2,0,0,"-","feasible_model_approx"]],"dice_ml.explainer_interfaces.dice_KD":[[2,1,1,"","DiceKD"]],"dice_ml.explainer_interfaces.dice_KD.DiceKD":[[2,2,1,"","do_sparsity_check"],[2,2,1,"","duplicates"],[2,2,1,"","find_counterfactuals"],[2,2,1,"","predict_fn"],[2,2,1,"","vary_valid"]],"dice_ml.explainer_interfaces.dice_genetic":[[2,1,1,"","DiceGenetic"]],"dice_ml.explainer_interfaces.dice_genetic.DiceGenetic":[[2,2,1,"","compute_loss"],[2,2,1,"","compute_proximity_loss"],[2,2,1,"","compute_sparsity_loss"],[2,2,1,"","compute_yloss"],[2,2,1,"","do_KD_init"],[2,2,1,"","do_cf_initializations"],[2,2,1,"","do_loss_initializations"],[2,2,1,"","do_param_initializations"],[2,2,1,"","do_random_init"],[2,2,1,"","find_counterfactuals"],[2,2,1,"","get_valid_feature_range"],[2,2,1,"","label_decode"],[2,2,1,"","label_decode_cfs"],[2,2,1,"","label_encode"],[2,2,1,"","mate"],[2,2,1,"","predict_fn"],[2,2,1,"","predict_fn_scores"],[2,2,1,"","update_hyperparameters"]],"dice_ml.explainer_interfaces.dice_pytorch":[[2,1,1,"","DicePyTorch"]],"dice_ml.explainer_interfaces.dice_pytorch.DicePyTorch":[[2,2,1,"","compute_dist"],[2,2,1,"","compute_diversity_loss"],[2,2,1,"","compute_loss"],[2,2,1,"","compute_proximity_loss"],[2,2,1,"","compute_regularization_loss"],[2,2,1,"","compute_yloss"],[2,2,1,"","do_cf_initializations"],[2,2,1,"","do_loss_initializations"],[2,2,1,"","do_optimizer_initializations"],[2,2,1,"","dpp_style"],[2,2,1,"","find_counterfactuals"],[2,2,1,"","generate_counterfactuals"],[2,2,1,"","get_model_output"],[2,2,1,"","initialize_CFs"],[2,2,1,"","predict_fn"],[2,2,1,"","predict_fn_for_sparsity"],[2,2,1,"","round_off_cfs"],[2,2,1,"","stop_loop"],[2,2,1,"","update_hyperparameters"]],"dice_ml.explainer_interfaces.dice_random":[[2,1,1,"","DiceRandom"]],"dice_ml.explainer_interfaces.dice_random.DiceRandom":[[2,2,1,"","get_continuous_samples"],[2,2,1,"","get_samples"]],"dice_ml.explainer_interfaces.dice_tensorflow1":[[2,1,1,"","DiceTensorFlow1"]],"dice_ml.explainer_interfaces.dice_tensorflow1.DiceTensorFlow1":[[2,2,1,"","compute_dist"],[2,2,1,"","compute_diversity_loss"],[2,2,1,"","compute_proximity_loss"],[2,2,1,"","compute_regularization_loss"],[2,2,1,"","compute_yloss"],[2,2,1,"","do_cf_initializations"],[2,2,1,"","do_loss_initializations"],[2,2,1,"","do_optimizer_initializations"],[2,2,1,"","dpp_style"],[2,2,1,"","find_counterfactuals"],[2,2,1,"","generate_counterfactuals"],[2,2,1,"","initialize_CFs"],[2,2,1,"","predict_fn"],[2,2,1,"","predict_fn_for_sparsity"],[2,2,1,"","round_off_cfs"],[2,2,1,"","scipy_optimizers"],[2,2,1,"","stop_loop"],[2,2,1,"","tensorflow_optimizers"],[2,2,1,"","update_hyperparameters"]],"dice_ml.explainer_interfaces.dice_tensorflow2":[[2,1,1,"","DiceTensorFlow2"]],"dice_ml.explainer_interfaces.dice_tensorflow2.DiceTensorFlow2":[[2,2,1,"","compute_dist"],[2,2,1,"","compute_diversity_loss"],[2,2,1,"","compute_loss"],[2,2,1,"","compute_proximity_loss"],[2,2,1,"","compute_regularization_loss"],[2,2,1,"","compute_yloss"],[2,2,1,"","do_cf_initializations"],[2,2,1,"","do_loss_initializations"],[2,2,1,"","do_optimizer_initializations"],[2,2,1,"","dpp_style"],[2,2,1,"","find_counterfactuals"],[2,2,1,"","generate_counterfactuals"],[2,2,1,"","initialize_CFs"],[2,2,1,"","predict_fn"],[2,2,1,"","predict_fn_for_sparsity"],[2,2,1,"","round_off_cfs"],[2,2,1,"","stop_loop"],[2,2,1,"","update_hyperparameters"]],"dice_ml.explainer_interfaces.explainer_base":[[2,1,1,"","ExplainerBase"]],"dice_ml.explainer_interfaces.explainer_base.ExplainerBase":[[2,2,1,"","build_KD_tree"],[2,2,1,"","check_permitted_range"],[2,2,1,"","check_query_instance_validity"],[2,2,1,"","decide_cf_validity"],[2,2,1,"","deserialize_explainer"],[2,2,1,"","do_binary_search"],[2,2,1,"","do_linear_search"],[2,2,1,"","do_posthoc_sparsity_enhancement"],[2,2,1,"","feature_importance"],[2,2,1,"","generate_counterfactuals"],[2,2,1,"","get_model_output_from_scores"],[2,2,1,"","global_feature_importance"],[2,2,1,"","infer_target_cfs_class"],[2,2,1,"","infer_target_cfs_range"],[2,2,1,"","is_cf_valid"],[2,2,1,"","local_feature_importance"],[2,2,1,"","misc_init"],[2,2,1,"","predict_fn"],[2,2,1,"","predict_fn_for_sparsity"],[2,2,1,"","round_to_precision"],[2,2,1,"","serialize_explainer"],[2,2,1,"","setup"],[2,2,1,"","sigmoid"]],"dice_ml.explainer_interfaces.feasible_base_vae":[[2,1,1,"","FeasibleBaseVAE"]],"dice_ml.explainer_interfaces.feasible_base_vae.FeasibleBaseVAE":[[2,2,1,"","compute_loss"],[2,2,1,"","generate_counterfactuals"],[2,2,1,"","train"]],"dice_ml.explainer_interfaces.feasible_model_approx":[[2,1,1,"","FeasibleModelApprox"]],"dice_ml.explainer_interfaces.feasible_model_approx.FeasibleModelApprox":[[2,2,1,"","train"]],"dice_ml.model":[[0,1,1,"","Model"],[0,5,1,"","decide"]],"dice_ml.model.Model":[[0,2,1,"","decide_implementation_type"]],"dice_ml.model_interfaces":[[3,0,0,"-","base_model"],[3,0,0,"-","keras_tensorflow_model"],[3,0,0,"-","pytorch_model"]],"dice_ml.model_interfaces.base_model":[[3,1,1,"","BaseModel"]],"dice_ml.model_interfaces.base_model.BaseModel":[[3,2,1,"","get_gradient"],[3,2,1,"","get_num_output_nodes"],[3,2,1,"","get_num_output_nodes2"],[3,2,1,"","get_output"],[3,2,1,"","load_model"]],"dice_ml.model_interfaces.keras_tensorflow_model":[[3,1,1,"","KerasTensorFlowModel"]],"dice_ml.model_interfaces.keras_tensorflow_model.KerasTensorFlowModel":[[3,2,1,"","get_gradient"],[3,2,1,"","get_num_output_nodes"],[3,2,1,"","get_output"],[3,2,1,"","load_model"]],"dice_ml.model_interfaces.pytorch_model":[[3,1,1,"","PyTorchModel"]],"dice_ml.model_interfaces.pytorch_model.PyTorchModel":[[3,2,1,"","get_gradient"],[3,2,1,"","get_num_output_nodes"],[3,2,1,"","get_output"],[3,2,1,"","load_model"],[3,2,1,"","set_eval_mode"]],"dice_ml.utils":[[5,0,0,"-","exception"],[5,0,0,"-","helpers"],[6,0,0,"-","sample_architecture"],[5,0,0,"-","serialize"]],"dice_ml.utils.exception":[[5,6,1,"","SystemException"],[5,6,1,"","UserConfigValidationException"]],"dice_ml.utils.helpers":[[5,1,1,"","DataTransfomer"],[5,5,1,"","get_adult_data_info"],[5,5,1,"","get_adult_income_modelpath"],[5,5,1,"","get_base_gen_cf_initialization"],[5,5,1,"","get_custom_dataset_modelpath_pipeline"],[5,5,1,"","get_custom_dataset_modelpath_pipeline_binary"],[5,5,1,"","get_custom_dataset_modelpath_pipeline_multiclass"],[5,5,1,"","get_custom_dataset_modelpath_pipeline_regression"],[5,5,1,"","get_custom_vars_dataset_modelpath_pipeline"],[5,5,1,"","load_adult_income_dataset"],[5,5,1,"","load_custom_testing_dataset"],[5,5,1,"","load_custom_testing_dataset_binary"],[5,5,1,"","load_custom_testing_dataset_multiclass"],[5,5,1,"","load_custom_testing_dataset_regression"],[5,5,1,"","load_min_max_equal_dataset"],[5,5,1,"","load_outcome_not_last_column_dataset"],[5,5,1,"","ohe_min_max_transformation"]],"dice_ml.utils.helpers.DataTransfomer":[[5,2,1,"","feed_data_params"],[5,2,1,"","initialize_transform_func"],[5,2,1,"","inverse_transform"],[5,2,1,"","transform"]],"dice_ml.utils.sample_architecture":[[6,0,0,"-","vae_model"]],"dice_ml.utils.sample_architecture.vae_model":[[6,1,1,"","AutoEncoder"],[6,1,1,"","CF_VAE"]],"dice_ml.utils.sample_architecture.vae_model.AutoEncoder":[[6,2,1,"","decoder"],[6,2,1,"","encoder"],[6,2,1,"","forward"],[6,2,1,"","normal_likelihood"],[6,2,1,"","sample_latent_code"]],"dice_ml.utils.sample_architecture.vae_model.CF_VAE":[[6,2,1,"","compute_elbo"],[6,2,1,"","decoder"],[6,2,1,"","encoder"],[6,2,1,"","forward"],[6,2,1,"","normal_likelihood"],[6,2,1,"","sample_latent_code"]],"dice_ml.utils.serialize":[[5,1,1,"","DummyDataInterface"]],"dice_ml.utils.serialize.DummyDataInterface":[[5,2,1,"","to_json"]],dice_ml:[[0,1,1,"","Data"],[0,1,1,"","Dice"],[0,1,1,"","Model"],[0,0,0,"-","constants"],[0,0,0,"-","counterfactual_explanations"],[0,0,0,"-","data"],[1,0,0,"-","data_interfaces"],[0,0,0,"-","dice"],[0,0,0,"-","diverse_counterfactuals"],[2,0,0,"-","explainer_interfaces"],[0,0,0,"-","model"],[3,0,0,"-","model_interfaces"],[4,0,0,"-","schema"],[5,0,0,"-","utils"]]},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"],"3":["py","attribute","Python attribute"],"4":["py","property","Python property"],"5":["py","function","Python function"],"6":["py","exception","Python exception"]},objtypes:{"0":"py:module","1":"py:class","2":"py:method","3":"py:attribute","4":"py:property","5":"py:function","6":"py:exception"},terms:{"0":[0,1,2,7,9,10,11,12,13,14,15,16,19],"00":[9,10,11,13,14,15,16],"000":[7,19],"001":[7,19],"01":[7,9,10,11,13,14,15,19],"01292":2,"019":[11,15,16],"02":[9,13,14],"023810":14,"02584":2,"026217":14,"02d":9,"03":9,"03277":12,"039710699999995":14,"04it":13,"05":[1,2,9,11,15,16],"06":[9,15],"073059":14,"073446":14,"08":[9,11,15],"081081":14,"0918301":14,"09it":[10,11],"1":[1,2,6,7,9,10,11,12,14,16,17,18,19],"10":[2,7,9,10,11,12,13,14,15,17,19],"100":[7,9,10,11,13,14,19],"1000":2,"1000k":2,"109842":14,"10it":9,"10k":2,"11":[9,10,11,12,13,14,15,16],"115":14,"117":14,"118":14,"119":14,"12":[9,10,11,12,13,14,15,16],"121":[12,14],"122":14,"13":[7,9,11,13,14,15,19],"139":12,"13it":13,"14":[9,10,11,13,14,15],"14296":9,"149":14,"14it":9,"15":[11,13,14,15],"150":14,"151":[11,15,16],"1543":14,"155":11,"1554":14,"156":[11,15,16],"15788":13,"15831":13,"16":[11,13,14,15],"165":12,"1676":9,"169":17,"17":[7,10,11,13,14,15,16,19],"17378":13,"1738":9,"1771361283":17,"18":[11,13],"181467":14,"19":[10,11,13,14],"1907":2,"1912":12,"1e":[2,12],"2":[2,7,9,10,11,12,14,16,17,18,19],"20":[7,9,11,12,13,15,19],"200001":14,"2019":[7,19],"2020":[7,19],"2022":[11,15,16],"202814":16,"203128":16,"203353":16,"204072":16,"2048":12,"20639":14,"20640":14,"20695":13,"21":[10,11,13,14],"2101":2,"22":[7,11,13,14,15,16,19],"22027":[9,13],"22201":13,"23":[10,11,13,14],"235617":5,"23580":13,"238137":14,"23876":13,"24":[10,11,13,14,15],"2401":14,"2457":13,"24it":10,"25":[11,12,13,14],"2574":14,"26":[9,13],"26048":12,"269":[11,15,16],"27":[9,13,15],"27it":10,"28":[9,10,11,12,13,14,15],"281853":14,"288136":14,"29":[11,12,14,15,16],"295":11,"3":[7,9,10,11,12,14,16,18,19],"30":[9,10,11,12,13,15],"3014":14,"303":[11,15,16],"31":[9,11,13],"316901":14,"31it":13,"32":[9,11,12,13,15],"322":14,"3252":14,"33":[10,14],"33it":11,"34":[10,12,14,17],"342795":11,"344":12,"3441":17,"345915":11,"346592":11,"3487":14,"34it":11,"35":[9,10,11,12,13,15],"353536":11,"3564200999999985":14,"36":[11,13,15],"3682":14,"37":[10,14],"38":[10,11,12,14,15,16],"39":[10,11,12,14,15,16,17],"390":14,"393":14,"394":14,"39it":[11,13],"4":[7,9,10,11,12,13,14,15,16,19],"40":[9,10,12,13],"41":[9,11,12,13,14,15],"413":14,"41it":13,"42":[10,12,13,14],"422":14,"43":[10,13,14,16],"437557":15,"44":[10,11,12,15],"445164":15,"445531":15,"446615":15,"44691":14,"45":[7,10,11,12,14,15,16,19],"4511":14,"46":10,"466381":11,"466596":11,"47":[10,11,14,15],"48":[10,13],"49":[10,15],"496":14,"5":[2,7,9,10,11,12,13,14,15,16,19],"50":[7,9,10,11,12,13,15,19],"500":2,"5000":[2,10],"503225":16,"503642":16,"50it":[13,14],"50k":[10,11,12],"51":[10,11,13,15],"516":13,"5173":14,"52":[10,11,14],"521":14,"525":16,"526":14,"53":[10,13],"54":10,"547945":14,"55":[10,13,15,16],"555556":14,"558":14,"55it":11,"56":10,"565":14,"57":10,"58":[10,13],"585":14,"59":[10,13,16],"599998":14,"6":[9,10,11,12,13,14,15,16],"60":[9,10,11,12,13,15,16],"607":[7,19],"61":14,"617":[7,19],"6184":14,"62":[10,11,15],"64":[11,15,16],"6431":14,"65":[9,10,11,12,13,15],"650002":14,"67":[10,13],"671":12,"68":10,"69":[10,13],"7":[9,10,11,12,13,14,15,16],"70":[11,13,15,16],"71":[10,13],"710724":15,"710950":15,"72":11,"73":[10,11,15,16],"73it":[9,13],"74":[10,16],"746479":14,"75":10,"755":16,"75it":9,"76":12,"77":[10,13],"78":10,"79":10,"8":[9,10,11,12,13,14,15,16,17],"80":10,"802260":14,"81":14,"817352":14,"82":[10,13],"839996":14,"84":10,"8462":14,"85":[10,13,14],"86":[10,14],"87":[12,13],"88":[10,14],"88245":14,"89":10,"9":[9,10,11,12,13,14,15,17],"90":[7,10,15,16,19],"91":10,"910112":14,"911":16,"9167":14,"92":[10,14],"93":10,"930712":14,"95":[7,10,19],"96":10,"9608":9,"96489929999999":14,"971880":14,"984127":14,"99":[7,15,16,19],"992958":14,"boolean":[2,3],"case":[10,11,12,15,16],"class":[0,1,2,3,5,6,7,10,11,12,13,18,19],"default":[2,7,11,12,13,15,16,19],"do":[1,7,11,13,15,16,19],"final":[2,7,11,19],"float":[2,12],"function":[0,1,2,5,7,9,10,11,12,13,15,16,19],"import":[0,2,7,9,12,13,14,15,16,17,18,19],"new":[0,2,7,10,11,12,13,14,15,16,19],"null":[10,14],"public":[0,1],"return":[0,1,2,3,5,9,11,12],"static":[0,2],"super":12,"throw":1,"true":[0,1,2,3,5,10,11,12,13,14,15,16],"try":[7,9,11,12,13,15,19],"while":[11,12],A:[0,1,2,5,7,9,11,12,15,19],As:[14,15,16],Being:[7,19],By:[2,7,15,19],For:[2,7,9,10,11,12,14,15,19],If:[1,2,7,11,13,16,19],In:[7,9,11,12,13,15,19],It:[7,11,12,13,15,19],No:[11,13,15,16],OR:3,Of:15,One:1,That:[10,11,12],The:[0,2,11,12,13,14,15,16],These:[2,10,11],To:[0,7,11,12,15,16,19],With:[7,19],_2node:12,_:[1,7,9,19],__version__:[11,15,16],_basedata:[0,1],_generate_counterfactu:1,_setitem_single_column:9,ab:12,abc:2,about:[0,1,12,16],abov:[11,12,15,16],absenc:11,absolut:[1,2,7,15,16,19],accept:2,access:[0,7,11,12,18,19],account:[7,19],accuraci:[7,11,12,16,19],achiev:11,acknowledg:[7,15,19],across:[7,13,19],action:[7,19],activ:[7,12,19],actual:[2,7,19],ad:[7,18,19],adam:[2,7,19],adapt:12,add:[0,1,2,7,11,19],addit:[7,11,12,19],addition:[7,19],adher:1,adopt:[7,19],adpat:12,adult:[5,9,12,13,15,16],adult_data:5,adult_info:[11,12],advanc:[7,12,16,18],adversari:[7,19],affect:15,after:1,ag:[7,9,10,11,12,13,15,16,19],again:[2,12,13],aggreg:[7,11,19],agnost:[7,9,11,19],agre:[7,19],agreement:[7,19],aim:[7,19],al:[7,19],algorithm:[2,7,9,11,14,18,19],all:[0,1,2,3,7,9,10,11,14,15,16,19],allow:[2,7,11,12,15,19],alreadi:1,also:[2,7,10,11,12,13,15,19],altern:[7,19],amit:[7,19],among:11,amshar:[9,11,12,15,16,17],an:[0,1,2,3,5,7,10,11,12,13,15,16,19],analysi:5,analyt:[7,19],ani:[6,7,10,11,14,18,19],ann_model:[7,19],anoth:[11,12],answer:11,appear:[11,15,16],append:[9,10,11,13,14],appli:[7,11,19],approach:12,appropri:[0,7,11,15,16,19],approv:[7,19],approxim:[7,15,19],ar:[0,1,2,3,7,11,12,13,15,16,19],archiv:[5,9,11,12,13,15,16],arg:6,argument:[10,11,12,14],around:11,arrai:[1,3],artifici:15,arug:12,arxiv:[2,12],as_fram:14,ascend:2,assess:[7,19],assign:[2,7,15,19],assoc:[7,9,10,11,12,13,15,16,19],assum:1,assumpt:12,attribut:[2,7,12,18,19],author:[7,19],autoencod:[6,7,19],automat:[7,19],autoreload:[9,10,11,12,13,14,15,16,17],avail:[0,7,16,19],avebedrm:14,aveoccup:14,averoom:14,avg_dist:2,avoid:[2,12],avx2:[11,15,16],axi:[9,10,11,13,14],bachelor:[7,9,10,11,12,13,15,16,19],back:[1,2],backend:[0,3,5,9,10,11,12,13,14,15,16,17],backendtyp:0,balanc:[7,19],bar:[7,19],base:[0,1,2,3,5,6,7,11,12,15,19],base_data_interfac:[0,8],base_model:[0,8],baselin:[11,12,16],basemodel:3,baseva:[7,12,19],basic:16,batch_siz:12,bayesian:[7,19],becaus:12,been:[7,12,15,19],befor:15,behavior:15,behind:13,being:[7,11,19],belong:2,below:[0,10,11,12,13,14,15,16],best:13,better:[7,11,19],between:[1,2,7,11,16,18,19],bia:12,bibtex:[7,19],binar:[11,12],binari:[2,7,11,12,15,16,19],binary_crossentropi:[7,19],black:11,blank:10,blog:[7,19],blue:[7,9,10,11,12,13,16,19],book:[7,19],booktitl:[7,19],bool:2,bot:[7,19],both:[1,7,9,10,12,13,14,15,19],box:11,bring:11,build:[10,13],build_kd_tre:2,built:16,c:[6,12,17],calcul:10,california:14,call:[2,5,11,12,15,16,17],can:[0,2,7,9,10,11,12,13,14,16,19],cannot:[11,15,16],captur:[15,16],cat:[9,10,11,13,14,17],cat_tran:17,categor:[0,1,2,7,9,10,11,13,14,15,16,17,19],categori:[15,16],categorical_featur:14,categorical_feature_nam:9,categorical_penalti:2,categorical_transform:[9,10,11,13,14],categoricalnum:17,caus:[10,11,12],causal:[7,19],cause1:2,cause2:2,cause_1:12,cause_n:12,caveat:9,cc:[11,15,16],certain:11,cf:[2,7,11,12,13,14,19],cf_example_json_str:0,cf_examples_list:[0,2,7,10,19],cf_ix:2,cf_vae:6,cfs_arr:2,cfs_list:10,chanc:[7,19],chang:[2,7,10,11,12,18,19],changeabl:[7,19],check:[1,2,7,9,11,19],check_features_to_vari:1,check_mad_valid:1,check_permitted_rang:[1,2],check_query_instance_valid:2,chenhao:[7,19],choic:[9,12],choos:[7,15,19],cla:[7,19],class_weight:[7,19],classif:[2,7,11,18],classifi:[0,2,3,7,9,10,11,13,14,19],clf:[9,10,11,13,17],clf_iri:14,clone:[7,12,19],close:[2,11,13],closer:[7,15,19],closest:13,cm:14,cobj:10,code:[2,7,11,12,14,17,19],code_obj:17,col:1,col_index:9,collar:[7,9,10,11,12,13,15,16,19],colleg:[7,9,10,11,12,13,15,16,19],column:[1,7,9,10,11,12,13,14,19],columntransform:[9,10,11,13,14,17],com:[5,7,19],combin:[10,15],come:16,comment:[1,2,7,19],compani:[7,19],compar:[11,12,15,16],compat:[11,15,16],compil:[7,11,15,16,19],complement:[7,19],complet:[13,14],complex:[11,12],compon:11,compos:[9,10,11,13,14,17],comput:[1,2,7,11,15,19],compute_dist:2,compute_diversity_loss:2,compute_elbo:6,compute_loss:2,compute_proximity_loss:2,compute_regularization_loss:2,compute_sparsity_loss:2,compute_yloss:2,concept:11,condit:[2,11],conduct:[7,19],confer:[7,19],configur:[5,11,13],consequ:11,conserv:[2,11],consid:[7,19],consider:11,consist:14,constant:[7,8,11,16,17],constrain:[11,12,13],constraint:[2,7,11,18,19],constraint_direct:2,constraint_reg:2,constraint_typ:2,constraint_vari:2,construct:[7,11,12,19],cont_maxx:5,cont_minx:5,contact:[7,19],contain:[0,1,2,3,12,14],containt:5,content:[7,8],continu:[0,1,2,7,11,12,13,15,16,19],continuous_featur:[7,9,10,11,12,13,14,15,17,19],continuous_features_h:14,continuous_features_iri:14,contrast:13,contributor:[7,19],control:13,convei:15,conveni:[11,12],converg:[2,11,13],convert:[0,7,18],copi:[9,12],core:[7,9,11,14,15,16,17,19],correct:[2,16],correspond:2,could:[7,11,15,16,19],count:14,counterfactu:[0,2,18],counterfactual_explan:[7,8],counterfactualexampl:[0,2],counterfactualexplan:[0,2],cours:15,cpu:[11,15,16],cpu_feature_guard:[11,15,16],creat:[1,7,9,10,11,13,14,15,19],create_ohe_param:1,credit:[7,19],crimin:[7,19],criterion:11,critic:[7,11,15,16,19],csv:[7,19],cuda:[11,15,16],cuda_diagnost:[11,15,16],cuda_driv:[11,15,16],cudart:[11,15,16],cudart_stub:[11,15,16],cuinit:[11,15,16],current:[2,9,11,13],current_pr:2,current_pred_orig:2,custom:[7,11,18],custom_model:17,d:[2,7,9,10,11,12,13,15,16,17,19],d_hous:14,d_iri:14,data:[1,2,3,5,7,8,9,11,12,13,14,15,17,18,19],data_df:[5,10],data_df_copi:2,data_interfac:[0,2,5,8,10],data_nam:12,datafram:[1,2,7,9,10,11,12,13,14,15,17,19],dataset:[2,5,7,10,14,16,17,18,19],datasetx:[9,10,13,14],datatransfom:5,de:1,de_normalize_data:1,debug:[7,19],decid:[0,2,7,15,19],decide_cf_valid:2,decide_implementation_typ:0,decimal_prec:2,decis:[7,11,19],declar:[2,7,19],decod:[6,12],decor:[7,19],decreas:12,deep:[7,15,16,18,19],deeplearn:[7,19],default_tim:9,defin:[1,2,5,7,11,15,18],definit:11,degre:[7,19],demonstr:[9,11,12,13,14,15],denot:11,dens:[7,19],depend:[7,19],dependendi:[7,19],deprec:[11,12,15,16],deriv:11,descent:2,describ:[5,7,9,11,12,13,19],descript:[11,12],deseri:0,deserialize_explain:2,desir:[2,7,11,13,14,19],desired_class:[0,2,7,9,10,11,12,13,14,15,16,19],desired_class_input:2,desired_rang:[0,2,10,14],desired_range_input:2,deta:5,detach:12,detail:[2,7,11,12,15,19],determin:[2,3,7,12,19],dev:[7,19],develop:[7,19],deviat:[1,7,15,16,19],devid:2,df:[0,1],df_hous:14,df_iri:14,dice:[1,8,9,12,13,14,15,16,17,18],dice_exp:[7,9,11,12,15,16,19],dice_exp_genet:13,dice_exp_kd:13,dice_exp_random:[9,13],dice_genet:[0,8],dice_getting_start:16,dice_interfac:11,dice_kd:[0,8,9],dice_ml:[7,9,10,11,12,13,14,15,16,17,19],dice_pytorch:[0,8],dice_random:[0,8],dice_tensorflow1:[0,8],dice_tensorflow2:[0,8],dice_tensorflow:11,dicegenet:[0,2,13],dicekd:[0,2,13],dicepytorch:2,dicerandom:2,dicetensorflow1:2,dicetensorflow2:2,dict:[1,11],dictionari:[2,11,12,15,16],diff:2,differ:[0,2,3,7,10,11,12,13,14,16,19],differenti:[7,11,19],difficult:[7,15,19],difficulti:[7,15,19],dim:12,dimens:12,direct:12,directli:[10,16],directori:[11,15,16],discret:[1,11,12],discuss:[15,16],disk:[7,19],displai:13,display_df:0,display_sparse_df:0,display_warn:1,distanc:[2,7,11,15,16,19],distribut:[7,19],divers:[2,9,10,11,14,18],diverse_counterfactu:[2,7,8],diversecf:2,diversity_loss_typ:2,diversity_weight:[2,7,15,19],divid:[7,15,19],divmod:9,divorc:[7,10,11,12,13,16,19],dlerror:[11,15,16],do_binary_search:2,do_cf_initi:2,do_kd_init:2,do_linear_search:2,do_loss_initi:2,do_optimizer_initi:2,do_param_initi:2,do_posthoc_sparsity_enhanc:2,do_random_init:2,do_sparsity_check:2,doc:[7,9,19],doctor:[7,10,11,12,13,15,16,19],document:9,doe:[7,11,15,16,19],domain:[7,19],done:[7,16,19],downsampl:10,downstream:2,dpp:2,dpp_style:2,driver:[11,15,16],drop:[9,10,11,13,14],dso_load:[11,15,16],dtype:[12,14,17],due:[7,19],dummi:1,dummy_data:10,dummydatainterfac:5,dump:17,dump_patch:12,duplic:2,dure:[5,13],dynam:[11,15,16],e1:[10,11],e2:11,e3:11,e:[7,11,15,19],each:[0,2,7,9,10,11,12,13,16,19],eager:[11,16],eas:[7,15,19],easi:11,easili:11,ed:12,edu:[5,9,11,12,13,15,16],educ:[7,9,10,11,12,13,15,16,19],education_assoc:12,education_bachelor:12,education_doctor:12,education_h:12,education_mast:12,education_prof:12,education_school:12,education_som:12,effect:[2,12],effici:13,either:[2,11],elapsed_genet:9,elapsed_kd:9,elapsed_random:9,elif:0,els:[1,2,9,12],emploi:[7,9,10,11,12,13,15,16,19],enabl:[7,11,15,16,19],encod:[1,2,5,6,12,15],encoded_s:[5,12],encourag:2,end:[7,11,19],english:[7,19],enhanc:2,enough:[7,19],ensembl:[9,10,11,13,14,17],ensur:[2,7,13,19],entri:14,environ:[9,12,17],epoch:[5,7,12,19],equal:[2,15,16],error:[5,11,15,16],especi:[7,19],estim:[0,2,7,11,18,19],et:[7,19],evalu:[7,19],even:[7,11,12,19],everi:[2,11],exampl:[0,2,7,10,12,13,16,18,19],except:[0,8,11],exception_messag:5,exec:17,execut:[5,11,16],exist:[2,11,15,16],exp:[7,10,11,12,15,16,17,19],exp_genet:[9,13],exp_genetic_h:14,exp_genetic_iri:14,exp_kd:[9,13],exp_random:[9,13],experi:12,experiment:11,explain:[1,2,7,18,19],explainer_bas:[0,8],explainer_interfac:[0,8],explainerbas:[0,2],explan:[0,2,18],explicit:[7,11,19],explor:[7,11,19],extrem:15,face:[7,19],factor:15,fail:[11,15,16],fair:[7,19],fall:[1,15],fals:[0,1,2,3,7,9,11,13,19],faq:[7,19],fast:12,fat:[7,19],feasibl:[11,13,15,18],feasible_base_va:[0,8,12],feasible_model_approx:[0,8,12],feasiblebaseva:[2,12],feasiblemodelapprox:[2,7,18],featur:[0,1,2,7,9,12,14,16,18,19],feature_import:2,feature_nam:[10,14],feature_names_including_target:10,feature_rang:2,feature_range_input:1,feature_ranges_orig:2,feature_weight:[1,2,7,15,16,19],features_to_vari:[1,2,7,10,11,13,19],fed:[1,2,5],feed_data_param:5,femal:[7,9,10,11,12,13,15,16,19],fetch_california_h:14,few:[0,15],file:[2,11,15,16,17],filenam:17,fill_valu:17,final_cfs_df:[0,7,19],final_cfs_df_spars:0,final_cfs_spars:2,final_indic:2,financ:[7,19],financi:[7,19],find:[2,7,11,13,16,19],find_counterfactu:2,first:[2,10,11,12],fit:[7,9,10,11,12,13,14,17,19],fixed_features_valu:2,flag:[2,11,15,16],flip:[7,19],float64:14,fma:[11,15,16],folder:[7,19],follow:[2,7,11,15,16,19],form:[1,11,12,15,16],formal:11,format:[1,2,12],formul:11,forward:6,found:[11,12,13,15,16],four:11,fourth:12,frame:14,framework:[0,2,3,12,13,15],freeli:13,frequenc:11,from:[1,2,5,7,9,10,11,12,13,14,15,16,17,19],from_dummi:1,from_json:[0,10],from_label:1,full:[7,9,10,11,12,13,14,19],func:[0,3,5],functiontransform:5,further:13,futur:[7,11,19],g:[7,11,15,19],geco:2,gender:[7,9,10,11,12,13,15,16,19],gender_femal:12,gender_mal:12,gener:[2,5,10,18],generate_counterfactu:[2,7,9,10,11,12,13,14,15,16,19],genet:[0,2,7,9,11,14,18,19],genetic_h:14,genetic_iri:14,get:[1,2,5,15],get_adult_data_info:[5,10,11,12],get_adult_income_modelpath:[5,7,11,12,15,16,19],get_base_gen_cf_initi:5,get_continuous_sampl:2,get_custom_dataset_modelpath_pipelin:[5,17],get_custom_dataset_modelpath_pipeline_binari:5,get_custom_dataset_modelpath_pipeline_multiclass:5,get_custom_dataset_modelpath_pipeline_regress:5,get_custom_vars_dataset_modelpath_pipelin:5,get_data_params_for_gradient_dic:1,get_data_typ:1,get_decimal_precis:1,get_decoded_data:1,get_encoded_categorical_feature_index:1,get_features_rang:1,get_gradi:3,get_indexes_of_features_to_vari:1,get_inverse_ohe_min_max_normalized_data:1,get_mad:[1,15],get_minx_maxx:1,get_model_output:2,get_model_output_from_scor:2,get_num_output_nod:3,get_num_output_nodes2:3,get_ohe_min_max_normalized_data:1,get_output:3,get_quantiles_from_training_data:1,get_sampl:2,get_valid_feature_rang:[1,2],get_valid_mad:1,give:[11,13],given:[2,7,10,11,12,13,14,19],global:[0,2,7,18,19],global_feature_import:[2,10,11],global_import:2,goal:[7,13,18],govern:[7,10,11,12,13,16,19],gpu:[11,15,16],grad:[7,9,10,11,12,13,15,16,19],gradient:[0,2,7,11,19],gradientdesc:2,grant:[7,19],graph:[11,16],greater:[11,16],greedi:2,greedili:2,gt:[10,11,12,14,17],guid:2,h5py:[7,19],h_zhu:5,ha:[2,7,11,12,19],handl:15,handle_unknown:[9,10,11,13,14,17],happen:5,harder:[7,15,19],hardli:[7,19],have:[7,9,10,11,12,13,14,15,16,19],head:[9,11,12,13,14,15],healthcar:[7,19],help:[7,11,15,19],helper:[0,7,8,9,10,11,12,13,15,16,17,19],henc:[0,15,16],here:[7,12,13,15,19],high:[2,7,11,12,16,19],higher:[7,11,15,19],highlight:[7,11,19],hinge_loss:[2,9],histori:[7,19],hoc:2,hold:2,home:[9,12,17],host:[11,15,16],hot:[1,2,5,15],hotel:[7,19],hour:[7,10,11,12,15,19],hours_per_week:[7,9,10,11,12,13,15,16,19],hous:14,houseag:14,housing_data:14,how:[7,10,11,12,13,14,15,19],howev:[7,11,12,15,16,19],hs:[7,9,10,11,12,13,15,16,19],html:[5,9,14],http:[2,5,7,9,11,12,13,14,15,16,19],hyperparamet:2,hyperparamt:2,i:[2,9,11,15,16],ic:[5,9,11,12,13,15,16],idea:[7,13,19],ideal:[7,11,19],ident:14,ignor:[2,9,10,11,13,14,15,16,17],iloc:9,imp:[10,11],imp_r:10,implement:[0,2,3,7,9,11,13,16,19],impli:[12,15],implicit:12,imposs:[7,11,19],improv:[7,19],imput:17,in_featur:12,includ:[2,11,12],incom:[2,5,7,9,10,11,12,13,15,16,19],increas:[12,13,15],independ:[7,9,18],index:[1,7,9,12,17,19],indic:[2,3,5,11,16],individu:[7,11,15,19],industri:[10,11,12],infeas:12,infer:[1,2,12],infer_target_cfs_class:2,infer_target_cfs_rang:2,info:[11,14],inform:[0,1,7,14,16,19],init_near_query_inst:2,initi:[2,11,12,13,14,15,16],initialize_cf:2,initialize_transform_func:5,initil:[7,18],inp_siz:3,inproceed:[7,19],input:[0,1,2,3,7,10,11,12,14,15,19],input_inst:[2,3],input_shap:[7,19],input_tensor:3,inspect:11,instanc:[0,1,2,7,10,11,12,13,14,15,16,19],instanti:[11,12],instead:[1,9],instruct:[7,11,15,16,19],int64:14,intend:12,interactivesess:[7,19],interactiveshel:17,interest:[2,7,11,19],interfac:[0,1,2,3,11,16],intermedi:2,intern:[5,7,14,15,19],interpret:[2,7,10,19],interv:2,intial:2,introduct:[7,18],intuit:[10,11],invalid:17,invers:[2,15,16],inverse_dist:2,inverse_mad:2,inverse_transform:5,invok:[7,19],ipykernel_3518:17,ipython:17,iri:14,iris:14,is_cf_valid:2,issu:[7,13,19],iter:2,itr:2,its:[2,7,12,19],itself:13,json:[0,7,18],json_convert:0,json_str:[0,10],jsonschema:[7,19],judg:[7,19],jupyt:[7,19],just:[11,14],justic:[7,19],k1:2,k2:2,k:[1,2,7,9,13,19],kb:14,kd:[2,7,9,11,18,19],kd_query_inst:2,kdtree:[0,2,9,13,14,17],keep:11,kei:[2,11,12,15,16],kera:[3,7,19],keras_tensorflow_model:[0,8],kerastensorflowmodel:3,kernel:[11,15,16],kernel_regular:[7,19],kind:[7,11,19],know:[11,16],known:11,kw_arg:[0,3,5],kwarg:[0,2,6],l1:[7,19],l2_loss:2,label:[1,2,7,19],label_decod:2,label_decode_cf:2,label_encod:2,labelled_input:2,languag:[7,19],larg:2,larger:[2,11],last:[7,11,17,19],latest:[7,12,19],latitud:14,law:[7,19],layer:[7,19],lead:[7,11,19],learn:[2,5,7,9,12,13,14,15,16,18,19],learning_r:[2,5],leav:10,length:14,less:[2,11,13,15],let:15,level:[0,1,2,7,10,11,12,15,19],li:0,lib:[9,12,17],libcuda:[11,15,16],libcudart:[11,15,16],librari:[11,12,14,15,16],licens:[7,19],lie:14,like:[7,10,11,12,19],likelihood:11,lime:[7,11,19],limit:11,line:17,linear:[2,7,12,19],list:[0,1,2,7,12,19],live:[7,19],load:[5,7,17,18],load_adult_income_dataset:[5,7,9,10,11,12,13,15,19],load_custom_testing_dataset:[5,17],load_custom_testing_dataset_binari:5,load_custom_testing_dataset_multiclass:5,load_custom_testing_dataset_regress:5,load_ext:[9,10,11,12,13,14,15,16,17],load_iri:14,load_min_max_equal_dataset:5,load_model:[3,12],load_outcome_not_last_column_dataset:5,loaded_model:17,loan:[7,19],loc:[7,9,19],local:[0,2,7,12,18,19],local_feature_import:[2,10,11],local_import:[0,2,10,11],log:[11,15,16],log_loss:2,logic:11,logvar:6,longitud:14,loop:[0,9],loss:[2,7,11,19],loss_converge_maxit:[2,11],loss_diff:2,loss_diff_thr:2,low:[2,7,11,12,19],lower:[7,19],lr:12,lt:[9,10,11,12,13,14,17],m:[7,9,10,11,12,13,15,16,17,19],m_genet:9,m_hous:14,m_iri:14,m_kd:9,m_random:9,machin:[7,9,11,12,13,15,16,19],mad:[1,2,7,15,16,19],made:[7,11,19],mahajan:[7,19],mai:[7,11,15,19],main:2,make:[1,7,13,19],maker:[7,19],male:[7,9,10,11,12,13,15,16,19],mani:[2,11],manual:[7,16,19],margin:[5,12],marit:[10,11,12],marital_statu:[7,9,10,11,12,13,15,16,19],marital_status_divorc:12,marital_status_marri:12,marital_status_separ:12,marital_status_singl:12,marital_status_widow:12,marri:[7,9,10,11,12,13,15,16,19],master:[7,10,11,12,15,16,19],mate:2,matrix:2,max:[1,2,5,7,9,19],max_it:2,maximum:2,maxiter:2,mb:14,mead:2,mean:[6,7,11,12,15,19],measur:[7,10,15,19],median:[1,2,7,15,16,17,19],medinc:14,memori:[2,14],messag:[2,5],meta:[0,1,5,7,18],metadata:[0,7,10,16,19],method:[0,1,2,3,10,11,12,13,14,16,17],method_nam:13,metric:[2,7,11,19],microsoft:[7,19],might:12,min:[1,2,5,7,9,11,13,15,16,19],min_it:2,minim:11,minimum:2,misc_init:2,miss:17,ml:[0,1,2,3,5,18],ml_modelpath:[11,12,15,16,17],mnt:[12,17],mode:[3,7,19],model:[2,3,5,7,8,17,18,19],model_h:14,model_interfac:[0,2,8],model_iri:14,model_out:2,model_output:2,model_path:[0,3,7,11,12,15,16,17,19],model_scor:[2,3],model_select:[9,10,11,13,14,17],model_typ:[0,2,10,14],modelapprox:[7,18],modeltyp:0,modifi:9,modul:[7,8,9,11,12,13,14,15,17],monoton:[2,12],more:[0,2,7,10,12,14,15,18,19],most:[7,15,17,19],mothil:[7,19],mothilal2020dic:[7,19],move:2,msg:12,multi:[7,11,18,19],multiclass:[2,7,18],multipl:[7,11,14,15,19],name:[0,1,2,11,12,15,16],nearbi:11,nearest:2,necess:[7,10,11,19],necessari:[1,2,11],need:[1,7,10,11,12,19],neg:2,neither:11,nelder:2,network:[7,11,15,16,19],neural:[7,11,15,16,19],never:12,next:[7,18,19],nn:[6,7,12,19],non:[14,15],none:[0,1,2,3,5,10,12],nonetheless:16,nor:11,normal:[1,2,5,15,16],normal_likelihood:6,normalize_data:[1,7,19],note:[11,12,13,15,16],notebook:[9,11,12,13,14,16,19],notic:12,now:[7,9,10,11,12,13,14,15,19],np:9,num:[9,10,13,14,17],num_init:2,num_loop:9,num_output_nod:2,number:[0,1,2,9,11,15],numer:[1,9,10,11,13,14,17],numeric_tran:17,numeric_transform:[9,10,13,14],numpi:[7,9,15,19],nvidia:[11,15,16],o:10,obj:0,object:[0,2,3,5,7,11,12,13,15,16,17,18],observ:[13,15,16],obtain:11,occup:[7,9,10,11,12,13,15,16,19],occupation_blu:12,occupation_oth:12,occupation_profession:12,occupation_sal:12,occupation_servic:12,occupation_whit:12,odd:15,off:[2,7,18],offspr:2,often:[10,11],oh:1,ohe_min_max_transform:5,onc:[7,14,19],one:[0,1,2,5,7,11,15,19],one_hot_encode_data:1,one_hot_encoded_data:[7,19],oneapi:[11,15,16],onednn:[11,15,16],onehot:[9,10,11,13,14,17],onehotencod:[9,10,11,13,14,17],onli:[0,2,7,11,12,13,16,19],only_train:5,open:[7,11,15,16,17,19],opencod:[7,19],oper:[2,11,15,16],operation:11,opposit:[0,2,7,10,11,12,13,15,16,19],optim:[2,7,11,12,15,16,19],option:[2,7,11,18,19],oraclegencf:12,order:[2,15,16],ordereddict:16,org:[2,5,9,12,14],origin:[1,2,7,10,11,12,13,14,15,16,19],original_pr:2,other:[2,7,9,10,11,12,13,15,16,19],other_paramet:2,our:[7,11,12,13,15,16,19],out:[7,11,19],out_featur:12,outcom:[2,5,7,10,11,12,13,14,15,16,17,19],outcome_nam:[5,7,9,10,11,12,13,14,15,16,17,19],outlier:15,output:[0,2,3,7,11,12,13,18,19],output_typ:1,outsid:11,over:[2,7,15,18],overal:2,packag:[8,9,11,12,16,17,19],page:[7,19],panda:[2,7,9,14,17,19],paper:[2,7,11,12,15,16,19],param:[0,1],paramet:[0,2,3,5,7,11,13,14,15,16,19],parameter:11,part:2,particular:[7,10,11,15,16,19],pass:13,patch:12,path:2,path_or_buf:[7,19],pd:[14,17],pdf:2,penalti:12,peopl:[7,19],per:[2,7,10,11,12,15,19],perform:[2,11,15,16],perhap:13,permiss:[7,19],permit:[2,11,13],permitted_rang:[1,2,7,10,11,13,19],permitted_range_input:1,person:[7,11,15,19],perturb:[7,11,12,15,19],petal:14,phrase:[7,19],pi:9,pickl:17,pip:[7,19],pipelin:[9,10,11,13,14,17],plan:[7,19],plant:14,platform:[11,15,16],pleas:[7,13,16,19],point:[0,2,10,11,12,13],poor:[7,19],popul:14,popular:16,posit:2,possibl:[7,11,15,19],post:[2,7,19],posthoc_sparsity_algorithm:2,posthoc_sparsity_param:[0,2,10],potenti:[7,19],pp:17,pr:[7,19],practic:[1,7,11,19],pre:[2,7,11,12,19],pre_train:[2,12],precis:[1,2],precomput:2,pred_model:6,predict:[2,3,5,7,9,10,11,12,13,14,17,19],predict_fn:2,predict_fn_for_spars:2,predict_fn_scor:2,predicted_outcome_nam:2,prefer:2,prefix_sep:1,preliminari:[7,18],prepar:[1,5],prepare_df_for_ohe_encod:1,prepare_query_inst:1,preprocess:[5,9,10,11,13,14,17],preprocessor:[9,10,11,13,14,17],present:12,preserv:12,preval:[15,16],previous:13,price:14,print:[2,9,10,11,12,15],print_list:0,privaci:11,privat:[0,1,7,9,10,11,12,13,15,16,19],private_data_interfac:[0,8],privatedata:1,probabl:[2,3],probe:[7,19],problem:[2,7,19],problemat:[7,19],proc:[11,15,16],proceed:[7,19],process:[7,19],prodcu:12,produc:[2,11,12,13,16],prof:[7,10,11,12,13,15,16,19],profession:[7,9,10,11,12,13,15,16,19],profil:[7,15,19],project:[2,7,19],project_it:2,promot:13,properti:[0,7,19],prototyp:2,provid:[1,2,7,10,11,12,13,14,15,16,19],proxim:[7,10,11,18,19],proximity_weight:[2,7,15,19],pth:12,public_data_interfac:[0,8],publicdata:1,pull:[7,19],purpos:[9,11,12,15],py:[2,9,11,12,17],pydata:9,pypi:[7,19],pyt:[0,3,11,12,16],python3:[9,12,17],python:[7,9,12,16,17,19],pytorch:[0,2,3,7,9,12,13,16,18,19],pytorch_model:[0,8,12],pytorchmodel:[3,12],q:9,qualiti:2,quantil:1,queri:[2,7,9,10,11,12,14,15,16,18],query_inst:[1,2,7,9,10,11,12,13,15,16,19],query_instance_df_dummi:2,query_instance_norm:2,query_instance_orig:2,query_instances_h:14,query_instances_iri:14,question:[7,11,19],quick:[7,18],quickli:13,r:[7,19],race:[7,9,10,11,12,13,15,16,19],race_oth:12,race_whit:12,rais:[7,19],ramaravind:[7,19],random:[0,2,7,9,10,11,14,15,18,19],random_se:[2,13],random_st:[9,10,11,13,14],randomforestclassifi:[9,10,11,13,14,17],randomforestregressor:14,randominitcf:2,randomli:13,randomsampl:0,rang:[0,1,2,7,9,11,14,15,16,19],rangeindex:14,rank:11,rate:2,rather:[11,12],raw:1,raxi:6,rb:17,re:12,reach:15,read:2,real:2,reason:[11,15],rebuild:[11,15,16],receiv:[7,11,19],recent:[7,17,19],recommend:12,recours:[7,19],reduc:10,refer:[11,12],refin:11,reflect:[7,15,19],regr_hous:14,regress:[2,7,10,11,18],regressor:[0,3,7,11,14,17,19],regular:[7,19],reject:[7,19],rel:[7,11,15,16,19],relat:[1,2,11],relationship:2,releas:11,reload:2,relu:[7,12,19],remain:1,remov:[1,2],repeat:12,replic:11,repo:[7,19],repositori:[9,11,12,13,15,16],repres:10,reproduc:[2,15],request:[7,19],requir:[0,1,2,3,7,11,12,13,16,19],requires_grad_:12,research:[7,19],resourc:[7,18],respect:[15,16],rest:14,restrict:11,result:[0,2,11,12,16],resutl:15,retriev:12,return_mad:1,revers:11,revert:12,ride:15,right:[7,19],rigor:11,robust:15,round:[2,15],round_off_cf:2,round_to_precis:2,row:[2,11],row_index:9,rpub:5,run:[2,7,11,12,15,16,19],run_cod:17,runtim:9,s:[1,2,7,9,10,12,13,14,15,16,18,19],s_genet:9,s_kd:9,s_random:9,sale:[7,9,10,11,12,13,16,19],same:[1,2,7,11,12,13,16,19],sampl:[2,7,9,10,11,12,16,18,19],sample_architectur:[0,5,12],sample_latent_cod:6,sample_s:2,sampling_random_se:2,sampling_s:2,samplingstrategi:0,sav:17,save:[7,19],save_custom_vars_dataset_model:17,scale:[15,16],scaler:[9,10,13,14,17],scenario:11,schema:[0,8],school:[7,9,10,11,12,13,15,16,19],scienc:[7,19],scikit:[5,7,9,13,14,19],scipy_optim:2,scmgencf:12,score:[0,2,3,7,18,19],search:[2,7,11],sec:[9,11,13,15,16],second:[2,12],section:12,see:[2,7,9,11,12,14,15,19],seed:[2,13,15],select:[7,15,19],self:[7,9,10,11,12,13,15,16,17,19],sens:13,sensit:[7,11,19],sepal:14,separ:[7,10,11,12,13,16,19],sequenti:[7,12,19],seri:14,serial:[0,2,8,12],serialization_vers:0,serialize_explain:2,servic:[7,9,10,11,12,13,15,16,19],sess:[7,19],set:[0,1,2,7,9,10,11,12,13,14,15,16,19],set_eval_mod:3,set_random_se:15,set_se:15,set_verbos:[11,15,16],setosa:14,settingwithcopywarn:9,setup:[2,7,19],seven:15,shap:[7,11,19],shape:[7,12,19],share:[2,11,15,16],sharma:[7,19],should:[1,2,7,11,16,19],show:[7,9,10,11,12,13,15,16,19],show_only_chang:[0,10,11,12,13,14,15,16],shown:[0,11,13,16],sigmoid:[2,7,19],significantli:[10,11,16],similar:[2,7,12,19],similarli:11,simpl:[2,7,11,12,19],simpleimput:17,simplest:11,simpli:[7,11,19],simul:16,sinc:[11,12,13,15,16],singl:[1,2,7,9,10,11,12,13,14,15,16,19],singleton:3,site:[9,12,17],size:[0,2],sklearn:[0,3,5,7,9,10,11,12,13,14,17,19],slice:9,slightli:11,slower:11,snippet:11,so:[11,15,16],societ:[7,19],softmax:12,some:[5,7,9,10,11,12,13,15,16,19],soon:[9,12,13],sound:15,sourc:[0,1,2,3,5,6,7,12,19],sourcechangewarn:12,sourcetensor:12,space:11,spars:[11,13],sparsiti:[2,11,13,16],sparsity_weight:2,specif:[2,7,14,19],specifi:[0,2,7,11,12,15,19],split:[9,10,11,13,14],split_data:[7,19],stabl:[5,7,9,14,19],stakehold:[7,19],standard:15,standardscal:[9,10,13,14,17],start_tim:9,statu:[10,11,12],step:[7,9,10,11,13,14,15,17,19],still:[12,16],stop:2,stop_loop:2,stopping_threshold:2,store:[0,2],str:5,strategi:17,stratifi:[9,10,11,13,14],stream_executor:[11,15,16],string:[0,2],studi:[7,19],style:[11,16],subclass:[2,3],subject:[7,19],submethod:2,submit:[7,19],submodul:[7,8],subpackag:[7,8],success:2,suffici:[7,11,19],suggest:[7,19],sum:2,summar:[2,11],summari:[10,11],summary_import:[0,10,11],support:[1,2,9,11,12,13],supress:[11,15,16],syntax:17,syntaxerror:17,system:[5,7,19],systemexcept:5,tabl:[15,19],take:[2,15],taken:[9,11,13,15,16],tan:[7,19],target:[2,9,10,11,13,14],target_label:2,templat:[2,3],tend:11,tensor:12,tensorflow1:0,tensorflow2:[0,15],tensorflow:[0,2,3,7,9,12,13,15,16,18,19],tensorflow_optim:2,term:11,test:[1,2,3,7,9,10,11,13,14,16,19],test_data:10,test_dataset:11,test_instance_df:0,test_pr:2,test_siz:[9,10,11,12,13,14],tf1:[0,3,5,11,12,15,16],tf2:[0,3,11,12,16],tf:[2,7,11,15,16,19],than:[7,11,12,13,15,16,19],thei:[1,7,11,13,19],them:[1,11,15,16],therefor:[7,11,19],thi:[1,2,5,7,9,10,11,12,13,14,15,16,19],third:[2,12],those:[7,10,11,16,19],three:[7,9,11,13,15,19],thresh:2,threshold:2,through:[2,7,11,15,16,19],thu:[7,15,19],tie_random:2,time:[2,9,10,11,12,13,15,16],timeit:9,titan:[7,19],titl:[7,19],tmp:17,to_csv:[7,19],to_json:[0,5,10],todo:[1,2],tolist:[9,14],too:[7,12,19],tool:12,top:[7,19],torch:[6,12],total:[2,9,10,11,12,13,14,15,16],total_cf:[2,7,9,10,11,12,13,14,15,16,19],toward:[2,7,11,12,19],toy_dataset:14,tqdm:[7,19],traceback:17,trade:[7,18],train:[0,1,2,3,7,10,12,14,15,18,19],train_dataset:11,train_test_split:[9,10,11,13,14,17],tran:17,transform:[1,2,3,5,9,10,11,12,13,14,15,17],transform_data:3,transformed_data:1,translat:11,transpar:[7,19],tree:[2,7,9,11,18,19],trust:[7,19],truth:[7,19],tunabl:[2,7,15,19],two:[2,7,11,12,16,19],txt:[7,19],type:[0,1,10,11,12,14,16],typic:[7,19],uci:[5,9,11,12,13,15,16],unari:[2,12],uncov:[7,19],under:12,understand:[7,11,19],unifi:11,uniform:9,uniqu:9,unit:[7,15,19],unknown:[7,10,11,12,13,15,16,19],unlik:12,until:2,up:[11,15,16],updat:2,update_hyperparamet:2,us:[0,1,2,9,13,14,15,16,18],usag:14,user:[1,2,5,7,12,15,17,19],user_global_n:17,user_guid:9,user_n:17,userconfigvalidationexcept:5,userwarn:12,util:[0,7,8,9,10,11,12,13,15,16,17,19],v1:[11,15,16],vae:[2,7,11,18,19],vae_model:[0,5,12],valid:[1,5,7,11,19],validation_split:[7,19],validity_reg:[5,12],valu:[1,2,3,7,9,10,11,12,14,15,16,19],vari:[2,7,11,15,19],variabl:[2,11,12,15,16],variat:[7,12,19],vary_valid:2,vector:2,verbos:[2,7,9,13,19],veri:15,versa:[1,12],versicolour:14,version:[0,7,10,11,15,16,19],versu:9,vice:[1,12],vidhya:[7,19],view:9,virginica:14,visit:[7,19],visual:[0,2,7,11,12,15,16,19],visualize_as_datafram:[0,7,10,11,12,13,14,15,16,19],visualize_as_list:0,vpy38:[9,12,17],vs:[10,11,12],w:[11,15,16],wa:[7,11,16,19],wai:[7,11,12,15,19],want:[11,13,16],warn:[1,11,12,15,16],wb:17,we:[2,7,9,10,11,12,13,14,15,16,19],week:[7,10,11,12,15,19],weigh:11,weight:[2,7,12,16,18,19],welcom:[7,19],well:[7,19],what:[7,15,18,19],when:[1,2,7,11,15,16,19],where:[1,2,11,12,15,16],whether:[2,7,11,12,19],which:[2,7,11,12,16,19],white:[7,9,10,11,12,13,15,16,19],who:[7,19],whose:[0,11,12],why:[7,15,19],wide:[7,19],widow:[7,10,11,12,16,19],width:14,wish:13,within:[7,11,13,19],without:[7,11,12,18],wm1:[5,12],wm2:[5,12],wm3:[5,12],word:[7,19],work:[1,7,9,10,12,13,15,18,19],workclass:[7,9,10,11,12,13,15,16,19],workclass_govern:12,workclass_oth:12,workclass_priv:12,workclass_self:12,world:[7,19],worsen:13,would:[7,11,12,15,19],x1:2,x:[2,6,7,11,12,16,19],x_hat:2,x_hat_unnorm:2,x_i:11,x_test:[9,10,11,13,14],x_train:[7,9,10,11,13,14,19],y:[2,7,11,19],y_test:[9,10,11,13,14],y_train:[7,9,10,11,13,14,19],year:[7,11,19],yet:[7,19],yield:10,yloss_typ:[2,9],you:[7,9,11,12,13,14,15,16,19],your:[7,11,15,16,19],z840:[11,15,16],z:[2,6]},titles:["dice_ml package","dice_ml.data_interfaces package","dice_ml.explainer_interfaces package","dice_ml.model_interfaces package","dice_ml.schema package","dice_ml.utils package","dice_ml.utils.sample_architecture package","Diverse Counterfactual Explanations (DiCE) for ML","dice_ml","Benchmarking different CF explanation methods","Estimating local and global feature importance scores using DiCE","Quick introduction to generating counterfactual explanations using DiCE","Generate feasible counterfactual explanations using a VAE","Generating counterfactual explanations with any ML model","Generating counterfactuals for multi-class classification and regression models","Advanced options to customize Counterfactual Explanations","Generating Counterfactual Explanations without access to training data","<no title>","<no title>","Diverse Counterfactual Explanations (DiCE) for ML"],titleterms:{"1":[13,15],"2":[13,15],"3":[13,15],"case":[7,19],"class":14,"import":[10,11],The:[7,19],access:16,ad:12,adult:11,advanc:15,algorithm:13,ani:13,attribut:11,base_data_interfac:1,base_model:3,benchmark:9,between:15,cf:9,chang:15,choos:13,cite:[7,19],classif:14,constant:0,constraint:12,content:[0,1,2,3,4,5,6],contribut:[7,19],convert:10,counterfactu:[7,9,10,11,12,13,14,15,16,19],counterfactual_explan:0,custom:[13,15],data:[0,10,16],data_interfac:1,dataset:[9,11,12,13,15],deep:11,defin:16,dice:[0,7,10,11,19],dice_genet:2,dice_kd:2,dice_ml:[0,1,2,3,4,5,6,8],dice_pytorch:2,dice_random:2,dice_tensorflow1:2,dice_tensorflow2:2,differ:9,divers:[7,13,15,16,19],diverse_counterfactu:0,estim:10,exampl:11,except:5,explain:[11,12],explainer_bas:2,explainer_interfac:2,explan:[7,9,11,12,13,15,16,19],feasibl:[7,12,19],feasible_base_va:2,feasible_model_approx:2,feasiblemodelapprox:12,featur:[10,11,13,15],gener:[7,9,11,12,13,14,15,16,19],genet:13,get:[7,19],global:[10,11],goal:15,helper:5,independ:13,indic:7,initi:9,initil:12,instal:[7,19],introduct:11,json:10,kd:13,keras_tensorflow_model:3,learn:11,load:[9,10,11,12,13,15,16],local:[10,11],meta:16,method:[7,9,19],ml:[7,9,10,11,12,13,15,16,19],model:[0,9,10,11,12,13,14,15,16],model_interfac:3,modelapprox:12,modul:[0,1,2,3,4,5,6],more:11,multi:14,multiclass:14,next:11,notebook:[7,18],object:10,off:15,option:15,output:10,over:11,packag:[0,1,2,3,4,5,6,7],preliminari:[10,11],private_data_interfac:1,promis:[7,19],proxim:15,public_data_interfac:1,pytorch:11,pytorch_model:3,queri:13,quick:11,random:13,rang:13,regress:14,resourc:11,roadmap:[7,19],s:11,sampl:13,sample_architectur:6,schema:4,score:[10,11],select:13,serial:5,start:[7,19],submodul:[0,1,2,3,5,6],subpackag:[0,5],support:[7,19],tabl:7,tensorflow:11,trade:15,train:[9,11,13,16],tree:13,us:[7,10,11,12,19],util:[5,6],vae:12,vae_model:6,vari:13,weight:15,what:11,without:16,work:11}}) \ No newline at end of file diff --git a/docs/source/conf.py b/docs/source/conf.py index d140e827..487d84d3 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -23,7 +23,7 @@ author = 'Ramaravind, Amit, Chenhao' # The full version, including alpha/beta/rc tags -release = '0.7.2' +release = '0.8' # -- General configuration --------------------------------------------------- diff --git a/docs/source/notebooks/Benchmarking_different_CF_explanation_methods.ipynb b/docs/source/notebooks/Benchmarking_different_CF_explanation_methods.ipynb index 9786d701..628da24a 100644 --- a/docs/source/notebooks/Benchmarking_different_CF_explanation_methods.ipynb +++ b/docs/source/notebooks/Benchmarking_different_CF_explanation_methods.ipynb @@ -274,7 +274,7 @@ " for q in query_instances:\n", " if q in d.categorical_feature_names:\n", " query_instances.loc[:, q] = \\\n", - " [random.choice(dataset[q].values.unique()) for _ in query_instances.index]\n", + " [np.unique(random.choice(dataset[q].values)) for _ in query_instances.index]\n", " else:\n", " query_instances.loc[:, q] = \\\n", " [np.random.uniform(dataset[q].min(), dataset[q].max()) for _ in query_instances.index]\n", diff --git a/setup.py b/setup.py index 077c1b67..03ad7aeb 100644 --- a/setup.py +++ b/setup.py @@ -1,6 +1,6 @@ import setuptools -VERSION_STR = "0.7.2" +VERSION_STR = "0.8" with open("README.rst", "r") as fh: long_description = fh.read() diff --git a/tests/conftest.py b/tests/conftest.py index 398dc307..1050b0fe 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -5,7 +5,7 @@ import pytest from sklearn.compose import ColumnTransformer from sklearn.datasets import fetch_california_housing, load_iris -from sklearn.ensemble import RandomForestClassifier +from sklearn.ensemble import RandomForestClassifier, RandomForestRegressor from sklearn.impute import SimpleImputer from sklearn.model_selection import train_test_split from sklearn.pipeline import Pipeline @@ -116,13 +116,92 @@ def private_data_object(): return dice_ml.Data(features=features_dict, outcome_name='income') +def _save_custom_testing_model(): + numeric_trans = Pipeline(steps=[('imputer', SimpleImputer(strategy='median')), + ('scaler', StandardScaler())]) + cat_trans = Pipeline(steps=[('imputer', + SimpleImputer(fill_value='missing', + strategy='constant')), + ('onehot', OneHotEncoder(handle_unknown='ignore'))]) + transformations = ColumnTransformer(transformers=[('num', numeric_trans, + ['Numerical']), + ('cat', cat_trans, + pd.Index(['Categorical'], dtype='object'))]) + clf = Pipeline(steps=[('preprocessor', transformations), + ('classifier', RandomForestClassifier())]) + dataset = helpers.load_custom_testing_dataset() + model = clf.fit(dataset[["Categorical", "Numerical"]], + dataset["Outcome"]) + modelpath = helpers.get_custom_dataset_modelpath_pipeline() + pickle.dump(model, open(modelpath, 'wb')) + + +def _save_custom_testing_binary_model(): + numeric_trans = Pipeline(steps=[('imputer', SimpleImputer(strategy='median')), + ('scaler', StandardScaler())]) + cat_trans = Pipeline(steps=[('imputer', + SimpleImputer(fill_value='missing', + strategy='constant')), + ('onehot', OneHotEncoder(handle_unknown='ignore'))]) + transformations = ColumnTransformer(transformers=[('num', numeric_trans, + ['Numerical']), + ('cat', cat_trans, + pd.Index(['Categorical'], dtype='object'))]) + clf = Pipeline(steps=[('preprocessor', transformations), + ('classifier', RandomForestClassifier())]) + dataset = helpers.load_custom_testing_dataset_binary() + model = clf.fit(dataset[["Categorical", "Numerical"]], + dataset["Outcome"]) + modelpath = helpers.get_custom_dataset_modelpath_pipeline_binary() + pickle.dump(model, open(modelpath, 'wb')) + + +def _save_custom_testing_multiclass_model(): + numeric_trans = Pipeline(steps=[('imputer', SimpleImputer(strategy='median')), + ('scaler', StandardScaler())]) + cat_trans = Pipeline(steps=[('imputer', + SimpleImputer(fill_value='missing', + strategy='constant')), + ('onehot', OneHotEncoder(handle_unknown='ignore'))]) + transformations = ColumnTransformer(transformers=[('num', numeric_trans, + ['Numerical']), + ('cat', cat_trans, + pd.Index(['Categorical'], dtype='object'))]) + clf = Pipeline(steps=[('preprocessor', transformations), + ('regressor', RandomForestClassifier())]) + dataset = helpers.load_custom_testing_dataset_multiclass() + model = clf.fit(dataset[["Categorical", "Numerical"]], + dataset["Outcome"]) + modelpath = helpers.get_custom_dataset_modelpath_pipeline_multiclass() + pickle.dump(model, open(modelpath, 'wb')) + + +def _save_custom_testing_regression_model(): + numeric_trans = Pipeline(steps=[('imputer', SimpleImputer(strategy='median')), + ('scaler', StandardScaler())]) + cat_trans = Pipeline(steps=[('imputer', + SimpleImputer(fill_value='missing', + strategy='constant')), + ('onehot', OneHotEncoder(handle_unknown='ignore'))]) + transformations = ColumnTransformer(transformers=[('num', numeric_trans, + ['Numerical']), + ('cat', cat_trans, + pd.Index(['Categorical'], dtype='object'))]) + clf = Pipeline(steps=[('preprocessor', transformations), + ('regressor', RandomForestRegressor())]) + dataset = helpers.load_custom_testing_dataset_regression() + model = clf.fit(dataset[["Categorical", "Numerical"]], + dataset["Outcome"]) + modelpath = helpers.get_custom_dataset_modelpath_pipeline_regression() + pickle.dump(model, open(modelpath, 'wb')) + + @pytest.fixture() def load_custom_vars_testing_dataset(): data = [['a', 0, 10, 0], ['b', 1, 10000, 0], ['c', 0, 14, 0], ['a', 2, 88, 0], ['c', 1, 14, 0]] return pd.DataFrame(data, columns=['Categorical', 'CategoricalNum', 'Numerical', 'Outcome']) -@pytest.fixture() def _save_custom_vars_dataset_model(): numeric_trans = Pipeline(steps=[('imputer', SimpleImputer(strategy='median')), ('scaler', StandardScaler())])