From d430795d35cfa2267b8ddbd705d1c753578d6882 Mon Sep 17 00:00:00 2001 From: makaveli10 Date: Fri, 22 Sep 2023 12:45:41 +0530 Subject: [PATCH] add nojekyll to resolve theme --- docs/.nojekyll | 0 docs/Makefile | 20 -- docs/doctrees/environment.pickle | Bin 0 -> 78215 bytes docs/doctrees/index.doctree | Bin 0 -> 48767 bytes docs/html/.buildinfo | 4 + docs/{ => html}/_sources/index.rst.txt | 0 docs/{ => html}/_static/alabaster.css | 0 docs/{ => html}/_static/basic.css | 0 docs/{ => html}/_static/custom.css | 0 docs/{ => html}/_static/doctools.js | 0 .../_static/documentation_options.js | 0 docs/{ => html}/_static/file.png | Bin docs/{ => html}/_static/language_data.js | 0 docs/{ => html}/_static/minus.png | Bin docs/{ => html}/_static/plus.png | Bin docs/{ => html}/_static/pygments.css | 0 docs/{ => html}/_static/searchtools.js | 0 docs/{ => html}/_static/sphinx_highlight.js | 0 docs/{ => html}/genindex.html | 0 docs/html/index.html | 295 +++++++++++++++++ docs/{ => html}/objects.inv | 0 docs/{ => html}/py-modindex.html | 0 docs/{ => html}/search.html | 0 docs/{ => html}/searchindex.js | 0 docs/index.html | 296 +----------------- docs/make.bat | 35 --- docs/source/conf.py | 36 --- docs/source/index.rst | 25 -- 28 files changed, 300 insertions(+), 411 deletions(-) create mode 100644 docs/.nojekyll delete mode 100644 docs/Makefile create mode 100644 docs/doctrees/environment.pickle create mode 100644 docs/doctrees/index.doctree create mode 100644 docs/html/.buildinfo rename docs/{ => html}/_sources/index.rst.txt (100%) rename docs/{ => html}/_static/alabaster.css (100%) rename docs/{ => html}/_static/basic.css (100%) rename docs/{ => html}/_static/custom.css (100%) rename docs/{ => html}/_static/doctools.js (100%) rename docs/{ => html}/_static/documentation_options.js (100%) rename docs/{ => html}/_static/file.png (100%) rename docs/{ => html}/_static/language_data.js (100%) rename docs/{ => html}/_static/minus.png (100%) rename docs/{ => html}/_static/plus.png (100%) rename docs/{ => html}/_static/pygments.css (100%) rename docs/{ => html}/_static/searchtools.js (100%) rename docs/{ => html}/_static/sphinx_highlight.js (100%) rename docs/{ => html}/genindex.html (100%) create mode 100644 docs/html/index.html rename docs/{ => html}/objects.inv (100%) rename docs/{ => html}/py-modindex.html (100%) rename docs/{ => html}/search.html (100%) rename docs/{ => html}/searchindex.js (100%) delete mode 100644 docs/make.bat delete mode 100644 docs/source/conf.py delete mode 100644 docs/source/index.rst diff --git a/docs/.nojekyll b/docs/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/docs/Makefile b/docs/Makefile deleted file mode 100644 index d0c3cbf..0000000 --- a/docs/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -# Minimal makefile for Sphinx documentation -# - -# You can set these variables from the command line, and also -# from the environment for the first two. -SPHINXOPTS ?= -SPHINXBUILD ?= sphinx-build -SOURCEDIR = source -BUILDDIR = build - -# Put it first so that "make" without argument is like "make help". -help: - @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) - -.PHONY: help Makefile - -# Catch-all target: route all unknown targets to Sphinx using the new -# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). -%: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/doctrees/environment.pickle b/docs/doctrees/environment.pickle new file mode 100644 index 0000000000000000000000000000000000000000..20a7ea1c42d90270957e08b2087b93984d7fa334 GIT binary patch literal 78215 zcmeHwd6XQ-c^`4^?(B(+1O-wW9wG)Lc9sNBfrkizhiHIH8U#gB5;W|c>D`{j?96bw z2iTQNTarzQkUNoLj$~VwWZ5r%*0Y_Lmp|e&&yJZmacn7;VmpzKBsQH$zNAF9WJ!5> zFZq4nSJmCsJ+nK#GYe8S@W|PjI=-s<>Z`B5tE%3+wYJgc}u%mt2`J>dZ}~heVyk!g-SEU8{D2vGa}AS+8l8kvwtUsd`Pj zHCwBm!_OQ+T`8d+$ZB>^XWKAEr z`N*w@^T!*tnzhhqSr{!KI1M0tES5Os+sn*b1vfvzY9;K2aAPAcHj&o9~jumh87t%g6x_-AQx+3(Ct zjnSG_Uus)R=>Jw5fVckW_q$h1e#@$Rpb@6v3&DsgLqiR&ie;97m!+1C z$t~9`&jSuGNOy9}Odhltu`a6hioK%R8>P;0y5mUMNm+X(uf4cfU7>}vz1X6)FayYb zt6lanyA|qV$CDb^Qi0`0rHv^eEQcAp{YJUeSfIsPLZwzU z%6daOtK>Prxxgn%t~8dds-E(zQF|Hm-|*`V-!8T6MH~Gn+a+Ot3eyt|LKb?6{;B5b z5^-h^>u{Ba#l*SW0jH=Dw+QJ36sr)R=4V$_rqL7vP^976O|otayPiTCe)eYWeJH=K>d+Qol>prFsJl>5SCfYbIkNm#`XC z=1yUAdfn_%To0TM-%1s`iQVwT7H-eE$GKM;zIxeOsV*ZQ^j^1Ud0;!JT~&>7T?5QSV=(8}yb_pNb#YZEjZ;z?TX4(wbYr=; zN3AT8IG~|{GZ{2|ra9i^3GD~R({`KpgKiB>pmoXe}78XFEL zN{{rAJI*tbESo7>uT?zWART0$vXC#l|n8ueB$MWq+b2G+8X;oRZeDJ=@l zwA^773IrA4ooX>`6QF`NN`}a#R(n{~!#)iR|6sg*@RbsH0oJgd_Psn#tR+b=ov&7C zwOuB)WHiiOvF3?8SL?LO6y_uwR9}+a?L`^M48w##SZ-CBeG(2C)sh2I65MJ5k{xDG z=fOGKv|ET=DzKDThhF$4zwcTiB^rCq7&i=V-2h+Uu1s*sqIIqcWT-^vF6T|0 z>l}6NmM^zDw@LYFE)SmEvdr=B6VQ+}O6_I^5-s*@7NfWs5h*>;=YoZ$j!le{r4qJp zV7pPbY5++jp|kfeOxZ1HW~*gpUR+f=0)=DQ0wJ6wrpD=exlWW`;(-NQU;cU3rU<-o zTH$&M$IV*RS44C{07?eQnkA)|7%eePN(S{qcjI#IMwG4vDu`1)WG4YF3AQ1O$p8$wbYFu6qQ+W4H8Mlj&O1QRD$K zEYpTPqti*HV*OHOOz4a@?S&Vl^lqI<+IdN=3~Kv%U6>Vd7vE|jl>`*oRj$xwpf7>5 zDm{yI^eZ2F^5n_<{IN$L%-{3iqsJaOdH=Bo9ys;j6HnaNk(T#GRYgC9)^07snsV~k z{KHQkdl>ajp1i+SEjC(9y3PbC`YTv1OSE$Zqsb5Qvm{DiFds2PB6$l6+f+G6n`(YcJP< z^LRI@%nEoiclZu(2(EYrUbmwMQy)9_;rLA%}Je2Dd+IN##Tc3AVoL8cpN*Ugb!oVkPmA z0K6(H2*V#KYRlN}bypw0zxA(KtB}HDSV~GD0cBt%Cd_@4@r9Wu4Blj&*b*+hNva-^ zvm)2mQ7SB`*wkfxkP!*r8rX?dkv$&POwE=JTT4vtk#LvU1s+hXFE+?-!=j?*6lVXR z(%j^J8?}NrJXW^}MRqCm7Y16-9>oG>AHeY5P{ShSlBH7}~FM%dG~?U7;~1BphnO*BCB4Byt8LH{Lt@ zz1QCKtm6HXT%>NFC&VCod%F%>hwKY`IFGDKp@c%9S^J`%F=(aB8$ZfSa4a}Kyx4#F1wq|w2&3L<;|2!B4?kqSFvU)Jk7xf#9i1KXh8g}v53Bd zY1NQGdufd}h%wTws&x|Yf>APmz$^iEd{SA4$vW5~`?c@1u((TXz66uwF1?`)`s~A^ zaYeb=6iGR4FJeHuxIouo@1?As1HXoH`|86Cm4sN*tfoj>yWSuqhuZZf3c~kE)7eWwMMn#sZb%=7U<nbT1VN`v1OA8P)sn7L@U2cpuXc93Ne41^3v;3?5$ z#bzNaCKlH-5vwH3Whs zUk~vw_^gOl!Jt5^Av$J2TtcjoosW#)oXB*#i}pXWNH85o8FoLlS+J_eMZ0LrQ6}yE zTG7;6%X1LRXvsvqP|CN;V0QvLI8}`amBHd1yeV~ zm?2IKmUSj{HX~Y#V+V99*VI2)4TZ}0gCeNx)#*#M#sZKnp3hL_P2`s00jq;k>im5= zU;AE!f=(!rX&0$hET57F2Tv+i=?;-sh4<~H0)SCkw%NFioeCOmFk#hThpT#YAc@a6rRBv&5TWsEc5!eLCtEoQzQQn_!*MzRRPc zP7@P_3msX(SOi1*alLLPEQGx#v?Z2Ao9w`;4s(727tHvv3xKXz=H_niPs39VRd}n3 zwJRu>>vGCP14}v7kd~G}UZ=CGb(ozYzlK-{g_J9G5pwm|t#fcyiepXh7wz^!Fe#ck zdxyc>PizVH7%3usfKGy)Q0NFn^Ue*ylyaYkvg63(${ns9@y=f73a94OU%+kx8#8&0 z#15txpHt^Z0CClQ7)qD&Nq!`lVb%n0L1SX`KOB%_%(mDI>As9@%0n@gO(l7~Jm29g z_ctiNz2H3lJiyMVu8J7y70aCy+k*YcLJjy4v8MD+|v zQ`Nd*&2(D96e{q3U0R`~N=PHU4J2l!?$X+vXV(_VKzJ5KbB+a9Hd{lW>;{+f?o@@H zw?&36*nwz|tYG+i;*K^QOF$}uv(5Q|3&Er|e`5CFj&Pm{Cb&XLyYt$?D0mR_0ZbIH zgb$7U?q~n#nXl~F=>>4Alc5JjTJnDf<1lN~Fa{1M2*wp-fE~z3q>p&HGe7*!Dlm5%!j@B;T+_@EI4 zlQ71Tu4C2CTdQ8@!wAJFk-wM>!8FNG5Xg<{*hKgH#ZXHbsZ7R2Fs;@psJKoN8Zd{# ztd0X`D%@(UWt|t+M_hEY>>vsX${w^oEG8=MS8HBT)hF$ZOju!ccXAt)_bFBLD z=P5|3n0uzt&X=uv-l|wlKkp-si$Uf^o%HS6YTj?;R}qv2E5cc@gTs0F%<@$~k6o)> ztK=;|PhmAa!g}Dis@4I+&QoYf{#nQlgxY8GV&*_>Sh3?yVPKF@XJ~xePeVu~%KLjb z&=)!sb{FiFn39gW2LtvNtRNS&1Q280R%PWL3cL#3IYW{qN3!7CD4eR%57Ir^{)wD1 zSQ?J1_`6ZP)gy*##J6A~K)8{+3oW`=)5ka=dyJ@Ah?EnYeZjFg3hRS+L4x|`!jL|_ zUOAv|j>uiY`R0V8=b~LXAeL`~#kCiBPM!Po3Sbg;PO1qn$c*n01;{896rQqcpf{T+ zEl%+VJ(K3I38`m44d})m)n0k;kESZhY!n0?cMwiyHDa87^X?pe%(oXT_x1RKS#k6D z3o5-<{#-AAZje6({?m33Hv$ZjllQ@`(|J9IydcX&TVc&4nIf$sI*; zOrb2CUWNMar1Xpgr(gu^g@d3#I}?ggYO6TKb*?C{{#H;TSOIDN^TBq~DzKaFbgC6> zBKS6`s)h-pVhh7wcH*)i$J6UI>NQw2gB)03)T%<*BN(BxFNT~k>EuI5?>Pg(v_i@3 z`4%)y=opr}#-uy|SnEv+rkkVW-lv2A`lERSyVemVs93Hla8LQvgQIyRQHqG?UP&^17uBoveQVWN9)mo*UygFMCE zix`vgZxe$JXS~Ox6oPTsb!H(QahHNg>LF7g|F*mCAt_|P+!NXEuTvIp@mn+&#uy7- zP%s`_ohI!WImUqhbLIh$(tu^Oqtufu1O2^B1KrI7g?NkEhNYK6d=is>W>a~P#-YI) z!|o)yG8T44R}+TH6hRD?gU8pe#FQEXX3W;tGtO49rM@=L_?vJ-zKU->rKA4H_^(4? zf6l<%ui#HiatL;%_6d!vg8R3LvfHVw&K3?TNd`hDx0}pqz4hw;KQyzZWEWv%46yZ@ z+r^|vvxrzaIQL;MHQCRWd(FP$x6#q7Gj=rC(pY=u4iG@*_Nt#G&~UVv*|CZEwruv% z%rd$=o3*H@p#5uIT7+pT6i_r;(p0!p zO6dYZhdR-~*uxnymW2|J12!n}D*TBrr}b#=$*f%}pu(DqBO*H0rNfCXZ6|rp#Fiu( zxGHDu*j+t4)-Op(e>az;cBjQ$jfym7O~ec9VnSbLmVvqN$%?rQ{B8xXH$Y_{%G#w2 zRHnL=q_Q2XLYPQXX$H1_Bx~0Or!(pC=F(Ycv1d(5qajUV(dj~M6J_BdN;Z)7FR~&l z18M!Ujgi)`W$jW1(o$VYl2(5V>~mQ=HaKBPe>az~rV~ndZ_>&|C3PX;UGWTqyuOqb zWf{opm5q_t*Rysh19_<~ZH&CO?#L+B4o+Uu-=UJ%#()J^^2W%=ASj4WbU*xr@~0)m zFOjIrvTxEjVd~4N9=yQPzu4U27=b)bcL_kBm1De}?)rMLQ*5c7U{4n#L&xpF`b{3V z#dfX6+OYdYv_nVj;o!p%5ZmA$q$#E355Td)8Bs|k|9%{~uv^D8ei`ErBRw*}XpKZ{ zA>6- zJo3cx$L8lBJbpSOBw=UT`d-G7tAX_ekIra}*ws zFD$Ggu!@FLhFh#n;r;MtGHxipm|G<3_SPyVC5kv^A?HAJ9|+4~8aGbIOY}j+VvdyO zcv=2UVMB-Wc5$hAIDc(qtSw%fi+;57g{S1IjYr{luBi!CNqMXTyT*gXWgK?dne`j9 zWOhY^2*}6uE;mb!#YLLn!XlzEG(o5|*!E@kVQEhzp;T|?3vl!_SBvoJw_4UJnx1bj zKfaphUqmp7i)?A)(uk42eKo49P>1scS_o+3B>s>^J;FdG&jmbNj@5$#+AWy({1VO^ z#8Ik}L73W;9RgwJRxt;w;JIWiN~$YkUq5J3~#cLDQ zP81TwPyyYD$K;7>^p_B=`G9gJ<_knq^rLthU!D>d zBP}kXMO}yxjQC(O$?FvB4rG1s8 zMG}TW_SbtmzO=9EJ^IqV`kL8SjcxMjFJEH%--*i9EARb;7BUy?;w$g{WGHiztawSG zx};EDQm8H|RHli@3=cRB#vj@E1`8NI1z4~no+OYQIkZ*OlgE&dEy6dl_eTgBI(Re1HQ$F^OC10yxYtnGYw^*83U5Hx8vZBt zEx83Mbb0sX)^QI}6TePHjCfFEEq$=#-b5w#cL!29)G@tPu_4M9@%_|D$c{mivqQ&w0}gHsPrna@rqvwN4~6O91>f^ExCyh-;IGVDEPOG0Ssd+es$S` zOv}GFMullfBLAzW>13Yl8{$#(nlScP=~8X7!qJ_&box#laM}$6cU?3Whx2?Rlr8~d zvR|#Y$=LyB&F;q>?B?PDQWI>!a_-pV4%lIDoSSLV_M#r#B zaL2H}%B`_q9ak~D8x)Dg&sTki8^#3&=inc%yX zffn83LF>sFr}$<Cl2~Xb~so;NT35P43)8!kQ3_<iWR>M6tPP%?UJ0AXUR zb@zxObKdXXf!PQ~5Nk$}I34#+`pIXg;=k*SS-Ir}m!;Gp_R@PA7lJ9BJWJ=D>Fo1_ z%GAGip#+Is`0a&-rt1xzrppl|YENCh5(d?MbX%Mp1skOO$2i_5**1=-OQSLwHV&?5 z*obbTN*@bOS~Y^_E}qRu_bW6Q^>0Yo7gx$cq-owF*VjlU;Pc^tW$VHeobg?f}xU=>X! zi~=E*Xp2A(;xo+wv5^S}dBT|LOy+<$KW?`u916iyOvQZ4+{-W6NF>dG-%wy-TRYz* ztj&Y95l7EMnMOA6fuR|z<^9I6Vk~k4+nTc1pCXV#6oR_%Gur5)vVSeEvg24HAq#pj z)M$jvLen+y25p63M8kxgZr;-aA~SqP6KZLHN;rM98Y@k4B04j0BY%2kez4fQ7zveJYSQ~D2Z{00$z z#2}C%6QNSvlSDX>aAh(B2v;$7(Nk{2O9FifS3gbIxSKvcLm&5q-|oe?3+{dV`DXsS zpFfZB=Ue#mIDINs)>{yA!!^2zj-Dv^Jd-@MuA?V{+x4cDlt^?DeHpQ?Z9pnAOw|#n zXctclM!Be1xYe^}8_zJ-+RGr2ELMO)#G_wLv~@A<$8p4H2_@xL8oGp(9I^X(LV<2S z#dCfUxtk#&8J?3kCfIZGr)V`HB*n=^%SpY-(G-6&UX!xhxr(82!;7&2usROVM;GbASEkr)EtRGk#v;6|7*Le z#?*exK>LuVRtX`=sZBA2^^H-Hg~wcG5JF-LabO{2dIVI-LdXn#V7I>s1K*@ajPMn zS=Yx$>Fo_#Fsoz|L|BDNr=!$Fnc+&%3*c}R53!6VfpZk$gOHr$Lcx9Dcy53d6pGhq zMW<>3kuR5r(n5w!8vzw0o`)eDtncW>fMMXhwPFs@8dm<+Sqb=1hk{A;#vOuKGvR2u z^wz3Fg`yL=$SdPfJ6YvQY)4Fqv@R3EmQiyC_*Ayc0kahvGex~hwPYn@E%K4ST(vLBgdWrID+yU@t7|J1tP6@;7+X~cSl~kWTATyT?!MgVpKY)lR zEU;(3c0=xPpxq)Kq!$zSq76Fa<>|<)Q4QCe#wgjClz%nENlB6Jl&tPw6a@55y0;C2 z5OLdX41|H1&kYeXDRP|_%={K(W*~AE#InIQ= zX%@Mw;u^l$=2~t#yaq?NOzEMUd@z}5tofPIIPI@5>kML)n@F@3tXw>!ToOTg*`(}p zLwDIFNA13z(4gB-@tP6jZiWf!b-gJ|S)u08a>5FgBpq#tTANHw_g!qbvIUG8WRS@g zbqbFhQqT@mU=^#4jg!vRK*2^5p5vxt2DtI9(P-i+uJBw9J)NZ_3>c;8Vm#c+#Y-j> zD`Xelj0TMLc9${u_19Y;Hkwy`70I;TZj3B#rU^bCcPkomqYgA-TKU|X9CymViIidoW$Ydaa^A}QEnOUxR#*3Af(TyA9W{vQVFTsEASU-A0?EutxfIu% z)~9o1eUo!P;t9rEVd0I7FbUD|Gi_4hlR)P!GQeSGW2cRxb36R_qu8#_;y^|O3Z@Hs z9gz<4mtXI5*;4y6_m_qE}5PSWZnGk~zdy`kh ziEN>z9NGFnYJ4FlThrt*CNQ3mI)xssJUW957*}abAt?e8+88IsF*Hr*o|s9|{dJGi z^?h{Pp<+z=T%q33_VmS8V_6UK5T60WbE$Y;oSqq^Fhaf_ka`u`>O>c2EW;>Sr$-Z{>*p+(O*-~bT2hQEi$6e3)ur&mAK6lpP~t{>lWmh&HmA;J$m) za3$i|Ccrmv`ko=;R9QeGoK6Zwt}spqvVh36q*RB#4R%qV)I66r+Na3wVaf@xPK1pN zYWFbp1wf8z6a&X0{ZpE8wtM^(ePg=^fBVj{dmL>yaaPq1ue{A<_|VVG;@)_?3GDGb z;qeP{iV5JGX8D+l>!*oE3tEiAYl%vXStB-SI#JtXrm0+m0sJZvK^P~ozC=BUIpmiU zZ3U|r&m59Mk+w&q>>+q)T_oTL_Zp#v)VpPPs9p-|BB|HP(k0mC5+xhc@%srBg(k#a z>@!2?(iZ@GXrW7=V_<1~Xmah1k5mc4N0@Bj<13qpkG~i`KC1aX(AQ z&~%$>>R%#vGwf&w*5FghkTyA%GNh%rj<%#-y#}~cSXXSsB1`;&K@XWsX)h>K8s8d2 zs;#n_u&Sx7;m{TF!ZXKz*J@%k)5S=?hQ3J=EjhYe1~1l=p2%sj``!_b;KBt-@s`hNVF7G#EKzV++gUwyC)hYzalOKcw8KNX>C~8qf zqb=r+VM)Ol#ScxO5x%bl#l)bN>L`bXN!XQIYxMp*Ex1~n(1}hBno&L{R4?a=k>ZqzJu+$<^3d-e|Dj^>vN)cNX`00?8tg3NuTw z_+I9(beNehVP<+=7s&X2D1Q_uv)Bkv=jP)EZbV<|NK7(HD+wZ}nML>-gHE8z#7%V6 zTG?sW&ki9n?dTA(s?1^$R#m{r9cUwqS#0^DA~Do8Sd+NOZ5tGRVu*90%xTeFD0A9d zc`kbCgMG!n$#kYPh`!BfQJ)lj+$!{ujDP!S9jAuVuw?{-xAOD|usqAreRCA?iri%) zJkcJFQx6ayCF22WKB{oNbw zQ{KvUX-rzG5&2KB+1h9*FcnWB1jy59?F zK1VoUAIyKGZ|sBNZ=2wQ*}&9AC*sWqW`Tv+6SQ5haBf@71SyyE>?mWS_j+G^_(vfs z{y0Phe;WoWZb5%SH6ysvUcp_^eyL^Sc5oYpfl6s%wZxC@KHmwh=$c!tbe`|HG%oi7 zK0FA)oAZjpk<;-50c<11`#_95vR`zG*2NPJU2i(<0;sDGi;xp7#1KswVTNl5yEGOL z+x-c&5xcB5IP#8rt|O7{X#OA%?cjZf^Y`H9uW|`bEtk9|t^_-p4~ygv-gn;_y)hSL zPf_$_>=553%IW6Aa(_0_{+7H3C(!WQfV3so15&T8;TO<=wHB}X8NxE(A4d%zR}MQ$deNM-Hf4*p2ydOmT=MwB3#Sm_+3ALp|$yz)EYd_9ju7%FcKd2n=aEba`Fs=N+#M;2Ep=BRe$p9pPyuPIsMag|A1ewsEfohTo$$;hVcivBC13Lov68rPO#r+OX3YImQBe z!l1^O^wVpnU&FAbOf@G6BySli$m}sBfX;iGY7$!a(_hC+7Xv-)e2KRG??l=*WYSAi z(33L>cl`Ux;Y>}WGDQBQtX>g+Qob^a`O^j%USu8;7MBtr*HCJdoTpCGM}1N}^W;YR z6d8p~LBrV>eBb7V8FtYHic7X%qGLbIjyC%R$oq}fdPT!_>1Om8+jEkR_8Irc4TMSW5; z^M#G}DH63zvWI^tY-CXXo5}nDImRA)TG9LUzwI6ek+T174}D|*8-E*y(~0Dt*izag zf6=|TLf~A9EtDG)_>S}|@I~!(^&$;J+B?*3ACB5BoVOS749r>EU*ilE-5{y(p}C{5 zg?NUs><`n_ck>$cSfztVdxb<>!S`Hzl_ZWJEo!9>KaGXB4zc(Zcr{{%_Ml6VP}MI^=GKEd2Vl z*Ps%F%V@oaARJ$3S_;mu4K#J!CpL5utKLYs2-j#P5g5To{AjfD;&8MrF5#eiB`j^- zhDepXL?@K3gnMilib3BsV;Hf`p%;CxVQg07?`wjA$Rt&b(P5I3cJ2G%zd0Vinh30j z-t#uEzX|6i;X=qY&f((U9{1SfaWRTMVIik3wA0SQX&am#VLx83r*Ee4wqp+*if&M$ zQzk7)**G)8!J~AmH{Z3bt_I0LQ^NHw;k(bV#&k(UuJS!gd=v&JO5~;y_;xt|)=e7(KAfPo`wT>D%A4JSg%j*VB?xFkO+N{2`2 z!IIpyPaS*Y^tBW?>*HZ{qeVKK1WyxgW8k}>@V%k#)hl?zZ*>NxUvp%=36KB8M|B(E}&ce-7lOXn2JY zj7&ZH#ueyL3_nr_pHjPNF3P9hdWoKl*`+&XHie>IdG9BPre1mPCpVX>_>!E>peqKv zHf0%%`aK3K8wR6x-%TLn3UP{E9_bm$kc_8SPkM(kTD}lELzMqI{2gDW`kbn)wPDOVl740Dl-3bjJ1KNS`a@Bs#Y^e zR2|n!HUK&@p_$tO3|-+O8q|blDo=oXl=|IMvy@fduLv4*)#`jFb zX?=Z(Xb>yebfT@zevGFF24jKEUryM*rW453*h^mww4F-o?9`<|W-bdHl4Rii#sofw zX%@Qyu!m+AyOx2aE(011iBKb=kj4a+(b=+3ZRaEd6K~l>Ox!1(ziPW_=G=0x*(>}u zy7YL~E)~$gnnwi=pnzCZRF@7Xy0o3vv)L<2GCKCItR1_nXUBp)Ub{)NQS$KWyZ>Cf z0qZ8@5CkGuXC=TitQ`9R@Tt z136lzIx71#()qWtA;MaeEU(!}T5sCH9nkqQqbkjqxlb8G9Bk&4&h#+?$;(o?%|DKW zEH;2=FBaMaEt}t*f$@JnM2staD~0i&V~h`^Z^@)(Vc=#=XsS;?ywN^IT9&yUp$mnL z460?BJQa{*TzB9=g)h>KvzGM-^o_MF{yhz%r{L!C7e^G=u;>Llsvi2&dC`3dW!-NAN8 zl<|TI8TH`U>Na2{mdQ41jxo+v|X6a(zS#K6CwU=?|kFOx_Xn9V_ z4*`NoxFY$<;@yCQ%cyt_YTh77EASsdhI5~EaGY=yI;cVSMM~f;Yy{MFGk(QlC&KwC zxVM`*!R|-MK}Rl8+SkeN=9yb?w*toQFgI5+1BsHp>OmM{z3u=(9^U9#F2>E6;{wPxzAE8>m0( zpzSC%K0y~Jf}Tn%fM7y33MZ5)BaapEQQf$y=iQt@z!82_TDH#+X!02YiO!C!6KonRaFBN)dg?mDPd z%T>Q~fwRwBt$OE0u8J!w5k21tB5bHG-UL_%eP1C2Qpnt41yD&K(SlI`uiq%ZYf(}9 z^alFYbyZ@wcdtWkj7Bx>f$6P7d+#K$iuMkhKwKlw)Z2|bAvN8WNotiux7Q^#_b6&? zkkBkt9U7t4sULk4ntPIpkA_I-MPd78Hs6)Gr@bgl0et&L0dADSCWX6swuJ-7y?NU| zM!$N|mywsCuXrBQ*G_54q^^$<^w^@W1j}Ftkk7Z(2KUN6x#Yo=6?2~ zEd?;xD8N2xD~psK?39hU6KuJ$qxyX{`qzz(oBMoP(kcYI!5v9LnT3Qht0a_$99X4Tpd^0d4Z?35R*P=}a(#8m$g~&^@n+ z>{@Q($GEfxd8>XFKXdA5yH&%lNxxApE#L@0<$9f92Sni3YA4ve*l75OU9)4EC$Hga=s#Li6~crGTqjLN z9uB*_6Do;XCx7-pwz(_o;E zd0p4Cffeu>|LGU>O@Wgg!^@3 zH&X&vHxt#q%FIYq4rZvgASe%)ST}3veaHPOb^MuN527A%b$6*E57O7mRl=ULAH%Fx zKzsILbp_r+_YYCr{Udw?la=;z6R({3J_bsdp5g@DonW`>R*h1oIfaRs<}XTWdUm_g zD6K3LP0T>vYj}1kUX!O8w_%;DdR3vZ=@LTpNb|tl<6TLbk`YbVvRWq4d7K}si%Nx= zS0zh}Rnk|WSpF6I{USt6>pT!ou&`vd1iNT4V8-i9Ae>rt8G`4dGY8#QP{~Uv&SPs(yv4UR`!9kQZ<%vwe@^M{9}}SeN+17?fB$!UzUcl1eRtjpF*6vIRbbQdogv-9{?iPR7ZAwix~(iN9K5KE-#F0r7M@nZ;Zf zKZq|{?O=o|=yGGAYIi4n{5F03CO+E17?mL9Kwwds3!D!h519(cWWaS;5$9{r_)54J zkmr7aKHf)H`+R^t9^Z+Nx6#Kh(#NmTN1mQmej|O*E3YoU3`_4+xcs&ST{GnJ)kJi{ z)8$j46yNT0OgwpET=v{BujdVldhOD;b}$+8Ga!ReGzo=97cpJIY`g z^8UAiELyaQz#Kt3Vg6bO>@Z?!J4^flrE4i-nBKhvM%CSVMJ0WTob})ocIt%Qx$4z&Yq3AT#{y#0~+haRI%qS0;5oKgSn;68_MccE3qwUP#Xmj5V7!lI8Vf}SSnjMUXbjf^gTs_24!rK+Z@^Tg0 z1J(8sDI?&6PzP<_qJa30`wc7u_wQ&eY^UpyK)<{Uc7j*ZHUlA$EFDP`T4Ew@e5$*F zk3)hJCO)yF37NfrqbMh-jRumV?IzJx1_~mC@iXlH>w(5@1Xf5ID8hjiT()@af@p@D z68#d`g0AApz~)3-8G<~O@hWH4%T5Er&9V(q zNG-@up#_MJ-^D*l_;jDeM_bIxV_J)2GwsjI zuo9-N80CB%1-en2`{TVbn0Q8NFxIx92Wd4Wv4=3}jPrG+$N40O!Sz1}*c;;dzm1B5 zyWhmOY*XGRc?J3F;&%ToF9B+mIikPc$ljSf-dQM9q-2qhC;s@(iz%{vnIW%1mc3@y z%|5Z8MO$4-fhTi+Y%+@oI4CW)NCri4Nt{c56EFsx*{^3uW`B$$xM{tajg2ck$zRLf zuRbUFtC=AyI*DvUf5jkr?hr$#hJA5r-~(ChW`Y#1pB|VLt^tV6S>%OvNkI)NO$V>f z-l;z6;6P@`uR0wVTp>Eimmr1j9-I{BGvlUTe!o6fh{lzsh7;NQ)h9K)H8bQ_of@u; za|PIbY9%qLCCK4>2PcR3WJXTEzHoFqPz89)7!#N4_hVU8_L6+e}|Z+%k5PiBVvs#C=}FTKXa$uAC07Qdev zLH&}&&Fhjy@^NW}`bcs3PuV-yCtdtbX2?D0B8wAEfgoR^(r{TU-2jM4vfTs?c5Owc z>wSK4qTDqzuwXj{5EoOhJsrQ?o|$qh&7{V&cdAcf9A(I_1ueF(`xoPrefQv#eOGq8 z_Nma`(Uk*rne4>%tSLTpd-g8&IrT>}Lr(FbIR z*1ib@PDp)CT8cUrviGk~>L_J~{HjyO8mFw{Wbx6#$>N7HBd1@o=&s{*;~R7mI7JU1 z&fc*;=^@Arxd%OLK;(#|7TK;g03s>1Yyd>m3-L&707TS_mxgW?WK(eOkaLmx{!3=s z@0W1*T-PPoEJdHcw^1sJ+(BR1D2OETH!y!h0^~59rid*H!Jr2NLaE%)xVf62}*tN!a{N7QmVA%LF4%cuE4o⁢O7WjwCn~{VXDD&)jMU!%UlS? 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 W+7OG{3JIoCousi6Tyk%_^8W$NVS)ny literal 0 HcmV?d00001 diff --git a/docs/html/.buildinfo b/docs/html/.buildinfo new file mode 100644 index 0000000..7598238 --- /dev/null +++ b/docs/html/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 7b818b47e6f359b937e5a2517f120d43 +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/_sources/index.rst.txt b/docs/html/_sources/index.rst.txt similarity index 100% rename from docs/_sources/index.rst.txt rename to docs/html/_sources/index.rst.txt diff --git a/docs/_static/alabaster.css b/docs/html/_static/alabaster.css similarity index 100% rename from docs/_static/alabaster.css rename to docs/html/_static/alabaster.css diff --git a/docs/_static/basic.css b/docs/html/_static/basic.css similarity index 100% rename from docs/_static/basic.css rename to docs/html/_static/basic.css diff --git a/docs/_static/custom.css b/docs/html/_static/custom.css similarity index 100% rename from docs/_static/custom.css rename to docs/html/_static/custom.css diff --git a/docs/_static/doctools.js b/docs/html/_static/doctools.js similarity index 100% rename from docs/_static/doctools.js rename to docs/html/_static/doctools.js diff --git a/docs/_static/documentation_options.js b/docs/html/_static/documentation_options.js similarity index 100% rename from docs/_static/documentation_options.js rename to docs/html/_static/documentation_options.js diff --git a/docs/_static/file.png b/docs/html/_static/file.png similarity index 100% rename from docs/_static/file.png rename to docs/html/_static/file.png diff --git a/docs/_static/language_data.js b/docs/html/_static/language_data.js similarity index 100% rename from docs/_static/language_data.js rename to docs/html/_static/language_data.js diff --git a/docs/_static/minus.png b/docs/html/_static/minus.png similarity index 100% rename from docs/_static/minus.png rename to docs/html/_static/minus.png diff --git a/docs/_static/plus.png b/docs/html/_static/plus.png similarity index 100% rename from docs/_static/plus.png rename to docs/html/_static/plus.png diff --git a/docs/_static/pygments.css b/docs/html/_static/pygments.css similarity index 100% rename from docs/_static/pygments.css rename to docs/html/_static/pygments.css diff --git a/docs/_static/searchtools.js b/docs/html/_static/searchtools.js similarity index 100% rename from docs/_static/searchtools.js rename to docs/html/_static/searchtools.js diff --git a/docs/_static/sphinx_highlight.js b/docs/html/_static/sphinx_highlight.js similarity index 100% rename from docs/_static/sphinx_highlight.js rename to docs/html/_static/sphinx_highlight.js diff --git a/docs/genindex.html b/docs/html/genindex.html similarity index 100% rename from docs/genindex.html rename to docs/html/genindex.html diff --git a/docs/html/index.html b/docs/html/index.html new file mode 100644 index 0000000..cd207e0 --- /dev/null +++ b/docs/html/index.html @@ -0,0 +1,295 @@ + + + + + + + + Welcome to whisper_live’s documentation! — whisper_live documentation + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

Welcome to whisper_live’s documentation!

+
+
+
+
+class whisper_live.server.ServeClient(websocket, task='transcribe', device=None, multilingual=False, language=None, client_uid=None)
+
+
Attributes:

RATE (int): The audio sampling rate (constant) set to 16000. +SERVER_READY (str): A constant message indicating that the server is ready. +DISCONNECT (str): A constant message indicating that the client should disconnect. +client_uid (str): A unique identifier for the client. +data (bytes): Accumulated audio data. +frames (bytes): Accumulated audio frames. +language (str): The language for transcription. +task (str): The task type, e.g., “transcribe.” +transcriber (WhisperModel): The Whisper model for speech-to-text. +timestamp_offset (float): The offset in audio timestamps. +frames_np (numpy.ndarray): NumPy array to store audio frames. +frames_offset (float): The offset in audio frames. +text (list): List of transcribed text segments. +current_out (str): The current incomplete transcription. +prev_out (str): The previous incomplete transcription. +t_start (float): Timestamp for the start of transcription. +exit (bool): A flag to exit the transcription thread. +same_output_threshold (int): Threshold for consecutive same output segments. +show_prev_out_thresh (int): Threshold for showing previous output segments. +add_pause_thresh (int): Threshold for adding a pause (blank) segment. +transcript (list): List of transcribed segments. +send_last_n_segments (int): Number of last segments to send to the client. +wrapper (textwrap.TextWrapper): Text wrapper for formatting text. +pick_previous_segments (int): Number of previous segments to include in the output. +websocket: The WebSocket connection for the client.

+
+
+
+
+add_frames(frame_np)
+

Add audio frames to the ongoing audio stream buffer.

+

This method is responsible for maintaining the audio stream buffer, allowing the continuous addition +of audio frames as they are received. It also ensures that the buffer does not exceed a specified size +to prevent excessive memory usage.

+

If the buffer size exceeds a threshold (45 seconds of audio data), it discards the oldest 30 seconds +of audio data to maintain a reasonable buffer size. If the buffer is empty, it initializes it with the provided +audio frame. The audio stream buffer is used for real-time processing of audio data for transcription.

+
+
Args:

frame_np (numpy.ndarray): The audio frame data as a NumPy array.

+
+
+
+ +
+
+cleanup()
+

Perform cleanup tasks before exiting the transcription service.

+

This method performs necessary cleanup tasks, including stopping the transcription thread, marking +the exit flag to indicate the transcription thread should exit gracefully, and destroying resources +associated with the transcription process.

+
+ +
+
+disconnect()
+

Notify the client of disconnection and send a disconnect message.

+

This method sends a disconnect message to the client via the WebSocket connection to notify them +that the transcription service is disconnecting gracefully.

+
+ +
+
+fill_output(output)
+

Format the current incomplete transcription output by combining it with previous complete segments. +The resulting transcription is wrapped into two lines, each containing a maximum of 50 characters.

+

It ensures that the combined transcription fits within two lines, with a maximum of 50 characters per line. +Segments are concatenated in the order they exist in the list of previous segments, with the most +recent complete segment first and older segments prepended as needed to maintain the character limit. +If a 3-second pause is detected in the previous segments, any text preceding it is discarded to ensure +the transcription starts with the most recent complete content. The resulting transcription is returned +as a single string.

+
+
Args:

output(str): The current incomplete transcription segment.

+
+
Returns:

str: A formatted transcription wrapped in two lines.

+
+
+
+ +
+
+speech_to_text()
+

Process an audio stream in an infinite loop, continuously transcribing the speech.

+

This method continuously receives audio frames, performs real-time transcription, and sends +transcribed segments to the client via a WebSocket connection.

+

If the client’s language is not detected, it waits for 30 seconds of audio input to make a language prediction. +It utilizes the Whisper ASR model to transcribe the audio, continuously processing and streaming results. Segments +are sent to the client in real-time, and a history of segments is maintained to provide context.Pauses in speech +(no output from Whisper) are handled by showing the previous output for a set duration. A blank segment is added if +there is no speech for a specified duration to indicate a pause.

+
+
Raises:

Exception: If there is an issue with audio processing or WebSocket communication.

+
+
+
+ +
+
+update_segments(segments, duration)
+

Processes the segments from whisper. Appends all the segments to the list +except for the last segment assuming that it is incomplete.

+

Updates the ongoing transcript with transcribed segments, including their start and end times. +Complete segments are appended to the transcript in chronological order. Incomplete segments +(assumed to be the last one) are processed to identify repeated content. If the same incomplete +segment is seen multiple times, it updates the offset and appends the segment to the transcript. +A threshold is used to detect repeated content and ensure it is only included once in the transcript. +The timestamp offset is updated based on the duration of processed segments. The method returns the +last processed segment, allowing it to be sent to the client for real-time updates.

+
+
Args:

segments(dict) : dictionary of segments as returned by whisper +duration(float): duration of the current chunk

+
+
Returns:
+
dict or None: The last processed segment with its start time, end time, and transcribed text.

Returns None if there are no valid segments to process.

+
+
+
+
+
+ +
+ +
+
+class whisper_live.server.TranscriptionServer
+

Represents a transcription server that handles incoming audio from clients.

+
+
Attributes:

RATE (int): The audio sampling rate (constant) set to 16000. +vad_model (torch.Module): The voice activity detection model. +vad_threshold (float): The voice activity detection threshold. +clients (dict): A dictionary to store connected clients. +websockets (dict): A dictionary to store WebSocket connections. +clients_start_time (dict): A dictionary to track client start times. +max_clients (int): Maximum allowed connected clients. +max_connection_time (int): Maximum allowed connection time in seconds.

+
+
+
+
+get_wait_time()
+

Calculate and return the estimated wait time for clients.

+
+
Returns:

float: The estimated wait time in minutes.

+
+
+
+ +
+
+recv_audio(websocket)
+

Receive audio chunks from a client in an infinite loop.

+

Continuously receives audio frames from a connected client +over a WebSocket connection. It processes the audio frames using a +voice activity detection (VAD) model to determine if they contain speech +or not. If the audio frame contains speech, it is added to the client’s +audio data for ASR. +If the maximum number of clients is reached, the method sends a +“WAIT” status to the client, indicating that they should wait +until a slot is available. +If a client’s connection exceeds the maximum allowed time, it will +be disconnected, and the client’s resources will be cleaned up.

+
+
Args:

websocket (WebSocket): The WebSocket connection for the client.

+
+
Raises:

Exception: If there is an error during the audio frame processing.

+
+
+
+ +
+
+run(host, port=9090)
+

Run the transcription server.

+
+
Args:

host (str): The host address to bind the server. +port (int): The port number to bind the server.

+
+
+
+ +
+ +
+
+

Indices and tables

+ +
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/objects.inv b/docs/html/objects.inv similarity index 100% rename from docs/objects.inv rename to docs/html/objects.inv diff --git a/docs/py-modindex.html b/docs/html/py-modindex.html similarity index 100% rename from docs/py-modindex.html rename to docs/html/py-modindex.html diff --git a/docs/search.html b/docs/html/search.html similarity index 100% rename from docs/search.html rename to docs/html/search.html diff --git a/docs/searchindex.js b/docs/html/searchindex.js similarity index 100% rename from docs/searchindex.js rename to docs/html/searchindex.js diff --git a/docs/index.html b/docs/index.html index cd207e0..5896b1d 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1,295 +1 @@ - - - - - - - - Welcome to whisper_live’s documentation! — whisper_live documentation - - - - - - - - - - - - - - - - -
-
-
- - -
- -
-

Welcome to whisper_live’s documentation!

-
-
-
-
-class whisper_live.server.ServeClient(websocket, task='transcribe', device=None, multilingual=False, language=None, client_uid=None)
-
-
Attributes:

RATE (int): The audio sampling rate (constant) set to 16000. -SERVER_READY (str): A constant message indicating that the server is ready. -DISCONNECT (str): A constant message indicating that the client should disconnect. -client_uid (str): A unique identifier for the client. -data (bytes): Accumulated audio data. -frames (bytes): Accumulated audio frames. -language (str): The language for transcription. -task (str): The task type, e.g., “transcribe.” -transcriber (WhisperModel): The Whisper model for speech-to-text. -timestamp_offset (float): The offset in audio timestamps. -frames_np (numpy.ndarray): NumPy array to store audio frames. -frames_offset (float): The offset in audio frames. -text (list): List of transcribed text segments. -current_out (str): The current incomplete transcription. -prev_out (str): The previous incomplete transcription. -t_start (float): Timestamp for the start of transcription. -exit (bool): A flag to exit the transcription thread. -same_output_threshold (int): Threshold for consecutive same output segments. -show_prev_out_thresh (int): Threshold for showing previous output segments. -add_pause_thresh (int): Threshold for adding a pause (blank) segment. -transcript (list): List of transcribed segments. -send_last_n_segments (int): Number of last segments to send to the client. -wrapper (textwrap.TextWrapper): Text wrapper for formatting text. -pick_previous_segments (int): Number of previous segments to include in the output. -websocket: The WebSocket connection for the client.

-
-
-
-
-add_frames(frame_np)
-

Add audio frames to the ongoing audio stream buffer.

-

This method is responsible for maintaining the audio stream buffer, allowing the continuous addition -of audio frames as they are received. It also ensures that the buffer does not exceed a specified size -to prevent excessive memory usage.

-

If the buffer size exceeds a threshold (45 seconds of audio data), it discards the oldest 30 seconds -of audio data to maintain a reasonable buffer size. If the buffer is empty, it initializes it with the provided -audio frame. The audio stream buffer is used for real-time processing of audio data for transcription.

-
-
Args:

frame_np (numpy.ndarray): The audio frame data as a NumPy array.

-
-
-
- -
-
-cleanup()
-

Perform cleanup tasks before exiting the transcription service.

-

This method performs necessary cleanup tasks, including stopping the transcription thread, marking -the exit flag to indicate the transcription thread should exit gracefully, and destroying resources -associated with the transcription process.

-
- -
-
-disconnect()
-

Notify the client of disconnection and send a disconnect message.

-

This method sends a disconnect message to the client via the WebSocket connection to notify them -that the transcription service is disconnecting gracefully.

-
- -
-
-fill_output(output)
-

Format the current incomplete transcription output by combining it with previous complete segments. -The resulting transcription is wrapped into two lines, each containing a maximum of 50 characters.

-

It ensures that the combined transcription fits within two lines, with a maximum of 50 characters per line. -Segments are concatenated in the order they exist in the list of previous segments, with the most -recent complete segment first and older segments prepended as needed to maintain the character limit. -If a 3-second pause is detected in the previous segments, any text preceding it is discarded to ensure -the transcription starts with the most recent complete content. The resulting transcription is returned -as a single string.

-
-
Args:

output(str): The current incomplete transcription segment.

-
-
Returns:

str: A formatted transcription wrapped in two lines.

-
-
-
- -
-
-speech_to_text()
-

Process an audio stream in an infinite loop, continuously transcribing the speech.

-

This method continuously receives audio frames, performs real-time transcription, and sends -transcribed segments to the client via a WebSocket connection.

-

If the client’s language is not detected, it waits for 30 seconds of audio input to make a language prediction. -It utilizes the Whisper ASR model to transcribe the audio, continuously processing and streaming results. Segments -are sent to the client in real-time, and a history of segments is maintained to provide context.Pauses in speech -(no output from Whisper) are handled by showing the previous output for a set duration. A blank segment is added if -there is no speech for a specified duration to indicate a pause.

-
-
Raises:

Exception: If there is an issue with audio processing or WebSocket communication.

-
-
-
- -
-
-update_segments(segments, duration)
-

Processes the segments from whisper. Appends all the segments to the list -except for the last segment assuming that it is incomplete.

-

Updates the ongoing transcript with transcribed segments, including their start and end times. -Complete segments are appended to the transcript in chronological order. Incomplete segments -(assumed to be the last one) are processed to identify repeated content. If the same incomplete -segment is seen multiple times, it updates the offset and appends the segment to the transcript. -A threshold is used to detect repeated content and ensure it is only included once in the transcript. -The timestamp offset is updated based on the duration of processed segments. The method returns the -last processed segment, allowing it to be sent to the client for real-time updates.

-
-
Args:

segments(dict) : dictionary of segments as returned by whisper -duration(float): duration of the current chunk

-
-
Returns:
-
dict or None: The last processed segment with its start time, end time, and transcribed text.

Returns None if there are no valid segments to process.

-
-
-
-
-
- -
- -
-
-class whisper_live.server.TranscriptionServer
-

Represents a transcription server that handles incoming audio from clients.

-
-
Attributes:

RATE (int): The audio sampling rate (constant) set to 16000. -vad_model (torch.Module): The voice activity detection model. -vad_threshold (float): The voice activity detection threshold. -clients (dict): A dictionary to store connected clients. -websockets (dict): A dictionary to store WebSocket connections. -clients_start_time (dict): A dictionary to track client start times. -max_clients (int): Maximum allowed connected clients. -max_connection_time (int): Maximum allowed connection time in seconds.

-
-
-
-
-get_wait_time()
-

Calculate and return the estimated wait time for clients.

-
-
Returns:

float: The estimated wait time in minutes.

-
-
-
- -
-
-recv_audio(websocket)
-

Receive audio chunks from a client in an infinite loop.

-

Continuously receives audio frames from a connected client -over a WebSocket connection. It processes the audio frames using a -voice activity detection (VAD) model to determine if they contain speech -or not. If the audio frame contains speech, it is added to the client’s -audio data for ASR. -If the maximum number of clients is reached, the method sends a -“WAIT” status to the client, indicating that they should wait -until a slot is available. -If a client’s connection exceeds the maximum allowed time, it will -be disconnected, and the client’s resources will be cleaned up.

-
-
Args:

websocket (WebSocket): The WebSocket connection for the client.

-
-
Raises:

Exception: If there is an error during the audio frame processing.

-
-
-
- -
-
-run(host, port=9090)
-

Run the transcription server.

-
-
Args:

host (str): The host address to bind the server. -port (int): The port number to bind the server.

-
-
-
- -
- -
-
-

Indices and tables

- -
- - -
- -
-
- -
-
- - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/docs/make.bat b/docs/make.bat deleted file mode 100644 index 747ffb7..0000000 --- a/docs/make.bat +++ /dev/null @@ -1,35 +0,0 @@ -@ECHO OFF - -pushd %~dp0 - -REM Command file for Sphinx documentation - -if "%SPHINXBUILD%" == "" ( - set SPHINXBUILD=sphinx-build -) -set SOURCEDIR=source -set BUILDDIR=build - -%SPHINXBUILD% >NUL 2>NUL -if errorlevel 9009 ( - echo. - echo.The 'sphinx-build' command was not found. Make sure you have Sphinx - echo.installed, then set the SPHINXBUILD environment variable to point - echo.to the full path of the 'sphinx-build' executable. Alternatively you - echo.may add the Sphinx directory to PATH. - echo. - echo.If you don't have Sphinx installed, grab it from - echo.https://www.sphinx-doc.org/ - exit /b 1 -) - -if "%1" == "" goto help - -%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% -goto end - -:help -%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% - -:end -popd diff --git a/docs/source/conf.py b/docs/source/conf.py deleted file mode 100644 index f944f34..0000000 --- a/docs/source/conf.py +++ /dev/null @@ -1,36 +0,0 @@ -# Configuration file for the Sphinx documentation builder. -# -# For the full list of built-in configuration values, see the documentation: -# https://www.sphinx-doc.org/en/master/usage/configuration.html - -# -- Project information ----------------------------------------------------- -# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information -import os -import sys -sys.path.insert(0, os.path.abspath('../..')) - -project = 'whisper_live' -copyright = '2023, Collabora' -author = 'Collabora' - -# -- General configuration --------------------------------------------------- -# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration - -extensions = [] - -templates_path = ['_templates'] -exclude_patterns = [] - - - -# -- Options for HTML output ------------------------------------------------- -# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output - -html_theme = 'alabaster' -html_static_path = ['_static'] - -extensions = [ - 'sphinx.ext.duration', - 'sphinx.ext.doctest', - 'sphinx.ext.autodoc', -] diff --git a/docs/source/index.rst b/docs/source/index.rst deleted file mode 100644 index e57b0ad..0000000 --- a/docs/source/index.rst +++ /dev/null @@ -1,25 +0,0 @@ -.. whisper_live documentation master file, created by - sphinx-quickstart on Fri Sep 22 11:39:30 2023. - You can adapt this file completely to your liking, but it should at least - contain the root `toctree` directive. - -Welcome to whisper_live's documentation! -======================================== - -.. toctree:: - :maxdepth: 2 - - -.. automodule:: whisper_live.server - :members: - -.. automodule:: whisper_live.client - - - -Indices and tables -================== - -* :ref:`genindex` -* :ref:`modindex` -* :ref:`search`