From 0c9d320baac7624e031754fd7ee31a7f829c8453 Mon Sep 17 00:00:00 2001 From: samaid Date: Sun, 8 Dec 2019 15:36:18 -0600 Subject: [PATCH] Scripts and rst files for SDC API Reference auto-generation. Build instructions will be committed in the following PR --- docs/source/_images/scalability.png | Bin 0 -> 106189 bytes docs/source/_images/scalability.pptx | Bin 0 -> 42991 bytes docs/source/_images/scalability_with_logo.png | Bin 0 -> 132492 bytes .../source/_images/scalability_with_logo.pptx | Bin 0 -> 135192 bytes .../_api_ref.pandas.series_templ.rst | 492 +++++++++++++ docs/source/apireference.rst | 10 +- .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 154 bytes .../apiref_generator.cpython-37.pyc | Bin 0 -> 14939 bytes .../__pycache__/sdc_doc_utils.cpython-37.pyc | Bin 0 -> 10356 bytes .../sdc_object_utils.cpython-37.pyc | Bin 0 -> 11351 bytes docs/source/buildscripts/apiref_generator.py | 657 ++++++++++++++++++ docs/source/buildscripts/module_info.py | 443 ++++++++++++ docs/source/{ => buildscripts}/pandas_info.py | 93 ++- docs/source/{ => buildscripts}/sdc2pd_name.py | 0 docs/source/buildscripts/sdc_doc_utils.py | 393 +++++++++++ docs/source/buildscripts/sdc_info.py | 188 +++++ docs/source/buildscripts/sdc_object_utils.py | 393 +++++++++++ docs/source/buildscripts/user_guide_gen.py | 280 ++++++++ docs/source/compilation.rst | 10 +- docs/source/conf.py | 46 +- docs/source/examples.rst | 5 +- docs/source/for_developers.rst | 3 +- docs/source/index.rst | 9 +- docs/source/info.py | 135 ---- docs/source/module_info.py | 266 ------- docs/source/overview.rst | 4 +- docs/source/performance.rst | 1 + docs/source/sdc-sphinx-theme/static/sdc.css | 10 +- docs/source/sdc_info.py | 82 --- docs/source/series.rst | 13 - docs/source/workflow.rst | 7 +- 31 files changed, 2978 insertions(+), 562 deletions(-) create mode 100644 docs/source/_images/scalability.png create mode 100644 docs/source/_images/scalability.pptx create mode 100644 docs/source/_images/scalability_with_logo.png create mode 100644 docs/source/_images/scalability_with_logo.pptx create mode 100644 docs/source/_templates/_api_ref.pandas.series_templ.rst create mode 100644 docs/source/buildscripts/__pycache__/__init__.cpython-37.pyc create mode 100644 docs/source/buildscripts/__pycache__/apiref_generator.cpython-37.pyc create mode 100644 docs/source/buildscripts/__pycache__/sdc_doc_utils.cpython-37.pyc create mode 100644 docs/source/buildscripts/__pycache__/sdc_object_utils.cpython-37.pyc create mode 100644 docs/source/buildscripts/apiref_generator.py create mode 100644 docs/source/buildscripts/module_info.py rename docs/source/{ => buildscripts}/pandas_info.py (50%) rename docs/source/{ => buildscripts}/sdc2pd_name.py (100%) create mode 100644 docs/source/buildscripts/sdc_doc_utils.py create mode 100644 docs/source/buildscripts/sdc_info.py create mode 100644 docs/source/buildscripts/sdc_object_utils.py create mode 100644 docs/source/buildscripts/user_guide_gen.py delete mode 100644 docs/source/info.py delete mode 100644 docs/source/module_info.py delete mode 100644 docs/source/sdc_info.py delete mode 100644 docs/source/series.rst diff --git a/docs/source/_images/scalability.png b/docs/source/_images/scalability.png new file mode 100644 index 0000000000000000000000000000000000000000..ca926a4c12d0ebf41703e090d718f04a59a1c0d6 GIT binary patch literal 106189 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
  • -1-3c^MQ1f!sH!V8s@H&;2(aZ7A!yW?cVM0!&k;N!8pcjQD63wMsdWxK8Haz7stWZ4)%qw9nu^gnA(}zSXhU81yl3c1c$#Q3PA=F z@#ON*pa}W0d2(%nU$WeN>o@nZCPp`sx#OiMT?^fg|KyYt`K_mk?a6L(!x7R!o0C<* z^FmTWqO!VLDL~N(jf;R_94>Z?*$5bKsPN0AQeZOCjST2FmbcCH268x&Q`W6%xGu`^ z<{CTmBth9%PdAT)E*v(u3F1kFFUG#moPBBja#j>5em-?#aK3(%@_bi#(Zg#G{QLbI z9ECjp{Q3^k{{RUM98IL8q!RwH{R!EE!s#IMw`V@CbpPRwl&Q@#sI;}k9J5W1vzrF+ z_ZYbe{AAUrrf66on~NtXzlc%H2pc=y>RX))_^@XsXLZmlXL0)FjP};>yW--!NUe$! zkn{#+RfF}u3y3;O4kQG{FQ#j;-Q6n3h@RPhY53IEnZk91v5&pg#*);C;%XlEyw}CS zpSroA#si_% z_4mNMlQPVv*jOVKGz}r4DET=b>=N|%`{Z0;)ryo=8I2E2K@Z!ggwGcp`4c;lFKCCu z-pMrld|Ca5u`dOeKf%B|5`NGSS{;kjZE^Wb0vQ^?-V9cBWIuHpHL*fF?0qYD)8E!a z9YYtt6oYF3^G=+XY*vBcv*J*QKv)QuEZBe#qc7UP8v;`bWV>DKRy;7rQ4>75vFu zt#c(8f6I9Z%I)DaMu^MDZ$s4`haKi4K77^c8LYqZ$uq$ij*nIyc>43VK2=pr=F40m z_WJokF+PnT@`tJHlTA`IT006CoW>kTm5_nOxTgE{Hm@S^vx^jA_|^)|!M40{0%pz1 zB_}qApF?}-O>7GM;fLQ6pRF->Xo_U#RaIBLN-E1gvQKxs7q8yJ&g5@9F&I^#;ojA7 z^=?RMy)rRyXq2U(5Fw6?CDKY_> zX@*C_!b6*}t0PLYM{Gig>2!TA^B2N7FJDH|s9aaeUSGI>gEZxe=T~Rq(Ot?yd;MQz zAIF$#Qq$U-q>_o@)y$OIaN~setVYi90bdRSBZ0?jkbMdD7M5>0(=C2+dkLa`u}*i- zDfypDzJBdA@ir$BwyY>EbKh`gSx1$JdYJ1&?lq2^+c3fI-__Ms`Z)pZ+I;~~@P)dW zoLiUQIlm4O<4GFf+f*rTc(w4%Z(@&uAwA6=@3+6(;;@s?aTX+yec(c>W!dwtX#r22 z>EH#~0&vrnvsKH;h&?`xwdjWI&%I$23UI*ZW^lylOX*)4|dq9lvRZk-ja zg8N&q?d9J2XG&GkH7DhBB449#KDC|D#5k(Q`@^qu%x5t<7J8;Jm?j_}%fct30*i}jY~qIl2j2_;!Kjcx|ER7 zW?69d3+29Kw-|e-c-v3?LwpwUf}UJZpMdhA!#80p8kkI!pSM%rHZJ3=68~aczr_db zk2bFuA(!2km85`x)2?2CGv*x4?)y4hhZLSFmSwy<7(yhrIXw3(&D6BJzo(|eb?^ZK zylquQy(n!(#BWC1wk-xa50gbR`&R-Vv|GHl8!g1#Y^x7u0ySIu5EQNfs2y8)7nfP$J=R&>3Ms0^*?|Tp0IGJ!EHNSS!HdpqH ztG)U>=JcKD-h{8Et#S#u=9lENByDqx>7qf%UTKVi@d+i>hmE0Pv@^XaWLon zbLEZ%!>g}re-LV5lF|3!2MqDI;o~mq@uj$o6z(r@*Wtbm<-6)M79Xygcy{bHgwoVN zFQ)<}T1|@;Z4Eg3MB)S2-LLkg9K?z6RR2>Ns$>u0_r34yD;YjMl(!c<*6O<}G%#dH zWILMgl0Cn#T2#oOIcWt9WKiNI#!6#z&C#)wzGsFarntd+W7Kb_&UvCW3X*s

    $j&KHa-jZ+ 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

    LZwO-WDKXnk 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

    MmTQGCtma>=2cEloP0#C z)=3w?|MtGx#c|S3E|0{Jfnh^UKt6&{DJ8L|FH{f^}3{ZVaV#kaWfcrWy(s39NXg;@Osb% z7;6bVRYN-i)1LmX-o&h)r}pq9w$_{bU*2j_ypGM%)O38$YRal;YFdzEWU)VJhM}td zN$YJS?O*_Umf75I7Q-@V)o9I&t#C)`|2?bKxLhuC(V_E%P^D7M2f_B5nr1+1tOtp6T7$bK?v!Kc6^0pU%_}CM!4I$}KU$(MbD3 zoIjrY>zS%d1s$0(u93T4Zpw!LDm)dQBPVc}8c#?#Lhv=NgE1uMeOOVR&UgR7ydShD zL$#&Za!2yXU0a&RgsszjEpqx1T{dRG7>C}r7TCx)srz4kL7ME8AxE>qJv+hbn48Cvy-R&WaGPy@&OXJyk7lr`d-4hw}bL zv_xIf6Fhd`*b&Ol^bGg5qApM#56>ZRxMG7FjgjYT-TgB@Gou%l$yQVMJ*ado))%@C znhmkAqYIZw5fgs%-EMM;yq-;yQ`xgdM`58LLZ#R~&l^rsCfD@J@Xv?CKaY!Kwx*VY zAHHnR(@^M;654z!5++kTmlq2gTH+ls%LE=(X)GtqDUYy+46)I@+Z`QtYNnMpUC`{m zbwM;wS@r{Xo5hh@4T(lB-cBw2`WDylcUtAx5T6hT)`M+YS381)#L~~RB?jk%F*yvO z5am?TvG4|j^5aXm<`TvkPx6zxtN9^osBcxl-h8yY# z;bcwXI0D*F@;`L&*Ho8OtxRZL;m^OXYGjfpZum`I5dLi&-l7yXtZy*6JGZW}^uArg zx+c=1YP*ttvu&-l_6;xaA~oIJ#b$i;D4Uq9>JGZJrb`WMh_xsL%`R@t)I=;|=RN)4C$2DaWx zP+XiKAIn8&S`B8F*#0{96T?WBaCQ#W80&>mA_0N~0nhVbxZaxV9kwK@!)v2S9xDt8 ze-H#~@3nv{YGR>l04Lz!1?`f|QP7>jxOOOiYy)RBu{5mCsq0d!H^hG|sPF1~OD&)M zz%Mz&pr^@fj>@PZpM=VGH{!G>t$BP8lC_J4%Qq%DM@cEhM2tZ%f)_s6MFf@9)hGN3 zUq6B^I*sT0NOGTz#Wc7zRWhifJDYxN;a-<)e}bU4~;KaD-z zm}9{BF71AiO7gC?B_yuQ)pFn@QA}yna>~NYY;gCs*&*x=1Y_-RXUeUxbS_eHXADz7 zBqXApoc@tjV24iX7lG&oG!^e|+@zJ>x%HN&T7~GXxTnd7?OnMsBAZ?0{o!?2*uAcL zZ9YXshcUG2+vAAL;^KpWbSOngCXk9n0f_p87yap*Wcy;2_yVe!{m`+^of{T%r?9{N z3yJw_>zW(+LSO|La?*Wx=7!dP;!`M%3hSsesqh53*sTUqwv#=hxNIlloLbUr1vf}F zma%%RB(|@uZ4VBX83AD$2M0$n0^zhhp`@(rh&oya41R#Q-lbN11E8^A0$|HRfrES5 zSO1Om&ePzy>gk^abtHL)GdyS{HTB62;uua6SlI4@W5#pob*B>qrv=UG+PVFXBMA)Sf^*DR2Zn{M zeGgy6d-BSk35G*TVjf)>+b~FBWIc0~Ud>_G5zrX|tFWF2isup`6nTICykuY)M|yhN z*c4rsmy{gMHFy_a4rM6-9wv}WsA^p_F*Y^^!!k3Y@tDuAIXGJzJ9E;@z$arjxeRRf zK#ktVfb6{o)8ZO4kjix^A0V7mI{b5-FZt}n3N+Tj5X+Ol)mX<9OM?}&+Q7OV+qE%*|O_yEQv-JF84FwEwjIL<5H0PY>=hI<>pZ3vbM%5_f$AasR19ZGgu3s)9H(4 zR25v~Cyo<<0pcQe<#<`w-@h9f(%$V0`!EUJ-@qn+?v|C~`HPYltXaqlVDxf-Dp%BM z*XMq$YkZe(zkbs_B=gQAmBYCrwxJG-n`5j3u#@Rb*GGeM%;T-N27K5f@`MHsGh25a zPM-Dn*e}{CvjV9~HRCTFcWg_)mL!unH_*sow(9z7e|8(;Uon-)?)gJUShU+B%>|eT z)_$s$HL<~{MR3X3+cgzh%HIA1ySW9nQ(-RZk0%i$IKs>jFXP(<{{%0nyBa@%M8LE4 zB7(b4gb!+1C~ZCxI%ckCk71O9MPd57kk#7*tjNMa^8V){Psu_XR!;TSaq%k{Pyu4q z^5x3Pio?QGPW=)-Rp{e^m?qIxf&PUQuU{r*jl%Xm30+ zjUR~#OfDLmoXSn!vm?+UnGDvPiMeRNfTY|*!=?I+PhOB1BhPExh!yKZk1`x+Idwn0 z)~5lkVG|eMhJkm8yk8g2=By7)G6**bY$STx!$k;p7z?WKBU)}92^3vk1fNzZOWVMr zS+?eV1y7n@Zd}@zVFWlFY=}k2EG<3R5c@KPF=iuikg=5Yh33V2D;%K1`djO$iFevi zvEt{oH$9nL97SF=k8ZU$cuma*bZ@=ZweN)WcEQlc3_#iyM(lLov>FKtf?Tt_H1h%{D znXkmxeF8_&xnrwy4&dtcub~aFF&0d#k9g+#g@fr}y>CJr$_TLJw5p62^RpLM>jovT z-bZ{yOSnBo)N$w`w3k#=ZghZ+9Sm)Hx2lQgPWr|CxP@k~T3JoGs})-uEygc#3oYV> zNa}a62_QdS-LcNh)xLVkebPUWj?yh`X^}t}k!~)nZqf%*njUz)^BOcC8t{K)fuig#3FdjIcCc+b``w#k%S3P z@SrmxlG(Q-M9b2+#FG{OLE>A?!q7ho-$(>mYah~VXO1G){zB8VhJAhW^sePUBcODm zr&m)>ewey0@DZM2fS9s>z#Czx! ztO6eM;*Ap+gyo)Ol`F$?1_K7PUO`wC2CoZ6z!DLBkqd2@pM6MPp23T}ykwU17Jddv zq)Vsw8~Z(5H`yOEG%ON&Y-Wm4r^HeLrDHYtotsN>LKyr%b7T~YciF}1>UWT~Q4SN) z%k;)t_Z5;%#73`><8zpAX*{|r2$9`Al{CGP8$h+DT{ZmVBCI#H$A~8(L&+C1dsD*h zIablQ4lHPq+JM^^nE+U~<&&s0ms4b!r4X#tD2oPFvJ3!0pJ%^Yl!O1jo(A zd;a5Q4upb-MMt3c;bd@b<7}2I_rmT%s|fdqUob>i$%6(i6BfC>Ds@V#Vz_3*J$*pkLU1i@Eox(tPF$Us)?DLX*no;$TmSHAMBwv+jJ_ zmxF<$0dJ~zqMqICE%0>dbF3;Wo(j$z3sC~Dvj7~uDR>WYiXE?)hXv;uj1(-Uf4~tt z&UGPCdoSp<{D-XIZ!oEmAfv?2m~ZxKy54k_mTJiCYaOrsNS_=fddFEo&a@-KJJz&6@wS}PKTQ{#RkxU>=SNB*W2q_Xe+&Q0VF@i0*csvvt`7aypt1H> zb~yY8GQcRAEBdq>a>8A{@+A3MeT{fcm=@&7W?t;^L^@$7d-?>PPLwWTZw3Ya91HyJhygJR z+SKpFs;#&7C@p&0m!2sSjy6=SE`Sy6L!p7Av zMR@m_`(l3U;hDy-#@{2jQNbH4x+JZWh^D3D`>l{2@XDxZ6btqI{BRBd%vqFDy07H& za@B!|=)ZV0Aa~5m%iE!IU(YszOU*M(`;lAFlg%Cj z;$So;{wjr1Tm9K@g6Z0yYtL&C6#44u#5M4ioYSkYgHutRTF6Vq=tNvDB#+{7w_-Mb!KJ7Rzy6dwjB=2WH=+_t`Z5ulMh z?-e!+T(n~5ko*+TRJp?Nxn!{aW-j5;t1QuS;Y}H7 zK3>NpbQ(1eO?L5U@T{p^6PcAhEBFG{hd)n!rfO7J`(-#?N9{W2G#pFj%(eM@acXA4 zhWBk((1T}axc2Q$B3JEC%5{6fkXQ2}LOcgB*!99Js`v7Abmgj*^nMW5HKM;>91Cfn zUwC;cg3SU}aE=IUuN%w_kI=De0k{!_AE3#`fuSk+PY!%St9yaVZZprycVIUUR^u^w zkf%Il#dx0A^Tgga`=iO1qd5xjYu{K_0xfPnT?zPkC5YR)#@yb9+8=^dqA<+k_&8Dh zr}pLb5+2f-u|K&Yf6!BOpTP5T=LFm8&g_i`Age92nC$52$j-?Tq6it?yggV+fC3)~ z)xcey`VTO-@hZ8S3eR=q91PWavkE_ipEv%E_dFggtFUlVzd2y#X>K8`2fu$K2g0N8 zkRb}&QD!9V)1Es#H?!ISp70OyU0clUY6iolEv%1R&-Qff><)pv*e1-aJGz3!?wDRg zQdU+L3he}g=>R#H+@hK4I6c^aqNlk~@K%N<0L z#>W?-N8-1)wZ}kzy7mf3rF|5ILhaUF0Mcl?|MU;W>O9<(m7{$uU0qSnk^=(+9X3Y{ zjEr{2ic$*;3yX`3tEx~d-SL2am6@4&h!xzcZ~Cqd6*^##{lkI@#hR`2s4goz0sPmq z@CyquF)>NWc6jo@fV|0KcJ?d3CBUN#o+UA$qII_1V+8*DFYE{PZ~p$l1#*Q^gqG&! zxj8u?N0;Q2Pg}I-EO_woo?24)PSo(4_U&)!AJ)Gq53NuVGEW6w3;YY@hze{(;CeuG zSLgQ6H;PmM!h`G67l5k3^&a#8?gvy8rDbKZ35jP5ULn3Ai9%b5aUhU(^?pdfsKr&b zW@d%QSH^i~_#sCEWBlCU@FX~ofeTmQWNTJK@i(O^nShP*=iYq=r-QeC8xck1XG~GQK<@+%(-_GvBm- z8*=4$qz*tKxOiC5nD$RRJt@{J-C#nBDiY~~iiPbtU9o~jv7M-m--^kCZVS>5;H1_G zHSaf`4wkWobY?8g*IqcR46B!xe#Cx3c1rllO9|D%J=|+*AXc08k!#19!@{j7k&ZaH z)jVJ|XVj|WT(i^>>N`_$*8!hsGxl`|_Zh+4ZLPc)dLD~Ale;heXDq?p85P)hHGPh? z{T?1lmJLw`ImL6lxH~Lr-Bo6%7|;Y3|Jd9c3vJ+bWeZdk6nrVv{{{2I=S^fAk%qrhdNXvAw%*j;9 z%dvcx{6C|xe9IMI$Q5Wx5d(3A!IDbztQeO*e&rk%$~VVeDUO+AcKUkk!Ivbh)=<^A z>=QrL8(4`snbGLE*my;z9vfep#L{|fq2h(3bNexB1KdKgoFl@1R=P~m;OXJLI#lB{ z*91{_bF|z)7#|nMQW|0>EHyDHe=cf&Ehod@%+SxJ|9cWC{U@l}{O^);7h&wk;GgTL z=VzDINSk>$e)qO2jL5wzm$dw9zU;zi=zj+N|7^+s$6A={PrbobV+cy*WrqLrwUT18 K@AKd4eEnbapcO~} literal 0 HcmV?d00001 diff --git a/docs/source/_images/scalability.pptx b/docs/source/_images/scalability.pptx new file mode 100644 index 0000000000000000000000000000000000000000..34749aa90bfb82ca179dad52b8fceeb105696352 GIT binary patch literal 42991 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 X8sNTlJ literal 0 HcmV?d00001 diff --git a/docs/source/_images/scalability_with_logo.png b/docs/source/_images/scalability_with_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..27eb387dc8e7cb5bafa9eff3792bed6ec1cade77 GIT binary patch literal 132492 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 @CP%-F44{ikX1qNzKP1o8ryOD+XD38?Rz|Sj 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π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ƒ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

    3%N$cu`F7F+S-%kq)ZX4+HsusUJka-#gIO=N?*e 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�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

    N+AM@Xpt&Ewmqg$^iyd8sa3wrXsmJ?)EPq)SqS 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

    `BHJp(gW{C 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 literal 0 HcmV?d00001 diff --git a/docs/source/_templates/_api_ref.pandas.series_templ.rst b/docs/source/_templates/_api_ref.pandas.series_templ.rst new file mode 100644 index 000000000..6bf9981f2 --- /dev/null +++ b/docs/source/_templates/_api_ref.pandas.series_templ.rst @@ -0,0 +1,492 @@ +.. _api_ref.pandas.series: +.. include:: ./../ext_links.txt + +Pandas Series +============= +.. currentmodule:: pandas + +This is basic `Pandas*`_ data structure representing a dataframe column. In `NumPy*`_ terms this is +one-dimensional ndarray with axis labels. + +Constructor +----------- + +.. sdc_toctree + Series + +Attributes/Operators +-------------------- + +.. sdc_toctree + Series.index + Series.array + Series.values + Series.dtype + Series.shape + Series.nbytes + Series.ndim + Series.size + Series.T + Series.memory_usage + Series.hasnans + Series.empty + Series.dtypes + Series.name + Series.put + +Type Conversions +---------------- + +.. sdc_toctree + Series.astype + Series.infer_objects + Series.copy + Series.bool + Series.to_numpy + Series.to_period + Series.to_timestamp + Series.to_list + Series.get_values + Series.__array__ + +Indexing and Iteration +---------------------- + +.. sdc_toctree + Series.get + Series.at + Series.iat + Series.loc + Series.iloc + Series.__iter__ + Series.items + Series.iteritems + Series.keys + Series.pop + Series.item + Series.xs + +For more information on ``.at``, ``.iat``, ``.loc``, and +``.iloc``, see the :ref:`indexing documentation `. + +Binary operator functions +------------------------- + +.. sdc_toctree + Series.add + Series.sub + Series.mul + Series.div + Series.truediv + Series.floordiv + Series.mod + Series.pow + Series.radd + Series.rsub + Series.rmul + Series.rdiv + Series.rtruediv + Series.rfloordiv + Series.rmod + Series.rpow + Series.combine + Series.combine_first + Series.round + Series.lt + Series.gt + Series.le + Series.ge + Series.ne + Series.eq + Series.product + Series.dot + +User-Defined Functions, GroupBy, Window +--------------------------------------- + +.. sdc_toctree + Series.apply + Series.agg + Series.aggregate + Series.transform + Series.map + Series.groupby + Series.rolling + Series.expanding + Series.ewm + Series.pipe + +.. _api_ref.pandas.series.stats: + +Computations, Descriptive Statistics +------------------------------------ + +.. sdc_toctree + Series.abs + Series.all + Series.any + Series.autocorr + Series.between + Series.clip + Series.corr + Series.count + Series.cov + Series.cummax + Series.cummin + Series.cumprod + Series.cumsum + Series.describe + Series.diff + Series.factorize + Series.kurt + Series.mad + Series.max + Series.mean + Series.median + Series.min + Series.mode + Series.nlargest + Series.nsmallest + Series.pct_change + Series.prod + Series.quantile + Series.rank + Series.sem + Series.skew + Series.std + Series.sum + Series.var + Series.kurtosis + Series.unique + Series.nunique + Series.is_unique + Series.is_monotonic + Series.is_monotonic_increasing + Series.is_monotonic_decreasing + Series.value_counts + Series.compound + +Re-Indexing, Selection, Label Manipulation +------------------------------------------ + +.. sdc_toctree + Series.align + Series.drop + Series.droplevel + Series.drop_duplicates + Series.duplicated + Series.equals + Series.first + Series.head + Series.idxmax + Series.idxmin + Series.isin + Series.last + Series.reindex + Series.reindex_like + Series.rename + Series.rename_axis + Series.reset_index + Series.sample + Series.set_axis + Series.take + Series.tail + Series.truncate + Series.where + Series.mask + Series.add_prefix + Series.add_suffix + Series.filter + +Missing Data Handling +--------------------- + +.. sdc_toctree + Series.isna + Series.notna + Series.dropna + Series.fillna + Series.interpolate + +Re-Shaping, Sorting +------------------- + +.. sdc_toctree + Series.argsort + Series.argmin + Series.argmax + Series.reorder_levels + Series.sort_values + Series.sort_index + Series.swaplevel + Series.unstack + Series.explode + Series.searchsorted + Series.ravel + Series.repeat + Series.squeeze + Series.view + +Combining, Joining, Merging +----------------------------- + +.. sdc_toctree + Series.append + Series.replace + Series.update + +Time Series +----------- + +.. sdc_toctree + Series.asfreq + Series.asof + Series.shift + Series.first_valid_index + Series.last_valid_index + Series.resample + Series.tz_convert + Series.tz_localize + Series.at_time + Series.between_time + Series.tshift + Series.slice_shift + +Accessors +--------- + +Pandas provides dtype-specific methods under various accessors. +These are separate namespaces within :class:`Series` that only apply +to specific data types. + +=========================== ================================= +Data Type Accessor +=========================== ================================= +Datetime, Timedelta, Period :ref:`dt ` +String :ref:`str ` +Categorical :ref:`cat ` +Sparse :ref:`sparse ` +=========================== ================================= + +.. _api_ref.pandas.series.dt: + +Datetimelike properties +~~~~~~~~~~~~~~~~~~~~~~~ + +``Series.dt`` can be used to access the values of the series as +datetimelike and return several properties. +These can be accessed like ``Series.dt.``. + +Datetime properties +^^^^^^^^^^^^^^^^^^^ + +.. sdc_toctree + Series.dt.date + Series.dt.time + Series.dt.timetz + Series.dt.year + Series.dt.month + Series.dt.day + Series.dt.hour + Series.dt.minute + Series.dt.second + Series.dt.microsecond + Series.dt.nanosecond + Series.dt.week + Series.dt.weekofyear + Series.dt.dayofweek + Series.dt.weekday + Series.dt.dayofyear + Series.dt.quarter + Series.dt.is_month_start + Series.dt.is_month_end + Series.dt.is_quarter_start + Series.dt.is_quarter_end + Series.dt.is_year_start + Series.dt.is_year_end + Series.dt.is_leap_year + Series.dt.daysinmonth + Series.dt.days_in_month + Series.dt.tz + Series.dt.freq + +Datetime methods +^^^^^^^^^^^^^^^^ + +.. sdc_toctree + Series.dt.to_period + Series.dt.to_pydatetime + Series.dt.tz_localize + Series.dt.tz_convert + Series.dt.normalize + Series.dt.strftime + Series.dt.round + Series.dt.floor + Series.dt.ceil + Series.dt.month_name + Series.dt.day_name + +Period properties +^^^^^^^^^^^^^^^^^ + +.. sdc_toctree + Series.dt.qyear + Series.dt.start_time + Series.dt.end_time + +Timedelta properties +^^^^^^^^^^^^^^^^^^^^ + +.. sdc_toctree + Series.dt.days + Series.dt.seconds + Series.dt.microseconds + Series.dt.nanoseconds + Series.dt.components + +Timedelta methods +^^^^^^^^^^^^^^^^^ + +.. sdc_toctree + Series.dt.to_pytimedelta + Series.dt.total_seconds + +.. _api_ref.pandas.series.str: + +String handling +~~~~~~~~~~~~~~~ + +``Series.str`` can be used to access the values of the series as +strings and apply several methods to it. These can be accessed like +``Series.str.``. + +.. sdc_toctree + Series.str.capitalize + Series.str.casefold + Series.str.cat + Series.str.center + Series.str.contains + Series.str.count + Series.str.decode + Series.str.encode + Series.str.endswith + Series.str.extract + Series.str.extractall + Series.str.find + Series.str.findall + Series.str.get + Series.str.index + Series.str.join + Series.str.len + Series.str.ljust + Series.str.lower + Series.str.lstrip + Series.str.match + Series.str.normalize + Series.str.pad + Series.str.partition + Series.str.repeat + Series.str.replace + Series.str.rfind + Series.str.rindex + Series.str.rjust + Series.str.rpartition + Series.str.rstrip + Series.str.slice + Series.str.slice_replace + Series.str.split + Series.str.rsplit + Series.str.startswith + Series.str.strip + Series.str.swapcase + Series.str.title + Series.str.translate + Series.str.upper + Series.str.wrap + Series.str.zfill + Series.str.isalnum + Series.str.isalpha + Series.str.isdigit + Series.str.isspace + Series.str.islower + Series.str.isupper + Series.str.istitle + Series.str.isnumeric + Series.str.isdecimal + Series.str.get_dummies + +.. _api_ref.pandas.series.cat: + +Categorical Accessor +~~~~~~~~~~~~~~~~~~~~ + +Categorical-dtype specific methods and attributes are available under +the ``Series.cat`` accessor. + +.. sdc_toctree + Series.cat.categories + Series.cat.ordered + Series.cat.codes + Series.cat.rename_categories + Series.cat.reorder_categories + Series.cat.add_categories + Series.cat.remove_categories + Series.cat.remove_unused_categories + Series.cat.set_categories + Series.cat.as_ordered + Series.cat.as_unordered + + +.. _api_ref.pandas.series.sparse: + +Sparse Accessor +~~~~~~~~~~~~~~~ + +Sparse-dtype specific methods and attributes are provided under the +``Series.sparse`` accessor. + +.. sdc_toctree + Series.sparse.npoints + Series.sparse.density + Series.sparse.fill_value + Series.sparse.sp_values + Series.sparse.from_coo + Series.sparse.to_coo + +.. _api_ref.pandas.series.metadata: + +Plotting +-------- +``Series.plot`` is both a callable method and a namespace attribute for +specific plotting methods of the form ``Series.plot.``. + +.. sdc_toctree + Series.plot + Series.plot.area + Series.plot.bar + Series.plot.barh + Series.plot.box + Series.plot.density + Series.plot.hist + Series.plot.kde + Series.plot.line + Series.plot.pie + Series.hist + +Serialization, Input-Output, Conversion +--------------------------------------- + +.. sdc_toctree + Series.to_pickle + Series.to_csv + Series.to_dict + Series.to_excel + Series.to_frame + Series.to_xarray + Series.to_hdf + Series.to_sql + Series.to_msgpack + Series.to_json + Series.to_string + Series.to_clipboard + Series.to_latex diff --git a/docs/source/apireference.rst b/docs/source/apireference.rst index c8d7ec81e..1857d152a 100644 --- a/docs/source/apireference.rst +++ b/docs/source/apireference.rst @@ -1,11 +1,9 @@ .. _apireference: API Reference -~~~~~~~~~~~~~ +************* -This page gives an overview of all Pandas APIs supported currently by Intel® Scalable Dataframe Compiler +.. toctree:: + :maxdepth: 2 -.. autosummary:: - :toctree: _autosummary - - pandas.Series + Series: Columnar Data Structure <./_api_ref/api_ref.pandas.series.rst> diff --git a/docs/source/buildscripts/__pycache__/__init__.cpython-37.pyc b/docs/source/buildscripts/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a2db886b39093431f3bb6f0b8ba6cae2dc365cb2 GIT binary patch literal 154 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 Owb|NtYJY%|>;DU4yjlbR literal 0 HcmV?d00001 diff --git a/docs/source/buildscripts/__pycache__/sdc_object_utils.cpython-37.pyc b/docs/source/buildscripts/__pycache__/sdc_object_utils.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3e3909df5b0ec5b4db63c17c9747c65f9b972e64 GIT binary patch literal 11351 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 Ls^V+e(%1h1syo2q literal 0 HcmV?d00001 diff --git a/docs/source/buildscripts/apiref_generator.py b/docs/source/buildscripts/apiref_generator.py new file mode 100644 index 000000000..892311485 --- /dev/null +++ b/docs/source/buildscripts/apiref_generator.py @@ -0,0 +1,657 @@ +# -*- coding: utf-8 -*- +# ***************************************************************************** +# Copyright (c) 2019, Intel Corporation All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ***************************************************************************** + +import pandas +from sdc_object_utils import init_pandas_structure, init_sdc_structure, init_pandas_sdc_dict, get_sdc_object, get_obj +from sdc_object_utils import get_class_methods, get_class_attributes, get_fully_qualified_name +from sdc_doc_utils import is_sdc_user_guide_header, get_indent, reindent,get_short_description +from sdc_doc_utils import split_in_sections, get_docstring, create_heading_str, cut_sdc_dev_guide +import os + +APIREF_REL_PATH = './_api_ref/' + + +def reformat(text): + """ + Wrapper function that includes series of transformations of the ``text`` to fix Pandas docstrings which + cause Sphinx to generate warnings. + + :param text: Original text with warnings + :return: Modified text that fixes warnings + """ + text = reformat_replace_star_list_with_dash_list(text) # Must be called before :func:`reformat_asterisks` + text = reformat_asterisks(text) # Fix for * and ** symbols + text = reformat_explicit_markup(text) # Fix for explicit markup without a blank line + text = reformat_bullet_list(text) # Fix bullet list indentation issues + text = reformat_remove_unresolved_references(text) # Fix unresolved references after removal of References sections + return reformat_remove_multiple_blank_lines(text) + + +def reformat_remove_unresolved_references(text): + """ + Fixes unresolved references after removing References sections. + + Searches for pattern [numeric]_ in the text and removes it. Intel SDC references do not use [numeric]_ pattern + + :param text: Original text + :return: Reformatted text + """ + new_text = '' + while len(text) > 0: + idx = text.find('[') + + if idx >= 0: + new_text += text[0:idx] + idx1 = idx+1 + while idx1 < len(text) and text[idx1].isnumeric(): + # Iterating through numeric characters + idx1 += 1 + + if idx1+1 < len(text): + # There are at least two more symbols after numeric ones in the text + if text[idx1:idx1+2] != ']_': + new_text += text[idx:idx1+2] + + if idx1+2 < len(text): + text = text[idx1+2:] # Remove reference + else: + text = '' + else: + new_text += text[idx:] + text = '' + else: + new_text += text + text = '' + return new_text + + +def reformat_replace_star_list_with_dash_list(text): + """ + Replaces bullet lists starting with `*` with the lists starting with `-` + + :param text: Original text + :return: New text without `*` bullet lists + """ + lines = text.split('\n') + new_text = '' + for line in lines: + if line.strip().startswith('* '): + line = line.replace('* ', '- ', 1) + + new_text += line + '\n' + + return new_text + + +def reformat_remove_multiple_blank_lines(text): + """ + Removes redundant blank lines + + After multiple passes of the text reformatting there could be redundant blank lines between sections. + This pass is intended for removal of consecutive blank lines and keeping just one blank line between sections + + :param text: Original text + :return: Text with removed redundant blank lines + """ + + len_changed = True + + while len_changed: + new_text = text.replace('\n\n\n', '\n\n') + len_changed = len(new_text) < len(text) + text = new_text + + return new_text + + +def reformat_bullet_list(text): + lines = text.split('\n') + new_text = '' + bullet_indent = -1 + while len(lines) > 0: + line = lines[0] + if line.strip().startswith('- '): + # Here if met new bullet + bullet_indent = get_indent(line) # We need to know indent to identify multi-line bullets + new_text += line + '\n' + elif line.strip() == '': + bullet_indent = -1 # We finished parsing multi-line bullet + new_text += '\n' + else: + if bullet_indent >= 0: + # Here if we're parsing multi-line bullet + new_text += reindent(line, bullet_indent + 4) + '\n' + else: + # Here if we are not in bullet list + new_text += line + '\n' + lines.pop(0) + + return new_text + + +def reformat_explicit_markup(text): + """ + Fixes Pandas docstring warning about explicit markup not followed by a blank line. + + Parses the text and finds ``'.. '`` strings by adding a blank line next after. + + :param text: Original text with warnings + :return: Modified text that fixes warnings + """ + lines = text.split('\n') + new_text = '' + while len(lines) > 0: + line = lines[0] + + if line.strip().startswith('.. versionchanged') or line.strip().startswith('.. versionadded') or \ + line.strip().startswith('.. deprecated'): + new_text += line + '\n' + # Here if found explicit markup + if len(lines) > 1: + # Here if there is at least one line after explicit markup + if lines[1].strip != '': + # Here if there is no empty line after explicit markup. Add new line then + new_text += '\n' + lines.pop(0) + elif line.strip().startswith('.. note') or line.strip().startswith('.. warning'): + new_text += line.strip() + '\n' + if len(lines) > 1: + # Here if there is at least one line after explicit markup + if lines[1].strip() == '': + # Here if there is empty line after explicit markup. Remove new line then + lines.pop(1) + elif line.strip().startswith('.. ['): + new_text += '\n' # Remove references + else: + new_text += line + '\n' + lines.pop(0) + return new_text + + +def reformat_asterisks(text): + """ + Fixes Pandas docstring warning about using * and ** without ending \* and \*\*. + + The fix distinguishes single * and ** by adding \\ to them. No changes for *italic* and **bold** usages. + + :param text: Original text with warnings + :return: Modified text that fixes warnings + """ + lines = text.split('\n') + new_text = '' + for line in lines: + idx = 0 # Starting parsing position within the ``line`` + while idx < len(line): # Parsing until end of string reached + idx1 = line.find('*', idx) + if idx1 >= idx: + # There is at least one asterisk in the line + idx2 = line.find('*', idx1+1) + + if idx2 == -1: + # Only one single asterisk in the line - Reformat to `\*` + line = line.replace('*', '\\*') + idx = len(line) # Parsed the line. Go to another line + elif idx2 == idx1+1: + # First double asterisk met in the line + idx2 = line.find('**', idx1+2) + if idx2 == -1: + # Only one double asterisk in the line Reformat to `\*\*`. But there could be more asterisks + line = line.replace('**', '\\*\\*') + idx = idx1+4 + else: + # At least two double asterisks in the line + idx = idx2+2 # Deal with remaining asterisks on the next ``while`` loop iteration + else: + # There is another asterisk apart from the first asterisk + if idx2+1 < len(line): + # There is at least one more symbol in the line after second asterisk + if line[idx2+1] == '*': + # Situation when double asterisk is met after the first single asterisk - Reformat to `\*` + line = line.replace('*', '\\*', 1) # Replace the first single asterisk + idx = idx2 # Handle double asterisk on the next ``while`` iteration + else: + # Two asterisks met in the line to italize characters between them + idx = idx2+1 + else: + # Second asterisk was the last symbol in the line + idx = len(line) + else: + # No asterisks in the line + idx = len(line) + new_text += line + '\n' + + return new_text + + +def reformat_pandas_params(title, text): + """ + Re-formats ``text`` written in NumPy style documenting Parameters, Returns, Raises sections into + explicit `::` style. + + Algorithm searches for the pattern: + ` : ` + `` + `` + Reformat to the following: + `::` + `` + `` + `` + + + :param title: + :param text: + :return: Reformatted text + """ + + # Internal function. Returns correct markup for :param :, :return:, and :raises : + def _get_param_text(title, param): + title = title.strip() + if title == 'Parameters': + return ':param ' + param + ':' + elif title == 'Return' or title == 'Returns': + return ':return:' + elif title == 'Raises': + return ':raises:' + + + # Internal function. Returns correct markup for Parameters section + def _reformat_parameters(title, text): + lines = text.split('\n') + new_text = '' + + if len(lines) == 0: + return new_text + + indent = get_indent(text) + param = '' + description = '' + while len(lines) > 0: + line = lines[0] + line = line.strip() + idx = line.find(' : ') + if idx >= 0 & line[0:idx].isalnum(): + # Check if previous parameter existed. If so, need to add it to reformatted text + if param != '': + new_text += _get_param_text(title, param) + '\n' + reindent(description, indent+4) + '\n' + + # Found parameter. Extract the description (can be multi-line) + param = line[0:idx] + description = line[idx+3:] + '\n' + lines.pop(0) + else: + # There is no parameter description starting in this line. + # Check if it is continuation of parameter description from previous lines + if param != '': + # It is continuation of multi-line parameter description + description += reindent(line, indent+4) + '\n' + else: + # This is not the description of parameter. Copy as is + new_text += reindent(line, indent) + '\n' + lines.pop(0) + + if param != '' and description != '': + new_text += _get_param_text(title, param) + '\n' + reindent(description, indent+4) + '\n' + return new_text + + # Internal function. Returns correct markup for Raises section + def _reformat_raises(title, text): + lines = text.split('\n') + new_text = '' + + if len(lines) == 0: + return new_text + + indent = get_indent(text) + param = '' + description = '' + while len(lines) > 0: + line = lines[0] + line = line.strip() + + # Check if it is continuation of parameter description from previous lines + if param != '': + # It is continuation of multi-line parameter description + description += reindent(line, indent + 8) + '\n' + else: + # This is the first line of ``raises`` description + param = _get_param_text(title, '') + '\n' + reindent(line, indent + 4) + new_text += param + '\n' + lines.pop(0) + + if param != '' and description != '': + new_text += reindent(description, indent + 8) + '\n' + return new_text + '\n' + + # Internal function. Returns correct markup for Returns section + def _reformat_returns(title, text): + lines = text.split('\n') + new_text = '' + + if len(lines) == 0: + return new_text + + indent = get_indent(text) + param = '' + description = '' + while len(lines) > 0: + line = lines[0] + line = line.strip() + + # Check if it is continuation of parameter description from previous lines + if param != '': + # It is continuation of multi-line parameter description + description += reindent(line, indent + 4) + '\n' + else: + # This is the first line of ``return`` description + param = _get_param_text(title, '') + ' ' + line + new_text += reindent(param, indent) + '\n' + lines.pop(0) + + if param != '' and description != '': + new_text += reindent(description, indent + 4) + '\n' + return new_text + '\n' + + if title.strip() == 'Parameters': + return _reformat_parameters(title, text) + elif title.strip() == 'Returns' or title.strip() == 'Return': + return _reformat_returns(title, text) + elif title.strip() == 'Raises': + return _reformat_raises(title, text) + else: + return text + + +def generate_simple_object_doc(pandas_obj, short_doc_flag=False, doc_from_pandas_flag=True, add_sdc_sections=True, + unsupported_warning=True, reformat_pandas=True): + """ + Generates documentation for Pandas object obj according to flags. + + For complex objects such as modules and classes the function does not go to sub-objects, + i.e. to class attributes and sub-modules of the module. + + :param pandas_obj: Pandas object for which documentation to be generated. + :param short_doc_flag: Flag to indicate that only short description for the object is needed. + :param doc_from_pandas_flag: Flag to indicate that the documentation must be taken from Pandas docstring. + This docstring can be extended with Intel SDC specific sections. These are See Also, Examples, + Notes, Warning, Limitations, etc. if ``add_sdc_sections`` flag is set. + :param add_sdc_sections: Flag to indicate that extra sections of the documentation need to be taken from Intel SDC. + If ``doc_from_pandas_flag==False`` then the description section is taken from Intel SDC too. Otherwise + Intel SDC description section will be cut and Pandas API description will be used instead. + :param unsupported_warning: Flag, if ``True`` includes warning message if corresponding Intel SDC object is not + found. This indicates that given SDC method is unsupported. + :param reformat_pandas: Flag, if ``True`` re-formats Parameters section to :param: style. Needed to work around + Sphinx generator issues for Pandas Parameters section written in NumPy style + :return: Generated docstring. + """ + + doc = '' + if pandas_obj is None: + return doc # Empty documentation for no-object + + if doc_from_pandas_flag: # Check if documentation needs to be generated from Pandas docstring + if short_doc_flag: # Check if only short description is needed + doc = get_short_description(pandas_obj) # Short description is requested + else: + # Exclude Examples, Notes, See Also, References sections + sections = split_in_sections(reindent(get_docstring(pandas_obj), 0)) + while len(sections) > 0: + title, text = sections[0] + if title.strip() == '': # Description sections + doc += text + '\n\n' + sections.pop(0) + elif title.strip() == 'Examples': # Exclude Examples section + sections.pop(0) + elif title.strip() == 'Notes': # Exclude Notes section (may be too specific to Pandas) + sections.pop(0) + elif title.strip().lower() == 'see also': # Exclude See Also section (may be too specific to Pandas) + sections.pop(0) + elif title.strip() == 'References': # Exclude References section (may be too specific to Pandas) + sections.pop(0) + elif title.strip() == 'Parameters' or title.strip() == 'Raises' or title.strip() == 'Return' or \ + title.strip() == 'Returns': + if reformat_pandas: + doc += reformat_pandas_params(title, text) + sections.pop(0) + else: + doc += create_heading_str(title) + '\n\n' + text + '\n\n' + sections.pop(0) + else: + doc += create_heading_str(title) + '\n\n' + text + '\n\n' + sections.pop(0) + + if not add_sdc_sections: + if reformat_pandas: + return reformat(doc) + else: + return doc + + # Here if additional sections from Intel SDC object needs to be added to pandas_obj docstring + sdc_obj = get_sdc_object(pandas_obj) + if sdc_obj is None: + if unsupported_warning: + if reformat_pandas: + doc = reformat(doc) + + if short_doc_flag: + return doc + ' **Unsupported by Intel SDC**.' + else: + return doc + '\n\n.. warning::\n This feature is currently unsupported ' \ + 'by Intel Scalable Dataframe Compiler\n\n' + + if not short_doc_flag: + sdc_doc = get_docstring(sdc_obj) + sdc_doc = cut_sdc_dev_guide(sdc_doc) + + # Cut description section from ``sdc_doc`` + if is_sdc_user_guide_header(sdc_doc[0]): # First section is SDC User Guide header + sdc_doc.pop(0) + + if doc_from_pandas_flag: + # Ignore description from Intel SDC, keep Pandas description only + while len(sdc_doc) > 0: + title, text = sdc_doc[0] + if title.strip() != '': + break + sdc_doc.pop(0) + + indent = get_indent(doc) + for title, text in sdc_doc: + if title.strip() == '': + doc += '\n' + reindent(text, indent) + else: + doc += '\n' + reindent(create_heading_str(title), indent) + '\n' + \ + reindent(text, indent) + '\n' + + return reformat(doc) + + +def get_rst_filename(obj_name): + """ + Returns rst file name by respective object name. + + :param obj_name: String, object name for which file name is constructed + :return: String, rst file name for the object being documented + """ + file_name = obj_name.replace('.', '/') + file_name = APIREF_REL_PATH + file_name + '.rst' + return file_name + + +def open_file_for_write(file_name): + """ + Opens file ``filename`` for writing. If necessary, creates file directories on the path. + + :param file_name: Absolute or relative path that includes file name being created. + :return: File descriptor created. + """ + directory = os.path.dirname(file_name) + + if len(directory) > 0 and not os.path.exists(directory): + os.makedirs(directory) + + return open(file_name, 'w', encoding='utf-8') + + +def write_rst(file_name, docstring): + """ + Writes ``docstring`` into the file ``file_name``. + + :param file_name: String, name of the file including relative or absolute path + :param docstring: String, docstring to be written in the file + """ + file = open_file_for_write(file_name) + file.write(docstring) + file.close() + + +def write_simple_object_rst_file(pandas_name, short_doc_flag=False, doc_from_pandas_flag=True, add_sdc_sections=True): + """ + Writes Pandas object ``pandas_name`` (e.g. 'pandas.Series.at') into rst file. + + RST file has the name derived from ``pandas_name`` (e.g. 'pandas.Series.at.rst'). Additional flags are used + to control look and feel of the resulting content of the file. See :func:`generate_simple_object_doc` function + for details about these flags. + + :param pandas_name: String, the name of Pandas object + :param short_doc_flag: Flag, if ``True``, write short description of the object only + :param doc_from_pandas_flag: Flag, if ``True``, derive the description from Pandas docstring for the object. + :param add_sdc_sections: Flag, if ``True``, extend the docstring with respective Intel SDC sections (if any) + """ + pandas_obj = get_obj(pandas_name) + doc = generate_simple_object_doc(pandas_obj, short_doc_flag, doc_from_pandas_flag, add_sdc_sections) + if doc is None or doc == '': + return + + fname = get_rst_filename(pandas_name) + write_rst(fname, doc) + + +def parse_templ_rst(fname_templ): + """ + Parses input template rst file and outputs the final rst file + Template document must have the following structure: + + Heading or subheading + ********************* + + Any text (if any) + + Another heading or subheading + ----------------------------- + + Any text (if any) + + .. currentmodule:: + + .. sdc_toctree + + + + ... + + Any text (if any) + + Any text (if any) + + Another heading or subheading + ----------------------------- + + Any text (if any) + ... + + :param fname_templ: + """ + path, fname_out = os.path.split(fname_templ) + fname_out = fname_out.replace('_templ', '') + fname_out = fname_out.replace('_', '', 1) + fout = open_file_for_write(APIREF_REL_PATH + fname_out) + with open(fname_templ, 'r', encoding='utf-8') as fin: + doc = fin.readlines() + + while len(doc) > 0: + # Parsing lines until ``.. sdc_toctree`` section is met + while len(doc) > 0 and not doc[0].startswith('.. sdc_toctree'): + line = doc[0] + if line.startswith('.. currentmodule::'): + current_module_name = line[19:].strip() + fout.write(line) + doc.pop(0) + + if len(doc) == 0: + return + + doc.pop(0) # Skipping ``.. sdc_toctree`` + + # Parsing the list of APIs + while len(doc) >0 and doc[0].strip() != '': + line = doc[0] + indent = get_indent(line) + line = line.strip() + full_name = current_module_name + '.' + line + obj = get_obj(full_name) + short_description = generate_simple_object_doc(obj, short_doc_flag=True).strip() + new_line = reindent(':ref:`', indent) + line + ' <' + full_name + '>`\n' + \ + reindent(short_description, indent+4) + '\n' + fout.write(new_line) + doc.pop(0) + + full_description = generate_simple_object_doc(obj, short_doc_flag=False) + f = open_file_for_write(APIREF_REL_PATH + full_name + '.rst') + f.write('.. _' + full_name + ':\n\n:orphan:\n\n') + f.write(create_heading_str(full_name, '*') + '\n\n') + f.write(full_description) + f.close() + + if len(doc) == 0: + return + + fout.close() + + +def write_class_rst_files(cls, short_doc_flag=False, doc_from_pandas_flag=True, add_sdc_sections=True): + # Currenlty not in use. Should be used for auto-documenting class methods and attributes. + + for method_name, method_object in get_class_methods(cls): + write_simple_object_rst_file(get_fully_qualified_name(cls) + '.' + method_name, + short_doc_flag, doc_from_pandas_flag, add_sdc_sections) + + for attr_name, attr_object in get_class_attributes(cls): + write_simple_object_rst_file(get_fully_qualified_name(cls) + '.' + attr_name, + short_doc_flag, doc_from_pandas_flag, add_sdc_sections) + + +def generate_api_reference(): + init_pandas_structure() + init_sdc_structure() + init_pandas_sdc_dict() + + parse_templ_rst('./_templates/_api_ref.pandas.series_templ.rst') + + +if __name__ == "__main__": + generate_api_reference() diff --git a/docs/source/buildscripts/module_info.py b/docs/source/buildscripts/module_info.py new file mode 100644 index 000000000..98460b268 --- /dev/null +++ b/docs/source/buildscripts/module_info.py @@ -0,0 +1,443 @@ +# -*- coding: utf-8 -*- +# ***************************************************************************** +# Copyright (c) 2019, Intel Corporation All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ***************************************************************************** + + +from inspect import getmembers, ismodule, isclass, isfunction +import logging +import sys + + +# -- Debug logging -------------------------------------------------------------------------------------------------- +ENABLE_LOGGING = False + + +# Logging information about attribute parsing +def _attribute_logging(s): + if ENABLE_LOGGING: + logging.debug('[ATTRIBUTE]' + s) + return + + +# Logging information about method parsing +def _method_logging(s): + if ENABLE_LOGGING: + logging.debug('[METHOD]' + s) + return + + +# Logging information about function parsing +def _function_logging(s): + if ENABLE_LOGGING: + logging.debug('[FUNCTION]' + s) + return + + +# Logging information about class parsing +def _class_logging(s): + if ENABLE_LOGGING: + logging.debug('[CLASS]' + s) + return + + +# Logging information about module parsing +def _module_logging(s): + if ENABLE_LOGGING: + logging.debug('[MODULE]' + s) + return + + +# -- Returns all classes and respective methods of the module ------------------------------------------------------- +def get_submodules_of(module, inspected, module_list, skip_module_test, skip_class_test, + skip_method_test, skip_attribute_test, skip_function_test): + + # Returns True if the mod module will not be included in API Reference + def _skip_module(mod): + mod_name = mod.__name__ # Get new submodule name + sk_mod = False + + if mod in inspected: # Ignore already traversed modules + sk_mod = True + _module_logging('`' + mod_name + '` already traversed. Ignoring') + return sk_mod + + if '._' in mod_name or mod_name.startswith('_'): # Ignore internal module + sk_mod = True + _module_logging('`' + mod_name + '` is internal (starts with _). Ignoring') + return sk_mod + + if skip_module_test(mod, mod_name): + sk_mod = True + return sk_mod + + return sk_mod + + # Returns True if the cls class will not be included in API Reference + def _skip_class(cls): + sk_class = False + class_name = repr(cls)[8:-2] # Get full class name + + if '._' in class_name: # We are interested only in public classes + sk_class = True + _class_logging('`' + class_name + '` is internal. Ignoring') + return sk_class + + if skip_class_test(cls, class_name): + sk_class = True + return sk_class + + return sk_class + + # Returns True if the method method_name will not be included in API Reference + def _skip_method(cls, method_name): + sk_method = False + + if method_name.startswith('_'): # Ignore internal methods + sk_method = True + _method_logging('`' + method_name + '` is internal (starts with __). Ignoring') + return sk_method + + if skip_method_test(cls, method_name): + sk_method = True + return sk_method + + return sk_method + + # Returns True if the method method_name will not be included in API Reference + def _skip_function(function, function_name): + sk_function = False + + if function_name.startswith('_'): # Ignore internal function + sk_function = True + _function_logging('`' + function_name + '` is internal (starts with __). Ignoring') + return sk_function + + if skip_function_test(function, function_name): + sk_function = True + return sk_function + + return sk_function + + # Returns True if the attribute attr_name will not be included in API Reference + def _skip_attribute(cls, attr_name): + sk_attr = False + + if attr_name.startswith('_'): # Ignore internal methods + sk_attr = True + _attribute_logging('`' + attr_name + '` is internal (starts with __). Ignoring') + return sk_attr + + if skip_attribute_test(cls, attr_name): + sk_attr = True + return sk_attr + + return sk_attr + + # Creates the list of methods for the class + def _generate_class_methods(cls): + meths = [func for func in dir(cls) if callable(getattr(cls, func)) and not _skip_method(cls, func)] + for meth in meths: + _method_logging('Adding method `' + meth + '` to the list') + return meths + + # Creates the list of class's attributes + def _generate_class_attributes(cls): + attrs = [func for func in dir(cls) if not callable(getattr(cls, func)) and not _skip_attribute(cls, func)] + for att in attrs: + _attribute_logging('Adding attribute `' + att + '` to the list') + return attrs + + # -- get_classes_of() implementation begins + if _skip_module(module): + return + + inspected.add(module) # Add module to the set of traversed modules + module_name = module.__name__ + module_list.append({'module_name': module_name, 'module_object': module, 'classes': []}) + + _module_logging('********************** Inspecting module `' + module_name + '`') + + class_list = [] + module_list[-1]['classes'] = class_list + function_list = [] + module_list[-1]['functions'] = function_list + + # Traverses the mod module classes and submodules + for (name, obj) in getmembers(module): # Iterate through members of the submodule + if isclass(obj): # We are interested in objects, which are classes + if not _skip_class(obj): + _class_logging('********************** Inspecting class `' + name + '`') + methods = _generate_class_methods(obj) # Inspect methods of the class of interest only + attributes = _generate_class_attributes(obj) # Inspect attributes of the class of interest only + class_list.append({'class_name': name, 'class_object': obj, 'class_methods': methods, + 'class_attributes': attributes}) + + if isfunction(obj): # We are interested in objects, which are functions + if not _skip_function(obj, name): + function_list.append({'function_name': name, 'function_object': obj}) + + if ismodule(obj): + if not _skip_module(obj): + get_submodules_of(obj, inspected, module_list, skip_module_test, skip_class_test, + skip_method_test, skip_attribute_test, skip_function_test) + + return + + +# -- Returns all classes and respective methods of the module ------------------------------------------------------- +def print_modules_classes_methods_attributes(modules): + for the_module in modules: # modules is the list, each element represents dictionary characterizing the sub-module + print(the_module['module_name']) + print(' FUNCTIONS:') + for the_function in the_module['functions']: + print(' - ' + the_function['function_name']) + + print(' CLASSES:') + for the_class in the_module['classes']: + print(' - ' + the_class['class_name']) + print(' METHODS:') + for the_method in the_class['class_methods']: + print(' ' + the_method) + print(' ATTRIBUTES:') + for the_attribute in the_class['class_attributes']: + print(' ' + the_attribute) + return + + +# -- Trimming docstring -------------------------------------------------------------------------------------------- +def trim(docstring): + # Copyright 2015: Mirantis Inc. + # All Rights Reserved. + # + # Licensed under the Apache License, Version 2.0 (the "License"); you may + # not use this file except in compliance with the License. You may obtain + # a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + # License for the specific language governing permissions and limitations + # under the License. + + """trim function from PEP-257""" + if not docstring: + return "" + # Convert tabs to spaces (following the normal Python rules) + # and split into a list of lines: + lines = docstring.expandtabs().splitlines() + # Determine minimum indentation (first line doesn't count): + indent = sys.maxsize + for line in lines[1:]: + stripped = line.lstrip() + if stripped: + indent = min(indent, len(line) - len(stripped)) + # Remove indentation (first line is special): + trimmed = [lines[0].strip()] + if indent < sys.maxsize: + for line in lines[1:]: + trimmed.append(line[indent:].rstrip()) + # Strip off trailing and leading blank lines: + while trimmed and not trimmed[-1]: + trimmed.pop() + while trimmed and not trimmed[0]: + trimmed.pop(0) + + # Current code/unittests expects a line return at + # end of multiline docstrings + # workaround expected behavior from unittests + if "\n" in docstring: + trimmed.append("") + + # Return a single string: + return "\n".join(trimmed) + + +# -- String formatting ---------------------------------------------------------------------------------------------- +def reindent(string): + # Copyright 2015: Mirantis Inc. + # All Rights Reserved. + # + # Licensed under the Apache License, Version 2.0 (the "License"); you may + # not use this file except in compliance with the License. You may obtain + # a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + # License for the specific language governing permissions and limitations + # under the License. + + return "\n".join(l.strip() for l in string.strip().split("\n")) + + +# -- These symbols can be used to underline section title ----------------------------------------------------------- +UNDERLINE_SYMBOLS = ['~', '#', '@', '^', '*', '-', '_', '+', '='] + + +# -- Split section into section title and remaining text ------------------------------------------------------------ +def split_title(section): + def _is_section_title(title_line, underscore_line): + n = len(title_line) + for c in UNDERLINE_SYMBOLS: + s = c * n + if underscore_line.startswith(s): + return True + + return False + + if section.startswith('\n'): + section = section.replace('\n', '', 1) + + lines = section.split('\n', 2) + if len(lines) > 2: + # Only sections with number of lines>2 can start with a title + if _is_section_title(lines[0].strip(), lines[1].strip()): + return lines[0], lines[2] + else: + return '', section + else: + return '', section + + +# -- Parse docstring by forming the list of sections, where each section is dictionary with title and text ---------- +def split_in_sections(doc, sdc_header_section_flag=False): + sections = doc.split('\n\n') + titled_sections = [] + + # For SDC API Reference documentation the topmost section gives Pandas API name + if sdc_header_section_flag: + section = sections[0] + title, text = split_title(section) + titled_sections.append({'title': title, 'text': text}) + sections.pop(0) + + # Special processing for short and long description sections, if any + section = sections[0] + title, text = split_title(section) + while title.strip() == '': + titled_sections.append({'title': title, 'text': text}) + sections.pop(0) + if len(sections) > 0: + section = sections[0] + title, text = split_title(section) + else: + break + + # Other sections. Merge those which are just separated by blank lines + for i in range(len(sections)): + section = sections[i] + title, text = split_title(section) + if title.strip() == '': + titled_sections[-1]['text'] += '\n\n' + text + else: + titled_sections.append({'title': title, 'text': text}) + + return titled_sections + + +def get_function_doc(func, sdc_header_flag=False): + doc = func.__doc__ + + if doc is None: + doc = '' + + titled_sections = split_in_sections(doc, sdc_header_flag) + return titled_sections + + +def get_function_short_description(func, sdc_header_flag=False): + titled_sections = get_function_doc(func, sdc_header_flag) + if sdc_header_flag: # Ignore the first section + titled_sections.pop(0) + short_description = titled_sections[0]['text'] + + # Make it single line in case it is multi-line + lines = short_description.split('\n') + lines = [s.strip()+' ' for s in lines] + short_description = ''.join(lines) + + return short_description + + +def create_header_str(s, underlying_symbol='*'): + n = len(s) + return s + '\n' + underlying_symbol*n + + +def get_function(func_name, modules): + """ + Searches for the function func_name in the modules list. Name can or cannot be given fully qualified + + :param func_name: string, the function name being searched + :param modules: the list of modules created by :func:`get_submodules_of` + :return: function object or None + """ + + # Check if fully qualified name given + if func_name.find('.') != -1: + split_name = func_name.rsplit('.', 1) + func_name = split_name[-1] + module_name = split_name[-2] + + the_module = next((e for e in modules if e['module_name'] == module_name), None) + try: + if the_module: + return getattr(the_module['module_object'], func_name) + else: + return None + except AttributeError: + return None + else: + for the_module in modules: + for func_dict in the_module['functions']: + if func_name == func_dict['function_name']: + return func_dict['function_object'] + + return None + +def get_method_attr(name, modules): + """ + Searches for the method/attribute name in the modules list. Name is fully qualified + + :param name: string, the method/attribute being searched + :param modules: the list of modules created by :func:`get_submodules_of` + :return: method/attribute object or None + """ + split_name = name.rsplit('.', 2) + name = split_name[-1] + class_name = split_name[-2] + module_name = split_name[-3] + + the_module = next((e for e in modules if e['module_name'] == module_name), None) + the_class = next((e for e in the_module['classes'] if e['class_name'] == class_name), None) + try: + return getattr(the_class['class_object'], name) + except AttributeError: + return None diff --git a/docs/source/pandas_info.py b/docs/source/buildscripts/pandas_info.py similarity index 50% rename from docs/source/pandas_info.py rename to docs/source/buildscripts/pandas_info.py index c01025de1..612d539c1 100644 --- a/docs/source/pandas_info.py +++ b/docs/source/buildscripts/pandas_info.py @@ -29,16 +29,24 @@ import pandas import logging from datetime import datetime -from module_info import get_submodules_of, print_modules_classes_methods_attributes, get_doc +from module_info import get_submodules_of, print_modules_classes_methods_attributes, ENABLE_LOGGING # -- Debug logging -------------------------------------------------------------------------------------------------- log_file_name = '../build/pandas_info.log' # -- Submodules, classes, and methods to be excluded from API Reference --------------------------------------------- exclude_modules = [ - 'pandas.core', # This is PRIVATE submodule 'pandas.compat', # This is PRIVATE submodule - 'pandas.util' # This is PRIVATE submodule + 'pandas.util', # This is PRIVATE submodule + 'pandas.api.extensions', # This is extension for library developers extending Pandas. Not current interest to SDC + 'pandas.testing', # Utility functions for testing. Not a priority for SDC + 'pandas.plotting', # Plotting functions. Not a priority for compiling with SDC + 'pandas.errors', # Error handling functionality. Not a priority for SDC + 'pandas.api.types', # Not a priority for SDC + 'pandas.io.formats.style', # Helps to style dataframes with HTML and CSS. Not a priority for SDC + 'pandas.arrays', # Array extensions for Numpy. We do not explicitly cover in SDC documentation now + 'pandas.tseries', # SDC does not yet support Time Series objects + 'pandas.core.dtypes.dtypes', ] exclude_classes = [ @@ -50,35 +58,88 @@ exclude_attributes = [ ] +exclude_functions = [ +] + # -- Implements custom skip functions for the parser ---------------------------------------------------------------- def _skip_pandas_module(mod, mod_name): - return mod_name in exclude_modules or not mod_name.startswith('pandas') + for excl_mname in exclude_modules: + if mod_name.startswith(excl_mname): + return True + return not mod_name.startswith('pandas') def _skip_pandas_class(cls, cls_name): return cls_name in exclude_classes -def _skip_pandas_method(method_name): - return method_name in exclude_methods +def _skip_pandas_method(cls, method_name): + # Exclude the method if in the exclude_methods list + if method_name in exclude_methods: # Explicit exclusion of the method + return True + + # Exclude the method without docstring + try: + doc = getattr(cls, method_name).__doc__ + return len(doc) < 1 + except AttributeError: + return True + except TypeError: + return True + + +def _skip_pandas_function(func, function_name): + # Exclude the function if in the exclude_functions list + if function_name in exclude_functions: # Explicit exclusion of the method + return True + + # Exclude the function without docstring + try: + doc = func.__doc__ + return len(doc) < 1 + except AttributeError: + return True + except TypeError: + return True + + +def _skip_pandas_attribute(cls, attr_name): + # Exclude the attribute if in the exclude_methods list + if attr_name in exclude_attributes: # Explicit exclusion of the attribute + return True + + # Exclude the attribute without docstring + try: + doc = getattr(cls, attr_name).__doc__ + return len(doc) < 1 + except AttributeError: + return True + except TypeError: + return True + + +def get_pandas_modules(): + inspected_modules = set() + modules = [] + get_submodules_of(pandas, inspected_modules, modules, _skip_pandas_module, _skip_pandas_class, + _skip_pandas_method, _skip_pandas_attribute, _skip_pandas_function) + return modules -def _skip_pandas_attribute(attr_name): - return attr_name in exclude_attributes +def init_pandas_logging(): + if ENABLE_LOGGING: + logging.basicConfig(filename=log_file_name, level=logging.DEBUG) + logging.debug('****************** STARTING THE LOG *************************') + logging.debug(datetime.now().strftime("%d/%m/%Y %H:%M:%S")) if __name__ == "__main__": # Initialize logging - logging.basicConfig(filename=log_file_name, level=logging.DEBUG) - logging.debug('****************** STARTING THE LOG *************************') - logging.debug(datetime.now().strftime("%d/%m/%Y %H:%M:%S")) + init_pandas_logging() # Execute parser for Pandas - inspected_modules = set() - modules = [] - get_submodules_of(pandas, inspected_modules, modules, _skip_pandas_module, _skip_pandas_class, - _skip_pandas_method, _skip_pandas_attribute) + modules = get_pandas_modules() # You may uncomment this line in case you want to print out generated methods and attributes -# print_modules_classes_methods_attributes(modules) + print_modules_classes_methods_attributes(modules) diff --git a/docs/source/sdc2pd_name.py b/docs/source/buildscripts/sdc2pd_name.py similarity index 100% rename from docs/source/sdc2pd_name.py rename to docs/source/buildscripts/sdc2pd_name.py diff --git a/docs/source/buildscripts/sdc_doc_utils.py b/docs/source/buildscripts/sdc_doc_utils.py new file mode 100644 index 000000000..c01a4da9b --- /dev/null +++ b/docs/source/buildscripts/sdc_doc_utils.py @@ -0,0 +1,393 @@ +# -*- coding: utf-8 -*- +# ***************************************************************************** +# Copyright (c) 2019, Intel Corporation All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ***************************************************************************** + +UNDERLINE_CHARS = ['-', '`', ':', '~', '^', '_', '*', '+', '#', '<', '>'] # Characters that can underline title + +SDC_USR_GUIDE_HEADING_STR = 'Intel Scalable Dataframe Compiler User Guide' + +SDC_USER_GUIDE_PANDAS_STR = 'Pandas API:' + +SDC_DEV_GUIDE_HEADING_STR = 'Intel Scalable Dataframe Compiler Developer Guide' + + +def get_indent(text): + """ + Returns indentation for a given ``text``. + + :param text: String, can be multi-line. Only first non-empty line is used to determine the indentation + :return: Indentation (the number of whitespace characters) + """ + lines = text.split('\n') + while len(lines) > 0 and lines[0] == '': + lines.pop(0) + + if len(lines) == 0: + return 0 # Text was empty, indentation for empty text is 0 + + n_stripped = len(lines[0].lstrip()) # Length of the string after stripping whitespaces on the left + return len(lines[0]) - n_stripped + + +def reindent(old_text, new_indent): + """ + Perform re-indentation of the text ``old_text`` with new indent ``new_indent``. + + :param old_text: Multi-line string for which re-indentation is performed + :param new_indent: New indent + :return: New multi-line text + """ + + if old_text == '': + return ' '*new_indent + + old_indent = get_indent(old_text) + lines = old_text.split('\n') + new_text = '' + for line in lines: + if line.strip() == '': + new_text += '\n' + else: + line = line[old_indent:] + new_text += ' '*new_indent + line + '\n' + + # If ``old_text`` has no ``'\n'`` in the end, remove it too from the ``new_text`` + if old_text[-1] != '\n': + new_text = new_text[:-1] + + return new_text + + +def create_heading_str(title, underlying_symbol='-'): + """ + Creates heading string for a given ``title``. Second line under title is decorated with ``underlying_symbol`` + + Heading is created taking into account of ``title`` indentation. + + :param title: + :param underlying_symbol: + :return: resulting heading string + """ + indent = get_indent(title) + n = len(title.strip()) + return title + '\n' + ' '*indent + underlying_symbol*n + + +def get_docstring(obj): + """ + Returns docstring for a given object or empty string if no-object is provided or there is no docstring for it. + + :param obj: Object for which the docstring to be provided + :return: Docstring + """ + if obj is None: + return '' + + doc = obj.__doc__ + if doc is None: + return '' + else: + return doc + + +def is_section_title(line, underline): + """ + Checks whether line and consecutive underline form valid section title. + + .. note:: + Function expects leading and trailing whitespaces removed for both strings prior to the call. + + :param line: String, title text + :param underline: String, underlying characters + :return: True if line and underline form valid section title + """ + + if line is None: + return False + + if underline is None: + return False + + if line == '': + return False + + if underline == '': + return False + + n = len(line) + for c in UNDERLINE_CHARS: + s = c * n + if underline == s: + return True + + return False + + +def is_sdc_user_guide_header(sdc_header): + """ + Checks whether a given title-text tuple forms valid Intel SDC header for User Guide. + + The header is expected to be 4 lines long, where the first three lines are of the form: + Intel Scalable Dataframe Compiler User Guide + ******************************************** + Pandas API: + The fourth line must be empty + + :param sdc_header: Tuple (title, text) + :return: True if sdc_header forms valid Intel SDC User Guide docstring header + """ + title, text = sdc_header + return title.strip() == SDC_USR_GUIDE_HEADING_STR and text.strip().startswith(SDC_USER_GUIDE_PANDAS_STR) + + +def is_sdc_dev_guide_header(sdc_header): + """ + Checks whether a given title-text tuple forms valid Intel SDC header for Developer Guide. + + The header is expected to be 3 lines long, where the first two lines are of the form: + Intel Scalable Dataframe Compiler Developer Guide + ************************************************* + The third line must be empty + + :param sdc_header: Tuple (title, text) + :return: True if sdc_header forms valid Intel SDC Developer Guide docstring header + """ + title, text = sdc_header + return title.strip() == SDC_DEV_GUIDE_HEADING_STR + + +def extract_pandas_name_from(text): + """ + Extracts Pandas API from ``text``. + + This function is used in conjunction with :func:`split_title`, which returns the tuple (title, text). + The ``title`` must contain valid Intel SDC header. The ``text`` is expected to be in the form + ``Pandas API: *fully qualified Pandas name*`` + + :param text: + :return: Pandas API name as a string + """ + line = text.strip().split('\n', 1)[0] # Pandas API is in the first line. Ignore whitespaces + return line.replace(SDC_USER_GUIDE_PANDAS_STR, '').strip() # Name begins right after ``Pandas API:`` + + +def split_title(section): + """ + Split section into title and remaining text. + + :param section: String, documented section + :return: Tuple (title, text) + """ + + if section is None: + return '', '' + + section = section.lstrip('\n') # Remove leading empty lines + + lines = section.split('\n', 2) + if len(lines) > 1: + # Only sections with number of lines >= 2 can be a title + if is_section_title(lines[0].strip(), lines[1].strip()): + if len(lines) > 2: + return lines[0], lines[2] # First line is title, second is underline, remaining is text + else: + return lines[0], '' # First line is title, second line is underline, but the text is empty string + else: + return '', section # First two lines do not form valid heading + else: + return '', section # When section is less than 3 lines we consider it having no title + + +def _merge_paragraphs_within_section(sections): + """ + Internal utility function that merges paragraphs into a single section. + + This function call is required after initial splitting of the docstring into sections. The initial split + is based on the presence of ``'\n\n'``, which separates sections and paragraphs. The difference between + section and paragraph is that section starts with the title of the form: + + This is title + ------------- + This is the first paragraph. It may be multi-line. + This is the second line of the paragraph. + + This is another multi-line paragraph. + This is the second line of the paragraph. + + Special treatment is required for Intel SDC header section and the following description section. Intel SDC + header section must the the first one in the docstring. It consists of exactly 3 lines: + + Intel Scalable Dataframe Compiler User Guide + ******************************************** + Pandas API: *pandas_api_fully_qualified_name* + + Right after the Intel SDC header section the description section (if any) goes. It generally consists of two + or more paragraphs. The first paragraph represents short description, which is typically single line. + The following paragraphs provide full description. In rare cases documentation does not have description section, + and this must be treated accordingly. + + + :param sections: List of tuples ``(title, text)``. + :return: Reformatted list of tuples ``(title, text)`, where paragraphs belonging to one section are merged in + single ``text`` item. + """ + if len(sections) == 0: + return sections + + merged_sections = [] + # Check if the very first section is Intel SDC header + section_title, section_text = sections[0] + if is_sdc_user_guide_header((section_title, section_text)): + merged_sections.append(sections[0]) + sections.pop(0) + + # Check if the next section is the short description + section_title, section_text = sections[0] + if section_title.strip() == '': + merged_sections.append(sections[0]) + sections.pop(0) + + if len(sections) == 0: + return merged_sections + + # Merge next sections with empty title into a single section representing full description + section_title, section_text = sections[0] + if section_title.strip() == '': + sections.pop(0) + while len(sections) > 0: + title, text = sections[0] + if title.strip() == '': + section_text += '\n\n' + text + sections.pop(0) + else: + break + merged_sections.append((section_title, section_text)) + + # Now merge paragraphs of remaining titled sections + while len(sections) > 0: + section_title, section_text = sections[0] + sections.pop(0) + while len(sections) > 0: + title, text = sections[0] + if title.strip() == '': + section_text += '\n\n' + text + sections.pop(0) + else: + break + merged_sections.append((section_title, section_text)) + + return merged_sections + + +def split_in_sections(doc): + """ + Splits the doc string into sections + + Each section is separated by empty line. Sections can start with headers or without. Each header follows NumPy + style: + + Section Title + ------------- + + Other permitted characters can be used to underline section title + + :param doc: Docstring to be split into sections + :return: List, sections of the doc. Each section is a tuple of strings (title, text) + + :seealso: NumPy style `example + `_ + """ + sections = doc.split('\n\n') # Sections are separated by empty lines + titled_sections = [] + + while len(sections) > 0: + title, text = split_title(sections[0]) + sections.pop(0) + titled_sections.append((title, text)) + + return _merge_paragraphs_within_section(titled_sections) + + +def get_short_description(obj, sdc_header_flag=False): + """ + Returns short description for a given object obj + + :param obj: Object for which short description needs to be returned + :param sdc_header_flag: Flag indicating that the first three lines must be considered as Intel SDC header + :return: String, short description + :raises: NameError, when ``sdc_header_flag==True`` and no Intel SDC header section found. + The header is expected to be 4 lines long, where the first three lines are of the form: + Intel Scalable Dataframe Compiler User Guide + ******************************************** + Pandas API: + The fourth line must be empty + + """ + doc = get_docstring(obj) + if doc == '': + return doc + + sections = split_in_sections(doc) # tuple (title, text) + + if sdc_header_flag: + if len(sections) > 1: # There must be at least one more section after Intel SDC header section + if not is_sdc_user_guide_header(sections[0]): + raise NameError('No Intel SDC header section found') + + sections.pop(0) # Ignore Intel SDC header section + + if len(sections) == 0: + return '' # Docstring has no sections, i.e. short description is absent + + title, text = sections[0] # Short description is the first section of the docstring + text = text.strip() + lines = text.split('\n') + lines = [line.strip() for line in lines] + lines = ' '.join(lines) + + return lines + + +def cut_sdc_dev_guide(doc): + """ + Removes Intel SDC Developer Guide related sections from the docstring. + + It is assumed that Developer Guide docstring follows the User Guide related sections of the docstring. + Everything after section the titled *Intel Scalable Dataframe Compiler Developer Guide* is cut + + :param doc: Docstring that includes User Guide and the following Developer Guide sections + :return: Docstring with the cut Developer Guide sections + """ + sections = split_in_sections(doc) # tuple (title, text) + trimmed_sections = [] + + while len(sections) > 0: + if is_sdc_dev_guide_header(sections[0]): + break + trimmed_sections.append(sections[0]) + sections.pop(0) + + return trimmed_sections diff --git a/docs/source/buildscripts/sdc_info.py b/docs/source/buildscripts/sdc_info.py new file mode 100644 index 000000000..cb6c1ba03 --- /dev/null +++ b/docs/source/buildscripts/sdc_info.py @@ -0,0 +1,188 @@ +# -*- coding: utf-8 -*- +# ***************************************************************************** +# Copyright (c) 2019, Intel Corporation All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ***************************************************************************** + +import logging +import sdc +from datetime import datetime +from module_info import get_submodules_of, print_modules_classes_methods_attributes, ENABLE_LOGGING, trim +from module_info import get_function, get_function_doc + +# -- String for pattern matching that indicates that the docstring belongs to Intel SDC API Reference --------------- +SDC_USR_GUIDE_HEADING_STR = \ + 'Intel Scalable Dataframe Compiler User Guide********************************************' +SDC_DEV_GUIDE_HEADING_STR = \ + 'Intel Scalablle Dataframe Compiler Developer Guide**************************************************' + +# -- Debug logging -------------------------------------------------------------------------------------------------- +log_file_name = '../build/sdc_info.log' + + +# -- Submodules, classes, and methods to be excluded from API Reference --------------------------------------------- +exclude_modules = [ + 'sdc.chiframes', + 'sdc.compiler', + 'sdc.config', + 'sdc.io.pio', + 'sdc.io.pio_api', + 'sdc.io.pio_lower', + 'sdc.utils', + 'sdc.hstr_ext', + 'sdc.datatypes.common_functions', + 'sdc.datatypes.hpat_pandas_dataframe_pass', + 'sdc.decorators', + 'sdc.dict_ext', + 'sdc.hdict_ext', + 'sdc.distributed', + 'sdc.distributed_api', + 'sdc.transport_seq', + 'sdc.distributed_lower', + 'sdc.hdist', + 'sdc.distributed_analysis', + 'sdc.hdatetime_ext', + 'sdc.hiframes', + 'sdc.io.csv_ext', + 'sdc.hio', + 'sdc.hiframes.join', + 'sdc.io.parquet_pio', + 'sdc.parquet_cpp', + 'sdc.shuffle_utils', + 'sdc.str_arr_ext', + 'sdc.str_ext', + 'sdc.timsort', +] + +exclude_classes = [ +] + +exclude_methods = [ +] + +exclude_attributes = [ +] + +exclude_functions = [ +] + + +# -- Implements custom skip functions for the parser ---------------------------------------------------------------- +def _skip_sdc_module(mod, mod_name): + return mod_name in exclude_modules or (not mod_name.startswith('sdc') and not mod_name.startswith('hpat')) + + +def _skip_sdc_class(cls, cls_name): + return True # Exclude all classes +# return cls_name in exclude_classes # Explicit exclusion of the class + + +def _skip_sdc_method(cls, method_name): + # Exclude the method if in the exclude_methods list + if method_name in exclude_methods: + return True + + # Exclude the method without docstring + try: + doc = getattr(cls, method_name).__doc__ + if len(doc) < 1: + return True + except AttributeError: + return True + except TypeError: + return True + + # Exclude the method that does have docstring aimed for API Reference + return not doc.startswith(SDC_USR_GUIDE_HEADING_STR) + + +def _skip_sdc_function(func, function_name): + # Exclude the function if in the exclude_methods list + if function_name in exclude_functions: + return True + + # Exclude the function without docstring + try: + doc = func.__doc__ + if len(doc) < 1: + return True + except AttributeError: + return True + except TypeError: + return True + + # Include the function that has docstring aimed for API Reference + doc = ''.join(trim(doc).splitlines()) + return not doc.startswith(SDC_USR_GUIDE_HEADING_STR) + + +def _skip_sdc_attribute(cls, attr_name): + # Exclude the attribute if in the exclude_methods list + if attr_name in exclude_attributes: + return True + + # Exclude the attribute without docstring + try: + doc = getattr(cls, attr_name).__doc__ + if len(doc) < 1: + return True + except AttributeError: + return True + except TypeError: + return True + + # Include the attribute that has docstring aimed for API Reference + doc = ''.join(trim(doc).splitlines()) + return not doc.startswith(SDC_USR_GUIDE_HEADING_STR) + + +def get_sdc_modules(): + inspected_modules = set() + modules = [] + get_submodules_of(sdc, inspected_modules, modules, _skip_sdc_module, _skip_sdc_class, + _skip_sdc_method, _skip_sdc_attribute, _skip_sdc_function) + return modules + + +def init_sdc_logging(): + if ENABLE_LOGGING: + logging.basicConfig(filename=log_file_name, level=logging.DEBUG) + logging.debug('****************** STARTING THE LOG *************************') + logging.debug(datetime.now().strftime("%d/%m/%Y %H:%M:%S")) + + +if __name__ == "__main__": + # Initialize logging + init_sdc_logging() + + # Execute parser for SDC + + # You may uncomment this line in case you want to print out generated methods and attributes + # print_modules_classes_methods_attributes(modules) + modules = get_sdc_modules() + + func = get_function('hpat_pandas_series_at', modules) + if func: + titled_sections = get_function_doc(func) + print(titled_sections) diff --git a/docs/source/buildscripts/sdc_object_utils.py b/docs/source/buildscripts/sdc_object_utils.py new file mode 100644 index 000000000..31e335b21 --- /dev/null +++ b/docs/source/buildscripts/sdc_object_utils.py @@ -0,0 +1,393 @@ +# -*- coding: utf-8 -*- +# ***************************************************************************** +# Copyright (c) 2019, Intel Corporation All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ***************************************************************************** + +from inspect import getmembers, ismodule, isclass, isfunction +import sys +import pandas +import sdc +from sdc_doc_utils import is_sdc_user_guide_header, get_docstring, split_title, extract_pandas_name_from + +# -- Pandas submodules to be excluded from API Reference --------------------------------------------- +exclude_pandas_submodules = [ + 'pandas.compat', # This is PRIVATE submodule + 'pandas.util', # This is PRIVATE submodule + 'pandas.api.extensions', # This is extension for library developers extending Pandas + 'pandas.testing', # Utility functions for testing. Not a priority for SDC + 'pandas.plotting', # Plotting functions. Not a priority for compiling with SDC + 'pandas.errors', # Error handling functionality. Not a priority for SDC + 'pandas.api.types', # Not a priority for SDC + 'pandas.io.formats.style', # Helps to style dataframes with HTML and CSS. Not a priority for SDC + 'pandas.arrays', # Array extensions for Numpy. We do not explicitly cover in SDC documentation now + 'pandas.tseries', # SDC does not yet support Time Series objects + 'pandas.core.dtypes.dtypes', +] + +# -- Intel SDC submodules to be excluded from API Reference ------------------------------------------- +exclude_sdc_submodules = [ + 'sdc.chiframes', + 'sdc.compiler', + 'sdc.config', + 'sdc.io.pio', + 'sdc.io.pio_api', + 'sdc.io.pio_lower', + 'sdc.utils', + 'sdc.hstr_ext', + 'sdc.datatypes.common_functions', + 'sdc.datatypes.hpat_pandas_dataframe_pass', + 'sdc.decorators', + 'sdc.dict_ext', + 'sdc.hdict_ext', + 'sdc.distributed', + 'sdc.distributed_api', + 'sdc.transport_seq', + 'sdc.distributed_lower', + 'sdc.hdist', + 'sdc.distributed_analysis', + 'sdc.hdatetime_ext', + 'sdc.hiframes', + 'sdc.io.csv_ext', + 'sdc.hio', + 'sdc.hiframes.join', + 'sdc.io.parquet_pio', + 'sdc.parquet_cpp', + 'sdc.shuffle_utils', + 'sdc.str_arr_ext', + 'sdc.str_ext', + 'sdc.timsort', +] + +pandas_modules = dict() # Dictionary of pandas submodules and their classes and functions +sdc_modules = dict() # Dictionary of Intel SDC submodules and their classes and functions +pandas_sdc_dict = dict() # Dictionary {: } that maps Pandas API to respective Intel SDC API + + +def get_sdc_object(pandas_obj): + """ + Returns corresponding Intel SDC object for a given Pandas object pandas_obj. + + :param pandas_obj: Pandas object to be matched with Intel SDC object + :return: Intel SDC object corresponding to pandas_obj + """ + if pandas_obj in pandas_sdc_dict: + return pandas_sdc_dict[pandas_obj] + else: + return None # There is no match in Intel SDC to pandas_obj + + +def init_pandas_sdc_dict(): + """ + Initializes global dictionary that performs mapping between Pandas objects and SDC objects. + + To function correctly this function must be called after initialization of ``sdc_modules`` and ``pandas_modules`` + lists by :func:`init_sdc_structure` and :func:`init_pandas_structure`` functions respectively. + """ + + def _map_sdc_to_pandas(sdc_obj): + if isfunction(sdc_obj): + doc = get_docstring(sdc_obj) + + # The very first section of Intel SDC documentation is expected to start with + # the User Guide header followed by the name of respective Pandas API. + # The following code extracts respective Pandas API + title, text = split_title(doc) + if is_sdc_user_guide_header((title, text)): + pandas_name = extract_pandas_name_from(text) + pandas_obj = get_obj(pandas_name) + pandas_sdc_dict[pandas_obj] = sdc_obj + return False + + global pandas_sdc_dict + pandas_sdc_dict = {} + + traverse(sdc_modules, _map_sdc_to_pandas, True) + + +def get_obj(obj_name): + """ + Retrieves object corresponding to fully qualified name obj_name. + + The fully qualified name starts with the imported module name visible by sys.modules followed by + submodules and then classes and finally by class attributes + :param obj_name: Fully qualified object name string + :return: If found, returns the object corresponding to obj_name. Otherwise raises exception + :raises AttributeError: If submodule or attribute does not exists + """ + split_name = obj_name.split('.') + split_obj = sys.modules[split_name[0]] + + # Iterate through submodules + while ismodule(split_obj) and len(split_name) > 1: + split_name.pop(0) + not_found = True + for (name, obj) in getmembers(split_obj): # Go through members of split_obj + if split_name[0] == name: + not_found = False + break + + if not_found: + raise AttributeError('Member `' + split_name[0] + '` for `' + obj_name + '` does not exists') + + split_obj = obj + + split_name.pop(0) + for name in split_name: + split_obj = getattr(split_obj, name) + + return split_obj + + +def get_class_methods(cls): + """ + Returns the list of class methods, accessible by both names and as objects. + + Function ignores internal methods starting with ``_``. + + :param cls: The class object + :return: List of class methods, each item is the tuple ``(method_name, method_object)`` + """ + return [(func, getattr(cls, func)) for func in dir(cls) + if callable(getattr(cls, func)) and not func.startswith('_')] + + +def get_class_attributes(cls): + """ + Returns the list of class attributes, accessible by both names and as objects. + + Function ignores internal attributes starting with ``_``. + + :param cls: The class object + :return: List of class attributes, each item is the tuple ``(attribute_name, attribute_object)`` + """ + return [(func, getattr(cls, func)) for func in dir(cls) + if not callable(getattr(cls, func)) and not func.startswith('_')] + + +def get_fully_qualified_name(cls): + """ + Returns fully qualified name of the class. + + :param cls: The class object + :return: String, fully qualified name + """ + return repr(cls)[8:-2] + + +def init_module_structure(module_obj, the_module, inspected, skip_test): + """ + Initializes hierarchical structure ``the_module``. + + :param module_obj: Module object being traversed. + :param the_module: Dictionary ``{'module_obj': module_obj, 'submodules': submodules, + 'classes': classes, 'functions': functions}``. The ``submodules`` is the list of + submodules that belong to ``module_obj``. Each submodule has the same structure as ``the_module``. + The ``classes`` is the list of classes that belong to ``module_obj``. + The functions is the list of functions that belong ``to module_obj``. + :param inspected: Set of already traversed module objects. This set is needed to avoid circular traversal of + the same module, which may be returned by by ``getmembers`` function multiple times. + :param skip_test: Function that takes module object as an argument and returns True if this object + needs to be included in the module structure hierarchy or skipped if False. This function is used as + a mechanism to customize the structure of modules, classes, and functions. This in turn minimizes following + structure traversal costs. + """ + + # Returns True if the mod module needs to be ignored + def _is_skip_module(mod): + mod_name = mod.__name__ + return '._' in mod_name or mod_name.startswith('_') + + # Returns True if the class cls needs to be ignored + def _is_skip_class(cls): + class_name = get_fully_qualified_name(cls) + return '._' in class_name + + # Returns True if the object obj needs to be ignored + def _is_internal(obj): + obj_name = obj.__name__ + return obj_name.startswith('_') + + # ************ The init_module_structure implementation starts here ******************************************* + if _is_skip_module(module_obj) or module_obj in inspected or skip_test(module_obj): + return + + inspected.add(module_obj) + + # Traverse submodules, classes, and functions + submodules = [] + classes = [] + functions = [] + for (name, obj) in getmembers(module_obj): # Iterate through members of the submodule + if skip_test(obj): + continue # Customizable test for skipping objects as needed + + if ismodule(obj) and obj not in inspected and not _is_skip_module(obj): + the_submodule = dict() + init_module_structure(obj, the_submodule, inspected, skip_test) + submodules.append(the_submodule) + + if isclass(obj) and not _is_skip_class(obj): + classes.append(obj) + + if isfunction(obj) and not _is_internal(obj): + functions.append(obj) + + the_module['module_obj'] = module_obj + the_module['submodules'] = submodules + the_module['classes'] = classes + the_module['functions'] = functions + + +def _print_module(the_module, print_submodules_flag=True): + """ + Recursively prints ``the_module`` content. Internal utility function for debugging purposes + + :param the_module: Dictionary ``{'module_obj': module_obj, 'submodules': submodules, + 'classes': classes, 'functions': functions}``. The ``submodules`` is the list of + submodules that belong to ``module_obj``. Each submodule has the same structure as ``the_module``. + The ``classes`` is the list of classes that belong to ``module_obj``. + The functions is the list of functions that belong ``to module_obj``. + """ + print(the_module['module_obj'].__name__) + + print(' CLASSES:') + for the_class in the_module['classes']: + print(' - ' + the_class.__name__) + + print(' FUNCTIONS:') + for the_func in the_module['functions']: + print(' - ' + the_func.__name__) + + if print_submodules_flag: + print(' SUBMODULES:') + for submodule in the_module['submodules']: + _print_module(submodule, print_submodules_flag) + + +def traverse(the_module, do_action, traverse_submodules_flag=True): + """ + Traverses ``the_module`` and performs action :func:`do_action` on each of the objects of the structure. + + :param the_module: Dictionary ``{'module_obj': module_obj, 'submodules': submodules, + 'classes': classes, 'functions': functions}``. The ``submodules`` is the list of + submodules that belong to ``module_obj``. Each submodule has the same structure as ``the_module``. + The ``classes`` is the list of classes that belong to ``module_obj``. + The functions is the list of functions that belong to ``module_obj``. + :param do_action: Function that takes one parameter ``module_obj`` as input. It returns ``True`` if + traversal needs to be stopped. + :param traverse_submodules_flag: True if function must recursively traverse submodules too + :return: Returns tuple ``(the_module, obj)`` where ``obj`` is the object identified by :func:`do_action` and + ``the_module`` is the corresponding dictionary structure to which the object belongs. It returns ``None`` + if no object has been identified by the :func:`do_action` + """ + if do_action(the_module['module_obj']): + return the_module, the_module['module_obj'] + + # Traverse classes of the_module + for the_class in the_module['classes']: + if do_action(the_class): + return the_module, the_class + + # Traverse functions of the_module + for the_func in the_module['functions']: + if do_action(the_func): + return the_module, the_func + + # Recursively traverse submodules of the_module + if traverse_submodules_flag: + for submodule in the_module['submodules']: + the_tuple = traverse(submodule, do_action, traverse_submodules_flag) + if the_tuple is not None: + return the_tuple + + return None + + +def get_pandas_module_structure(pandas_obj): + """ + Returns corresponding ``the_module`` dictionary structure to which ``pandas_obj`` belongs to. + + This function is typically used in conjunction with :func:`traverse` + + :param pandas_obj: + :return: ``the_module`` dictionary structure + """ + + def _find(obj): + return obj == pandas_obj + + the_module, the_object = traverse(pandas_modules, _find) + return the_module + + +def init_pandas_structure(): + """ + Initializes ``pandas_modules`` global dictionary representing the structure of Pandas. + """ + + # Test that allows to ignore certain Pandas submodules, classes, or attributes + def _skip_pandas_test(obj): + if ismodule(obj): + name = obj.__name__ + for mod_name in exclude_pandas_submodules: + if name.startswith(mod_name): + return True + return not name.startswith('pandas') + + global pandas_modules + pandas_modules = dict() + inspected_mods = set() + init_module_structure(pandas, pandas_modules, inspected_mods, _skip_pandas_test) + + +def init_sdc_structure(): + """ + Initializes ``sdc_modules`` global dictionary representing the structure of Intel SDC. + """ + + # Test that allows to ignore certain Intel SDC submodules, classes, or attributes + def _skip_sdc_test(obj): + if ismodule(obj): + name = obj.__name__ + for mod_name in exclude_sdc_submodules: + if name.startswith(mod_name): + return True + return not name.startswith('sdc') and not name.startswith('hpat') + + global sdc_modules + sdc_modules = dict() + inspected_mods = set() + init_module_structure(sdc, sdc_modules, inspected_mods, _skip_sdc_test) + + +if __name__ == "__main__": + init_pandas_structure() + _print_module(pandas_modules) + + init_sdc_structure() + _print_module(sdc_modules) + + init_pandas_sdc_dict() + print(pandas_sdc_dict) diff --git a/docs/source/buildscripts/user_guide_gen.py b/docs/source/buildscripts/user_guide_gen.py new file mode 100644 index 000000000..312f589e1 --- /dev/null +++ b/docs/source/buildscripts/user_guide_gen.py @@ -0,0 +1,280 @@ +# -*- coding: utf-8 -*- +# ***************************************************************************** +# Copyright (c) 2019, Intel Corporation All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ***************************************************************************** + +from module_info import get_function, get_method_attr, get_function_doc, get_function_short_description +from module_info import create_header_str +from pandas_info import get_pandas_modules, init_pandas_logging +from sdc_info import get_sdc_modules, init_sdc_logging +from texttable import Texttable +import os + +PANDAS_API_STR = 'Pandas API: ' # This substring prepends Pandas API name in the documentation +APIREF_RELPATH = r'./_api_ref/' # Relative path to API Reference folder +RST_MODULES = { + 'api_reference.rst': ['pandas'], + 'io.rst': ['pandas.io.api', 'pandas.io.clipboards', 'pandas.io.common', 'pandas.io.excel', + 'pandas.io.feather_format', 'pandas.io.formats.console', 'pandas.io.formats.format', + 'pandas.io.formats.printing', 'pandas.io.gbq', 'pandas.io.html', 'pandas.io.json', + 'pandas.io.msgpack', 'pandas.io.msgpack.exceptions', 'pandas.io.packers', 'pandas.io.parquet', + 'pandas.io.parsers', 'pandas.io.pickle', 'pandas.io.pytables', 'pandas.io.sas', + 'pandas.io.sas.sasreader', 'pandas.io.spss', 'pandas.io.sql', 'pandas.io.stata'], + 'series.rst': ['pandas.Series'], + 'dataframe.rst': ['pandas.DataFrame'], + '' + 'general_functions.rst': [], +} + +pandas_modules = [] # List of Pandas submodules along with its functions and classes +sdc_modules = [] # List of Intel SDC submodules along with its functions and classes + + +def generate_module_doc(the_module): + module_doc = None + module_name = the_module['module_name'] + + # First, look up if there is RST file documenting particular module + for rst in RST_MODULES: + for mod in RST_MODULES[rst]: + if mod == module_name: + return module_doc # If there is a documentation for a given module then just return + + # If there is no RST file then we create the documentation based on module's docstring + module_obj = the_module['module_object'] + module_description = get_function_short_description(module_obj).strip() + if module_description is None: + module_description = '' + + module_doc = module_description + '\n\nFor details please refer to Pandas API Reference for :py:mod:`' + \ + module_name + '`\n\n' + return module_doc + + +def generate_api_index_for_module(the_module): + module_description = generate_module_doc(the_module) + if module_description is None: + module_description = '' + module_doc = '' + + module_header_flag = False + # Document functions first, if any + tab = Texttable() + for func in the_module['functions']: # Iterate through the module functions + name = func['function_name'] + obj = getattr(the_module['module_object'], name) # Retrieve the function object + description = get_function_short_description(obj).strip() + tab.add_rows([[name, description]], header=False) + + module_name = '' + func_doc = tab.draw() + if func_doc and func_doc != '': # If the function list is not empty then add module name to the document + module_name = the_module['module_name'] + module_doc += create_header_str(module_name, '~') + '\n\n' + module_description + '\n\n' + \ + create_header_str('Functions:', '-') + \ + '\n\n' + func_doc + '\n\n' + module_header_flag = True + + # Document classes + classes_header_flag = False + for the_class in the_module['classes']: # Iterate through the module classes + tab.reset() + class_name = the_class['class_name'] + class_obj = the_class['class_object'] + class_description = class_obj.__doc__ + if not class_description: + class_description = '' + class_doc = '' + class_header_flag = False + + # Document class attributes first, if any + for attr in the_class['class_attributes']: # Iterate through the class attributes + name = attr + obj = getattr(the_class['class_object'], name) # Retrieve the attribute object + description = get_function_short_description(obj).strip() + tab.add_rows([[name, description]], header=False) + + attr_doc = tab.draw() + if attr_doc and attr_doc != '': # If the attribute list is not empty then add class name to the document + class_header_flag = True + class_doc += create_header_str(class_name, '^') + '\n\n' + class_description + '\n\n' + \ + create_header_str('Attributes:', '+') + \ + '\n\n' + attr_doc + '\n\n' + + # Document class methods, if any + for method in the_class['class_methods']: # Iterate through the class methods + name = method + obj = getattr(the_class['class_object'], name) # Retrieve the method object + description = get_function_short_description(obj).strip() + tab.add_rows([[name, description]], header=False) + + method_doc = tab.draw() + if method_doc and method_doc != '': # If the method list is not empty then add class name to the document + if not class_header_flag: + class_doc += create_header_str(class_name, '^') + '\n\n' + class_description + '\n\n' + \ + create_header_str('Methods:', '+') + \ + '\n\n' + method_doc + '\n\n' + class_header_flag = True + else: + class_doc += create_header_str('Methods:', '+') + \ + '\n\n' + method_doc + '\n\n' + + if not module_header_flag: # There is no module header yet + if class_header_flag: # There were methods/attributes for the class + module_doc += create_header_str(module_name, '~') + '\n\n' + module_description + '\n\n' + \ + create_header_str('Classes:', '-') + \ + '\n\n' + class_doc + '\n\n' + module_header_flag = True + classes_header_flag = True + else: # The module header has been added + if class_header_flag: # There are new methods/attributes for the class + if not classes_header_flag: # First class of the module description + module_doc += create_header_str('Classes:', '-') + '\n\n' + module_doc += '\n\n' + class_doc + '\n\n' + return module_doc + + +def get_module_rst_fname(the_module): + file_name = the_module['module_name'] + file_name = file_name.replace('.', '/') + file_name = APIREF_RELPATH + file_name + '.rst' + return file_name + + +def generate_api_index(): + doc = '.. _apireference::\n\nAPI Reference\n*************\n\n' \ + '.. toctree::\n :maxdepth: 1\n\n' + + for the_module in pandas_modules: # Iterate through pandas_modules + module_doc = generate_api_index_for_module(the_module) + if len(module_doc) > 0: + file_name = get_module_rst_fname(the_module) + write_rst(file_name, module_doc) + doc += ' ' + file_name + '\n' + return doc + + +def generate_sdc_object_doc(sdc_func): + sdc_titled_sections = get_function_doc(sdc_func, True) + sdc_see_also_text = next((sec['text'] for sec in sdc_titled_sections + if sec['title'].lower().strip() == 'see also'), '') + sdc_limitations_text = next((sec['text'] for sec in sdc_titled_sections + if sec['title'].lower().strip() == 'limitations'), '') + sdc_examples_text = next((sec['text'] for sec in sdc_titled_sections + if sec['title'].lower().strip() == 'examples'), '') + + # Get respective Pandas API name + pandas_name = sdc_titled_sections[0]['text'].strip() + pandas_name = pandas_name.replace(PANDAS_API_STR, '') + pandas_name = pandas_name.replace('\n', '') + + # Find respective Pandas API + doc_object = get_method_attr(pandas_name, pandas_modules) + if not doc_object: + doc_object = get_function(pandas_name, pandas_modules) + if not doc_object: + raise NameError('Pandas API:' + pandas_name + 'does not exist') + + # Extract Pandas API docstring as the list of sections + pandas_titled_sections = [] + if doc_object: + pandas_titled_sections = get_function_doc(doc_object, False) + + # Form final docstring which is a combination of Pandas docstring for the description, Parameters section, + # Raises section, Returns section. See Also, Limitations and Examples sections (if any) are taken from SDC docstring + short_description_section = pandas_titled_sections[0]['text'] + '\n\n' + pandas_titled_sections.pop(0) + + long_description_section = '' + while pandas_titled_sections[0]['title'] == '': + long_description_section += pandas_titled_sections[0]['text'] + '\n\n' + pandas_titled_sections.pop(0) + + raises_section = parameters_section = returns_section = see_also_section = \ + limitations_section = examples_section = '' + for section in pandas_titled_sections: + title = section['title'].lower().strip() + if title == 'raises': + raises_section = 'Raises\n------\n\n' + section['text'] + '\n\n' + elif title == 'parameters': + parameters_section = 'Parameters\n----------\n\n' + section['text'] + '\n\n' + elif title == 'return' or title == 'returns': + returns_section = 'Returns\n-------\n\n' + section['text'] + '\n\n' + + if sdc_see_also_text: + see_also_section = '\n.. seealso::\n\n' + sdc_see_also_text + '\n\n' + + if sdc_limitations_text: + limitations_section = 'Limitations\n-----------\n\n' + sdc_limitations_text + '\n\n' + + if sdc_examples_text: + examples_section = 'Examples\n-----------\n\n' + sdc_examples_text + '\n\n' + + rst_label = pandas_name.replace('.', '_') + + n = len(pandas_name) + docstring = \ + '.. _' + rst_label + ':\n\n' + \ + pandas_name + '\n' + '*'*n + '\n' + \ + short_description_section + \ + long_description_section + \ + parameters_section + \ + returns_section + \ + raises_section + \ + limitations_section + \ + examples_section + \ + see_also_section + + file_name = rst_label + '.rst' + + return file_name, docstring + + +def write_rst(file_name, docstring): + directory = os.path.dirname(file_name) + + if len(directory) > 0 and not os.path.exists(directory): + os.makedirs(directory) + + file = open(file_name, 'w') + file.write(docstring) + file.close() + + +if __name__ == "__main__": + init_pandas_logging() + pandas_modules = get_pandas_modules() + + init_sdc_logging() + sdc_modules = get_sdc_modules() + + for the_module in sdc_modules: + if the_module['module_name'] == 'sdc.datatypes.hpat_pandas_series_functions': + for func in the_module['functions']: + file_name, doc = generate_sdc_object_doc(func['function_object']) + write_rst(APIREF_RELPATH + file_name, doc) + + doc = generate_api_index() + write_rst('apireference.rst', doc) diff --git a/docs/source/compilation.rst b/docs/source/compilation.rst index 8935cb4f0..a3622a343 100644 --- a/docs/source/compilation.rst +++ b/docs/source/compilation.rst @@ -1,8 +1,8 @@ .. _compilation: .. include:: ./ext_links.txt -Compiling With Intel® Scalable Dataframe Compiler -================================================= +Compiling With Intel® SDC +========================= .. todo:: Basic compilation controls. What can be compiled and what cannot. How to work around compilation issues. @@ -85,9 +85,9 @@ should also be deterministic. The below example is not supported since the funct Discuss other typical scenarios when Numba or hpat cannot perform type inference Dealing With Integer NaN Values -================================= +------------------------------- -The :py:class:`pandas.Series` are built upon :py:class:`numpy.array`, which does not support +The :py:class:`pandas.Series` are built upon :py:class:`numpy.ndarray`, which does not support ``NaN`` values for integers. For that reason `Pandas*`_ dynamically converts integer columns to floating point ones when ``NaN`` values are needed. Intel SDC can perform such a conversion only if enough information about ``NaN`` values is available at compilation time. When it is impossible the user is responsible for manual @@ -98,7 +98,7 @@ conversion of integer data to floating point data. ``NaN`` cannot be known at compile time and show how it can be worked around Type Inference In I/O Operations -================================= +-------------------------------- If the filename is constant, the Intel SDC may be able to determine file schema at compilation time. It will allow to perform type inference of columns in respective `Pandas*`_ dataframe. diff --git a/docs/source/conf.py b/docs/source/conf.py index a2faa29b9..98ca74306 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -41,24 +41,37 @@ # -- Import sdc package to build API Reference ------------------------------- import os +import sys +import shutil SDC_DOC_NO_API_REF_STR = 'SDC_DOC_NO_API_REF' +SDC_DOC_APIREF_DIR = '_api_ref' +sys.path.insert(0, os.path.relpath('buildscripts')) sdc_doc_no_api_ref = False # Generate API Reference by default if SDC_DOC_NO_API_REF_STR in os.environ: sdc_doc_no_api_ref = os.environ[SDC_DOC_NO_API_REF_STR] == '1' if not sdc_doc_no_api_ref: + if os.path.exists(SDC_DOC_APIREF_DIR): + shutil.rmtree(SDC_DOC_APIREF_DIR) + try: import sdc except ImportError: - print('IMPORT EXCEPTION: Cannot import SDC. ') - print('Documentation generator for API Reference for a given module expects that module ' - 'to be installed. Use conda/pip install SDC to install it prior to using API Reference generation') - print('If you want to disable API Reference generation, set the environment variable SDC_DOC_NO_API_REF=1') + raise ImportError('Cannot import sdc.\n' + 'Documentation generator for API Reference for a given module expects that module ' + 'to be installed. Use conda/pip install SDC to install it prior to using API Reference ' + 'generation. If you want to disable API Reference generation, set the environment ' + 'variable SDC_DOC_NO_API_REF=1') - raise + try: + from apiref_generator import generate_api_reference + except ImportError: + raise ImportError('Cannot import apiref_generator', os.getcwd()) + + generate_api_reference() # -- Project information ----------------------------------------------------- @@ -77,15 +90,10 @@ # ones. extensions = [ 'sphinx.ext.todo', -# 'sphinx.ext.autosummary', 'sphinx.ext.intersphinx', -# 'sphinx.ext.autodoc', 'sphinx.ext.extlinks', 'sphinx.ext.githubpages', 'sphinx.ext.napoleon', -# 'sphinx.ext.autosectionlabel', -# 'sphinx.ext.graphviz', -# 'sphinx.ext.coverage' ] @@ -130,8 +138,10 @@ # Each entry of the dictionary has the following format: # 'class name': ('link to object.inv file for that class', None) intersphinx_mapping = { - 'pandas.Series': ('https://pandas.pydata.org/pandas-docs/stable/', None), - 'numpy.array': ('https://docs.scipy.org/doc/numpy', None), + 'pandas': ('https://pandas.pydata.org/pandas-docs/stable/', None), + 'python': ('http://docs.python.org/2', None), + 'numpy': ('http://docs.scipy.org/doc/numpy', None), + 'scipy': ('http://docs.scipy.org/doc/scipy/reference', None), } # -- Napoleon extension configuration (Numpy and Google docstring options) ------- @@ -147,17 +157,5 @@ napoleon_use_param = True napoleon_use_rtype = True - -# -- Auto-section label configuration ----------------------------------------------- -#autosectionlabel_prefix_document = True - - -# -- Autodoc configuration ---------------------------------------------------------- -#autodoc_docstring_signature = True - - -# -- Auto-summary configuration ----------------------------------------------------- -#autosummary_generate = True - # -- Prepend module name to an object name or not ----------------------------------- add_module_names = False diff --git a/docs/source/examples.rst b/docs/source/examples.rst index f008a93c5..75e9de504 100644 --- a/docs/source/examples.rst +++ b/docs/source/examples.rst @@ -1,7 +1,8 @@ -.. examples: +.. _examples: +.. include:: ./ext_links.txt List of examples ================ .. todo:: - Austoenerate the list of examples from respective docstrings in examples + Auto-generate the list of examples from respective docstrings in examples diff --git a/docs/source/for_developers.rst b/docs/source/for_developers.rst index f2d9bb430..e5675b827 100644 --- a/docs/source/for_developers.rst +++ b/docs/source/for_developers.rst @@ -1,4 +1,5 @@ -.. _developers: +.. _for_developers: +.. include:: ./ext_links.txt Contribute to Intel® Scalable Dataframe Compiler Development ============================================================ diff --git a/docs/source/index.rst b/docs/source/index.rst index 24016075a..fe2b9c0fc 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -11,12 +11,11 @@ This is Intel® Scalable Dataframe Compiler (Intel® SDC), which is an extension `Pandas*`_ operations. It automatically vectorizes and parallelizes the code by leveraging modern hardware instructions and by utilizing all available cores. -.. seealso:: - Intel SDC is just one of technologies that enable native speeds for Python. Learn about other technologies - here. +.. image:: ./_images/scalability.png + :width: 800px + :align: center + :alt: Intel® Scalable Dataframe Compiler scalability -.. todo:: - Insert performance chart illustrating speedups vs. stock `Pandas*`_ User Manual =========== diff --git a/docs/source/info.py b/docs/source/info.py deleted file mode 100644 index 76a1ee145..000000000 --- a/docs/source/info.py +++ /dev/null @@ -1,135 +0,0 @@ -# Copyright 2015: Mirantis Inc. -# All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -import re -import sys - -PARAM_OR_RETURNS_REGEX = re.compile(":(?:param|returns)") -RETURNS_REGEX = re.compile(":returns: (?P.*)", re.S) -PARAM_REGEX = re.compile(":param (?P[\*\w]+): (?P.*?)" - "(?:(?=:param)|(?=:return)|(?=:raises)|\Z)", re.S) - -def trim(docstring): - """trim function from PEP-257""" - if not docstring: - return "" - # Convert tabs to spaces (following the normal Python rules) - # and split into a list of lines: - lines = docstring.expandtabs().splitlines() - # Determine minimum indentation (first line doesn't count): - indent = sys.maxsize - for line in lines[1:]: - stripped = line.lstrip() - if stripped: - indent = min(indent, len(line) - len(stripped)) - # Remove indentation (first line is special): - trimmed = [lines[0].strip()] - if indent < sys.maxsize: - for line in lines[1:]: - trimmed.append(line[indent:].rstrip()) - # Strip off trailing and leading blank lines: - while trimmed and not trimmed[-1]: - trimmed.pop() - while trimmed and not trimmed[0]: - trimmed.pop(0) - - # Current code/unittests expects a line return at - # end of multiline docstrings - # workaround expected behavior from unittests - if "\n" in docstring: - trimmed.append("") - - # Return a single string: - return "\n".join(trimmed) - - -def reindent(string): - return "\n".join(l.strip() for l in string.strip().split("\n")) - - -def parse_docstring(docstring): - """Parse the docstring into its components. - :returns: a dictionary of form - { - "short_description": ..., - "long_description": ..., - "params": [{"name": ..., "doc": ...}, ...], - "returns": ... - } - """ - - short_description = long_description = returns = "" - params = [] - - if docstring: - docstring = trim(docstring) - - lines = docstring.split("\n", 1) - short_description = lines[0] - - if len(lines) > 1: - long_description = lines[1].strip() - - params_returns_desc = None - - match = PARAM_OR_RETURNS_REGEX.search(long_description) - if match: - long_desc_end = match.start() - params_returns_desc = long_description[long_desc_end:].strip() - long_description = long_description[:long_desc_end].rstrip() - - if params_returns_desc: - params = [ - {"name": name, "doc": trim(doc)} - for name, doc in PARAM_REGEX.findall(params_returns_desc) - ] - - match = RETURNS_REGEX.search(params_returns_desc) - if match: - returns = reindent(match.group("doc")) - - return { - "short_description": short_description, - "long_description": long_description, - "params": params, - "returns": returns - } - - -class InfoMixin(object): - - @classmethod - def _get_doc(cls): - """Return documentary of class - By default it returns docstring of class, but it can be overridden - for example for cases like merging own docstring with parent - """ - return cls.__doc__ - - @classmethod - def get_info(cls): - doc = parse_docstring(cls._get_doc()) - - return { - "name": cls.get_name(), - "platform": cls.get_platform(), - "platform": cls.get_platform(), - "module": cls.__module__, - "title": doc["short_description"], - "description": doc["long_description"], - "parameters": doc["params"], - "schema": getattr(cls, "CONFIG_SCHEMA", None), - "returns": doc["returns"] - } diff --git a/docs/source/module_info.py b/docs/source/module_info.py deleted file mode 100644 index d192ef2c6..000000000 --- a/docs/source/module_info.py +++ /dev/null @@ -1,266 +0,0 @@ -# -*- coding: utf-8 -*- -# ***************************************************************************** -# Copyright (c) 2019, Intel Corporation All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# Redistributions of source code must retain the above copyright notice, -# this list of conditions and the following disclaimer. -# -# Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, -# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; -# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR -# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ***************************************************************************** - - -from inspect import getmembers, ismodule, isclass -from info import trim -import logging - - -# -- Debug logging -------------------------------------------------------------------------------------------------- -# Logging information about attribute parsing -def _attribute_logging(s): - logging.debug('[ATTRIBUTE]' + s) - return - - -# Logging information about method parsing -def _method_logging(s): - logging.debug('[METHOD]' + s) - return - - -# Logging information about class parsing -def _class_logging(s): - logging.debug('[CLASS]' + s) - return - - -# Logging information about module parsing -def _module_logging(s): - logging.debug('[MODULE]' + s) - return - - -# -- Returns all classes and respective methods of the module ------------------------------------------------------- -def get_submodules_of(module, inspected, module_list, skip_module_test, skip_class_test, - skip_method_test, skip_attribute_test): - - # Returns True if the mod module will not be included in API Reference - def _skip_module(mod): - mod_name = mod.__name__ # Get new submodule name - sk_mod = False - - if mod in inspected: # Ignore already traversed modules - sk_mod = True - _module_logging('`' + mod_name + '` already traversed. Ignoring') - return sk_mod - - if '._' in mod_name or mod_name.startswith('_'): # Ignore internal module - sk_mod = True - _module_logging('`' + mod_name + '` is internal (starts with _). Ignoring') - return sk_mod - - if skip_module_test(mod, mod_name): - sk_mod = True - return sk_mod - - return sk_mod - - # Returns True if the cls class will not be included in API Reference - def _skip_class(cls): - sk_class = False - class_name = repr(cls)[8:-2] # Get full class name - - if '._' in class_name: # We are interested only in public classes - sk_class = True - _class_logging('`' + class_name + '` is internal. Ignoring') - return sk_class - - if skip_class_test(cls, class_name): - sk_class = True - return sk_class - - return sk_class - - # Returns True if the method method_name will not be included in API Reference - def _skip_method(method_name): - sk_method = False - - if method_name.startswith('_'): # Ignore internal methods - sk_method = True - _method_logging('`' + method_name + '` is internal (starts with __). Ignoring') - return sk_method - - if skip_method_test(method_name): - sk_method = True - return sk_method - - return sk_method - - # Returns True if the attribute attr_name will not be included in API Reference - def _skip_attribute(attr_name): - sk_attr = False - - if attr_name.startswith('_'): # Ignore internal methods - sk_attr = True - _attribute_logging('`' + attr_name + '` is internal (starts with __). Ignoring') - return sk_attr - - if skip_attribute_test(attr_name): - sk_attr = True - return sk_attr - - return sk_attr - - # Creates the list of methods for the class - def _generate_class_methods(cls): - meths = [func for func in dir(cls) if callable(getattr(cls, func)) and not _skip_method(func)] - for meth in meths: - _method_logging('Adding method `' + meth + '` to the list') - return meths - - # Creates the list of class's attributes - def _generate_class_attributes(cls): - attrs = [func for func in dir(cls) if not callable(getattr(cls, func)) and not _skip_attribute(func)] - for att in attrs: - _attribute_logging('Adding attribute `' + att + '` to the list') - return attrs - - # -- get_classes_of() implementation begins - if _skip_module(module): - return - - inspected.add(module) # Add module to the set of traversed modules - module_name = module.__name__ - module_list.append({'module_name': module_name, 'module_object': module, 'classes': []}) - - _module_logging('********************** Inspecting module `' + module_name + '`') - - class_list = [] - # Traverses the mod module classes and submodules - for (name, obj) in getmembers(module): # Iterate through members of the submodule - if isclass(obj): # We are interested in members, which are classes - if not _skip_class(obj): - _class_logging('********************** Inspecting class `' + name + '`') - methods = _generate_class_methods(obj) # Inspect methods of the class of interest only - attributes = _generate_class_attributes(obj) # Inspect attributes of the class of interest only - class_list.append({'class_name': name, 'class_object': obj, 'class_methods': methods, - 'class_attributes': attributes}) - module_list[-1]['classes'] = class_list - - if ismodule(obj): - if not _skip_module(obj): - get_submodules_of(obj, inspected, module_list, skip_module_test, skip_class_test, - skip_method_test, skip_attribute_test) - - return - - -# -- Returns all classes and respective methods of the module ------------------------------------------------------- -def print_modules_classes_methods_attributes(modules): - for the_module in modules: # modules is the list, each element represents dictionary characterizing the sub-module - print(the_module['module_name']) - for the_class in the_module['classes']: - print('- ' + the_class['class_name']) - print(' METHODS:') - for the_method in the_class['class_methods']: - print(' ' + the_method) - print(' ATTRIBUTES:') - for the_attribute in the_class['class_attributes']: - print(' ' + the_attribute) - return - - -# -- These symbols can be used to underline section title ----------------------------------------------------------- -UNDERLINE_SYMBOLS = ['~', '#', '@', '^', '*', '-', '_', '+', '='] - - -# -- Split section into section title and remaining text ------------------------------------------------------------ -def split_title(section): - def _is_section_title(title_line, underscore_line): - n = len(title_line) - for c in UNDERLINE_SYMBOLS: - s = c * n - if underscore_line.startswith(s): - return True - - return False - - trimmed = trim(section) - lines = trimmed.split('\n', 2) - if len(lines) > 2: - # Only sections with number of lines>2 can start with a title - if _is_section_title(lines[0], lines[1]): - return lines[0], lines[2] - else: - return '', section - else: - return '', section - - -# -- Parse docstring by forming the list of sections, where each section is dictionary with title and text ---------- -def parse_docstring(doc): - sections = doc.split('\n\n') - titled_sections = [] - - # The first and the second sections are to be Short and Long description - section = sections[0] - title, text = split_title(section) - titled_sections.append({'title': title, 'text': text}) - - section = sections[1] - title, text = split_title(section) - titled_sections.append({'title': title, 'text': text}) - - # Other sections. Merge those which are just separated by blank lines - for i in range(2, len(sections)): - section = sections[i] - title, text = split_title(section) - if title == '': - titled_sections[-1]['text'] += '\n\n' + text - else: - titled_sections.append({'title': title, 'text': text}) - - return titled_sections - - -# -- Get full documentation for the class cls ----------------------------------------------------------------------- -def get_doc(cls): - obj = cls['class_object'] - doc = parse_docstring(obj.__doc__) - short_description_doc = doc[0]['text'] - long_description_doc = doc[1]['text'] - parameters_doc = ''.join([sec['text'] for sec in doc if sec['title'] == 'Parameters']) - returns_doc = ''.join([sec['text'] for sec in doc if sec['title'] == 'Returns']) - raises_doc = ''.join([sec['text'] for sec in doc if sec['title'] == 'Raises']) - seealso_doc = ''.join([sec['text'] for sec in doc if sec['title'] == 'See also']) - notes_doc = ''.join([sec['text'] for sec in doc if sec['title'] == 'Notes']) - examples_doc = ''.join([sec['text'] for sec in doc if sec['title'] == 'Examples']) - - return { - "name": cls['class_name'], - "module": obj.__module__, - "title": short_description_doc, - "description": long_description_doc, - "parameters": parameters_doc, - "returns": returns_doc, - "raises": raises_doc, - "seealso": seealso_doc, - "notes": notes_doc, - "examples": examples_doc - } diff --git a/docs/source/overview.rst b/docs/source/overview.rst index 28421b42f..34ee0c0a2 100644 --- a/docs/source/overview.rst +++ b/docs/source/overview.rst @@ -1,8 +1,8 @@ .. _overview: .. include:: ./ext_links.txt -What is Intel® Scalable Dataframe Compiler? -=========================================== +What is Intel® SDC? +=================== Intel® Scalable Dataframe Compiler (Intel® SDC) is an extension of `Numba*`_ that allows just-in-time and ahead-of-time diff --git a/docs/source/performance.rst b/docs/source/performance.rst index 2edd1f86f..f2e7405d3 100644 --- a/docs/source/performance.rst +++ b/docs/source/performance.rst @@ -1,4 +1,5 @@ .. _performance: +.. include:: ./ext_links.txt Getting Performance With Intel® SDC =================================== diff --git a/docs/source/sdc-sphinx-theme/static/sdc.css b/docs/source/sdc-sphinx-theme/static/sdc.css index 4c9476732..6a9123d3a 100644 --- a/docs/source/sdc-sphinx-theme/static/sdc.css +++ b/docs/source/sdc-sphinx-theme/static/sdc.css @@ -11,6 +11,12 @@ @import url("basic.css"); +/* Caption text --------------------------------------------------------------*/ +span-caption-text { + font-weight: bold; +} + +/* Body text -----------------------------------------------------------------*/ body { background-color: #ffffff; margin: 0; @@ -43,11 +49,11 @@ h1,h2,h3,h4,h5,h6 { line-height: 1.5em; } h1 { - font-size: 24px; + font-size: 26px; margin: 0; } h2 { - font-size: 21px; + font-size: 20px; line-height: 1.2em; margin: 1em 0 0.5em 0; border-bottom: 1px solid #0070c5; diff --git a/docs/source/sdc_info.py b/docs/source/sdc_info.py deleted file mode 100644 index 745870aa0..000000000 --- a/docs/source/sdc_info.py +++ /dev/null @@ -1,82 +0,0 @@ -# -*- coding: utf-8 -*- -# ***************************************************************************** -# Copyright (c) 2019, Intel Corporation All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# Redistributions of source code must retain the above copyright notice, -# this list of conditions and the following disclaimer. -# -# Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, -# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; -# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR -# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ***************************************************************************** - - -import sdc -import logging -from datetime import datetime -from module_info import get_submodules_of, print_modules_classes_methods_attributes, get_doc - -# -- Debug logging -------------------------------------------------------------------------------------------------- -log_file_name = '../build/sdc_info.log' - - -# -- Submodules, classes, and methods to be excluded from API Reference --------------------------------------------- -exclude_modules = [ -] - -exclude_classes = [ -] - -exclude_methods = [ -] - -exclude_attributes = [ -] - - -# -- Implements custom skip functions for the parser ---------------------------------------------------------------- -def _skip_sdc_module(mod, mod_name): - return mod_name in exclude_modules or (not mod_name.startswith('sdc') and not mod_name.startswith('hpat')) - - -def _skip_sdc_class(cls, cls_name): - return cls_name in exclude_classes - - -def _skip_sdc_method(method_name): - return method_name in exclude_methods - - -def _skip_sdc_attribute(attr_name): - return attr_name in exclude_attributes - - -if __name__ == "__main__": - # Initialize logging - logging.basicConfig(filename=log_file_name, level=logging.DEBUG) - logging.debug('****************** STARTING THE LOG *************************') - logging.debug(datetime.now().strftime("%d/%m/%Y %H:%M:%S")) - - # Execute parser for SDC - inspected_modules = set() - modules = [] - get_submodules_of(sdc, inspected_modules, modules, _skip_sdc_module, _skip_sdc_class, - _skip_sdc_method, _skip_sdc_attribute) - - # You may uncomment this line in case you want to print out generated methods and attributes - print_modules_classes_methods_attributes(modules) diff --git a/docs/source/series.rst b/docs/source/series.rst deleted file mode 100644 index 666df3140..000000000 --- a/docs/source/series.rst +++ /dev/null @@ -1,13 +0,0 @@ -Pandas.Series -========================================= -This section provides a list of all operations of Pandas Series supported in Intel® SDC. - -.. currentmodule:: API_Doc.hpat_pandas_series_functions - -.. autosummary:: - :toctree:api/ - -.. todo:: - ne - append - iloc \ No newline at end of file diff --git a/docs/source/workflow.rst b/docs/source/workflow.rst index 9c5b95c6a..999d3415c 100644 --- a/docs/source/workflow.rst +++ b/docs/source/workflow.rst @@ -1,7 +1,8 @@ -.. workflow: +.. _workflow: +.. include:: ./ext_links.txt -Typical Intel® SDC workflow -=========================== +Step by step on typical data analysis workflow +============================================== .. todo:: Discuss high-level issues related to typical data analytics workflow, starting from I/O issues to dataframe processing to machine learning. Discuss each of these aspects on some examples.