scitex 2.16.2__py3-none-any.whl → 2.17.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. scitex/_mcp_resources/_cheatsheet.py +1 -1
  2. scitex/_mcp_resources/_modules.py +1 -1
  3. scitex/_mcp_tools/__init__.py +2 -0
  4. scitex/_mcp_tools/verify.py +256 -0
  5. scitex/cli/main.py +2 -0
  6. scitex/cli/verify.py +476 -0
  7. scitex/dev/plt/__init__.py +1 -1
  8. scitex/dev/plt/data/mpl/PLOTTING_FUNCTIONS.yaml +90 -0
  9. scitex/dev/plt/data/mpl/PLOTTING_SIGNATURES.yaml +1571 -0
  10. scitex/dev/plt/data/mpl/PLOTTING_SIGNATURES_DETAILED.yaml +6262 -0
  11. scitex/dev/plt/data/mpl/SIGNATURES_FLATTENED.yaml +1274 -0
  12. scitex/dev/plt/data/mpl/dir_ax.txt +459 -0
  13. scitex/dev/plt/mpl/get_dir_ax.py +1 -1
  14. scitex/dev/plt/mpl/get_signatures.py +1 -1
  15. scitex/dev/plt/mpl/get_signatures_details.py +1 -1
  16. scitex/io/_load.py +8 -1
  17. scitex/io/_save.py +12 -0
  18. scitex/scholar/data/.gitkeep +0 -0
  19. scitex/scholar/data/README.md +44 -0
  20. scitex/scholar/data/bib_files/bibliography.bib +1952 -0
  21. scitex/scholar/data/bib_files/neurovista.bib +277 -0
  22. scitex/scholar/data/bib_files/neurovista_enriched.bib +441 -0
  23. scitex/scholar/data/bib_files/neurovista_enriched_enriched.bib +441 -0
  24. scitex/scholar/data/bib_files/neurovista_processed.bib +338 -0
  25. scitex/scholar/data/bib_files/openaccess.bib +89 -0
  26. scitex/scholar/data/bib_files/pac-seizure_prediction_enriched.bib +2178 -0
  27. scitex/scholar/data/bib_files/pac.bib +698 -0
  28. scitex/scholar/data/bib_files/pac_enriched.bib +1061 -0
  29. scitex/scholar/data/bib_files/pac_processed.bib +0 -0
  30. scitex/scholar/data/bib_files/pac_titles.txt +75 -0
  31. scitex/scholar/data/bib_files/paywalled.bib +98 -0
  32. scitex/scholar/data/bib_files/related-papers-by-coauthors.bib +58 -0
  33. scitex/scholar/data/bib_files/related-papers-by-coauthors_enriched.bib +87 -0
  34. scitex/scholar/data/bib_files/seizure_prediction.bib +694 -0
  35. scitex/scholar/data/bib_files/seizure_prediction_processed.bib +0 -0
  36. scitex/scholar/data/bib_files/test_complete_enriched.bib +437 -0
  37. scitex/scholar/data/bib_files/test_final_enriched.bib +437 -0
  38. scitex/scholar/data/bib_files/test_seizure.bib +46 -0
  39. scitex/scholar/data/impact_factor/JCR_IF_2022.xlsx +0 -0
  40. scitex/scholar/data/impact_factor/JCR_IF_2024.db +0 -0
  41. scitex/scholar/data/impact_factor/JCR_IF_2024.xlsx +0 -0
  42. scitex/scholar/data/impact_factor/JCR_IF_2024_v01.db +0 -0
  43. scitex/scholar/data/impact_factor.db +0 -0
  44. scitex/session/README.md +2 -2
  45. scitex/session/__init__.py +1 -0
  46. scitex/session/_decorator.py +57 -33
  47. scitex/session/_lifecycle/__init__.py +23 -0
  48. scitex/session/_lifecycle/_close.py +225 -0
  49. scitex/session/_lifecycle/_config.py +112 -0
  50. scitex/session/_lifecycle/_matplotlib.py +83 -0
  51. scitex/session/_lifecycle/_start.py +246 -0
  52. scitex/session/_lifecycle/_utils.py +186 -0
  53. scitex/session/_manager.py +40 -3
  54. scitex/session/template.py +1 -1
  55. scitex/template/_templates/plt.py +1 -1
  56. scitex/template/_templates/session.py +1 -1
  57. scitex/verify/README.md +312 -0
  58. scitex/verify/__init__.py +212 -0
  59. scitex/verify/_chain.py +369 -0
  60. scitex/verify/_db.py +600 -0
  61. scitex/verify/_hash.py +187 -0
  62. scitex/verify/_integration.py +127 -0
  63. scitex/verify/_rerun.py +253 -0
  64. scitex/verify/_tracker.py +330 -0
  65. scitex/verify/_visualize.py +48 -0
  66. scitex/verify/_viz/__init__.py +56 -0
  67. scitex/verify/_viz/_colors.py +84 -0
  68. scitex/verify/_viz/_format.py +302 -0
  69. scitex/verify/_viz/_json.py +192 -0
  70. scitex/verify/_viz/_mermaid.py +440 -0
  71. scitex/verify/_viz/_plotly.py +193 -0
  72. scitex/verify/_viz/_templates.py +246 -0
  73. scitex/verify/_viz/_utils.py +56 -0
  74. {scitex-2.16.2.dist-info → scitex-2.17.0.dist-info}/METADATA +1 -1
  75. {scitex-2.16.2.dist-info → scitex-2.17.0.dist-info}/RECORD +78 -29
  76. scitex/scholar/url_finder/.tmp/open_url/KNOWN_RESOLVERS.py +0 -462
  77. scitex/scholar/url_finder/.tmp/open_url/README.md +0 -223
  78. scitex/scholar/url_finder/.tmp/open_url/_DOIToURLResolver.py +0 -694
  79. scitex/scholar/url_finder/.tmp/open_url/_OpenURLResolver.py +0 -1160
  80. scitex/scholar/url_finder/.tmp/open_url/_ResolverLinkFinder.py +0 -344
  81. scitex/scholar/url_finder/.tmp/open_url/__init__.py +0 -24
  82. scitex/session/_lifecycle.py +0 -827
  83. {scitex-2.16.2.dist-info → scitex-2.17.0.dist-info}/WHEEL +0 -0
  84. {scitex-2.16.2.dist-info → scitex-2.17.0.dist-info}/entry_points.txt +0 -0
  85. {scitex-2.16.2.dist-info → scitex-2.17.0.dist-info}/licenses/LICENSE +0 -0
scitex/cli/verify.py ADDED
@@ -0,0 +1,476 @@
1
+ #!/usr/bin/env python3
2
+ # Timestamp: "2026-02-01 (ywatanabe)"
3
+ # File: /home/ywatanabe/proj/scitex-python/src/scitex/cli/verify.py
4
+ """
5
+ SciTeX CLI - Verify Commands (Hash-based verification).
6
+
7
+ Provides commands for tracking and verifying reproducibility of computations.
8
+ """
9
+
10
+ import sys
11
+ from pathlib import Path
12
+
13
+ import click
14
+
15
+
16
+ @click.group(
17
+ context_settings={"help_option_names": ["-h", "--help"]},
18
+ invoke_without_command=True,
19
+ )
20
+ @click.option("--help-recursive", is_flag=True, help="Show help for all subcommands")
21
+ @click.pass_context
22
+ def verify(ctx, help_recursive):
23
+ """
24
+ Hash-based verification for reproducible science.
25
+
26
+ \b
27
+ Commands:
28
+ list List all tracked runs with verification status
29
+ run Verify a specific session run
30
+ chain Verify dependency chain for a target file
31
+ status Show changed files (like git status)
32
+ stats Show database statistics
33
+
34
+ \b
35
+ Examples:
36
+ scitex verify list # List all runs
37
+ scitex verify run 2025Y-11M-18D-09h12m03s # Verify specific run
38
+ scitex verify chain ./results/figure3.png # Trace back to source
39
+ scitex verify status # Show changes
40
+ """
41
+ if help_recursive:
42
+ _print_help_recursive(ctx)
43
+ ctx.exit(0)
44
+ elif ctx.invoked_subcommand is None:
45
+ click.echo(ctx.get_help())
46
+
47
+
48
+ def _print_help_recursive(ctx):
49
+ """Print help for all commands recursively."""
50
+ fake_parent = click.Context(click.Group(), info_name="scitex")
51
+ parent_ctx = click.Context(verify, info_name="verify", parent=fake_parent)
52
+ click.secho("━━━ scitex verify ━━━", fg="cyan", bold=True)
53
+ click.echo(verify.get_help(parent_ctx))
54
+ for name in sorted(verify.list_commands(ctx) or []):
55
+ cmd = verify.get_command(ctx, name)
56
+ if cmd is None:
57
+ continue
58
+ click.echo()
59
+ click.secho(f"━━━ scitex verify {name} ━━━", fg="cyan", bold=True)
60
+ with click.Context(cmd, info_name=name, parent=parent_ctx) as sub_ctx:
61
+ click.echo(cmd.get_help(sub_ctx))
62
+
63
+
64
+ @verify.command("list")
65
+ @click.option(
66
+ "--limit", "-n", type=int, default=50, help="Maximum number of runs to show"
67
+ )
68
+ @click.option(
69
+ "--filter-status",
70
+ "-s",
71
+ type=click.Choice(["all", "success", "failed", "running"]),
72
+ default="all",
73
+ help="Filter by run status",
74
+ )
75
+ @click.option("--no-verify", is_flag=True, help="Skip verification (faster)")
76
+ @click.option("--json", "as_json", is_flag=True, help="Output as JSON")
77
+ def list_runs(limit, filter_status, no_verify, as_json):
78
+ """
79
+ List all tracked runs with verification status.
80
+
81
+ \b
82
+ Examples:
83
+ scitex verify list # List all runs
84
+ scitex verify list -n 10 # Limit to 10 runs
85
+ scitex verify list -s success # Only successful runs
86
+ scitex verify list --no-verify # Skip verification (faster)
87
+ """
88
+ try:
89
+ from scitex.verify import format_list, get_db
90
+
91
+ db = get_db()
92
+ status_filter = None if filter_status == "all" else filter_status
93
+ runs = db.list_runs(status=status_filter, limit=limit)
94
+
95
+ if as_json:
96
+ import json
97
+
98
+ output = []
99
+ for run in runs:
100
+ output.append(
101
+ {
102
+ "session_id": run["session_id"],
103
+ "script_path": run.get("script_path"),
104
+ "status": run.get("status"),
105
+ "started_at": run.get("started_at"),
106
+ "finished_at": run.get("finished_at"),
107
+ }
108
+ )
109
+ click.echo(json.dumps(output, indent=2))
110
+ else:
111
+ if not runs:
112
+ click.echo("No tracked runs found.")
113
+ click.echo(
114
+ "\nTo start tracking, use @stx.session decorator with stx.io."
115
+ )
116
+ return
117
+
118
+ output = format_list(runs, verify=not no_verify)
119
+ click.echo(output)
120
+ click.echo(f"\nShowing {len(runs)} runs (use --limit to change)")
121
+
122
+ except Exception as e:
123
+ click.secho(f"Error: {e}", fg="red", err=True)
124
+ sys.exit(1)
125
+
126
+
127
+ @verify.command("run")
128
+ @click.argument("targets", nargs=-1, required=True)
129
+ @click.option("--rerun", is_flag=True, help="Re-execute script and compare (thorough)")
130
+ @click.option("-v", "--verbose", is_flag=True, help="Show detailed file information")
131
+ @click.option("--json", "as_json", is_flag=True, help="Output as JSON")
132
+ def verify_run_cmd(targets, rerun, verbose, as_json):
133
+ """
134
+ Verify session run(s).
135
+
136
+ TARGETS can be (one or multiple):
137
+ - A session ID: 2025Y-11M-18D-09h12m03s_HmH5
138
+ - A script path: ./script.py (latest run of this script)
139
+ - An artifact path: ./results/figure3.png (session that produced it)
140
+
141
+ \b
142
+ Examples:
143
+ scitex verify run 2025Y-11M-18D-09h12m03s_HmH5
144
+ scitex verify run ./results/figure3.png
145
+ scitex verify run ./script.py --rerun
146
+ scitex verify run file1.csv file2.csv --rerun
147
+ """
148
+ try:
149
+ from scitex.verify import format_run_verification, verify_by_rerun, verify_run
150
+
151
+ results = []
152
+ for target in targets:
153
+ if rerun:
154
+ verification = verify_by_rerun(target)
155
+ else:
156
+ verification = verify_run(target)
157
+ results.append(verification)
158
+
159
+ if as_json:
160
+ import json
161
+
162
+ output = [
163
+ {
164
+ "session_id": v.session_id,
165
+ "script_path": v.script_path,
166
+ "status": v.status.value,
167
+ "level": v.level.value,
168
+ "is_verified": v.is_verified,
169
+ }
170
+ for v in results
171
+ ]
172
+ click.echo(json.dumps(output, indent=2))
173
+ else:
174
+ all_verified = True
175
+ for v in results:
176
+ badge = "✓✓" if v.level.value == "rerun" else "✓"
177
+ if v.is_verified:
178
+ click.secho(f"{badge} {v.session_id}", fg="green")
179
+ else:
180
+ click.secho(f"✗ {v.session_id}", fg="red")
181
+ all_verified = False
182
+ if verbose:
183
+ click.echo(format_run_verification(v, verbose=True))
184
+
185
+ if not all_verified:
186
+ sys.exit(1)
187
+
188
+ except Exception as e:
189
+ click.secho(f"Error: {e}", fg="red", err=True)
190
+ sys.exit(1)
191
+
192
+
193
+ @verify.command("chain")
194
+ @click.argument("target_file", type=click.Path(exists=True))
195
+ @click.option("-v", "--verbose", is_flag=True, help="Show detailed information")
196
+ @click.option("--mermaid", is_flag=True, help="Output as Mermaid diagram")
197
+ @click.option("--json", "as_json", is_flag=True, help="Output as JSON")
198
+ def verify_chain_cmd(target_file, verbose, mermaid, as_json):
199
+ """
200
+ Verify the dependency chain for a target file.
201
+
202
+ Traces back through all sessions that contributed to producing
203
+ the target file and verifies each one.
204
+
205
+ \b
206
+ Examples:
207
+ scitex verify chain ./results/figure3.png
208
+ scitex verify chain ./results/figure3.png -v
209
+ scitex verify chain ./results/figure3.png --mermaid
210
+ """
211
+ try:
212
+ from scitex.verify import (
213
+ format_chain_verification,
214
+ generate_mermaid_dag,
215
+ verify_chain,
216
+ )
217
+
218
+ chain = verify_chain(target_file)
219
+
220
+ if mermaid:
221
+ output = generate_mermaid_dag(target_file=str(Path(target_file).resolve()))
222
+ click.echo(output)
223
+ elif as_json:
224
+ import json
225
+
226
+ output = {
227
+ "target_file": chain.target_file,
228
+ "status": chain.status.value,
229
+ "is_verified": chain.is_verified,
230
+ "runs": [
231
+ {
232
+ "session_id": r.session_id,
233
+ "script_path": r.script_path,
234
+ "status": r.status.value,
235
+ "is_verified": r.is_verified,
236
+ }
237
+ for r in chain.runs
238
+ ],
239
+ }
240
+ click.echo(json.dumps(output, indent=2))
241
+ else:
242
+ output = format_chain_verification(chain, verbose=verbose)
243
+ click.echo(output)
244
+
245
+ if chain.is_verified:
246
+ click.echo()
247
+ click.secho("✓ Chain fully verified!", fg="green")
248
+ else:
249
+ click.echo()
250
+ click.secho("✗ Chain verification failed", fg="red")
251
+ if chain.failed_runs:
252
+ click.echo(f" {len(chain.failed_runs)} run(s) have issues")
253
+ sys.exit(1)
254
+
255
+ except Exception as e:
256
+ click.secho(f"Error: {e}", fg="red", err=True)
257
+ sys.exit(1)
258
+
259
+
260
+ @verify.command("render")
261
+ @click.argument("output_path", type=click.Path())
262
+ @click.option("--session", "-s", help="Session ID to visualize")
263
+ @click.option("--file", "-f", "target_file", help="Target file to trace chain")
264
+ @click.option("--title", "-t", default="Verification DAG", help="Title for output")
265
+ @click.option("--plotly", "-p", is_flag=True, help="Use Plotly (interactive)")
266
+ def render_cmd(output_path, session, target_file, title, plotly):
267
+ """
268
+ Render verification DAG to file (HTML, PNG, SVG, or Mermaid).
269
+
270
+ The output format is determined by the file extension:
271
+ - .html: Interactive HTML (Mermaid.js or Plotly with --plotly)
272
+ - .png: PNG image
273
+ - .svg: SVG image
274
+ - .mmd: Raw Mermaid code
275
+
276
+ \b
277
+ Examples:
278
+ scitex verify render dag.html --file ./results/fig.png
279
+ scitex verify render dag.html --file ./results/fig.png --plotly
280
+ scitex verify render dag.png --session 2025Y-11M-18D-09h12m03s
281
+ """
282
+ try:
283
+ if not session and not target_file:
284
+ click.secho("Error: Specify --session or --file", fg="red", err=True)
285
+ sys.exit(1)
286
+
287
+ if plotly:
288
+ from scitex.verify import render_plotly_dag
289
+
290
+ result_path = render_plotly_dag(
291
+ output_path=output_path,
292
+ session_id=session,
293
+ target_file=target_file,
294
+ title=title,
295
+ )
296
+ else:
297
+ from scitex.verify import render_dag
298
+
299
+ result_path = render_dag(
300
+ output_path=output_path,
301
+ session_id=session,
302
+ target_file=target_file,
303
+ title=title,
304
+ )
305
+ click.secho(f"Rendered to: {result_path}", fg="green")
306
+
307
+ except Exception as e:
308
+ click.secho(f"Error: {e}", fg="red", err=True)
309
+ sys.exit(1)
310
+
311
+
312
+ @verify.command("status")
313
+ @click.option("--json", "as_json", is_flag=True, help="Output as JSON")
314
+ def status_cmd(as_json):
315
+ """
316
+ Show verification status (like git status).
317
+
318
+ Displays a summary of all tracked runs and highlights any
319
+ that have changed files (hash mismatches) or missing files.
320
+
321
+ \b
322
+ Examples:
323
+ scitex verify status
324
+ scitex verify status --json
325
+ """
326
+ try:
327
+ from scitex.verify import format_status, get_status
328
+
329
+ status = get_status()
330
+
331
+ if as_json:
332
+ import json
333
+
334
+ click.echo(json.dumps(status, indent=2))
335
+ else:
336
+ output = format_status(status)
337
+ click.echo(output)
338
+
339
+ except Exception as e:
340
+ click.secho(f"Error: {e}", fg="red", err=True)
341
+ sys.exit(1)
342
+
343
+
344
+ @verify.command("stats")
345
+ @click.option("--json", "as_json", is_flag=True, help="Output as JSON")
346
+ def stats_cmd(as_json):
347
+ """
348
+ Show database statistics.
349
+
350
+ \b
351
+ Examples:
352
+ scitex verify stats
353
+ scitex verify stats --json
354
+ """
355
+ try:
356
+ from scitex.verify import get_db
357
+
358
+ db = get_db()
359
+ db_stats = db.stats()
360
+
361
+ if as_json:
362
+ import json
363
+
364
+ click.echo(json.dumps(db_stats, indent=2))
365
+ else:
366
+ click.secho("Verification Database Statistics", fg="cyan", bold=True)
367
+ click.echo("=" * 40)
368
+ click.echo(f"Database path: {db_stats['db_path']}")
369
+ click.echo(f"Total runs: {db_stats['total_runs']}")
370
+ click.echo(f" Successful: {db_stats['success_runs']}")
371
+ click.echo(f" Failed: {db_stats['failed_runs']}")
372
+ click.echo(f"Total file records: {db_stats['total_file_records']}")
373
+ click.echo(f"Unique files tracked: {db_stats['unique_files']}")
374
+
375
+ except Exception as e:
376
+ click.secho(f"Error: {e}", fg="red", err=True)
377
+ sys.exit(1)
378
+
379
+
380
+ @verify.command("clear")
381
+ @click.option("--force", "-f", is_flag=True, help="Skip confirmation")
382
+ def clear_cmd(force):
383
+ """
384
+ Clear the verification database.
385
+
386
+ \b
387
+ Examples:
388
+ scitex verify clear
389
+ scitex verify clear -f
390
+ """
391
+ try:
392
+ from scitex.verify import get_db
393
+
394
+ db = get_db()
395
+ db_stats = db.stats()
396
+
397
+ if not force:
398
+ click.echo(f"This will delete {db_stats['total_runs']} runs and ")
399
+ click.echo(f"{db_stats['total_file_records']} file records.")
400
+ if not click.confirm("Are you sure?"):
401
+ click.echo("Cancelled.")
402
+ return
403
+
404
+ # Delete the database file
405
+ db_path = Path(db_stats["db_path"])
406
+ if db_path.exists():
407
+ db_path.unlink()
408
+ click.secho("Database cleared.", fg="green")
409
+ else:
410
+ click.echo("Database already empty.")
411
+
412
+ except Exception as e:
413
+ click.secho(f"Error: {e}", fg="red", err=True)
414
+ sys.exit(1)
415
+
416
+
417
+ @verify.group(invoke_without_command=True)
418
+ @click.pass_context
419
+ def mcp(ctx):
420
+ """
421
+ MCP (Model Context Protocol) server operations.
422
+
423
+ \b
424
+ Commands:
425
+ list-tools - List available MCP tools
426
+
427
+ \b
428
+ Examples:
429
+ scitex verify mcp list-tools
430
+ """
431
+ if ctx.invoked_subcommand is None:
432
+ click.echo(ctx.get_help())
433
+
434
+
435
+ @mcp.command("list-tools")
436
+ def list_tools():
437
+ """
438
+ List available MCP tools for verification.
439
+
440
+ \b
441
+ Example:
442
+ scitex verify mcp list-tools
443
+ """
444
+ click.secho("Verify MCP Tools", fg="cyan", bold=True)
445
+ click.echo()
446
+ tools = [
447
+ ("verify_list", "List all tracked runs with verification status"),
448
+ ("verify_run", "Verify a specific session run"),
449
+ ("verify_chain", "Verify dependency chain for a target file"),
450
+ ("verify_status", "Show verification status (like git status)"),
451
+ ("verify_stats", "Show database statistics"),
452
+ ]
453
+ for name, desc in tools:
454
+ click.echo(f" {name}: {desc}")
455
+
456
+
457
+ @verify.command("list-python-apis")
458
+ @click.option("-v", "--verbose", count=True, help="Verbosity: -v +doc, -vv full doc")
459
+ @click.option("-d", "--max-depth", type=int, default=5, help="Max recursion depth")
460
+ @click.option("--json", "as_json", is_flag=True, help="Output as JSON")
461
+ @click.pass_context
462
+ def list_python_apis(ctx, verbose, max_depth, as_json):
463
+ """List Python APIs (alias for: scitex introspect api scitex.verify)."""
464
+ from scitex.cli.introspect import api
465
+
466
+ ctx.invoke(
467
+ api,
468
+ dotted_path="scitex.verify",
469
+ verbose=verbose,
470
+ max_depth=max_depth,
471
+ as_json=as_json,
472
+ )
473
+
474
+
475
+ if __name__ == "__main__":
476
+ verify()
@@ -16,7 +16,7 @@ Usage:
16
16
  from scitex.dev.plt import PLOTTERS_STX, PLOTTERS_SNS, PLOTTERS_MPL
17
17
 
18
18
  @stx.session
19
- def main(plt=stx.INJECTED, rng=stx.INJECTED):
19
+ def main(plt=stx.INJECTED, rngg=stx.INJECTED):
20
20
  rng = rng("demo")
21
21
 
22
22
  # stx_* API (ArrayLike)
@@ -0,0 +1,90 @@
1
+ # Timestamp: "2025-12-21 12:37:14 (ywatanabe)"
2
+ # File: ./src/scitex/dev/plt/data/mpl/PLOTTING_FUNCTIONS.yaml
3
+
4
+ basic:
5
+ - plot # Line/marker plots
6
+ - scatter # Scatter plots
7
+ - bar # Vertical bar charts
8
+ - barh # Horizontal bar charts
9
+ - stem # Stem plots
10
+ - step # Step plots
11
+ - fill # Filled polygons
12
+ - fill_between # Fill between y-values
13
+ - fill_betweenx # Fill between x-values
14
+
15
+ statistical:
16
+ - hist # Histogram
17
+ - hist2d # 2D histogram
18
+ - boxplot # Box and whisker plots
19
+ - bxp # Box plot from precomputed stats
20
+ - violinplot # Violin plots
21
+ - violin # Single violin
22
+ - errorbar # Error bar plots
23
+ - pie # Pie charts
24
+ - ecdf # Empirical cumulative distribution
25
+
26
+ image:
27
+ - imshow # Display image/array
28
+ - matshow # Display matrix
29
+ - pcolor # Pseudocolor plot
30
+ - pcolormesh # Pseudocolor mesh (faster)
31
+ - pcolorfast # Pseudocolor (fastest)
32
+ - contour # Contour lines
33
+ - contourf # Filled contours
34
+ - hexbin # Hexagonal binning
35
+ - spy # Sparsity pattern
36
+
37
+ vector:
38
+ - quiver # Arrow/vector field
39
+ - streamplot # Streamlines
40
+ - barbs # Wind barbs
41
+
42
+ spectral:
43
+ - specgram # Spectrogram
44
+ - psd # Power spectral density
45
+ - csd # Cross spectral density
46
+ - cohere # Coherence
47
+ - acorr # Autocorrelation
48
+ - xcorr # Cross-correlation
49
+ - angle_spectrum # Phase angle spectrum
50
+ - magnitude_spectrum # Magnitude spectrum
51
+ - phase_spectrum # Phase spectrum
52
+
53
+ triangulation:
54
+ - tricontour # Triangular contour lines
55
+ - tricontourf # Triangular filled contours
56
+ - tripcolor # Triangular pseudocolor
57
+ - triplot # Triangular grid lines
58
+
59
+ composite:
60
+ - stackplot # Stacked area plots
61
+ - stairs # Stair/step plots
62
+ - eventplot # Event sequence plots
63
+ - broken_barh # Broken horizontal bars
64
+
65
+ log_scale:
66
+ - loglog # Log-log scale plot
67
+ - semilogx # Semi-log x scale
68
+ - semilogy # Semi-log y scale
69
+
70
+ annotation:
71
+ - annotate # Text with arrow annotation
72
+ - text # Text at position
73
+ - arrow # Arrow patch
74
+ - axhline # Horizontal line across axes
75
+ - axvline # Vertical line across axes
76
+ - hlines # Horizontal lines at y positions
77
+ - vlines # Vertical lines at x positions
78
+ - axhspan # Horizontal span (shaded region)
79
+ - axvspan # Vertical span (shaded region)
80
+ - axline # Infinite line
81
+
82
+ decoration:
83
+ - legend # Add legend
84
+ - grid # Add grid
85
+ - table # Add table
86
+ - clabel # Contour labels
87
+ - bar_label # Bar chart labels
88
+ - quiverkey # Quiver key/legend
89
+
90
+ # EOF