From 036094dccab71d44ae0f9c4e8476ae2f7d18bc1b Mon Sep 17 00:00:00 2001 From: Christian Brickhouse Date: Mon, 17 Oct 2022 14:00:53 -0700 Subject: [PATCH] Workflows install and cache dependencies, use poetry (#83) * Update workflows to install package dependencies like numpy for use in tests * Cache installed dependencies so that future runs are faster * Upgrade setup-python to v4 from v3 --- .github/workflows/test-and-run.yml | 14 +- .../doctrees/code/align/aligner.doctree | Bin 17920 -> 19167 bytes docs/_build/doctrees/code/align/index.doctree | Bin 3133 -> 3515 bytes .../code/align/transcriptprocessor.doctree | Bin 17070 -> 18212 bytes .../doctrees/code/cmudictionary.doctree | Bin 25650 -> 26717 bytes .../_build/doctrees/code/extract/esps.doctree | Bin 4505 -> 5151 bytes .../doctrees/code/extract/index.doctree | Bin 3286 -> 3668 bytes .../doctrees/code/extract/mahalanobis.doctree | Bin 7615 -> 8360 bytes .../doctrees/code/extract/plotnik.doctree | Bin 58069 -> 61454 bytes .../doctrees/code/extract/remeasure.doctree | Bin 17778 -> 18452 bytes .../doctrees/code/extract/vowel.doctree | Bin 8638 -> 9404 bytes docs/_build/doctrees/code/praat.doctree | Bin 39165 -> 40975 bytes docs/_build/doctrees/environment.pickle | Bin 51958 -> 55055 bytes docs/_build/doctrees/index.doctree | Bin 6470 -> 5702 bytes .../doctrees/usage/installation.doctree | Bin 8818 -> 7484 bytes docs/_build/doctrees/usage/quickstart.doctree | Bin 7762 -> 7577 bytes docs/_build/html/.buildinfo | 2 +- .../html/_static/documentation_options.js | 2 +- docs/_build/html/code/align/aligner.html | 8 +- docs/_build/html/code/align/index.html | 8 +- .../html/code/align/transcriptprocessor.html | 8 +- docs/_build/html/code/cmudictionary.html | 8 +- docs/_build/html/code/extract/esps.html | 8 +- docs/_build/html/code/extract/index.html | 8 +- .../_build/html/code/extract/mahalanobis.html | 8 +- docs/_build/html/code/extract/plotnik.html | 14 +- docs/_build/html/code/extract/remeasure.html | 8 +- docs/_build/html/code/extract/vowel.html | 8 +- docs/_build/html/code/praat.html | 8 +- docs/_build/html/genindex.html | 12 +- docs/_build/html/index.html | 82 ++++-- docs/_build/html/objects.inv | Bin 1487 -> 1523 bytes docs/_build/html/py-modindex.html | 6 +- docs/_build/html/search.html | 6 +- docs/_build/html/searchindex.js | 2 +- docs/_build/html/usage/installation.html | 16 +- docs/_build/html/usage/quickstart.html | 27 +- docs/code/align/{aligner.rst => aligner.md} | 5 +- docs/code/align/{index.rst => index.md} | 10 +- docs/code/align/transcriptprocessor.md | 6 + docs/code/align/transcriptprocessor.rst | 5 - docs/code/cmudictionary.md | 6 + docs/code/cmudictionary.rst | 5 - docs/code/extract/{esps.rst => esps.md} | 5 +- docs/code/extract/{index.rst => index.md} | 16 +- .../{mahalanobis.rst => mahalanobis.md} | 5 +- docs/code/extract/{plotnik.rst => plotnik.md} | 5 +- .../extract/{remeasure.rst => remeasure.md} | 5 +- docs/code/extract/{vowel.rst => vowel.md} | 5 +- docs/code/index.md | 10 + docs/code/index.rst | 10 - docs/code/{praat.rst => praat.md} | 5 +- docs/conf.py | 2 +- docs/index.md | 29 +++ docs/index.rst | 27 -- docs/requirements.txt | 1 + docs/usage/cli_startup/cli_setup.md | 0 docs/usage/index.md | 11 + docs/usage/index.rst | 11 - docs/usage/installation.md | 27 ++ docs/usage/installation.rst | 27 -- docs/usage/quickstart.md | 31 +++ docs/usage/quickstart.rst | 24 -- docs/usage/whats-new.md | 149 +++++++++++ docs/usage/whats-new.rst | 135 ---------- poetry.lock | 242 +++++++++++++++++- pyproject.toml | 3 + 67 files changed, 708 insertions(+), 377 deletions(-) rename docs/code/align/{aligner.rst => aligner.md} (54%) rename docs/code/align/{index.rst => index.md} (60%) create mode 100644 docs/code/align/transcriptprocessor.md delete mode 100644 docs/code/align/transcriptprocessor.rst create mode 100644 docs/code/cmudictionary.md delete mode 100644 docs/code/cmudictionary.rst rename docs/code/extract/{esps.rst => esps.md} (51%) rename docs/code/extract/{index.rst => index.md} (61%) rename docs/code/extract/{mahalanobis.rst => mahalanobis.md} (52%) rename docs/code/extract/{plotnik.rst => plotnik.md} (55%) rename docs/code/extract/{remeasure.rst => remeasure.md} (51%) rename docs/code/extract/{vowel.rst => vowel.md} (51%) create mode 100644 docs/code/index.md delete mode 100644 docs/code/index.rst rename docs/code/{praat.rst => praat.md} (51%) create mode 100644 docs/index.md delete mode 100644 docs/index.rst create mode 100644 docs/usage/cli_startup/cli_setup.md create mode 100644 docs/usage/index.md delete mode 100644 docs/usage/index.rst create mode 100644 docs/usage/installation.md delete mode 100644 docs/usage/installation.rst create mode 100644 docs/usage/quickstart.md delete mode 100644 docs/usage/quickstart.rst create mode 100644 docs/usage/whats-new.md delete mode 100644 docs/usage/whats-new.rst diff --git a/.github/workflows/test-and-run.yml b/.github/workflows/test-and-run.yml index b4327bf..e65fc43 100644 --- a/.github/workflows/test-and-run.yml +++ b/.github/workflows/test-and-run.yml @@ -19,20 +19,24 @@ jobs: runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v3 + - name: Install poetry + run: pipx install poetry - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v3 + uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} + cache: 'poetry' - name: Install dependencies run: | python -m pip install --upgrade pip - python -m pip install flake8 pytest + poetry env use "${{ matrix.python-version }}" + poetry install - name: Lint with flake8 run: | # stop the build if there are Python syntax errors or undefined names - flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics + poetry run flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide - flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics + poetry run flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics - name: Test with pytest run: | - python -m pytest tests/ + poetry run pytest tests/ diff --git a/docs/_build/doctrees/code/align/aligner.doctree b/docs/_build/doctrees/code/align/aligner.doctree index ded49742fcea0c724ab5a4245cbc335389d35220..41216a7fcd89680d44e520c41dc6fcefe806956d 100644 GIT binary patch literal 19167 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 F{{buzz;gfq literal 17920 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 diff --git a/docs/_build/doctrees/code/align/transcriptprocessor.doctree b/docs/_build/doctrees/code/align/transcriptprocessor.doctree index ff40422c53fac6a6ec4e70436c7ea1b13761eb18..3adfedbc9b80a0909171aa88efd34194ab1724b4 100644 GIT binary patch literal 18212 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 dN5fX}kGMrY|D-S9#bs4|Pd|L09<)-zC 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 K(1Q@I#s3Fm>DhMx literal 25650 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 diff --git a/docs/_build/doctrees/code/extract/esps.doctree b/docs/_build/doctrees/code/extract/esps.doctree index 143f21e6cf2200e4372000e35121170c7be3b756..8c6e1ea8ff7ebe2a43bd36e9a7aa06cc37e810fe 100644 GIT binary patch delta 1131 zcma)5-%Aux6yDisW_Q>vw^$Te#}Zf6vR3G+D1v$lX-dl^Xo+2SmNU1U$(XIOK&}d(0@?$kP;CgLPSJFL)biGEwp*$HCVdN!MLb;zgAWD>TOb@Hj4PKO0GG?ZZw zgD^CKNGF7e&Dm9Q7VCD=4bmoh)BkX-vHl((ofaQQ6%Z)vyvPcy10;|kkYpWnvhF|} z0Gl0HmH42XfPK)b(^C0@wo_D-#2M@EG(KY0m|o zMaYR#;Q{`s%&;JbW4!Zz?o>f5Ws$y047S(6@gv3DQnkutkAl17#6-XgSZTtqnh}d1 zgBjf(te&Z?H1h{?jGi@2gKt??MV_#eaUDTD-(6u<(`{O8zaL zf_BX5Ofo+0H9oBhU2fXjSnXoSFkJ`bM6M%T5v?b5|E23*L3g)IccE65{}8(HvgYvQ zDi*6%hulHHg;yx@*J$$vMn=&?MsTrVfgexeRXX)o;=B4Ww6y;~7 zCYKcJyE%rr>Zjx<7waeIr=;qqR+JPaCYR`^78exj6&06E$&mAAnmm_rns^*`113xH zdQYCqv=)zi;N;!R8yT4=@8gx2yo$$H8sr?@rp;!{C9l-em7kNk==6lDxq}#4m`juN0Ky`_m;e9( diff --git a/docs/_build/doctrees/code/extract/index.doctree b/docs/_build/doctrees/code/extract/index.doctree index 9ee6adb5c8084a7dadc99b7df008a0dc835a7912..adb34d6357e4de09c2a940a52d778883d6a2db38 100644 GIT binary patch delta 652 zcmaiwPfG$p7{(dbRm@5>C?eaCkdz9esAJS2qJ*tOLP%C?uDlz$8_rJRAu6cb5X4N! z=-k;;-ysMhg8qDi`U*ial9ecQ7KaZ^irK=J^DO9<0t%( zCqMmLVLj?8TW9G1 delta 271 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 literal 58069 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 Vo&X9hAp&iwqebK3&-8KO{{yoq9B}{u diff --git a/docs/_build/doctrees/code/extract/remeasure.doctree b/docs/_build/doctrees/code/extract/remeasure.doctree index 078898a2cc5465a6dc0f8f2f7d4c64e2ca1f987f..6b0a8ce8d697362b48e969929a75101b689dd8d9 100644 GIT binary patch literal 18452 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 XBZ+>lsK>K-tnoGV@;tpL(OUjLWc?w` literal 17778 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 QWT8vGJ#~X}_j2oh0fCmi@Bjb+ diff --git a/docs/_build/doctrees/code/extract/vowel.doctree b/docs/_build/doctrees/code/extract/vowel.doctree index 822634ac1c8b965f17958bf10d2c77a5155b5b29..041583cd011d0c8e8424a2148e9385c36f072c59 100644 GIT binary patch literal 9404 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 D6Vz_< delta 2323 zcmb7`O=weD6vusOU-DvNo7&h^UXwOTv3}541hrU25fn$wjGy>Hk+w#U7u!bDDryy5 z9mbESl#>COMR67`L}nIt90hg8jo`wsg)VFz9B?6`QbZJ&o^#)Q&C{l-E|N>`{onI( z&+nd_n=AfVsvp&V?T_~AceT>q2gjo(_@M#{Ae^2TgZ9=$tVP6j?`qo_OYUtKiI$EO z?$;v5-c&~hA}d{ZK|3F697VXqvk21>KmP8zG=?UC*9$Id1^B$Q3?I5zR&G=wrcWzS3S@|Ngu>`` zh-*pg^UU)Kmo{#kZFOA@biv`AR=Fn1s?c}~#|=HxyEA;OI{XYC3gLwPJFV@@$eFX) zYfSZuP}WN*^jniNZazG!s3^swMOBW9iU3b6aa44Ke@9VYHNn(IisTRY^UL_J;Dun> z+`qsLS4AO3p~|k3kd=SK`BOI6?C43%+1$iW-p+tn$g!JZfg=Uxq1@)-wZ(&&Zwm;C zi8d0_HiXF?c17pZ!c(!9WdmXz4};e5>?F&7lttrv90sy!aZ!&MUt?%{3!-oxC1(g(U_=Y~$jeN<#mo`X+00m}Ff(F@3Na@(&Ba~C*H~bRt4c>bPIeJfQ6mz( zAUlt^VrvK-*=4Ag3_Bop4oP?q3?J`HG;H0Nn8i|~gMpDV)r zMDTsdHshro%h(LPP}018MmliI@+Z+#I^X!{a4-f$SqI_+@A^K7d@kBzy)L2h+%3oB z!tSEV2?`o|MMR;TablD!2nR<0QDEPK(I?W`7+J|kjQ&@rkrSh#U|(?^XJLw%BN=W! z!x%l62P19GvNcYOYzKtVhhdDCv2s8x=V8zqMq*@HW{g}@Ru`M}p2#-^W)Zb6dTcB3 z;FLiB#j>}Wwyz({2McP&Ph?Q6rms}m+t$>Y;Fm5%4}@HZryxpigTSQ;1vwXTPtt2;DZ-0`ui%@YK7FiYd-_X2=0ae diff --git a/docs/_build/doctrees/code/praat.doctree b/docs/_build/doctrees/code/praat.doctree index 4f395d6d7ebd1e98eba1f01f4aeaf100eb0b3efc..fe8b6745950fc91c693a35436394111bd137f41d 100644 GIT binary patch literal 40975 zcmc&-dypJQdDlsIC*4Upy{reUPhLy5ZUxdwV4kvN7cmiKY@LOX3Bf2^bGvgl)7}@m zv(gDLF%CAC8J=GANI^m#1jj&CTuBN$2D?mN1;jiOsKmlHF_0IPkc2;y00HuSUq5Dg zwx@S?Z%ehnJy`BAU@7&fYgcD8YOsn2*mfTLb3R09jzfx|xwa%$dIEBdrztWl&`Pa7GQsCEX zD!Vu4jeBcPbqd}@I2QOp#f`lRw;X%L>wYnRqUkt6zFIH0;VmYHw4*28C1k>sWXz+4>=CRLa8X;#*B4?$XOGpJRR?tg5`yZ@a)Xi< zk+D+aEhrf5BAgb*&ykCpa+7H!^suoc;Rna>D46P!0kAl&cy2M=oO-$jNV#^0D z2koY2v|9xu1vG%8bM>0LpR5+MZK7;WtyT}5L^}vyc*|9L1F-5N`5CIg%+&|-S4lF( zR>LW|NAfC3e&*_{LCMr~c7$V;qZ6}yP}wbDHxu57Y^hSP*wn@Yr@81xtysQ`gnpIN zWlUp!3#_DbH=4vEn8I~KGX*jMX=EVzL*6ysiNOrQdv$opb+y2)wfx|0nk`%uvjvs7 zV>EbW4L9oMS@2HE2jO~EMnS6j4eI64)p`!pTK1;ryxo9VaZ}_r5;NCuB+v132VUvM zac{g7C(=70NH}t)*ax-^E-^ z$F~y-fFp$BI^iT1TAyd&!#i3MtR>Sgee&oRB8 z#k>h{Bz~aIuU~=IEa*{_wt(&~)lw)!VZpCZlavVjs6yaTUIE^m_)VnfaWBW#j;vah zuIqyLCGX3cxyyD9O^2;fc~@K*tHP~>8Q2CuWp108I$ke$s--H z?f3*uD+Y2u3W;z~drDfNh}55z z_u&z=$^>3(#uIFSNXRGsxGQ`AWUExId4&R(UeYtQqom}r#1bX7p~Q3zKz&UV0~5GW=6Ou1fl{91=OKr>tm@(Rv2 z+zy+^TXJ-<`?a+??=PK0j_0U_=e(!E^#JExbd!({+;Z2%T~$|l!Kd(Xn&GeoV28Ev z&m#T_@Qu@HG{A?Rx|bh7DHY?a^35sO-RU#9_Tzg+=B<33y-85@xXRMfl44dQ!J9WDzNEz z+Hsy%yxJRoHHxofP56yoi?3R1!4AReq%BDg`ek@WLG%`i5zvp<8*bAH>dm;@A2}-N z!Fvf#8UK@ote?drtC zZLM~r0p79L0&oc4)UM-@9fB(RL7bhXku8#~~}Q@(ggK4A7#sU3N;}hhn;HM(9mY`ge^|y1w?=Dg7i#skf3i1Itp< zTHzdwTEcfqOLU`a=^A^DZ0+sJ{X{i?FTB)ib&H+W0D9sq^r@%b z$whc>!rv$}dk5JSMur(8^l|Szdjv9I#D`J&18^#jV2NSlDEy#R0kxTa| zo;k=wQdxt{&nN=n>xSO};HsnWZs0)kD~iMZ1I?&*>S zhhOvf0<(EQK`FZjoU+pzzyop?BCnMEIF=Zo`aYM9rl;j}3});VvIQ!8A!{FMda<37 zO-+K5rY1}Hf32O;07~KvELTYb$NX=!SIDNM*Y~F+W~XFRlAx4TNlSK011O0z(5I4m zCl|4#30kAf?0#sMnMZpumV5>qvWO+Q-=GoR2jHuS?}gRWnnpXbo(>30ZAjuY|AvddB1ep(2s9uOW|U zF)@UC2%cp{C_*RrB(=?8RO-7FCqj+%5v13v2fPbry1}%jRvxsIN3+Za^?X1bFK&hD z36uuds!@Wep9zBIn9l%H>`zD}#O+TMw~4M!Y=WEY1IT!5)(tKL`VyW@3tn;Pe9(^Y3tBjY>5DHntxV9jFAe(ivh;3p90J`Hg1{vG zUQjrrS*@PC0N<>S&S1}6ef5b@aY|1sduz$Z${GnJ52Hnb?VC-}j*Dky1@>o~U&Sv7g9*REuz zIY11{S&2})M{n>Nl2JN}NrxglL}YI4YGgg(A@;$uemz9a($Xu1_fXfT(dRH`@2IMEke#-e}Pt>x9+lRSOJY0c*IC*<^%dc20=G3>+pOR=^xIw~gJUBFSV!G{^t zp3R4S9O!W$_FH&GK8&u?d>H3-IX-NE;Fr&~8<~7pYS_-pNcUN%R>)^by1jhWcCG!$ z8k1=jyvQ?+%ko6LE^d`gktcdY*o4`j?4IbeD({NL>#_7PFgs&e9S%7BS1d zh_K?eFOKPvu3%O6&p8pouRjuUvf|gZehua*1A@8L2Fw*#VHjNH1JBJbI*k_K zQ*g!wAPbsKtyOCJ4V<&gJaKAN(Q~LN6HJZ z$Dpcg*z;dNk7Lh&;}u~KU8P|U=T+5MmgRB{Hf7<-Tn5Qjx{p3@^xHj#})>JHlhh#eH@zp-D31ODOgfYl{0ahHa-5{`d?40d`)xJcogcX`U zSRtu+e>iCna_$h$ih8ah5FQ_%e;|#JKN$Es)s>1dQ#fs(5EWI59l>IVlgPuYA@;a? zp=*U1oQWxG#1}H@QP-%N@vRS$#-3|k{pdLij`AC2(S#8nQ&ljblXYbDBapR^k}{BXhlr0U2_&4e zVTe^q3qml1cCv+tPXaw2BA&-9ioxhgi@|V+l|W`%@R}(^lzs*Hul ztk|O~jlE%oh|fKK?Ap{AaZ@Zt#B@3a_Y)+JWA+OXC60{q<|HjKTa-AF$dxcebCigr zvPOwN1y%CkHJlq>l*o0myfAUMwd(dTF{%}t#$pm-;wa~j$BFz#AqP2u13hTl0!0(; zSfKbnAn>d>O@ZPpYEyh;=anIN{;^P;Jy3k5AyCB1=L=Q00$A<7sqNNEXY(bu0hA@4eI1v=$q;&^#@L2MjD0hca1z;jKB2NpI=h!eOa+bR~mc6iY0R= zV5w`6HsH897EDq?b2J&=IK22skmpW$DegzkK{sSna|KZGkOXNye zxj9fpQdtAlXBB~!Pz2ch;43^=uhk`{*WDheM%7{?SWF^P9TS$qLsfC7kcnc|%{{2w zVpS7$-7!u^w#UEcC5Bn>HNDVhRE(~|&i0W(*w$e+4#tUD5hhJWnc26X^<;JH)a%%a+=^ZYH%xNo&xlso-Rp== z?A@w&IuLv1hd|RSWf-iC(gpu#6>?k%$RRq~r;#o0Xp17V%|b96Ix<-sC_y#8NNAZH z*;ydR{p_3Ziu^2HnH-tq6U=w;9tI%-&G${&$}Qf*P>EA~+7P=JF;YGK+8&ko|8b#N zCt+sUMr1yk$fbjQ%0e?FmDSO`PZ1bq??(w->;^XQ*SiN5d!~+!-PuJ|V}F3fB%Iwu zj7jeBVowxGkkfmt2NyP{XW~M4dOLAq?}b=j_DyRwtX}ZzkhPDQh2OPPvdt_Ml(d?5}lYe@Z%Tr({!-pp;cfx7aBSpd`*f zpGxYTTnsLmpf$?O?tymMR}}giCgxtz#! z_eq$L{Hms3P8(>6&z_KJ&2ed#{R+0oB4h}80meoiOz1yb$oOy~SEi5=No5TgKcff? zbJ~TJ?{Xu?uPE;Nj~Jtxu_v&YM8vo*;*kf8(F4_XDPDZ42M@M*(ZquuFKT-X=pzl< ztHiRCQN9>ce1@bOo$DW3xwgg~KY*-##2u?9tPzgQr3p%!OS6WDQ+8SdI5p0Kj*oFL zPK1ZwC)p%gVQlzbCKpc4r2mK(yB|vH%c(tsg?|E!haH zX_SSr7o#3>> zqif=wHq%dk2jjWX16?L{RWFl&vZCy*kkuB>NhA^d(#4F)1@J@yXA8(9nn?_J=HOXY z;9&?l@TqpAW=ZOEEiay0;A@alug|sD@XxifFm2Lb^pIx$;pV)!T8&TpTfjpt0yXDv z+2trrvJWEPIo1*EXa7ih0(0;P{r#%$>COQ`5XX+CoFGCsC?^)78@KA^YpOp5^mvH= zX}qEkovySH9Y4|%3{5l6D}JmRbb`udXPSQCCYGZqm8n@O@vY9~+gZx02ke|N8X6hq z2H#1Ny#VqeJwqXYo=7)3j)@A0k7@i)SrFmlUkD2@n~xnIzo7E2v?z3d9L3u5Z*ba( zSM0e4jL~!YHiwyYAv~=r(l;PJ30eC9#BXLyE&wr-F#87bm;l7j!Lxn=aZ0xwg^0X- zLd3_AR4+ulf~+YoOT#5_b(rjos^L?h0}oDV;`5?$VQ<_~50qD_jEznb@~y_7)Imx^ z9LF9d8B!g8uIktu`J_Am`3zdfhJ4QfW;yab7q1BU=qe5QIIo%mL`unOAu`KA8u(Lv z#>j2P_)DLjGNaflDE8<|V=pm1MW+$xOdY4?9YFUn5>A!cP1w8!_UGkCgUy8-a4($0GIMqgH z4$fpDGDRr+R=AxMx9w&H?luPXQW1~m!nZ(f4ESoo7V}#d>h%ClVsc|IuOA6F;u&SN zcD1;KzPtlZrttWxMzK_{;?ZXdpz_eE!L2?j z?rFEuxqfvx={c~ovA7)zx426_$O;aHYPX`NV`X=~y$Iz^!4Y9KkQJnWW>tkJ6EK&x zU#!1KWDYlD9a1 z^?u-nr)nggJ5d2_2%NCPPiRY5(AL37{DUw3bZ&p z+sSPly!`NsK%P_0g;Jt;d=eGEPZkf2)j^ZJ)osrDZm>W!pxGbtf@%ebO$5$7w4!q0 zb*^6*PJ>NWi>i653WyV~&V`#>XKR78RP_8suLA$Uen&A5?}Qs@L-3;55&Ul0gBm8e zhz-Jvm3qk$qMa^zun$EE&P?F#4WvvW#3?cDM&}%zT}THK3LH2G)>AL}wFR&N2@G2i zDq8J%J>3SkI`5W?eicj@HYEpRq5D>F7HE4e9J_Wd++M2Gom-18oMure!ug7DTo#@$ zcz3u(oRA1sT3O(Db}n4w)=uLIh2c7mBhYZc2H|iEA6i9FGw-N5Ez3wYciB&Q)gaXo-VNT(;dE?- z;TS*5Z+0GVh1A&U#12TisQa~AkrMUoC*zrU2pfN-;sJ_dKLVhW9t_yy*!xu8@QuS8 z^60LkX*plNnPx_uP z$D1ykhX}ieIe9#th)#Uurjd`d3&&7Ff7x|PULG#+49NVk7aTlx#R0q(&+&*O)r%f- zsmhYrpQ1=}>~Uofrv5-Y(2*mAD{VIvvpy==vh_D)Z~YNf1(Th`VnR!A{YfZ;$E@e^ ziegr}(t<+httU4HijUvEP#eFM`V}X!i3O4_o=Hl!focY*;H`a-tdTCiixSAOXO$qb z>T-pSGzDIs5xgv8IHM3Xo5YyLG0}A7kOo66(9W<_^r55hReXuy!N^hu9bMTc6q?+t zF3C)oGdKsCH!;E@r353;Zx}utM?`y#u_#ECSqwgEoqQ*4HhQ2ek^IxP^&s!m&Z^x% zZBltxULg8NOTXSJ;*?#AOeeh41U$>?o!G-@q36TR$3!ThBrV+%r$ETKK}g6tKLWOZ z;Jzs7iSQnKp80~^?F?RkvIX{XBE~kc%E*jll z0JGh|tpQ`!YlU*xs6A8GMM&cd>oA*^9cf&ZcbNN$8LByqP&i_iok6}6U{i!={esOl z6RQ$$I1$2|c_Ak&-W*NhO-zrl9NAg&tL-Xn9mWr*hHb`p46Mbv%Pd9N2752^oMZ16 zteeflggg%B;K*~2s&{YXkun10F{mdS^87B)?2%gHTgYQV#b*1k!^a~k?=WZbtC|c0 zG$Iz+Um>>%(D-9`)-PyGL<~x(;6)QuJS1ddg$kIJ$wL#|XAs7k=iwZr`T~4qj(3Ob ziK2%7J*1dp-w}k(iZnI!&teYV(7&y??%mL34WXeMM4GLk{|M;uhW=x`qJ~aaX$_t8 zx}1i-2fs-5YU}Y+r=*(sm#nnrKE$(Otm`-5=L=`t5>023Ino3dHu z9p>p0-9pg2DAE2_`b?SFbNyp5N=Ek9O#5LyUsc02U|^jcGXq&|gENWQF?%y67axNo z`LaF8V*60q(DMZsK8pdeY3Eq; zkHrhv$&04R46(!r7jMG4x;$B?5+_TdapH3)^h%%-JLPMNRn4s7T8aHX_y91(dOt3B{%J4g7In=GX zLulS?HukvaZ7T0DClYFv8b)jsvB}|@QC9t0R5EkSMFp>hF&Fi&tOTj^pR1pIF3~A=r{|eG(g_;oH zYnX#0z>gH)y%9jx5fH#2*K7!|ZKFhhi|~pNfUeRIfb+Uc1n_%~l$d%?{LK3c*n8px z`#=D!mk9xU806sr0w4g~D4U`9U=}1lXwT_+D(}i50CJ83SRMjIT(YZ>;RFI)2G5p( z0KlU}0A4yFz>JWL6#*`h2mll2nn5}S^h~ET%1$EP9J@)7&yE87Fb7A08x`-pQ9#xc zP{1JDY$)IZJst-zydo5!t27kgynCTV!Ofw|jSbKV@rREj%3@&+fr1 zJob~}(Vz^E*JF4DAH!pm7#_96@E{U~hn3JC_jIfP!_B4{Zb;2=J5z>Ro-*7ykm2rv zwAm2D4T)&MH^W8Yv`UWQN;-ziR@h1WgY&f+&gpK48{@OtXqMH+k`Hs@aGDm(yy8!A z(xObqr*p-h@N}m-IQy+SU$3YMa+LI<#6y*OLMw4XQl(5=weqPs;e^-i$+EJ>HyPf*Ip~0-wQLv?(EzI(*xo3Czxmm(Rz!f!U5}B)yzum z@p|=`rnbS?u2Q94h6#=J#SY|}EaT))F;7wqPfYXCnrsV{KPZ}JO1n00-sat6Ybau9 z$Ag0?yqkGrVF6Mh$20KeGY?o9wQfFRU_;HV;~&?#GgGs`6#9`rd#DFx%L3wV%DUsB zIfO^&>NT;Enzo1|@v`3)#7|h+wvOI?5wiBNg7{l@O12fmf|9m^cvQ&)7pc&Vu8@DR z(;HwFF=rzk{1d~Ke@^mA_hm9UAFk{+f*7G2vIYuZis#8#Wo*FP6vhVJC!xY%qDZXl z=y1>UK8oG|7i&b^!tB{_3r>wX*uecd4p!^sHVjX@=<%_W!C%7h zCh#&ZUOL_kyxf0^;-yInHl|_!h@7_uaA%Ee{5iQSgIxiln`1Aczb}Tr?B)399dv&u z{5{oS?}Q(iJQ=-OwyYOcWU#9VRo@!gBct3TC_@IEF8H)M$K@gTl5Ub z-o$PW3Be!wKpyO`~ooG=+Yf zolBDry9|mq^7j&?%icv9*}M7Ad-=~Uc*VBEpB8(6^klAu^Q`H)x1q(_&~1S+J;!9YPJB%yfN5S*NI z?z4Mu-|3m1bzJ3D_nmw1IrrRizH{!g?;HQUAH8!6{g=!}?I3KfEqe8OvsL$_UNTv4 z)w-*GGwxmNE&NvR-d-h{>Uig)R<~30d&w5aQ47LGz2i4~clVMR%pQl0Xi=2k5&5+^ zY&BK!U_6)zcHG^o1XIa)9L5db_$k?Y@`bN@N%>62^WySqtKNlQF*D>HyVGAoCTv;W z)FaNI>ix+?+XG(WUa&Wrsw(D#?a74T`E)YY2%CQIba%;1c6xE#375Jtv=!U7J*-FA zjvcjz7e$Z=&*M#Rl|N0^yKVilbgTwqhIDA}VkZKw51!iAT?)1&<6*PzuNk7@QVXsE zE`viLk*neVYvBKR_ju{cM-Aq0aWRjj1>fxp$FV6uy}43uEgQrZPqsR%9(KmTQ(K`~i(G@G3KVS2LF7Se zMg{x(#OYSkUmzvLVzX4tYc^Z4mr?uVnRnfIbqq>;ygX0*&);;Ue4`{&joMz#KVDW@ z%JVnf1YJv(av&L}5k(;^+~eze9tqr z3{|9tl)FoQDyNw#nOa+I9H;gGIAzrXYgf4DP{J->X|4yiTg#6!Ds6 zbceDSM7;xvdQUU>b{B(_$ROu#5{cw9_BI=1`-m|>QIKKmcN!tUk|D||td6vv3sRbj zD&WYB7D56;!>VT6K1K-y_XiUGl5X`!@>`v3ZLZhUKZE9dknDUfwF!x~+J482TOE_j zttX^Tz*Cy!XIvy(>q&lEkeo^;!X~*HLv&+^6_ONxNmKi>gBr+f+3Pmq>N&5`_0yD- z{ZY5wZgt{nwCZ)@*LGXz&mKVCdxSHTZ>>^E{{%9=A6#OtS<8&?g^a?6g*F?N-|C@b z0zV3}?j<`>6I)B@^Li=ENG61HPj+g{1W(IRE|^Frm%EJy*N2PPj8_D6NbJ;BAbtj= zMBU2mz1C{RW`H8y3q}}IsFo`ouN{~j{>+X~u+)sBvR7W_PO6OcKv+}uFcB~doGH08 zG=xZY+b~5{C$nu^w`>VYYzzKF5dz2Ve4%68pM*eSq+m%>{DqL>P(C?$SyEZ@n)UNx zJr1JELb;;5QM%qTz(>%kgI}Io|Kp-A-AhLw#22*q&XGkQDO%+CZ%@Y|mEca9kX#}F z*eFzy?)^cPYp2ORM`|-kbvOiVC3cOow=2OP2JcQ8hcq-mXLd-H-Bf|RPql2DXl)S~ zFt}sSLPk-z8Vpzo(l{Oj{}udqx{W_cS$^=d;9~H2A|oq9_!KsP^$P;1y6m733Shv` zCF3GI{$Kf?+}80SaBHG1qYEQT7KW}n5A?RxDf?b6P$+Qn8Ane(>j=JzbTogi0pO2E zT&q$Pb_&~6Vz-E<1#<f?LAWf+s04W=gMJ(_$DSwk*Nhc_cBItR8&@t3qIFd?J`b1Fj zRp^HNnAHs>Ush$4O%=+JXrkF;-$qU|X!0TDaO>g{d&E%olJ{jK?#nxMhR2C{wjrMT{I#XUFYi1XrP>~r_m}+HjE0`B%TbULidn@vl0i$z}HV_z1OE98-mm?is zHQ~_(q{1gz^Cwtt!O~G#)Ky;Yv{uE!t(pNu!Imq22#D1wM*&Pwmtk6^(SmhC`e_+Q zU9p;68DWj8H`%ALEhY9T(ImSH+r~m`Sb`(n$CW(#Bb}5TAf2VNiXq)sfF4J>f5In1 zI(o7q9cOeSNOyG{!W4HusJq+(byP41>uw(%)(JBGz;0G5wrEc_fWZw1#$3L5Q@TP} z_e0Uwc13Yx-49gRWRn`N!ET_5TFn^yALKEEAdf-XKnSusC1@4W@VW^?z9&TC3~8>D zA&s0YS@pdLR@-sENtwC|CTMB-MPbAsMO4SKOSTgT?8AQsS$ARIC23KMW<_Ba!XuXA z?5b=%fPh8b#Xw*I=y4FZ4xb1F=*bEKoY9Sdz~MC*O!mV7TeySeav)%Y9-mX`hX6BD zF?nOw0l*lqMua-_qO^p}|HV!fahv}ORM}C6I!42Xw0_MOy8~IwSpRWI8_4=q{6MV9 z_<>hVrgB0E!fE_-()j&mos7L)fw>FVF4k(+BW3S>a;eT^3~82FAV}Nc+vewQ#1h=k z`-<=WeqOc_Oxz;WVkZ6upvO)8K71k*rzfk4b4E94;$h#p3A>5IT9195cBCebR0c3{ zY>dssu^MIK@S?PYO#EG6X~11$lcP+RXfSu>?2sPb%K~o4IT!n7Ku; z#mxMxK#!aG*YJtVoSv*^&KU(W*DL8rCfglb?00l*;@G8XQ26j`YV1GiZJ6wr zAU-py4C;zj{Wa zF0`$(AA{TrW9>xnIJ*vbkqFD1MF{&-(SPd^wi4)VE&!c+D_hf82NJv4q$BK`PsxY9 z2xU`ZFK~(|3rDy~Z3NTzMh|kVJ|VaODGa+seQf7yewHE>OXVG~6g@34}QB`O~_-vxnV*kf+LSnhl>oQy$e1$1I}V+jr_?@=vw7sII>DIKW6(kI0Nz>fhv9sqtEpC|yN zr);Rju|@K_E~d+ZF7hYc1n{SPqV`4xfBBK%=M;ONSM1SKmOVJvB=#i^4aNsiA3Lyz zJ?{|D{tOIbUV9vvylgb+%PI83-9wV`%Gzq!JaNO3GR}VBzp&;0?1}k#3Ba2eX+8?w zGkB!={Y`srTJ1i}Fw}-Xzpnc+HIci8ORRZlJCwNAYu3aQdg}UcS4m+6->}#M0p%BDsf2)QE z`G;%R4Q>JtuNwlv=^7>o{G%ptgY1Q^H)NdqO>P4Jk|N+fL?h^?k=4Xw)8}8og^=n4 z#0py<;M}>ItAdxb0=?SZ0(&34f|D=Q2fmwty$=L|LVXaq2@KQ+obHf)utVVV`cA+f zR433&x)Tz26YQOE{{WrvE;j*tCkO(%6SmFI%U0lHx(yGxNet8tobn*u&_6GRzc$3v zCE3>jiHnB6fWD8j8SDancuc@J#k=1Wj$!@4+89?KNRO+tfS>oX5;}VX1zuuba?9Nk zr+$MR4srTLQP?%szy@L*C|d<_pmJGSc!lD?$ABCUQ@?{x6sFRXEe>Ry&kZd{NU7c# z!v2t)i9vHY!pv`v3H#3tUSn3mk8sb=V=!k1bx%Po_hd#ffA(OS#NaWu;gsIJD$_6Vpm`_nRsqG%_n!q=|pAN6xS{E;l(w5XywI->u@p$ zh7(zp6mCn$6gx!5_5O^Xn-xI?y`;H+zLWc$!0vfasAyn!o11{$p9um5{n=e^5(D`& zPB{&hd7<5NxEORd3>{v_?iSdiiZ&--D71T{n}EF+1OeR(5LC-u-`Vi`K{tVc`he3N zz7K{AuRrK+fxQntFhC#tjhleI4+McieehW~fr0vf(;cJ_`sc;C&W3opB>M@toPpxH z>#+kwT*u*@qNSe+*R?*b%Uv)L8&+-bpIR`n)%_F@%2$c2MwU+t z;ab%Y+l*UITyYo*xyCo=_D*+K)}Otys___E1L3kd-46GTv83_pX)cp08-JTt1_cYOwsi5RHqf;*$HC^_bLy`1rsG6!d5>GopI=s$oScSb+N zCvrygl;?~%uN!ej3vpP#&~0xlwB~i>JD*X9){k4ycnMdW#}mn zWjL>?5lhxtN)(i{9>AZP+D^OJzB|ERuGqUnu}4o?_C~P(=V`Z|xjApCXT}J*AzK>V zS9r#u>{GGt`z#2{#HV5_I8mllMg#3DI7rGIzGjs{MnkUw%UDqal9z0J2txfp zP&f2Oock3+HdA#k+~~%zH)A!#i5{wKC-%4#p=X5?TsyV0p3N$gLx#D<;SJZRYwj^b1|mYSOo;Ro9;aLESD zV~$`Sq9#Hb?l{{rBePa;NAvpW%D$I*e8t&+?y%|+Rdy2^tz#+U&JH~}X(Z~AxRGeT z$m0i!V;lJ7%t?M13KgA`{I`O6aiFTj#~ww#GGX5rAgw5-5T3xC|XX1QvcOg1yrqFH;MP z1$(c`lqwYLA*rIl-pdq$C-=i}ubcj%Jy1Z#d%Q6ONG}yEy5qeUTjD)zJY4wbHvpgg*LMA8 z?LxWcx8b`haG0Xj@|TyxS_l`XMA_JHG?ghyvy0e-5_`L7N%1&vbQ(&ce5)4auz?^f z@~^w%jpVE%LGxTP{$dLSB_pFb0%=g`7Yoj+yu${Af9>onT7a1X!W4(K7rwj>q;uD30^puUc7~#mA;I&XlD7^{rryQnsS_XglA>n0; zy~`DQ^ps_91R-JR415S6&YS+*W5k4%(H;~gFWq>cBdYI*uX`z91#cqb$Nc1QdlS$2 zJrjCi@Ido;rc_3??X!wVs%W6Os0fT&{zK0z-mX}(fw?=<)Xib1v6@VzIW820hnnI| z!4SooclV+0iZ!j&wZq$~6;7<28M7ex8(&&6WwY+L7}34?=0mt zP92WvLsbT!IuZD^oV0q&FnqpwU_R3jX-*+XUylCS)=Ro1s{q-e{+UJuRpe7_Tjfee zUio^_=Jg{2W9z`a^nd_iRIabtep0>9{v2xuM<$3A_n6mV3GOjJq&UpLip68f)__M+ zhNXp8$Rm9Y$niOp&*Kw0OnS0;B*yvN$b$S;WbCdpNai3wWzO+VBe(>`Akoi59aee& zACEFUD)d7tSFyQ~?`KM7bj$9tkW^8Z^({qU6yp;m=#8FZdQ!19xZBcAV!y;{GHz?i zV3NBoBSm2Xxv%M6P&{{5)jjaDa-rSVWw@Jlb5AfGc5;QQ(oq(J|!EXxJ;0y)f6CdmL0<6P*cP8Zu*dr)>IHm6HgG`)< zw<&!?bNxk8*fmzb#?mQu(L$&}IWR5ALgC?KK#qrp-@zve59!Go9&$c65*{AB6L!_U zv=i3z<}J+40y3{XIOGmLaIEg{l@-Wv?kSjYcrw%Z#lp9VX;%P|cM=^)6%F5huGkvI zUIQuDjYe-JXS3at4!T9`3alm*y-jK!dGMwal)+N$w$O(M*VKcR2OYbm4wW0j`Bb`j z6r$fpyV>)d%;tn@&x1lmL$%x71ndq<5YP_F8LHjoCNYqU;*`^vmlvu%hs2N>7#Uz} z&Q{nuR#Ra=0c#q_MO}}y}zuS1mH20SC!o?5omOrRF{a-wn{yO%KV^bJTpJ! z-$VK-)ePILKn_fP3<|lTE{P8~?E9;Nc`@A8GG%{>e4!>7Sn>yuRuoGZ;s~rv?oKI- z+N{Q_r{MQJn6cmLmn6Rht!-gatNcifH+I4ANF06E>MYKj37hx2i4U9 z#l`DMX~O1!MuodT8Qir@|D55DM%X>>t@o*p}>yUPhdBVr22u~vq)jevNk+g)hc`X zVr4jr<;CJO03HoB-Rw|hRX4GhBY!1!yI|9W$~jI%tK=q?k4@)37-qu&I9P+2z1ak zmn|g|QLEdj!8-F1bXHrFnOe64*Pz5zk$yUvmMM4wrFS}+jQp6sZ{JJy)?2l195$jw z_$DNN_oLoRCSK(=x_;EV*c0G5dpem~@tc0fi(4HiKUMc)A3hVa+J={1oJ6u!a;s|?0`wqd z2DVIw?P{&Hir<-wpvn?Y@f-Bzxu|+RjDu>e0XK92%Ro^SPzlp8yulkK8vZ%I(L1#* z*%^2Z^*WyH_18j>RqVyxNM;&O#_Rr4cLnO3Iq!9va7YJofXS{x$`owktohie-u=l; z*lc&>Ds1qiqddK2sv9pKeeO}XE~J-Snf|frcRH<3HSn7C23#Ei9S3cz#l2*<)s54& zj8iSWWG?edrV94QpqwX*b1IUCV=?VC1#WFM#BofxEFwMCf;-}@38Lu0+syZpz7J^dk zu6I}4Ri$_!SW2MNs!cdw57o?43Y}2J?$=4}$nVx$)wNYrsXhK$yA}ETh7eJbw4@eS z&xKLQRdlvm4fejH{?vMr%97(33F%g)6hsR){(%m9k6$cGb@9ti50H1&e9<7Bu z(8E|;9lCs1$2+fHK}GkXRe|O-S3nUP;c6K7Zrd}T%(VS>6@=o0E!Ie2)0nd40ql*Dx1;07jzMy?*uD@4t>$8@vvRDLT#7k~0mxa6;b3nAEUuSKLi*8bZg@7xbEdOg z%T$jky83Hn^~4<+>DWugIQe=LYs8$fI-_Ljhk>T%FJHJQwTPOes!d8!6f zqc&>D1IeD~LNoT(szJCCG~j>G-!Tl|d&zVJyF}vZYrA0A5eRBOz4O;%g(W6Ip#K*}US++)&h1Bn^nE)HXmKgWRwKzmxXu(=F6Ac0{YLPgYFO6QyQ;Zxi7 zYPbq293iv(J&G>??ZEeANV~MwXnAL={;C%?s$RX`@d-NaPxfM!*w>NYSmt>4K(gI$ zp6h|zNhUdtfZ>7;hRu2iRuNa>TUjeU;1X!eUf>3FDh4=(I^f2KsCO?QT`CpF+>{Kp zEvpx}rfNB?Q##Gv@n`mWbUpXLpD3BayzzxL6{a6fN5P?cdlmW}oY0NI6dcqiW;AY( zL)41l>{XC4I0O$jQgmec%w#-_zy_LJ{yCRM|3olPT?{<&_##7 z==cD`BL)n&_0rZ~+CW5`jA;Fc)|hCTj^R`u!$CF;#2JR56sC5Q-KG&y=kBhBV2Y?6 z(BV7058;XD`jxC4SkG z>;xpQwYqq#Krh)6;TvpYMp?}r{&T1m`GJ9nfNdKiJwO8bzQ-PNKOCLk_7_x8-~-uu$+ zzPmFL3n&gk<8+V$H#o$JA7En)9~c9{24jLnz&wm?oDhh=#QBns#9xBrFaAtIf_daW z=Tvo9-R}Dwv9`WX(|fzB&N+4J)H$b4ovwQ8`hT+So2&T0Xh+Z}d$q;9Tf5*j>$R#| z3)|7ey)Ca&I$^weSNrhO?Mv;cXsy#|w9iIcO7&vcblsBIY)5y_JQ}#oV8*Wp?)-eS z<(4lxmC{U5pARoOO?T$xvByr#pg}NGm?OaSZ)zO0qYXi`$S|e`g@HE3dTriYXh+)= z?fUnI`=lTyc60rL+iZFzV7k3wgB|G zhrpQHyjv-`%_F&25tni&HJgs)?khLFAoQGC?%t+XJYTN20{2L6)^#g*b>f0k^J?Ca z+{49s80H>!m*$;jSVs9$#m$|nH>*zVNbY{G;xw0X=g_|FG)q9@Ipun7A@|xAU^ul> zj>aGdMukmp4qa@5_Zu6{y6+Y--bYT>n?<*jJ67=)SOmDqWA%$}C3j*mY&yjdoy<)U zki+O}vEEo}dJAPV{pF)KA3b^`_jkLaO}FAYf!i+ckH$l{+Ne088(cELK`2mx@ETsYGOhNG|&RNV!#=3-YBo{5yaA;ljgUrVCNnQVy$?LRfaIF0pp0 z=~TTErV_snLMQZ!F~)JX(V8n1gP<_)RUn)oVw~$)ueR|k->9@LsJAdsg`hP*?=3x@N;30_ix_mRB3Egyqu-PhxEtH24|8}%CUj=!as!sEK zseZB6ZbjQ_tt#eKVV;C4V%vZzqS$VSwGi#yc zEV%l`7>IN#ZUL%@M`NS>4%&`1*e4w>=yp7AHHU_J&r{8MJ-n2EN|#-F3jDp)mWH_n z7gDqs7Mx0@ez7p$dh*Go0wz=~fDH1mEk_$w9qLxJrRoF_y8`Q=^y}I6r;obl@#W>+*Hw>!t42k~{CTDq*1sm8Sc@&ncBa zT#ZGE)Emq|*$ps4&q}Kas!*+$T3{0OJ1)2q3Z)8>sfV?C=oXspJVdZYGTLy8ZhKiF z4a(@fsKr3P9B(Wwki7{CK?r3AT4+3@9c5@1D57#0vm1h@s8+m~OzPAd!bipN@-^ja z1-e` z${FAmOtFI7@GA8M%};&>2{vBsU`CPU!&EHHR~+D0%pGrlhtS^`+^XZjn5=0)dU+ab zt-;2EL2RVkXU`IYCgdHYN*l3DC_%wi*n$S6Iw-W7m?Q#WQ_Tw-Fe^*#Wv(=?eixwX zNpn3eZFkwPF^~(8JXN?sG=m<`MvuDn5b2aB6Uo+z--gJ*%DTQ0<5ezzocJ{(W@e)s~HBmms?;nfn|Z*7Y!`{ zPs1l#5X+d;JB)V)v1-tSPaKD7V0P~^%atJ@-(f1+tfx2Yhc&(fQ?ZG?8F&ET6Fehu z9}0@KtJ@NI+gQ=h!S;x0q^FmCv@|9A5jNd7T11^bCNJTO9fk^H&# zVe{1jYPtHAqOR%2c2%kh6^%MgJY{gXpgdj93&tIcQJa3NQY736>qRB#YXzuqj$Xs5 zR5LlQ8o+FU$x9}F=!^p9Ip(LH3cDC<)lu&Y7rheAq*c;Ndc&F%^O?-9SF3n6fMwQ7 zG334=R^nNCJ;5;H@)nyOt487>H;@v;2aHQ5xy{95VzJ0>i5+NIH|JNAK0;S((>jac}iQ{MKAU7<8FFttj z>nsbknY#krUWcyX&TZv4^Uehi>{TzzGv%APw0ukXsQlxm@)4=Oo$Et`HyxXUy9G3S zfI_QLf}0An%zlfQE-noq@pD*#Krab2X#@+6@vGOI3P6&O>EfN-N^A?sidSTX$PlHB zjC;d{*9Y-B4?)|d);?Ol_XG~*o|J7 z58)9D1Yrn~f(cv;T&GzqlP75qMA|{ORpT!NnLt&6fMbFZM^+KLPv{}fNbmq?mHYrr za4gxVAP#_PDdI*m86p&qvvj`R3L7o>Be5&Eo?SuJy&a4behj=b_*d}B$u@H5M2f_w zlgZYLj5Yb3YOJ`+JV|^ryQflUSRRHgXmu}(@H=2SPP0FvMupt(lBh?Jl?twNX<$2MqS51yXrMa=wK82K!cbXpjC~-2 z*vXJ_jY_F>av;{cehQ}c^@rQ8kRLZLc>$KJOYCK=dHw6C(&M^P3<%OdZj%}f-S#Ma z)~xrpcD~o^6eSuEiZ_xwF`?hnf{3(>F4(FIT4bh|rS=Z}lAu`?%fFF$eS*aN5UId=T`Lnj`7`0ln~-kmg+ zl^xdfP8FK$^s%$29zAvn?M|P*r{d-7%>~_ND}@0TF;f=Es79L_C3xj{BktFBDb*H- zeY|opI*ipZLM70Y5-EWPcY)$0tjl@%1S{a?3CyrzmA~83q786wTkr+Kw!`ywi||LR zAitTAHwX}7vayj-%ZGzfKuT5qRmJ)fHlWg~*3_y*ahs|v!bIuC%6_RI)*BV~f?I)} zWERsBSJpziq(Y~0V|o-!!+}~;gT*GX-YLzvh>RuHB5=yMXk3agqP#YRcIDT5xc|=8t5%tK#8pak0GBCtS#A^;C<-8XMN9;;XG(X4dCj#?M?dbN={8!R+2c6l~dJb(P{E2*u03M*1 zRp&f>43Tz{B&4;$gf2==F

3o8wL; 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 diff --git a/docs/_build/doctrees/usage/installation.doctree b/docs/_build/doctrees/usage/installation.doctree index fbb8fda6e4d22089abb60f158efcb4e41612d990..e23ccd131d739264e2e342a6d58a3acfe2db35d3 100644 GIT binary patch delta 2129 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 Tg$T)y*JIh zmv)3Qi`_)HDD~VS`!^`~Q-p4?U*fNU2!e{b`T1AICJKszPJPeGJ!#UU;-7GHpL3q~ zd7t+==YDqV>QUiU;mVt_b>S}ZtpB{08=OWsW*tkvs7n<+t!TP5H&-zwyd=(-(z-Th zEQu8GnW5GzJ%p=9F-_Twmao3rE_blinKL~}*SZr6xV zg*_`I=NcmGuBScN11paZ!Hv-*QQbpmiY)dHkoVk4;Tb?CNT@$b{%|MJ3*@nmsYC|H z@Kbnj+D&)W_;J`mDf^PWYOmM{EI5Sg9s5Iv*h0D?f)CQglCASDV zXKZ|!|F@2x)RxqFO)SL?EX51iOy;yWFP~FWJueF1+XCAlFyjxK=-`%kPV%09a@LbX?@+=6?Fqf{y4GeFtAxAARV+8SI7D6Kz>Y4GBVCsTI^&yE z0UJrD)6$IwvJfTX03##Ud{Od4e_{`vu8E(-!wo}Y(IS6#y~U`%r__OOooINW*qzN= z-fo0`V(Iziq2~hk8bR``@A)%d!7@g}5%4X=eS;9OsqGw!sZ(W1jTcPyyb9^aFKLyM zo-&pVa?f`tOUEs+1{%l;%9An*H!2k78}HQVYOpf_xdko&$- z5({{}H1`anL+hi_=Np1fQ78QgYBk6F4hCc`y^@c+H&{%Sqf`Xr3^^hWH*@w;PL6R- zXM(;-{JG^RSEM<4*#?zg;4dwK-4ph72Oq4Xhu<0a_V!79M?MNp)zrMq)bMflLfbEa z8tCBu<|_}o5Ryqg6wm&JAK<^=!2ejCMNQSUdC67~EL&k&;&Is8Ea6A#^|5!xw%l@Q z)E4o+8C&Tji~U36+oRIk8kIKg{n)co)BAeey*-Y5Yi-=)*lGg?`S+b@aZfn|OQt>C zI%ng5S@&V@WKGJuP1Z%gx((o>){#?vAE4|1-?^>5&CZQAIv3jRT!du8YLIsF|uU%ube#z1AbTIjbA8VH&cg=1UMKRi=+Nv3Xc5 z*Z4TQZ{cLn$ENE{Ip`vVP#Cw8i}(q+@RKt%8p@~(jwpOH%vme6rD8!=O+(UcWenhY zIdp(mgQw7%g5bj&E@$cGhoVca7lZ{%_Bs6y27NsOjNLrdIN=c|d91v-|wzqlSI=jZZ zR#T~=RQyPktwJ@6M1@2vaRqURxF8e+h!YZ`jl@qcocIyqfDq+JfMDLPH+I`p^s;(y z=FRLk-#7E#rQvG__-FZ7k91w+ew@P`@zJa`Zt=Bc2^Z-#!f5?*cZ* zAJ$H(6-_FM29?Epeqwz538_+^S2NYq`MfBpB{a&5MolUj6IyLSQVrd4>BU;PiW`d+ zMn~O@^qgC$a8qiAaht=Ed5Z@@JqP>w?VF>w{vRm6gIqv9`X7IpowDoYZB#8aHw^56 zqvJH~n#QB1i^+^{TmuMg{p1QupJ}G|i|ds&X>BpuXj|#!(Q=m28@rv}pCIYow=)pP zWW=IYk_YUz85+Wks%sTFAd2EpQK}kcO&t>9vag2^FdH26S3SLS6xzKn@}FS-j~U2y zLEF&s0i5tH^Vf0pmF@eYA+`@KYb!Z_n2;ar)_E#$RQRsd3GW7u`L41Q^@0qax21O7 zj(cjRDyyh`T|KE{gUp@MY9&2mEE;*34Gu<{aw}o7X%oB>+p>rwp@FE|+95n0VhA>-{|0mmhYsE) z{RidwvMQd?YDKvu+B2{qtA?w`7I-vr+}5O1c#~H~*iYXRa%mTdfJg?>h`6u0edk;U zz4S}C9G>(m(~Opca+KBC;p!DZ%cK+c{Yo~%5uEckV&cx<=s0JKAM3t z?Pk|;&#Yy7%B8)QM7PgcN|PlAmd%o{(fe$3FU*94u-lgk(i$Ur56(!IbrwH>s}L-Q z;xN%sh$Qf>u-^;&BIekXt*mwYL&&cySL0VaTg-O7UeJxQQD<{Kr%DU5jyE5yCDLP` yVP(pv_|Z*2a~P+qwo_q_X`S{UaNCb>(!X>~sj%~`Ka{uG=R6E2Zx9Z0Df%C=t2yZa diff --git a/docs/_build/html/.buildinfo b/docs/_build/html/.buildinfo index 8247159..9ea5fc0 100644 --- a/docs/_build/html/.buildinfo +++ b/docs/_build/html/.buildinfo @@ -1,4 +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: a9e501948c645bf032c7e86e32c92cb5 +config: 8745e4e4f0df8712ab397deb6ddc5d88 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/_build/html/_static/documentation_options.js b/docs/_build/html/_static/documentation_options.js index 15926ec..46b05d8 100644 --- a/docs/_build/html/_static/documentation_options.js +++ b/docs/_build/html/_static/documentation_options.js @@ -1,6 +1,6 @@ var DOCUMENTATION_OPTIONS = { URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), - VERSION: '2.0.1', + VERSION: '2.0.2-dev', LANGUAGE: 'None', COLLAPSE_INDEX: false, BUILDER: 'html', diff --git a/docs/_build/html/code/align/aligner.html b/docs/_build/html/code/align/aligner.html index 1209fc3..145760d 100644 --- a/docs/_build/html/code/align/aligner.html +++ b/docs/_build/html/code/align/aligner.html @@ -6,7 +6,7 @@ - FAVE Aligner module — Forced Alignment and Vowel Extraction (FAVE) 2.0.1 documentation + FAVE Aligner module — Forced Alignment and Vowel Extraction (FAVE) 2.0.2-dev documentation @@ -40,7 +40,7 @@

Navigation

  • previous |
  • - + @@ -128,7 +128,7 @@

    Next topic

    This Page

    @@ -161,7 +161,7 @@

    Navigation

  • previous |
  • - + diff --git a/docs/_build/html/code/align/index.html b/docs/_build/html/code/align/index.html index 07f2492..2e32924 100644 --- a/docs/_build/html/code/align/index.html +++ b/docs/_build/html/code/align/index.html @@ -6,7 +6,7 @@ - FAVE Align module — Forced Alignment and Vowel Extraction (FAVE) 2.0.1 documentation + FAVE Align module — Forced Alignment and Vowel Extraction (FAVE) 2.0.2-dev documentation @@ -40,7 +40,7 @@

    Navigation

  • previous |
  • - + @@ -83,7 +83,7 @@

    Next topic

    This Page

    @@ -116,7 +116,7 @@

    Navigation

  • previous |
  • - + diff --git a/docs/_build/html/code/align/transcriptprocessor.html b/docs/_build/html/code/align/transcriptprocessor.html index 946c001..ca068ae 100644 --- a/docs/_build/html/code/align/transcriptprocessor.html +++ b/docs/_build/html/code/align/transcriptprocessor.html @@ -6,7 +6,7 @@ - FAVE TranscriptProcessor module — Forced Alignment and Vowel Extraction (FAVE) 2.0.1 documentation + FAVE TranscriptProcessor module — Forced Alignment and Vowel Extraction (FAVE) 2.0.2-dev documentation @@ -40,7 +40,7 @@

    Navigation

  • previous |
  • - + @@ -124,7 +124,7 @@

    Next topic

    This Page

    @@ -157,7 +157,7 @@

    Navigation

  • previous |
  • - + diff --git a/docs/_build/html/code/cmudictionary.html b/docs/_build/html/code/cmudictionary.html index 50d5ce7..ae3ac79 100644 --- a/docs/_build/html/code/cmudictionary.html +++ b/docs/_build/html/code/cmudictionary.html @@ -6,7 +6,7 @@ - FAVE CMU Dictionary module — Forced Alignment and Vowel Extraction (FAVE) 2.0.1 documentation + FAVE CMU Dictionary module — Forced Alignment and Vowel Extraction (FAVE) 2.0.2-dev documentation @@ -40,7 +40,7 @@

    Navigation

  • previous |
  • - + @@ -154,7 +154,7 @@

    Next topic

    This Page

    @@ -187,7 +187,7 @@

    Navigation

  • previous |
  • - + diff --git a/docs/_build/html/code/extract/esps.html b/docs/_build/html/code/extract/esps.html index cd8b34c..a97e966 100644 --- a/docs/_build/html/code/extract/esps.html +++ b/docs/_build/html/code/extract/esps.html @@ -6,7 +6,7 @@ - FAVE esps module — Forced Alignment and Vowel Extraction (FAVE) 2.0.1 documentation + FAVE esps module — Forced Alignment and Vowel Extraction (FAVE) 2.0.2-dev documentation @@ -40,7 +40,7 @@

    Navigation

  • previous |
  • - + @@ -82,7 +82,7 @@

    Next topic

    This Page

    @@ -115,7 +115,7 @@

    Navigation

  • previous |
  • - + diff --git a/docs/_build/html/code/extract/index.html b/docs/_build/html/code/extract/index.html index 0e4ea99..f8a2e25 100644 --- a/docs/_build/html/code/extract/index.html +++ b/docs/_build/html/code/extract/index.html @@ -6,7 +6,7 @@ - FAVE Extract module — Forced Alignment and Vowel Extraction (FAVE) 2.0.1 documentation + FAVE Extract module — Forced Alignment and Vowel Extraction (FAVE) 2.0.2-dev documentation @@ -40,7 +40,7 @@

    Navigation

  • previous |
  • - + @@ -86,7 +86,7 @@

    Next topic

    This Page

    @@ -119,7 +119,7 @@

    Navigation

  • previous |
  • - + diff --git a/docs/_build/html/code/extract/mahalanobis.html b/docs/_build/html/code/extract/mahalanobis.html index b858670..1cfa899 100644 --- a/docs/_build/html/code/extract/mahalanobis.html +++ b/docs/_build/html/code/extract/mahalanobis.html @@ -6,7 +6,7 @@ - FAVE Mahalanobis module — Forced Alignment and Vowel Extraction (FAVE) 2.0.1 documentation + FAVE Mahalanobis module — Forced Alignment and Vowel Extraction (FAVE) 2.0.2-dev documentation @@ -40,7 +40,7 @@

    Navigation

  • previous |
  • - + @@ -105,7 +105,7 @@

    Next topic

    This Page

    @@ -138,7 +138,7 @@

    Navigation

  • previous |
  • - + diff --git a/docs/_build/html/code/extract/plotnik.html b/docs/_build/html/code/extract/plotnik.html index 4f3bae9..3b7effb 100644 --- a/docs/_build/html/code/extract/plotnik.html +++ b/docs/_build/html/code/extract/plotnik.html @@ -6,7 +6,7 @@ - FAVE Plotnik module — Forced Alignment and Vowel Extraction (FAVE) 2.0.1 documentation + FAVE Plotnik module — Forced Alignment and Vowel Extraction (FAVE) 2.0.2-dev documentation @@ -40,7 +40,7 @@

    Navigation

  • previous |
  • - + @@ -186,6 +186,12 @@

    Navigation

    translates numerical following sequence code to a readable code.

    +
    +
    +fave.extract.plotnik.plt_ipa(cd)
    +

    translates numerical vowel class code to ipa-like.

    +
    +
    fave.extract.plotnik.plt_manner(fm)
    @@ -274,7 +280,7 @@

    Next topic

    This Page

    @@ -307,7 +313,7 @@

    Navigation

  • previous |
  • - + diff --git a/docs/_build/html/code/extract/remeasure.html b/docs/_build/html/code/extract/remeasure.html index f78cef4..abb64d7 100644 --- a/docs/_build/html/code/extract/remeasure.html +++ b/docs/_build/html/code/extract/remeasure.html @@ -6,7 +6,7 @@ - FAVE Remeasure module — Forced Alignment and Vowel Extraction (FAVE) 2.0.1 documentation + FAVE Remeasure module — Forced Alignment and Vowel Extraction (FAVE) 2.0.2-dev documentation @@ -40,7 +40,7 @@

    Navigation

  • previous |
  • - + @@ -126,7 +126,7 @@

    Next topic

    This Page

    @@ -159,7 +159,7 @@

    Navigation

  • previous |
  • - + diff --git a/docs/_build/html/code/extract/vowel.html b/docs/_build/html/code/extract/vowel.html index bb368bb..6499fd8 100644 --- a/docs/_build/html/code/extract/vowel.html +++ b/docs/_build/html/code/extract/vowel.html @@ -6,7 +6,7 @@ - FAVE Vowel module — Forced Alignment and Vowel Extraction (FAVE) 2.0.1 documentation + FAVE Vowel module — Forced Alignment and Vowel Extraction (FAVE) 2.0.2-dev documentation @@ -40,7 +40,7 @@

    Navigation

  • previous |
  • - + @@ -100,7 +100,7 @@

    Next topic

    This Page

    @@ -133,7 +133,7 @@

    Navigation

  • previous |
  • - + diff --git a/docs/_build/html/code/praat.html b/docs/_build/html/code/praat.html index add1d09..5124fbb 100644 --- a/docs/_build/html/code/praat.html +++ b/docs/_build/html/code/praat.html @@ -6,7 +6,7 @@ - FAVE Praat module — Forced Alignment and Vowel Extraction (FAVE) 2.0.1 documentation + FAVE Praat module — Forced Alignment and Vowel Extraction (FAVE) 2.0.2-dev documentation @@ -36,7 +36,7 @@

    Navigation

  • previous |
  • - + @@ -216,7 +216,7 @@

    Previous topic

    This Page

    @@ -246,7 +246,7 @@

    Navigation

  • previous |
  • - + diff --git a/docs/_build/html/genindex.html b/docs/_build/html/genindex.html index 1646dc5..35dbd9c 100644 --- a/docs/_build/html/genindex.html +++ b/docs/_build/html/genindex.html @@ -5,7 +5,7 @@ - Index — Forced Alignment and Vowel Extraction (FAVE) 2.0.1 documentation + Index — Forced Alignment and Vowel Extraction (FAVE) 2.0.2-dev documentation @@ -31,7 +31,7 @@

    Navigation

  • modules |
  • - + @@ -345,6 +345,8 @@

    P

  • Phone (class in fave.cmudictionary)
  • plt_folseq() (in module fave.extract.plotnik) +
  • +
  • plt_ipa() (in module fave.extract.plotnik)
  • plt_manner() (in module fave.extract.plotnik)
  • @@ -353,11 +355,11 @@

    P

  • plt_preseg() (in module fave.extract.plotnik)
  • plt_voice() (in module fave.extract.plotnik) -
  • -
  • plt_vowels() (in module fave.extract.plotnik)
  • diff --git a/docs/_build/html/index.html b/docs/_build/html/index.html index 35dc555..a69cb46 100644 --- a/docs/_build/html/index.html +++ b/docs/_build/html/index.html @@ -6,7 +6,7 @@ - Forced Alignment and Vowel Extraction (FAVE) — Forced Alignment and Vowel Extraction (FAVE) 2.0.1 documentation + Forced Alignment and Vowel Extraction (FAVE) — Forced Alignment and Vowel Extraction (FAVE) 2.0.2-dev documentation @@ -36,7 +36,7 @@

    Navigation

  • next |
  • - + @@ -51,35 +51,78 @@

    Forced Alignment and Vowel Extraction (FAVE)

    Warning

    -

    If you have used FAVE before, please read What’s new in version 2 to familiarize yourself with the differences between the current and legacy versions of FAVE.

    +

    If you have used FAVE before, please read +usage/whats-new to familiarize yourself +with the differences between the current and legacy versions of FAVE.

    Guides and documentation

    +
    +

    For Users

    +
    +
    +

    For Developers

    + +
    -
    -

    Indices

    -
    @@ -94,8 +137,11 @@

    IndicesTable of Contents

    @@ -109,7 +155,7 @@

    Next topic

    This Page

    @@ -139,7 +185,7 @@

    Navigation

  • next |
  • - + diff --git a/docs/_build/html/objects.inv b/docs/_build/html/objects.inv index b3d785a34260ae49e8ed49b8191e26d498995ba4..ac889f41663efe00b6faf7fc17cfc13eded1f3a9 100644 GIT binary patch delta 1383 zcmV-t1(^EJ3-b$*WCb!UWMy`dWj%jx<2De0?|upa?V&xy+4XTz6j&tdMSvQ0n`HMW zFw$5iLXiqd`RCTx=r85gYF~o8)Sphz)^%@=#P4)A&P$PZRW64>CCAV?xc`m+ zN?Sz{Zm{a&|I5N0%kV8{a!T?=X@0gY zHzsUD?4G1emAln*c;5gv=A?sn6=;s)_^L@a+JVjMY|AKkr(Q_YiS#|=u}7%gw6xr3 z_v%UG5x3`9+916{bNWizo|mqyM2v(A)F+~m{R416ctQIfqoOo)dA1XXpjwqSn-|{<;pRlCXq@ z+S~(?(H(GkpL1`lN6CNH9y%ST&lxBIKcEQ9qaV@+b9GFkDD@PXN-v){>ItLDRYJnZ zD@`1UAD*Y|5^(SYl1PFtl%72hhdVz!>7lQ%@DUBmWtPje{Z=m4(~#K~6Qt5gNJu@< zh}3y1;LQ&UXUGpoRRhJH)pV9Q7I{LcOohY`Ysav!uy%SA_mF?}Vc483jW9@ z;k--)kr7<39jY2mu=K#xmuLQJ7kyG#Z2W9=hGou+<5_w{&A@h7peL378njZox_&$( z_aGxgqMWGhrDXTFc>q`)c?xRtDq=bs4iU*?_&t{d1NRg!VJN;dS+1wq&BzZc<2kh* z>8Yvu>JId2bNPR9xtM}9OJR3@8*zVbTNNzsakfI**La^R#cqrTMI+Y&}}h)K{VduSZ*EHEtjn~_WvkbOeIi(rSmHB zvN;`N<|}E#AuAf@iEVanE$rE8_;B>J$OJ?%ex^iwEAElYla7{Fh+mia6hTV z@hivi2$R9>IT@O(=Zlu@SFwSR@u!$Y!A<9j+F<$l+n1pHb%0&F>m*ELICOA~?406Y zxL*FciCuqhq%7a{TDR`4`L^oZL;E7zQtwvJL9Gz11M3&gEne$3+Tx6^3*zp{hO~zH zVxK!n^{ePE-uXSWrLJn0E^>M3>7v$87M56CYdC4uNu!I`tm7>4&y$slX)C)fURAMJ zmMKmf9QP>HdVgi>8YRv3NyhxzV^&SKmT5H!iw=J=T7}C5XyuTg7Zr@ME1z1c2mNu@ zimRRwj7JdL>19q=sv;_yR-}n8-hR^Vf1WAN4wu>SrW7=qX`R=k7tGd2T?{v^1t1=6 zn}+t8wRyDiHA-NX3-$LlB3NG?a+zoLGpJAX#`maM<}Z{55=#QV7RXlr)gISI=UJ## z?rT?$V-P1p<$@6Vs~(4aB`t@`Jkh1IAubBeTaKew6K$JP$t>fKN;lE51d=Ju3OWB! pK=)fD#SMjhn|Tsh)s%Mt_J`B delta 1347 zcmV-J1-$z63(pIXWC1aeX+3{(+cpq@?|KT(G>7zHIq@;Kj2&e>Q%#lHPLCXzSWy^* z01beWb?a;N_4*{m4=Iu&D2XKMUYwY_`|V=602ZLvXbW>hNy^+$5K+GWl5t#6h(1LL z$8c>0*QI#AQ5pTkDO`Psu4d~FVg9uyB@{^+eeMOFCb-{iM4&btj|YDx8%SPalp?~U ziZMwP;S7m=IJOdq$wZJ`gnP$i z(JB5v{d18a^zZP6gDZV5tj@ISYgl&oa zleDdJyL^i8TENzv^zbeM%@M{IO}fzzTwUiI&LBATOqouk@3_DLp>ESM@{s8@lO`Z; zCx~)E28R~xh4CG;X`PgTRaHwPXMkO2sv)imW(6ZLwyq@%M(KanMW95@LFTf%I+W6D zBlRy1P5ZgX7G|ShYN3})=?kR`?2t0FK@>6mOil#UP&yq~Q}Kx07h8wjf##GeMqc{E zD-}+MRw=Eh%~z+8ys%!%Prd`X1SAUqnO;37;*iMEGpL)!Q2X+A8BiBt1&fV&03v5w z5bCZF!B`JU=skaQI?kLkPzqr{2~qnnq%{%xn8r{RC^B7MA#p4aMz^b!#z|0`+|w|; zK-DGTEf7c{1))%8_5hBzVR$M)u80f~4KGw)sFnMzTCArb^9`X$mz7kI1)x!7>QusO z7?$3|%d4j8EPI*>gwh2DX&Ba)lTcx8&E6ZJSgTWSR&RgfF(nMbk!_s>sb85>QcZc? z#HK_AV46Fxa4m;v@Nd>(_9x4-$Gq_@^G5B9?Qa|pDyLh=TJ7St?}&T?nIM`JRPPEE z`}CLxfb~hGq_%Gmrla94p#_HD3q=WtK=D$J@VUuyInC`MVOY5+m`h}!p_&^vFo(p& z=f%wwq+Nds`|I0^PuI3nA@Yvo8+|TkCztyMuNQRBQc5tH4tm&dp{7Ef@{!Tx0+m;= zt<2iT{){?Nc_i;F3=KoS#rzpDydzj`Jhvq0t=I0~QMQCBV3H{B4d8imHpa+*fpy+a zk!)O)Zy9WNTbK2tg-$En% zOV`(EX<<$>_K!4X^>pi))|0SIh}9}xroew{hZH^QV6 - Python Module Index — Forced Alignment and Vowel Extraction (FAVE) 2.0.1 documentation + Python Module Index — Forced Alignment and Vowel Extraction (FAVE) 2.0.2-dev documentation @@ -34,7 +34,7 @@

    Navigation

  • modules |
  • - + @@ -138,7 +138,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/_build/html/search.html b/docs/_build/html/search.html index 8c88e1e..db96fae 100644 --- a/docs/_build/html/search.html +++ b/docs/_build/html/search.html @@ -5,7 +5,7 @@ - Search — Forced Alignment and Vowel Extraction (FAVE) 2.0.1 documentation + Search — Forced Alignment and Vowel Extraction (FAVE) 2.0.2-dev documentation @@ -37,7 +37,7 @@

    Navigation

  • modules |
  • - + @@ -97,7 +97,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/_build/html/searchindex.js b/docs/_build/html/searchindex.js index 59a840e..7a7aa76 100644 --- a/docs/_build/html/searchindex.js +++ b/docs/_build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({docnames:["code/align/aligner","code/align/index","code/align/transcriptprocessor","code/cmudictionary","code/extract/esps","code/extract/index","code/extract/mahalanobis","code/extract/plotnik","code/extract/remeasure","code/extract/vowel","code/index","code/praat","index","usage/index","usage/installation","usage/quickstart","usage/whats-new"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":5,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":3,"sphinx.domains.rst":2,"sphinx.domains.std":2,sphinx:56},filenames:["code/align/aligner.rst","code/align/index.rst","code/align/transcriptprocessor.rst","code/cmudictionary.rst","code/extract/esps.rst","code/extract/index.rst","code/extract/mahalanobis.rst","code/extract/plotnik.rst","code/extract/remeasure.rst","code/extract/vowel.rst","code/index.rst","code/praat.rst","index.rst","usage/index.rst","usage/installation.rst","usage/quickstart.rst","usage/whats-new.rst"],objects:{"fave.align":[[0,0,0,"-","aligner"],[2,0,0,"-","transcriptprocessor"]],"fave.align.aligner":[[0,1,1,"","Aligner"]],"fave.align.aligner.Aligner":[[0,2,1,"","align"],[0,2,1,"","check_against_dictionary"],[0,2,1,"","check_transcript"],[0,2,1,"","get_duration"],[0,2,1,"","merge_textgrids"],[0,2,1,"","process_style_tier"],[0,2,1,"","read_transcript"]],"fave.align.transcriptprocessor":[[2,1,1,"","TranscriptProcessor"]],"fave.align.transcriptprocessor.TranscriptProcessor":[[2,2,1,"","check_dictionary_entries"],[2,2,1,"","check_transcription_file"],[2,2,1,"","check_transcription_format"],[2,2,1,"","preprocess_transcription"],[2,2,1,"","read_transcription_file"],[2,2,1,"","replace_smart_quotes"]],"fave.cmudictionary":[[3,1,1,"","CMU_Dictionary"],[3,1,1,"","Phone"],[3,3,1,"","read_dict"],[3,3,1,"","read_phoneset"]],"fave.cmudictionary.CMU_Dictionary":[[3,2,1,"","add_dictionary_entries"],[3,2,1,"","check_phone"],[3,2,1,"","check_transcription"],[3,2,1,"","check_word"],[3,2,1,"","merge_dicts"],[3,2,1,"","read"],[3,2,1,"","write_dict"],[3,2,1,"","write_unknown_words"]],"fave.extract":[[4,0,0,"-","esps"],[6,0,0,"-","mahalanobis"],[7,0,0,"-","plotnik"],[8,0,0,"-","remeasure"],[9,0,0,"-","vowel"]],"fave.extract.esps":[[4,3,1,"","rmFormantFiles"]],"fave.extract.mahalanobis":[[6,3,1,"","mahalanobis"]],"fave.extract.plotnik":[[7,1,1,"","PltFile"],[7,1,1,"","VowelMeasurement"],[7,3,1,"","arpabet2plotnik"],[7,3,1,"","cmu2plotnik_code"],[7,3,1,"","convertDur"],[7,3,1,"","convertStress"],[7,3,1,"","get_age"],[7,3,1,"","get_city"],[7,3,1,"","get_first_name"],[7,3,1,"","get_last_name"],[7,3,1,"","get_n"],[7,3,1,"","get_n_foll_c"],[7,3,1,"","get_n_foll_syl"],[7,3,1,"","get_s"],[7,3,1,"","get_sex"],[7,3,1,"","get_state"],[7,3,1,"","get_stressed_v"],[7,3,1,"","get_ts"],[7,3,1,"","is_v"],[7,3,1,"","outputPlotnikFile"],[7,3,1,"","phila_system"],[7,3,1,"","plt_folseq"],[7,3,1,"","plt_manner"],[7,3,1,"","plt_place"],[7,3,1,"","plt_preseg"],[7,3,1,"","plt_voice"],[7,3,1,"","plt_vowels"],[7,3,1,"","process_measurement_line"],[7,3,1,"","process_plt_file"],[7,3,1,"","split_stress_digit"],[7,3,1,"","style2plotnik"],[7,3,1,"","word2fname"],[7,3,1,"","word2trans"]],"fave.extract.remeasure":[[8,1,1,"","VowelMeasurement"],[8,3,1,"","calculateVowelMeans"],[8,3,1,"","createVowelDictionary"],[8,3,1,"","excludeOutliers"],[8,3,1,"","loadfile"],[8,3,1,"","output"],[8,3,1,"","pruneVowels"],[8,3,1,"","repredictF1F2"]],"fave.extract.vowel":[[9,3,1,"","isDiphthong"],[9,3,1,"","isIngliding"],[9,3,1,"","isShort"],[9,3,1,"","isUpgliding"]],"fave.praat":[[11,1,1,"","Formant"],[11,1,1,"","Intensity"],[11,1,1,"","Interval"],[11,1,1,"","IntervalTier"],[11,1,1,"","LPC"],[11,1,1,"","MFCC"],[11,1,1,"","Point"],[11,1,1,"","PointTier"],[11,1,1,"","TextGrid"]],"fave.praat.Formant":[[11,2,1,"","bandwidths"],[11,2,1,"","formants"],[11,2,1,"","intensities"],[11,2,1,"","n"],[11,2,1,"","read"],[11,2,1,"","times"],[11,2,1,"","xmax"],[11,2,1,"","xmin"]],"fave.praat.Intensity":[[11,2,1,"","read"]],"fave.praat.IntervalTier":[[11,2,1,"","rename"],[11,2,1,"","sort_intervals"],[11,2,1,"","tidyup"]],"fave.praat.LPC":[[11,2,1,"","read"]],"fave.praat.MFCC":[[11,2,1,"","read"]],"fave.praat.TextGrid":[[11,2,1,"","read"],[11,2,1,"","write"]],fave:[[3,0,0,"-","cmudictionary"],[11,0,0,"-","praat"]]},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"],"3":["py","function","Python function"]},objtypes:{"0":"py:module","1":"py:class","2":"py:method","3":"py:function"},terms:{"0":[6,7,11,12,13,16],"1":[6,16],"10":16,"12":16,"14":16,"1d":6,"2":[12,13],"2000":16,"2006":16,"2008":16,"2014":16,"2015":16,"2020":16,"2022":16,"3":[7,16],"4":16,"5":[2,6,16],"7":16,"8":[7,16],"9":16,"break":16,"case":[6,7],"class":[0,1,2,3,5,7,8,11],"default":[11,15],"do":16,"final":7,"function":[0,2,3,5],"import":[6,15,16],"long":[11,16],"new":[3,11,12,13,15],"return":[2,3,7,8,11],"short":[9,11],"static":[2,3],"true":[6,9],"try":16,A:6,As:16,For:16,If:[2,10,12,14,16],In:16,It:[0,1,5,8,16],The:[0,1,5,13],These:16,To:16,_:6,_ic_:6,_u_:6,_v_:6,abil:16,abov:16,ac:7,accord:[8,11,15],account:16,accumul:16,acoust:5,add:[0,2,3,7,16],add_dictionary_entri:3,addit:3,ae:9,after:16,ag:[7,16],again:16,against:6,ah:9,align:[2,5,10,13,14,15],all:[0,2,4,16],all_input:2,allow:[0,3,16],alreadi:[14,16],also:16,alwai:16,among:16,an:[2,6,8,11],ani:[3,16],announc:16,api:16,appli:16,ar:[6,8,10,14,16],area:16,arg:2,argument:16,arpabet2plotnik:7,arpabet:[2,3,7],arrai:[6,8],ask:13,assign:[3,11],assum:16,attempt:16,audio:[5,15],audiofil:[15,16],august:16,author:3,autom:0,avail:[14,16],avoid:16,aw:9,ay:9,b1:8,b3:8,bandaid:16,bandwidth:11,base:[8,16],batch:16,becaus:16,becom:6,befor:[12,14,16],began:16,begin:15,behavior:16,being:16,best:16,between:[0,6,11,12],brickhous:16,bug:[14,16],build:16,built:16,c:16,calcul:8,calculatevowelmean:8,came:16,can:[11,14,16],categori:8,caus:16,cd:7,cepstral:11,chang:16,charact:7,check:[0,2,3,6,7,9,15],check_against_dictionari:0,check_dictionary_entri:2,check_phon:3,check_transcript:[0,3],check_transcription_fil:2,check_transcription_format:2,check_word:3,christian:16,chunkname_textgrid:0,citi:7,cmu2plotnik_cod:7,cmu:[2,7],cmu_dictionari:3,cmudictionari:[3,10,12],coda:7,code:[7,11,16],coeffici:11,come:16,command:16,comment:7,compat:16,complet:16,complex:16,comput:[6,14],configur:16,conform:3,conson:7,contain:[0,1,5,13,16],content:[0,7],continu:16,contour:11,contribut:[10,14],convert:7,convertdur:7,convertstress:7,coordin:0,correct:2,correspond:7,could:16,count:7,cov:6,covari:[6,8],creat:[8,15,16],createvoweldictionari:8,current:[12,16],custom:16,custom_dictionari:[15,16],customiz:16,d1:3,d2:3,data:[2,7,13,15],date:16,debian:14,debt:16,defin:6,delet:[2,4],delimit:2,depend:[6,15,16],deprec:16,detail:16,develop:[10,16],dict:[2,3],dictionari:[0,2,7,8,15,16],dictionary_fil:3,differ:[0,12],digit:7,dimens:6,diphthong:9,direct:15,directli:16,distanc:[6,8],distinct:3,distribut:8,document:16,doubl:[7,16],download:[15,16],duct:16,dur:7,durat:[0,7,8],dure:16,e:9,each:[3,8,11,15],easi:[0,16],easier:16,easili:16,either:11,empti:[2,11],end:[10,11,16],enough:8,enter:[3,7],entri:[0,2,3],environment:7,error:16,esp:[5,10],etc:16,euclidean:6,evanini:3,even:16,everi:16,exampl:16,exclud:8,excludeoutli:8,exist:[7,16],exit:2,extend:16,extens:4,extract:[4,6,7,8,9,10,13,14,15],extractform:[8,15],ey:[6,9],f1:[8,11],f2:8,f3:11,f:[3,7],faav:2,faavalign:15,fadir:0,fail:16,familiar:12,fanci:2,fave:10,featur:[3,16],februari:16,feel:14,field:2,file:[0,1,2,3,4,5,7,8,11,16],filenam:[7,11],filestem:4,find:[8,10],first:7,fix:16,flag:16,fm:7,fname:3,folder:16,foll_p:7,follow:[7,16],forc:[2,15,16],formant:[7,11,15,16],format:[2,7,8,11],foundat:16,fp:7,frame:11,free:14,frequenc:11,frequent:13,freuhwald:16,from:[2,3,5,6,7,8,11,16],fs:7,full:16,futur:16,fv:7,gap:11,get:0,get_:7,get_ag:7,get_citi:7,get_dur:0,get_first_nam:7,get_last_nam:7,get_n:7,get_n_foll_c:7,get_n_foll_syl:7,get_sex:7,get_stat:7,get_stressed_v:7,get_t:7,given:[3,4,11],glide:7,go:16,good:16,greater:16,guid:16,h:16,ha:16,had:16,handl:[0,2],hard:16,harder:16,have:[2,12,16],header:7,help:[10,16],higher:16,highli:16,histori:16,hold:16,how:[13,16],htk:14,i:[7,9,16],ic:6,ident:6,identifi:8,improv:16,includ:[7,15,16],incorrect:6,increas:16,index:[3,7,8,12,14],indexerror:3,indic:8,infil:3,inglid:9,input:2,insert:11,instal:[12,13,15],instruct:16,integ:7,intens:11,interact:0,interfac:[0,16],intern:[10,16],interv:11,intervalti:11,introduc:16,inv:6,invers:6,irrespons:16,is_v:7,isdiphthong:9,isinglid:9,isshort:9,isupglid:9,its:[15,16],iy:9,januari:16,josef:16,keelan:3,keep:16,knowledg:16,known:16,kwarg:[0,2,3],label:[3,7],labovian:7,langaug:16,languag:16,larg:16,larger:0,last:7,latest:16,learn:13,least:16,leav:16,left:[8,16],legaci:12,less:16,letter:7,librari:[0,14],licens:16,life:16,like:[10,14,16],limit:7,linalg:6,line:[2,3,7,8,16],linear:11,list:[2,3,8,11,15,16],littl:16,load:[8,16],loadfil:8,locat:16,longer:16,lookup:2,lpc:11,m:[14,16],mac:14,made:16,mahalanobi:[5,8,10],mahalanobis_scipi:6,mai:16,main:0,main_textgrid:0,maintain:16,make:[7,8,16],manag:16,mani:16,manipul:1,manner:7,manual:14,mark:11,matric:8,matrix:6,maximum:11,mean:[6,8,16],measur:[5,7,8,11],mel:11,memori:2,merg:3,merge_dict:3,merge_textgrid:0,mfa:16,mfcc:11,might:[14,16],migrat:16,modif:14,modifi:7,modul:[12,13],moment:14,montral:16,more:[7,10,16],msec:7,multipl:3,n:[6,11],name:[7,11,16],navig:16,need:[14,16],new_textgrid:0,newer:16,newnam:11,next_word:3,none:[0,3,7,11],normal:7,np:6,number:[5,7,11],numer:7,numpi:8,o:9,object:[1,3,7,11],observ:[6,8],obvious:6,octob:16,off:16,often:16,older:16,omit:16,onc:16,one:[7,16],ongo:[14,16],open:15,option:[2,16],order:[14,16],origin:7,other:[0,3,16],out:[7,15,16],outli:8,outlier:8,output:[8,16],outputalign:[15,16],outputfilenam:[15,16],outputplotnikfil:7,over:16,overal:0,ow:9,own:[8,16],oy:9,packag:16,page:12,par:11,param:3,paramet:11,parenthes:7,part:3,particularli:6,patch:16,path:3,pc:7,peopl:16,person:16,phila_system:7,philadelphia:7,phone:[3,7],phonem:3,phoneset:[3,7],phonet:3,pip:[13,16],place:7,pleas:[12,14],plotnik:[5,10],plt:7,plt_folseq:7,plt_manner:7,plt_place:7,plt_preseg:7,plt_voic:7,plt_vowel:7,pltfile:7,point:[0,11],pointtier:11,possibl:16,praat:[10,12,14],praatpath:0,prec_p:7,preced:7,predict:[8,11],preprocess:2,preprocess_transcript:2,present:7,previou:16,problem:16,process:[0,2,16],process_measurement_lin:7,process_plt_fil:7,process_style_ti:0,program:[0,16],programm:[10,16],prompt:2,pronounc:[3,7],pronunci:3,pronunciation_dictionari:2,proper:16,prune:8,prunevowel:8,ps:7,publish:14,py:[0,15],pypi:14,python3:[14,15,16],python:[13,14],question:13,quick:16,quickstart:[12,13],quot:2,rais:3,ran:16,random:6,re:16,reach:16,read:[0,2,3,7,11,12,16],read_dict:3,read_phoneset:3,read_transcript:0,read_transcription_fil:2,readabl:7,readm:16,receiv:16,recommend:16,redefin:7,releas:16,reli:16,remain:16,remeasur:[5,10],renam:11,repai:16,replac:[2,16],replace_smart_quot:2,report:14,repredictf1f2:8,repres:[3,7,8,11],represent:3,requir:[7,13],research:16,restructur:16,review:16,rewrit:16,right:16,risk:16,riski:16,rmformantfil:4,run:16,s:[3,8,12,13],sai:16,same:[3,6],sampl:6,save:11,schedul:16,scipi:6,script:[0,10,15,16],search:12,second:[7,11],section:[10,13,16],secur:16,see:[14,16],segment:7,select:[2,8],semant:16,sensibl:16,sensit:16,separ:7,sequenc:7,seri:11,set:15,sex:7,should:[8,16],similar:16,simpli:16,sinc:16,singl:7,situat:16,size:16,slight:14,slightli:16,small:16,so:16,softwar:[12,13],some:[6,16],sometim:14,soon:16,sooner:16,sort:11,sort_interv:11,sound:16,soundfil:0,sox:14,spatial:6,speaker:[0,7,8],specif:16,specifi:16,split:7,split_stress_digit:7,sqrt:6,stabl:16,start:[11,16],state:7,stem:4,step:16,still:16,straight:2,stress:7,string:3,structur:16,style2plotnik:7,style:[0,3,7],style_ti:0,stylecod:7,subject:7,success:16,sum:6,sunset:16,support:[14,16],sure:[8,16],syllabl:7,syntax:16,system:[14,16],t:6,tab:2,taken:8,tape:16,techinc:16,technic:16,telsur:7,tempdir:0,termin:16,text:11,textgrid:[0,11,15,16],tgfile:0,than:[7,16],thei:14,them:[3,8,16],thi:[6,10,12,13,14,16],thing:16,those:16,through:16,thrown:6,tidyup:11,tier:[0,11],time:[11,16],token:[7,8],top:16,trade:16,tran:7,transcript:[1,2,3,7,11,15,16],transcriptionfil:[15,16],transcriptprocessor:[0,1,10,16],translat:7,transript_fil:2,tri:8,trsfile:0,tsv:[15,16],two:[1,3,6],txt:[3,15,16],type:8,u:[6,9],udnerstand:16,understood:16,uniqu:7,unknown:[2,3,16],unknown_word:[15,16],unlik:16,unstress:7,until:16,updat:13,upglid:9,upper:7,us:[0,6,10,12,13,14],usag:[10,16],user:[0,2,3,10,12,14,16],uw:9,v2:16,v3:16,v:[6,9],vagu:16,valu:[7,11],valueerror:6,vector:6,version:[3,12,13],voic:7,vowel:[5,7,8,10],vowelcov:8,vowelmean:8,vowelmeasur:[7,8],vowelsystem:7,vulner:16,wai:[0,16],want:10,wav:[15,16],wavfil:[0,2],we:16,websit:[12,16],were:16,what:[12,13],when:[6,16],where:[6,16],whether:[3,7,9],which:[8,16],who:[10,16],wide:16,word2fnam:7,word2tran:7,word:[2,3,7,15,16],work:[3,14],workflow:16,would:[10,14,16],wrapper:2,write:[2,3,7,8,11],write_dict:3,write_unknown_word:3,written:16,x:8,xmax:11,xmin:11,xrang:6,xxxxx:7,year:16,you:[10,12,14,16],your:[10,14,15],yourself:12},titles:["FAVE Aligner module","FAVE Align module","FAVE TranscriptProcessor module","FAVE CMU Dictionary module","FAVE esps module","FAVE Extract module","FAVE Mahalanobis module","FAVE Plotnik module","FAVE Remeasure module","FAVE Vowel module","Module documentation","FAVE Praat module","Forced Alignment and Vowel Extraction (FAVE)","FAVE User Guides","Installing FAVE 2","Quickstart guide to using FAVE 2.0","What\u2019s new in version 2"],titleterms:{"0":15,"2":[14,15,16],"new":16,The:16,align:[0,1,12,16],ask:16,check:16,cmu:3,content:16,data:16,dictionari:3,differ:16,document:[10,12],doe:16,esp:4,extract:[5,12,16],extractform:16,faavalign:16,fave:[0,1,2,3,4,5,6,7,8,9,11,12,13,14,15,16],forc:12,frequent:16,get:16,guid:[12,13,15],indic:12,instal:[14,16],mahalanobi:6,manag:14,modul:[0,1,2,3,4,5,6,7,8,9,10,11,16],old:16,other:14,packag:14,pip:14,plotnik:7,praat:11,py:16,python:16,question:16,quickstart:15,remeasur:8,requir:14,s:16,softwar:[14,16],transcriptprocessor:2,updat:16,us:[15,16],user:13,version:16,vowel:[9,12,16],wa:16,what:16,why:16,work:16,wrong:16,your:16}}) \ No newline at end of file +Search.setIndex({docnames:["code/align/aligner","code/align/index","code/align/transcriptprocessor","code/cmudictionary","code/extract/esps","code/extract/index","code/extract/mahalanobis","code/extract/plotnik","code/extract/remeasure","code/extract/vowel","code/index","code/praat","index","usage/cli_startup/cli_setup","usage/index","usage/installation","usage/quickstart","usage/whats-new"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":5,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":3,"sphinx.domains.rst":2,"sphinx.domains.std":2,sphinx:56},filenames:["code/align/aligner.md","code/align/index.md","code/align/transcriptprocessor.md","code/cmudictionary.md","code/extract/esps.md","code/extract/index.md","code/extract/mahalanobis.md","code/extract/plotnik.md","code/extract/remeasure.md","code/extract/vowel.md","code/index.md","code/praat.md","index.md","usage/cli_startup/cli_setup.md","usage/index.md","usage/installation.md","usage/quickstart.md","usage/whats-new.md"],objects:{"fave.align":[[0,0,0,"-","aligner"],[2,0,0,"-","transcriptprocessor"]],"fave.align.aligner":[[0,1,1,"","Aligner"]],"fave.align.aligner.Aligner":[[0,2,1,"","align"],[0,2,1,"","check_against_dictionary"],[0,2,1,"","check_transcript"],[0,2,1,"","get_duration"],[0,2,1,"","merge_textgrids"],[0,2,1,"","process_style_tier"],[0,2,1,"","read_transcript"]],"fave.align.transcriptprocessor":[[2,1,1,"","TranscriptProcessor"]],"fave.align.transcriptprocessor.TranscriptProcessor":[[2,2,1,"","check_dictionary_entries"],[2,2,1,"","check_transcription_file"],[2,2,1,"","check_transcription_format"],[2,2,1,"","preprocess_transcription"],[2,2,1,"","read_transcription_file"],[2,2,1,"","replace_smart_quotes"]],"fave.cmudictionary":[[3,1,1,"","CMU_Dictionary"],[3,1,1,"","Phone"],[3,3,1,"","read_dict"],[3,3,1,"","read_phoneset"]],"fave.cmudictionary.CMU_Dictionary":[[3,2,1,"","add_dictionary_entries"],[3,2,1,"","check_phone"],[3,2,1,"","check_transcription"],[3,2,1,"","check_word"],[3,2,1,"","merge_dicts"],[3,2,1,"","read"],[3,2,1,"","write_dict"],[3,2,1,"","write_unknown_words"]],"fave.extract":[[4,0,0,"-","esps"],[6,0,0,"-","mahalanobis"],[7,0,0,"-","plotnik"],[8,0,0,"-","remeasure"],[9,0,0,"-","vowel"]],"fave.extract.esps":[[4,3,1,"","rmFormantFiles"]],"fave.extract.mahalanobis":[[6,3,1,"","mahalanobis"]],"fave.extract.plotnik":[[7,1,1,"","PltFile"],[7,1,1,"","VowelMeasurement"],[7,3,1,"","arpabet2plotnik"],[7,3,1,"","cmu2plotnik_code"],[7,3,1,"","convertDur"],[7,3,1,"","convertStress"],[7,3,1,"","get_age"],[7,3,1,"","get_city"],[7,3,1,"","get_first_name"],[7,3,1,"","get_last_name"],[7,3,1,"","get_n"],[7,3,1,"","get_n_foll_c"],[7,3,1,"","get_n_foll_syl"],[7,3,1,"","get_s"],[7,3,1,"","get_sex"],[7,3,1,"","get_state"],[7,3,1,"","get_stressed_v"],[7,3,1,"","get_ts"],[7,3,1,"","is_v"],[7,3,1,"","outputPlotnikFile"],[7,3,1,"","phila_system"],[7,3,1,"","plt_folseq"],[7,3,1,"","plt_ipa"],[7,3,1,"","plt_manner"],[7,3,1,"","plt_place"],[7,3,1,"","plt_preseg"],[7,3,1,"","plt_voice"],[7,3,1,"","plt_vowels"],[7,3,1,"","process_measurement_line"],[7,3,1,"","process_plt_file"],[7,3,1,"","split_stress_digit"],[7,3,1,"","style2plotnik"],[7,3,1,"","word2fname"],[7,3,1,"","word2trans"]],"fave.extract.remeasure":[[8,1,1,"","VowelMeasurement"],[8,3,1,"","calculateVowelMeans"],[8,3,1,"","createVowelDictionary"],[8,3,1,"","excludeOutliers"],[8,3,1,"","loadfile"],[8,3,1,"","output"],[8,3,1,"","pruneVowels"],[8,3,1,"","repredictF1F2"]],"fave.extract.vowel":[[9,3,1,"","isDiphthong"],[9,3,1,"","isIngliding"],[9,3,1,"","isShort"],[9,3,1,"","isUpgliding"]],"fave.praat":[[11,1,1,"","Formant"],[11,1,1,"","Intensity"],[11,1,1,"","Interval"],[11,1,1,"","IntervalTier"],[11,1,1,"","LPC"],[11,1,1,"","MFCC"],[11,1,1,"","Point"],[11,1,1,"","PointTier"],[11,1,1,"","TextGrid"]],"fave.praat.Formant":[[11,2,1,"","bandwidths"],[11,2,1,"","formants"],[11,2,1,"","intensities"],[11,2,1,"","n"],[11,2,1,"","read"],[11,2,1,"","times"],[11,2,1,"","xmax"],[11,2,1,"","xmin"]],"fave.praat.Intensity":[[11,2,1,"","read"]],"fave.praat.IntervalTier":[[11,2,1,"","rename"],[11,2,1,"","sort_intervals"],[11,2,1,"","tidyup"]],"fave.praat.LPC":[[11,2,1,"","read"]],"fave.praat.MFCC":[[11,2,1,"","read"]],"fave.praat.TextGrid":[[11,2,1,"","read"],[11,2,1,"","write"]],fave:[[3,0,0,"-","cmudictionary"],[11,0,0,"-","praat"]]},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"],"3":["py","function","Python function"]},objtypes:{"0":"py:module","1":"py:class","2":"py:method","3":"py:function"},terms:{"0":[6,7,11,12,14,17],"1":[6,17],"10":17,"12":17,"14":17,"1d":6,"2":[12,14],"2000":17,"2006":17,"2008":17,"2014":17,"2015":17,"2020":17,"2022":17,"3":[7,17],"4":17,"5":[2,6,17],"7":17,"8":[7,17],"9":17,"break":17,"case":[6,7],"class":[0,1,2,3,5,7,8,11],"default":[11,16],"do":17,"final":7,"function":[0,2,3,5],"import":[6,16,17],"long":[11,17],"new":[3,11,12,14,16],"return":[2,3,7,8,11],"short":[9,11],"static":[2,3],"true":[6,9],"try":17,A:6,As:17,For:17,If:[2,10,12,15,17],In:17,It:[0,1,5,8,17],The:[0,1,5,12,14],These:17,To:17,_:6,_ic_:6,_u_:6,_v_:6,abil:17,abov:17,ac:7,accord:[8,11,16],account:17,accumul:17,acoust:5,add:[0,2,3,7,17],add_dictionary_entri:3,addit:3,ae:9,after:17,ag:[7,17],again:17,against:6,ah:9,align:[2,5,10,14,15,16],all:[0,2,4,17],all_input:2,allow:[0,3,17],alreadi:[15,17],also:17,alwai:17,among:17,an:[2,6,8,11],ani:[3,17],announc:17,api:17,appli:17,ar:[6,8,10,15,17],area:17,arg:2,argument:17,arpabet2plotnik:7,arpabet:[2,3,7],arrai:[6,8],ask:[12,14],assign:[3,11],assum:17,attempt:17,audio:[5,16],audiofil:[16,17],august:17,author:3,autom:0,avail:[15,17],avoid:17,aw:9,ay:9,b1:8,b3:8,bandaid:17,bandwidth:11,base:[8,17],batch:17,becaus:17,becom:6,befor:[12,15,17],began:17,begin:16,behavior:17,being:17,best:17,between:[0,6,11,12],brickhous:17,bug:[15,17],build:17,built:17,c:17,calcul:8,calculatevowelmean:8,came:17,can:[11,15,17],categori:8,caus:17,cd:7,cepstral:11,chang:17,charact:7,check:[0,2,3,6,7,9,12,16],check_against_dictionari:0,check_dictionary_entri:2,check_phon:3,check_transcript:[0,3],check_transcription_fil:2,check_transcription_format:2,check_word:3,christian:17,chunkname_textgrid:0,citi:7,cmu2plotnik_cod:7,cmu:[2,7],cmu_dictionari:3,cmudictionari:[3,10,12],coda:7,code:[7,11,17],coeffici:11,come:17,command:17,comment:7,compat:17,complet:17,complex:17,comput:[6,15],configur:17,conform:3,conson:7,contain:[0,1,5,14,17],content:[0,7],continu:17,contour:11,contribut:[10,15],convert:7,convertdur:7,convertstress:7,coordin:0,correct:2,correspond:7,could:17,count:7,cov:6,covari:[6,8],creat:[8,16,17],createvoweldictionari:8,current:[12,17],custom:17,custom_dictionari:[16,17],customiz:17,d1:3,d2:3,data:[2,7,12,14,16],date:17,debian:15,debt:17,defin:6,delet:[2,4],delimit:2,depend:[6,16,17],deprec:17,detail:17,develop:[10,17],dict:[2,3],dictionari:[0,2,7,8,16,17],dictionary_fil:3,differ:[0,12],digit:7,dimens:6,diphthong:9,direct:16,directli:17,distanc:[6,8],distinct:3,distribut:8,doc:[],document:17,doe:12,doubl:[7,17],download:[16,17],duct:17,dur:7,durat:[0,7,8],dure:17,e:9,each:[3,8,11,16],easi:[0,17],easier:17,easili:17,either:11,empti:[2,11],end:[10,11,17],enough:8,enter:[3,7],entri:[0,2,3],environment:7,error:17,esp:[5,10,12],etc:17,euclidean:6,evanini:3,even:17,everi:17,exampl:17,exclud:8,excludeoutli:8,exist:[7,17],exit:2,extend:17,extens:4,extract:[4,6,7,8,9,10,14,15,16],extractform:[8,12,16],ey:[6,9],f1:[8,11],f2:8,f3:11,f:[3,7],faav:2,faavalign:[12,16],fadir:0,fail:17,familiar:12,fanci:2,fave:10,featur:[3,17],februari:17,feel:15,field:2,file:[0,1,2,3,4,5,7,8,11,17],filenam:[7,11],filestem:4,find:[8,10],first:7,fix:17,flag:17,fm:7,fname:3,folder:17,foll_p:7,follow:[7,17],forc:[2,16,17],formant:[7,11,16,17],format:[2,7,8,11],foundat:17,fp:7,frame:11,free:15,frequenc:11,frequent:[12,14],freuhwald:17,from:[2,3,5,6,7,8,11,17],fs:7,full:17,futur:17,fv:7,gap:11,genindex:[],get:[0,12],get_:7,get_ag:7,get_citi:7,get_dur:0,get_first_nam:7,get_last_nam:7,get_n:7,get_n_foll_c:7,get_n_foll_syl:7,get_sex:7,get_stat:7,get_stressed_v:7,get_t:7,given:[3,4,11],glide:7,go:17,good:17,greater:17,guid:17,h:17,ha:17,had:17,handl:[0,2],hard:17,harder:17,have:[2,12,17],header:7,help:[10,17],higher:17,highli:17,histori:17,hold:17,how:[14,17],htk:15,i:[7,9,17],ic:6,ident:6,identifi:8,improv:17,includ:[7,16,17],incorrect:6,increas:17,index:[3,7,8,15],indexerror:3,indic:8,infil:3,inglid:9,input:2,insert:11,instal:[12,14,16],instruct:17,integ:7,intens:11,interact:0,interfac:[0,17],intern:[10,17],interpret:[],interv:11,intervalti:11,introduc:17,inv:6,invers:6,ipa:7,irrespons:17,is_v:7,isdiphthong:9,isinglid:9,isshort:9,isupglid:9,its:[16,17],iy:9,januari:17,josef:17,keelan:3,keep:17,knowledg:17,known:17,kwarg:[0,2,3],label:[3,7],labovian:7,langaug:17,languag:17,larg:17,larger:0,last:7,latest:17,learn:14,least:17,leav:17,left:[8,17],legaci:12,less:17,letter:7,librari:[0,15],licens:17,life:17,like:[7,10,15,17],limit:7,linalg:6,line:[2,3,7,8,17],linear:11,list:[2,3,8,11,16,17],littl:17,load:[8,17],loadfil:8,locat:17,longer:17,lookup:2,lpc:11,m:[15,17],mac:15,made:17,mahalanobi:[5,8,10,12],mahalanobis_scipi:6,mai:17,main:0,main_textgrid:0,maintain:17,make:[7,8,17],manag:[12,17],mani:17,manipul:1,manner:7,manual:15,mark:11,matric:8,matrix:6,maxdepth:[],maximum:11,mean:[6,8,17],measur:[5,7,8,11],mel:11,memori:2,merg:3,merge_dict:3,merge_textgrid:0,mfa:17,mfcc:11,might:[15,17],migrat:17,modif:15,modifi:7,modindex:[],modul:[12,14],moment:15,montral:17,more:[7,10,17],msec:7,multipl:3,n:[6,11],name:[7,11,17],navig:17,need:[15,17],new_textgrid:0,newer:17,newnam:11,next_word:3,none:[0,3,7,11],normal:7,note:[],np:6,number:[5,7,11],numer:7,numpi:8,o:9,object:[1,3,7,11],observ:[6,8],obvious:6,octob:17,off:17,often:17,old:12,older:17,omit:17,onc:17,one:[7,17],ongo:[15,17],open:16,option:[2,17],order:[15,17],origin:7,other:[0,3,12,17],out:[7,16,17],outli:8,outlier:8,output:[8,17],outputalign:[16,17],outputfilenam:[16,17],outputplotnikfil:7,over:17,overal:0,ow:9,own:[8,17],oy:9,packag:[12,17],page:[],par:11,param:3,paramet:11,parenthes:7,part:3,particularli:6,patch:17,path:3,pc:7,peopl:17,person:17,phila_system:7,philadelphia:7,phone:[3,7],phonem:3,phoneset:[3,7],phonet:3,pip:[12,14,17],place:7,pleas:[12,15],plotnik:[5,10,12],plt:7,plt_folseq:7,plt_ipa:7,plt_manner:7,plt_place:7,plt_preseg:7,plt_voic:7,plt_vowel:7,pltfile:7,point:[0,11],pointtier:11,possibl:17,praat:[10,12,15],praatpath:0,prec_p:7,preced:7,predict:[8,11],preprocess:2,preprocess_transcript:2,present:7,previou:17,problem:17,process:[0,2,17],process_measurement_lin:7,process_plt_fil:7,process_style_ti:0,program:[0,17],programm:[10,17],prompt:2,pronounc:[3,7],pronunci:3,pronunciation_dictionari:2,proper:17,prune:8,prunevowel:8,ps:7,publish:15,py:[0,12,16],pypi:15,python3:[15,16,17],python:[12,14,15],question:[12,14],quick:17,quickstart:[12,14],quot:2,rais:3,ran:17,random:6,re:17,reach:17,read:[0,2,3,7,11,12,17],read_dict:3,read_phoneset:3,read_transcript:0,read_transcription_fil:2,readabl:7,readm:17,receiv:17,recommend:17,redefin:7,ref:[],releas:17,reli:17,remain:17,remeasur:[5,10,12],renam:11,repai:17,replac:[2,17],replace_smart_quot:2,report:15,repredictf1f2:8,repres:[3,7,8,11],represent:3,requir:[7,12,14],research:17,restructur:17,review:17,rewrit:17,right:17,risk:17,riski:17,rmformantfil:4,role:[],run:17,s:[3,8,12,14],sai:17,same:[3,6],sampl:6,save:11,schedul:17,scipi:6,script:[0,10,16,17],search:[],second:[7,11],section:[10,14,17],secur:17,see:[15,17],segment:7,select:[2,8],semant:17,sensibl:17,sensit:17,separ:7,sequenc:7,seri:11,set:16,sex:7,should:[8,17],similar:17,simpli:17,sinc:17,singl:7,situat:17,size:17,slight:15,slightli:17,small:17,so:17,softwar:[12,14],some:[6,17],sometim:15,soon:17,sooner:17,sort:11,sort_interv:11,sound:17,soundfil:0,sox:15,spatial:6,speaker:[0,7,8],specif:17,specifi:17,split:7,split_stress_digit:7,sqrt:6,stabl:17,start:[11,17],state:7,stem:4,step:17,still:17,straight:2,stress:7,string:3,structur:17,style2plotnik:7,style:[0,3,7],style_ti:0,stylecod:7,subject:7,success:17,sum:6,sunset:17,support:[15,17],sure:[8,17],syllabl:7,syntax:17,system:[15,17],t:6,tab:2,taken:8,tape:17,techinc:17,technic:17,telsur:7,tempdir:0,termin:17,text:11,textgrid:[0,11,16,17],tgfile:0,than:[7,17],thei:15,them:[3,8,17],thi:[6,10,12,14,15,17],thing:17,those:17,through:17,thrown:6,tidyup:11,tier:[0,11],time:[11,17],titl:[],toctre:[],token:[7,8],top:17,trade:17,tran:7,transcript:[1,2,3,7,11,16,17],transcriptionfil:[16,17],transcriptprocessor:[0,1,10,12,17],translat:7,transript_fil:2,tri:8,trsfile:0,tsv:[16,17],two:[1,3,6],txt:[3,16,17],type:8,u:[6,9],udnerstand:17,understood:17,uniqu:7,unknown:[2,3,17],unknown_word:[16,17],unlik:17,unstress:7,until:17,updat:[12,14],upglid:9,upper:7,us:[0,6,10,12,14,15],usag:[10,12,17],user:[0,2,3,10,15,17],uw:9,v2:17,v3:17,v:[6,9],vagu:17,valu:[7,11],valueerror:6,vector:6,version:[3,12,14],voic:7,vowel:[5,7,8,10],vowelcov:8,vowelmean:8,vowelmeasur:[7,8],vowelsystem:7,vulner:17,wa:12,wai:[0,17],want:10,warn:[],wav:[16,17],wavfil:[0,2],we:17,websit:[12,17],were:17,what:[12,14],when:[6,17],where:[6,17],whether:[3,7,9],which:[8,17],who:[10,17],why:12,wide:17,word2fnam:7,word2tran:7,word:[2,3,7,16,17],work:[3,12,15],workflow:17,would:[10,15,17],wrapper:2,write:[2,3,7,8,11],write_dict:3,write_unknown_word:3,written:17,wrong:12,x:8,xmax:11,xmin:11,xrang:6,xxxxx:7,year:17,you:[10,12,15,17],your:[10,12,15,16],yourself:12},titles:["FAVE Aligner module","FAVE Align module","FAVE TranscriptProcessor module","FAVE CMU Dictionary module","FAVE esps module","FAVE Extract module","FAVE Mahalanobis module","FAVE Plotnik module","FAVE Remeasure module","FAVE Vowel module","Module documentation","FAVE Praat module","Forced Alignment and Vowel Extraction (FAVE)","<no title>","FAVE User Guides","Installing FAVE 2","Quickstart guide to using FAVE 2.0","What\u2019s new in version 2"],titleterms:{"0":16,"2":[15,16,17],"new":17,For:12,The:17,align:[0,1,12,17],ask:17,check:17,cmu:3,content:17,data:17,develop:12,dictionari:3,differ:17,document:[10,12],doe:17,esp:4,extract:[5,12,17],extractform:17,faavalign:17,fave:[0,1,2,3,4,5,6,7,8,9,11,12,14,15,16,17],forc:12,frequent:17,get:17,guid:[12,14,16],indic:[],instal:[15,17],mahalanobi:6,manag:15,modul:[0,1,2,3,4,5,6,7,8,9,10,11,17],old:17,other:15,packag:15,pip:15,plotnik:7,praat:11,py:17,python:17,question:17,quickstart:16,remeasur:8,requir:15,s:17,softwar:[15,17],transcriptprocessor:2,updat:17,us:[16,17],user:[12,14],version:17,vowel:[9,12,17],wa:17,what:17,why:17,work:17,wrong:17,your:17}}) \ No newline at end of file diff --git a/docs/_build/html/usage/installation.html b/docs/_build/html/usage/installation.html index 294074b..755049b 100644 --- a/docs/_build/html/usage/installation.html +++ b/docs/_build/html/usage/installation.html @@ -6,7 +6,7 @@ - Installing FAVE 2 — Forced Alignment and Vowel Extraction (FAVE) 2.0.1 documentation + Installing FAVE 2 — Forced Alignment and Vowel Extraction (FAVE) 2.0.2-dev documentation @@ -40,7 +40,7 @@

    Navigation

  • previous |
  • - + @@ -55,13 +55,11 @@

    Navigation

    Installing FAVE 2

    Required software

    -
    -
    FAVE sometimes requires other software libraries in order to work.
      +

      FAVE sometimes requires other software libraries in order to work.

      +
      • FAVE-align requires SoX and HTK.

      • FAVE-extract requires Praat.

      -
    -

    You will need to manually install these if they are not already installed on your computer.

    Warning

    @@ -76,7 +74,7 @@

    Install with PIP

    Other package managers

    -

    Work is ongoing to publish FAVE as a debian package, but no other package system is supported at the moment. If you would like to package FAVE for your system, please feel free to contribute!

    +

    Work is ongoing to publish FAVE as a debian package, but no other package system is supported at the moment. If you would like to package FAVE for your system, please feel free to contribute

    @@ -115,7 +113,7 @@

    Next topic

    This Page

    @@ -148,7 +146,7 @@

    Navigation

  • previous |
  • - + diff --git a/docs/_build/html/usage/quickstart.html b/docs/_build/html/usage/quickstart.html index 8c36a6e..0687481 100644 --- a/docs/_build/html/usage/quickstart.html +++ b/docs/_build/html/usage/quickstart.html @@ -6,7 +6,7 @@ - Quickstart guide to using FAVE 2.0 — Forced Alignment and Vowel Extraction (FAVE) 2.0.1 documentation + Quickstart guide to using FAVE 2.0 — Forced Alignment and Vowel Extraction (FAVE) 2.0.2-dev documentation @@ -40,7 +40,7 @@

    Navigation

  • previous |
  • - + @@ -53,37 +53,36 @@

    Navigation

    Quickstart guide to using FAVE 2.0

    -
    -
      +
      1. Install FAVE and its dependencies according to the directions.

      2. Download the FAAValign.py and extractFormants.py scripts.

      3. -
      4. Check your transcription for out-of-dictionary words

        +
      5. Check your transcription for out-of-dictionary words

      6. +
      Check for out-of-dictionary words
      python3 FAAValign.py --check unknown_words.txt AudioFile.wav TranscriptionFile.txt OutputAlignment.TextGrid
       
      - +
      1. Open unknown_words.txt and create a transcription for each word listed.

      2. -
      3. Align your audio and transcripts including your new transcriptions:

        +
      4. Align your audio and transcripts including your new transcriptions:

      5. +
      Begin forced alignment
      python3 FAAValign.py --import custom_dictionary.txt AudioFile.wav TranscriptionFile.txt OutputAlignment.TextGrid
       
      - -
    1. Extract formant data using the default settings:

      +
        +
      1. Extract formant data using the default settings:

      2. +
      Extract formant data
      python3 extractFormants.py AudioFile.wav Alignment.TextGrid OutputFileName.tsv
       
      -
    2. -
    -
    @@ -106,7 +105,7 @@

    Next topic

    This Page

    @@ -139,7 +138,7 @@

    Navigation

  • previous |
  • - + diff --git a/docs/code/align/aligner.rst b/docs/code/align/aligner.md similarity index 54% rename from docs/code/align/aligner.rst rename to docs/code/align/aligner.md index 5b4e893..befa0e9 100644 --- a/docs/code/align/aligner.rst +++ b/docs/code/align/aligner.md @@ -1,5 +1,6 @@ -FAVE Aligner module -=================== +# FAVE Aligner module +```{eval-rst} .. automodule:: fave.align.aligner :members: +``` diff --git a/docs/code/align/index.rst b/docs/code/align/index.md similarity index 60% rename from docs/code/align/index.rst rename to docs/code/align/index.md index 1d6255f..c60c483 100644 --- a/docs/code/align/index.rst +++ b/docs/code/align/index.md @@ -1,9 +1,9 @@ -FAVE Align module -================= +# FAVE Align module The FAVE Align module contains classes for the manipulation of transcripts and alignment objects. It contains two files. -.. toctree:: - aligner - transcriptprocessor +```{toctree} +aligner +transcriptprocessor +``` diff --git a/docs/code/align/transcriptprocessor.md b/docs/code/align/transcriptprocessor.md new file mode 100644 index 0000000..b82360f --- /dev/null +++ b/docs/code/align/transcriptprocessor.md @@ -0,0 +1,6 @@ +# FAVE TranscriptProcessor module + +```{eval-rst} +.. automodule:: fave.align.transcriptprocessor + :members: +``` diff --git a/docs/code/align/transcriptprocessor.rst b/docs/code/align/transcriptprocessor.rst deleted file mode 100644 index d5a26ec..0000000 --- a/docs/code/align/transcriptprocessor.rst +++ /dev/null @@ -1,5 +0,0 @@ -FAVE TranscriptProcessor module -=============================== - -.. automodule:: fave.align.transcriptprocessor - :members: diff --git a/docs/code/cmudictionary.md b/docs/code/cmudictionary.md new file mode 100644 index 0000000..19d1898 --- /dev/null +++ b/docs/code/cmudictionary.md @@ -0,0 +1,6 @@ +# FAVE CMU Dictionary module + +```{eval-rst} +.. automodule:: fave.cmudictionary + :members: +``` diff --git a/docs/code/cmudictionary.rst b/docs/code/cmudictionary.rst deleted file mode 100644 index ca74086..0000000 --- a/docs/code/cmudictionary.rst +++ /dev/null @@ -1,5 +0,0 @@ -FAVE CMU Dictionary module -========================== - -.. automodule:: fave.cmudictionary - :members: diff --git a/docs/code/extract/esps.rst b/docs/code/extract/esps.md similarity index 51% rename from docs/code/extract/esps.rst rename to docs/code/extract/esps.md index fb38b95..c54a1b7 100644 --- a/docs/code/extract/esps.rst +++ b/docs/code/extract/esps.md @@ -1,5 +1,6 @@ -FAVE esps module -========================== +# FAVE esps module +```{eval-rst} .. automodule:: fave.extract.esps :members: +``` diff --git a/docs/code/extract/index.rst b/docs/code/extract/index.md similarity index 61% rename from docs/code/extract/index.rst rename to docs/code/extract/index.md index af27ecd..10f3ffe 100644 --- a/docs/code/extract/index.rst +++ b/docs/code/extract/index.md @@ -1,12 +1,12 @@ -FAVE Extract module -=================== +# FAVE Extract module The FAVE Extract module contains functions and classes for extracting acoustic measurements of vowels from aligned audio. It contains a number of files. -.. toctree:: - esps - mahalanobis - plotnik - remeasure - vowel +```{toctree} +esps +mahalanobis +plotnik +remeasure +vowel +``` diff --git a/docs/code/extract/mahalanobis.rst b/docs/code/extract/mahalanobis.md similarity index 52% rename from docs/code/extract/mahalanobis.rst rename to docs/code/extract/mahalanobis.md index 5ebc960..b37aa56 100644 --- a/docs/code/extract/mahalanobis.rst +++ b/docs/code/extract/mahalanobis.md @@ -1,5 +1,6 @@ -FAVE Mahalanobis module -======================= +# FAVE Mahalanobis module +```{eval-rst} .. automodule:: fave.extract.mahalanobis :members: +``` diff --git a/docs/code/extract/plotnik.rst b/docs/code/extract/plotnik.md similarity index 55% rename from docs/code/extract/plotnik.rst rename to docs/code/extract/plotnik.md index 2e58806..1b8d125 100644 --- a/docs/code/extract/plotnik.rst +++ b/docs/code/extract/plotnik.md @@ -1,5 +1,6 @@ -FAVE Plotnik module -=================== +# FAVE Plotnik module +```{eval-rst} .. automodule:: fave.extract.plotnik :members: +``` diff --git a/docs/code/extract/remeasure.rst b/docs/code/extract/remeasure.md similarity index 51% rename from docs/code/extract/remeasure.rst rename to docs/code/extract/remeasure.md index 716c31f..b95fe91 100644 --- a/docs/code/extract/remeasure.rst +++ b/docs/code/extract/remeasure.md @@ -1,5 +1,6 @@ -FAVE Remeasure module -========================== +# FAVE Remeasure module +```{eval-rst} .. automodule:: fave.extract.remeasure :members: +``` diff --git a/docs/code/extract/vowel.rst b/docs/code/extract/vowel.md similarity index 51% rename from docs/code/extract/vowel.rst rename to docs/code/extract/vowel.md index 500cee6..49e4601 100644 --- a/docs/code/extract/vowel.rst +++ b/docs/code/extract/vowel.md @@ -1,5 +1,6 @@ -FAVE Vowel module -========================== +# FAVE Vowel module +```{eval-rst} .. automodule:: fave.extract.vowel :members: +``` diff --git a/docs/code/index.md b/docs/code/index.md new file mode 100644 index 0000000..80a0b79 --- /dev/null +++ b/docs/code/index.md @@ -0,0 +1,10 @@ +# Module documentation + +This section documents the internals of FAVE. If you are a programmer who wants to use FAVE as a module in your scripts or would like to contribute to FAVE as a developer, these documents will be useful to you. End users will find the {doc}`usage <../usage/index>` section more helpful. + +```{toctree} +fave.align +fave.extract +fave.cmudictionary +fave.praat +``` diff --git a/docs/code/index.rst b/docs/code/index.rst deleted file mode 100644 index 0354d5a..0000000 --- a/docs/code/index.rst +++ /dev/null @@ -1,10 +0,0 @@ -Module documentation -==================== - -This section documents the internals of FAVE. If you are a programmer who wants to use FAVE as a module in your scripts or would like to contribute to FAVE as a developer, these documents will be useful to you. End users will find the :doc:`usage <../usage/index>` section more helpful. - -.. toctree:: - fave.align - fave.extract - fave.cmudictionary - fave.praat diff --git a/docs/code/praat.rst b/docs/code/praat.md similarity index 51% rename from docs/code/praat.rst rename to docs/code/praat.md index 8cb3b87..069e77c 100644 --- a/docs/code/praat.rst +++ b/docs/code/praat.md @@ -1,5 +1,6 @@ -FAVE Praat module -================= +# FAVE Praat module +```{eval-rst} .. automodule:: fave.praat :members: +``` diff --git a/docs/conf.py b/docs/conf.py index 9fd2a62..255e028 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -57,7 +57,7 @@ # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. -extensions = ['sphinx.ext.autodoc','sphinx.ext.napoleon'] +extensions = ['sphinx.ext.autodoc','sphinx.ext.napoleon', "myst_parser"] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..98de552 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,29 @@ +# Forced Alignment and Vowel Extraction (FAVE) + +This website documents the FAVE software, version 2. + +```{warning} +If you have used FAVE before, please read +[usage/whats-new](usage/whats-new.rst) to familiarize yourself +with the differences between the current and legacy versions of FAVE. +``` + + +## Guides and documentation + +### For Users + +```{toctree} maxdepth: 2 +usage/index +``` + +### For Developers + +```{toctree} maxdepth: 2 +code/index +``` + + + diff --git a/docs/index.rst b/docs/index.rst deleted file mode 100644 index c4fe4d0..0000000 --- a/docs/index.rst +++ /dev/null @@ -1,27 +0,0 @@ -.. Forced Alignment and Vowel Extraction documentation master file, created by - sphinx-quickstart on Thu May 14 23:03:08 2020. - You can adapt this file completely to your liking, but it should at least - contain the root `toctree` directive. - -Forced Alignment and Vowel Extraction (FAVE) -============================================ - -This website documents the FAVE software, version 2. - -.. warning:: - If you have used FAVE before, please read :doc:`usage/whats-new` to familiarize yourself with the differences between the current and legacy versions of FAVE. - -Guides and documentation ------------------------- -.. toctree:: - :maxdepth: 2 - - usage/index - code/index - -Indices -------- - -* :ref:`genindex` -* :ref:`modindex` -* :ref:`search` diff --git a/docs/requirements.txt b/docs/requirements.txt index 27ef656..da3fba6 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,2 +1,3 @@ jinja2==3.0.0 sphinx-pyproject==0.1.0 +myst-parser~=0.18 diff --git a/docs/usage/cli_startup/cli_setup.md b/docs/usage/cli_startup/cli_setup.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/usage/index.md b/docs/usage/index.md new file mode 100644 index 0000000..b348fb2 --- /dev/null +++ b/docs/usage/index.md @@ -0,0 +1,11 @@ +# FAVE User Guides + +This section contains user guides for learning how to align and extract data with FAVE. + +```{toctree} +:maxdepth: 2 + +whats-new +installation +quickstart +``` diff --git a/docs/usage/index.rst b/docs/usage/index.rst deleted file mode 100644 index 4d9f1c9..0000000 --- a/docs/usage/index.rst +++ /dev/null @@ -1,11 +0,0 @@ -FAVE User Guides -================ - -This section contains user guides for learning how to align and extract data with FAVE. - -.. toctree:: - :maxdepth: 2 - - whats-new - installation - quickstart diff --git a/docs/usage/installation.md b/docs/usage/installation.md new file mode 100644 index 0000000..4cd5b39 --- /dev/null +++ b/docs/usage/installation.md @@ -0,0 +1,27 @@ +# Installing FAVE 2 + +## Required software + +FAVE sometimes requires other software libraries in order to work. + + - FAVE-align requires [SoX](http://sox.sourceforge.net/) and [HTK](https://htk.eng.cam.ac.uk/). + - FAVE-extract requires [Praat](https://www.fon.hum.uva.nl/praat/). + +You will need to manually install these if they are not already installed on your computer. + +```{warning} +Mac users: HTK might need slight modification before it works. See [this bug report](https://github.com/JoFrhwld/FAVE/issues/48). +``` + + +## Install with PIP + +FAVE is available on the Python Package Index (PyPI) as `fave`. You can install it using: + +```console +python3 -m pip install fave +``` + +### Other package managers + +Work is ongoing to publish FAVE as a debian package, but no other package system is supported at the moment. If you would like to package FAVE for your system, please feel free to [contribute](../contributing) diff --git a/docs/usage/installation.rst b/docs/usage/installation.rst deleted file mode 100644 index bc8ebdc..0000000 --- a/docs/usage/installation.rst +++ /dev/null @@ -1,27 +0,0 @@ -Installing FAVE 2 -================= - -Required software ------------------ - -FAVE sometimes requires other software libraries in order to work. - * FAVE-align requires `SoX `_ and `HTK `_. - * FAVE-extract requires `Praat `_. - -You will need to manually install these if they are not already installed on your computer. - -.. warning:: - Mac users: HTK might need slight modification before it works. See `this bug report `_. - -Install with PIP ----------------- - -FAVE is available on the Python Package Index (PyPI) as ``fave``. You can install it using: - -.. code-block:: console - - python3 -m pip install fave - -Other package managers -^^^^^^^^^^^^^^^^^^^^^^ -Work is ongoing to publish FAVE as a debian package, but no other package system is supported at the moment. If you would like to package FAVE for your system, please feel free to :doc:`contribute <../contributing>`! diff --git a/docs/usage/quickstart.md b/docs/usage/quickstart.md new file mode 100644 index 0000000..8ae76dc --- /dev/null +++ b/docs/usage/quickstart.md @@ -0,0 +1,31 @@ +# Quickstart guide to using FAVE 2.0 + +1. Install FAVE and its dependencies according to {doc}`the directions `. + +2. Download the `FAAValign.py` and `extractFormants.py` scripts. + +3. Check your transcription for out-of-dictionary words + +```{code-block} console +:caption: Check for out-of-dictionary words + +python3 FAAValign.py --check unknown_words.txt AudioFile.wav TranscriptionFile.txt OutputAlignment.TextGrid +``` + +4. Open `unknown_words.txt` and create a transcription for each word listed. + +5. Align your audio and transcripts including your new transcriptions: + +```{code-block} console +:caption: Begin forced alignment + +python3 FAAValign.py --import custom_dictionary.txt AudioFile.wav TranscriptionFile.txt OutputAlignment.TextGrid +``` + +6. Extract formant data using the default settings: + +```{code-block} console +:caption: Extract formant data + +python3 extractFormants.py AudioFile.wav Alignment.TextGrid OutputFileName.tsv +``` diff --git a/docs/usage/quickstart.rst b/docs/usage/quickstart.rst deleted file mode 100644 index c9fdb1b..0000000 --- a/docs/usage/quickstart.rst +++ /dev/null @@ -1,24 +0,0 @@ -Quickstart guide to using FAVE 2.0 -================================== - - #. Install FAVE and its dependencies according to :doc:`the directions `. - #. Download the ``FAAValign.py`` and ``extractFormants.py`` scripts. - #. Check your transcription for out-of-dictionary words - - .. code-block:: console - :caption: Check for out-of-dictionary words - - python3 FAAValign.py --check unknown_words.txt AudioFile.wav TranscriptionFile.txt OutputAlignment.TextGrid - #. Open ``unknown_words.txt`` and create a transcription for each word listed. - #. Align your audio and transcripts including your new transcriptions: - - .. code-block:: console - :caption: Begin forced alignment - - python3 FAAValign.py --import custom_dictionary.txt AudioFile.wav TranscriptionFile.txt OutputAlignment.TextGrid - #. Extract formant data using the default settings: - - .. code-block:: console - :caption: Extract formant data - - python3 extractFormants.py AudioFile.wav Alignment.TextGrid OutputFileName.tsv diff --git a/docs/usage/whats-new.md b/docs/usage/whats-new.md new file mode 100644 index 0000000..c9aa071 --- /dev/null +++ b/docs/usage/whats-new.md @@ -0,0 +1,149 @@ +# What's new in version 2 + +Version 2.0.0 of FAVE was released February 10, 2022 replacing 1.3.1 which was released in October 2020. Like many software packages, FAVE follows the [semantic versioning](https://semver.org/) system, and the change from version 1 to version 2 means that this update introduces **changes that will break existing workflows**. The maintainers have made every attempt to keep the interface as similar to version 1 as possible, but long-time users will need to review and update their internal documentation and software to account for these new changes. To help this process, the FAVE maintainers have written this migration guide. + +```{contents} +``` + +## Updating software + +### Check your python version + +```{note} +We say FAVE runs on Python 3, but that's a little vague. Python 3.0 is 14 years old and like Python 2 no longer receives security updates. In order to run FAVE 2 you need at least Python 3.8, and we recommend using the latest stable version of Python. +``` + +You can check your current version of python using: + +```{code-block} console +:caption: Check your python version + +python --version +``` + +If that command outputs a version 3.8 or higher (so 3.9, 3.10, etc.) then you have the proper python version installed. + +If you get a version like 2.7, you should see if you *also* have Python 3 on your system: + +```{code-block} console +:caption: Check Python 3 specifically + +python3 --version +``` + +If that command outputs a version greater than 3.8, then you have a proper version. If it outputs a version *less* than that, like 3.5 or 3.7, you will need to install a newer version of python. + +If the command fails, then you do not have any python 3 version installed and you will need to install a compatible version. + +```{note} +You can download the latest python version from [the Python Software Foundation website](https://www.python.org/downloads/). Once downloaded, install as instructed, and then go through the above steps again to check that the installation was successful. +``` + +### Installing FAVE + +Install FAVE using Python's built-in software package manager pip: + +```{code-block} console +:caption: Install FAVE using pip + +python3 -m pip install fave +``` + +```{note} +Older versions of FAVE could simply be downloaded and ran. Unlike previous versions FAVE 2 needs to be *installed*. +``` + +## Aligning and extracting with FAVE 2 + +```{warning} +The argument order and behavior has changed in version 2. Double check the documentation to make sure that you're using the right commands. +``` + +FAVE can still be run as a command-line program using `FAAValign.py` and `extractFormants.py`, but the location and syntax for these files have changed slightly. These scripts come with help documentation. In a terminal, navigate to the FAVE folder (containing files like LICENSE and README) and run one of the following commands for details on how to run the script. + +```{code-block} console +:caption: Usage help from command line + +python3 fave/FAAValign.py --help +python3 fave/extractformants.py --help +``` + +```{note} +Development is ongoing to have these scripts installed system wide, but as of 2.0.1, you may still need to download them and run them directly. +``` + +### Aligning using FAAValign.py + +Before aligning, you should check the transcription for out-of-dictionary words. For this you use the `-c` or `--check` flag, followed by the name of a file where any unknown words should be listed. + +```{code-block} console +:caption: Check for unknown transcriptions + +python3 fave/FAAValign.py --check unknown_words.txt AudioFile.wav TranscriptionFile.txt OutputAlignment.TextGrid +``` + +You can then create your own transcriptions for these words, and include them in the aligning process using the `-i` or `-import` flag. + +```{code-block} console +:caption: Include custom dictionary file + +python3 fave/FAAValign.py --import custom_dictionary.txt AudioFile.wav TranscriptionFile.txt OutputAlignment.TextGrid +``` + +```{note} +It is best to *always* specify the sound file, transcript file, and output file. + +If the transcript file or output file are omitted, FAVE will do its best to assume a sensible name based on the sound file name, but this may not always work. + +If you run into errors, try specifying the transcript and output file names. +``` + +### Getting vowel data using extractFormants.py + +Formant data for vowels can be extracted using: + +```{code-block} console +:caption: Extract formant data + +python3 fave/extractFormants.py AudioFile.wav Alignment.TextGrid OutputFileName.tsv +``` + +If you used the Montral Forced Aligner to align your transcript, you should include the `--mfa` flag when extracting formant data. + +```{code-block} console +:caption: Extract data from MFA alignment + +python3 fave/extractFormants.py --mfa AudioFile.wav Alignment.TextGrid OutPutFileName.tsv +``` + +```{note} +The formant extraction process is *highly* customizable and these can be configured from the command line using flags. To see a list of all the configuration options, run the script with the `-h` or `--help` flags. +``` + +## The FAVE Python module + +```{note} +The documentation of FAVE's API is in {doc}`the code documentation section <../code/index>`. +``` + +New to version 2 is the ability to `import` FAVE as a python module. This allows you to use FAVE in custom scripts for things like batch alignment, extraction, or customizing the behavior during alignment. + +```{code-block} python +:caption: Example of loading a FAVE module + +from fave.align import TranscriptProcessor +``` + +## Frequently Asked Questions + +### What was wrong with the old FAVE? + +FAVE is written in the Python programming language. Python v2 was released in 2000 and was the langauge FAVE was written for. In 2006 development began on Python v3 which was released in 2008. Python 2 was scheduled to reach end-of-life in 2015, 7 years after the release of Python 3. In 2014, that sunset date was extended to 2020, and on January 1, 2020, 12 years after the release of Python 3, the developers announced that Python 2 was no longer supported. It would not receive bug fixes, and any security vulnerabilities would not be fixed. All users who had not already migrated to Python 3 were instructed to do so as soon as possible. As of August 2022, Python 3.10.4 is the current stable version. You can read [the full history from the Python Software Foundation](https://www.python.org/doc/sunset-python-2/). + +FAVE, being written for Python 2, was not compatible with the latest versions of Python. [Continuing to use Python 2 increases security risks](https://www.darkreading.com/vulnerabilities-threats/continued-use-of-python-2-will-heighten-security-risks) and it would be irresponsible to ask researchers holding sensitive personal data to introduce a security risk into their systems when other options are available. In 2020, maintainers Josef Freuhwald and Christian Brickhouse began rewriting FAVE to be compatible with Python 3. This migration was completed and released as FAVE 2.0.0 in February 2022. + +### Why does the new version work differently? + +FAVE is old software, and as software ages it accumulates changes that make it more complex. Bandaids, duct tape, patches, and other fixes are applied as needed to make sure the code keeps running for those who rely on it. Over time, the people who introduced and understood why and how these quick fixes worked leave, and often the knowledge leaves with them. What remains is a large, complex program that is hard to fix and even harder to add new features to. Among software programmers, this is known as [techincal debt](https://en.wikipedia.org/wiki/Technical_debt). FAVE was not migrated to Python 3 sooner because doing so was risky. The size and complexity of the program made it likely that even small changes might cause problems in other areas, and so the software was left as-is until the deprecation of Python 2 forced migration. + +To avoid this situation in the future, the migration to Python 3 also included changes which made the code easier to maintain. Since maintainers would be reading through all of the code to make sure it worked with Python 3, it was a good time to start repaying technical debt. The code was restructured so that it could easily be imported into python scripts as a module, and new workflows were created to allow for easier installation of the program and its dependencies. These improvements came with trade-offs, and in order to structure the code in a way that made it easy to udnerstand, maintain, and build new features on top of, we needed to make some changes to the previous interface. diff --git a/docs/usage/whats-new.rst b/docs/usage/whats-new.rst deleted file mode 100644 index 19c0d1d..0000000 --- a/docs/usage/whats-new.rst +++ /dev/null @@ -1,135 +0,0 @@ -What's new in version 2 -======================= - -Version 2.0.0 of FAVE was released February 10, 2022 replacing 1.3.1 which was released in October 2020. Like many software packages, FAVE follows the `semantic versioning `_ system, and the change from version 1 to version 2 means that this update introduces **changes that will break existing workflows**. The maintainers have made every attempt to keep the interface as similar to version 1 as possible, but long-time users will need to review and update their internal documentation and software to account for these new changes. To help this process, the FAVE maintainers have written this migration guide. - -.. contents:: - -Updating software ------------------ - -Check your python version -^^^^^^^^^^^^^^^^^^^^^^^^^ -.. note:: - We say FAVE runs on Python 3, but that's a little vague. Python 3.0 is 14 years old and like Python 2 no longer receives security updates. In order to run FAVE 2 you need at least Python 3.8, and we recommend using the latest stable version of Python. - -You can check your current version of python using: - -.. code-block:: console - :caption: Check your python version - - python --version - -If that command outputs a version 3.8 or higher (so 3.9, 3.10, etc.) then you have the proper python version installed. - -If you get a version like 2.7, you should see if you *also* have Python 3 on your system: - -.. code-block:: console - :caption: Check Python 3 specifically - - python3 --version - -If that command outputs a version greater than 3.8, then you have a proper version. If it outputs a version *less* than that, like 3.5 or 3.7, you will need to install a newer version of python. - -If the command fails, then you do not have any python 3 version installed and you will need to install a compatible version. - -.. note:: - You can download the latest python version from `the Python Software Foundation website `_. Once downloaded, install as instructed, and then go through the above steps again to check that the installation was successful. - -Installing FAVE -^^^^^^^^^^^^^^^ -Install FAVE using Python's built-in software package manager pip: - -.. code-block:: console - :caption: Install FAVE using pip - - python3 -m pip install fave - -.. note:: - Older versions of FAVE could simply be downloaded and ran. Unlike previous versions FAVE 2 needs to be *installed*. - -Aligning and extracting with FAVE 2 ------------------------------------ -.. warning:: - The argument order and behavior has changed in version 2. Double check the documentation to make sure that you're using the right commands. - -FAVE can still be run as a command-line program using ``FAAValign.py`` and ``extractFormants.py``, but the location and syntax for these files have changed slightly. These scripts come with help documentation. In a terminal, navigate to the FAVE folder (containing files like LICENSE and README) and run one of the following commands for details on how to run the script. - -.. code-block:: console - :caption: Usage help from command line - - python3 fave/FAAValign.py --help - python3 fave/extractformants.py --help - -.. note:: - Development is ongoing to have these scripts installed system wide, but as of 2.0.1, you may still need to download them and run them directly. - -Aligning using FAAValign.py -^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Before aligning, you should check the transcription for out-of-dictionary words. For this you use the ``-c`` or ``--check`` flag, followed by the name of a file where any unknown words should be listed. - -.. code-block:: console - :caption: Check for unknown transcriptions - - python3 fave/FAAValign.py --check unknown_words.txt AudioFile.wav TranscriptionFile.txt OutputAlignment.TextGrid - -You can then create your own transcriptions for these words, and include them in the aligning process using the ``-i`` or ``-import`` flag. - -.. code-block:: console - :caption: Include custom dictionary file - - python3 fave/FAAValign.py --import custom_dictionary.txt AudioFile.wav TranscriptionFile.txt OutputAlignment.TextGrid - -.. note:: - It is best to *always* specify the sound file, transcript file, and output file. - - If the transcript file or output file are omitted, FAVE will do its best to assume a sensible name based on the sound file name, but this may not always work. - - If you run into errors, try specifying the transcript and output file names. - -Getting vowel data using extractFormants.py -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Formant data for vowels can be extracted using: - -.. code-block:: console - :caption: Extract formant data - - python3 fave/extractFormants.py AudioFile.wav Alignment.TextGrid OutputFileName.tsv - -If you used the Montral Forced Aligner to align your transcript, you should include the ``--mfa`` flag when extracting formant data. - -.. code-block:: console - :caption: Extract data from MFA alignment - - python3 fave/extractFormants.py --mfa AudioFile.wav Alignment.TextGrid OutPutFileName.tsv - -.. note:: - The formant extraction process is *highly* customizable and these can be configured from the command line using flags. To see a list of all the configuration options, run the script with the ``-h`` or ``--help`` flags. - -The FAVE Python module ----------------------- - -.. note:: - The documentation of FAVE's API is in :doc:`the code documentation section <../code/index>`. - -New to version 2 is the ability to ``import`` FAVE as a python module. This allows you to use FAVE in custom scripts for things like batch alignment, extraction, or customizing the behavior during alignment. - -.. code-block:: python - :caption: Example of loading a FAVE module - - from fave.align import TranscriptProcessor - -Frequently Asked Questions --------------------------- - -What was wrong with the old FAVE? -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -FAVE is written in the Python programming language. Python v2 was released in 2000 and was the langauge FAVE was written for. In 2006 development began on Python v3 which was released in 2008. Python 2 was scheduled to reach end-of-life in 2015, 7 years after the release of Python 3. In 2014, that sunset date was extended to 2020, and on January 1, 2020, 12 years after the release of Python 3, the developers announced that Python 2 was no longer supported. It would not receive bug fixes, and any security vulnerabilities would not be fixed. All users who had not already migrated to Python 3 were instructed to do so as soon as possible. As of August 2022, Python 3.10.4 is the current stable version. You can read `the full history from the Python Software Foundation `_. - -FAVE, being written for Python 2, was not compatible with the latest versions of Python. `Continuing to use Python 2 increases security risks `_ and it would be irresponsible to ask researchers holding sensitive personal data to introduce a security risk into their systems when other options are available. In 2020, maintainers Josef Freuhwald and Christian Brickhouse began rewriting FAVE to be compatible with Python 3. This migration was completed and released as FAVE 2.0.0 in February 2022. - -Why does the new version work differently? -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -FAVE is old software, and as software ages it accumulates changes that make it more complex. Bandaids, duct tape, patches, and other fixes are applied as needed to make sure the code keeps running for those who rely on it. Over time, the people who introduced and understood why and how these quick fixes worked leave, and often the knowledge leaves with them. What remains is a large, complex program that is hard to fix and even harder to add new features to. Among software programmers, this is known as `techincal debt `_. FAVE was not migrated to Python 3 sooner because doing so was risky. The size and complexity of the program made it likely that even small changes might cause problems in other areas, and so the software was left as-is until the deprecation of Python 2 forced migration. - -To avoid this situation in the future, the migration to Python 3 also included changes which made the code easier to maintain. Since maintainers would be reading through all of the code to make sure it worked with Python 3, it was a good time to start repaying technical debt. The code was restructured so that it could easily be imported into python scripts as a module, and new workflows were created to allow for easier installation of the program and its dependencies. These improvements came with trade-offs, and in order to structure the code in a way that made it easy to udnerstand, maintain, and build new features on top of, we needed to make some changes to the previous interface. diff --git a/poetry.lock b/poetry.lock index 212709a..c2a50ea 100644 --- a/poetry.lock +++ b/poetry.lock @@ -229,6 +229,36 @@ typing-extensions = ">=3.7.4.1" all = ["pytz (>=2019.1)"] dates = ["pytz (>=2019.1)"] +[[package]] +name = "exceptiongroup" +version = "1.2.0" +description = "Backport of PEP 654 (exception groups)" +optional = false +python-versions = ">=3.7" +files = [ + {file = "exceptiongroup-1.2.0-py3-none-any.whl", hash = "sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14"}, + {file = "exceptiongroup-1.2.0.tar.gz", hash = "sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68"}, +] + +[package.extras] +test = ["pytest (>=6)"] + +[[package]] +name = "flake8" +version = "5.0.4" +description = "the modular source code checker: pep8 pyflakes and co" +optional = false +python-versions = ">=3.6.1" +files = [ + {file = "flake8-5.0.4-py2.py3-none-any.whl", hash = "sha256:7a1cf6b73744f5806ab95e526f6f0d8c01c66d7bbe349562d22dfca20610b248"}, + {file = "flake8-5.0.4.tar.gz", hash = "sha256:6fbe320aad8d6b95cec8b8e47bc933004678dc63095be98528b7bdd2a9f510db"}, +] + +[package.dependencies] +mccabe = ">=0.7.0,<0.8.0" +pycodestyle = ">=2.9.0,<2.10.0" +pyflakes = ">=2.5.0,<2.6.0" + [[package]] name = "idna" version = "3.6" @@ -270,6 +300,17 @@ docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.link perf = ["ipython"] testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-perf (>=0.9.2)", "pytest-ruff (>=0.2.1)"] +[[package]] +name = "iniconfig" +version = "2.0.0" +description = "brain-dead simple config-ini parsing" +optional = false +python-versions = ">=3.7" +files = [ + {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, + {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, +] + [[package]] name = "isort" version = "5.13.2" @@ -347,6 +388,30 @@ files = [ {file = "lazy_object_proxy-1.10.0-pp310.pp311.pp312.pp38.pp39-none-any.whl", hash = "sha256:80fa48bd89c8f2f456fc0765c11c23bf5af827febacd2f523ca5bc1893fcc09d"}, ] +[[package]] +name = "markdown-it-py" +version = "3.0.0" +description = "Python port of markdown-it. Markdown parsing, done right!" +optional = false +python-versions = ">=3.8" +files = [ + {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, + {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, +] + +[package.dependencies] +mdurl = ">=0.1,<1.0" + +[package.extras] +benchmarking = ["psutil", "pytest", "pytest-benchmark"] +code-style = ["pre-commit (>=3.0,<4.0)"] +compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] +linkify = ["linkify-it-py (>=1,<3)"] +plugins = ["mdit-py-plugins"] +profiling = ["gprof2dot"] +rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] + [[package]] name = "markupsafe" version = "2.1.5" @@ -427,6 +492,62 @@ files = [ {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, ] +[[package]] +name = "mdit-py-plugins" +version = "0.4.0" +description = "Collection of plugins for markdown-it-py" +optional = false +python-versions = ">=3.8" +files = [ + {file = "mdit_py_plugins-0.4.0-py3-none-any.whl", hash = "sha256:b51b3bb70691f57f974e257e367107857a93b36f322a9e6d44ca5bf28ec2def9"}, + {file = "mdit_py_plugins-0.4.0.tar.gz", hash = "sha256:d8ab27e9aed6c38aa716819fedfde15ca275715955f8a185a8e1cf90fb1d2c1b"}, +] + +[package.dependencies] +markdown-it-py = ">=1.0.0,<4.0.0" + +[package.extras] +code-style = ["pre-commit"] +rtd = ["myst-parser", "sphinx-book-theme"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] + +[[package]] +name = "mdurl" +version = "0.1.2" +description = "Markdown URL utilities" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, + {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, +] + +[[package]] +name = "myst-parser" +version = "2.0.0" +description = "An extended [CommonMark](https://spec.commonmark.org/) compliant parser," +optional = false +python-versions = ">=3.8" +files = [ + {file = "myst_parser-2.0.0-py3-none-any.whl", hash = "sha256:7c36344ae39c8e740dad7fdabf5aa6fc4897a813083c6cc9990044eb93656b14"}, + {file = "myst_parser-2.0.0.tar.gz", hash = "sha256:ea929a67a6a0b1683cdbe19b8d2e724cd7643f8aa3e7bb18dd65beac3483bead"}, +] + +[package.dependencies] +docutils = ">=0.16,<0.21" +jinja2 = "*" +markdown-it-py = ">=3.0,<4.0" +mdit-py-plugins = ">=0.4,<1.0" +pyyaml = "*" +sphinx = ">=6,<8" + +[package.extras] +code-style = ["pre-commit (>=3.0,<4.0)"] +linkify = ["linkify-it-py (>=2.0,<3.0)"] +rtd = ["ipython", "pydata-sphinx-theme (==v0.13.0rc4)", "sphinx-autodoc2 (>=0.4.2,<0.5.0)", "sphinx-book-theme (==1.0.0rc2)", "sphinx-copybutton", "sphinx-design2", "sphinx-pyscript", "sphinx-tippy (>=0.3.1)", "sphinx-togglebutton", "sphinxext-opengraph (>=0.8.2,<0.9.0)", "sphinxext-rediraffe (>=0.2.7,<0.3.0)"] +testing = ["beautifulsoup4", "coverage[toml]", "pytest (>=7,<8)", "pytest-cov", "pytest-param-files (>=0.3.4,<0.4.0)", "pytest-regressions", "sphinx-pytest"] +testing-docutils = ["pygments", "pytest (>=7,<8)", "pytest-param-files (>=0.3.4,<0.4.0)"] + [[package]] name = "natsort" version = "8.4.0" @@ -505,6 +626,43 @@ files = [ docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] +[[package]] +name = "pluggy" +version = "1.4.0" +description = "plugin and hook calling mechanisms for python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pluggy-1.4.0-py3-none-any.whl", hash = "sha256:7db9f7b503d67d1c5b95f59773ebb58a8c1c288129a88665838012cfb07b8981"}, + {file = "pluggy-1.4.0.tar.gz", hash = "sha256:8c85c2876142a764e5b7548e7d9a0e0ddb46f5185161049a79b7e974454223be"}, +] + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + +[[package]] +name = "pycodestyle" +version = "2.9.1" +description = "Python style guide checker" +optional = false +python-versions = ">=3.6" +files = [ + {file = "pycodestyle-2.9.1-py2.py3-none-any.whl", hash = "sha256:d1735fc58b418fd7c5f658d28d943854f8a849b01a5d0a1e6f3f3fdd0166804b"}, + {file = "pycodestyle-2.9.1.tar.gz", hash = "sha256:2c9607871d58c76354b697b42f5d57e1ada7d261c261efac224b664affdc5785"}, +] + +[[package]] +name = "pyflakes" +version = "2.5.0" +description = "passive checker of Python programs" +optional = false +python-versions = ">=3.6" +files = [ + {file = "pyflakes-2.5.0-py2.py3-none-any.whl", hash = "sha256:4579f67d887f804e67edb544428f264b7b24f435b263c4614f384135cea553d2"}, + {file = "pyflakes-2.5.0.tar.gz", hash = "sha256:491feb020dca48ccc562a8c0cbe8df07ee13078df59813b83959cbdada312ea3"}, +] + [[package]] name = "pygments" version = "2.17.2" @@ -549,6 +707,28 @@ typing-extensions = {version = ">=3.10.0", markers = "python_version < \"3.10\"" spelling = ["pyenchant (>=3.2,<4.0)"] testutils = ["gitpython (>3)"] +[[package]] +name = "pytest" +version = "7.4.4" +description = "pytest: simple powerful testing with Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pytest-7.4.4-py3-none-any.whl", hash = "sha256:b090cdf5ed60bf4c45261be03239c2c1c22df034fbffe691abe93cd80cea01d8"}, + {file = "pytest-7.4.4.tar.gz", hash = "sha256:2cf0005922c6ace4a3e2ec8b4080eb0d9753fdc93107415332f50ce9e7994280"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} +exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=0.12,<2.0" +tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} + +[package.extras] +testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] + [[package]] name = "pytz" version = "2024.1" @@ -560,6 +740,66 @@ files = [ {file = "pytz-2024.1.tar.gz", hash = "sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812"}, ] +[[package]] +name = "pyyaml" +version = "6.0.1" +description = "YAML parser and emitter for Python" +optional = false +python-versions = ">=3.6" +files = [ + {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, + {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, + {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, + {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, + {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, + {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, + {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, + {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, + {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, + {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, + {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, + {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, +] + [[package]] name = "requests" version = "2.31.0" @@ -909,4 +1149,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = ">=3.8,<4.0" -content-hash = "1c9d783c07301363c92506c8107b6e83b6e56afb14c8daf4c4c5eeee4d56be77" +content-hash = "95f046f7cc2f7ddf5b1510afabdbb21ffb96f4e67e147ad989a5c5a4625a62ba" diff --git a/pyproject.toml b/pyproject.toml index 8c9e115..11d1ace 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -27,6 +27,9 @@ sphinx = "^7" sphinx_pyproject = "0.1" jinja2 = "~3.0" pylint = "^2.5.2" +myst-parser = "^2" +pytest = "^7" +flake8 = "^5" [build-system] requires = ["poetry>=1.1"]