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.
- markfeyn/__init__.py +5 -0
- markfeyn/__main__.py +115 -0
- markfeyn/assets/feynman-diagrams-loader.js +55 -0
- markfeyn/assets/feynman-diagrams.js +216 -0
- markfeyn/core.py +72 -0
- markfeyn/mkdocs_plugin.py +21 -0
- markfeyn/properdocs_plugin.py +21 -0
- markfeyn/renderer/feynman-diagrams.js +101 -0
- markfeyn/renderer/geometry/metrics.js +47 -0
- markfeyn/renderer/geometry/paths.js +458 -0
- markfeyn/renderer/geometry/vertex-shapes.js +35 -0
- markfeyn/renderer/layout/coordinates.js +413 -0
- markfeyn/renderer/layout/crowding.js +44 -0
- markfeyn/renderer/layout/elk-compiler.js +242 -0
- markfeyn/renderer/layout/elk-options.js +74 -0
- markfeyn/renderer/layout/elk-runner.js +27 -0
- markfeyn/renderer/layout/external-order.js +189 -0
- markfeyn/renderer/layout/fallback.js +495 -0
- markfeyn/renderer/layout/incremental.js +157 -0
- markfeyn/renderer/layout/labels/boxes.js +371 -0
- markfeyn/renderer/layout/labels/geometry.js +608 -0
- markfeyn/renderer/layout/labels/placement.js +432 -0
- markfeyn/renderer/layout/labels/regions.js +187 -0
- markfeyn/renderer/layout/labels/scoring.js +192 -0
- markfeyn/renderer/layout/labels.js +11 -0
- markfeyn/renderer/layout/layout.js +239 -0
- markfeyn/renderer/layout/loop-candidates.js +655 -0
- markfeyn/renderer/layout/model.js +219 -0
- markfeyn/renderer/layout/multiloop.js +616 -0
- markfeyn/renderer/layout/normalization.js +74 -0
- markfeyn/renderer/layout/normalizers/alignment.js +57 -0
- markfeyn/renderer/layout/normalizers/edge-bounds.js +80 -0
- markfeyn/renderer/layout/normalizers/elk.js +107 -0
- markfeyn/renderer/layout/normalizers/process.js +419 -0
- markfeyn/renderer/layout/normalizers/spring.js +358 -0
- markfeyn/renderer/layout/normalizers/tikz-orientation.js +247 -0
- markfeyn/renderer/layout/options.js +80 -0
- markfeyn/renderer/layout/orientation.js +74 -0
- markfeyn/renderer/layout/parallel.js +36 -0
- markfeyn/renderer/layout/score.js +1029 -0
- markfeyn/renderer/layout/strategies.js +157 -0
- markfeyn/renderer/layout/symmetric-unclassified.js +255 -0
- markfeyn/renderer/layout/symmetric.js +432 -0
- markfeyn/renderer/layout/topology/biconnected.js +136 -0
- markfeyn/renderer/layout/topology/classification.js +120 -0
- markfeyn/renderer/layout/topology/cycles.js +249 -0
- markfeyn/renderer/layout/topology/fermion-flow.js +148 -0
- markfeyn/renderer/layout/topology/graph.js +98 -0
- markfeyn/renderer/layout/topology/parallel.js +41 -0
- markfeyn/renderer/layout/topology/regions.js +240 -0
- markfeyn/renderer/layout/topology.js +131 -0
- markfeyn/renderer/layout/validate.js +98 -0
- markfeyn/renderer/layout-engine.js +174 -0
- markfeyn/renderer/parser/braces.js +36 -0
- markfeyn/renderer/parser/constants.js +117 -0
- markfeyn/renderer/parser/directives.js +97 -0
- markfeyn/renderer/parser/edges.js +140 -0
- markfeyn/renderer/parser/feynman-parser.js +115 -0
- markfeyn/renderer/parser/index.js +56 -0
- markfeyn/renderer/parser/labels.js +125 -0
- markfeyn/renderer/parser/options.js +527 -0
- markfeyn/renderer/parser/vertices.js +293 -0
- markfeyn/renderer/render/braces.js +202 -0
- markfeyn/renderer/render/definitions.js +57 -0
- markfeyn/renderer/render/dom.js +15 -0
- markfeyn/renderer/render/edges.js +361 -0
- markfeyn/renderer/render/label-markup.js +423 -0
- markfeyn/renderer/render/labels.js +228 -0
- markfeyn/renderer/render/mathjax.js +201 -0
- markfeyn/renderer/render/paths.js +1 -0
- markfeyn/renderer/render/styles.js +203 -0
- markfeyn/renderer/render/svg-renderer.js +307 -0
- markfeyn/renderer/render/vertex-shapes.js +1 -0
- markfeyn/renderer/render/vertices.js +123 -0
- markfeyn/renderer/render/visual-defaults.js +60 -0
- markfeyn-0.1.0.dist-info/METADATA +458 -0
- markfeyn-0.1.0.dist-info/RECORD +87 -0
- markfeyn-0.1.0.dist-info/WHEEL +5 -0
- markfeyn-0.1.0.dist-info/entry_points.txt +5 -0
- markfeyn-0.1.0.dist-info/licenses/LICENSE +21 -0
- markfeyn-0.1.0.dist-info/licenses/THIRD_PARTY_NOTICES.md +15 -0
- markfeyn-0.1.0.dist-info/licenses/licenses/ELKJS-EPL-2.0.md +264 -0
- markfeyn-0.1.0.dist-info/top_level.txt +3 -0
- mkdocs_feynman_diagrams/__init__.py +5 -0
- mkdocs_feynman_diagrams/plugin.py +5 -0
- properdocs_feynman_diagrams/__init__.py +5 -0
- properdocs_feynman_diagrams/plugin.py +5 -0
markfeyn/__init__.py
ADDED
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
|
+
})();
|