run-test.sh 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575
  1. #!/usr/bin/env bash
  2. set -e
  3. log() {
  4. # This function is from espnet
  5. local fname=${BASH_SOURCE[1]##*/}
  6. echo -e "$(date '+%Y-%m-%d %H:%M:%S') (${fname}:${BASH_LINENO[0]}:${FUNCNAME[1]}) $*"
  7. }
  8. echo "EXE is $EXE"
  9. echo "PATH: $PATH"
  10. which $EXE
  11. log "------------------------------------------------------------"
  12. log "Run Zipformer transducer (English, small model 20M)"
  13. log "------------------------------------------------------------"
  14. repo_url=https://huggingface.co/marcoyang/sherpa-ncnn-streaming-zipformer-20M-2023-02-17
  15. log "Start testing ${repo_url}"
  16. repo=$(basename $repo_url)
  17. log "Download pretrained model and test-data from $repo_url"
  18. GIT_LFS_SKIP_SMUDGE=1 git clone $repo_url
  19. pushd $repo
  20. git lfs pull --include "*.bin"
  21. waves=(
  22. $repo/test_wavs/0.wav
  23. $repo/test_wavs/1.wav
  24. $repo/test_wavs/2.wav
  25. )
  26. popd
  27. for wave in ${waves[@]}; do
  28. for m in greedy_search modified_beam_search; do
  29. log "----test $m ---"
  30. time $EXE \
  31. $repo/tokens.txt \
  32. $repo/encoder_jit_trace-pnnx.ncnn.param \
  33. $repo/encoder_jit_trace-pnnx.ncnn.bin \
  34. $repo/decoder_jit_trace-pnnx.ncnn.param \
  35. $repo/decoder_jit_trace-pnnx.ncnn.bin \
  36. $repo/joiner_jit_trace-pnnx.ncnn.param \
  37. $repo/joiner_jit_trace-pnnx.ncnn.bin \
  38. $wave \
  39. 4 \
  40. $m
  41. done
  42. done
  43. rm -rf $repo
  44. log "------------------------------------------------------------"
  45. log "Run LSTM transducer (Chinese+English, small model)"
  46. log "------------------------------------------------------------"
  47. repo_url=https://huggingface.co/marcoyang/sherpa-ncnn-lstm-transducer-small-2023-02-13
  48. log "Start testing ${repo_url}"
  49. repo=$(basename $repo_url)
  50. log "Download pretrained model and test-data from $repo_url"
  51. GIT_LFS_SKIP_SMUDGE=1 git clone $repo_url
  52. pushd $repo
  53. git lfs pull --include "*.bin"
  54. waves=(
  55. $repo/test_wavs/0.wav
  56. $repo/test_wavs/1.wav
  57. $repo/test_wavs/2.wav
  58. )
  59. popd
  60. for wave in ${waves[@]}; do
  61. for m in greedy_search modified_beam_search; do
  62. log "----test $m ---"
  63. time $EXE \
  64. $repo/tokens.txt \
  65. $repo/encoder_jit_trace-pnnx.ncnn.param \
  66. $repo/encoder_jit_trace-pnnx.ncnn.bin \
  67. $repo/decoder_jit_trace-pnnx.ncnn.param \
  68. $repo/decoder_jit_trace-pnnx.ncnn.bin \
  69. $repo/joiner_jit_trace-pnnx.ncnn.param \
  70. $repo/joiner_jit_trace-pnnx.ncnn.bin \
  71. $wave \
  72. 4 \
  73. $m
  74. done
  75. done
  76. rm -rf $repo
  77. log "------------------------------------------------------------"
  78. log "Run ConvEmformer transducer (Chinese, small model)"
  79. log "------------------------------------------------------------"
  80. repo_url=https://huggingface.co/csukuangfj/sherpa-ncnn-conv-emformer-transducer-2022-12-08
  81. log "Start testing ${repo_url}"
  82. repo=$(basename $repo_url)
  83. log "Download pretrained model and test-data from $repo_url"
  84. GIT_LFS_SKIP_SMUDGE=1 git clone $repo_url
  85. pushd $repo/v2
  86. git lfs pull --include "encoder_jit_trace-pnnx-epoch-15-avg-3.ncnn.bin"
  87. git lfs pull --include "decoder_jit_trace-pnnx-epoch-15-avg-3.ncnn.bin"
  88. git lfs pull --include "joiner_jit_trace-pnnx-epoch-15-avg-3.ncnn.bin"
  89. git lfs pull --include "encoder_jit_trace-pnnx-epoch-15-avg-3.ncnn.int8.bin"
  90. git lfs pull --include "joiner_jit_trace-pnnx-epoch-15-avg-3.ncnn.int8.bin"
  91. popd
  92. waves=(
  93. $repo/test_wavs/0.wav
  94. $repo/test_wavs/1.wav
  95. $repo/test_wavs/2.wav
  96. )
  97. for wave in ${waves[@]}; do
  98. for m in greedy_search modified_beam_search; do
  99. log "----test $m ---"
  100. time $EXE \
  101. $repo/v2/tokens.txt \
  102. $repo/v2/encoder_jit_trace-pnnx-epoch-15-avg-3.ncnn.param \
  103. $repo/v2/encoder_jit_trace-pnnx-epoch-15-avg-3.ncnn.bin \
  104. $repo/v2/decoder_jit_trace-pnnx-epoch-15-avg-3.ncnn.param \
  105. $repo/v2/decoder_jit_trace-pnnx-epoch-15-avg-3.ncnn.bin \
  106. $repo/v2/joiner_jit_trace-pnnx-epoch-15-avg-3.ncnn.param \
  107. $repo/v2/joiner_jit_trace-pnnx-epoch-15-avg-3.ncnn.bin \
  108. $wave \
  109. 4 \
  110. $m
  111. done
  112. done
  113. log "Test int8 models"
  114. for wave in ${waves[@]}; do
  115. for m in greedy_search modified_beam_search; do
  116. log "----test $m ---"
  117. time $EXE \
  118. $repo/v2/tokens.txt \
  119. $repo/v2/encoder_jit_trace-pnnx-epoch-15-avg-3.ncnn.int8.param \
  120. $repo/v2/encoder_jit_trace-pnnx-epoch-15-avg-3.ncnn.int8.bin \
  121. $repo/v2/decoder_jit_trace-pnnx-epoch-15-avg-3.ncnn.param \
  122. $repo/v2/decoder_jit_trace-pnnx-epoch-15-avg-3.ncnn.bin \
  123. $repo/v2/joiner_jit_trace-pnnx-epoch-15-avg-3.ncnn.int8.param \
  124. $repo/v2/joiner_jit_trace-pnnx-epoch-15-avg-3.ncnn.int8.bin \
  125. $wave \
  126. 4 \
  127. $m
  128. done
  129. done
  130. rm -rf $repo
  131. log "------------------------------------------------------------"
  132. log "Run LSTM transducer (Chinese)"
  133. log "------------------------------------------------------------"
  134. repo_url=https://huggingface.co/csukuangfj/sherpa-ncnn-2022-09-30
  135. log "Start testing ${repo_url}"
  136. repo=$(basename $repo_url)
  137. log "Download pretrained model and test-data from $repo_url"
  138. GIT_LFS_SKIP_SMUDGE=1 git clone $repo_url
  139. pushd $repo
  140. git lfs pull --include "*.bin"
  141. popd
  142. waves=(
  143. $repo/test_wavs/0.wav
  144. $repo/test_wavs/1.wav
  145. $repo/test_wavs/2.wav
  146. )
  147. for wave in ${waves[@]}; do
  148. for m in greedy_search modified_beam_search; do
  149. log "----test $m ---"
  150. time $EXE \
  151. $repo/tokens.txt \
  152. $repo/encoder_jit_trace-pnnx.ncnn.param \
  153. $repo/encoder_jit_trace-pnnx.ncnn.bin \
  154. $repo/decoder_jit_trace-pnnx.ncnn.param \
  155. $repo/decoder_jit_trace-pnnx.ncnn.bin \
  156. $repo/joiner_jit_trace-pnnx.ncnn.param \
  157. $repo/joiner_jit_trace-pnnx.ncnn.bin \
  158. $wave \
  159. 4 \
  160. $m
  161. done
  162. done
  163. rm -rf $repo
  164. log "------------------------------------------------------------"
  165. log "Run LSTM transducer (English)"
  166. log "------------------------------------------------------------"
  167. repo_url=https://huggingface.co/csukuangfj/sherpa-ncnn-2022-09-05
  168. log "Start testing ${repo_url}"
  169. repo=$(basename $repo_url)
  170. log "Download pretrained model and test-data from $repo_url"
  171. GIT_LFS_SKIP_SMUDGE=1 git clone $repo_url
  172. pushd $repo
  173. git lfs pull --include "*.bin"
  174. popd
  175. waves=(
  176. $repo/test_wavs/1089-134686-0001.wav
  177. $repo/test_wavs/1221-135766-0001.wav
  178. $repo/test_wavs/1221-135766-0002.wav
  179. )
  180. for wave in ${waves[@]}; do
  181. for m in greedy_search modified_beam_search; do
  182. log "----test $m ---"
  183. time $EXE \
  184. $repo/tokens.txt \
  185. $repo/encoder_jit_trace-pnnx.ncnn.param \
  186. $repo/encoder_jit_trace-pnnx.ncnn.bin \
  187. $repo/decoder_jit_trace-pnnx.ncnn.param \
  188. $repo/decoder_jit_trace-pnnx.ncnn.bin \
  189. $repo/joiner_jit_trace-pnnx.ncnn.param \
  190. $repo/joiner_jit_trace-pnnx.ncnn.bin \
  191. $wave \
  192. 4 \
  193. $m
  194. done
  195. done
  196. rm -rf $repo
  197. log "------------------------------------------------------------"
  198. log "Run ConvEmformer transducer (English)"
  199. log "------------------------------------------------------------"
  200. repo_url=https://huggingface.co/csukuangfj/sherpa-ncnn-conv-emformer-transducer-2022-12-04
  201. log "Start testing ${repo_url}"
  202. repo=$(basename $repo_url)
  203. log "Download pretrained model and test-data from $repo_url"
  204. GIT_LFS_SKIP_SMUDGE=1 git clone $repo_url
  205. pushd $repo
  206. git lfs pull --include "encoder_jit_trace-epoch-30-avg-10-pnnx.ncnn.bin"
  207. git lfs pull --include "decoder_jit_trace-epoch-30-avg-10-pnnx.ncnn.bin"
  208. git lfs pull --include "joiner_jit_trace-epoch-30-avg-10-pnnx.ncnn.bin"
  209. git lfs pull --include "encoder_jit_trace-epoch-30-avg-10-pnnx.ncnn.int8.bin"
  210. git lfs pull --include "joiner_jit_trace-epoch-30-avg-10-pnnx.ncnn.int8.bin"
  211. popd
  212. waves=(
  213. $repo/test_wavs/1089-134686-0001.wav
  214. $repo/test_wavs/1221-135766-0001.wav
  215. $repo/test_wavs/1221-135766-0002.wav
  216. )
  217. for wave in ${waves[@]}; do
  218. for m in greedy_search modified_beam_search; do
  219. log "----test $m ---"
  220. time $EXE \
  221. $repo/tokens.txt \
  222. $repo/encoder_jit_trace-epoch-30-avg-10-pnnx.ncnn.param \
  223. $repo/encoder_jit_trace-epoch-30-avg-10-pnnx.ncnn.bin \
  224. $repo/decoder_jit_trace-epoch-30-avg-10-pnnx.ncnn.param \
  225. $repo/decoder_jit_trace-epoch-30-avg-10-pnnx.ncnn.bin \
  226. $repo/joiner_jit_trace-epoch-30-avg-10-pnnx.ncnn.param \
  227. $repo/joiner_jit_trace-epoch-30-avg-10-pnnx.ncnn.bin \
  228. $wave \
  229. 4 \
  230. $m
  231. done
  232. done
  233. log "Test int8 models"
  234. for wave in ${waves[@]}; do
  235. for m in greedy_search modified_beam_search; do
  236. log "----test $m ---"
  237. time $EXE \
  238. $repo/tokens.txt \
  239. $repo/encoder_jit_trace-epoch-30-avg-10-pnnx.ncnn.int8.param \
  240. $repo/encoder_jit_trace-epoch-30-avg-10-pnnx.ncnn.int8.bin \
  241. $repo/decoder_jit_trace-epoch-30-avg-10-pnnx.ncnn.param \
  242. $repo/decoder_jit_trace-epoch-30-avg-10-pnnx.ncnn.bin \
  243. $repo/joiner_jit_trace-epoch-30-avg-10-pnnx.ncnn.int8.param \
  244. $repo/joiner_jit_trace-epoch-30-avg-10-pnnx.ncnn.int8.bin \
  245. $wave \
  246. 4 \
  247. $m
  248. done
  249. done
  250. rm -rf $repo
  251. log "------------------------------------------------------------"
  252. log "Run ConvEmformer transducer (English + Chinese, mixed model)"
  253. log "------------------------------------------------------------"
  254. repo_url=https://huggingface.co/csukuangfj/sherpa-ncnn-conv-emformer-transducer-2022-12-06
  255. log "Start testing ${repo_url}"
  256. repo=$(basename $repo_url)
  257. log "Download pretrained model and test-data from $repo_url"
  258. GIT_LFS_SKIP_SMUDGE=1 git clone $repo_url
  259. pushd $repo
  260. git lfs pull --include "encoder_jit_trace-pnnx.ncnn.bin"
  261. git lfs pull --include "decoder_jit_trace-pnnx.ncnn.bin"
  262. git lfs pull --include "joiner_jit_trace-pnnx.ncnn.bin"
  263. # for in8 models
  264. git lfs pull --include "encoder_jit_trace-pnnx.ncnn.int8.bin"
  265. git lfs pull --include "joiner_jit_trace-pnnx.ncnn.int8.bin"
  266. popd
  267. waves=(
  268. $repo/test_wavs/0.wav
  269. $repo/test_wavs/1.wav
  270. $repo/test_wavs/2.wav
  271. $repo/test_wavs/3.wav
  272. $repo/test_wavs/4.wav
  273. )
  274. for wave in ${waves[@]}; do
  275. for m in greedy_search modified_beam_search; do
  276. log "----test $m ---"
  277. time $EXE \
  278. $repo/tokens.txt \
  279. $repo/encoder_jit_trace-pnnx.ncnn.param \
  280. $repo/encoder_jit_trace-pnnx.ncnn.bin \
  281. $repo/decoder_jit_trace-pnnx.ncnn.param \
  282. $repo/decoder_jit_trace-pnnx.ncnn.bin \
  283. $repo/joiner_jit_trace-pnnx.ncnn.param \
  284. $repo/joiner_jit_trace-pnnx.ncnn.bin \
  285. $wave \
  286. 4 \
  287. $m
  288. done
  289. done
  290. log "test int8 models"
  291. for wave in ${waves[@]}; do
  292. for m in greedy_search modified_beam_search; do
  293. log "----test $m ---"
  294. time $EXE \
  295. $repo/tokens.txt \
  296. $repo/encoder_jit_trace-pnnx.ncnn.int8.param \
  297. $repo/encoder_jit_trace-pnnx.ncnn.int8.bin \
  298. $repo/decoder_jit_trace-pnnx.ncnn.param \
  299. $repo/decoder_jit_trace-pnnx.ncnn.bin \
  300. $repo/joiner_jit_trace-pnnx.ncnn.int8.param \
  301. $repo/joiner_jit_trace-pnnx.ncnn.int8.bin \
  302. $wave \
  303. 4 \
  304. $m
  305. done
  306. done
  307. rm -rf $repo
  308. log "------------------------------------------------------------"
  309. log "Run Zipformer transducer (English + Chinese, bilingual)"
  310. log "------------------------------------------------------------"
  311. repo_url=https://huggingface.co/csukuangfj/sherpa-ncnn-streaming-zipformer-bilingual-zh-en-2023-02-13
  312. log "Start testing ${repo_url}"
  313. repo=$(basename $repo_url)
  314. log "Download pretrained model and test-data from $repo_url"
  315. GIT_LFS_SKIP_SMUDGE=1 git clone $repo_url
  316. pushd $repo
  317. git lfs pull --include "*.bin"
  318. popd
  319. waves=(
  320. $repo/test_wavs/0.wav
  321. $repo/test_wavs/1.wav
  322. $repo/test_wavs/2.wav
  323. $repo/test_wavs/3.wav
  324. $repo/test_wavs/4.wav
  325. )
  326. for wave in ${waves[@]}; do
  327. for m in greedy_search modified_beam_search; do
  328. log "----test $m ---"
  329. time $EXE \
  330. $repo/tokens.txt \
  331. $repo/encoder_jit_trace-pnnx.ncnn.param \
  332. $repo/encoder_jit_trace-pnnx.ncnn.bin \
  333. $repo/decoder_jit_trace-pnnx.ncnn.param \
  334. $repo/decoder_jit_trace-pnnx.ncnn.bin \
  335. $repo/joiner_jit_trace-pnnx.ncnn.param \
  336. $repo/joiner_jit_trace-pnnx.ncnn.bin \
  337. $wave \
  338. 4 \
  339. $m
  340. done
  341. done
  342. rm -rf $repo
  343. log "------------------------------------------------------------"
  344. log "Run small Zipformer transducer (English + Chinese, bilingual)"
  345. log "------------------------------------------------------------"
  346. repo_url=https://huggingface.co/csukuangfj/sherpa-ncnn-streaming-zipformer-small-bilingual-zh-en-2023-02-16
  347. log "Start testing ${repo_url}"
  348. repo=$(basename $repo_url)
  349. log "Download pretrained model and test-data from $repo_url"
  350. GIT_LFS_SKIP_SMUDGE=1 git clone $repo_url
  351. pushd $repo
  352. git lfs pull --include "*.bin"
  353. popd
  354. waves=(
  355. $repo/test_wavs/0.wav
  356. $repo/test_wavs/1.wav
  357. $repo/test_wavs/2.wav
  358. $repo/test_wavs/3.wav
  359. $repo/test_wavs/4.wav
  360. )
  361. for wave in ${waves[@]}; do
  362. for m in greedy_search modified_beam_search; do
  363. log "----test $m ---"
  364. time $EXE \
  365. $repo/tokens.txt \
  366. $repo/encoder_jit_trace-pnnx.ncnn.param \
  367. $repo/encoder_jit_trace-pnnx.ncnn.bin \
  368. $repo/decoder_jit_trace-pnnx.ncnn.param \
  369. $repo/decoder_jit_trace-pnnx.ncnn.bin \
  370. $repo/joiner_jit_trace-pnnx.ncnn.param \
  371. $repo/joiner_jit_trace-pnnx.ncnn.bin \
  372. $wave \
  373. 4 \
  374. $m
  375. done
  376. done
  377. rm -rf $repo
  378. log "------------------------------------------------------------"
  379. log "Run Zipformer transducer (English)"
  380. log "------------------------------------------------------------"
  381. repo_url=https://huggingface.co/csukuangfj/sherpa-ncnn-streaming-zipformer-en-2023-02-13
  382. log "Start testing ${repo_url}"
  383. repo=$(basename $repo_url)
  384. log "Download pretrained model and test-data from $repo_url"
  385. GIT_LFS_SKIP_SMUDGE=1 git clone $repo_url
  386. pushd $repo
  387. git lfs pull --include "*.bin"
  388. popd
  389. waves=(
  390. $repo/test_wavs/1089-134686-0001.wav
  391. $repo/test_wavs/1221-135766-0001.wav
  392. $repo/test_wavs/1221-135766-0002.wav
  393. )
  394. for wave in ${waves[@]}; do
  395. for m in greedy_search modified_beam_search; do
  396. log "----test $m ---"
  397. time $EXE \
  398. $repo/tokens.txt \
  399. $repo/encoder_jit_trace-pnnx.ncnn.param \
  400. $repo/encoder_jit_trace-pnnx.ncnn.bin \
  401. $repo/decoder_jit_trace-pnnx.ncnn.param \
  402. $repo/decoder_jit_trace-pnnx.ncnn.bin \
  403. $repo/joiner_jit_trace-pnnx.ncnn.param \
  404. $repo/joiner_jit_trace-pnnx.ncnn.bin \
  405. $wave \
  406. 4 \
  407. $m
  408. done
  409. done
  410. rm -rf $repo
  411. log "------------------------------------------------------------"
  412. log "Run Zipformer transducer (Japanese, fluent)"
  413. log "------------------------------------------------------------"
  414. repo_url=https://huggingface.co/csukuangfj/sherpa-ncnn-streaming-zipformer-ja-fluent-2023-02-14
  415. log "Start testing ${repo_url}"
  416. repo=$(basename $repo_url)
  417. log "Download pretrained model and test-data from $repo_url"
  418. GIT_LFS_SKIP_SMUDGE=1 git clone $repo_url
  419. pushd $repo
  420. git lfs pull --include "*.bin"
  421. git lfs pull --include "test_wavs/*.wav"
  422. popd
  423. waves=(
  424. $repo/test_wavs/aps-smp.wav
  425. $repo/test_wavs/interview_aps-smp.wav
  426. $repo/test_wavs/reproduction-smp.wav
  427. $repo/test_wavs/sps-smp.wav
  428. $repo/test_wavs/task-smp.wav
  429. )
  430. for wave in ${waves[@]}; do
  431. for m in greedy_search modified_beam_search; do
  432. log "----test $m ---"
  433. time $EXE \
  434. $repo/tokens.txt \
  435. $repo/encoder_jit_trace-pnnx.ncnn.param \
  436. $repo/encoder_jit_trace-pnnx.ncnn.bin \
  437. $repo/decoder_jit_trace-pnnx.ncnn.param \
  438. $repo/decoder_jit_trace-pnnx.ncnn.bin \
  439. $repo/joiner_jit_trace-pnnx.ncnn.param \
  440. $repo/joiner_jit_trace-pnnx.ncnn.bin \
  441. $wave \
  442. 4 \
  443. $m
  444. done
  445. done
  446. rm -rf $repo
  447. log "------------------------------------------------------------"
  448. log "Run Zipformer transducer (Japanese, disfluent)"
  449. log "------------------------------------------------------------"
  450. repo_url=https://huggingface.co/csukuangfj/sherpa-ncnn-streaming-zipformer-ja-disfluent-2023-02-14
  451. log "Start testing ${repo_url}"
  452. repo=$(basename $repo_url)
  453. log "Download pretrained model and test-data from $repo_url"
  454. GIT_LFS_SKIP_SMUDGE=1 git clone $repo_url
  455. pushd $repo
  456. git lfs pull --include "*.bin"
  457. git lfs pull --include "test_wavs/*.wav"
  458. popd
  459. waves=(
  460. $repo/test_wavs/aps-smp.wav
  461. $repo/test_wavs/interview_aps-smp.wav
  462. $repo/test_wavs/reproduction-smp.wav
  463. $repo/test_wavs/sps-smp.wav
  464. $repo/test_wavs/task-smp.wav
  465. )
  466. for wave in ${waves[@]}; do
  467. for m in greedy_search modified_beam_search; do
  468. log "----test $m ---"
  469. time $EXE \
  470. $repo/tokens.txt \
  471. $repo/encoder_jit_trace-pnnx.ncnn.param \
  472. $repo/encoder_jit_trace-pnnx.ncnn.bin \
  473. $repo/decoder_jit_trace-pnnx.ncnn.param \
  474. $repo/decoder_jit_trace-pnnx.ncnn.bin \
  475. $repo/joiner_jit_trace-pnnx.ncnn.param \
  476. $repo/joiner_jit_trace-pnnx.ncnn.bin \
  477. $wave \
  478. 4 \
  479. $m
  480. done
  481. done
  482. rm -rf $repo