Buckets:
| import{s as Fw,o as Pw,n as jr}from"../chunks/scheduler.9bc65507.js";import{S as Ew,i as Aw,g as i,s as n,r as f,A as Yw,h as a,f as l,c as p,j as Sw,u as d,x as m,k as Qw,y as qw,a as s,v as r,d as M,t as o,w}from"../chunks/index.707bf1b6.js";import{T as Jr}from"../chunks/Tip.c2ecdbf4.js";import{C as $}from"../chunks/CodeBlock.54a9f38d.js";import{H as y,E as Kw}from"../chunks/EditOnGithub.922df6ba.js";function Dw(j){let u,c="このプラグインは、<code>pytest-xdist</code> の <code>-n</code> フラグでは動作しません。";return{c(){u=i("p"),u.innerHTML=c},l(T){u=a(T,"P",{"data-svelte-h":!0}),m(u)!=="svelte-14onvpt"&&(u.innerHTML=c)},m(T,J){s(T,u,J)},p:jr,d(T){T&&l(u)}}}function Ow(j){let u,c="別のプラグイン <code>pytest-repeat</code> もありますが、これは <code>unittest</code> では動作しません。";return{c(){u=i("p"),u.innerHTML=c},l(T){u=a(T,"P",{"data-svelte-h":!0}),m(u)!=="svelte-xcpx6x"&&(u.innerHTML=c)},m(T,J){s(T,u,J)},p:jr,d(T){T&&l(u)}}}function t$(j){let u,c="<code>rm -r</code>の相当を安全に実行するために、明示的な <code>tmp_dir</code> が使用される場合、プロジェクトリポジトリのチェックアウトのサブディレクトリのみが許可されます。誤って <code>/tmp</code> などのファイルシステムの重要な部分が削除されないように、常に <code>./</code> から始まるパスを渡してください。";return{c(){u=i("p"),u.innerHTML=c},l(T){u=a(T,"P",{"data-svelte-h":!0}),m(u)!=="svelte-1qjgf9t"&&(u.innerHTML=c)},m(T,J){s(T,u,J)},p:jr,d(T){T&&l(u)}}}function e$(j){let u,c="各テストは複数の一時ディレクトリを登録でき、要求がない限りすべて自動で削除されます。";return{c(){u=i("p"),u.textContent=c},l(T){u=a(T,"P",{"data-svelte-h":!0}),m(u)!=="svelte-11mv35t"&&(u.textContent=c)},m(T,J){s(T,u,J)},p:jr,d(T){T&&l(u)}}}function l$(j){let u,c,T,J,g,jp,_,Cr="🤗 Transformersモデルがどのようにテストされ、新しいテストを書いて既存のテストを改善できるかを見てみましょう。",Cp,v,Ur="このリポジトリには2つのテストスイートがあります:",Up,I,br="<li><code>tests</code> — 一般的なAPI用のテスト</li> <li><code>examples</code> — APIの一部ではないさまざまなアプリケーション用のテスト</li>",bp,Z,hp,x,hr='<li><p>PRが提出されると、9つのCircleCiジョブでテストされます。PRへの新しいコミットごとに再テストされます。これらのジョブは、<a href="https://github.com/huggingface/transformers/tree/main/.circleci/config.yml" rel="nofollow">この設定ファイル</a>で定義されており、必要な場合は同じ環境を自分のマシンで再現できます。</p> <p>これらのCIジョブは <code>@slow</code> テストを実行しません。</p></li> <li><p><a href="https://github.com/huggingface/transformers/actions" rel="nofollow">GitHub Actions</a>によって実行される3つのジョブがあります:</p> <ul><li><p><a href="https://github.com/huggingface/transformers/tree/main/.github/workflows/github-torch-hub.yml" rel="nofollow">torch hub integration</a>: torch hubの統合が動作するかどうかを確認します。</p></li> <li><p><a href="https://github.com/huggingface/transformers/tree/main/.github/workflows/self-push.yml" rel="nofollow">self-hosted (push)</a>: <code>main</code> にコミットが行われた場合に、GPUで高速テストを実行します。このジョブは、<code>main</code> でのコミットが以下のフォルダーのコードを更新した場合にのみ実行されます:<code>src</code>、<code>tests</code>、<code>.github</code>(追加されたモデルカード、ノートブックなどの実行を防ぐため)。</p></li> <li><p><a href="https://github.com/huggingface/transformers/tree/main/.github/workflows/self-scheduled.yml" rel="nofollow">self-hosted runner</a>: GPUで <code>tests</code> と <code>examples</code> の通常のテストと遅いテストを実行します。</p></li></ul></li>',gp,k,_p,G,gr='結果は<a href="https://github.com/huggingface/transformers/actions" rel="nofollow">here</a>で観察できます。',vp,H,Ip,X,Zp,B,_r='このドキュメントは、テストを実行する方法の多くの詳細について説明しています。すべてを読んだ後でも、さらに詳細が必要な場合は、<a href="https://docs.pytest.org/en/latest/usage.html" rel="nofollow">こちら</a>で見つけることができます。',xp,V,vr="以下は、テストを実行するためのいくつかの最も便利な方法です。",kp,R,Ir="すべて実行します:",Gp,z,Hp,N,Zr="または:",Xp,L,Bp,W,xr="後者は次のように定義されることに注意してください。",Vp,S,Rp,Q,kr="以下は、pytestに渡す設定情報です。",zp,F,Gr="<li>テストプロセスをCPUコアの数と同じだけ実行するように指示します。ただし、RAMが十分でない場合は注意が必要です。</li> <li>同じファイルからのすべてのテストは、同じテストプロセスで実行されるようにします。</li> <li>出力のキャプチャを行いません。</li> <li>冗長モードで実行します。</li>",Np,P,Lp,E,Hr="テストスイートのすべてのテスト:",Wp,A,Sp,Y,Xr="指定されたテスト ファイルのすべてのテスト:",Qp,q,Fp,K,Pp,D,Br="個別のテスト モジュールを実行するには:",Ep,O,Ap,tt,Yp,et,Vr="ほとんどのテストでunittestが使用されているため、特定のサブテストを実行するには、それらのテストを含むunittestクラスの名前を知っている必要があります。例えば、それは次のようになるかもしれません:",qp,lt,Kp,st,Rr="テストの実行方法:",Dp,nt,zr=`テストファイル: <code>tests/test_optimization.py</code> | |
| クラス名: <code>OptimizationTest</code> | |
| テスト関数の名前: <code>test_adam_w</code>`,Op,pt,Nr="ファイルに複数のクラスが含まれている場合は、特定のクラスのテストのみを実行することを選択できます。例えば:",ti,it,ei,at,Lr="テストクラス内のすべてのテストを実行します。",li,mt,Wr="前述の通り、<code>OptimizationTest</code> クラスに含まれるテストを実行するには、次のコマンドを実行できます:",si,ft,ni,dt,Sr="キーワード式を使用してテストを実行できます。",pi,rt,Qr="名前に <code>adam</code> が含まれるテストのみを実行するには:",ii,Mt,ai,ot,Fr="<code>and</code>および<code>or</code>は、すべてのキーワードが一致するか、いずれかを示すために使用できます。<code>not</code>は否定するために使用できます。",mi,wt,Pr="<code>adam</code>という名前を含むテストを除いてすべてのテストを実行するには:",fi,$t,di,yt,Er="以下は、提供されたテキストの日本語訳です。",ri,ut,Mi,Tt,Ar="たとえば、<code>test_adafactor</code>と<code>test_adam_w</code>の両方を実行するには、以下のコマンドを使用できます:",oi,ct,wi,Jt,Yr="注意: ここでは、<code>or</code> を使用しています。キーワードのいずれか一つが一致すれば、両方を含めるためです。",$i,jt,qr="両方のパターンを含むテストのみを含めたい場合は、<code>and</code> を使用してください。",yi,Ct,ui,Ut,Ti,bt,Kr="時々、モデルに対して <code>accelerate</code> テストを実行する必要があります。たとえば、<code>OPT</code> 実行に対してこれらのテストを実行したい場合、コマンドに <code>-m accelerate_tests</code> を追加するだけで済みます:",ci,ht,Ji,gt,ji,_t,Dr=`ドキュメンテーションの例が正しいかどうかをテストするには、<code>doctests</code> が合格しているかを確認する必要があります。 | |
| 例として、<a href="https://github.com/huggingface/transformers/blob/main/src/transformers/models/whisper/modeling_whisper.py#L1017-L1035" rel="nofollow"><code>WhisperModel.forward</code> のドックストリング</a>を使用しましょう。`,Ci,vt,Ui,It,Or="指定したファイル内のすべてのドックストリング例を自動的にテストするために、以下の行を実行してください:",bi,Zt,hi,xt,tM="ファイルにマークダウン拡張子がある場合は、<code>--doctest-glob="*.md"</code>引数を追加する必要があります。",gi,kt,_i,Gt,eM='<a href="https://github.com/anapaulagomes/pytest-picked" rel="nofollow">pytest-picked</a>を使用すると、未ステージングのファイルまたは現在のブランチ(Gitに従って)に関連するテストを実行できます。これは、変更内容に関連するテストのみ実行されるため、変更が何も壊れていないことを迅速に確認する素晴らしい方法です。変更されていないファイルに関連するテストは実行されません。',vi,Ht,Ii,Xt,Zi,Bt,lM="すべてのテストは、変更されたがまだコミットされていないファイルとフォルダから実行されます。",xi,Vt,ki,Rt,sM='<a href="https://github.com/pytest-dev/pytest-xdist" rel="nofollow">pytest-xdist</a>は、非常に便利な機能を提供しており、すべての失敗したテストを検出し、ファイルを修正する間にそれらの失敗したテストを連続して再実行することができます。そのため、修正を行った後にpytestを再起動する必要がありません。すべてのテストが合格するまで繰り返され、その後再度フルランが実行されます。',Gi,zt,Hi,Nt,nM="モードに入るには: <code>pytest -f</code>または<code>pytest --looponfail</code>",Xi,Lt,pM="ファイルの変更は、<code>looponfailroots</code>ルートディレクトリとその内容全体(再帰的に)を見て検出されます。この値のデフォルトが機能しない場合、<code>setup.cfg</code>で設定オプションを変更してプロジェクト内で変更できます。",Bi,Wt,Vi,St,iM="または <code>pytest.ini</code>/<code>tox.ini</code> ファイル:",Ri,Qt,zi,Ft,aM="ファイルの変更を探すことは、iniファイルのディレクトリを基準にして指定されたディレクトリ内でのみ行われます。",Ni,Pt,mM='<a href="https://github.com/joeyespo/pytest-watch" rel="nofollow">pytest-watch</a> は、この機能の代替実装です。',Li,Et,Wi,At,fM="特定のテストモジュールを除外してすべてのテストモジュールを実行したい場合、実行するテストの明示的なリストを指定することができます。例えば、<code>test_modeling_*.py</code> テストを除外してすべてを実行するには次のようにします:",Si,Yt,Qi,qt,Fi,Kt,dM="CIビルドおよび速度に対する隔離が重要な場合(キャッシュに対して)、キャッシュをクリアする必要があります:",Pi,Dt,Ei,Ot,Ai,te,rM="前述のように、<code>make test</code> は <code>pytest-xdist</code> プラグインを介してテストを並列実行します(<code>-n X</code> 引数、例: <code>-n 2</code> で2つの並列ジョブを実行)。",Yi,ee,MM="<code>pytest-xdist</code> の <code>--dist=</code> オプションを使用すると、テストがどのようにグループ化されるかを制御できます。<code>--dist=loadfile</code> は同じファイルにあるテストを同じプロセスに配置します。",qi,le,oM='テストの実行順序が異なり予測不可能であるため、<code>pytest-xdist</code> を使用してテストスイートを実行すると失敗が発生する場合(つまり、いくつかの未検出の連動テストがある場合)、<a href="https://github.com/ESSS/pytest-replay" rel="nofollow">pytest-replay</a> を使用してテストを同じ順序で再生し、その後、失敗するシーケンスを最小限にするのに役立ちます。',Ki,se,Di,ne,wM="潜在的な相互依存性や状態に関連するバグ(ティアダウン)を検出するために、テストを複数回、連続して、ランダムに、またはセットで繰り返すことは有用です。そして、単純な複数回の繰り返しは、DLのランダム性によって明らかになるいくつかの問題を検出するのに役立ちます。",Oi,pe,ta,ie,$M='<li><a href="https://github.com/dropbox/pytest-flakefinder" rel="nofollow">pytest-flakefinder</a>:</li>',ea,ae,la,me,yM="そして、すべてのテストを複数回実行します (デフォルトでは 50 回)。",sa,fe,na,C,pa,U,ia,de,aa,re,ma,Me,uM=`重要: <code>pytest-random-order</code> が存在すると、テストは自動的にランダム化されます。設定の変更や変更は必要ありません。 | |
| コマンドラインオプションは必須です。`,fa,oe,TM=`前に説明したように、これにより、結合されたテスト (1 つのテストの状態が別のテストの状態に影響を与える) の検出が可能になります。いつ | |
| <code>pytest-random-order</code> がインストールされていると、そのセッションに使用されたランダム シードが出力されます。例:`,da,we,ra,$e,cM="そのため、指定された特定のシーケンスが失敗した場合、その正確なシードを追加することでそれを再現できます。例:",Ma,ye,oa,ue,JM="特定のテストのリストを使用しない場合、またはまったくリストを使用しない場合、同じテストの正確な順序を再現します。テストのリストを手動で絞り込み始めると、シードに依存せず、テストが失敗した正確な順序で手動でリストを指定する必要があります。これには、<code>--random-order-bucket=none</code> を使用してランダム化を無効にするようpytestに指示する必要があります。例えば、次のようにします:",wa,Te,$a,ce,jM="すべてのテストのシャッフルを無効にするには:",ya,Je,ua,je,CM='デフォルトでは、<code>--random-order-bucket=module</code> が暗黙的に適用され、モジュールレベルでファイルをシャッフルします。また、<code>class</code>、<code>package</code>、<code>global</code>、および<code>none</code> レベルでシャッフルすることもできます。詳細については、その<a href="https://github.com/jbasko/pytest-random-order" rel="nofollow">ドキュメンテーション</a>を参照してください。',Ta,Ce,UM='別のランダム化の代替手段は、<a href="https://github.com/pytest-dev/pytest-randomly" rel="nofollow"><code>pytest-randomly</code></a> です。このモジュールは非常に似た機能/インターフェースを持っていますが、<code>pytest-random-order</code> で利用可能なバケットモードを持っていません。インストール後に自動的に有効になるという同じ問題があります。',ca,Ue,Ja,be,ja,he,bM='<a href="https://github.com/Frozenball/pytest-sugar" rel="nofollow">pytest-sugar</a> は、外観と操作性を向上させ、プログレスバーを追加し、即座に失敗したテストとアサーションを表示するプラグインです。インストール後に自動的にアクティブ化されます。',Ca,ge,Ua,_e,hM="これを使用せずにテストを実行するには、次を実行します。",ba,ve,ha,Ie,gM="またはアンインストールします。",ga,Ze,_a,xe,_M="<code>pytest</code> による単一またはグループのテストの場合 (<code>pip install pytest-pspec</code> の後):",va,ke,Ia,Ge,Za,He,vM=`<a href="https://github.com/pytest-dev/pytest-instafail" rel="nofollow">pytest-instafail</a> では、失敗とエラーが即座に表示されます。 | |
| テストセッションが終了するまで待機します。`,xa,Xe,ka,Be,Ga,Ve,Ha,Re,IM="GPU が有効な設定で、CPU のみモードでテストするには、<code>CUDA_VISIBLE_DEVICES=""</code>を追加します。",Xa,ze,Ba,Ne,ZM=`または、複数の GPU がある場合は、<code>pytest</code> でどれを使用するかを指定できます。たとえば、 | |
| 2 番目の GPU GPU <code>0</code> と <code>1</code> がある場合は、次を実行できます。`,Va,Le,Ra,We,xM="これは、異なるGPUで異なるタスクを実行したい場合に便利です。",za,Se,kM="一部のテストはCPUのみで実行する必要があり、他のテストはCPU、GPU、またはTPUで実行する必要があり、また別のテストは複数のGPUで実行する必要があります。次のスキップデコレーターは、テストのCPU/GPU/TPUに関する要件を設定するために使用されます:",Na,Qe,GM="<li><code>require_torch</code> - このテストはtorchの下でのみ実行されます。</li> <li><code>require_torch_gpu</code> - <code>require_torch</code> に加えて、少なくとも1つのGPUが必要です。</li> <li><code>require_torch_multi_gpu</code> - <code>require_torch</code> に加えて、少なくとも2つのGPUが必要です。</li> <li><code>require_torch_non_multi_gpu</code> - <code>require_torch</code> に加えて、0または1つのGPUが必要です。</li> <li><code>require_torch_up_to_2_gpus</code> - <code>require_torch</code> に加えて、0、1、または2つのGPUが必要です。</li> <li><code>require_torch_xla</code> - <code>require_torch</code> に加えて、少なくとも1つのTPUが必要です。</li>",La,Fe,HM="以下の表にGPUの要件を示します:",Wa,Pe,XM=`| n gpus | decorator | | |
| |--------+--------------------------------| | |
| | <code>>= 0</code> | <code>@require_torch</code> | | |
| | <code>>= 1</code> | <code>@require_torch_gpu</code> | | |
| | <code>>= 2</code> | <code>@require_torch_multi_gpu</code> | | |
| | <code>< 2</code> | <code>@require_torch_non_multi_gpu</code> | | |
| | <code>< 3</code> | <code>@require_torch_up_to_2_gpus</code> |`,Sa,Ee,BM="たとえば、使用可能な GPU が 2 つ以上あり、pytorch がインストールされている場合にのみ実行する必要があるテストを次に示します。",Qa,Ae,Fa,Ye,VM="テストに <code>tensorflow</code> が必要な場合は、<code>require_tf</code> デコレータを使用します。例えば:",Pa,qe,Ea,Ke,RM=`これらのデコレータは積み重ねることができます。たとえば、テストが遅く、pytorch で少なくとも 1 つの GPU が必要な場合は、次のようになります。 | |
| 設定方法:`,Aa,De,Ya,Oe,zM=`<code>@parametrized</code> のような一部のデコレータはテスト名を書き換えるため、<code>@require_*</code> スキップ デコレータをリストする必要があります。 | |
| 最後にそれらが正しく動作するようにします。正しい使用例は次のとおりです`,qa,tl,Ka,el,NM=`この順序の問題は <code>@pytest.mark.parametrize</code> には存在しません。最初または最後に配置しても、それでも問題は解決されます。 | |
| 仕事。ただし、それは非単体テストでのみ機能します。`,Da,ll,LM="内部テスト:",Oa,sl,WM="<li>利用可能な GPU の数:</li>",tm,nl,em,pl,lm,il,SM="特定のtorchデバイスでテストスイートを実行するには、<code>TRANSFORMERS_TEST_DEVICE="$device"</code> を追加します。ここで <code>$device</code> は対象のバックエンドです。例えば、CPUでテストするには以下のようにします:",sm,al,nm,ml,QM="この変数は、<code>mps</code>などのカスタムまたはあまり一般的ではない PyTorch バックエンドをテストするのに役立ちます。また、特定の GPU をターゲットにしたり、CPU 専用モードでテストしたりすることで、<code>CUDA_VISIBLE_DEVICES</code>と同じ効果を達成するために使用することもできます。",pm,fl,FM="特定のデバイスでは、初めて「torch」をインポートした後、追加のインポートが必要になります。これは、環境変数 <code>TRANSFORMERS_TEST_BACKEND</code> を使用して指定できます。",im,dl,am,rl,mm,Ml,PM="<code>pytest</code> は直接的に分散トレーニングを処理することはできません。試みると、サブプロセスは正しい処理を行わず、自分自身が <code>pytest</code> であると思い込んでテストスイートをループで実行し続けます。ただし、通常のプロセスを生成し、それから複数のワーカーを生成し、IOパイプを管理するプロセスを生成すれば機能します。",fm,ol,EM="これを使用するいくつかのテストがあります:",dm,wl,AM='<li><a href="https://github.com/huggingface/transformers/tree/main/tests/trainer/test_trainer_distributed.py" rel="nofollow">test_trainer_distributed.py</a></li> <li><a href="https://github.com/huggingface/transformers/tree/main/tests/deepspeed/test_deepspeed.py" rel="nofollow">test_deepspeed.py</a></li>',rm,$l,YM="実行ポイントにすぐに移動するには、これらのテスト内で <code>execute_subprocess_async</code> 呼び出しを検索してください。",Mm,yl,qM="これらのテストを実行するには、少なくとも2つのGPUが必要です:",om,ul,wm,Tl,$m,cl,KM="テストの実行中に、<code>stdout</code> および <code>stderr</code> に送信された出力はキャプチャされます。テストまたはセットアップメソッドが失敗した場合、通常、それに対応するキャプチャされた出力が失敗のトレースバックと共に表示されます。",ym,Jl,DM="出力のキャプチャを無効にし、<code>stdout</code> と <code>stderr</code> を通常通りに取得するには、<code>-s</code> または <code>--capture=no</code> を使用してください:",um,jl,OM="これらのテストを実行するには少なくとも2つのGPUが必要です:",Tm,Cl,cm,Ul,to="テスト結果を JUnit 形式の出力に送信するには:",Jm,bl,jm,hl,Cm,gl,eo="色を持たないようにする(例:黄色のテキストを白い背景に表示すると読みにくいです):",Um,_l,bm,vl,hm,Il,lo="テスト失敗ごとに URL を作成します。",gm,Zl,_m,xl,so="これにより、テスト実行情報がリモートのPasteサービスに送信され、各エラーに対してURLが提供されます。通常通りテストを選択するか、たとえば特定のエラーのみを送信したい場合は <code>-x</code> を追加で指定できます。",vm,kl,no="テストセッション全体のログに対するURLを作成する方法:",Im,Gl,Zm,Hl,xm,Xl,po="🤗 transformersのテストは <code>unittest</code> を基にしていますが、 <code>pytest</code> で実行されるため、ほとんどの場合、両方のシステムの機能を使用できます。",km,Bl,io='<a href="https://docs.pytest.org/en/stable/unittest.html" rel="nofollow">こちら</a>でサポートされている機能を読むことができますが、重要なことは、ほとんどの <code>pytest</code> のフィクスチャが動作しないことです。パラメータ化も同様ですが、似たような方法で動作する <code>parameterized</code> モジュールを使用しています。',Gm,Vl,Hm,Rl,ao="同じテストを異なる引数で複数回実行する必要があることがよくあります。これはテスト内部から行うこともできますが、その場合、そのテストを単一の引数セットで実行する方法はありません。",Xm,zl,Bm,Nl,mo="デフォルトでは、このテストは3回実行され、それぞれの実行で <code>test_floor</code> の最後の3つの引数がパラメータリストの対応する引数に割り当てられます。",Vm,Ll,fo="そして、<code>negative</code> と <code>integer</code> パラメータのセットのみを実行することもできます:",Rm,Wl,zm,Sl,ro="または、<code>Negative</code>のサブテストを除くすべての場合、次のようになります。",Nm,Ql,Lm,Fl,Mo="<code>-k</code> フィルターを使用することに加えて、各サブテストの正確な名前を調べ、その正確な名前を使用して任意のサブテストまたはすべてのサブテストを実行することができます。",Wm,Pl,Sm,El,oo="すると次のものがリストされます:",Qm,Al,Fm,Yl,wo="したがって、2 つの特定のサブテストのみを実行できるようになりました。",Pm,ql,Em,Kl,$o='<code>transformers</code>の開発者依存関係にすでに含まれているモジュール<a href="https://pypi.org/project/parameterized/" rel="nofollow">parameterized</a> は、<code>unittests</code> と <code>pytest</code> テストの両方で機能します。',Am,Dl,yo="ただし、テストが <code>unittest</code> でない場合、<code>pytest.mark.parametrize</code> を使用することができます(または既存のテストのいくつかで、主に <code>examples</code> の下で使用されているのを見ることができます)。",Ym,Ol,uo="次に、同じ例を示しますが、今度は <code>pytest</code> の <code>parametrize</code> マーカーを使用しています:",qm,ts,Km,es,To="<code>parameterized</code> と同様に、<code>pytest.mark.parametrize</code> を使用すると、<code>-k</code> フィルタが役立たない場合でも、サブテストの実行を細かく制御できます。ただし、このパラメータ化関数はサブテストの名前をわずかに異なるものにします。以下にその例を示します:",Dm,ls,Om,ss,co="すると次のものがリストされます:",tf,ns,ef,ps,Jo="これで、特定のテストのみを実行できるようになりました。",lf,is,sf,as,jo="前の例と同様に。",nf,ms,pf,fs,Co="テストの中で、現在のテストファイルからの相対位置を知る必要があることがよくあります。しかし、これは簡単なことではありません。なぜなら、テストは複数のディレクトリから呼び出されるか、異なる深さのサブディレクトリに存在することがあるからです。<code>transformers.test_utils.TestCasePlus</code> というヘルパークラスは、すべての基本パスを整理し、簡単にアクセスできるようにすることで、この問題を解決します。",af,ds,Uo="<li><p><code>pathlib</code> オブジェクト(すべて完全に解決されたもの):</p> <ul><li><code>test_file_path</code> - 現在のテストファイルのパス、つまり <code>__file__</code></li> <li><code>test_file_dir</code> - 現在のテストファイルを含むディレクトリ</li> <li><code>tests_dir</code> - <code>tests</code> テストスイートのディレクトリ</li> <li><code>examples_dir</code> - <code>examples</code> テストスイートのディレクトリ</li> <li><code>repo_root_dir</code> - リポジトリのディレクトリ</li> <li><code>src_dir</code> - <code>transformers</code> サブディレクトリが存在する場所</li></ul></li> <li><p>パスの文字列表現――上記と同じですが、これらは <code>pathlib</code> オブジェクトではなく文字列としてパスを返します:</p> <ul><li><code>test_file_path_str</code></li> <li><code>test_file_dir_str</code></li> <li><code>tests_dir_str</code></li> <li><code>examples_dir_str</code></li> <li><code>repo_root_dir_str</code></li> <li><code>src_dir_str</code></li></ul></li>",mf,rs,bo="これらを使用し始めるには、テストが <code>transformers.test_utils.TestCasePlus</code> のサブクラスに存在することを確認するだけです。例:",ff,Ms,df,os,ho="もし、<code>pathlib</code> を介してパスを操作する必要がない場合、または単に文字列としてパスが必要な場合は、<code>pathlib</code> オブジェクトに <code>str()</code> を呼び出すか、<code>_str</code> で終わるアクセサを使用できます。例:",rf,ws,Mf,$s,of,ys,go="一意の一時ファイルとディレクトリの使用は、並列テストの実行には欠かせません。これにより、テストがお互いのデータを上書きしないようにします。また、これらを作成した各テストの終了時に一時ファイルとディレクトリが削除されることを望みます。そのため、これらのニーズを満たすパッケージである <code>tempfile</code> のようなパッケージの使用は重要です。",wf,us,_o="しかし、テストのデバッグ時には、一時ファイルやディレクトリに何が格納されているかを確認できる必要があり、テストを再実行するたびにランダムに変更されないその正確なパスを知りたいと思います。",$f,Ts,vo="<code>transformers.test_utils.TestCasePlus</code> というヘルパークラスは、このような目的に最適です。これは <code>unittest.TestCase</code> のサブクラスであるため、テストモジュールで簡単に継承することができます。",yf,cs,Io="以下はその使用例です:",uf,Js,Tf,js,Zo="このコードはユニークな一時ディレクトリを作成し、<code>tmp_dir</code> をその場所に設定します。",cf,Cs,xo="<li>ユニークな一時ディレクトリを作成します:</li>",Jf,Us,jf,bs,ko=`<code>tmp_dir</code> には、作成された一時ディレクトリへのパスが含まれます。期間終了後は自動的に削除されます | |
| テスト。`,Cf,hs,Go="<li>任意の一時ディレクトリを作成し、テストの開始前にそれが空であることを確認し、テスト後には空にしないでください。</li>",Uf,gs,bf,_s,Ho="これは、特定のディレクトリを監視し、前のテストがそこにデータを残さないことを確認したい場合に、デバッグに役立ちます。",hf,vs,Xo="<li><p><code>before</code> と <code>after</code> 引数を直接オーバーライドすることで、デフォルトの動作をオーバーライドできます。以下のいずれかの動作に導きます:</p> <ul><li><code>before=True</code>:テストの開始時に常に一時ディレクトリがクリアされます。</li> <li><code>before=False</code>:一時ディレクトリが既に存在する場合、既存のファイルはそのままになります。</li> <li><code>after=True</code>:テストの終了時に常に一時ディレクトリが削除されます。</li> <li><code>after=False</code>:テストの終了時に常に一時ディレクトリはそのままになります。</li></ul></li>",gf,b,_f,h,vf,Is,If,Zs,Bo="別のテストからインポートするために一時的に <code>sys.path</code> をオーバーライドする必要がある場合、<code>ExtendSysPath</code> コンテキストマネージャを使用できます。例:",Zf,xs,xf,ks,kf,Gs,Vo="これは、バグが見つかり、新しいテストが作成された場合であっても、バグがまだ修正されていない場合に役立ちます。メインリポジトリにコミットできるようにするには、<code>make test</code> の実行中にそれをスキップする必要があります。",Gf,Hs,Ro="メソッド:",Hf,Xs,zo="<li><p><strong>skip</strong> は、テストが特定の条件が満たされた場合にのみパスすることを期待しており、それ以外の場合は pytest がテストの実行をスキップします。一般的な例は、Windows専用のテストを非Windowsプラットフォームでスキップする場合、または現在利用できない外部リソースに依存するテストをスキップする場合です(例: データベースが利用できない場合)。</p></li> <li><p><strong>xfail</strong> は、何らかの理由でテストが失敗することを期待しています。一般的な例は、まだ実装されていない機能のテストや、まだ修正されていないバグのテストです。テストが予想される失敗にもかかわらずパスした場合(pytest.mark.xfailでマークされたテスト)、それはxpassとしてテストサマリーに報告されます。</p></li>",Xf,Bs,No="これらの2つの間の重要な違いの1つは、<code>skip</code> はテストを実行しない点であり、<code>xfail</code> は実行します。したがって、バグのあるコードが他のテストに影響を与える場合は、<code>xfail</code> を使用しないでください。",Bf,Vs,Vf,Rs,Lo="<li>テスト全体を無条件にスキップする方法は次のとおりです:</li>",Rf,zs,zf,Ns,Wo="または pytest 経由:",Nf,Ls,Lf,Ws,So="または <code>xfail</code> の方法:",Wf,Ss,Sf,Qs,Qo="<li>テスト内の内部チェックに基づいてテストをスキップする方法は次のとおりです。</li>",Qf,Fs,Ff,Ps,Fo="またはモジュール全体:",Pf,Es,Ef,As,Po="または <code>xfail</code> の方法:",Af,Ys,Yf,qs,Eo="<li>一部のインポートが欠落している場合にモジュール内のすべてのテストをスキップする方法は次のとおりです。</li>",qf,Ks,Kf,Ds,Ao="<li>条件に基づいてテストをスキップします。</li>",Df,Os,Of,tn,Yo="または:",td,en,ed,ln,qo="またはモジュール全体をスキップします。",ld,sn,sd,nn,Ko='詳細、例、および方法についての詳細は<a href="https://docs.pytest.org/en/latest/skipping.html" rel="nofollow">こちら</a>を参照してください。',nd,pn,pd,an,Do="テストライブラリは着実に成長しており、テストの一部は数分かかります。そのため、CIでテストスイートの完了を待つのは1時間待つ余裕がないことがあります。したがって、いくつかの例外を除いて、遅いテストは以下の例のようにマークすべきです:",id,mn,ad,fn,Oo="テストが<code>@slow</code>としてマークされたら、そのようなテストを実行するには、環境変数 <code>RUN_SLOW=1</code>を設定します。例:",md,dn,fd,rn,tw="<code>@parameterized</code> のようなデコレータはテスト名を書き換えるため、<code>@slow</code> および他のスキップデコレータ <code>@require_*</code> は正しく動作するためには、最後にリストアップする必要があります。以下は正しい使用例の一例です:",dd,Mn,rd,on,ew="このドキュメントの冒頭で説明したように、遅いテストは定期的なスケジュールに従って実行され、PRのCIチェックでは実行されません。そのため、一部の問題がPRの提出時に見落とされ、マージされる可能性があります。そのような問題は次回のスケジュールされたCIジョブで検出されます。しかし、それはまた、PRを提出する前に自分のマシンで遅いテストを実行する重要性を意味しています。",Md,wn,lw="どのテストを遅いテストとしてマークすべきかを選択するための、おおまかな意思決定メカニズムが次に示されています:",od,$n,sw="<li><p>テストがライブラリの内部コンポーネントの1つに焦点を当てている場合(例: モデリングファイル、トークン化ファイル、パイプライン)、そのテストは遅いテストスイートで実行する必要があります。それがライブラリの他の側面、たとえばドキュメンテーションや例に焦点を当てている場合、それらのテストは遅いテストスイートで実行する必要があります。そして、このアプローチを洗練させるために例外を設ける必要があります。</p></li> <li><p>重いウェイトセットや約50MB以上のデータセットをダウンロードする必要があるすべてのテスト(例: モデル統合テスト、トークナイザ統合テスト、パイプライン統合テスト)は遅いテストとして設定する必要があります。新しいモデルを追加する場合、統合テスト用にランダムなウェイトを持つ小さなバージョンを作成し、ハブにアップロードする必要があります。これについては以下の段落で詳しく説明します。</p></li> <li><p>特に高速化されていないトレーニングを行う必要があるすべてのテストは遅いテストとして設定する必要があります。</p></li> <li><p>一部の「遅い」であるべきでないテストが非常に遅い場合、およびそれらを <code>@slow</code> として設定する必要がある場合には例外を導入できます。大容量のファイルをディスクに保存および読み込みする自動モデリングテストは、<code>@slow</code> としてマークされたテストの良い例です。</p></li> <li><p>CIで1秒未満でテストが完了する場合(ダウンロードを含む)、それは通常のテストであるべきです。</p></li>",wd,yn,nw="すべての非遅いテストは、さまざまな内部要素を完全にカバーする必要がありますが、高速である必要があります。たとえば、特別に作成された小さなモデル(レイヤー数が最小限で、語彙サイズが小さいなど)を使用して、かなりのカバレッジを実現できます。その後、<code>@slow</code> テストでは大規模な遅いモデルを使用して質的なテストを実行できます。これらを使用するには、以下のように <em>tiny</em> モデルを探してください:",$d,un,yd,Tn,pw='<a href="https://github.com/huggingface/transformers/tree/main/scripts/fsmt/fsmt-make-tiny-model.py" rel="nofollow">スクリプトの例</a>があり、これにより tiny-wmt19-en-de のような小さなモデルが作成されます。特定のモデルのアーキテクチャに簡単に調整できます。',ud,cn,iw="実行時間を誤って測定することが簡単です。たとえば、巨大なモデルのダウンロードに関するオーバーヘッドがある場合、ローカルでテストするとダウンロードされたファイルがキャッシュされ、ダウンロード時間が計測されなくなります。したがって、CIログの実行速度レポート(<code>pytest --durations=0 tests</code> の出力)を確認してください。",Td,Jn,aw="このレポートは、遅いテストとしてマークされていない遅い外れ値や、高速に書き直す必要があるテストを見つけるのにも役立ちます。テストスイートがCIで遅くなり始めた場合、このレポートのトップリストには最も遅いテストが表示されます。",cd,jn,Jd,Cn,mw='<code>stdout</code> および/または <code>stderr</code> に書き込む関数をテストするために、テストは <code>pytest</code> の <a href="https://docs.pytest.org/en/latest/capture.html" rel="nofollow">capsys システム</a> を使用してこれらのストリームにアクセスできます。以下はその方法です:',jd,Un,Cd,bn,fw=`そしてもちろん、ほとんどの場合、<code>stderr</code>は例外の一部として提供されるため、そのような場合には try/excel を使用する必要があります。 | |
| ケース:`,Ud,hn,bd,gn,dw="stdout をキャプチャするもう 1 つのアプローチは、<code>contextlib.redirect_stdout</code>を使用することです。",hd,_n,gd,vn,rw="stdout をキャプチャする際の重要な潜在的な問題は、通常の <code>print</code> でこれまでに出力された内容をリセットする可能性がある <code>\\r</code> 文字が含まれている可能性があることです。<code>pytest</code> 自体には問題はありませんが、<code>pytest -s</code> ではこれらの文字がバッファに含まれるため、<code>-s</code> ありとなしでテストを実行できるようにするには、<code>re.sub(r'~.*\\r', '', buf, 0, re.M)</code> を使用してキャプチャされた出力に対して追加のクリーンアップを行う必要があります。",_d,In,Mw="しかし、その後、<code>\\r</code> が含まれているかどうかにかかわらず、すべての操作を自動的に処理するヘルパーコンテキストマネージャラッパーがあります。したがって、次のように簡単に行えます:",vd,Zn,Id,xn,ow="完全なテスト例は次のとおりです。",Zd,kn,xd,Gn,ww="<code>stderr</code> をキャプチャしたい場合は、代わりに <code>CaptureStderr</code> クラスを使用してください。",kd,Hn,Gd,Xn,$w="両方のストリームを一度にキャプチャする必要がある場合は、親の <code>CaptureStd</code> クラスを使用します。",Hd,Bn,Xd,Vn,yw=`また、テストの問題のデバッグを支援するために、デフォルトで、これらのコンテキスト マネージャーは終了時にキャプチャされたストリームを自動的に再生します。 | |
| 文脈から。`,Bd,Rn,Vd,zn,uw="ロガーの出力を検証する必要がある場合は、<code>CaptureLogger</code>を使用できます。",Rd,Nn,zd,Ln,Nd,Wn,Tw=`特定のテストで環境変数の影響をテストしたい場合は、ヘルパー デコレータを使用できます。 | |
| <code>transformers.testing_utils.mockenv</code>`,Ld,Sn,Wd,Qn,cw=`場合によっては、外部プログラムを呼び出す必要があるため、<code>os.environ</code> に<code>PYTHONPATH</code>を設定してインクルードする必要があります。 | |
| 複数のローカル パス。ヘルパー クラス <code>transformers.test_utils.TestCasePlus</code> が役に立ちます。`,Sd,Fn,Qd,Pn,Jw=`テストファイルが <code>tests</code> テストスイートまたは <code>examples</code> のどちらにあるかに応じて | |
| <code>env[PYTHONPATH]</code> を使用して、これら 2 つのディレクトリのいずれかを含めます。また、テストが確実に行われるようにするための <code>src</code> ディレクトリも含めます。 | |
| 現在のリポジトリに対して実行され、最後に、テストが実行される前にすでに設定されていた <code>env[PYTHONPATH]</code> を使用して実行されます。 | |
| 何かあれば呼ばれます。`,Fd,En,jw="このヘルパー メソッドは <code>os.environ</code> オブジェクトのコピーを作成するため、元のオブジェクトはそのまま残ります。",Pd,An,Ed,Yn,Cw=`状況によっては、テストのランダム性を削除したい場合があります。同一の再現可能な結果セットを取得するには、 | |
| シードを修正する必要があります:`,Ad,qn,Yd,Kn,qd,Dn,Uw="警告が発生した時点でデバッガーを開始するには、次の手順を実行します。",Kd,On,Dd,tp,Od,ep,bw="セルフプッシュのワークフローCIジョブをトリガーするには、以下の手順を実行する必要があります:",tr,lp,hw='<li><code>transformers</code> のリモートリポジトリで新しいブランチを作成します(フォークではなく、元のリポジトリで行います)。</li> <li>ブランチの名前は <code>ci_</code> または <code>ci-</code> で始まる必要があります(<code>main</code> もトリガーしますが、<code>main</code> ではPRを作成できません)。また、特定のパスでのみトリガーされます - このドキュメントが書かれた後に変更された場合に備えて、最新の定義は<a href="https://github.com/huggingface/transformers/blob/main/.github/workflows/self-push.yml" rel="nofollow">こちら</a>の <em>push:</em> にあります。</li> <li>このブランチからPRを作成します。</li> <li>その後、このジョブが<a href="https://github.com/huggingface/transformers/actions/workflows/self-push.yml" rel="nofollow">ここ</a>に表示されます。ジョブはバックログがある場合、すぐに実行されないことがあります。</li>',er,sp,lr,np,gw="CI機能のテストは通常のCIの正常な動作に干渉する可能性があるため、新しいCI機能を追加する場合、以下の手順に従う必要があります。",sr,pp,_w="<li>テストが必要なものをテストするための新しい専用のジョブを作成します。</li> <li>新しいジョブは常に成功する必要があるため、常にグリーン ✓(詳細は以下参照)を表示する必要があります。</li> <li>さまざまな種類のPR(ユーザーフォークブランチ、非フォークブランチ、github.com UIから直接ファイルを編集するブランチ、さまざまな強制プッシュなど)が実行されるまでいくつかの日間実行し、実験的なジョブのログを監視します(意図的に常にグリーンになるようになっている全体のジョブの緑ではなく)。</li> <li>すべてが安定していることが明確になったら、新しい変更を既存のジョブに統合します。</li>",nr,ip,vw="このように、CI機能自体の実験が通常のワークフローに干渉しないようにできます。",pr,ap,Iw="では、新しいCI機能が開発中である間、ジョブを常に成功させるにはどうすればいいでしょうか?",ir,mp,Zw="TravisCIのような一部のCIは <code>ignore-step-failure</code> をサポートし、全体のジョブを成功として報告しますが、この文書が作成された時点ではCircleCIとGithub Actionsはそれをサポートしていません。",ar,fp,xw="したがって、以下のワークアラウンドを使用できます:",mr,dp,kw="<li>bashスクリプト内で潜在的な失敗を抑制するために実行コマンドの冒頭に <code>set +euo pipefail</code> を記述します。</li> <li>最後のコマンドは成功する必要があります。たとえば <code>echo "done"</code> または単に <code>true</code> を使用できます。</li>",fr,rp,Gw="以下は例です:",dr,Mp,rr,op,Hw="単純なコマンドの場合は、次のようにすることもできます。",Mr,wp,or,$p,Xw="もちろん、結果に満足したら、実験的なステップやジョブを通常のジョブと統合し、<code>set +euo pipefail</code> などの追加した要素を削除して、実験的なジョブが通常のCIの動作に干渉しないようにします。",wr,yp,Bw="このプロセス全体は、実験的なステップに対して <code>allow-failure</code> のようなものを設定し、PRの全体のステータスに影響を与えずに失敗させることができれば、はるかに簡単になったでしょう。しかし、前述の通り、現在はCircleCIとGithub Actionsはこの機能をサポートしていません。",$r,up,Vw="この機能に関しての投票や、CIに特有のスレッドでその進捗状況を確認できます:",yr,Tp,Rw='<li><a href="https://github.com/actions/toolkit/issues/399" rel="nofollow">Github Actions:</a></li> <li><a href="https://ideas.circleci.com/ideas/CCI-I-344" rel="nofollow">CircleCI:</a></li>',ur,cp,Tr,Jp,cr;return g=new y({props:{title:"Testing",local:"testing",headingTag:"h1"}}),Z=new y({props:{title:"How transformers are tested",local:"how-transformers-are-tested",headingTag:"h2"}}),k=new $({props:{code:"UlVOX1NMT1clM0QxJTIwcHl0ZXN0JTIwdGVzdHMlMkYlMEFSVU5fU0xPVyUzRDElMjBweXRlc3QlMjBleGFtcGxlcyUyRg==",highlighted:`RUN_SLOW=1 pytest tests/ | |
| RUN_SLOW=1 pytest examples/`,wrap:!1}}),H=new y({props:{title:"Running tests",local:"running-tests",headingTag:"h2"}}),X=new y({props:{title:"Choosing which tests to run",local:"choosing-which-tests-to-run",headingTag:"h3"}}),z=new $({props:{code:"cHl0ZXN0",highlighted:"pytest",wrap:!1}}),L=new $({props:{code:"bWFrZSUyMHRlc3Q=",highlighted:'make <span class="hljs-built_in">test</span>',wrap:!1}}),S=new $({props:{code:"cHl0aG9uJTIwLW0lMjBweXRlc3QlMjAtbiUyMGF1dG8lMjAtLWRpc3QlM0Rsb2FkZmlsZSUyMC1zJTIwLXYlMjAuJTJGdGVzdHMlMkY=",highlighted:"python -m pytest -n auto --dist=loadfile -s -v ./tests/",wrap:!1}}),P=new y({props:{title:"Getting the list of all tests",local:"getting-the-list-of-all-tests",headingTag:"h3"}}),A=new $({props:{code:"cHl0ZXN0JTIwLS1jb2xsZWN0LW9ubHklMjAtcQ==",highlighted:"pytest --collect-only -q",wrap:!1}}),q=new $({props:{code:"cHl0ZXN0JTIwdGVzdHMlMkZ0ZXN0X29wdGltaXphdGlvbi5weSUyMC0tY29sbGVjdC1vbmx5JTIwLXE=",highlighted:"pytest tests/test_optimization.py --collect-only -q",wrap:!1}}),K=new y({props:{title:"Run a specific test module",local:"run-a-specific-test-module",headingTag:"h3"}}),O=new $({props:{code:"cHl0ZXN0JTIwdGVzdHMlMkZ1dGlscyUyRnRlc3RfbG9nZ2luZy5weQ==",highlighted:"pytest tests/utils/test_logging.py",wrap:!1}}),tt=new y({props:{title:"Run specific tests",local:"run-specific-tests",headingTag:"h3"}}),lt=new $({props:{code:"cHl0ZXN0JTIwdGVzdHMlMkZ0ZXN0X29wdGltaXphdGlvbi5weSUzQSUzQU9wdGltaXphdGlvblRlc3QlM0ElM0F0ZXN0X2FkYW1fdw==",highlighted:"pytest tests/test_optimization.py::OptimizationTest::test_adam_w",wrap:!1}}),it=new $({props:{code:"cHl0ZXN0JTIwdGVzdHMlMkZ0ZXN0X29wdGltaXphdGlvbi5weSUzQSUzQU9wdGltaXphdGlvblRlc3Q=",highlighted:"pytest tests/test_optimization.py::OptimizationTest",wrap:!1}}),ft=new $({props:{code:"cHl0ZXN0JTIwdGVzdHMlMkZ0ZXN0X29wdGltaXphdGlvbi5weSUzQSUzQU9wdGltaXphdGlvblRlc3QlMjAtLWNvbGxlY3Qtb25seSUyMC1x",highlighted:"pytest tests/test_optimization.py::OptimizationTest --collect-only -q",wrap:!1}}),Mt=new $({props:{code:"cHl0ZXN0JTIwLWslMjBhZGFtJTIwdGVzdHMlMkZ0ZXN0X29wdGltaXphdGlvbi5weQ==",highlighted:"pytest -k adam tests/test_optimization.py",wrap:!1}}),$t=new $({props:{code:"cHl0ZXN0JTIwLWslMjAlMjJub3QlMjBhZGFtJTIyJTIwdGVzdHMlMkZ0ZXN0X29wdGltaXphdGlvbi5weQ==",highlighted:'pytest -k <span class="hljs-string">"not adam"</span> tests/test_optimization.py',wrap:!1}}),ut=new $({props:{code:"cHl0ZXN0JTIwLWslMjAlMjJhZGElMjBhbmQlMjBub3QlMjBhZGFtJTIyJTIwdGVzdHMlMkZ0ZXN0X29wdGltaXphdGlvbi5weQ==",highlighted:'pytest -k <span class="hljs-string">"ada and not adam"</span> tests/test_optimization.py',wrap:!1}}),ct=new $({props:{code:"cHl0ZXN0JTIwLWslMjAlMjJ0ZXN0X2FkYW1fdyUyMG9yJTIwdGVzdF9hZGFtX3clMjIlMjB0ZXN0cyUyRnRlc3Rfb3B0aW1pemF0aW9uLnB5",highlighted:'pytest -k <span class="hljs-string">"test_adam_w or test_adam_w"</span> tests/test_optimization.py',wrap:!1}}),Ct=new $({props:{code:"cHl0ZXN0JTIwLWslMjAlMjJ0ZXN0JTIwYW5kJTIwYWRhJTIyJTIwdGVzdHMlMkZ0ZXN0X29wdGltaXphdGlvbi5weQ==",highlighted:'pytest -k <span class="hljs-string">"test and ada"</span> tests/test_optimization.py',wrap:!1}}),Ut=new y({props:{title:"Run accelerate tests",local:"run-accelerate-tests",headingTag:"h3"}}),ht=new $({props:{code:"UlVOX1NMT1clM0QxJTIwcHl0ZXN0JTIwLW0lMjBhY2NlbGVyYXRlX3Rlc3RzJTIwdGVzdHMlMkZtb2RlbHMlMkZvcHQlMkZ0ZXN0X21vZGVsaW5nX29wdC5weSUyMA==",highlighted:"RUN_SLOW=1 pytest -m accelerate_tests tests/models/opt/test_modeling_opt.py ",wrap:!1}}),gt=new y({props:{title:"Run documentation tests",local:"run-documentation-tests",headingTag:"h3"}}),vt=new $({props:{code:"ciUyMiUyMiUyMiUwQVJldHVybnMlM0ElMEElMEFFeGFtcGxlJTNBJTBBJTIwJTIwJTIwJTIwJTYwJTYwJTYwcHl0aG9uJTBBJTIwJTIwJTIwJTIwJTNFJTNFJTNFJTIwaW1wb3J0JTIwdG9yY2glMEElMjAlMjAlMjAlMjAlM0UlM0UlM0UlMjBmcm9tJTIwdHJhbnNmb3JtZXJzJTIwaW1wb3J0JTIwV2hpc3Blck1vZGVsJTJDJTIwV2hpc3BlckZlYXR1cmVFeHRyYWN0b3IlMEElMjAlMjAlMjAlMjAlM0UlM0UlM0UlMjBmcm9tJTIwZGF0YXNldHMlMjBpbXBvcnQlMjBsb2FkX2RhdGFzZXQlMEElMEElMjAlMjAlMjAlMjAlM0UlM0UlM0UlMjBtb2RlbCUyMCUzRCUyMFdoaXNwZXJNb2RlbC5mcm9tX3ByZXRyYWluZWQoJTIyb3BlbmFpJTJGd2hpc3Blci1iYXNlJTIyKSUwQSUyMCUyMCUyMCUyMCUzRSUzRSUzRSUyMGZlYXR1cmVfZXh0cmFjdG9yJTIwJTNEJTIwV2hpc3BlckZlYXR1cmVFeHRyYWN0b3IuZnJvbV9wcmV0cmFpbmVkKCUyMm9wZW5haSUyRndoaXNwZXItYmFzZSUyMiklMEElMjAlMjAlMjAlMjAlM0UlM0UlM0UlMjBkcyUyMCUzRCUyMGxvYWRfZGF0YXNldCglMjJoZi1pbnRlcm5hbC10ZXN0aW5nJTJGbGlicmlzcGVlY2hfYXNyX2R1bW15JTIyJTJDJTIwJTIyY2xlYW4lMjIlMkMlMjBzcGxpdCUzRCUyMnZhbGlkYXRpb24lMjIpJTBBJTIwJTIwJTIwJTIwJTNFJTNFJTNFJTIwaW5wdXRzJTIwJTNEJTIwZmVhdHVyZV9leHRyYWN0b3IoZHMlNUIwJTVEJTVCJTIyYXVkaW8lMjIlNUQlNUIlMjJhcnJheSUyMiU1RCUyQyUyMHJldHVybl90ZW5zb3JzJTNEJTIycHQlMjIpJTBBJTIwJTIwJTIwJTIwJTNFJTNFJTNFJTIwaW5wdXRfZmVhdHVyZXMlMjAlM0QlMjBpbnB1dHMuaW5wdXRfZmVhdHVyZXMlMEElMjAlMjAlMjAlMjAlM0UlM0UlM0UlMjBkZWNvZGVyX2lucHV0X2lkcyUyMCUzRCUyMHRvcmNoLnRlbnNvciglNUIlNUIxJTJDJTIwMSU1RCU1RCklMjAqJTIwbW9kZWwuY29uZmlnLmRlY29kZXJfc3RhcnRfdG9rZW5faWQlMEElMjAlMjAlMjAlMjAlM0UlM0UlM0UlMjBsYXN0X2hpZGRlbl9zdGF0ZSUyMCUzRCUyMG1vZGVsKGlucHV0X2ZlYXR1cmVzJTJDJTIwZGVjb2Rlcl9pbnB1dF9pZHMlM0RkZWNvZGVyX2lucHV0X2lkcykubGFzdF9oaWRkZW5fc3RhdGUlMEElMjAlMjAlMjAlMjAlM0UlM0UlM0UlMjBsaXN0KGxhc3RfaGlkZGVuX3N0YXRlLnNoYXBlKSUwQSUyMCUyMCUyMCUyMCU1QjElMkMlMjAyJTJDJTIwNTEyJTVEJTBBJTIwJTIwJTIwJTIwJTYwJTYwJTYwJTIyJTIyJTIyJTBB",highlighted:`<span class="hljs-string">r""" | |
| Returns: | |
| Example: | |
| \`\`\`python | |
| >>> import torch | |
| >>> from transformers import WhisperModel, WhisperFeatureExtractor | |
| >>> from datasets import load_dataset | |
| >>> model = WhisperModel.from_pretrained("openai/whisper-base") | |
| >>> feature_extractor = WhisperFeatureExtractor.from_pretrained("openai/whisper-base") | |
| >>> ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation") | |
| >>> inputs = feature_extractor(ds[0]["audio"]["array"], return_tensors="pt") | |
| >>> input_features = inputs.input_features | |
| >>> decoder_input_ids = torch.tensor([[1, 1]]) * model.config.decoder_start_token_id | |
| >>> last_hidden_state = model(input_features, decoder_input_ids=decoder_input_ids).last_hidden_state | |
| >>> list(last_hidden_state.shape) | |
| [1, 2, 512] | |
| \`\`\`"""</span> | |
| `,wrap:!1}}),Zt=new $({props:{code:"cHl0ZXN0JTIwLS1kb2N0ZXN0LW1vZHVsZXMlMjAlM0NwYXRoX3RvX2ZpbGVfb3JfZGlyJTNF",highlighted:"pytest --doctest-modules <path_to_file_or_dir>",wrap:!1}}),kt=new y({props:{title:"Run only modified tests",local:"run-only-modified-tests",headingTag:"h3"}}),Ht=new $({props:{code:"cGlwJTIwaW5zdGFsbCUyMHB5dGVzdC1waWNrZWQ=",highlighted:"pip install pytest-picked",wrap:!1}}),Xt=new $({props:{code:"cHl0ZXN0JTIwLS1waWNrZWQ=",highlighted:"pytest --picked",wrap:!1}}),Vt=new y({props:{title:"Automatically rerun failed tests on source modification",local:"automatically-rerun-failed-tests-on-source-modification",headingTag:"h3"}}),zt=new $({props:{code:"cGlwJTIwaW5zdGFsbCUyMHB5dGVzdC14ZGlzdA==",highlighted:"pip install pytest-xdist",wrap:!1}}),Wt=new $({props:{code:"JTVCdG9vbCUzQXB5dGVzdCU1RCUwQWxvb3BvbmZhaWxyb290cyUyMCUzRCUyMHRyYW5zZm9ybWVycyUyMHRlc3Rz",highlighted:`<span class="hljs-section">[tool:pytest]</span> | |
| <span class="hljs-attr">looponfailroots</span> = transformers tests`,wrap:!1}}),Qt=new $({props:{code:"JTVCcHl0ZXN0JTVEJTBBbG9vcG9uZmFpbHJvb3RzJTIwJTNEJTIwdHJhbnNmb3JtZXJzJTIwdGVzdHM=",highlighted:`<span class="hljs-section">[pytest]</span> | |
| <span class="hljs-attr">looponfailroots</span> = transformers tests`,wrap:!1}}),Et=new y({props:{title:"Skip a test module",local:"skip-a-test-module",headingTag:"h3"}}),Yt=new $({props:{code:"cHl0ZXN0JTIwKmxzJTIwLTElMjB0ZXN0cyUyRipweSUyMCU3QyUyMGdyZXAlMjAtdiUyMHRlc3RfbW9kZWxpbmcq",highlighted:'pytest *<span class="hljs-built_in">ls</span> -1 tests/*py | grep -v test_modeling*',wrap:!1}}),qt=new y({props:{title:"Clearing state",local:"clearing-state",headingTag:"h3"}}),Dt=new $({props:{code:"cHl0ZXN0JTIwLS1jYWNoZS1jbGVhciUyMHRlc3Rz",highlighted:"pytest --cache-clear tests",wrap:!1}}),Ot=new y({props:{title:"Running tests in parallel",local:"running-tests-in-parallel",headingTag:"h3"}}),se=new y({props:{title:"Test order and repetition",local:"test-order-and-repetition",headingTag:"h3"}}),pe=new y({props:{title:"Repeat tests",local:"repeat-tests",headingTag:"h4"}}),ae=new $({props:{code:"cGlwJTIwaW5zdGFsbCUyMHB5dGVzdC1mbGFrZWZpbmRlcg==",highlighted:"pip install pytest-flakefinder",wrap:!1}}),fe=new $({props:{code:"cHl0ZXN0JTIwLS1mbGFrZS1maW5kZXIlMjAtLWZsYWtlLXJ1bnMlM0Q1JTIwdGVzdHMlMkZ0ZXN0X2ZhaWxpbmdfdGVzdC5weQ==",highlighted:"pytest --flake-finder --flake-runs=5 tests/test_failing_test.py",wrap:!1}}),C=new Jr({props:{$$slots:{default:[Dw]},$$scope:{ctx:j}}}),U=new Jr({props:{$$slots:{default:[Ow]},$$scope:{ctx:j}}}),de=new y({props:{title:"Run tests in a random order",local:"run-tests-in-a-random-order",headingTag:"h4"}}),re=new $({props:{code:"cGlwJTIwaW5zdGFsbCUyMHB5dGVzdC1yYW5kb20tb3JkZXI=",highlighted:"pip install pytest-random-order",wrap:!1}}),we=new $({props:{code:"cHl0ZXN0JTIwdGVzdHMlMEElNUIuLi4lNUQlMEFVc2luZyUyMC0tcmFuZG9tLW9yZGVyLWJ1Y2tldCUzRG1vZHVsZSUwQVVzaW5nJTIwLS1yYW5kb20tb3JkZXItc2VlZCUzRDU3MzY2Mw==",highlighted:`pytest tests | |
| [...] | |
| Using --random-order-bucket=module | |
| Using --random-order-seed=573663`,wrap:!1}}),ye=new $({props:{code:"cHl0ZXN0JTIwLS1yYW5kb20tb3JkZXItc2VlZCUzRDU3MzY2MyUwQSU1Qi4uLiU1RCUwQVVzaW5nJTIwLS1yYW5kb20tb3JkZXItYnVja2V0JTNEbW9kdWxlJTBBVXNpbmclMjAtLXJhbmRvbS1vcmRlci1zZWVkJTNENTczNjYz",highlighted:`pytest --random-order-seed=573663 | |
| [...] | |
| Using --random-order-bucket=module | |
| Using --random-order-seed=573663`,wrap:!1}}),Te=new $({props:{code:"cHl0ZXN0JTIwLS1yYW5kb20tb3JkZXItYnVja2V0JTNEbm9uZSUyMHRlc3RzJTJGdGVzdF9hLnB5JTIwdGVzdHMlMkZ0ZXN0X2MucHklMjB0ZXN0cyUyRnRlc3RfYi5weQ==",highlighted:"pytest --random-order-bucket=none tests/test_a.py tests/test_c.py tests/test_b.py",wrap:!1}}),Je=new $({props:{code:"cHl0ZXN0JTIwLS1yYW5kb20tb3JkZXItYnVja2V0JTNEbm9uZQ==",highlighted:"pytest --random-order-bucket=none",wrap:!1}}),Ue=new y({props:{title:"Look and feel variations",local:"look-and-feel-variations",headingTag:"h3"}}),be=new y({props:{title:"pytest-sugar",local:"pytest-sugar",headingTag:"h4"}}),ge=new $({props:{code:"cGlwJTIwaW5zdGFsbCUyMHB5dGVzdC1zdWdhcg==",highlighted:"pip install pytest-sugar",wrap:!1}}),ve=new $({props:{code:"cHl0ZXN0JTIwLXAlMjBubyUzQXN1Z2Fy",highlighted:"pytest -p no:sugar",wrap:!1}}),Ze=new y({props:{title:"Report each sub-test name and its progress",local:"report-each-sub-test-name-and-its-progress",headingTag:"h4"}}),ke=new $({props:{code:"cHl0ZXN0JTIwLS1wc3BlYyUyMHRlc3RzJTJGdGVzdF9vcHRpbWl6YXRpb24ucHk=",highlighted:"pytest --pspec tests/test_optimization.py",wrap:!1}}),Ge=new y({props:{title:"Instantly shows failed tests",local:"instantly-shows-failed-tests",headingTag:"h4"}}),Xe=new $({props:{code:"cGlwJTIwaW5zdGFsbCUyMHB5dGVzdC1pbnN0YWZhaWw=",highlighted:"pip install pytest-instafail",wrap:!1}}),Be=new $({props:{code:"cHl0ZXN0JTIwLS1pbnN0YWZhaWw=",highlighted:"pytest --instafail",wrap:!1}}),Ve=new y({props:{title:"To GPU or not to GPU",local:"to-gpu-or-not-to-gpu",headingTag:"h3"}}),ze=new $({props:{code:"Q1VEQV9WSVNJQkxFX0RFVklDRVMlM0QlMjIlMjIlMjBweXRlc3QlMjB0ZXN0cyUyRnV0aWxzJTJGdGVzdF9sb2dnaW5nLnB5",highlighted:'CUDA_VISIBLE_DEVICES=<span class="hljs-string">""</span> pytest tests/utils/test_logging.py',wrap:!1}}),Le=new $({props:{code:"Q1VEQV9WSVNJQkxFX0RFVklDRVMlM0QlMjIxJTIyJTIwcHl0ZXN0JTIwdGVzdHMlMkZ1dGlscyUyRnRlc3RfbG9nZ2luZy5weQ==",highlighted:'CUDA_VISIBLE_DEVICES=<span class="hljs-string">"1"</span> pytest tests/utils/test_logging.py',wrap:!1}}),Ae=new $({props:{code:"JTQwcmVxdWlyZV90b3JjaF9tdWx0aV9ncHUlMEFkZWYlMjB0ZXN0X2V4YW1wbGVfd2l0aF9tdWx0aV9ncHUoKSUzQQ==",highlighted:`<span class="hljs-meta">@require_torch_multi_gpu</span> | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">test_example_with_multi_gpu</span>():`,wrap:!1}}),qe=new $({props:{code:"JTQwcmVxdWlyZV90ZiUwQWRlZiUyMHRlc3RfdGZfdGhpbmdfd2l0aF90ZW5zb3JmbG93KCklM0E=",highlighted:`<span class="hljs-meta">@require_tf</span> | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">test_tf_thing_with_tensorflow</span>():`,wrap:!1}}),De=new $({props:{code:"JTQwcmVxdWlyZV90b3JjaF9ncHUlMEElNDBzbG93JTBBZGVmJTIwdGVzdF9leGFtcGxlX3Nsb3dfb25fZ3B1KCklM0E=",highlighted:`<span class="hljs-meta">@require_torch_gpu</span> | |
| <span class="hljs-meta">@slow</span> | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">test_example_slow_on_gpu</span>():`,wrap:!1}}),tl=new $({props:{code:"JTQwcGFyYW1ldGVyaXplZC5leHBhbmQoLi4uKSUwQSU0MHJlcXVpcmVfdG9yY2hfbXVsdGlfZ3B1JTBBZGVmJTIwdGVzdF9pbnRlZ3JhdGlvbl9mb28oKSUzQQ==",highlighted:`<span class="hljs-meta">@parameterized.expand(<span class="hljs-params">...</span>)</span> | |
| <span class="hljs-meta">@require_torch_multi_gpu</span> | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">test_integration_foo</span>():`,wrap:!1}}),nl=new $({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycy50ZXN0aW5nX3V0aWxzJTIwaW1wb3J0JTIwZ2V0X2dwdV9jb3VudCUwQSUwQW5fZ3B1JTIwJTNEJTIwZ2V0X2dwdV9jb3VudCgpJTIwJTIwJTIzJTIwd29ya3MlMjB3aXRoJTIwdG9yY2glMjBhbmQlMjB0Zg==",highlighted:`<span class="hljs-keyword">from</span> transformers.testing_utils <span class="hljs-keyword">import</span> get_gpu_count | |
| n_gpu = get_gpu_count() <span class="hljs-comment"># works with torch and tf</span>`,wrap:!1}}),pl=new y({props:{title:"Testing with a specific PyTorch backend or device",local:"testing-with-a-specific-pytorch-backend-or-device",headingTag:"h3"}}),al=new $({props:{code:"VFJBTlNGT1JNRVJTX1RFU1RfREVWSUNFJTNEJTIyY3B1JTIyJTIwcHl0ZXN0JTIwdGVzdHMlMkZ1dGlscyUyRnRlc3RfbG9nZ2luZy5weQ==",highlighted:'TRANSFORMERS_TEST_DEVICE=<span class="hljs-string">"cpu"</span> pytest tests/utils/test_logging.py',wrap:!1}}),dl=new $({props:{code:"VFJBTlNGT1JNRVJTX1RFU1RfQkFDS0VORCUzRCUyMnRvcmNoX25wdSUyMiUyMHB5dGVzdCUyMHRlc3RzJTJGdXRpbHMlMkZ0ZXN0X2xvZ2dpbmcucHk=",highlighted:'TRANSFORMERS_TEST_BACKEND=<span class="hljs-string">"torch_npu"</span> pytest tests/utils/test_logging.py',wrap:!1}}),rl=new y({props:{title:"Distributed training",local:"distributed-training",headingTag:"h3"}}),ul=new $({props:{code:"Q1VEQV9WSVNJQkxFX0RFVklDRVMlM0QwJTJDMSUyMFJVTl9TTE9XJTNEMSUyMHB5dGVzdCUyMC1zdiUyMHRlc3RzJTJGdGVzdF90cmFpbmVyX2Rpc3RyaWJ1dGVkLnB5",highlighted:"CUDA_VISIBLE_DEVICES=0,1 RUN_SLOW=1 pytest -sv tests/test_trainer_distributed.py",wrap:!1}}),Tl=new y({props:{title:"Output capture",local:"output-capture",headingTag:"h3"}}),Cl=new $({props:{code:"cHl0ZXN0JTIwLXMlMjB0ZXN0cyUyRnV0aWxzJTJGdGVzdF9sb2dnaW5nLnB5",highlighted:"pytest -s tests/utils/test_logging.py",wrap:!1}}),bl=new $({props:{code:"cHkudGVzdCUyMHRlc3RzJTIwLS1qdW5pdHhtbCUzRHJlc3VsdC54bWw=",highlighted:"py.test tests --junitxml=result.xml",wrap:!1}}),hl=new y({props:{title:"Color control",local:"color-control",headingTag:"h3"}}),_l=new $({props:{code:"cHl0ZXN0JTIwLS1jb2xvciUzRG5vJTIwdGVzdHMlMkZ1dGlscyUyRnRlc3RfbG9nZ2luZy5weQ==",highlighted:"pytest --color=no tests/utils/test_logging.py",wrap:!1}}),vl=new y({props:{title:"Sending test report to online pastebin service",local:"sending-test-report-to-online-pastebin-service",headingTag:"h3"}}),Zl=new $({props:{code:"cHl0ZXN0JTIwLS1wYXN0ZWJpbiUzRGZhaWxlZCUyMHRlc3RzJTJGdXRpbHMlMkZ0ZXN0X2xvZ2dpbmcucHk=",highlighted:"pytest --pastebin=failed tests/utils/test_logging.py",wrap:!1}}),Gl=new $({props:{code:"cHl0ZXN0JTIwLS1wYXN0ZWJpbiUzRGFsbCUyMHRlc3RzJTJGdXRpbHMlMkZ0ZXN0X2xvZ2dpbmcucHk=",highlighted:"pytest --pastebin=all tests/utils/test_logging.py",wrap:!1}}),Hl=new y({props:{title:"Writing tests",local:"writing-tests",headingTag:"h2"}}),Vl=new y({props:{title:"Parametrization",local:"parametrization",headingTag:"h3"}}),zl=new $({props:{code:"JTIzJTIwdGVzdF90aGlzMS5weSUwQWltcG9ydCUyMHVuaXR0ZXN0JTBBZnJvbSUyMHBhcmFtZXRlcml6ZWQlMjBpbXBvcnQlMjBwYXJhbWV0ZXJpemVkJTBBJTBBJTBBY2xhc3MlMjBUZXN0TWF0aFVuaXRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKSUzQSUwQSUyMCUyMCUyMCUyMCU0MHBhcmFtZXRlcml6ZWQuZXhwYW5kKCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCU1QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCglMjJuZWdhdGl2ZSUyMiUyQyUyMC0xLjUlMkMlMjAtMi4wKSUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCglMjJpbnRlZ2VyJTIyJTJDJTIwMSUyQyUyMDEuMCklMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAoJTIybGFyZ2UlMjBmcmFjdGlvbiUyMiUyQyUyMDEuNiUyQyUyMDEpJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTVEJTBBJTIwJTIwJTIwJTIwKSUwQSUyMCUyMCUyMCUyMGRlZiUyMHRlc3RfZmxvb3Ioc2VsZiUyQyUyMG5hbWUlMkMlMjBpbnB1dCUyQyUyMGV4cGVjdGVkKSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGFzc2VydF9lcXVhbChtYXRoLmZsb29yKGlucHV0KSUyQyUyMGV4cGVjdGVkKQ==",highlighted:`<span class="hljs-comment"># test_this1.py</span> | |
| <span class="hljs-keyword">import</span> unittest | |
| <span class="hljs-keyword">from</span> parameterized <span class="hljs-keyword">import</span> parameterized | |
| <span class="hljs-keyword">class</span> <span class="hljs-title class_">TestMathUnitTest</span>(unittest.TestCase): | |
| <span class="hljs-meta"> @parameterized.expand(<span class="hljs-params"> | |
| [ | |
| (<span class="hljs-params"><span class="hljs-string">"negative"</span>, -<span class="hljs-number">1.5</span>, -<span class="hljs-number">2.0</span></span>), | |
| (<span class="hljs-params"><span class="hljs-string">"integer"</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1.0</span></span>), | |
| (<span class="hljs-params"><span class="hljs-string">"large fraction"</span>, <span class="hljs-number">1.6</span>, <span class="hljs-number">1</span></span>), | |
| ] | |
| </span>)</span> | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">test_floor</span>(<span class="hljs-params">self, name, <span class="hljs-built_in">input</span>, expected</span>): | |
| assert_equal(math.floor(<span class="hljs-built_in">input</span>), expected)`,wrap:!1}}),Wl=new $({props:{code:"cHl0ZXN0JTIwLWslMjAlMjJuZWdhdGl2ZSUyMGFuZCUyMGludGVnZXIlMjIlMjB0ZXN0cyUyRnRlc3RfbXl0ZXN0LnB5",highlighted:'pytest -k <span class="hljs-string">"negative and integer"</span> tests/test_mytest.py',wrap:!1}}),Ql=new $({props:{code:"cHl0ZXN0JTIwLWslMjAlMjJub3QlMjBuZWdhdGl2ZSUyMiUyMHRlc3RzJTJGdGVzdF9teXRlc3QucHk=",highlighted:'pytest -k <span class="hljs-string">"not negative"</span> tests/test_mytest.py',wrap:!1}}),Pl=new $({props:{code:"cHl0ZXN0JTIwdGVzdF90aGlzMS5weSUyMC0tY29sbGVjdC1vbmx5JTIwLXE=",highlighted:"pytest test_this1.py --collect-only -q",wrap:!1}}),Al=new $({props:{code:"dGVzdF90aGlzMS5weSUzQSUzQVRlc3RNYXRoVW5pdFRlc3QlM0ElM0F0ZXN0X2Zsb29yXzBfbmVnYXRpdmUlMEF0ZXN0X3RoaXMxLnB5JTNBJTNBVGVzdE1hdGhVbml0VGVzdCUzQSUzQXRlc3RfZmxvb3JfMV9pbnRlZ2VyJTBBdGVzdF90aGlzMS5weSUzQSUzQVRlc3RNYXRoVW5pdFRlc3QlM0ElM0F0ZXN0X2Zsb29yXzJfbGFyZ2VfZnJhY3Rpb24=",highlighted:`test_this1.py::TestMathUnitTest::test_floor_0_negative | |
| test_this1.py::TestMathUnitTest::test_floor_1_integer | |
| test_this1.py::TestMathUnitTest::test_floor_2_large_fraction`,wrap:!1}}),ql=new $({props:{code:"cHl0ZXN0JTIwdGVzdF90aGlzMS5weSUzQSUzQVRlc3RNYXRoVW5pdFRlc3QlM0ElM0F0ZXN0X2Zsb29yXzBfbmVnYXRpdmUlMjAlMjB0ZXN0X3RoaXMxLnB5JTNBJTNBVGVzdE1hdGhVbml0VGVzdCUzQSUzQXRlc3RfZmxvb3JfMV9pbnRlZ2Vy",highlighted:"pytest test_this1.py::TestMathUnitTest::test_floor_0_negative test_this1.py::TestMathUnitTest::test_floor_1_integer",wrap:!1}}),ts=new $({props:{code:"JTIzJTIwdGVzdF90aGlzMi5weSUwQWltcG9ydCUyMHB5dGVzdCUwQSUwQSUwQSU0MHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKCUwQSUyMCUyMCUyMCUyMCUyMm5hbWUlMkMlMjBpbnB1dCUyQyUyMGV4cGVjdGVkJTIyJTJDJTBBJTIwJTIwJTIwJTIwJTVCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwKCUyMm5lZ2F0aXZlJTIyJTJDJTIwLTEuNSUyQyUyMC0yLjApJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwKCUyMmludGVnZXIlMjIlMkMlMjAxJTJDJTIwMS4wKSUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCglMjJsYXJnZSUyMGZyYWN0aW9uJTIyJTJDJTIwMS42JTJDJTIwMSklMkMlMEElMjAlMjAlMjAlMjAlNUQlMkMlMEEpJTBBZGVmJTIwdGVzdF9mbG9vcihuYW1lJTJDJTIwaW5wdXQlMkMlMjBleHBlY3RlZCklM0ElMEElMjAlMjAlMjAlMjBhc3NlcnRfZXF1YWwobWF0aC5mbG9vcihpbnB1dCklMkMlMjBleHBlY3RlZCk=",highlighted:`<span class="hljs-comment"># test_this2.py</span> | |
| <span class="hljs-keyword">import</span> pytest | |
| <span class="hljs-meta">@pytest.mark.parametrize(<span class="hljs-params"> | |
| <span class="hljs-string">"name, input, expected"</span>, | |
| [ | |
| (<span class="hljs-params"><span class="hljs-string">"negative"</span>, -<span class="hljs-number">1.5</span>, -<span class="hljs-number">2.0</span></span>), | |
| (<span class="hljs-params"><span class="hljs-string">"integer"</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1.0</span></span>), | |
| (<span class="hljs-params"><span class="hljs-string">"large fraction"</span>, <span class="hljs-number">1.6</span>, <span class="hljs-number">1</span></span>), | |
| ], | |
| </span>)</span> | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">test_floor</span>(<span class="hljs-params">name, <span class="hljs-built_in">input</span>, expected</span>): | |
| assert_equal(math.floor(<span class="hljs-built_in">input</span>), expected)`,wrap:!1}}),ls=new $({props:{code:"cHl0ZXN0JTIwdGVzdF90aGlzMi5weSUyMC0tY29sbGVjdC1vbmx5JTIwLXE=",highlighted:"pytest test_this2.py --collect-only -q",wrap:!1}}),ns=new $({props:{code:"dGVzdF90aGlzMi5weSUzQSUzQXRlc3RfZmxvb3IlNUJpbnRlZ2VyLTEtMS4wJTVEJTBBdGVzdF90aGlzMi5weSUzQSUzQXRlc3RfZmxvb3IlNUJuZWdhdGl2ZS0tMS41LS0yLjAlNUQlMEF0ZXN0X3RoaXMyLnB5JTNBJTNBdGVzdF9mbG9vciU1QmxhcmdlJTIwZnJhY3Rpb24tMS42LTElNUQ=",highlighted:`test_this2.py::test_floor[integer-1-1.0] | |
| test_this2.py::test_floor[negative--1.5--2.0] | |
| test_this2.py::test_floor[large fraction-1.6-1]`,wrap:!1}}),is=new $({props:{code:"cHl0ZXN0JTIwdGVzdF90aGlzMi5weSUzQSUzQXRlc3RfZmxvb3IlNUJuZWdhdGl2ZS0tMS41LS0yLjAlNUQlMjB0ZXN0X3RoaXMyLnB5JTNBJTNBdGVzdF9mbG9vciU1QmludGVnZXItMS0xLjAlNUQ=",highlighted:"pytest test_this2.py::test_floor[negative--1.5--2.0] test_this2.py::test_floor[integer-1-1.0]",wrap:!1}}),ms=new y({props:{title:"Files and directories",local:"files-and-directories",headingTag:"h3"}}),Ms=new $({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycy50ZXN0aW5nX3V0aWxzJTIwaW1wb3J0JTIwVGVzdENhc2VQbHVzJTBBJTBBJTBBY2xhc3MlMjBQYXRoRXhhbXBsZVRlc3QoVGVzdENhc2VQbHVzKSUzQSUwQSUyMCUyMCUyMCUyMGRlZiUyMHRlc3Rfc29tZXRoaW5nX2ludm9sdmluZ19sb2NhbF9sb2NhdGlvbnMoc2VsZiklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBkYXRhX2RpciUyMCUzRCUyMHNlbGYudGVzdHNfZGlyJTIwJTJGJTIwJTIyZml4dHVyZXMlMkZ0ZXN0c19zYW1wbGVzJTJGd210X2VuX3JvJTIy",highlighted:`<span class="hljs-keyword">from</span> transformers.testing_utils <span class="hljs-keyword">import</span> TestCasePlus | |
| <span class="hljs-keyword">class</span> <span class="hljs-title class_">PathExampleTest</span>(<span class="hljs-title class_ inherited__">TestCasePlus</span>): | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">test_something_involving_local_locations</span>(<span class="hljs-params">self</span>): | |
| data_dir = self.tests_dir / <span class="hljs-string">"fixtures/tests_samples/wmt_en_ro"</span>`,wrap:!1}}),ws=new $({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycy50ZXN0aW5nX3V0aWxzJTIwaW1wb3J0JTIwVGVzdENhc2VQbHVzJTBBJTBBJTBBY2xhc3MlMjBQYXRoRXhhbXBsZVRlc3QoVGVzdENhc2VQbHVzKSUzQSUwQSUyMCUyMCUyMCUyMGRlZiUyMHRlc3Rfc29tZXRoaW5nX2ludm9sdmluZ19zdHJpbmdpZmllZF9sb2NhdGlvbnMoc2VsZiklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBleGFtcGxlc19kaXIlMjAlM0QlMjBzZWxmLmV4YW1wbGVzX2Rpcl9zdHI=",highlighted:`<span class="hljs-keyword">from</span> transformers.testing_utils <span class="hljs-keyword">import</span> TestCasePlus | |
| <span class="hljs-keyword">class</span> <span class="hljs-title class_">PathExampleTest</span>(<span class="hljs-title class_ inherited__">TestCasePlus</span>): | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">test_something_involving_stringified_locations</span>(<span class="hljs-params">self</span>): | |
| examples_dir = self.examples_dir_str`,wrap:!1}}),$s=new y({props:{title:"Temporary files and directories",local:"temporary-files-and-directories",headingTag:"h3"}}),Js=new $({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycy50ZXN0aW5nX3V0aWxzJTIwaW1wb3J0JTIwVGVzdENhc2VQbHVzJTBBJTBBJTBBY2xhc3MlMjBFeGFtcGxlc1Rlc3RzKFRlc3RDYXNlUGx1cyklM0ElMEElMjAlMjAlMjAlMjBkZWYlMjB0ZXN0X3doYXRldmVyKHNlbGYpJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwdG1wX2RpciUyMCUzRCUyMHNlbGYuZ2V0X2F1dG9fcmVtb3ZlX3RtcF9kaXIoKQ==",highlighted:`<span class="hljs-keyword">from</span> transformers.testing_utils <span class="hljs-keyword">import</span> TestCasePlus | |
| <span class="hljs-keyword">class</span> <span class="hljs-title class_">ExamplesTests</span>(<span class="hljs-title class_ inherited__">TestCasePlus</span>): | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">test_whatever</span>(<span class="hljs-params">self</span>): | |
| tmp_dir = self.get_auto_remove_tmp_dir()`,wrap:!1}}),Us=new $({props:{code:"ZGVmJTIwdGVzdF93aGF0ZXZlcihzZWxmKSUzQSUwQSUyMCUyMCUyMCUyMHRtcF9kaXIlMjAlM0QlMjBzZWxmLmdldF9hdXRvX3JlbW92ZV90bXBfZGlyKCk=",highlighted:`<span class="hljs-keyword">def</span> <span class="hljs-title function_">test_whatever</span>(<span class="hljs-params">self</span>): | |
| tmp_dir = self.get_auto_remove_tmp_dir()`,wrap:!1}}),gs=new $({props:{code:"ZGVmJTIwdGVzdF93aGF0ZXZlcihzZWxmKSUzQSUwQSUyMCUyMCUyMCUyMHRtcF9kaXIlMjAlM0QlMjBzZWxmLmdldF9hdXRvX3JlbW92ZV90bXBfZGlyKCUyMi4lMkZ4eHglMjIp",highlighted:`<span class="hljs-keyword">def</span> <span class="hljs-title function_">test_whatever</span>(<span class="hljs-params">self</span>): | |
| tmp_dir = self.get_auto_remove_tmp_dir(<span class="hljs-string">"./xxx"</span>)`,wrap:!1}}),b=new Jr({props:{$$slots:{default:[t$]},$$scope:{ctx:j}}}),h=new Jr({props:{$$slots:{default:[e$]},$$scope:{ctx:j}}}),Is=new y({props:{title:"Temporary sys.path override",local:"temporary-syspath-override",headingTag:"h3"}}),xs=new $({props:{code:"aW1wb3J0JTIwb3MlMEFmcm9tJTIwdHJhbnNmb3JtZXJzLnRlc3RpbmdfdXRpbHMlMjBpbXBvcnQlMjBFeHRlbmRTeXNQYXRoJTBBJTBBYmluZGlyJTIwJTNEJTIwb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykpJTBBd2l0aCUyMEV4dGVuZFN5c1BhdGgoZiUyMiU3QmJpbmRpciU3RCUyRi4uJTIyKSUzQSUwQSUyMCUyMCUyMCUyMGZyb20lMjB0ZXN0X3RyYWluZXIlMjBpbXBvcnQlMjBUcmFpbmVySW50ZWdyYXRpb25Db21tb24lMjAlMjAlMjMlMjBub3Fh",highlighted:`<span class="hljs-keyword">import</span> os | |
| <span class="hljs-keyword">from</span> transformers.testing_utils <span class="hljs-keyword">import</span> ExtendSysPath | |
| bindir = os.path.abspath(os.path.dirname(__file__)) | |
| <span class="hljs-keyword">with</span> ExtendSysPath(<span class="hljs-string">f"<span class="hljs-subst">{bindir}</span>/.."</span>): | |
| <span class="hljs-keyword">from</span> test_trainer <span class="hljs-keyword">import</span> TrainerIntegrationCommon <span class="hljs-comment"># noqa</span>`,wrap:!1}}),ks=new y({props:{title:"Skipping tests",local:"skipping-tests",headingTag:"h3"}}),Vs=new y({props:{title:"Implementation",local:"implementation",headingTag:"h4"}}),zs=new $({props:{code:"JTQwdW5pdHRlc3Quc2tpcCglMjJ0aGlzJTIwYnVnJTIwbmVlZHMlMjB0byUyMGJlJTIwZml4ZWQlMjIpJTBBZGVmJTIwdGVzdF9mZWF0dXJlX3goKSUzQQ==",highlighted:`<span class="hljs-meta">@unittest.skip(<span class="hljs-params"><span class="hljs-string">"this bug needs to be fixed"</span></span>)</span> | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">test_feature_x</span>():`,wrap:!1}}),Ls=new $({props:{code:"JTQwcHl0ZXN0Lm1hcmsuc2tpcChyZWFzb24lM0QlMjJ0aGlzJTIwYnVnJTIwbmVlZHMlMjB0byUyMGJlJTIwZml4ZWQlMjIp",highlighted:'<span class="hljs-meta">@pytest.mark.skip(<span class="hljs-params">reason=<span class="hljs-string">"this bug needs to be fixed"</span></span>)</span>',wrap:!1}}),Ss=new $({props:{code:"JTQwcHl0ZXN0Lm1hcmsueGZhaWwlMEFkZWYlMjB0ZXN0X2ZlYXR1cmVfeCgpJTNB",highlighted:`<span class="hljs-meta">@pytest.mark.xfail</span> | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">test_feature_x</span>():`,wrap:!1}}),Fs=new $({props:{code:"ZGVmJTIwdGVzdF9mZWF0dXJlX3goKSUzQSUwQSUyMCUyMCUyMCUyMGlmJTIwbm90JTIwaGFzX3NvbWV0aGluZygpJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHl0ZXN0LnNraXAoJTIydW5zdXBwb3J0ZWQlMjBjb25maWd1cmF0aW9uJTIyKQ==",highlighted:`<span class="hljs-keyword">def</span> <span class="hljs-title function_">test_feature_x</span>(): | |
| <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> has_something(): | |
| pytest.skip(<span class="hljs-string">"unsupported configuration"</span>)`,wrap:!1}}),Es=new $({props:{code:"aW1wb3J0JTIwcHl0ZXN0JTBBJTBBaWYlMjBub3QlMjBweXRlc3QuY29uZmlnLmdldG9wdGlvbiglMjItLWN1c3RvbS1mbGFnJTIyKSUzQSUwQSUyMCUyMCUyMCUyMHB5dGVzdC5za2lwKCUyMi0tY3VzdG9tLWZsYWclMjBpcyUyMG1pc3NpbmclMkMlMjBza2lwcGluZyUyMHRlc3RzJTIyJTJDJTIwYWxsb3dfbW9kdWxlX2xldmVsJTNEVHJ1ZSk=",highlighted:`<span class="hljs-keyword">import</span> pytest | |
| <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> pytest.config.getoption(<span class="hljs-string">"--custom-flag"</span>): | |
| pytest.skip(<span class="hljs-string">"--custom-flag is missing, skipping tests"</span>, allow_module_level=<span class="hljs-literal">True</span>)`,wrap:!1}}),Ys=new $({props:{code:"ZGVmJTIwdGVzdF9mZWF0dXJlX3goKSUzQSUwQSUyMCUyMCUyMCUyMHB5dGVzdC54ZmFpbCglMjJleHBlY3RlZCUyMHRvJTIwZmFpbCUyMHVudGlsJTIwYnVnJTIwWFlaJTIwaXMlMjBmaXhlZCUyMik=",highlighted:`<span class="hljs-keyword">def</span> <span class="hljs-title function_">test_feature_x</span>(): | |
| pytest.xfail(<span class="hljs-string">"expected to fail until bug XYZ is fixed"</span>)`,wrap:!1}}),Ks=new $({props:{code:"ZG9jdXRpbHMlMjAlM0QlMjBweXRlc3QuaW1wb3J0b3Jza2lwKCUyMmRvY3V0aWxzJTIyJTJDJTIwbWludmVyc2lvbiUzRCUyMjAuMyUyMik=",highlighted:'docutils = pytest.importorskip(<span class="hljs-string">"docutils"</span>, minversion=<span class="hljs-string">"0.3"</span>)',wrap:!1}}),Os=new $({props:{code:"JTQwcHl0ZXN0Lm1hcmsuc2tpcGlmKHN5cy52ZXJzaW9uX2luZm8lMjAlM0MlMjAoMyUyQzYpJTJDJTIwcmVhc29uJTNEJTIycmVxdWlyZXMlMjBweXRob24zLjYlMjBvciUyMGhpZ2hlciUyMiklMEFkZWYlMjB0ZXN0X2ZlYXR1cmVfeCgpJTNB",highlighted:`<span class="hljs-meta">@pytest.mark.skipif(<span class="hljs-params">sys.version_info < (<span class="hljs-params"><span class="hljs-number">3</span>,<span class="hljs-number">6</span></span>), reason=<span class="hljs-string">"requires python3.6 or higher"</span></span>)</span> | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">test_feature_x</span>():`,wrap:!1}}),en=new $({props:{code:"JTQwdW5pdHRlc3Quc2tpcElmKHRvcmNoX2RldmljZSUyMCUzRCUzRCUyMCUyMmNwdSUyMiUyQyUyMCUyMkNhbid0JTIwZG8lMjBoYWxmJTIwcHJlY2lzaW9uJTIyKSUwQWRlZiUyMHRlc3RfZmVhdHVyZV94KCklM0E=",highlighted:`<span class="hljs-meta">@unittest.skipIf(<span class="hljs-params">torch_device == <span class="hljs-string">"cpu"</span>, <span class="hljs-string">"Can't do half precision"</span></span>)</span> | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">test_feature_x</span>():`,wrap:!1}}),sn=new $({props:{code:"JTQwcHl0ZXN0Lm1hcmsuc2tpcGlmKHN5cy5wbGF0Zm9ybSUyMCUzRCUzRCUyMCd3aW4zMiclMkMlMjByZWFzb24lM0QlMjJkb2VzJTIwbm90JTIwcnVuJTIwb24lMjB3aW5kb3dzJTIyKSUwQWNsYXNzJTIwVGVzdENsYXNzKCklM0ElMEElMjAlMjAlMjAlMjBkZWYlMjB0ZXN0X2ZlYXR1cmVfeChzZWxmKSUzQQ==",highlighted:`<span class="hljs-meta">@pytest.mark.skipif(<span class="hljs-params">sys.platform == <span class="hljs-string">'win32'</span>, reason=<span class="hljs-string">"does not run on windows"</span></span>)</span> | |
| <span class="hljs-keyword">class</span> <span class="hljs-title class_">TestClass</span>(): | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">test_feature_x</span>(<span class="hljs-params">self</span>):`,wrap:!1}}),pn=new y({props:{title:"Slow tests",local:"slow-tests",headingTag:"h3"}}),mn=new $({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycy50ZXN0aW5nX3V0aWxzJTIwaW1wb3J0JTIwc2xvdyUwQSU0MHNsb3clMEFkZWYlMjB0ZXN0X2ludGVncmF0aW9uX2ZvbygpJTNB",highlighted:`<span class="hljs-keyword">from</span> transformers.testing_utils <span class="hljs-keyword">import</span> slow | |
| <span class="hljs-meta">@slow</span> | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">test_integration_foo</span>():`,wrap:!1}}),dn=new $({props:{code:"UlVOX1NMT1clM0QxJTIwcHl0ZXN0JTIwdGVzdHM=",highlighted:"RUN_SLOW=1 pytest tests",wrap:!1}}),Mn=new $({props:{code:"JTQwcGFyYW1ldGVyaXplZC5leHBhbmQoLi4uKSUwQSU0MHNsb3clMEFkZWYlMjB0ZXN0X2ludGVncmF0aW9uX2ZvbygpJTNB",highlighted:`<span class="hljs-meta">@parameterized.expand(<span class="hljs-params">...</span>)</span> | |
| <span class="hljs-meta">@slow</span> | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">test_integration_foo</span>():`,wrap:!1}}),un=new $({props:{code:"Z3JlcCUyMHRpbnklMjB0ZXN0cyUyMGV4YW1wbGVz",highlighted:"grep tiny tests examples",wrap:!1}}),jn=new y({props:{title:"Testing the stdout/stderr output",local:"testing-the-stdoutstderr-output",headingTag:"h3"}}),Un=new $({props:{code:"aW1wb3J0JTIwc3lzJTBBJTBBJTBBZGVmJTIwcHJpbnRfdG9fc3Rkb3V0KHMpJTNBJTBBJTIwJTIwJTIwJTIwcHJpbnQocyklMEElMEElMEFkZWYlMjBwcmludF90b19zdGRlcnIocyklM0ElMEElMjAlMjAlMjAlMjBzeXMuc3RkZXJyLndyaXRlKHMpJTBBJTBBJTBBZGVmJTIwdGVzdF9yZXN1bHRfYW5kX3N0ZG91dChjYXBzeXMpJTNBJTBBJTIwJTIwJTIwJTIwbXNnJTIwJTNEJTIwJTIySGVsbG8lMjIlMEElMjAlMjAlMjAlMjBwcmludF90b19zdGRvdXQobXNnKSUwQSUyMCUyMCUyMCUyMHByaW50X3RvX3N0ZGVycihtc2cpJTBBJTIwJTIwJTIwJTIwb3V0JTJDJTIwZXJyJTIwJTNEJTIwY2Fwc3lzLnJlYWRvdXRlcnIoKSUyMCUyMCUyMyUyMGNvbnN1bWUlMjB0aGUlMjBjYXB0dXJlZCUyMG91dHB1dCUyMHN0cmVhbXMlMEElMjAlMjAlMjAlMjAlMjMlMjBvcHRpb25hbCUzQSUyMGlmJTIweW91JTIwd2FudCUyMHRvJTIwcmVwbGF5JTIwdGhlJTIwY29uc3VtZWQlMjBzdHJlYW1zJTNBJTBBJTIwJTIwJTIwJTIwc3lzLnN0ZG91dC53cml0ZShvdXQpJTBBJTIwJTIwJTIwJTIwc3lzLnN0ZGVyci53cml0ZShlcnIpJTBBJTIwJTIwJTIwJTIwJTIzJTIwdGVzdCUzQSUwQSUyMCUyMCUyMCUyMGFzc2VydCUyMG1zZyUyMGluJTIwb3V0JTBBJTIwJTIwJTIwJTIwYXNzZXJ0JTIwbXNnJTIwaW4lMjBlcnI=",highlighted:`<span class="hljs-keyword">import</span> sys | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">print_to_stdout</span>(<span class="hljs-params">s</span>): | |
| <span class="hljs-built_in">print</span>(s) | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">print_to_stderr</span>(<span class="hljs-params">s</span>): | |
| sys.stderr.write(s) | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">test_result_and_stdout</span>(<span class="hljs-params">capsys</span>): | |
| msg = <span class="hljs-string">"Hello"</span> | |
| print_to_stdout(msg) | |
| print_to_stderr(msg) | |
| out, err = capsys.readouterr() <span class="hljs-comment"># consume the captured output streams</span> | |
| <span class="hljs-comment"># optional: if you want to replay the consumed streams:</span> | |
| sys.stdout.write(out) | |
| sys.stderr.write(err) | |
| <span class="hljs-comment"># test:</span> | |
| <span class="hljs-keyword">assert</span> msg <span class="hljs-keyword">in</span> out | |
| <span class="hljs-keyword">assert</span> msg <span class="hljs-keyword">in</span> err`,wrap:!1}}),hn=new $({props:{code:"ZGVmJTIwcmFpc2VfZXhjZXB0aW9uKG1zZyklM0ElMEElMjAlMjAlMjAlMjByYWlzZSUyMFZhbHVlRXJyb3IobXNnKSUwQSUwQSUwQWRlZiUyMHRlc3Rfc29tZXRoaW5nX2V4Y2VwdGlvbigpJTNBJTBBJTIwJTIwJTIwJTIwbXNnJTIwJTNEJTIwJTIyTm90JTIwYSUyMGdvb2QlMjB2YWx1ZSUyMiUwQSUyMCUyMCUyMCUyMGVycm9yJTIwJTNEJTIwJTIyJTIyJTBBJTIwJTIwJTIwJTIwdHJ5JTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcmFpc2VfZXhjZXB0aW9uKG1zZyklMEElMjAlMjAlMjAlMjBleGNlcHQlMjBFeGNlcHRpb24lMjBhcyUyMGUlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBlcnJvciUyMCUzRCUyMHN0cihlKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGFzc2VydCUyMG1zZyUyMGluJTIwZXJyb3IlMkMlMjBmJTIyJTdCbXNnJTdEJTIwaXMlMjBpbiUyMHRoZSUyMGV4Y2VwdGlvbiUzQSU1Q24lN0JlcnJvciU3RCUyMg==",highlighted:`<span class="hljs-keyword">def</span> <span class="hljs-title function_">raise_exception</span>(<span class="hljs-params">msg</span>): | |
| <span class="hljs-keyword">raise</span> ValueError(msg) | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">test_something_exception</span>(): | |
| msg = <span class="hljs-string">"Not a good value"</span> | |
| error = <span class="hljs-string">""</span> | |
| <span class="hljs-keyword">try</span>: | |
| raise_exception(msg) | |
| <span class="hljs-keyword">except</span> Exception <span class="hljs-keyword">as</span> e: | |
| error = <span class="hljs-built_in">str</span>(e) | |
| <span class="hljs-keyword">assert</span> msg <span class="hljs-keyword">in</span> error, <span class="hljs-string">f"<span class="hljs-subst">{msg}</span> is in the exception:\\n<span class="hljs-subst">{error}</span>"</span>`,wrap:!1}}),_n=new $({props:{code:"ZnJvbSUyMGlvJTIwaW1wb3J0JTIwU3RyaW5nSU8lMEFmcm9tJTIwY29udGV4dGxpYiUyMGltcG9ydCUyMHJlZGlyZWN0X3N0ZG91dCUwQSUwQSUwQWRlZiUyMHByaW50X3RvX3N0ZG91dChzKSUzQSUwQSUyMCUyMCUyMCUyMHByaW50KHMpJTBBJTBBJTBBZGVmJTIwdGVzdF9yZXN1bHRfYW5kX3N0ZG91dCgpJTNBJTBBJTIwJTIwJTIwJTIwbXNnJTIwJTNEJTIwJTIySGVsbG8lMjIlMEElMjAlMjAlMjAlMjBidWZmZXIlMjAlM0QlMjBTdHJpbmdJTygpJTBBJTIwJTIwJTIwJTIwd2l0aCUyMHJlZGlyZWN0X3N0ZG91dChidWZmZXIpJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJpbnRfdG9fc3Rkb3V0KG1zZyklMEElMjAlMjAlMjAlMjBvdXQlMjAlM0QlMjBidWZmZXIuZ2V0dmFsdWUoKSUwQSUyMCUyMCUyMCUyMCUyMyUyMG9wdGlvbmFsJTNBJTIwaWYlMjB5b3UlMjB3YW50JTIwdG8lMjByZXBsYXklMjB0aGUlMjBjb25zdW1lZCUyMHN0cmVhbXMlM0ElMEElMjAlMjAlMjAlMjBzeXMuc3Rkb3V0LndyaXRlKG91dCklMEElMjAlMjAlMjAlMjAlMjMlMjB0ZXN0JTNBJTBBJTIwJTIwJTIwJTIwYXNzZXJ0JTIwbXNnJTIwaW4lMjBvdXQ=",highlighted:`<span class="hljs-keyword">from</span> io <span class="hljs-keyword">import</span> StringIO | |
| <span class="hljs-keyword">from</span> contextlib <span class="hljs-keyword">import</span> redirect_stdout | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">print_to_stdout</span>(<span class="hljs-params">s</span>): | |
| <span class="hljs-built_in">print</span>(s) | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">test_result_and_stdout</span>(): | |
| msg = <span class="hljs-string">"Hello"</span> | |
| buffer = StringIO() | |
| <span class="hljs-keyword">with</span> redirect_stdout(buffer): | |
| print_to_stdout(msg) | |
| out = buffer.getvalue() | |
| <span class="hljs-comment"># optional: if you want to replay the consumed streams:</span> | |
| sys.stdout.write(out) | |
| <span class="hljs-comment"># test:</span> | |
| <span class="hljs-keyword">assert</span> msg <span class="hljs-keyword">in</span> out`,wrap:!1}}),Zn=new $({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycy50ZXN0aW5nX3V0aWxzJTIwaW1wb3J0JTIwQ2FwdHVyZVN0ZG91dCUwQSUwQXdpdGglMjBDYXB0dXJlU3Rkb3V0KCklMjBhcyUyMGNzJTNBJTBBJTIwJTIwJTIwJTIwZnVuY3Rpb25fdGhhdF93cml0ZXNfdG9fc3Rkb3V0KCklMEFwcmludChjcy5vdXQp",highlighted:`<span class="hljs-keyword">from</span> transformers.testing_utils <span class="hljs-keyword">import</span> CaptureStdout | |
| <span class="hljs-keyword">with</span> CaptureStdout() <span class="hljs-keyword">as</span> cs: | |
| function_that_writes_to_stdout() | |
| <span class="hljs-built_in">print</span>(cs.out)`,wrap:!1}}),kn=new $({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycy50ZXN0aW5nX3V0aWxzJTIwaW1wb3J0JTIwQ2FwdHVyZVN0ZG91dCUwQSUwQW1zZyUyMCUzRCUyMCUyMlNlY3JldCUyMG1lc3NhZ2UlNUNyJTIyJTBBZmluYWwlMjAlM0QlMjAlMjJIZWxsbyUyMFdvcmxkJTIyJTBBd2l0aCUyMENhcHR1cmVTdGRvdXQoKSUyMGFzJTIwY3MlM0ElMEElMjAlMjAlMjAlMjBwcmludChtc2clMjAlMkIlMjBmaW5hbCklMEFhc3NlcnQlMjBjcy5vdXQlMjAlM0QlM0QlMjBmaW5hbCUyMCUyQiUyMCUyMiU1Q24lMjIlMkMlMjBmJTIyY2FwdHVyZWQlM0ElMjAlN0Jjcy5vdXQlN0QlMkMlMjBleHBlY3RpbmclMjAlN0JmaW5hbCU3RCUyMg==",highlighted:`<span class="hljs-keyword">from</span> transformers.testing_utils <span class="hljs-keyword">import</span> CaptureStdout | |
| msg = <span class="hljs-string">"Secret message\\r"</span> | |
| final = <span class="hljs-string">"Hello World"</span> | |
| <span class="hljs-keyword">with</span> CaptureStdout() <span class="hljs-keyword">as</span> cs: | |
| <span class="hljs-built_in">print</span>(msg + final) | |
| <span class="hljs-keyword">assert</span> cs.out == final + <span class="hljs-string">"\\n"</span>, <span class="hljs-string">f"captured: <span class="hljs-subst">{cs.out}</span>, expecting <span class="hljs-subst">{final}</span>"</span>`,wrap:!1}}),Hn=new $({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycy50ZXN0aW5nX3V0aWxzJTIwaW1wb3J0JTIwQ2FwdHVyZVN0ZGVyciUwQSUwQXdpdGglMjBDYXB0dXJlU3RkZXJyKCklMjBhcyUyMGNzJTNBJTBBJTIwJTIwJTIwJTIwZnVuY3Rpb25fdGhhdF93cml0ZXNfdG9fc3RkZXJyKCklMEFwcmludChjcy5lcnIp",highlighted:`<span class="hljs-keyword">from</span> transformers.testing_utils <span class="hljs-keyword">import</span> CaptureStderr | |
| <span class="hljs-keyword">with</span> CaptureStderr() <span class="hljs-keyword">as</span> cs: | |
| function_that_writes_to_stderr() | |
| <span class="hljs-built_in">print</span>(cs.err)`,wrap:!1}}),Bn=new $({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycy50ZXN0aW5nX3V0aWxzJTIwaW1wb3J0JTIwQ2FwdHVyZVN0ZCUwQSUwQXdpdGglMjBDYXB0dXJlU3RkKCklMjBhcyUyMGNzJTNBJTBBJTIwJTIwJTIwJTIwZnVuY3Rpb25fdGhhdF93cml0ZXNfdG9fc3Rkb3V0X2FuZF9zdGRlcnIoKSUwQXByaW50KGNzLmVyciUyQyUyMGNzLm91dCk=",highlighted:`<span class="hljs-keyword">from</span> transformers.testing_utils <span class="hljs-keyword">import</span> CaptureStd | |
| <span class="hljs-keyword">with</span> CaptureStd() <span class="hljs-keyword">as</span> cs: | |
| function_that_writes_to_stdout_and_stderr() | |
| <span class="hljs-built_in">print</span>(cs.err, cs.out)`,wrap:!1}}),Rn=new y({props:{title:"Capturing logger stream",local:"capturing-logger-stream",headingTag:"h3"}}),Nn=new $({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMGxvZ2dpbmclMEFmcm9tJTIwdHJhbnNmb3JtZXJzLnRlc3RpbmdfdXRpbHMlMjBpbXBvcnQlMjBDYXB0dXJlTG9nZ2VyJTBBJTBBbXNnJTIwJTNEJTIwJTIyVGVzdGluZyUyMDElMkMlMjAyJTJDJTIwMyUyMiUwQWxvZ2dpbmcuc2V0X3ZlcmJvc2l0eV9pbmZvKCklMEFsb2dnZXIlMjAlM0QlMjBsb2dnaW5nLmdldF9sb2dnZXIoJTIydHJhbnNmb3JtZXJzLm1vZGVscy5iYXJ0LnRva2VuaXphdGlvbl9iYXJ0JTIyKSUwQXdpdGglMjBDYXB0dXJlTG9nZ2VyKGxvZ2dlciklMjBhcyUyMGNsJTNBJTBBJTIwJTIwJTIwJTIwbG9nZ2VyLmluZm8obXNnKSUwQWFzc2VydCUyMGNsLm91dCUyQyUyMG1zZyUyMCUyQiUyMCUyMiU1Q24lMjI=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> logging | |
| <span class="hljs-keyword">from</span> transformers.testing_utils <span class="hljs-keyword">import</span> CaptureLogger | |
| msg = <span class="hljs-string">"Testing 1, 2, 3"</span> | |
| logging.set_verbosity_info() | |
| logger = logging.get_logger(<span class="hljs-string">"transformers.models.bart.tokenization_bart"</span>) | |
| <span class="hljs-keyword">with</span> CaptureLogger(logger) <span class="hljs-keyword">as</span> cl: | |
| logger.info(msg) | |
| <span class="hljs-keyword">assert</span> cl.out, msg + <span class="hljs-string">"\\n"</span>`,wrap:!1}}),Ln=new y({props:{title:"Testing with environment variables",local:"testing-with-environment-variables",headingTag:"h3"}}),Sn=new $({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycy50ZXN0aW5nX3V0aWxzJTIwaW1wb3J0JTIwbW9ja2VudiUwQSUwQSUwQWNsYXNzJTIwSGZBcmd1bWVudFBhcnNlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpJTNBJTBBJTIwJTIwJTIwJTIwJTQwbW9ja2VudihUUkFOU0ZPUk1FUlNfVkVSQk9TSVRZJTNEJTIyZXJyb3IlMjIpJTBBJTIwJTIwJTIwJTIwZGVmJTIwdGVzdF9lbnZfb3ZlcnJpZGUoc2VsZiklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBlbnZfbGV2ZWxfc3RyJTIwJTNEJTIwb3MuZ2V0ZW52KCUyMlRSQU5TRk9STUVSU19WRVJCT1NJVFklMjIlMkMlMjBOb25lKQ==",highlighted:`<span class="hljs-keyword">from</span> transformers.testing_utils <span class="hljs-keyword">import</span> mockenv | |
| <span class="hljs-keyword">class</span> <span class="hljs-title class_">HfArgumentParserTest</span>(unittest.TestCase): | |
| <span class="hljs-meta"> @mockenv(<span class="hljs-params">TRANSFORMERS_VERBOSITY=<span class="hljs-string">"error"</span></span>)</span> | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">test_env_override</span>(<span class="hljs-params">self</span>): | |
| env_level_str = os.getenv(<span class="hljs-string">"TRANSFORMERS_VERBOSITY"</span>, <span class="hljs-literal">None</span>)`,wrap:!1}}),Fn=new $({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycy50ZXN0aW5nX3V0aWxzJTIwaW1wb3J0JTIwVGVzdENhc2VQbHVzJTBBJTBBJTBBY2xhc3MlMjBFbnZFeGFtcGxlVGVzdChUZXN0Q2FzZVBsdXMpJTNBJTBBJTIwJTIwJTIwJTIwZGVmJTIwdGVzdF9leHRlcm5hbF9wcm9nKHNlbGYpJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZW52JTIwJTNEJTIwc2VsZi5nZXRfZW52KCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBub3clMjBjYWxsJTIwdGhlJTIwZXh0ZXJuYWwlMjBwcm9ncmFtJTJDJTIwcGFzc2luZyUyMCU2MGVudiU2MCUyMHRvJTIwaXQ=",highlighted:`<span class="hljs-keyword">from</span> transformers.testing_utils <span class="hljs-keyword">import</span> TestCasePlus | |
| <span class="hljs-keyword">class</span> <span class="hljs-title class_">EnvExampleTest</span>(<span class="hljs-title class_ inherited__">TestCasePlus</span>): | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">test_external_prog</span>(<span class="hljs-params">self</span>): | |
| env = self.get_env() | |
| <span class="hljs-comment"># now call the external program, passing \`env\` to it</span>`,wrap:!1}}),An=new y({props:{title:"Getting reproducible results",local:"getting-reproducible-results",headingTag:"h3"}}),qn=new $({props:{code:"c2VlZCUyMCUzRCUyMDQyJTBBJTBBJTIzJTIwcHl0aG9uJTIwUk5HJTBBaW1wb3J0JTIwcmFuZG9tJTBBJTBBcmFuZG9tLnNlZWQoc2VlZCklMEElMEElMjMlMjBweXRvcmNoJTIwUk5HcyUwQWltcG9ydCUyMHRvcmNoJTBBJTBBdG9yY2gubWFudWFsX3NlZWQoc2VlZCklMEF0b3JjaC5iYWNrZW5kcy5jdWRubi5kZXRlcm1pbmlzdGljJTIwJTNEJTIwVHJ1ZSUwQWlmJTIwdG9yY2guY3VkYS5pc19hdmFpbGFibGUoKSUzQSUwQSUyMCUyMCUyMCUyMHRvcmNoLmN1ZGEubWFudWFsX3NlZWRfYWxsKHNlZWQpJTBBJTBBJTIzJTIwbnVtcHklMjBSTkclMEFpbXBvcnQlMjBudW1weSUyMGFzJTIwbnAlMEElMEFucC5yYW5kb20uc2VlZChzZWVkKSUwQSUwQSUyMyUyMHRmJTIwUk5HJTBBdGYucmFuZG9tLnNldF9zZWVkKHNlZWQp",highlighted:`seed = <span class="hljs-number">42</span> | |
| <span class="hljs-comment"># python RNG</span> | |
| <span class="hljs-keyword">import</span> random | |
| random.seed(seed) | |
| <span class="hljs-comment"># pytorch RNGs</span> | |
| <span class="hljs-keyword">import</span> torch | |
| torch.manual_seed(seed) | |
| torch.backends.cudnn.deterministic = <span class="hljs-literal">True</span> | |
| <span class="hljs-keyword">if</span> torch.cuda.is_available(): | |
| torch.cuda.manual_seed_all(seed) | |
| <span class="hljs-comment"># numpy RNG</span> | |
| <span class="hljs-keyword">import</span> numpy <span class="hljs-keyword">as</span> np | |
| np.random.seed(seed) | |
| <span class="hljs-comment"># tf RNG</span> | |
| tf.random.set_seed(seed)`,wrap:!1}}),Kn=new y({props:{title:"Debugging tests",local:"debugging-tests",headingTag:"h3"}}),On=new $({props:{code:"cHl0ZXN0JTIwdGVzdHMlMkZ1dGlscyUyRnRlc3RfbG9nZ2luZy5weSUyMC1XJTIwZXJyb3IlM0ElM0FVc2VyV2FybmluZyUyMC0tcGRi",highlighted:"pytest tests/utils/test_logging.py -W error::UserWarning --pdb",wrap:!1}}),tp=new y({props:{title:"Working with github actions workflows",local:"working-with-github-actions-workflows",headingTag:"h2"}}),sp=new y({props:{title:"Testing Experimental CI Features",local:"testing-experimental-ci-features",headingTag:"h2"}}),Mp=new $({props:{code:"LSUyMHJ1biUzQSUwQSUyMCUyMCUyMCUyMG5hbWUlM0ElMjBydW4lMjBDSSUyMGV4cGVyaW1lbnQlMEElMjAlMjAlMjAlMjBjb21tYW5kJTNBJTIwJTdDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc2V0JTIwJTJCZXVvJTIwcGlwZWZhaWwlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBlY2hvJTIwJTIyc2V0dGluZyUyMHJ1bi1hbGwtZGVzcGl0ZS1hbnktZXJyb3JzLW1vZGUlMjIlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjB0aGlzX2NvbW1hbmRfd2lsbF9mYWlsJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZWNobyUyMCUyMmJ1dCUyMGJhc2glMjBjb250aW51ZXMlMjB0byUyMHJ1biUyMiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMGVtdWxhdGUlMjBhbm90aGVyJTIwZmFpbHVyZSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZhbHNlJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwYnV0JTIwdGhlJTIwbGFzdCUyMGNvbW1hbmQlMjBtdXN0JTIwYmUlMjBhJTIwc3VjY2VzcyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGVjaG8lMjAlMjJkdXJpbmclMjBleHBlcmltZW50JTIwZG8lMjBub3QlMjByZW1vdmUlM0ElMjByZXBvcnRpbmclMjBzdWNjZXNzJTIwdG8lMjBDSSUyQyUyMGV2ZW4lMjBpZiUyMHRoZXJlJTIwd2VyZSUyMGZhaWx1cmVzJTIy",highlighted:`<span class="hljs-bullet">-</span> <span class="hljs-attr">run:</span> | |
| <span class="hljs-attr">name:</span> <span class="hljs-string">run</span> <span class="hljs-string">CI</span> <span class="hljs-string">experiment</span> | |
| <span class="hljs-attr">command:</span> <span class="hljs-string">| | |
| set +euo pipefail | |
| echo "setting run-all-despite-any-errors-mode" | |
| this_command_will_fail | |
| echo "but bash continues to run" | |
| # emulate another failure | |
| false | |
| # but the last command must be a success | |
| echo "during experiment do not remove: reporting success to CI, even if there were failures"</span>`,wrap:!1}}),wp=new $({props:{code:"Y21kX3RoYXRfbWF5X2ZhaWwlMjAlN0MlN0MlMjB0cnVl",highlighted:'cmd_that_may_fail || <span class="hljs-literal">true</span>',wrap:!1}}),cp=new Kw({props:{source:"https://github.com/huggingface/transformers/blob/main/docs/source/ja/testing.md"}}),{c(){u=i("meta"),c=n(),T=i("p"),J=n(),f(g.$$.fragment),jp=n(),_=i("p"),_.textContent=Cr,Cp=n(),v=i("p"),v.textContent=Ur,Up=n(),I=i("ol"),I.innerHTML=br,bp=n(),f(Z.$$.fragment),hp=n(),x=i("ol"),x.innerHTML=hr,gp=n(),f(k.$$.fragment),_p=n(),G=i("p"),G.innerHTML=gr,vp=n(),f(H.$$.fragment),Ip=n(),f(X.$$.fragment),Zp=n(),B=i("p"),B.innerHTML=_r,xp=n(),V=i("p"),V.textContent=vr,kp=n(),R=i("p"),R.textContent=Ir,Gp=n(),f(z.$$.fragment),Hp=n(),N=i("p"),N.textContent=Zr,Xp=n(),f(L.$$.fragment),Bp=n(),W=i("p"),W.textContent=xr,Vp=n(),f(S.$$.fragment),Rp=n(),Q=i("p"),Q.textContent=kr,zp=n(),F=i("ul"),F.innerHTML=Gr,Np=n(),f(P.$$.fragment),Lp=n(),E=i("p"),E.textContent=Hr,Wp=n(),f(A.$$.fragment),Sp=n(),Y=i("p"),Y.textContent=Xr,Qp=n(),f(q.$$.fragment),Fp=n(),f(K.$$.fragment),Pp=n(),D=i("p"),D.textContent=Br,Ep=n(),f(O.$$.fragment),Ap=n(),f(tt.$$.fragment),Yp=n(),et=i("p"),et.textContent=Vr,qp=n(),f(lt.$$.fragment),Kp=n(),st=i("p"),st.textContent=Rr,Dp=n(),nt=i("p"),nt.innerHTML=zr,Op=n(),pt=i("p"),pt.textContent=Nr,ti=n(),f(it.$$.fragment),ei=n(),at=i("p"),at.textContent=Lr,li=n(),mt=i("p"),mt.innerHTML=Wr,si=n(),f(ft.$$.fragment),ni=n(),dt=i("p"),dt.textContent=Sr,pi=n(),rt=i("p"),rt.innerHTML=Qr,ii=n(),f(Mt.$$.fragment),ai=n(),ot=i("p"),ot.innerHTML=Fr,mi=n(),wt=i("p"),wt.innerHTML=Pr,fi=n(),f($t.$$.fragment),di=n(),yt=i("p"),yt.textContent=Er,ri=n(),f(ut.$$.fragment),Mi=n(),Tt=i("p"),Tt.innerHTML=Ar,oi=n(),f(ct.$$.fragment),wi=n(),Jt=i("p"),Jt.innerHTML=Yr,$i=n(),jt=i("p"),jt.innerHTML=qr,yi=n(),f(Ct.$$.fragment),ui=n(),f(Ut.$$.fragment),Ti=n(),bt=i("p"),bt.innerHTML=Kr,ci=n(),f(ht.$$.fragment),Ji=n(),f(gt.$$.fragment),ji=n(),_t=i("p"),_t.innerHTML=Dr,Ci=n(),f(vt.$$.fragment),Ui=n(),It=i("p"),It.textContent=Or,bi=n(),f(Zt.$$.fragment),hi=n(),xt=i("p"),xt.innerHTML=tM,gi=n(),f(kt.$$.fragment),_i=n(),Gt=i("p"),Gt.innerHTML=eM,vi=n(),f(Ht.$$.fragment),Ii=n(),f(Xt.$$.fragment),Zi=n(),Bt=i("p"),Bt.textContent=lM,xi=n(),f(Vt.$$.fragment),ki=n(),Rt=i("p"),Rt.innerHTML=sM,Gi=n(),f(zt.$$.fragment),Hi=n(),Nt=i("p"),Nt.innerHTML=nM,Xi=n(),Lt=i("p"),Lt.innerHTML=pM,Bi=n(),f(Wt.$$.fragment),Vi=n(),St=i("p"),St.innerHTML=iM,Ri=n(),f(Qt.$$.fragment),zi=n(),Ft=i("p"),Ft.textContent=aM,Ni=n(),Pt=i("p"),Pt.innerHTML=mM,Li=n(),f(Et.$$.fragment),Wi=n(),At=i("p"),At.innerHTML=fM,Si=n(),f(Yt.$$.fragment),Qi=n(),f(qt.$$.fragment),Fi=n(),Kt=i("p"),Kt.textContent=dM,Pi=n(),f(Dt.$$.fragment),Ei=n(),f(Ot.$$.fragment),Ai=n(),te=i("p"),te.innerHTML=rM,Yi=n(),ee=i("p"),ee.innerHTML=MM,qi=n(),le=i("p"),le.innerHTML=oM,Ki=n(),f(se.$$.fragment),Di=n(),ne=i("p"),ne.textContent=wM,Oi=n(),f(pe.$$.fragment),ta=n(),ie=i("ul"),ie.innerHTML=$M,ea=n(),f(ae.$$.fragment),la=n(),me=i("p"),me.textContent=yM,sa=n(),f(fe.$$.fragment),na=n(),f(C.$$.fragment),pa=n(),f(U.$$.fragment),ia=n(),f(de.$$.fragment),aa=n(),f(re.$$.fragment),ma=n(),Me=i("p"),Me.innerHTML=uM,fa=n(),oe=i("p"),oe.innerHTML=TM,da=n(),f(we.$$.fragment),ra=n(),$e=i("p"),$e.textContent=cM,Ma=n(),f(ye.$$.fragment),oa=n(),ue=i("p"),ue.innerHTML=JM,wa=n(),f(Te.$$.fragment),$a=n(),ce=i("p"),ce.textContent=jM,ya=n(),f(Je.$$.fragment),ua=n(),je=i("p"),je.innerHTML=CM,Ta=n(),Ce=i("p"),Ce.innerHTML=UM,ca=n(),f(Ue.$$.fragment),Ja=n(),f(be.$$.fragment),ja=n(),he=i("p"),he.innerHTML=bM,Ca=n(),f(ge.$$.fragment),Ua=n(),_e=i("p"),_e.textContent=hM,ba=n(),f(ve.$$.fragment),ha=n(),Ie=i("p"),Ie.textContent=gM,ga=n(),f(Ze.$$.fragment),_a=n(),xe=i("p"),xe.innerHTML=_M,va=n(),f(ke.$$.fragment),Ia=n(),f(Ge.$$.fragment),Za=n(),He=i("p"),He.innerHTML=vM,xa=n(),f(Xe.$$.fragment),ka=n(),f(Be.$$.fragment),Ga=n(),f(Ve.$$.fragment),Ha=n(),Re=i("p"),Re.innerHTML=IM,Xa=n(),f(ze.$$.fragment),Ba=n(),Ne=i("p"),Ne.innerHTML=ZM,Va=n(),f(Le.$$.fragment),Ra=n(),We=i("p"),We.textContent=xM,za=n(),Se=i("p"),Se.textContent=kM,Na=n(),Qe=i("ul"),Qe.innerHTML=GM,La=n(),Fe=i("p"),Fe.textContent=HM,Wa=n(),Pe=i("p"),Pe.innerHTML=XM,Sa=n(),Ee=i("p"),Ee.textContent=BM,Qa=n(),f(Ae.$$.fragment),Fa=n(),Ye=i("p"),Ye.innerHTML=VM,Pa=n(),f(qe.$$.fragment),Ea=n(),Ke=i("p"),Ke.textContent=RM,Aa=n(),f(De.$$.fragment),Ya=n(),Oe=i("p"),Oe.innerHTML=zM,qa=n(),f(tl.$$.fragment),Ka=n(),el=i("p"),el.innerHTML=NM,Da=n(),ll=i("p"),ll.textContent=LM,Oa=n(),sl=i("ul"),sl.innerHTML=WM,tm=n(),f(nl.$$.fragment),em=n(),f(pl.$$.fragment),lm=n(),il=i("p"),il.innerHTML=SM,sm=n(),f(al.$$.fragment),nm=n(),ml=i("p"),ml.innerHTML=QM,pm=n(),fl=i("p"),fl.innerHTML=FM,im=n(),f(dl.$$.fragment),am=n(),f(rl.$$.fragment),mm=n(),Ml=i("p"),Ml.innerHTML=PM,fm=n(),ol=i("p"),ol.textContent=EM,dm=n(),wl=i("ul"),wl.innerHTML=AM,rm=n(),$l=i("p"),$l.innerHTML=YM,Mm=n(),yl=i("p"),yl.textContent=qM,om=n(),f(ul.$$.fragment),wm=n(),f(Tl.$$.fragment),$m=n(),cl=i("p"),cl.innerHTML=KM,ym=n(),Jl=i("p"),Jl.innerHTML=DM,um=n(),jl=i("p"),jl.textContent=OM,Tm=n(),f(Cl.$$.fragment),cm=n(),Ul=i("p"),Ul.textContent=to,Jm=n(),f(bl.$$.fragment),jm=n(),f(hl.$$.fragment),Cm=n(),gl=i("p"),gl.textContent=eo,Um=n(),f(_l.$$.fragment),bm=n(),f(vl.$$.fragment),hm=n(),Il=i("p"),Il.textContent=lo,gm=n(),f(Zl.$$.fragment),_m=n(),xl=i("p"),xl.innerHTML=so,vm=n(),kl=i("p"),kl.textContent=no,Im=n(),f(Gl.$$.fragment),Zm=n(),f(Hl.$$.fragment),xm=n(),Xl=i("p"),Xl.innerHTML=po,km=n(),Bl=i("p"),Bl.innerHTML=io,Gm=n(),f(Vl.$$.fragment),Hm=n(),Rl=i("p"),Rl.textContent=ao,Xm=n(),f(zl.$$.fragment),Bm=n(),Nl=i("p"),Nl.innerHTML=mo,Vm=n(),Ll=i("p"),Ll.innerHTML=fo,Rm=n(),f(Wl.$$.fragment),zm=n(),Sl=i("p"),Sl.innerHTML=ro,Nm=n(),f(Ql.$$.fragment),Lm=n(),Fl=i("p"),Fl.innerHTML=Mo,Wm=n(),f(Pl.$$.fragment),Sm=n(),El=i("p"),El.textContent=oo,Qm=n(),f(Al.$$.fragment),Fm=n(),Yl=i("p"),Yl.textContent=wo,Pm=n(),f(ql.$$.fragment),Em=n(),Kl=i("p"),Kl.innerHTML=$o,Am=n(),Dl=i("p"),Dl.innerHTML=yo,Ym=n(),Ol=i("p"),Ol.innerHTML=uo,qm=n(),f(ts.$$.fragment),Km=n(),es=i("p"),es.innerHTML=To,Dm=n(),f(ls.$$.fragment),Om=n(),ss=i("p"),ss.textContent=co,tf=n(),f(ns.$$.fragment),ef=n(),ps=i("p"),ps.textContent=Jo,lf=n(),f(is.$$.fragment),sf=n(),as=i("p"),as.textContent=jo,nf=n(),f(ms.$$.fragment),pf=n(),fs=i("p"),fs.innerHTML=Co,af=n(),ds=i("ul"),ds.innerHTML=Uo,mf=n(),rs=i("p"),rs.innerHTML=bo,ff=n(),f(Ms.$$.fragment),df=n(),os=i("p"),os.innerHTML=ho,rf=n(),f(ws.$$.fragment),Mf=n(),f($s.$$.fragment),of=n(),ys=i("p"),ys.innerHTML=go,wf=n(),us=i("p"),us.textContent=_o,$f=n(),Ts=i("p"),Ts.innerHTML=vo,yf=n(),cs=i("p"),cs.textContent=Io,uf=n(),f(Js.$$.fragment),Tf=n(),js=i("p"),js.innerHTML=Zo,cf=n(),Cs=i("ul"),Cs.innerHTML=xo,Jf=n(),f(Us.$$.fragment),jf=n(),bs=i("p"),bs.innerHTML=ko,Cf=n(),hs=i("ul"),hs.innerHTML=Go,Uf=n(),f(gs.$$.fragment),bf=n(),_s=i("p"),_s.textContent=Ho,hf=n(),vs=i("ul"),vs.innerHTML=Xo,gf=n(),f(b.$$.fragment),_f=n(),f(h.$$.fragment),vf=n(),f(Is.$$.fragment),If=n(),Zs=i("p"),Zs.innerHTML=Bo,Zf=n(),f(xs.$$.fragment),xf=n(),f(ks.$$.fragment),kf=n(),Gs=i("p"),Gs.innerHTML=Vo,Gf=n(),Hs=i("p"),Hs.textContent=Ro,Hf=n(),Xs=i("ul"),Xs.innerHTML=zo,Xf=n(),Bs=i("p"),Bs.innerHTML=No,Bf=n(),f(Vs.$$.fragment),Vf=n(),Rs=i("ul"),Rs.innerHTML=Lo,Rf=n(),f(zs.$$.fragment),zf=n(),Ns=i("p"),Ns.textContent=Wo,Nf=n(),f(Ls.$$.fragment),Lf=n(),Ws=i("p"),Ws.innerHTML=So,Wf=n(),f(Ss.$$.fragment),Sf=n(),Qs=i("ul"),Qs.innerHTML=Qo,Qf=n(),f(Fs.$$.fragment),Ff=n(),Ps=i("p"),Ps.textContent=Fo,Pf=n(),f(Es.$$.fragment),Ef=n(),As=i("p"),As.innerHTML=Po,Af=n(),f(Ys.$$.fragment),Yf=n(),qs=i("ul"),qs.innerHTML=Eo,qf=n(),f(Ks.$$.fragment),Kf=n(),Ds=i("ul"),Ds.innerHTML=Ao,Df=n(),f(Os.$$.fragment),Of=n(),tn=i("p"),tn.textContent=Yo,td=n(),f(en.$$.fragment),ed=n(),ln=i("p"),ln.textContent=qo,ld=n(),f(sn.$$.fragment),sd=n(),nn=i("p"),nn.innerHTML=Ko,nd=n(),f(pn.$$.fragment),pd=n(),an=i("p"),an.textContent=Do,id=n(),f(mn.$$.fragment),ad=n(),fn=i("p"),fn.innerHTML=Oo,md=n(),f(dn.$$.fragment),fd=n(),rn=i("p"),rn.innerHTML=tw,dd=n(),f(Mn.$$.fragment),rd=n(),on=i("p"),on.textContent=ew,Md=n(),wn=i("p"),wn.textContent=lw,od=n(),$n=i("ul"),$n.innerHTML=sw,wd=n(),yn=i("p"),yn.innerHTML=nw,$d=n(),f(un.$$.fragment),yd=n(),Tn=i("p"),Tn.innerHTML=pw,ud=n(),cn=i("p"),cn.innerHTML=iw,Td=n(),Jn=i("p"),Jn.textContent=aw,cd=n(),f(jn.$$.fragment),Jd=n(),Cn=i("p"),Cn.innerHTML=mw,jd=n(),f(Un.$$.fragment),Cd=n(),bn=i("p"),bn.innerHTML=fw,Ud=n(),f(hn.$$.fragment),bd=n(),gn=i("p"),gn.innerHTML=dw,hd=n(),f(_n.$$.fragment),gd=n(),vn=i("p"),vn.innerHTML=rw,_d=n(),In=i("p"),In.innerHTML=Mw,vd=n(),f(Zn.$$.fragment),Id=n(),xn=i("p"),xn.textContent=ow,Zd=n(),f(kn.$$.fragment),xd=n(),Gn=i("p"),Gn.innerHTML=ww,kd=n(),f(Hn.$$.fragment),Gd=n(),Xn=i("p"),Xn.innerHTML=$w,Hd=n(),f(Bn.$$.fragment),Xd=n(),Vn=i("p"),Vn.textContent=yw,Bd=n(),f(Rn.$$.fragment),Vd=n(),zn=i("p"),zn.innerHTML=uw,Rd=n(),f(Nn.$$.fragment),zd=n(),f(Ln.$$.fragment),Nd=n(),Wn=i("p"),Wn.innerHTML=Tw,Ld=n(),f(Sn.$$.fragment),Wd=n(),Qn=i("p"),Qn.innerHTML=cw,Sd=n(),f(Fn.$$.fragment),Qd=n(),Pn=i("p"),Pn.innerHTML=Jw,Fd=n(),En=i("p"),En.innerHTML=jw,Pd=n(),f(An.$$.fragment),Ed=n(),Yn=i("p"),Yn.textContent=Cw,Ad=n(),f(qn.$$.fragment),Yd=n(),f(Kn.$$.fragment),qd=n(),Dn=i("p"),Dn.textContent=Uw,Kd=n(),f(On.$$.fragment),Dd=n(),f(tp.$$.fragment),Od=n(),ep=i("p"),ep.textContent=bw,tr=n(),lp=i("ol"),lp.innerHTML=hw,er=n(),f(sp.$$.fragment),lr=n(),np=i("p"),np.textContent=gw,sr=n(),pp=i("ol"),pp.innerHTML=_w,nr=n(),ip=i("p"),ip.textContent=vw,pr=n(),ap=i("p"),ap.textContent=Iw,ir=n(),mp=i("p"),mp.innerHTML=Zw,ar=n(),fp=i("p"),fp.textContent=xw,mr=n(),dp=i("ol"),dp.innerHTML=kw,fr=n(),rp=i("p"),rp.textContent=Gw,dr=n(),f(Mp.$$.fragment),rr=n(),op=i("p"),op.textContent=Hw,Mr=n(),f(wp.$$.fragment),or=n(),$p=i("p"),$p.innerHTML=Xw,wr=n(),yp=i("p"),yp.innerHTML=Bw,$r=n(),up=i("p"),up.textContent=Vw,yr=n(),Tp=i("ul"),Tp.innerHTML=Rw,ur=n(),f(cp.$$.fragment),Tr=n(),Jp=i("p"),this.h()},l(t){const e=Yw("svelte-u9bgzb",document.head);u=a(e,"META",{name:!0,content:!0}),e.forEach(l),c=p(t),T=a(t,"P",{}),Sw(T).forEach(l),J=p(t),d(g.$$.fragment,t),jp=p(t),_=a(t,"P",{"data-svelte-h":!0}),m(_)!=="svelte-1f4v0si"&&(_.textContent=Cr),Cp=p(t),v=a(t,"P",{"data-svelte-h":!0}),m(v)!=="svelte-if97kr"&&(v.textContent=Ur),Up=p(t),I=a(t,"OL",{"data-svelte-h":!0}),m(I)!=="svelte-6tegpe"&&(I.innerHTML=br),bp=p(t),d(Z.$$.fragment,t),hp=p(t),x=a(t,"OL",{"data-svelte-h":!0}),m(x)!=="svelte-1l8mb7f"&&(x.innerHTML=hr),gp=p(t),d(k.$$.fragment,t),_p=p(t),G=a(t,"P",{"data-svelte-h":!0}),m(G)!=="svelte-1wsymz9"&&(G.innerHTML=gr),vp=p(t),d(H.$$.fragment,t),Ip=p(t),d(X.$$.fragment,t),Zp=p(t),B=a(t,"P",{"data-svelte-h":!0}),m(B)!=="svelte-133zp5n"&&(B.innerHTML=_r),xp=p(t),V=a(t,"P",{"data-svelte-h":!0}),m(V)!=="svelte-4vdyto"&&(V.textContent=vr),kp=p(t),R=a(t,"P",{"data-svelte-h":!0}),m(R)!=="svelte-1nodzat"&&(R.textContent=Ir),Gp=p(t),d(z.$$.fragment,t),Hp=p(t),N=a(t,"P",{"data-svelte-h":!0}),m(N)!=="svelte-2q8psa"&&(N.textContent=Zr),Xp=p(t),d(L.$$.fragment,t),Bp=p(t),W=a(t,"P",{"data-svelte-h":!0}),m(W)!=="svelte-1a6r617"&&(W.textContent=xr),Vp=p(t),d(S.$$.fragment,t),Rp=p(t),Q=a(t,"P",{"data-svelte-h":!0}),m(Q)!=="svelte-1xe5yst"&&(Q.textContent=kr),zp=p(t),F=a(t,"UL",{"data-svelte-h":!0}),m(F)!=="svelte-1j05ap2"&&(F.innerHTML=Gr),Np=p(t),d(P.$$.fragment,t),Lp=p(t),E=a(t,"P",{"data-svelte-h":!0}),m(E)!=="svelte-p9q4wz"&&(E.textContent=Hr),Wp=p(t),d(A.$$.fragment,t),Sp=p(t),Y=a(t,"P",{"data-svelte-h":!0}),m(Y)!=="svelte-1csx8vu"&&(Y.textContent=Xr),Qp=p(t),d(q.$$.fragment,t),Fp=p(t),d(K.$$.fragment,t),Pp=p(t),D=a(t,"P",{"data-svelte-h":!0}),m(D)!=="svelte-aap7d2"&&(D.textContent=Br),Ep=p(t),d(O.$$.fragment,t),Ap=p(t),d(tt.$$.fragment,t),Yp=p(t),et=a(t,"P",{"data-svelte-h":!0}),m(et)!=="svelte-7oqrly"&&(et.textContent=Vr),qp=p(t),d(lt.$$.fragment,t),Kp=p(t),st=a(t,"P",{"data-svelte-h":!0}),m(st)!=="svelte-ycw310"&&(st.textContent=Rr),Dp=p(t),nt=a(t,"P",{"data-svelte-h":!0}),m(nt)!=="svelte-143xhxm"&&(nt.innerHTML=zr),Op=p(t),pt=a(t,"P",{"data-svelte-h":!0}),m(pt)!=="svelte-1f6s2bi"&&(pt.textContent=Nr),ti=p(t),d(it.$$.fragment,t),ei=p(t),at=a(t,"P",{"data-svelte-h":!0}),m(at)!=="svelte-vd4ir7"&&(at.textContent=Lr),li=p(t),mt=a(t,"P",{"data-svelte-h":!0}),m(mt)!=="svelte-1perqkb"&&(mt.innerHTML=Wr),si=p(t),d(ft.$$.fragment,t),ni=p(t),dt=a(t,"P",{"data-svelte-h":!0}),m(dt)!=="svelte-jgmuxt"&&(dt.textContent=Sr),pi=p(t),rt=a(t,"P",{"data-svelte-h":!0}),m(rt)!=="svelte-4y49ga"&&(rt.innerHTML=Qr),ii=p(t),d(Mt.$$.fragment,t),ai=p(t),ot=a(t,"P",{"data-svelte-h":!0}),m(ot)!=="svelte-1oo7jbh"&&(ot.innerHTML=Fr),mi=p(t),wt=a(t,"P",{"data-svelte-h":!0}),m(wt)!=="svelte-qdgvdm"&&(wt.innerHTML=Pr),fi=p(t),d($t.$$.fragment,t),di=p(t),yt=a(t,"P",{"data-svelte-h":!0}),m(yt)!=="svelte-1fq1jbf"&&(yt.textContent=Er),ri=p(t),d(ut.$$.fragment,t),Mi=p(t),Tt=a(t,"P",{"data-svelte-h":!0}),m(Tt)!=="svelte-1bre4qd"&&(Tt.innerHTML=Ar),oi=p(t),d(ct.$$.fragment,t),wi=p(t),Jt=a(t,"P",{"data-svelte-h":!0}),m(Jt)!=="svelte-1pz7pgc"&&(Jt.innerHTML=Yr),$i=p(t),jt=a(t,"P",{"data-svelte-h":!0}),m(jt)!=="svelte-b67pux"&&(jt.innerHTML=qr),yi=p(t),d(Ct.$$.fragment,t),ui=p(t),d(Ut.$$.fragment,t),Ti=p(t),bt=a(t,"P",{"data-svelte-h":!0}),m(bt)!=="svelte-15zb8zq"&&(bt.innerHTML=Kr),ci=p(t),d(ht.$$.fragment,t),Ji=p(t),d(gt.$$.fragment,t),ji=p(t),_t=a(t,"P",{"data-svelte-h":!0}),m(_t)!=="svelte-71wmjc"&&(_t.innerHTML=Dr),Ci=p(t),d(vt.$$.fragment,t),Ui=p(t),It=a(t,"P",{"data-svelte-h":!0}),m(It)!=="svelte-p9e9h2"&&(It.textContent=Or),bi=p(t),d(Zt.$$.fragment,t),hi=p(t),xt=a(t,"P",{"data-svelte-h":!0}),m(xt)!=="svelte-1hy29rc"&&(xt.innerHTML=tM),gi=p(t),d(kt.$$.fragment,t),_i=p(t),Gt=a(t,"P",{"data-svelte-h":!0}),m(Gt)!=="svelte-1o0bd21"&&(Gt.innerHTML=eM),vi=p(t),d(Ht.$$.fragment,t),Ii=p(t),d(Xt.$$.fragment,t),Zi=p(t),Bt=a(t,"P",{"data-svelte-h":!0}),m(Bt)!=="svelte-d7g4rr"&&(Bt.textContent=lM),xi=p(t),d(Vt.$$.fragment,t),ki=p(t),Rt=a(t,"P",{"data-svelte-h":!0}),m(Rt)!=="svelte-lot8kg"&&(Rt.innerHTML=sM),Gi=p(t),d(zt.$$.fragment,t),Hi=p(t),Nt=a(t,"P",{"data-svelte-h":!0}),m(Nt)!=="svelte-tb2172"&&(Nt.innerHTML=nM),Xi=p(t),Lt=a(t,"P",{"data-svelte-h":!0}),m(Lt)!=="svelte-1ojov2s"&&(Lt.innerHTML=pM),Bi=p(t),d(Wt.$$.fragment,t),Vi=p(t),St=a(t,"P",{"data-svelte-h":!0}),m(St)!=="svelte-10dyxs"&&(St.innerHTML=iM),Ri=p(t),d(Qt.$$.fragment,t),zi=p(t),Ft=a(t,"P",{"data-svelte-h":!0}),m(Ft)!=="svelte-13229eb"&&(Ft.textContent=aM),Ni=p(t),Pt=a(t,"P",{"data-svelte-h":!0}),m(Pt)!=="svelte-16jah8d"&&(Pt.innerHTML=mM),Li=p(t),d(Et.$$.fragment,t),Wi=p(t),At=a(t,"P",{"data-svelte-h":!0}),m(At)!=="svelte-1kuyb6u"&&(At.innerHTML=fM),Si=p(t),d(Yt.$$.fragment,t),Qi=p(t),d(qt.$$.fragment,t),Fi=p(t),Kt=a(t,"P",{"data-svelte-h":!0}),m(Kt)!=="svelte-d3grr6"&&(Kt.textContent=dM),Pi=p(t),d(Dt.$$.fragment,t),Ei=p(t),d(Ot.$$.fragment,t),Ai=p(t),te=a(t,"P",{"data-svelte-h":!0}),m(te)!=="svelte-ye5wlw"&&(te.innerHTML=rM),Yi=p(t),ee=a(t,"P",{"data-svelte-h":!0}),m(ee)!=="svelte-1qba2ug"&&(ee.innerHTML=MM),qi=p(t),le=a(t,"P",{"data-svelte-h":!0}),m(le)!=="svelte-1fzh5bl"&&(le.innerHTML=oM),Ki=p(t),d(se.$$.fragment,t),Di=p(t),ne=a(t,"P",{"data-svelte-h":!0}),m(ne)!=="svelte-cdstvx"&&(ne.textContent=wM),Oi=p(t),d(pe.$$.fragment,t),ta=p(t),ie=a(t,"UL",{"data-svelte-h":!0}),m(ie)!=="svelte-1mmgi4h"&&(ie.innerHTML=$M),ea=p(t),d(ae.$$.fragment,t),la=p(t),me=a(t,"P",{"data-svelte-h":!0}),m(me)!=="svelte-1x9cp76"&&(me.textContent=yM),sa=p(t),d(fe.$$.fragment,t),na=p(t),d(C.$$.fragment,t),pa=p(t),d(U.$$.fragment,t),ia=p(t),d(de.$$.fragment,t),aa=p(t),d(re.$$.fragment,t),ma=p(t),Me=a(t,"P",{"data-svelte-h":!0}),m(Me)!=="svelte-190ttxr"&&(Me.innerHTML=uM),fa=p(t),oe=a(t,"P",{"data-svelte-h":!0}),m(oe)!=="svelte-1ruygvg"&&(oe.innerHTML=TM),da=p(t),d(we.$$.fragment,t),ra=p(t),$e=a(t,"P",{"data-svelte-h":!0}),m($e)!=="svelte-1jm3mbg"&&($e.textContent=cM),Ma=p(t),d(ye.$$.fragment,t),oa=p(t),ue=a(t,"P",{"data-svelte-h":!0}),m(ue)!=="svelte-13qf2tv"&&(ue.innerHTML=JM),wa=p(t),d(Te.$$.fragment,t),$a=p(t),ce=a(t,"P",{"data-svelte-h":!0}),m(ce)!=="svelte-z9wvdh"&&(ce.textContent=jM),ya=p(t),d(Je.$$.fragment,t),ua=p(t),je=a(t,"P",{"data-svelte-h":!0}),m(je)!=="svelte-15nvmf3"&&(je.innerHTML=CM),Ta=p(t),Ce=a(t,"P",{"data-svelte-h":!0}),m(Ce)!=="svelte-14rlj5b"&&(Ce.innerHTML=UM),ca=p(t),d(Ue.$$.fragment,t),Ja=p(t),d(be.$$.fragment,t),ja=p(t),he=a(t,"P",{"data-svelte-h":!0}),m(he)!=="svelte-188fsnj"&&(he.innerHTML=bM),Ca=p(t),d(ge.$$.fragment,t),Ua=p(t),_e=a(t,"P",{"data-svelte-h":!0}),m(_e)!=="svelte-6nfn1l"&&(_e.textContent=hM),ba=p(t),d(ve.$$.fragment,t),ha=p(t),Ie=a(t,"P",{"data-svelte-h":!0}),m(Ie)!=="svelte-1kcezsg"&&(Ie.textContent=gM),ga=p(t),d(Ze.$$.fragment,t),_a=p(t),xe=a(t,"P",{"data-svelte-h":!0}),m(xe)!=="svelte-dryod4"&&(xe.innerHTML=_M),va=p(t),d(ke.$$.fragment,t),Ia=p(t),d(Ge.$$.fragment,t),Za=p(t),He=a(t,"P",{"data-svelte-h":!0}),m(He)!=="svelte-bkotvv"&&(He.innerHTML=vM),xa=p(t),d(Xe.$$.fragment,t),ka=p(t),d(Be.$$.fragment,t),Ga=p(t),d(Ve.$$.fragment,t),Ha=p(t),Re=a(t,"P",{"data-svelte-h":!0}),m(Re)!=="svelte-13mupbb"&&(Re.innerHTML=IM),Xa=p(t),d(ze.$$.fragment,t),Ba=p(t),Ne=a(t,"P",{"data-svelte-h":!0}),m(Ne)!=="svelte-1kdozmm"&&(Ne.innerHTML=ZM),Va=p(t),d(Le.$$.fragment,t),Ra=p(t),We=a(t,"P",{"data-svelte-h":!0}),m(We)!=="svelte-1a7ibsx"&&(We.textContent=xM),za=p(t),Se=a(t,"P",{"data-svelte-h":!0}),m(Se)!=="svelte-vvqrwf"&&(Se.textContent=kM),Na=p(t),Qe=a(t,"UL",{"data-svelte-h":!0}),m(Qe)!=="svelte-1orndjp"&&(Qe.innerHTML=GM),La=p(t),Fe=a(t,"P",{"data-svelte-h":!0}),m(Fe)!=="svelte-10fh04e"&&(Fe.textContent=HM),Wa=p(t),Pe=a(t,"P",{"data-svelte-h":!0}),m(Pe)!=="svelte-5bpuka"&&(Pe.innerHTML=XM),Sa=p(t),Ee=a(t,"P",{"data-svelte-h":!0}),m(Ee)!=="svelte-l9ub52"&&(Ee.textContent=BM),Qa=p(t),d(Ae.$$.fragment,t),Fa=p(t),Ye=a(t,"P",{"data-svelte-h":!0}),m(Ye)!=="svelte-17hvngs"&&(Ye.innerHTML=VM),Pa=p(t),d(qe.$$.fragment,t),Ea=p(t),Ke=a(t,"P",{"data-svelte-h":!0}),m(Ke)!=="svelte-1e6564g"&&(Ke.textContent=RM),Aa=p(t),d(De.$$.fragment,t),Ya=p(t),Oe=a(t,"P",{"data-svelte-h":!0}),m(Oe)!=="svelte-16epltl"&&(Oe.innerHTML=zM),qa=p(t),d(tl.$$.fragment,t),Ka=p(t),el=a(t,"P",{"data-svelte-h":!0}),m(el)!=="svelte-1ooqf8t"&&(el.innerHTML=NM),Da=p(t),ll=a(t,"P",{"data-svelte-h":!0}),m(ll)!=="svelte-ogqgqi"&&(ll.textContent=LM),Oa=p(t),sl=a(t,"UL",{"data-svelte-h":!0}),m(sl)!=="svelte-12kgxwu"&&(sl.innerHTML=WM),tm=p(t),d(nl.$$.fragment,t),em=p(t),d(pl.$$.fragment,t),lm=p(t),il=a(t,"P",{"data-svelte-h":!0}),m(il)!=="svelte-uezj1y"&&(il.innerHTML=SM),sm=p(t),d(al.$$.fragment,t),nm=p(t),ml=a(t,"P",{"data-svelte-h":!0}),m(ml)!=="svelte-1yhxrgp"&&(ml.innerHTML=QM),pm=p(t),fl=a(t,"P",{"data-svelte-h":!0}),m(fl)!=="svelte-1tievvp"&&(fl.innerHTML=FM),im=p(t),d(dl.$$.fragment,t),am=p(t),d(rl.$$.fragment,t),mm=p(t),Ml=a(t,"P",{"data-svelte-h":!0}),m(Ml)!=="svelte-3d2xs6"&&(Ml.innerHTML=PM),fm=p(t),ol=a(t,"P",{"data-svelte-h":!0}),m(ol)!=="svelte-cro0jo"&&(ol.textContent=EM),dm=p(t),wl=a(t,"UL",{"data-svelte-h":!0}),m(wl)!=="svelte-m5pydi"&&(wl.innerHTML=AM),rm=p(t),$l=a(t,"P",{"data-svelte-h":!0}),m($l)!=="svelte-1ap182y"&&($l.innerHTML=YM),Mm=p(t),yl=a(t,"P",{"data-svelte-h":!0}),m(yl)!=="svelte-f6tma1"&&(yl.textContent=qM),om=p(t),d(ul.$$.fragment,t),wm=p(t),d(Tl.$$.fragment,t),$m=p(t),cl=a(t,"P",{"data-svelte-h":!0}),m(cl)!=="svelte-4moyq3"&&(cl.innerHTML=KM),ym=p(t),Jl=a(t,"P",{"data-svelte-h":!0}),m(Jl)!=="svelte-1we7ukd"&&(Jl.innerHTML=DM),um=p(t),jl=a(t,"P",{"data-svelte-h":!0}),m(jl)!=="svelte-15xyu1i"&&(jl.textContent=OM),Tm=p(t),d(Cl.$$.fragment,t),cm=p(t),Ul=a(t,"P",{"data-svelte-h":!0}),m(Ul)!=="svelte-65pz16"&&(Ul.textContent=to),Jm=p(t),d(bl.$$.fragment,t),jm=p(t),d(hl.$$.fragment,t),Cm=p(t),gl=a(t,"P",{"data-svelte-h":!0}),m(gl)!=="svelte-pospj6"&&(gl.textContent=eo),Um=p(t),d(_l.$$.fragment,t),bm=p(t),d(vl.$$.fragment,t),hm=p(t),Il=a(t,"P",{"data-svelte-h":!0}),m(Il)!=="svelte-1at1peb"&&(Il.textContent=lo),gm=p(t),d(Zl.$$.fragment,t),_m=p(t),xl=a(t,"P",{"data-svelte-h":!0}),m(xl)!=="svelte-zu2v2r"&&(xl.innerHTML=so),vm=p(t),kl=a(t,"P",{"data-svelte-h":!0}),m(kl)!=="svelte-1kda3rk"&&(kl.textContent=no),Im=p(t),d(Gl.$$.fragment,t),Zm=p(t),d(Hl.$$.fragment,t),xm=p(t),Xl=a(t,"P",{"data-svelte-h":!0}),m(Xl)!=="svelte-12rb2kn"&&(Xl.innerHTML=po),km=p(t),Bl=a(t,"P",{"data-svelte-h":!0}),m(Bl)!=="svelte-1qovrxg"&&(Bl.innerHTML=io),Gm=p(t),d(Vl.$$.fragment,t),Hm=p(t),Rl=a(t,"P",{"data-svelte-h":!0}),m(Rl)!=="svelte-9m3rwb"&&(Rl.textContent=ao),Xm=p(t),d(zl.$$.fragment,t),Bm=p(t),Nl=a(t,"P",{"data-svelte-h":!0}),m(Nl)!=="svelte-1qeo0gx"&&(Nl.innerHTML=mo),Vm=p(t),Ll=a(t,"P",{"data-svelte-h":!0}),m(Ll)!=="svelte-1c7mqi8"&&(Ll.innerHTML=fo),Rm=p(t),d(Wl.$$.fragment,t),zm=p(t),Sl=a(t,"P",{"data-svelte-h":!0}),m(Sl)!=="svelte-1f79mwi"&&(Sl.innerHTML=ro),Nm=p(t),d(Ql.$$.fragment,t),Lm=p(t),Fl=a(t,"P",{"data-svelte-h":!0}),m(Fl)!=="svelte-18j7dyi"&&(Fl.innerHTML=Mo),Wm=p(t),d(Pl.$$.fragment,t),Sm=p(t),El=a(t,"P",{"data-svelte-h":!0}),m(El)!=="svelte-144s97y"&&(El.textContent=oo),Qm=p(t),d(Al.$$.fragment,t),Fm=p(t),Yl=a(t,"P",{"data-svelte-h":!0}),m(Yl)!=="svelte-16tgjeh"&&(Yl.textContent=wo),Pm=p(t),d(ql.$$.fragment,t),Em=p(t),Kl=a(t,"P",{"data-svelte-h":!0}),m(Kl)!=="svelte-e8xv16"&&(Kl.innerHTML=$o),Am=p(t),Dl=a(t,"P",{"data-svelte-h":!0}),m(Dl)!=="svelte-yhfvvk"&&(Dl.innerHTML=yo),Ym=p(t),Ol=a(t,"P",{"data-svelte-h":!0}),m(Ol)!=="svelte-drl6lj"&&(Ol.innerHTML=uo),qm=p(t),d(ts.$$.fragment,t),Km=p(t),es=a(t,"P",{"data-svelte-h":!0}),m(es)!=="svelte-15mrz5v"&&(es.innerHTML=To),Dm=p(t),d(ls.$$.fragment,t),Om=p(t),ss=a(t,"P",{"data-svelte-h":!0}),m(ss)!=="svelte-144s97y"&&(ss.textContent=co),tf=p(t),d(ns.$$.fragment,t),ef=p(t),ps=a(t,"P",{"data-svelte-h":!0}),m(ps)!=="svelte-xlq195"&&(ps.textContent=Jo),lf=p(t),d(is.$$.fragment,t),sf=p(t),as=a(t,"P",{"data-svelte-h":!0}),m(as)!=="svelte-1wymcgj"&&(as.textContent=jo),nf=p(t),d(ms.$$.fragment,t),pf=p(t),fs=a(t,"P",{"data-svelte-h":!0}),m(fs)!=="svelte-4mzt97"&&(fs.innerHTML=Co),af=p(t),ds=a(t,"UL",{"data-svelte-h":!0}),m(ds)!=="svelte-ujiyg0"&&(ds.innerHTML=Uo),mf=p(t),rs=a(t,"P",{"data-svelte-h":!0}),m(rs)!=="svelte-1tj22t1"&&(rs.innerHTML=bo),ff=p(t),d(Ms.$$.fragment,t),df=p(t),os=a(t,"P",{"data-svelte-h":!0}),m(os)!=="svelte-1prtux1"&&(os.innerHTML=ho),rf=p(t),d(ws.$$.fragment,t),Mf=p(t),d($s.$$.fragment,t),of=p(t),ys=a(t,"P",{"data-svelte-h":!0}),m(ys)!=="svelte-ru673g"&&(ys.innerHTML=go),wf=p(t),us=a(t,"P",{"data-svelte-h":!0}),m(us)!=="svelte-ohh6o"&&(us.textContent=_o),$f=p(t),Ts=a(t,"P",{"data-svelte-h":!0}),m(Ts)!=="svelte-19cg9sr"&&(Ts.innerHTML=vo),yf=p(t),cs=a(t,"P",{"data-svelte-h":!0}),m(cs)!=="svelte-lg2i64"&&(cs.textContent=Io),uf=p(t),d(Js.$$.fragment,t),Tf=p(t),js=a(t,"P",{"data-svelte-h":!0}),m(js)!=="svelte-cuevgw"&&(js.innerHTML=Zo),cf=p(t),Cs=a(t,"UL",{"data-svelte-h":!0}),m(Cs)!=="svelte-c3cbm4"&&(Cs.innerHTML=xo),Jf=p(t),d(Us.$$.fragment,t),jf=p(t),bs=a(t,"P",{"data-svelte-h":!0}),m(bs)!=="svelte-1yroefg"&&(bs.innerHTML=ko),Cf=p(t),hs=a(t,"UL",{"data-svelte-h":!0}),m(hs)!=="svelte-8rwxpi"&&(hs.innerHTML=Go),Uf=p(t),d(gs.$$.fragment,t),bf=p(t),_s=a(t,"P",{"data-svelte-h":!0}),m(_s)!=="svelte-ha43la"&&(_s.textContent=Ho),hf=p(t),vs=a(t,"UL",{"data-svelte-h":!0}),m(vs)!=="svelte-17rfg5h"&&(vs.innerHTML=Xo),gf=p(t),d(b.$$.fragment,t),_f=p(t),d(h.$$.fragment,t),vf=p(t),d(Is.$$.fragment,t),If=p(t),Zs=a(t,"P",{"data-svelte-h":!0}),m(Zs)!=="svelte-15uh889"&&(Zs.innerHTML=Bo),Zf=p(t),d(xs.$$.fragment,t),xf=p(t),d(ks.$$.fragment,t),kf=p(t),Gs=a(t,"P",{"data-svelte-h":!0}),m(Gs)!=="svelte-1bwh00e"&&(Gs.innerHTML=Vo),Gf=p(t),Hs=a(t,"P",{"data-svelte-h":!0}),m(Hs)!=="svelte-12rb4qk"&&(Hs.textContent=Ro),Hf=p(t),Xs=a(t,"UL",{"data-svelte-h":!0}),m(Xs)!=="svelte-1j8ob66"&&(Xs.innerHTML=zo),Xf=p(t),Bs=a(t,"P",{"data-svelte-h":!0}),m(Bs)!=="svelte-7lqsb7"&&(Bs.innerHTML=No),Bf=p(t),d(Vs.$$.fragment,t),Vf=p(t),Rs=a(t,"UL",{"data-svelte-h":!0}),m(Rs)!=="svelte-1wif35g"&&(Rs.innerHTML=Lo),Rf=p(t),d(zs.$$.fragment,t),zf=p(t),Ns=a(t,"P",{"data-svelte-h":!0}),m(Ns)!=="svelte-z7hemg"&&(Ns.textContent=Wo),Nf=p(t),d(Ls.$$.fragment,t),Lf=p(t),Ws=a(t,"P",{"data-svelte-h":!0}),m(Ws)!=="svelte-ewu7tz"&&(Ws.innerHTML=So),Wf=p(t),d(Ss.$$.fragment,t),Sf=p(t),Qs=a(t,"UL",{"data-svelte-h":!0}),m(Qs)!=="svelte-kx7ezb"&&(Qs.innerHTML=Qo),Qf=p(t),d(Fs.$$.fragment,t),Ff=p(t),Ps=a(t,"P",{"data-svelte-h":!0}),m(Ps)!=="svelte-163fd3l"&&(Ps.textContent=Fo),Pf=p(t),d(Es.$$.fragment,t),Ef=p(t),As=a(t,"P",{"data-svelte-h":!0}),m(As)!=="svelte-ewu7tz"&&(As.innerHTML=Po),Af=p(t),d(Ys.$$.fragment,t),Yf=p(t),qs=a(t,"UL",{"data-svelte-h":!0}),m(qs)!=="svelte-r7uq1p"&&(qs.innerHTML=Eo),qf=p(t),d(Ks.$$.fragment,t),Kf=p(t),Ds=a(t,"UL",{"data-svelte-h":!0}),m(Ds)!=="svelte-6pb97v"&&(Ds.innerHTML=Ao),Df=p(t),d(Os.$$.fragment,t),Of=p(t),tn=a(t,"P",{"data-svelte-h":!0}),m(tn)!=="svelte-2q8psa"&&(tn.textContent=Yo),td=p(t),d(en.$$.fragment,t),ed=p(t),ln=a(t,"P",{"data-svelte-h":!0}),m(ln)!=="svelte-1ij2jrz"&&(ln.textContent=qo),ld=p(t),d(sn.$$.fragment,t),sd=p(t),nn=a(t,"P",{"data-svelte-h":!0}),m(nn)!=="svelte-79crc0"&&(nn.innerHTML=Ko),nd=p(t),d(pn.$$.fragment,t),pd=p(t),an=a(t,"P",{"data-svelte-h":!0}),m(an)!=="svelte-49mpzn"&&(an.textContent=Do),id=p(t),d(mn.$$.fragment,t),ad=p(t),fn=a(t,"P",{"data-svelte-h":!0}),m(fn)!=="svelte-1eoodnh"&&(fn.innerHTML=Oo),md=p(t),d(dn.$$.fragment,t),fd=p(t),rn=a(t,"P",{"data-svelte-h":!0}),m(rn)!=="svelte-1u1ijdq"&&(rn.innerHTML=tw),dd=p(t),d(Mn.$$.fragment,t),rd=p(t),on=a(t,"P",{"data-svelte-h":!0}),m(on)!=="svelte-1py4xe1"&&(on.textContent=ew),Md=p(t),wn=a(t,"P",{"data-svelte-h":!0}),m(wn)!=="svelte-19c7p8h"&&(wn.textContent=lw),od=p(t),$n=a(t,"UL",{"data-svelte-h":!0}),m($n)!=="svelte-14yedo1"&&($n.innerHTML=sw),wd=p(t),yn=a(t,"P",{"data-svelte-h":!0}),m(yn)!=="svelte-bqqw6e"&&(yn.innerHTML=nw),$d=p(t),d(un.$$.fragment,t),yd=p(t),Tn=a(t,"P",{"data-svelte-h":!0}),m(Tn)!=="svelte-r73no7"&&(Tn.innerHTML=pw),ud=p(t),cn=a(t,"P",{"data-svelte-h":!0}),m(cn)!=="svelte-mqetyk"&&(cn.innerHTML=iw),Td=p(t),Jn=a(t,"P",{"data-svelte-h":!0}),m(Jn)!=="svelte-vqznoj"&&(Jn.textContent=aw),cd=p(t),d(jn.$$.fragment,t),Jd=p(t),Cn=a(t,"P",{"data-svelte-h":!0}),m(Cn)!=="svelte-pmgaql"&&(Cn.innerHTML=mw),jd=p(t),d(Un.$$.fragment,t),Cd=p(t),bn=a(t,"P",{"data-svelte-h":!0}),m(bn)!=="svelte-6yplq0"&&(bn.innerHTML=fw),Ud=p(t),d(hn.$$.fragment,t),bd=p(t),gn=a(t,"P",{"data-svelte-h":!0}),m(gn)!=="svelte-1goe70r"&&(gn.innerHTML=dw),hd=p(t),d(_n.$$.fragment,t),gd=p(t),vn=a(t,"P",{"data-svelte-h":!0}),m(vn)!=="svelte-1456tx8"&&(vn.innerHTML=rw),_d=p(t),In=a(t,"P",{"data-svelte-h":!0}),m(In)!=="svelte-1pude8m"&&(In.innerHTML=Mw),vd=p(t),d(Zn.$$.fragment,t),Id=p(t),xn=a(t,"P",{"data-svelte-h":!0}),m(xn)!=="svelte-13mmw96"&&(xn.textContent=ow),Zd=p(t),d(kn.$$.fragment,t),xd=p(t),Gn=a(t,"P",{"data-svelte-h":!0}),m(Gn)!=="svelte-ipsv1t"&&(Gn.innerHTML=ww),kd=p(t),d(Hn.$$.fragment,t),Gd=p(t),Xn=a(t,"P",{"data-svelte-h":!0}),m(Xn)!=="svelte-2uhqqg"&&(Xn.innerHTML=$w),Hd=p(t),d(Bn.$$.fragment,t),Xd=p(t),Vn=a(t,"P",{"data-svelte-h":!0}),m(Vn)!=="svelte-gwbpae"&&(Vn.textContent=yw),Bd=p(t),d(Rn.$$.fragment,t),Vd=p(t),zn=a(t,"P",{"data-svelte-h":!0}),m(zn)!=="svelte-1n4vef0"&&(zn.innerHTML=uw),Rd=p(t),d(Nn.$$.fragment,t),zd=p(t),d(Ln.$$.fragment,t),Nd=p(t),Wn=a(t,"P",{"data-svelte-h":!0}),m(Wn)!=="svelte-1br382f"&&(Wn.innerHTML=Tw),Ld=p(t),d(Sn.$$.fragment,t),Wd=p(t),Qn=a(t,"P",{"data-svelte-h":!0}),m(Qn)!=="svelte-1287rf4"&&(Qn.innerHTML=cw),Sd=p(t),d(Fn.$$.fragment,t),Qd=p(t),Pn=a(t,"P",{"data-svelte-h":!0}),m(Pn)!=="svelte-3ssu2y"&&(Pn.innerHTML=Jw),Fd=p(t),En=a(t,"P",{"data-svelte-h":!0}),m(En)!=="svelte-engu1n"&&(En.innerHTML=jw),Pd=p(t),d(An.$$.fragment,t),Ed=p(t),Yn=a(t,"P",{"data-svelte-h":!0}),m(Yn)!=="svelte-62lqft"&&(Yn.textContent=Cw),Ad=p(t),d(qn.$$.fragment,t),Yd=p(t),d(Kn.$$.fragment,t),qd=p(t),Dn=a(t,"P",{"data-svelte-h":!0}),m(Dn)!=="svelte-87kqd"&&(Dn.textContent=Uw),Kd=p(t),d(On.$$.fragment,t),Dd=p(t),d(tp.$$.fragment,t),Od=p(t),ep=a(t,"P",{"data-svelte-h":!0}),m(ep)!=="svelte-fbn1dw"&&(ep.textContent=bw),tr=p(t),lp=a(t,"OL",{"data-svelte-h":!0}),m(lp)!=="svelte-1whxp3g"&&(lp.innerHTML=hw),er=p(t),d(sp.$$.fragment,t),lr=p(t),np=a(t,"P",{"data-svelte-h":!0}),m(np)!=="svelte-pd7gjw"&&(np.textContent=gw),sr=p(t),pp=a(t,"OL",{"data-svelte-h":!0}),m(pp)!=="svelte-1kzrtdv"&&(pp.innerHTML=_w),nr=p(t),ip=a(t,"P",{"data-svelte-h":!0}),m(ip)!=="svelte-1hfz3f5"&&(ip.textContent=vw),pr=p(t),ap=a(t,"P",{"data-svelte-h":!0}),m(ap)!=="svelte-14b6iud"&&(ap.textContent=Iw),ir=p(t),mp=a(t,"P",{"data-svelte-h":!0}),m(mp)!=="svelte-zezoch"&&(mp.innerHTML=Zw),ar=p(t),fp=a(t,"P",{"data-svelte-h":!0}),m(fp)!=="svelte-g2woxv"&&(fp.textContent=xw),mr=p(t),dp=a(t,"OL",{"data-svelte-h":!0}),m(dp)!=="svelte-1qp18n7"&&(dp.innerHTML=kw),fr=p(t),rp=a(t,"P",{"data-svelte-h":!0}),m(rp)!=="svelte-16ij210"&&(rp.textContent=Gw),dr=p(t),d(Mp.$$.fragment,t),rr=p(t),op=a(t,"P",{"data-svelte-h":!0}),m(op)!=="svelte-17elm4j"&&(op.textContent=Hw),Mr=p(t),d(wp.$$.fragment,t),or=p(t),$p=a(t,"P",{"data-svelte-h":!0}),m($p)!=="svelte-z10780"&&($p.innerHTML=Xw),wr=p(t),yp=a(t,"P",{"data-svelte-h":!0}),m(yp)!=="svelte-e3np7l"&&(yp.innerHTML=Bw),$r=p(t),up=a(t,"P",{"data-svelte-h":!0}),m(up)!=="svelte-8n23od"&&(up.textContent=Vw),yr=p(t),Tp=a(t,"UL",{"data-svelte-h":!0}),m(Tp)!=="svelte-ikwit4"&&(Tp.innerHTML=Rw),ur=p(t),d(cp.$$.fragment,t),Tr=p(t),Jp=a(t,"P",{}),Sw(Jp).forEach(l),this.h()},h(){Qw(u,"name","hf:doc:metadata"),Qw(u,"content",s$)},m(t,e){qw(document.head,u),s(t,c,e),s(t,T,e),s(t,J,e),r(g,t,e),s(t,jp,e),s(t,_,e),s(t,Cp,e),s(t,v,e),s(t,Up,e),s(t,I,e),s(t,bp,e),r(Z,t,e),s(t,hp,e),s(t,x,e),s(t,gp,e),r(k,t,e),s(t,_p,e),s(t,G,e),s(t,vp,e),r(H,t,e),s(t,Ip,e),r(X,t,e),s(t,Zp,e),s(t,B,e),s(t,xp,e),s(t,V,e),s(t,kp,e),s(t,R,e),s(t,Gp,e),r(z,t,e),s(t,Hp,e),s(t,N,e),s(t,Xp,e),r(L,t,e),s(t,Bp,e),s(t,W,e),s(t,Vp,e),r(S,t,e),s(t,Rp,e),s(t,Q,e),s(t,zp,e),s(t,F,e),s(t,Np,e),r(P,t,e),s(t,Lp,e),s(t,E,e),s(t,Wp,e),r(A,t,e),s(t,Sp,e),s(t,Y,e),s(t,Qp,e),r(q,t,e),s(t,Fp,e),r(K,t,e),s(t,Pp,e),s(t,D,e),s(t,Ep,e),r(O,t,e),s(t,Ap,e),r(tt,t,e),s(t,Yp,e),s(t,et,e),s(t,qp,e),r(lt,t,e),s(t,Kp,e),s(t,st,e),s(t,Dp,e),s(t,nt,e),s(t,Op,e),s(t,pt,e),s(t,ti,e),r(it,t,e),s(t,ei,e),s(t,at,e),s(t,li,e),s(t,mt,e),s(t,si,e),r(ft,t,e),s(t,ni,e),s(t,dt,e),s(t,pi,e),s(t,rt,e),s(t,ii,e),r(Mt,t,e),s(t,ai,e),s(t,ot,e),s(t,mi,e),s(t,wt,e),s(t,fi,e),r($t,t,e),s(t,di,e),s(t,yt,e),s(t,ri,e),r(ut,t,e),s(t,Mi,e),s(t,Tt,e),s(t,oi,e),r(ct,t,e),s(t,wi,e),s(t,Jt,e),s(t,$i,e),s(t,jt,e),s(t,yi,e),r(Ct,t,e),s(t,ui,e),r(Ut,t,e),s(t,Ti,e),s(t,bt,e),s(t,ci,e),r(ht,t,e),s(t,Ji,e),r(gt,t,e),s(t,ji,e),s(t,_t,e),s(t,Ci,e),r(vt,t,e),s(t,Ui,e),s(t,It,e),s(t,bi,e),r(Zt,t,e),s(t,hi,e),s(t,xt,e),s(t,gi,e),r(kt,t,e),s(t,_i,e),s(t,Gt,e),s(t,vi,e),r(Ht,t,e),s(t,Ii,e),r(Xt,t,e),s(t,Zi,e),s(t,Bt,e),s(t,xi,e),r(Vt,t,e),s(t,ki,e),s(t,Rt,e),s(t,Gi,e),r(zt,t,e),s(t,Hi,e),s(t,Nt,e),s(t,Xi,e),s(t,Lt,e),s(t,Bi,e),r(Wt,t,e),s(t,Vi,e),s(t,St,e),s(t,Ri,e),r(Qt,t,e),s(t,zi,e),s(t,Ft,e),s(t,Ni,e),s(t,Pt,e),s(t,Li,e),r(Et,t,e),s(t,Wi,e),s(t,At,e),s(t,Si,e),r(Yt,t,e),s(t,Qi,e),r(qt,t,e),s(t,Fi,e),s(t,Kt,e),s(t,Pi,e),r(Dt,t,e),s(t,Ei,e),r(Ot,t,e),s(t,Ai,e),s(t,te,e),s(t,Yi,e),s(t,ee,e),s(t,qi,e),s(t,le,e),s(t,Ki,e),r(se,t,e),s(t,Di,e),s(t,ne,e),s(t,Oi,e),r(pe,t,e),s(t,ta,e),s(t,ie,e),s(t,ea,e),r(ae,t,e),s(t,la,e),s(t,me,e),s(t,sa,e),r(fe,t,e),s(t,na,e),r(C,t,e),s(t,pa,e),r(U,t,e),s(t,ia,e),r(de,t,e),s(t,aa,e),r(re,t,e),s(t,ma,e),s(t,Me,e),s(t,fa,e),s(t,oe,e),s(t,da,e),r(we,t,e),s(t,ra,e),s(t,$e,e),s(t,Ma,e),r(ye,t,e),s(t,oa,e),s(t,ue,e),s(t,wa,e),r(Te,t,e),s(t,$a,e),s(t,ce,e),s(t,ya,e),r(Je,t,e),s(t,ua,e),s(t,je,e),s(t,Ta,e),s(t,Ce,e),s(t,ca,e),r(Ue,t,e),s(t,Ja,e),r(be,t,e),s(t,ja,e),s(t,he,e),s(t,Ca,e),r(ge,t,e),s(t,Ua,e),s(t,_e,e),s(t,ba,e),r(ve,t,e),s(t,ha,e),s(t,Ie,e),s(t,ga,e),r(Ze,t,e),s(t,_a,e),s(t,xe,e),s(t,va,e),r(ke,t,e),s(t,Ia,e),r(Ge,t,e),s(t,Za,e),s(t,He,e),s(t,xa,e),r(Xe,t,e),s(t,ka,e),r(Be,t,e),s(t,Ga,e),r(Ve,t,e),s(t,Ha,e),s(t,Re,e),s(t,Xa,e),r(ze,t,e),s(t,Ba,e),s(t,Ne,e),s(t,Va,e),r(Le,t,e),s(t,Ra,e),s(t,We,e),s(t,za,e),s(t,Se,e),s(t,Na,e),s(t,Qe,e),s(t,La,e),s(t,Fe,e),s(t,Wa,e),s(t,Pe,e),s(t,Sa,e),s(t,Ee,e),s(t,Qa,e),r(Ae,t,e),s(t,Fa,e),s(t,Ye,e),s(t,Pa,e),r(qe,t,e),s(t,Ea,e),s(t,Ke,e),s(t,Aa,e),r(De,t,e),s(t,Ya,e),s(t,Oe,e),s(t,qa,e),r(tl,t,e),s(t,Ka,e),s(t,el,e),s(t,Da,e),s(t,ll,e),s(t,Oa,e),s(t,sl,e),s(t,tm,e),r(nl,t,e),s(t,em,e),r(pl,t,e),s(t,lm,e),s(t,il,e),s(t,sm,e),r(al,t,e),s(t,nm,e),s(t,ml,e),s(t,pm,e),s(t,fl,e),s(t,im,e),r(dl,t,e),s(t,am,e),r(rl,t,e),s(t,mm,e),s(t,Ml,e),s(t,fm,e),s(t,ol,e),s(t,dm,e),s(t,wl,e),s(t,rm,e),s(t,$l,e),s(t,Mm,e),s(t,yl,e),s(t,om,e),r(ul,t,e),s(t,wm,e),r(Tl,t,e),s(t,$m,e),s(t,cl,e),s(t,ym,e),s(t,Jl,e),s(t,um,e),s(t,jl,e),s(t,Tm,e),r(Cl,t,e),s(t,cm,e),s(t,Ul,e),s(t,Jm,e),r(bl,t,e),s(t,jm,e),r(hl,t,e),s(t,Cm,e),s(t,gl,e),s(t,Um,e),r(_l,t,e),s(t,bm,e),r(vl,t,e),s(t,hm,e),s(t,Il,e),s(t,gm,e),r(Zl,t,e),s(t,_m,e),s(t,xl,e),s(t,vm,e),s(t,kl,e),s(t,Im,e),r(Gl,t,e),s(t,Zm,e),r(Hl,t,e),s(t,xm,e),s(t,Xl,e),s(t,km,e),s(t,Bl,e),s(t,Gm,e),r(Vl,t,e),s(t,Hm,e),s(t,Rl,e),s(t,Xm,e),r(zl,t,e),s(t,Bm,e),s(t,Nl,e),s(t,Vm,e),s(t,Ll,e),s(t,Rm,e),r(Wl,t,e),s(t,zm,e),s(t,Sl,e),s(t,Nm,e),r(Ql,t,e),s(t,Lm,e),s(t,Fl,e),s(t,Wm,e),r(Pl,t,e),s(t,Sm,e),s(t,El,e),s(t,Qm,e),r(Al,t,e),s(t,Fm,e),s(t,Yl,e),s(t,Pm,e),r(ql,t,e),s(t,Em,e),s(t,Kl,e),s(t,Am,e),s(t,Dl,e),s(t,Ym,e),s(t,Ol,e),s(t,qm,e),r(ts,t,e),s(t,Km,e),s(t,es,e),s(t,Dm,e),r(ls,t,e),s(t,Om,e),s(t,ss,e),s(t,tf,e),r(ns,t,e),s(t,ef,e),s(t,ps,e),s(t,lf,e),r(is,t,e),s(t,sf,e),s(t,as,e),s(t,nf,e),r(ms,t,e),s(t,pf,e),s(t,fs,e),s(t,af,e),s(t,ds,e),s(t,mf,e),s(t,rs,e),s(t,ff,e),r(Ms,t,e),s(t,df,e),s(t,os,e),s(t,rf,e),r(ws,t,e),s(t,Mf,e),r($s,t,e),s(t,of,e),s(t,ys,e),s(t,wf,e),s(t,us,e),s(t,$f,e),s(t,Ts,e),s(t,yf,e),s(t,cs,e),s(t,uf,e),r(Js,t,e),s(t,Tf,e),s(t,js,e),s(t,cf,e),s(t,Cs,e),s(t,Jf,e),r(Us,t,e),s(t,jf,e),s(t,bs,e),s(t,Cf,e),s(t,hs,e),s(t,Uf,e),r(gs,t,e),s(t,bf,e),s(t,_s,e),s(t,hf,e),s(t,vs,e),s(t,gf,e),r(b,t,e),s(t,_f,e),r(h,t,e),s(t,vf,e),r(Is,t,e),s(t,If,e),s(t,Zs,e),s(t,Zf,e),r(xs,t,e),s(t,xf,e),r(ks,t,e),s(t,kf,e),s(t,Gs,e),s(t,Gf,e),s(t,Hs,e),s(t,Hf,e),s(t,Xs,e),s(t,Xf,e),s(t,Bs,e),s(t,Bf,e),r(Vs,t,e),s(t,Vf,e),s(t,Rs,e),s(t,Rf,e),r(zs,t,e),s(t,zf,e),s(t,Ns,e),s(t,Nf,e),r(Ls,t,e),s(t,Lf,e),s(t,Ws,e),s(t,Wf,e),r(Ss,t,e),s(t,Sf,e),s(t,Qs,e),s(t,Qf,e),r(Fs,t,e),s(t,Ff,e),s(t,Ps,e),s(t,Pf,e),r(Es,t,e),s(t,Ef,e),s(t,As,e),s(t,Af,e),r(Ys,t,e),s(t,Yf,e),s(t,qs,e),s(t,qf,e),r(Ks,t,e),s(t,Kf,e),s(t,Ds,e),s(t,Df,e),r(Os,t,e),s(t,Of,e),s(t,tn,e),s(t,td,e),r(en,t,e),s(t,ed,e),s(t,ln,e),s(t,ld,e),r(sn,t,e),s(t,sd,e),s(t,nn,e),s(t,nd,e),r(pn,t,e),s(t,pd,e),s(t,an,e),s(t,id,e),r(mn,t,e),s(t,ad,e),s(t,fn,e),s(t,md,e),r(dn,t,e),s(t,fd,e),s(t,rn,e),s(t,dd,e),r(Mn,t,e),s(t,rd,e),s(t,on,e),s(t,Md,e),s(t,wn,e),s(t,od,e),s(t,$n,e),s(t,wd,e),s(t,yn,e),s(t,$d,e),r(un,t,e),s(t,yd,e),s(t,Tn,e),s(t,ud,e),s(t,cn,e),s(t,Td,e),s(t,Jn,e),s(t,cd,e),r(jn,t,e),s(t,Jd,e),s(t,Cn,e),s(t,jd,e),r(Un,t,e),s(t,Cd,e),s(t,bn,e),s(t,Ud,e),r(hn,t,e),s(t,bd,e),s(t,gn,e),s(t,hd,e),r(_n,t,e),s(t,gd,e),s(t,vn,e),s(t,_d,e),s(t,In,e),s(t,vd,e),r(Zn,t,e),s(t,Id,e),s(t,xn,e),s(t,Zd,e),r(kn,t,e),s(t,xd,e),s(t,Gn,e),s(t,kd,e),r(Hn,t,e),s(t,Gd,e),s(t,Xn,e),s(t,Hd,e),r(Bn,t,e),s(t,Xd,e),s(t,Vn,e),s(t,Bd,e),r(Rn,t,e),s(t,Vd,e),s(t,zn,e),s(t,Rd,e),r(Nn,t,e),s(t,zd,e),r(Ln,t,e),s(t,Nd,e),s(t,Wn,e),s(t,Ld,e),r(Sn,t,e),s(t,Wd,e),s(t,Qn,e),s(t,Sd,e),r(Fn,t,e),s(t,Qd,e),s(t,Pn,e),s(t,Fd,e),s(t,En,e),s(t,Pd,e),r(An,t,e),s(t,Ed,e),s(t,Yn,e),s(t,Ad,e),r(qn,t,e),s(t,Yd,e),r(Kn,t,e),s(t,qd,e),s(t,Dn,e),s(t,Kd,e),r(On,t,e),s(t,Dd,e),r(tp,t,e),s(t,Od,e),s(t,ep,e),s(t,tr,e),s(t,lp,e),s(t,er,e),r(sp,t,e),s(t,lr,e),s(t,np,e),s(t,sr,e),s(t,pp,e),s(t,nr,e),s(t,ip,e),s(t,pr,e),s(t,ap,e),s(t,ir,e),s(t,mp,e),s(t,ar,e),s(t,fp,e),s(t,mr,e),s(t,dp,e),s(t,fr,e),s(t,rp,e),s(t,dr,e),r(Mp,t,e),s(t,rr,e),s(t,op,e),s(t,Mr,e),r(wp,t,e),s(t,or,e),s(t,$p,e),s(t,wr,e),s(t,yp,e),s(t,$r,e),s(t,up,e),s(t,yr,e),s(t,Tp,e),s(t,ur,e),r(cp,t,e),s(t,Tr,e),s(t,Jp,e),cr=!0},p(t,[e]){const zw={};e&2&&(zw.$$scope={dirty:e,ctx:t}),C.$set(zw);const Nw={};e&2&&(Nw.$$scope={dirty:e,ctx:t}),U.$set(Nw);const Lw={};e&2&&(Lw.$$scope={dirty:e,ctx:t}),b.$set(Lw);const Ww={};e&2&&(Ww.$$scope={dirty:e,ctx:t}),h.$set(Ww)},i(t){cr||(M(g.$$.fragment,t),M(Z.$$.fragment,t),M(k.$$.fragment,t),M(H.$$.fragment,t),M(X.$$.fragment,t),M(z.$$.fragment,t),M(L.$$.fragment,t),M(S.$$.fragment,t),M(P.$$.fragment,t),M(A.$$.fragment,t),M(q.$$.fragment,t),M(K.$$.fragment,t),M(O.$$.fragment,t),M(tt.$$.fragment,t),M(lt.$$.fragment,t),M(it.$$.fragment,t),M(ft.$$.fragment,t),M(Mt.$$.fragment,t),M($t.$$.fragment,t),M(ut.$$.fragment,t),M(ct.$$.fragment,t),M(Ct.$$.fragment,t),M(Ut.$$.fragment,t),M(ht.$$.fragment,t),M(gt.$$.fragment,t),M(vt.$$.fragment,t),M(Zt.$$.fragment,t),M(kt.$$.fragment,t),M(Ht.$$.fragment,t),M(Xt.$$.fragment,t),M(Vt.$$.fragment,t),M(zt.$$.fragment,t),M(Wt.$$.fragment,t),M(Qt.$$.fragment,t),M(Et.$$.fragment,t),M(Yt.$$.fragment,t),M(qt.$$.fragment,t),M(Dt.$$.fragment,t),M(Ot.$$.fragment,t),M(se.$$.fragment,t),M(pe.$$.fragment,t),M(ae.$$.fragment,t),M(fe.$$.fragment,t),M(C.$$.fragment,t),M(U.$$.fragment,t),M(de.$$.fragment,t),M(re.$$.fragment,t),M(we.$$.fragment,t),M(ye.$$.fragment,t),M(Te.$$.fragment,t),M(Je.$$.fragment,t),M(Ue.$$.fragment,t),M(be.$$.fragment,t),M(ge.$$.fragment,t),M(ve.$$.fragment,t),M(Ze.$$.fragment,t),M(ke.$$.fragment,t),M(Ge.$$.fragment,t),M(Xe.$$.fragment,t),M(Be.$$.fragment,t),M(Ve.$$.fragment,t),M(ze.$$.fragment,t),M(Le.$$.fragment,t),M(Ae.$$.fragment,t),M(qe.$$.fragment,t),M(De.$$.fragment,t),M(tl.$$.fragment,t),M(nl.$$.fragment,t),M(pl.$$.fragment,t),M(al.$$.fragment,t),M(dl.$$.fragment,t),M(rl.$$.fragment,t),M(ul.$$.fragment,t),M(Tl.$$.fragment,t),M(Cl.$$.fragment,t),M(bl.$$.fragment,t),M(hl.$$.fragment,t),M(_l.$$.fragment,t),M(vl.$$.fragment,t),M(Zl.$$.fragment,t),M(Gl.$$.fragment,t),M(Hl.$$.fragment,t),M(Vl.$$.fragment,t),M(zl.$$.fragment,t),M(Wl.$$.fragment,t),M(Ql.$$.fragment,t),M(Pl.$$.fragment,t),M(Al.$$.fragment,t),M(ql.$$.fragment,t),M(ts.$$.fragment,t),M(ls.$$.fragment,t),M(ns.$$.fragment,t),M(is.$$.fragment,t),M(ms.$$.fragment,t),M(Ms.$$.fragment,t),M(ws.$$.fragment,t),M($s.$$.fragment,t),M(Js.$$.fragment,t),M(Us.$$.fragment,t),M(gs.$$.fragment,t),M(b.$$.fragment,t),M(h.$$.fragment,t),M(Is.$$.fragment,t),M(xs.$$.fragment,t),M(ks.$$.fragment,t),M(Vs.$$.fragment,t),M(zs.$$.fragment,t),M(Ls.$$.fragment,t),M(Ss.$$.fragment,t),M(Fs.$$.fragment,t),M(Es.$$.fragment,t),M(Ys.$$.fragment,t),M(Ks.$$.fragment,t),M(Os.$$.fragment,t),M(en.$$.fragment,t),M(sn.$$.fragment,t),M(pn.$$.fragment,t),M(mn.$$.fragment,t),M(dn.$$.fragment,t),M(Mn.$$.fragment,t),M(un.$$.fragment,t),M(jn.$$.fragment,t),M(Un.$$.fragment,t),M(hn.$$.fragment,t),M(_n.$$.fragment,t),M(Zn.$$.fragment,t),M(kn.$$.fragment,t),M(Hn.$$.fragment,t),M(Bn.$$.fragment,t),M(Rn.$$.fragment,t),M(Nn.$$.fragment,t),M(Ln.$$.fragment,t),M(Sn.$$.fragment,t),M(Fn.$$.fragment,t),M(An.$$.fragment,t),M(qn.$$.fragment,t),M(Kn.$$.fragment,t),M(On.$$.fragment,t),M(tp.$$.fragment,t),M(sp.$$.fragment,t),M(Mp.$$.fragment,t),M(wp.$$.fragment,t),M(cp.$$.fragment,t),cr=!0)},o(t){o(g.$$.fragment,t),o(Z.$$.fragment,t),o(k.$$.fragment,t),o(H.$$.fragment,t),o(X.$$.fragment,t),o(z.$$.fragment,t),o(L.$$.fragment,t),o(S.$$.fragment,t),o(P.$$.fragment,t),o(A.$$.fragment,t),o(q.$$.fragment,t),o(K.$$.fragment,t),o(O.$$.fragment,t),o(tt.$$.fragment,t),o(lt.$$.fragment,t),o(it.$$.fragment,t),o(ft.$$.fragment,t),o(Mt.$$.fragment,t),o($t.$$.fragment,t),o(ut.$$.fragment,t),o(ct.$$.fragment,t),o(Ct.$$.fragment,t),o(Ut.$$.fragment,t),o(ht.$$.fragment,t),o(gt.$$.fragment,t),o(vt.$$.fragment,t),o(Zt.$$.fragment,t),o(kt.$$.fragment,t),o(Ht.$$.fragment,t),o(Xt.$$.fragment,t),o(Vt.$$.fragment,t),o(zt.$$.fragment,t),o(Wt.$$.fragment,t),o(Qt.$$.fragment,t),o(Et.$$.fragment,t),o(Yt.$$.fragment,t),o(qt.$$.fragment,t),o(Dt.$$.fragment,t),o(Ot.$$.fragment,t),o(se.$$.fragment,t),o(pe.$$.fragment,t),o(ae.$$.fragment,t),o(fe.$$.fragment,t),o(C.$$.fragment,t),o(U.$$.fragment,t),o(de.$$.fragment,t),o(re.$$.fragment,t),o(we.$$.fragment,t),o(ye.$$.fragment,t),o(Te.$$.fragment,t),o(Je.$$.fragment,t),o(Ue.$$.fragment,t),o(be.$$.fragment,t),o(ge.$$.fragment,t),o(ve.$$.fragment,t),o(Ze.$$.fragment,t),o(ke.$$.fragment,t),o(Ge.$$.fragment,t),o(Xe.$$.fragment,t),o(Be.$$.fragment,t),o(Ve.$$.fragment,t),o(ze.$$.fragment,t),o(Le.$$.fragment,t),o(Ae.$$.fragment,t),o(qe.$$.fragment,t),o(De.$$.fragment,t),o(tl.$$.fragment,t),o(nl.$$.fragment,t),o(pl.$$.fragment,t),o(al.$$.fragment,t),o(dl.$$.fragment,t),o(rl.$$.fragment,t),o(ul.$$.fragment,t),o(Tl.$$.fragment,t),o(Cl.$$.fragment,t),o(bl.$$.fragment,t),o(hl.$$.fragment,t),o(_l.$$.fragment,t),o(vl.$$.fragment,t),o(Zl.$$.fragment,t),o(Gl.$$.fragment,t),o(Hl.$$.fragment,t),o(Vl.$$.fragment,t),o(zl.$$.fragment,t),o(Wl.$$.fragment,t),o(Ql.$$.fragment,t),o(Pl.$$.fragment,t),o(Al.$$.fragment,t),o(ql.$$.fragment,t),o(ts.$$.fragment,t),o(ls.$$.fragment,t),o(ns.$$.fragment,t),o(is.$$.fragment,t),o(ms.$$.fragment,t),o(Ms.$$.fragment,t),o(ws.$$.fragment,t),o($s.$$.fragment,t),o(Js.$$.fragment,t),o(Us.$$.fragment,t),o(gs.$$.fragment,t),o(b.$$.fragment,t),o(h.$$.fragment,t),o(Is.$$.fragment,t),o(xs.$$.fragment,t),o(ks.$$.fragment,t),o(Vs.$$.fragment,t),o(zs.$$.fragment,t),o(Ls.$$.fragment,t),o(Ss.$$.fragment,t),o(Fs.$$.fragment,t),o(Es.$$.fragment,t),o(Ys.$$.fragment,t),o(Ks.$$.fragment,t),o(Os.$$.fragment,t),o(en.$$.fragment,t),o(sn.$$.fragment,t),o(pn.$$.fragment,t),o(mn.$$.fragment,t),o(dn.$$.fragment,t),o(Mn.$$.fragment,t),o(un.$$.fragment,t),o(jn.$$.fragment,t),o(Un.$$.fragment,t),o(hn.$$.fragment,t),o(_n.$$.fragment,t),o(Zn.$$.fragment,t),o(kn.$$.fragment,t),o(Hn.$$.fragment,t),o(Bn.$$.fragment,t),o(Rn.$$.fragment,t),o(Nn.$$.fragment,t),o(Ln.$$.fragment,t),o(Sn.$$.fragment,t),o(Fn.$$.fragment,t),o(An.$$.fragment,t),o(qn.$$.fragment,t),o(Kn.$$.fragment,t),o(On.$$.fragment,t),o(tp.$$.fragment,t),o(sp.$$.fragment,t),o(Mp.$$.fragment,t),o(wp.$$.fragment,t),o(cp.$$.fragment,t),cr=!1},d(t){t&&(l(c),l(T),l(J),l(jp),l(_),l(Cp),l(v),l(Up),l(I),l(bp),l(hp),l(x),l(gp),l(_p),l(G),l(vp),l(Ip),l(Zp),l(B),l(xp),l(V),l(kp),l(R),l(Gp),l(Hp),l(N),l(Xp),l(Bp),l(W),l(Vp),l(Rp),l(Q),l(zp),l(F),l(Np),l(Lp),l(E),l(Wp),l(Sp),l(Y),l(Qp),l(Fp),l(Pp),l(D),l(Ep),l(Ap),l(Yp),l(et),l(qp),l(Kp),l(st),l(Dp),l(nt),l(Op),l(pt),l(ti),l(ei),l(at),l(li),l(mt),l(si),l(ni),l(dt),l(pi),l(rt),l(ii),l(ai),l(ot),l(mi),l(wt),l(fi),l(di),l(yt),l(ri),l(Mi),l(Tt),l(oi),l(wi),l(Jt),l($i),l(jt),l(yi),l(ui),l(Ti),l(bt),l(ci),l(Ji),l(ji),l(_t),l(Ci),l(Ui),l(It),l(bi),l(hi),l(xt),l(gi),l(_i),l(Gt),l(vi),l(Ii),l(Zi),l(Bt),l(xi),l(ki),l(Rt),l(Gi),l(Hi),l(Nt),l(Xi),l(Lt),l(Bi),l(Vi),l(St),l(Ri),l(zi),l(Ft),l(Ni),l(Pt),l(Li),l(Wi),l(At),l(Si),l(Qi),l(Fi),l(Kt),l(Pi),l(Ei),l(Ai),l(te),l(Yi),l(ee),l(qi),l(le),l(Ki),l(Di),l(ne),l(Oi),l(ta),l(ie),l(ea),l(la),l(me),l(sa),l(na),l(pa),l(ia),l(aa),l(ma),l(Me),l(fa),l(oe),l(da),l(ra),l($e),l(Ma),l(oa),l(ue),l(wa),l($a),l(ce),l(ya),l(ua),l(je),l(Ta),l(Ce),l(ca),l(Ja),l(ja),l(he),l(Ca),l(Ua),l(_e),l(ba),l(ha),l(Ie),l(ga),l(_a),l(xe),l(va),l(Ia),l(Za),l(He),l(xa),l(ka),l(Ga),l(Ha),l(Re),l(Xa),l(Ba),l(Ne),l(Va),l(Ra),l(We),l(za),l(Se),l(Na),l(Qe),l(La),l(Fe),l(Wa),l(Pe),l(Sa),l(Ee),l(Qa),l(Fa),l(Ye),l(Pa),l(Ea),l(Ke),l(Aa),l(Ya),l(Oe),l(qa),l(Ka),l(el),l(Da),l(ll),l(Oa),l(sl),l(tm),l(em),l(lm),l(il),l(sm),l(nm),l(ml),l(pm),l(fl),l(im),l(am),l(mm),l(Ml),l(fm),l(ol),l(dm),l(wl),l(rm),l($l),l(Mm),l(yl),l(om),l(wm),l($m),l(cl),l(ym),l(Jl),l(um),l(jl),l(Tm),l(cm),l(Ul),l(Jm),l(jm),l(Cm),l(gl),l(Um),l(bm),l(hm),l(Il),l(gm),l(_m),l(xl),l(vm),l(kl),l(Im),l(Zm),l(xm),l(Xl),l(km),l(Bl),l(Gm),l(Hm),l(Rl),l(Xm),l(Bm),l(Nl),l(Vm),l(Ll),l(Rm),l(zm),l(Sl),l(Nm),l(Lm),l(Fl),l(Wm),l(Sm),l(El),l(Qm),l(Fm),l(Yl),l(Pm),l(Em),l(Kl),l(Am),l(Dl),l(Ym),l(Ol),l(qm),l(Km),l(es),l(Dm),l(Om),l(ss),l(tf),l(ef),l(ps),l(lf),l(sf),l(as),l(nf),l(pf),l(fs),l(af),l(ds),l(mf),l(rs),l(ff),l(df),l(os),l(rf),l(Mf),l(of),l(ys),l(wf),l(us),l($f),l(Ts),l(yf),l(cs),l(uf),l(Tf),l(js),l(cf),l(Cs),l(Jf),l(jf),l(bs),l(Cf),l(hs),l(Uf),l(bf),l(_s),l(hf),l(vs),l(gf),l(_f),l(vf),l(If),l(Zs),l(Zf),l(xf),l(kf),l(Gs),l(Gf),l(Hs),l(Hf),l(Xs),l(Xf),l(Bs),l(Bf),l(Vf),l(Rs),l(Rf),l(zf),l(Ns),l(Nf),l(Lf),l(Ws),l(Wf),l(Sf),l(Qs),l(Qf),l(Ff),l(Ps),l(Pf),l(Ef),l(As),l(Af),l(Yf),l(qs),l(qf),l(Kf),l(Ds),l(Df),l(Of),l(tn),l(td),l(ed),l(ln),l(ld),l(sd),l(nn),l(nd),l(pd),l(an),l(id),l(ad),l(fn),l(md),l(fd),l(rn),l(dd),l(rd),l(on),l(Md),l(wn),l(od),l($n),l(wd),l(yn),l($d),l(yd),l(Tn),l(ud),l(cn),l(Td),l(Jn),l(cd),l(Jd),l(Cn),l(jd),l(Cd),l(bn),l(Ud),l(bd),l(gn),l(hd),l(gd),l(vn),l(_d),l(In),l(vd),l(Id),l(xn),l(Zd),l(xd),l(Gn),l(kd),l(Gd),l(Xn),l(Hd),l(Xd),l(Vn),l(Bd),l(Vd),l(zn),l(Rd),l(zd),l(Nd),l(Wn),l(Ld),l(Wd),l(Qn),l(Sd),l(Qd),l(Pn),l(Fd),l(En),l(Pd),l(Ed),l(Yn),l(Ad),l(Yd),l(qd),l(Dn),l(Kd),l(Dd),l(Od),l(ep),l(tr),l(lp),l(er),l(lr),l(np),l(sr),l(pp),l(nr),l(ip),l(pr),l(ap),l(ir),l(mp),l(ar),l(fp),l(mr),l(dp),l(fr),l(rp),l(dr),l(rr),l(op),l(Mr),l(or),l($p),l(wr),l(yp),l($r),l(up),l(yr),l(Tp),l(ur),l(Tr),l(Jp)),l(u),w(g,t),w(Z,t),w(k,t),w(H,t),w(X,t),w(z,t),w(L,t),w(S,t),w(P,t),w(A,t),w(q,t),w(K,t),w(O,t),w(tt,t),w(lt,t),w(it,t),w(ft,t),w(Mt,t),w($t,t),w(ut,t),w(ct,t),w(Ct,t),w(Ut,t),w(ht,t),w(gt,t),w(vt,t),w(Zt,t),w(kt,t),w(Ht,t),w(Xt,t),w(Vt,t),w(zt,t),w(Wt,t),w(Qt,t),w(Et,t),w(Yt,t),w(qt,t),w(Dt,t),w(Ot,t),w(se,t),w(pe,t),w(ae,t),w(fe,t),w(C,t),w(U,t),w(de,t),w(re,t),w(we,t),w(ye,t),w(Te,t),w(Je,t),w(Ue,t),w(be,t),w(ge,t),w(ve,t),w(Ze,t),w(ke,t),w(Ge,t),w(Xe,t),w(Be,t),w(Ve,t),w(ze,t),w(Le,t),w(Ae,t),w(qe,t),w(De,t),w(tl,t),w(nl,t),w(pl,t),w(al,t),w(dl,t),w(rl,t),w(ul,t),w(Tl,t),w(Cl,t),w(bl,t),w(hl,t),w(_l,t),w(vl,t),w(Zl,t),w(Gl,t),w(Hl,t),w(Vl,t),w(zl,t),w(Wl,t),w(Ql,t),w(Pl,t),w(Al,t),w(ql,t),w(ts,t),w(ls,t),w(ns,t),w(is,t),w(ms,t),w(Ms,t),w(ws,t),w($s,t),w(Js,t),w(Us,t),w(gs,t),w(b,t),w(h,t),w(Is,t),w(xs,t),w(ks,t),w(Vs,t),w(zs,t),w(Ls,t),w(Ss,t),w(Fs,t),w(Es,t),w(Ys,t),w(Ks,t),w(Os,t),w(en,t),w(sn,t),w(pn,t),w(mn,t),w(dn,t),w(Mn,t),w(un,t),w(jn,t),w(Un,t),w(hn,t),w(_n,t),w(Zn,t),w(kn,t),w(Hn,t),w(Bn,t),w(Rn,t),w(Nn,t),w(Ln,t),w(Sn,t),w(Fn,t),w(An,t),w(qn,t),w(Kn,t),w(On,t),w(tp,t),w(sp,t),w(Mp,t),w(wp,t),w(cp,t)}}}const s$='{"title":"Testing","local":"testing","sections":[{"title":"How transformers are tested","local":"how-transformers-are-tested","sections":[],"depth":2},{"title":"Running tests","local":"running-tests","sections":[{"title":"Choosing which tests to run","local":"choosing-which-tests-to-run","sections":[],"depth":3},{"title":"Getting the list of all tests","local":"getting-the-list-of-all-tests","sections":[],"depth":3},{"title":"Run a specific test module","local":"run-a-specific-test-module","sections":[],"depth":3},{"title":"Run specific tests","local":"run-specific-tests","sections":[],"depth":3},{"title":"Run accelerate tests","local":"run-accelerate-tests","sections":[],"depth":3},{"title":"Run documentation tests","local":"run-documentation-tests","sections":[],"depth":3},{"title":"Run only modified tests","local":"run-only-modified-tests","sections":[],"depth":3},{"title":"Automatically rerun failed tests on source modification","local":"automatically-rerun-failed-tests-on-source-modification","sections":[],"depth":3},{"title":"Skip a test module","local":"skip-a-test-module","sections":[],"depth":3},{"title":"Clearing state","local":"clearing-state","sections":[],"depth":3},{"title":"Running tests in parallel","local":"running-tests-in-parallel","sections":[],"depth":3},{"title":"Test order and repetition","local":"test-order-and-repetition","sections":[{"title":"Repeat tests","local":"repeat-tests","sections":[],"depth":4},{"title":"Run tests in a random order","local":"run-tests-in-a-random-order","sections":[],"depth":4}],"depth":3},{"title":"Look and feel variations","local":"look-and-feel-variations","sections":[{"title":"pytest-sugar","local":"pytest-sugar","sections":[],"depth":4},{"title":"Report each sub-test name and its progress","local":"report-each-sub-test-name-and-its-progress","sections":[],"depth":4},{"title":"Instantly shows failed tests","local":"instantly-shows-failed-tests","sections":[],"depth":4}],"depth":3},{"title":"To GPU or not to GPU","local":"to-gpu-or-not-to-gpu","sections":[],"depth":3},{"title":"Testing with a specific PyTorch backend or device","local":"testing-with-a-specific-pytorch-backend-or-device","sections":[],"depth":3},{"title":"Distributed training","local":"distributed-training","sections":[],"depth":3},{"title":"Output capture","local":"output-capture","sections":[],"depth":3},{"title":"Color control","local":"color-control","sections":[],"depth":3},{"title":"Sending test report to online pastebin service","local":"sending-test-report-to-online-pastebin-service","sections":[],"depth":3}],"depth":2},{"title":"Writing tests","local":"writing-tests","sections":[{"title":"Parametrization","local":"parametrization","sections":[],"depth":3},{"title":"Files and directories","local":"files-and-directories","sections":[],"depth":3},{"title":"Temporary files and directories","local":"temporary-files-and-directories","sections":[],"depth":3},{"title":"Temporary sys.path override","local":"temporary-syspath-override","sections":[],"depth":3},{"title":"Skipping tests","local":"skipping-tests","sections":[{"title":"Implementation","local":"implementation","sections":[],"depth":4}],"depth":3},{"title":"Slow tests","local":"slow-tests","sections":[],"depth":3},{"title":"Testing the stdout/stderr output","local":"testing-the-stdoutstderr-output","sections":[],"depth":3},{"title":"Capturing logger stream","local":"capturing-logger-stream","sections":[],"depth":3},{"title":"Testing with environment variables","local":"testing-with-environment-variables","sections":[],"depth":3},{"title":"Getting reproducible results","local":"getting-reproducible-results","sections":[],"depth":3},{"title":"Debugging tests","local":"debugging-tests","sections":[],"depth":3}],"depth":2},{"title":"Working with github actions workflows","local":"working-with-github-actions-workflows","sections":[],"depth":2},{"title":"Testing Experimental CI Features","local":"testing-experimental-ci-features","sections":[],"depth":2}],"depth":1}';function n$(j){return Pw(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class d$ extends Ew{constructor(u){super(),Aw(this,u,n$,l$,Fw,{})}}export{d$ as component}; | |
Xet Storage Details
- Size:
- 147 kB
- Xet hash:
- a7d988da35be5a07c8fc2c6a8a0d7cbbbc7713080366a075fa309baf872f2ded
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.