Coverage for tests/test_all_variants.py: 100%

27 statements  

« prev     ^ index     » next       coverage.py v7.6.1, created at 2026-10-15 15:22 +0000

1import inspect 1ab

2 

3import markdown 1ab

4from inline_snapshot import snapshot 1ab

5from mdx_include.mdx_include import IncludeExtension 1ab

6from pymdownx.highlight import HighlightExtension 1ab

7from pymdownx.superfences import SuperFencesCodeExtension 1ab

8 

9from markdown_include_variants import IncludeVariantsExtension 1ab

10 

11 

12def test_all_variants_plain(): 1ab

13 input_md = inspect.cleandoc( 1cd

14 """ 

15 {* docs_src/all_variants/tutorial001_an_py311.py *} 

16 """ 

17 ) 

18 

19 result = markdown.markdown(input_md, extensions=[IncludeVariantsExtension()]) 1cd

20 assert result == snapshot( 1cd

21 inspect.cleandoc( 

22 """ 

23 <p>//// tab | Python 3.11+ 

24 <code>python 

25 {!docs_src/all_variants/tutorial001_an_py311.py!}</code></p> 

26 <p>////</p> 

27 <p>///// details | 🤓 Other versions and variants</p> 

28 <p>//// tab | Python 3.10+</p> 

29 <p><code>python 

30 {!docs_src/all_variants/tutorial001_an_py310.py!}</code> 

31 //// 

32 //// tab | Python 3.9+</p> 

33 <p><code>python 

34 {!docs_src/all_variants/tutorial001_an_py39.py!}</code> 

35 //// 

36 //// tab | Python 3.8+</p> 

37 <p><code>python 

38 {!docs_src/all_variants/tutorial001_an.py!}</code> 

39 //// 

40 //// tab | Python 3.11+ - non-Annotated</p> 

41 <p>/// tip</p> 

42 <p>Prefer to use the <code>Annotated</code> version if possible.</p> 

43 <p>///</p> 

44 <p><code>python 

45 {!docs_src/all_variants/tutorial001_py311.py!}</code> 

46 //// 

47 //// tab | Python 3.10+ - non-Annotated</p> 

48 <p>/// tip</p> 

49 <p>Prefer to use the <code>Annotated</code> version if possible.</p> 

50 <p>///</p> 

51 <p><code>python 

52 {!docs_src/all_variants/tutorial001_py310.py!}</code> 

53 //// 

54 //// tab | Python 3.9+ - non-Annotated</p> 

55 <p>/// tip</p> 

56 <p>Prefer to use the <code>Annotated</code> version if possible.</p> 

57 <p>///</p> 

58 <p><code>python 

59 {!docs_src/all_variants/tutorial001_py39.py!}</code> 

60 //// 

61 //// tab | Python 3.8+ - non-Annotated</p> 

62 <p>/// tip</p> 

63 <p>Prefer to use the <code>Annotated</code> version if possible.</p> 

64 <p>///</p> 

65 <p><code>python 

66 {!docs_src/all_variants/tutorial001.py!}</code> 

67 ////</p> 

68 <p>/////</p> 

69 """ 

70 ) 

71 ) 

72 

73 

74def test_all_variants_ln_hl(): 1ab

75 input_md = inspect.cleandoc( 1ef

76 """ 

77 {* docs_src/all_variants/tutorial001_an_py311.py ln[3:5] hl[4:5] *} 

78 """ 

79 ) 

80 

81 result = markdown.markdown(input_md, extensions=[IncludeVariantsExtension()]) 1ef

82 assert result == snapshot( 1ef

83 inspect.cleandoc( 

84 """ 

85 <p>//// tab | Python 3.11+ 

86 ```python hl_lines="4-5"</p> 

87 <h1>Code above omitted 👆</h1> 

88 <p>{!docs_src/all_variants/tutorial001_an_py311.py[ln:3-5]!}</p> 

89 <h1>Code below omitted 👇</h1> 

90 <p>```</p> 

91 <p>////</p> 

92 <p>///// details | 👀 Full file preview</p> 

93 <p>//// tab | Python 3.11+</p> 

94 <p><code>python hl_lines="4-5" 

95 {!docs_src/all_variants/tutorial001_an_py311.py!}</code></p> 

96 <p>////</p> 

97 <p>/////</p> 

98 <p>///// details | 🤓 Other versions and variants</p> 

99 <p>//// tab | Python 3.10+</p> 

100 <p><code>python 

101 {!docs_src/all_variants/tutorial001_an_py310.py!}</code> 

102 //// 

103 //// tab | Python 3.9+</p> 

104 <p><code>python 

105 {!docs_src/all_variants/tutorial001_an_py39.py!}</code> 

106 //// 

107 //// tab | Python 3.8+</p> 

108 <p><code>python 

109 {!docs_src/all_variants/tutorial001_an.py!}</code> 

110 //// 

111 //// tab | Python 3.11+ - non-Annotated</p> 

112 <p>/// tip</p> 

113 <p>Prefer to use the <code>Annotated</code> version if possible.</p> 

114 <p>///</p> 

115 <p><code>python 

116 {!docs_src/all_variants/tutorial001_py311.py!}</code> 

117 //// 

118 //// tab | Python 3.10+ - non-Annotated</p> 

119 <p>/// tip</p> 

120 <p>Prefer to use the <code>Annotated</code> version if possible.</p> 

121 <p>///</p> 

122 <p><code>python 

123 {!docs_src/all_variants/tutorial001_py310.py!}</code> 

124 //// 

125 //// tab | Python 3.9+ - non-Annotated</p> 

126 <p>/// tip</p> 

127 <p>Prefer to use the <code>Annotated</code> version if possible.</p> 

128 <p>///</p> 

129 <p><code>python 

130 {!docs_src/all_variants/tutorial001_py39.py!}</code> 

131 //// 

132 //// tab | Python 3.8+ - non-Annotated</p> 

133 <p>/// tip</p> 

134 <p>Prefer to use the <code>Annotated</code> version if possible.</p> 

135 <p>///</p> 

136 <p><code>python 

137 {!docs_src/all_variants/tutorial001.py!}</code> 

138 ////</p> 

139 <p>/////</p> 

140 """ 

141 ) 

142 ) 

143 

144 

145def test_all_variants_ln_hl_title(): 1ab

146 input_md = inspect.cleandoc( 1gh

147 """ 

148 {* docs_src/all_variants/tutorial001_an_py311.py ln[3:5] hl[4:5] title["main.py"] *} 

149 """ 

150 ) 

151 

152 result = markdown.markdown(input_md, extensions=[IncludeVariantsExtension()]) 1gh

153 assert result == snapshot( 1gh

154 inspect.cleandoc( 

155 """ 

156 <p>//// tab | Python 3.11+ 

157 ```python hl_lines="4-5" title="main.py"</p> 

158 <h1>Code above omitted 👆</h1> 

159 <p>{!docs_src/all_variants/tutorial001_an_py311.py[ln:3-5]!}</p> 

160 <h1>Code below omitted 👇</h1> 

161 <p>```</p> 

162 <p>////</p> 

163 <p>///// details | 👀 Full file preview</p> 

164 <p>//// tab | Python 3.11+</p> 

165 <p><code>python hl_lines="4-5" title="main.py" 

166 {!docs_src/all_variants/tutorial001_an_py311.py!}</code></p> 

167 <p>////</p> 

168 <p>/////</p> 

169 <p>///// details | 🤓 Other versions and variants</p> 

170 <p>//// tab | Python 3.10+</p> 

171 <p><code>python title="main.py" 

172 {!docs_src/all_variants/tutorial001_an_py310.py!}</code> 

173 //// 

174 //// tab | Python 3.9+</p> 

175 <p><code>python title="main.py" 

176 {!docs_src/all_variants/tutorial001_an_py39.py!}</code> 

177 //// 

178 //// tab | Python 3.8+</p> 

179 <p><code>python title="main.py" 

180 {!docs_src/all_variants/tutorial001_an.py!}</code> 

181 //// 

182 //// tab | Python 3.11+ - non-Annotated</p> 

183 <p>/// tip</p> 

184 <p>Prefer to use the <code>Annotated</code> version if possible.</p> 

185 <p>///</p> 

186 <p><code>python title="main.py" 

187 {!docs_src/all_variants/tutorial001_py311.py!}</code> 

188 //// 

189 //// tab | Python 3.10+ - non-Annotated</p> 

190 <p>/// tip</p> 

191 <p>Prefer to use the <code>Annotated</code> version if possible.</p> 

192 <p>///</p> 

193 <p><code>python title="main.py" 

194 {!docs_src/all_variants/tutorial001_py310.py!}</code> 

195 //// 

196 //// tab | Python 3.9+ - non-Annotated</p> 

197 <p>/// tip</p> 

198 <p>Prefer to use the <code>Annotated</code> version if possible.</p> 

199 <p>///</p> 

200 <p><code>python title="main.py" 

201 {!docs_src/all_variants/tutorial001_py39.py!}</code> 

202 //// 

203 //// tab | Python 3.8+ - non-Annotated</p> 

204 <p>/// tip</p> 

205 <p>Prefer to use the <code>Annotated</code> version if possible.</p> 

206 <p>///</p> 

207 <p><code>python title="main.py" 

208 {!docs_src/all_variants/tutorial001.py!}</code> 

209 ////</p> 

210 <p>/////</p> 

211 """ 

212 ) 

213 ) 

214 

215 

216def test_all_variants_ln_hl_include(): 1ab

217 input_md = inspect.cleandoc( 1ij

218 """ 

219 {* docs_src/all_variants/tutorial001_an_py311.py ln[3:5] hl[4:5] *} 

220 """ 

221 ) 

222 

223 result = markdown.markdown( 1ij

224 input_md, 

225 extensions=[ 

226 IncludeVariantsExtension(), 

227 IncludeExtension(), 

228 SuperFencesCodeExtension(), 

229 HighlightExtension(), 

230 ], 

231 ) 

232 assert result == snapshot( 1ij

233 inspect.cleandoc( 

234 """ 

235 <p>//// tab | Python 3.11+ 

236 <div class="highlight"><pre><span></span><code><span class="c1"># Code above omitted 👆</span> 

237 

238 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py311 line 3"</span><span class="p">)</span> 

239 <span class="hll"><span class="nb">print</span><span class="p">(</span><span class="s2">"an py311 line 4"</span><span class="p">)</span> 

240 </span><span class="hll"><span class="nb">print</span><span class="p">(</span><span class="s2">"an py311 line 5"</span><span class="p">)</span> 

241 </span> 

242 <span class="c1"># Code below omitted 👇</span> 

243 </code></pre></div></p> 

244 <p>////</p> 

245 <p>///// details | 👀 Full file preview</p> 

246 <p>//// tab | Python 3.11+</p> 

247 <div class="highlight"><pre><span></span><code><span class="nb">print</span><span class="p">(</span><span class="s2">"an py311 line 1"</span><span class="p">)</span> 

248 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py311 line 2"</span><span class="p">)</span> 

249 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py311 line 3"</span><span class="p">)</span> 

250 <span class="hll"><span class="nb">print</span><span class="p">(</span><span class="s2">"an py311 line 4"</span><span class="p">)</span> 

251 </span><span class="hll"><span class="nb">print</span><span class="p">(</span><span class="s2">"an py311 line 5"</span><span class="p">)</span> 

252 </span><span class="nb">print</span><span class="p">(</span><span class="s2">"an py311 line 6"</span><span class="p">)</span> 

253 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py311 line 7"</span><span class="p">)</span> 

254 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py311 line 8"</span><span class="p">)</span> 

255 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py311 line 9"</span><span class="p">)</span> 

256 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py311 line 10"</span><span class="p">)</span> 

257 </code></pre></div> 

258 <p>////</p> 

259 <p>/////</p> 

260 <p>///// details | 🤓 Other versions and variants</p> 

261 <p>//// tab | Python 3.10+</p> 

262 <p><div class="highlight"><pre><span></span><code><span class="nb">print</span><span class="p">(</span><span class="s2">"an py310 line 1"</span><span class="p">)</span> 

263 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py310 line 2"</span><span class="p">)</span> 

264 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py310 line 3"</span><span class="p">)</span> 

265 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py310 line 4"</span><span class="p">)</span> 

266 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py310 line 5"</span><span class="p">)</span> 

267 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py310 line 6"</span><span class="p">)</span> 

268 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py310 line 7"</span><span class="p">)</span> 

269 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py310 line 8"</span><span class="p">)</span> 

270 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py310 line 9"</span><span class="p">)</span> 

271 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py310 line 10"</span><span class="p">)</span> 

272 </code></pre></div> 

273 //// 

274 //// tab | Python 3.9+</p> 

275 <p><div class="highlight"><pre><span></span><code><span class="nb">print</span><span class="p">(</span><span class="s2">"an py39 line 1"</span><span class="p">)</span> 

276 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py39 line 2"</span><span class="p">)</span> 

277 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py39 line 3"</span><span class="p">)</span> 

278 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py39 line 4"</span><span class="p">)</span> 

279 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py39 line 5"</span><span class="p">)</span> 

280 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py39 line 6"</span><span class="p">)</span> 

281 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py39 line 7"</span><span class="p">)</span> 

282 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py39 line 8"</span><span class="p">)</span> 

283 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py39 line 9"</span><span class="p">)</span> 

284 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py39 line 10"</span><span class="p">)</span> 

285 </code></pre></div> 

286 //// 

287 //// tab | Python 3.8+</p> 

288 <p><div class="highlight"><pre><span></span><code><span class="nb">print</span><span class="p">(</span><span class="s2">"an line 1"</span><span class="p">)</span> 

289 <span class="nb">print</span><span class="p">(</span><span class="s2">"an line 2"</span><span class="p">)</span> 

290 <span class="nb">print</span><span class="p">(</span><span class="s2">"an line 3"</span><span class="p">)</span> 

291 <span class="nb">print</span><span class="p">(</span><span class="s2">"an line 4"</span><span class="p">)</span> 

292 <span class="nb">print</span><span class="p">(</span><span class="s2">"an line 5"</span><span class="p">)</span> 

293 <span class="nb">print</span><span class="p">(</span><span class="s2">"an line 6"</span><span class="p">)</span> 

294 <span class="nb">print</span><span class="p">(</span><span class="s2">"an line 7"</span><span class="p">)</span> 

295 <span class="nb">print</span><span class="p">(</span><span class="s2">"an line 8"</span><span class="p">)</span> 

296 <span class="nb">print</span><span class="p">(</span><span class="s2">"an line 9"</span><span class="p">)</span> 

297 <span class="nb">print</span><span class="p">(</span><span class="s2">"an line 10"</span><span class="p">)</span> 

298 </code></pre></div> 

299 //// 

300 //// tab | Python 3.11+ - non-Annotated</p> 

301 <p>/// tip</p> 

302 <p>Prefer to use the <code>Annotated</code> version if possible.</p> 

303 <p>///</p> 

304 <p><div class="highlight"><pre><span></span><code><span class="nb">print</span><span class="p">(</span><span class="s2">"py311 line 1"</span><span class="p">)</span> 

305 <span class="nb">print</span><span class="p">(</span><span class="s2">"py311 line 2"</span><span class="p">)</span> 

306 <span class="nb">print</span><span class="p">(</span><span class="s2">"py311 line 3"</span><span class="p">)</span> 

307 <span class="nb">print</span><span class="p">(</span><span class="s2">"py311 line 4"</span><span class="p">)</span> 

308 <span class="nb">print</span><span class="p">(</span><span class="s2">"py311 line 5"</span><span class="p">)</span> 

309 <span class="nb">print</span><span class="p">(</span><span class="s2">"py311 line 6"</span><span class="p">)</span> 

310 <span class="nb">print</span><span class="p">(</span><span class="s2">"py311 line 7"</span><span class="p">)</span> 

311 <span class="nb">print</span><span class="p">(</span><span class="s2">"py311 line 8"</span><span class="p">)</span> 

312 <span class="nb">print</span><span class="p">(</span><span class="s2">"py311 line 9"</span><span class="p">)</span> 

313 <span class="nb">print</span><span class="p">(</span><span class="s2">"py311 line 10"</span><span class="p">)</span> 

314 </code></pre></div> 

315 //// 

316 //// tab | Python 3.10+ - non-Annotated</p> 

317 <p>/// tip</p> 

318 <p>Prefer to use the <code>Annotated</code> version if possible.</p> 

319 <p>///</p> 

320 <p><div class="highlight"><pre><span></span><code><span class="nb">print</span><span class="p">(</span><span class="s2">"py310 line 1"</span><span class="p">)</span> 

321 <span class="nb">print</span><span class="p">(</span><span class="s2">"py310 line 2"</span><span class="p">)</span> 

322 <span class="nb">print</span><span class="p">(</span><span class="s2">"py310 line 3"</span><span class="p">)</span> 

323 <span class="nb">print</span><span class="p">(</span><span class="s2">"py310 line 4"</span><span class="p">)</span> 

324 <span class="nb">print</span><span class="p">(</span><span class="s2">"py310 line 5"</span><span class="p">)</span> 

325 <span class="nb">print</span><span class="p">(</span><span class="s2">"py310 line 6"</span><span class="p">)</span> 

326 <span class="nb">print</span><span class="p">(</span><span class="s2">"py310 line 7"</span><span class="p">)</span> 

327 <span class="nb">print</span><span class="p">(</span><span class="s2">"py310 line 8"</span><span class="p">)</span> 

328 <span class="nb">print</span><span class="p">(</span><span class="s2">"py310 line 9"</span><span class="p">)</span> 

329 <span class="nb">print</span><span class="p">(</span><span class="s2">"py310 line 10"</span><span class="p">)</span> 

330 </code></pre></div> 

331 //// 

332 //// tab | Python 3.9+ - non-Annotated</p> 

333 <p>/// tip</p> 

334 <p>Prefer to use the <code>Annotated</code> version if possible.</p> 

335 <p>///</p> 

336 <p><div class="highlight"><pre><span></span><code><span class="nb">print</span><span class="p">(</span><span class="s2">"py39 line 1"</span><span class="p">)</span> 

337 <span class="nb">print</span><span class="p">(</span><span class="s2">"py39 line 2"</span><span class="p">)</span> 

338 <span class="nb">print</span><span class="p">(</span><span class="s2">"py39 line 3"</span><span class="p">)</span> 

339 <span class="nb">print</span><span class="p">(</span><span class="s2">"py39 line 4"</span><span class="p">)</span> 

340 <span class="nb">print</span><span class="p">(</span><span class="s2">"py39 line 5"</span><span class="p">)</span> 

341 <span class="nb">print</span><span class="p">(</span><span class="s2">"py39 line 6"</span><span class="p">)</span> 

342 <span class="nb">print</span><span class="p">(</span><span class="s2">"py39 line 7"</span><span class="p">)</span> 

343 <span class="nb">print</span><span class="p">(</span><span class="s2">"py39 line 8"</span><span class="p">)</span> 

344 <span class="nb">print</span><span class="p">(</span><span class="s2">"py39 line 9"</span><span class="p">)</span> 

345 <span class="nb">print</span><span class="p">(</span><span class="s2">"py39 line 10"</span><span class="p">)</span> 

346 </code></pre></div> 

347 //// 

348 //// tab | Python 3.8+ - non-Annotated</p> 

349 <p>/// tip</p> 

350 <p>Prefer to use the <code>Annotated</code> version if possible.</p> 

351 <p>///</p> 

352 <p><div class="highlight"><pre><span></span><code><span class="nb">print</span><span class="p">(</span><span class="s2">"simple line 1"</span><span class="p">)</span> 

353 <span class="nb">print</span><span class="p">(</span><span class="s2">"simple line 2"</span><span class="p">)</span> 

354 <span class="nb">print</span><span class="p">(</span><span class="s2">"simple line 3"</span><span class="p">)</span> 

355 <span class="nb">print</span><span class="p">(</span><span class="s2">"simple line 4"</span><span class="p">)</span> 

356 <span class="nb">print</span><span class="p">(</span><span class="s2">"simple line 5"</span><span class="p">)</span> 

357 <span class="nb">print</span><span class="p">(</span><span class="s2">"simple line 6"</span><span class="p">)</span> 

358 <span class="nb">print</span><span class="p">(</span><span class="s2">"simple line 7"</span><span class="p">)</span> 

359 <span class="nb">print</span><span class="p">(</span><span class="s2">"simple line 8"</span><span class="p">)</span> 

360 <span class="nb">print</span><span class="p">(</span><span class="s2">"simple line 9"</span><span class="p">)</span> 

361 <span class="nb">print</span><span class="p">(</span><span class="s2">"simple line 10"</span><span class="p">)</span> 

362 </code></pre></div> 

363 ////</p> 

364 <p>/////</p> 

365 """ 

366 ) 

367 ) 

368 

369 

370def test_all_variants_ln_hl_title_include(): 1ab

371 input_md = inspect.cleandoc( 1kl

372 """ 

373 {* docs_src/all_variants/tutorial001_an_py311.py ln[3:5] hl[4:5] title["main.py"] *} 

374 """ 

375 ) 

376 

377 result = markdown.markdown( 1kl

378 input_md, 

379 extensions=[ 

380 IncludeVariantsExtension(), 

381 IncludeExtension(), 

382 SuperFencesCodeExtension(), 

383 HighlightExtension(), 

384 ], 

385 ) 

386 assert result == snapshot( 1kl

387 inspect.cleandoc( 

388 """ 

389 <p>//// tab | Python 3.11+ 

390 <div class="highlight"><span class="filename">main.py</span><pre><span></span><code><span class="c1"># Code above omitted 👆</span> 

391 

392 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py311 line 3"</span><span class="p">)</span> 

393 <span class="hll"><span class="nb">print</span><span class="p">(</span><span class="s2">"an py311 line 4"</span><span class="p">)</span> 

394 </span><span class="hll"><span class="nb">print</span><span class="p">(</span><span class="s2">"an py311 line 5"</span><span class="p">)</span> 

395 </span> 

396 <span class="c1"># Code below omitted 👇</span> 

397 </code></pre></div></p> 

398 <p>////</p> 

399 <p>///// details | 👀 Full file preview</p> 

400 <p>//// tab | Python 3.11+</p> 

401 <div class="highlight"><span class="filename">main.py</span><pre><span></span><code><span class="nb">print</span><span class="p">(</span><span class="s2">"an py311 line 1"</span><span class="p">)</span> 

402 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py311 line 2"</span><span class="p">)</span> 

403 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py311 line 3"</span><span class="p">)</span> 

404 <span class="hll"><span class="nb">print</span><span class="p">(</span><span class="s2">"an py311 line 4"</span><span class="p">)</span> 

405 </span><span class="hll"><span class="nb">print</span><span class="p">(</span><span class="s2">"an py311 line 5"</span><span class="p">)</span> 

406 </span><span class="nb">print</span><span class="p">(</span><span class="s2">"an py311 line 6"</span><span class="p">)</span> 

407 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py311 line 7"</span><span class="p">)</span> 

408 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py311 line 8"</span><span class="p">)</span> 

409 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py311 line 9"</span><span class="p">)</span> 

410 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py311 line 10"</span><span class="p">)</span> 

411 </code></pre></div> 

412 <p>////</p> 

413 <p>/////</p> 

414 <p>///// details | 🤓 Other versions and variants</p> 

415 <p>//// tab | Python 3.10+</p> 

416 <p><div class="highlight"><span class="filename">main.py</span><pre><span></span><code><span class="nb">print</span><span class="p">(</span><span class="s2">"an py310 line 1"</span><span class="p">)</span> 

417 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py310 line 2"</span><span class="p">)</span> 

418 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py310 line 3"</span><span class="p">)</span> 

419 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py310 line 4"</span><span class="p">)</span> 

420 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py310 line 5"</span><span class="p">)</span> 

421 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py310 line 6"</span><span class="p">)</span> 

422 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py310 line 7"</span><span class="p">)</span> 

423 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py310 line 8"</span><span class="p">)</span> 

424 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py310 line 9"</span><span class="p">)</span> 

425 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py310 line 10"</span><span class="p">)</span> 

426 </code></pre></div> 

427 //// 

428 //// tab | Python 3.9+</p> 

429 <p><div class="highlight"><span class="filename">main.py</span><pre><span></span><code><span class="nb">print</span><span class="p">(</span><span class="s2">"an py39 line 1"</span><span class="p">)</span> 

430 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py39 line 2"</span><span class="p">)</span> 

431 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py39 line 3"</span><span class="p">)</span> 

432 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py39 line 4"</span><span class="p">)</span> 

433 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py39 line 5"</span><span class="p">)</span> 

434 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py39 line 6"</span><span class="p">)</span> 

435 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py39 line 7"</span><span class="p">)</span> 

436 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py39 line 8"</span><span class="p">)</span> 

437 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py39 line 9"</span><span class="p">)</span> 

438 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py39 line 10"</span><span class="p">)</span> 

439 </code></pre></div> 

440 //// 

441 //// tab | Python 3.8+</p> 

442 <p><div class="highlight"><span class="filename">main.py</span><pre><span></span><code><span class="nb">print</span><span class="p">(</span><span class="s2">"an line 1"</span><span class="p">)</span> 

443 <span class="nb">print</span><span class="p">(</span><span class="s2">"an line 2"</span><span class="p">)</span> 

444 <span class="nb">print</span><span class="p">(</span><span class="s2">"an line 3"</span><span class="p">)</span> 

445 <span class="nb">print</span><span class="p">(</span><span class="s2">"an line 4"</span><span class="p">)</span> 

446 <span class="nb">print</span><span class="p">(</span><span class="s2">"an line 5"</span><span class="p">)</span> 

447 <span class="nb">print</span><span class="p">(</span><span class="s2">"an line 6"</span><span class="p">)</span> 

448 <span class="nb">print</span><span class="p">(</span><span class="s2">"an line 7"</span><span class="p">)</span> 

449 <span class="nb">print</span><span class="p">(</span><span class="s2">"an line 8"</span><span class="p">)</span> 

450 <span class="nb">print</span><span class="p">(</span><span class="s2">"an line 9"</span><span class="p">)</span> 

451 <span class="nb">print</span><span class="p">(</span><span class="s2">"an line 10"</span><span class="p">)</span> 

452 </code></pre></div> 

453 //// 

454 //// tab | Python 3.11+ - non-Annotated</p> 

455 <p>/// tip</p> 

456 <p>Prefer to use the <code>Annotated</code> version if possible.</p> 

457 <p>///</p> 

458 <p><div class="highlight"><span class="filename">main.py</span><pre><span></span><code><span class="nb">print</span><span class="p">(</span><span class="s2">"py311 line 1"</span><span class="p">)</span> 

459 <span class="nb">print</span><span class="p">(</span><span class="s2">"py311 line 2"</span><span class="p">)</span> 

460 <span class="nb">print</span><span class="p">(</span><span class="s2">"py311 line 3"</span><span class="p">)</span> 

461 <span class="nb">print</span><span class="p">(</span><span class="s2">"py311 line 4"</span><span class="p">)</span> 

462 <span class="nb">print</span><span class="p">(</span><span class="s2">"py311 line 5"</span><span class="p">)</span> 

463 <span class="nb">print</span><span class="p">(</span><span class="s2">"py311 line 6"</span><span class="p">)</span> 

464 <span class="nb">print</span><span class="p">(</span><span class="s2">"py311 line 7"</span><span class="p">)</span> 

465 <span class="nb">print</span><span class="p">(</span><span class="s2">"py311 line 8"</span><span class="p">)</span> 

466 <span class="nb">print</span><span class="p">(</span><span class="s2">"py311 line 9"</span><span class="p">)</span> 

467 <span class="nb">print</span><span class="p">(</span><span class="s2">"py311 line 10"</span><span class="p">)</span> 

468 </code></pre></div> 

469 //// 

470 //// tab | Python 3.10+ - non-Annotated</p> 

471 <p>/// tip</p> 

472 <p>Prefer to use the <code>Annotated</code> version if possible.</p> 

473 <p>///</p> 

474 <p><div class="highlight"><span class="filename">main.py</span><pre><span></span><code><span class="nb">print</span><span class="p">(</span><span class="s2">"py310 line 1"</span><span class="p">)</span> 

475 <span class="nb">print</span><span class="p">(</span><span class="s2">"py310 line 2"</span><span class="p">)</span> 

476 <span class="nb">print</span><span class="p">(</span><span class="s2">"py310 line 3"</span><span class="p">)</span> 

477 <span class="nb">print</span><span class="p">(</span><span class="s2">"py310 line 4"</span><span class="p">)</span> 

478 <span class="nb">print</span><span class="p">(</span><span class="s2">"py310 line 5"</span><span class="p">)</span> 

479 <span class="nb">print</span><span class="p">(</span><span class="s2">"py310 line 6"</span><span class="p">)</span> 

480 <span class="nb">print</span><span class="p">(</span><span class="s2">"py310 line 7"</span><span class="p">)</span> 

481 <span class="nb">print</span><span class="p">(</span><span class="s2">"py310 line 8"</span><span class="p">)</span> 

482 <span class="nb">print</span><span class="p">(</span><span class="s2">"py310 line 9"</span><span class="p">)</span> 

483 <span class="nb">print</span><span class="p">(</span><span class="s2">"py310 line 10"</span><span class="p">)</span> 

484 </code></pre></div> 

485 //// 

486 //// tab | Python 3.9+ - non-Annotated</p> 

487 <p>/// tip</p> 

488 <p>Prefer to use the <code>Annotated</code> version if possible.</p> 

489 <p>///</p> 

490 <p><div class="highlight"><span class="filename">main.py</span><pre><span></span><code><span class="nb">print</span><span class="p">(</span><span class="s2">"py39 line 1"</span><span class="p">)</span> 

491 <span class="nb">print</span><span class="p">(</span><span class="s2">"py39 line 2"</span><span class="p">)</span> 

492 <span class="nb">print</span><span class="p">(</span><span class="s2">"py39 line 3"</span><span class="p">)</span> 

493 <span class="nb">print</span><span class="p">(</span><span class="s2">"py39 line 4"</span><span class="p">)</span> 

494 <span class="nb">print</span><span class="p">(</span><span class="s2">"py39 line 5"</span><span class="p">)</span> 

495 <span class="nb">print</span><span class="p">(</span><span class="s2">"py39 line 6"</span><span class="p">)</span> 

496 <span class="nb">print</span><span class="p">(</span><span class="s2">"py39 line 7"</span><span class="p">)</span> 

497 <span class="nb">print</span><span class="p">(</span><span class="s2">"py39 line 8"</span><span class="p">)</span> 

498 <span class="nb">print</span><span class="p">(</span><span class="s2">"py39 line 9"</span><span class="p">)</span> 

499 <span class="nb">print</span><span class="p">(</span><span class="s2">"py39 line 10"</span><span class="p">)</span> 

500 </code></pre></div> 

501 //// 

502 //// tab | Python 3.8+ - non-Annotated</p> 

503 <p>/// tip</p> 

504 <p>Prefer to use the <code>Annotated</code> version if possible.</p> 

505 <p>///</p> 

506 <p><div class="highlight"><span class="filename">main.py</span><pre><span></span><code><span class="nb">print</span><span class="p">(</span><span class="s2">"simple line 1"</span><span class="p">)</span> 

507 <span class="nb">print</span><span class="p">(</span><span class="s2">"simple line 2"</span><span class="p">)</span> 

508 <span class="nb">print</span><span class="p">(</span><span class="s2">"simple line 3"</span><span class="p">)</span> 

509 <span class="nb">print</span><span class="p">(</span><span class="s2">"simple line 4"</span><span class="p">)</span> 

510 <span class="nb">print</span><span class="p">(</span><span class="s2">"simple line 5"</span><span class="p">)</span> 

511 <span class="nb">print</span><span class="p">(</span><span class="s2">"simple line 6"</span><span class="p">)</span> 

512 <span class="nb">print</span><span class="p">(</span><span class="s2">"simple line 7"</span><span class="p">)</span> 

513 <span class="nb">print</span><span class="p">(</span><span class="s2">"simple line 8"</span><span class="p">)</span> 

514 <span class="nb">print</span><span class="p">(</span><span class="s2">"simple line 9"</span><span class="p">)</span> 

515 <span class="nb">print</span><span class="p">(</span><span class="s2">"simple line 10"</span><span class="p">)</span> 

516 </code></pre></div> 

517 ////</p> 

518 <p>/////</p> 

519 """ 

520 ) 

521 )