markfeyn 0.1.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 (87) hide show
  1. markfeyn/__init__.py +5 -0
  2. markfeyn/__main__.py +115 -0
  3. markfeyn/assets/feynman-diagrams-loader.js +55 -0
  4. markfeyn/assets/feynman-diagrams.js +216 -0
  5. markfeyn/core.py +72 -0
  6. markfeyn/mkdocs_plugin.py +21 -0
  7. markfeyn/properdocs_plugin.py +21 -0
  8. markfeyn/renderer/feynman-diagrams.js +101 -0
  9. markfeyn/renderer/geometry/metrics.js +47 -0
  10. markfeyn/renderer/geometry/paths.js +458 -0
  11. markfeyn/renderer/geometry/vertex-shapes.js +35 -0
  12. markfeyn/renderer/layout/coordinates.js +413 -0
  13. markfeyn/renderer/layout/crowding.js +44 -0
  14. markfeyn/renderer/layout/elk-compiler.js +242 -0
  15. markfeyn/renderer/layout/elk-options.js +74 -0
  16. markfeyn/renderer/layout/elk-runner.js +27 -0
  17. markfeyn/renderer/layout/external-order.js +189 -0
  18. markfeyn/renderer/layout/fallback.js +495 -0
  19. markfeyn/renderer/layout/incremental.js +157 -0
  20. markfeyn/renderer/layout/labels/boxes.js +371 -0
  21. markfeyn/renderer/layout/labels/geometry.js +608 -0
  22. markfeyn/renderer/layout/labels/placement.js +432 -0
  23. markfeyn/renderer/layout/labels/regions.js +187 -0
  24. markfeyn/renderer/layout/labels/scoring.js +192 -0
  25. markfeyn/renderer/layout/labels.js +11 -0
  26. markfeyn/renderer/layout/layout.js +239 -0
  27. markfeyn/renderer/layout/loop-candidates.js +655 -0
  28. markfeyn/renderer/layout/model.js +219 -0
  29. markfeyn/renderer/layout/multiloop.js +616 -0
  30. markfeyn/renderer/layout/normalization.js +74 -0
  31. markfeyn/renderer/layout/normalizers/alignment.js +57 -0
  32. markfeyn/renderer/layout/normalizers/edge-bounds.js +80 -0
  33. markfeyn/renderer/layout/normalizers/elk.js +107 -0
  34. markfeyn/renderer/layout/normalizers/process.js +419 -0
  35. markfeyn/renderer/layout/normalizers/spring.js +358 -0
  36. markfeyn/renderer/layout/normalizers/tikz-orientation.js +247 -0
  37. markfeyn/renderer/layout/options.js +80 -0
  38. markfeyn/renderer/layout/orientation.js +74 -0
  39. markfeyn/renderer/layout/parallel.js +36 -0
  40. markfeyn/renderer/layout/score.js +1029 -0
  41. markfeyn/renderer/layout/strategies.js +157 -0
  42. markfeyn/renderer/layout/symmetric-unclassified.js +255 -0
  43. markfeyn/renderer/layout/symmetric.js +432 -0
  44. markfeyn/renderer/layout/topology/biconnected.js +136 -0
  45. markfeyn/renderer/layout/topology/classification.js +120 -0
  46. markfeyn/renderer/layout/topology/cycles.js +249 -0
  47. markfeyn/renderer/layout/topology/fermion-flow.js +148 -0
  48. markfeyn/renderer/layout/topology/graph.js +98 -0
  49. markfeyn/renderer/layout/topology/parallel.js +41 -0
  50. markfeyn/renderer/layout/topology/regions.js +240 -0
  51. markfeyn/renderer/layout/topology.js +131 -0
  52. markfeyn/renderer/layout/validate.js +98 -0
  53. markfeyn/renderer/layout-engine.js +174 -0
  54. markfeyn/renderer/parser/braces.js +36 -0
  55. markfeyn/renderer/parser/constants.js +117 -0
  56. markfeyn/renderer/parser/directives.js +97 -0
  57. markfeyn/renderer/parser/edges.js +140 -0
  58. markfeyn/renderer/parser/feynman-parser.js +115 -0
  59. markfeyn/renderer/parser/index.js +56 -0
  60. markfeyn/renderer/parser/labels.js +125 -0
  61. markfeyn/renderer/parser/options.js +527 -0
  62. markfeyn/renderer/parser/vertices.js +293 -0
  63. markfeyn/renderer/render/braces.js +202 -0
  64. markfeyn/renderer/render/definitions.js +57 -0
  65. markfeyn/renderer/render/dom.js +15 -0
  66. markfeyn/renderer/render/edges.js +361 -0
  67. markfeyn/renderer/render/label-markup.js +423 -0
  68. markfeyn/renderer/render/labels.js +228 -0
  69. markfeyn/renderer/render/mathjax.js +201 -0
  70. markfeyn/renderer/render/paths.js +1 -0
  71. markfeyn/renderer/render/styles.js +203 -0
  72. markfeyn/renderer/render/svg-renderer.js +307 -0
  73. markfeyn/renderer/render/vertex-shapes.js +1 -0
  74. markfeyn/renderer/render/vertices.js +123 -0
  75. markfeyn/renderer/render/visual-defaults.js +60 -0
  76. markfeyn-0.1.0.dist-info/METADATA +458 -0
  77. markfeyn-0.1.0.dist-info/RECORD +87 -0
  78. markfeyn-0.1.0.dist-info/WHEEL +5 -0
  79. markfeyn-0.1.0.dist-info/entry_points.txt +5 -0
  80. markfeyn-0.1.0.dist-info/licenses/LICENSE +21 -0
  81. markfeyn-0.1.0.dist-info/licenses/THIRD_PARTY_NOTICES.md +15 -0
  82. markfeyn-0.1.0.dist-info/licenses/licenses/ELKJS-EPL-2.0.md +264 -0
  83. markfeyn-0.1.0.dist-info/top_level.txt +3 -0
  84. mkdocs_feynman_diagrams/__init__.py +5 -0
  85. mkdocs_feynman_diagrams/plugin.py +5 -0
  86. properdocs_feynman_diagrams/__init__.py +5 -0
  87. properdocs_feynman_diagrams/plugin.py +5 -0
markfeyn/__init__.py ADDED
@@ -0,0 +1,5 @@
1
+ """MarkFeyn plugins for MkDocs and ProperDocs."""
2
+
3
+ __all__ = ["__version__"]
4
+
5
+ __version__ = "0.1.0"
markfeyn/__main__.py ADDED
@@ -0,0 +1,115 @@
1
+ """CLI for MarkFeyn package utilities."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import argparse
6
+ import sys
7
+ from importlib import resources
8
+ from pathlib import Path
9
+
10
+ from markfeyn import __version__
11
+ from markfeyn.core import ASSET_NAME, read_bundled_asset
12
+
13
+
14
+ def get_asset_path() -> str:
15
+ """Return the filesystem path of the bundled asset.
16
+
17
+ Returns a string representation of the asset path. Note that in zipped
18
+ installs or other non-filesystem contexts, this may not be a real file path.
19
+ """
20
+ return str(resources.files("markfeyn").joinpath("assets", ASSET_NAME))
21
+
22
+
23
+ def copy_asset(dest: str) -> None:
24
+ """Copy the bundled asset to the specified destination.
25
+
26
+ If DEST is an existing directory, write feynman-diagrams.js inside it.
27
+ Otherwise, treat DEST as a file path and create parent directories as needed.
28
+
29
+ Args:
30
+ dest: Destination path (file or directory).
31
+
32
+ Raises:
33
+ SystemExit: If writing fails.
34
+ """
35
+ dest_path = Path(dest)
36
+
37
+ # If destination is an existing directory, write the asset inside it
38
+ if dest_path.is_dir():
39
+ target = dest_path / ASSET_NAME
40
+ else:
41
+ target = dest_path
42
+
43
+ # Create parent directories
44
+ target.parent.mkdir(parents=True, exist_ok=True)
45
+
46
+ # Write the asset
47
+ asset_bytes = read_bundled_asset()
48
+ target.write_bytes(asset_bytes)
49
+
50
+ # Print the path that was written
51
+ print(str(target.resolve()))
52
+
53
+
54
+ def main(argv: list[str] | None = None) -> int:
55
+ """Main CLI entry point.
56
+
57
+ Args:
58
+ argv: Command-line arguments (defaults to sys.argv[1:]).
59
+
60
+ Returns:
61
+ Exit code (0 for success, 2 for errors).
62
+ """
63
+ parser = argparse.ArgumentParser(
64
+ prog="python -m markfeyn",
65
+ description="MarkFeyn utility commands.",
66
+ )
67
+
68
+ parser.add_argument(
69
+ "--version",
70
+ action="version",
71
+ version=f"markfeyn {__version__}",
72
+ )
73
+
74
+ subparsers = parser.add_subparsers(dest="command", help="Available commands")
75
+
76
+ # copy-asset subcommand
77
+ copy_parser = subparsers.add_parser(
78
+ "copy-asset",
79
+ help="Copy the bundled Feynman diagram renderer asset to a destination.",
80
+ )
81
+ copy_parser.add_argument(
82
+ "dest",
83
+ help="Destination path (file path or existing directory).",
84
+ )
85
+
86
+ # asset-path subcommand
87
+ subparsers.add_parser(
88
+ "asset-path",
89
+ help="Print the filesystem path of the bundled asset.",
90
+ )
91
+
92
+ try:
93
+ args = parser.parse_args(argv)
94
+ except SystemExit as e:
95
+ return e.code if isinstance(e.code, int) else 2
96
+
97
+ # Handle commands
98
+ if args.command == "copy-asset":
99
+ try:
100
+ copy_asset(args.dest)
101
+ return 0
102
+ except Exception as e:
103
+ print(f"Error: {e}", file=sys.stderr)
104
+ return 2
105
+ elif args.command == "asset-path":
106
+ print(get_asset_path())
107
+ return 0
108
+ else:
109
+ # No command specified
110
+ parser.print_help()
111
+ return 2
112
+
113
+
114
+ if __name__ == "__main__":
115
+ sys.exit(main())
@@ -0,0 +1,55 @@
1
+ (function () {
2
+ "use strict";
3
+
4
+ var loaderSrc = document.currentScript && document.currentScript.src;
5
+ var rendererFile = "__MARKFEYN_RENDERER_FILE__";
6
+ var selector = "code.language-feynman, pre.language-feynman > code";
7
+ var requested = false;
8
+
9
+ function rendererUrl() {
10
+ return loaderSrc.slice(0, loaderSrc.lastIndexOf("/") + 1) + rendererFile;
11
+ }
12
+
13
+ function hasDiagrams(root) {
14
+ return Boolean(root && root.querySelector && root.querySelector(selector));
15
+ }
16
+
17
+ function ensureRenderer() {
18
+ if (requested) {
19
+ return;
20
+ }
21
+
22
+ requested = true;
23
+
24
+ if (window.FeynmanDiagrams) {
25
+ window.FeynmanDiagrams.renderAll(document);
26
+ return;
27
+ }
28
+
29
+ var script = document.createElement("script");
30
+ script.src = rendererUrl();
31
+ script.onerror = function () {
32
+ console.error("MarkFeyn: failed to load renderer from " + script.src);
33
+ };
34
+ document.head.appendChild(script);
35
+ }
36
+
37
+ function check() {
38
+ if (hasDiagrams(document)) {
39
+ ensureRenderer();
40
+ }
41
+ }
42
+
43
+ if (!loaderSrc) {
44
+ console.error("MarkFeyn: cannot determine the loader script location");
45
+ return;
46
+ }
47
+
48
+ if (window.document$ && typeof window.document$.subscribe === "function") {
49
+ window.document$.subscribe(check);
50
+ } else if (document.readyState === "loading") {
51
+ document.addEventListener("DOMContentLoaded", check);
52
+ } else {
53
+ check();
54
+ }
55
+ })();