Put diagram generation in qed-model and fix things

This commit is contained in:
Anton Reinhard 2023-11-30 17:08:42 +01:00
parent 3ca24f76e1
commit f78cde613a
8 changed files with 906 additions and 1101 deletions

View File

@ -69,4 +69,58 @@ Order = [:function]
## QED-Model
*To be added*
### Feynman Diagrams
```@autodocs
Modules = [MetagraphOptimization]
Pages = ["models/qed/diagrams.jl"]
Order = [:type, :function, :constant]
```
### Types
```@autodocs
Modules = [MetagraphOptimization]
Pages = ["models/qed/types.jl"]
Order = [:type, :constant]
```
### Particle
```@autodocs
Modules = [MetagraphOptimization]
Pages = ["models/qed/particle.jl"]
Order = [:type, :constant, :function]
```
### Parse
```@autodocs
Modules = [MetagraphOptimization]
Pages = ["models/qed/parse.jl"]
Order = [:function]
```
### Properties
```@autodocs
Modules = [MetagraphOptimization]
Pages = ["models/qed/properties.jl"]
Order = [:function]
```
### Create
```@autodocs
Modules = [MetagraphOptimization]
Pages = ["models/qed/create.jl"]
Order = [:function]
```
### Compute
```@autodocs
Modules = [MetagraphOptimization]
Pages = ["models/qed/compute.jl"]
Order = [:function]
```
### Print
```@autodocs
Modules = [MetagraphOptimization]
Pages = ["models/qed/print.jl"]
Order = [:function]
```

View File

@ -11,27 +11,18 @@
},
{
"cell_type": "code",
"execution_count": 6,
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Found 1 NUMA nodes\n",
"CUDA is non-functional\n"
]
}
],
"outputs": [],
"source": [
"# Get machine and set dictionary caching strategy\n",
"machine = get_machine_info()\n",
"MetagraphOptimization.set_cache_strategy(machine.devices[1], MetagraphOptimization.Dictionary())"
"MetagraphOptimization.set_cache_strategy(machine.devices[1], MetagraphOptimization.LocalVariables())"
]
},
{
"cell_type": "code",
"execution_count": 4,
"execution_count": 12,
"metadata": {},
"outputs": [
{
@ -39,9 +30,9 @@
"output_type": "stream",
"text": [
"Graph:\n",
" Nodes: Total: 7854, ComputeTaskABC_P: 8, ComputeTaskABC_S2: 720, \n",
" ComputeTaskABC_U: 8, ComputeTaskABC_Sum: 1, ComputeTaskABC_S1: 1230, \n",
" ComputeTaskABC_V: 1956, DataTask: 3931\n",
" Nodes: Total: 7854, DataTask: 3931, ComputeTaskABC_S1: 1230, \n",
" ComputeTaskABC_Sum: 1, ComputeTaskABC_U: 8, ComputeTaskABC_P: 8, \n",
" ComputeTaskABC_V: 1956, ComputeTaskABC_S2: 720\n",
" Edges: 11241\n",
" Total Compute Effort: 33915.0\n",
" Total Data Transfer: 322464.0\n",
@ -59,18 +50,17 @@
},
{
"cell_type": "code",
"execution_count": 7,
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"compute__ae7097a4_7bfc_11ee_2cec_190d7ced64f1 (generic function with 1 method)"
"compute__8bced4be_8f2e_11ee_37d9_3f851690d249 (generic function with 1 method)"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
"output_type": "display_data"
}
],
"source": [
@ -79,22 +69,22 @@
},
{
"cell_type": "code",
"execution_count": 8,
"execution_count": 14,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" 0.140021 seconds (791.41 k allocations: 30.317 MiB, 9.74% gc time)\n",
" 0.184484 seconds (2.75 M allocations: 153.561 MiB, 15.46% gc time)\n",
"Graph:\n",
" Nodes: Total: 4998, ComputeTaskABC_P: 8, ComputeTaskABC_S2: 720, \n",
" ComputeTaskABC_U: 8, ComputeTaskABC_Sum: 1, ComputeTaskABC_S1: 516, \n",
" ComputeTaskABC_V: 1242, DataTask: 2503\n",
" Nodes: Total: 4998, DataTask: 2503, ComputeTaskABC_S1: 516, \n",
" ComputeTaskABC_Sum: 1, ComputeTaskABC_U: 8, ComputeTaskABC_P: 8, \n",
" ComputeTaskABC_V: 1242, ComputeTaskABC_S2: 720\n",
" Edges: 7671\n",
" Total Compute Effort: 21777.0\n",
" Total Data Transfer: 219648.0\n",
" Total Compute Intensity: 0.09914499562937062\n"
" Total Data Transfer: 253920.0\n",
" Total Compute Intensity: 0.0857632325141777\n"
]
}
],
@ -105,25 +95,24 @@
},
{
"cell_type": "code",
"execution_count": 9,
"execution_count": 15,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" 3.626740 seconds (1.52 M allocations: 114.358 MiB, 0.84% gc time)\n"
" 0.822702 seconds (574.85 k allocations: 48.098 MiB, 0.90% gc time)\n"
]
},
{
"data": {
"text/plain": [
"compute__bad8f2ac_7bfc_11ee_176b_b72dc8919aad (generic function with 1 method)"
"compute__8dffb17a_8f2e_11ee_2d70_13a063f6b2e1 (generic function with 1 method)"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
"output_type": "display_data"
}
],
"source": [
@ -132,14 +121,14 @@
},
{
"cell_type": "code",
"execution_count": 10,
"execution_count": 16,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" 2.130952 seconds (4.31 M allocations: 276.129 MiB, 4.50% gc time, 99.02% compilation time)\n"
" 0.054193 seconds (108.22 k allocations: 6.222 MiB, 92.26% compilation time)\n"
]
},
{
@ -148,309 +137,236 @@
"1000-element Vector{ABCProcessInput}:\n",
" Input for ABC Process: 'AB->ABBBBB':\n",
" 2 Incoming particles:\n",
" A: [4.694213004647641, 0.0, 0.0, 4.58646222408983]\n",
" B: [4.694213004647641, 0.0, 0.0, -4.58646222408983]\n",
" A: [5.53824935935883, 0.0, 0.0, 5.447220021849539]\n",
" B: [5.53824935935883, 0.0, 0.0, -5.447220021849539]\n",
" 6 Outgoing Particles:\n",
" A: [-1.1989656045893697, -0.40235742161696864, 0.06512533692021122, 0.5209469423550988]\n",
" B: [-1.2555060342925868, 0.3685683194051901, 0.4785890883121294, -0.4597882997907804]\n",
" B: [-2.189083660521547, 0.31663070338411387, 0.1742479621961443, -1.9134967776579581]\n",
" B: [-1.0637129314000269, -0.2948512505337184, 0.0500740340487307, -0.2050378784528044]\n",
" B: [-1.6149410305664367, 1.0344652685816964, -0.406159957064284, 0.6106965118475143]\n",
" B: [-2.0662167479253144, -1.0224556192203134, -0.3618764644129321, 1.4466795016989296]\n",
" A: [-1.3103925957044282, 0.7331872395687581, 0.24174619498761993, 0.34802873993327305]\n",
" B: [-1.7235347423723115, -0.9221216475500805, -0.5368654338299067, 0.9121618174658171]\n",
" B: [-3.2983236636246445, -1.4122494078132704, -0.264394674616116, -2.7954581120438933]\n",
" B: [-1.4663199369248787, -0.21617929792622487, -0.41022326537895987, 0.9669940750145931]\n",
" B: [-1.1596695896410607, 0.40971989086421784, 0.1871290088754596, -0.3767570864705371]\n",
" B: [-2.118258190450336, 1.4076432228565998, 0.7826081699619032, 0.945030566100747]\n",
"\n",
" Input for ABC Process: 'AB->ABBBBB':\n",
" 2 Incoming particles:\n",
" A: [5.621657834589244, 0.0, 0.0, 5.532001157736559]\n",
" B: [5.621657834589244, 0.0, 0.0, -5.532001157736559]\n",
" A: [6.406766539805908, 0.0, 0.0, 6.328242844232241]\n",
" B: [6.406766539805908, 0.0, 0.0, -6.328242844232241]\n",
" 6 Outgoing Particles:\n",
" A: [-2.058801595505931, 0.7220299456693885, 0.22719930902793095, 1.6327024349806234]\n",
" B: [-1.1826215869997767, 0.04638669502532437, -0.553508153090363, -0.30011800516629]\n",
" B: [-2.3776830758041227, -0.8637209881441633, -0.22710813067439403, 1.9636152272240621]\n",
" B: [-1.9086249240920268, 0.02598092498567318, -1.087715954825374, -1.2079106316365085]\n",
" B: [-2.6526208210236426, 0.3117066248738638, 1.6178469805428013, -1.8225826038033035]\n",
" B: [-1.0629636657529868, -0.24238320241008685, 0.023285949019398133, -0.2657064215985837]\n",
" A: [-1.6009185206411505, -0.5320720115654639, 1.09590848570997, -0.2807562558330809]\n",
" B: [-3.146359037361951, -0.17028519968266745, 1.7773008494544373, -2.389933018577465]\n",
" B: [-1.010135923448664, 0.06427364329577855, -0.1146419285663243, -0.05568402673627389]\n",
" B: [-3.6289281421436512, 0.6465018878980286, -0.8216898266580996, 3.328059584585744]\n",
" B: [-1.3592677632187082, 0.8038563415980269, -0.35192233894694247, -0.27852199472993183]\n",
" B: [-2.06792369279769, -0.8122746615437029, -1.5849552409930403, -0.323164288708993]\n",
"\n",
" Input for ABC Process: 'AB->ABBBBB':\n",
" 2 Incoming particles:\n",
" A: [6.176284774018432, 0.0, 0.0, 6.094792335245879]\n",
" B: [6.176284774018432, 0.0, 0.0, -6.094792335245879]\n",
" A: [4.592675400586894, 0.0, 0.0, 4.482484504731276]\n",
" B: [4.592675400586894, 0.0, 0.0, -4.482484504731276]\n",
" 6 Outgoing Particles:\n",
" A: [-3.2943110238771185, 1.9799744259594443, 2.3805040294128346, 0.5151572192390796]\n",
" B: [-1.0255775134941767, 0.18009906891836583, -0.12779691496180498, 0.05514988745120904]\n",
" B: [-1.7854209452644407, -0.56381615584479, -0.9572322565407875, 0.9764966468120639]\n",
" B: [-3.3312939695760786, -0.5949754252793171, -2.9420979921841868, -1.0428725518649993]\n",
" B: [-1.6551651824618003, -0.8748451354288965, 0.9749427327758187, -0.1539624566503731]\n",
" B: [-1.260800913363249, -0.12643677832480643, 0.6716804014981268, -0.34996874498697933]\n",
" A: [-1.1473149674649585, -0.35076892712815855, -0.170139004859497, -0.4053955023873595]\n",
" B: [-2.058220554606089, -0.8121547455466859, -1.4272449393744948, 0.7346076529133699]\n",
" B: [-2.0024960896606476, 1.3172479417787402, 0.7582221815549833, -0.8366286944540325]\n",
" B: [-1.0179814720237987, 0.162899519872391, -0.09860388948222289, -0.0052246328160273445]\n",
" B: [-1.834456765054589, -0.0990687609983643, 1.3606293642672649, 0.7100033355854413]\n",
" B: [-1.1248809523637056, -0.2181550279779225, -0.42286371210603335, -0.19736215884139197]\n",
"\n",
" Input for ABC Process: 'AB->ABBBBB':\n",
" 2 Incoming particles:\n",
" A: [4.747497785190141, 0.0, 0.0, 4.640984294348053]\n",
" B: [4.747497785190141, 0.0, 0.0, -4.640984294348053]\n",
" A: [4.037101162257922, 0.0, 0.0, 3.9112895308714055]\n",
" B: [4.037101162257922, 0.0, 0.0, -3.9112895308714055]\n",
" 6 Outgoing Particles:\n",
" A: [-1.3704329562088802, 0.8292801285050307, 0.2251475790952209, 0.3737506167990253]\n",
" B: [-1.352958681672649, 0.11120507604905326, 0.6088733084867489, -0.6688825902852584]\n",
" B: [-1.4224569379606473, -0.25277059018918374, -0.4925475402927904, -0.84669220478242]\n",
" B: [-2.4534584066229996, -0.23638988525842838, -1.4120549440785204, 1.7232756047945383]\n",
" B: [-1.4378719974624208, 0.5461758322111039, 0.8131489669135029, -0.3285674953530594]\n",
" B: [-1.457816590452685, -0.9975005613175758, 0.257432629875838, -0.25288393117282576]\n",
" A: [-1.7053110482506162, -0.23947337333507246, -1.2744970749813946, 0.47581034101100217]\n",
" B: [-1.3631569288619594, 0.7221467297219651, 0.42638713494656166, -0.3935669251960867]\n",
" B: [-1.0326521624735496, -0.11131042747240362, 0.20341304874809626, 0.11226579619908084]\n",
" B: [-1.195196392865049, -0.5445059949974184, -0.16637078706558947, 0.32299907142385453]\n",
" B: [-1.1830550739590457, 0.24824882865433953, -0.423307203181585, -0.39850073880304915]\n",
" B: [-1.5948307181056223, -0.07510576257141027, 1.2343748815339113, -0.11900754463480165]\n",
"\n",
" Input for ABC Process: 'AB->ABBBBB':\n",
" 2 Incoming particles:\n",
" A: [6.148648417619223, 0.0, 0.0, 6.066784763240853]\n",
" B: [6.148648417619223, 0.0, 0.0, -6.066784763240853]\n",
" A: [7.636716907339512, 0.0, 0.0, 7.57096064729207]\n",
" B: [7.636716907339512, 0.0, 0.0, -7.57096064729207]\n",
" 6 Outgoing Particles:\n",
" A: [-1.5381168736188293, 0.5769721565317305, 1.0069443436143835, 0.13773066601554382]\n",
" B: [-1.3178580311796126, 0.27781510267038506, -0.8083323925420551, 0.07853217328003184]\n",
" B: [-1.5330954954905804, 0.4994081736550063, -1.0290017953406905, 0.20525247761163526]\n",
" B: [-3.083592979398096, -2.1497728433794587, -1.2247634566690573, -1.5449844205264607]\n",
" B: [-3.1391572693216845, 0.49043306139044257, 2.931865230552653, 0.13397777318202247]\n",
" B: [-1.6854761862296446, 0.30514434913189475, -0.876711929615233, 0.989491330437227]\n",
" A: [-1.8228350224036067, -0.22313230508453247, 0.05829362440621317, -1.5064997001932685]\n",
" B: [-2.467409891320565, 1.6506915327402656, -0.771321444516658, 1.3298091083892047]\n",
" B: [-3.7191367050304223, 1.01401048234514, -0.8448690579747132, -3.3301586819963456]\n",
" B: [-1.086062092991359, 0.018065163049532738, 0.4218324659828878, 0.035523096142663795]\n",
" B: [-3.708627500490809, -3.0248517041401413, 1.3840072581447456, 1.2995052961646025]\n",
" B: [-2.4693626024422626, 0.5652168310897357, -0.24794284604247502, 2.171820881493144]\n",
"\n",
" Input for ABC Process: 'AB->ABBBBB':\n",
" 2 Incoming particles:\n",
" A: [7.422637433466136, 0.0, 0.0, 7.35496746890785]\n",
" B: [7.422637433466136, 0.0, 0.0, -7.35496746890785]\n",
" A: [4.844757462595395, 0.0, 0.0, 4.740429819264681]\n",
" B: [4.844757462595395, 0.0, 0.0, -4.740429819264681]\n",
" 6 Outgoing Particles:\n",
" A: [-3.3788591199517355, 2.3069724486616927, -0.5016400230094518, 2.2006645271171985]\n",
" B: [-2.193241133599192, -1.652465184572841, -0.691853387986234, -0.7752447184070871]\n",
" B: [-2.295315825041209, 0.334376552772819, 0.5374003175214306, 1.966689593293318]\n",
" B: [-2.3721558149969235, -2.0813404180022568, 0.4923496733367945, 0.22964554029865022]\n",
" B: [-1.5367714331999278, 0.9008878309070798, 0.1482895506792473, -0.7266895920420517]\n",
" B: [-3.068931540143284, 0.1915687702335065, 0.015453869458212284, -2.8950653502600274]\n",
" A: [-1.3377157678137663, -0.44312783214029056, -0.34462836811169034, -0.6887325226333468]\n",
" B: [-1.0287552354600262, 0.10884372468923921, -0.0798214909694111, 0.20029704855940197]\n",
" B: [-1.237602042094568, -0.1707812371296387, -0.708500409075891, -0.02279811352743621]\n",
" B: [-1.2285767946957649, -0.45314793159826366, 0.5376309116329622, -0.12251895938933055]\n",
" B: [-2.3944375695065316, 0.5631279933752329, -1.4234056115727505, 1.5460060162511446]\n",
" B: [-2.4624275156201336, 0.3950852828037212, 2.0187249680967807, -0.9122534692604332]\n",
"\n",
" Input for ABC Process: 'AB->ABBBBB':\n",
" 2 Incoming particles:\n",
" A: [6.716486802754837, 0.0, 0.0, 6.64162592830851]\n",
" B: [6.716486802754837, 0.0, 0.0, -6.64162592830851]\n",
" A: [6.914095647194839, 0.0, 0.0, 6.841397417089481]\n",
" B: [6.914095647194839, 0.0, 0.0, -6.841397417089481]\n",
" 6 Outgoing Particles:\n",
" A: [-1.3263331205917814, -0.5023870926274977, 0.418137178911541, 0.5761319775467438]\n",
" B: [-2.1603199304697136, -1.202627416523187, 1.024176720111292, -1.0824654936733602]\n",
" B: [-1.1665818595303201, 0.5747508534091106, 0.05041215840441908, 0.16743149576984034]\n",
" B: [-1.829760754209137, 0.5127529745920416, -0.17835468593467171, -1.4329334983509001]\n",
" B: [-2.891550940379351, -2.652621236308268, 0.3953841214715819, 0.41029113320086874]\n",
" B: [-4.05842700032937, 3.2701319174577996, -1.7097554929641623, 1.3615443855068068]\n",
" A: [-1.8747539146164607, -1.15195487912761, 1.0796978964166692, -0.14817101368775237]\n",
" B: [-2.0219963752169967, -0.8963094934108238, -1.380862038576808, 0.6150761447412909]\n",
" B: [-2.4839643051342004, -0.5463241040770312, 0.28470426735854887, -2.1887329948244236]\n",
" B: [-1.0870998264481033, 0.03306160941873628, 0.20168848226668348, -0.3741854069403313]\n",
" B: [-2.4584897964753116, 0.9082805780526032, -1.8726214974559325, -0.844089567623928]\n",
" B: [-3.9018870764986056, 1.6532462891441266, 1.6873928899908393, 2.9401028383351444]\n",
"\n",
" Input for ABC Process: 'AB->ABBBBB':\n",
" 2 Incoming particles:\n",
" A: [7.700331598721008, 0.0, 0.0, 7.635123229539995]\n",
" B: [7.700331598721008, 0.0, 0.0, -7.635123229539995]\n",
" A: [4.882838018892802, 0.0, 0.0, 4.77934170349275]\n",
" B: [4.882838018892802, 0.0, 0.0, -4.77934170349275]\n",
" 6 Outgoing Particles:\n",
" A: [-2.382743739041896, -1.410381415274026, 1.0613871843128353, 1.2496996576655786]\n",
" B: [-3.021630369232257, 0.25595209564405125, -2.8389223073732714, 0.07251720968504605]\n",
" B: [-2.7262381500229256, 1.0736489469437192, 2.293577756890956, 0.13839603484966886]\n",
" B: [-2.222260574660266, 1.5432031708495264, -0.7055857379280247, 1.0291330339668954]\n",
" B: [-1.650055097318715, -1.062833285640475, -0.34598865120359784, 0.6880109623839291]\n",
" B: [-3.397735267165956, -0.3995895125227963, 0.5355317553011019, -3.1777568985511193]\n",
" A: [-1.3368922715636002, -0.024254114235374817, -0.17993280734873465, 0.8685141729118435]\n",
" B: [-1.336032053759296, 0.44580739433740213, 0.4009862518446777, -0.6522633223307408]\n",
" B: [-1.1917158881102905, 0.11587748600254362, 0.21032579337862262, -0.6020981870524788]\n",
" B: [-1.8590179700604674, -0.4659878149612763, 1.4629321849562218, 0.3140582613697155]\n",
" B: [-1.2740128533657533, -0.3900331968801154, 0.6651639498517544, 0.16893719451393388]\n",
" B: [-2.7680050009261956, 0.3185902457368207, -2.559475372682542, -0.09714811941227354]\n",
"\n",
" Input for ABC Process: 'AB->ABBBBB':\n",
" 2 Incoming particles:\n",
" A: [4.9341647451125334, 0.0, 0.0, 4.8317679716550375]\n",
" B: [4.9341647451125334, 0.0, 0.0, -4.8317679716550375]\n",
" A: [4.215107110349817, 0.0, 0.0, 4.094768363622244]\n",
" B: [4.215107110349817, 0.0, 0.0, -4.094768363622244]\n",
" 6 Outgoing Particles:\n",
" A: [-1.834221818900379, 0.1070495973399568, 1.2695354794210922, 0.860923766155068]\n",
" B: [-1.5116322118250454, 0.39753882899610743, -0.756426277560466, -0.7448584495617266]\n",
" B: [-1.6588475476725886, 0.06712527283179799, 0.6875031760830096, -1.1289857249063835]\n",
" B: [-1.5718164783029667, 0.4294130824657117, -0.6215317131811225, -0.9486357444151968]\n",
" B: [-1.7838526603309615, -0.5732435925039472, -0.9425541080554634, 0.9824020820472578]\n",
" B: [-1.5079587731931232, -0.4278831891296266, 0.36347344329295106, 0.979154070680981]\n",
" A: [-1.3241447475687065, 0.7510738166043768, -0.3909856211208319, 0.19072933335458914]\n",
" B: [-1.7731907344857587, 0.036019000265901324, 1.4622797510086056, -0.06816114931690141]\n",
" B: [-1.019387957593508, 0.014655316462798782, 0.19300767940790514, -0.04104954903058491]\n",
" B: [-1.6169881803397028, 0.04956396056952302, -1.0323879934365006, -0.7391679242087841]\n",
" B: [-1.6537900060652204, -1.1032956801849205, -0.08849835738509954, 0.7140924778952892]\n",
" B: [-1.0427125946467377, 0.2519835862823207, -0.14341545847407883, -0.056443188693607704]\n",
"\n",
" Input for ABC Process: 'AB->ABBBBB':\n",
" 2 Incoming particles:\n",
" A: [7.099667747066588, 0.0, 0.0, 7.028889109862067]\n",
" B: [7.099667747066588, 0.0, 0.0, -7.028889109862067]\n",
" A: [7.2720657357811564, 0.0, 0.0, 7.202981331748843]\n",
" B: [7.2720657357811564, 0.0, 0.0, -7.202981331748843]\n",
" 6 Outgoing Particles:\n",
" A: [-3.851129225519823, 2.5555470019017212, -2.502060728335724, 1.019837214678957]\n",
" B: [-2.3860288930086897, 0.6059782347076652, 0.6711053982516709, 1.9686395814801452]\n",
" B: [-1.9543999030878276, -1.5857282951514855, 0.5255033921941499, -0.17026726032362857]\n",
" B: [-1.5523812781985644, -1.154244859738803, 0.03484928145183679, -0.2763909626783212]\n",
" B: [-3.2795110937910716, -1.0290377989842119, 1.3607888704851536, -2.616204860580336]\n",
" B: [-1.175885100527199, 0.6074857172651138, -0.09018621404708665, 0.07438628742318319]\n",
"\n",
" Input for ABC Process: 'AB->ABBBBB':\n",
" 2 Incoming particles:\n",
" A: [6.3653048194550985, 0.0, 0.0, 6.286263233796236]\n",
" B: [6.3653048194550985, 0.0, 0.0, -6.286263233796236]\n",
" 6 Outgoing Particles:\n",
" A: [-3.274142279992413, -2.62046758782023, -1.339558866223036, 1.028950598785383]\n",
" B: [-1.8502190446152251, -1.1967169760014287, 0.8476370040459147, 0.5221977611776395]\n",
" B: [-1.3090919645484567, 0.8304076910302604, -0.132118345313184, 0.08178985973111547]\n",
" B: [-1.7699077332157842, 0.8156249668276708, -0.2891156025546255, 1.1763254081859622]\n",
" B: [-1.6671330761442815, 1.2573648831500233, 0.2190135291489001, -0.3878135096217862]\n",
" B: [-2.8601155403940384, 0.913787022813704, 0.6941422808960306, -2.421450118258315]\n",
"\n",
" Input for ABC Process: 'AB->ABBBBB':\n",
" 2 Incoming particles:\n",
" A: [5.2620105860572215, 0.0, 0.0, 5.166116085395126]\n",
" B: [5.2620105860572215, 0.0, 0.0, -5.166116085395126]\n",
" 6 Outgoing Particles:\n",
" A: [-1.9479176369516882, 0.8861257045164052, 1.1018829783040076, 0.8916379636750793]\n",
" B: [-1.2433791528628988, 0.41365857789168176, 0.544699730060495, -0.27960776595565956]\n",
" B: [-1.074755543453127, 0.3002469943380598, 0.01041159782849033, 0.25464253219924826]\n",
" B: [-1.7453891507499704, 1.1576089006622574, 0.03134512003430503, -0.8398466551182168]\n",
" B: [-1.5208938996272057, 0.008686514238768405, -1.1440782944999142, -0.06424682441800389]\n",
" B: [-2.991685788469555, -2.7663266916471727, -0.544261131727384, 0.03742074961755215]\n",
"\n",
" Input for ABC Process: 'AB->ABBBBB':\n",
" 2 Incoming particles:\n",
" A: [4.439668869119513, 0.0, 0.0, 4.325582003318043]\n",
" B: [4.439668869119513, 0.0, 0.0, -4.325582003318043]\n",
" 6 Outgoing Particles:\n",
" A: [-1.1969832203303146, 0.48265768801558717, -0.02482335564392214, 0.4463117598342591]\n",
" B: [-1.7251727113760817, -1.0744400415092346, 0.6322269398265393, 0.6496834443295479]\n",
" B: [-1.419669052608684, -0.4173084301546306, -0.44626125418717505, -0.8013518491074973]\n",
" B: [-1.331289111993432, -0.7645577006899625, -0.3423664341778722, 0.2656453402118452]\n",
" B: [-1.5156451020746182, 0.6491857388484042, 0.8955487542892042, -0.2715333876518423]\n",
" B: [-1.6905785398558963, 1.1244627454898357, -0.7143246501067739, -0.2887553076163127]\n",
" A: [-1.110939233644008, -0.268184416567738, 0.24360224044987097, 0.3208131044822848]\n",
" B: [-2.6388927199644003, 0.8314814079287018, -0.21777668284358856, 2.2858186218857472]\n",
" B: [-3.473898607870094, 2.051862236379928, 2.4003392500206266, -1.046997796315806]\n",
" B: [-3.152819934613197, -1.9424358511984305, -2.028267056813039, -1.0263280422556738]\n",
" B: [-2.275152937944009, -1.7654922583464505, 0.7703768739716074, -0.6825521583027478]\n",
" B: [-1.8924280375266047, 1.0927688818039885, -1.1682746247854774, 0.14924627050619674]\n",
"\n",
" ⋮\n",
" Input for ABC Process: 'AB->ABBBBB':\n",
" 2 Incoming particles:\n",
" A: [5.750717080737416, 0.0, 0.0, 5.663104002460582]\n",
" B: [5.750717080737416, 0.0, 0.0, -5.663104002460582]\n",
" A: [6.22966038636724, 0.0, 0.0, 6.148875387375584]\n",
" B: [6.22966038636724, 0.0, 0.0, -6.148875387375584]\n",
" 6 Outgoing Particles:\n",
" A: [-1.0362067302993534, 0.23737037129807034, 0.1316212944823847, 0.007451817649030921]\n",
" B: [-3.597917991072113, -1.5787159301449987, 0.28387609057144564, 3.0613860010767477]\n",
" B: [-1.0798303035395174, -0.06880694215947386, -0.2669312876106363, -0.3000779512850572]\n",
" B: [-1.3394551212059678, -0.7053379424304421, 0.44160810884651497, -0.3187799976376953]\n",
" B: [-3.270241523195321, 1.927780354010675, 0.003047457202140131, -2.4450221348130854]\n",
" B: [-1.1777824921625586, 0.1877100894261692, -0.5932216634918489, -0.004957734989940532]\n",
" A: [-1.4304429070664482, -0.33884344128192095, 0.8653360836289696, -0.42725343187224885]\n",
" B: [-1.9749814666096197, 1.3609392980219706, -0.9441991051819204, -0.39608593805462516]\n",
" B: [-2.2715747343865793, 1.2408591011012648, 1.6172984936557957, 0.06830847338590983]\n",
" B: [-1.661609068228756, -0.4012681871023404, -1.1964016761233542, 0.4105503221395213]\n",
" B: [-1.746963024762814, 1.345279186098992, -0.06451410595930414, 0.48779263162695097]\n",
" B: [-3.373749571680263, -3.2069659568379674, -0.2775196900201868, -0.1433120572255088]\n",
"\n",
" Input for ABC Process: 'AB->ABBBBB':\n",
" 2 Incoming particles:\n",
" A: [6.84577391627276, 0.0, 0.0, 6.772342320993563]\n",
" B: [6.84577391627276, 0.0, 0.0, -6.772342320993563]\n",
" A: [4.358722688789774, 0.0, 0.0, 4.242459602373458]\n",
" B: [4.358722688789774, 0.0, 0.0, -4.242459602373458]\n",
" 6 Outgoing Particles:\n",
" A: [-1.0594956991232163, -0.09579189209396338, 0.21296650876679918, 0.2607687021353065]\n",
" B: [-1.8300488673592041, 0.8497425690197566, -0.8227483588311224, 0.9747315329664396]\n",
" B: [-2.860723394379955, 0.6743651794772785, 0.1320397309862766, 2.5906631300310776]\n",
" B: [-2.557528905485892, -1.3508678766931497, 1.2829278224554168, -1.4388211440218013]\n",
" B: [-3.790115184858299, 0.47588521284738383, -1.0334447791446917, -3.474262262286086]\n",
" B: [-1.5936357813389537, -0.553333192557306, 0.2282590757673212, 1.086920041175065]\n",
" A: [-1.0452779390743625, -0.2727572224505045, -0.0754336299872278, 0.11188938726967125]\n",
" B: [-1.7048247824379945, 0.4983084694471347, 0.872827621048126, 0.9467249611304639]\n",
" B: [-1.2899467751023526, 0.29644307338358544, -0.46128198344041976, -0.602746313628815]\n",
" B: [-2.1244189851466975, -1.8139000349895653, -0.4266469607437963, -0.20222526648433034]\n",
" B: [-1.4709803178987078, 1.0687795622551313, -0.1466043527374882, 0.0007118353293400601]\n",
" B: [-1.0819965779194327, 0.22312615235421782, 0.23713930586080637, -0.25435460361632983]\n",
"\n",
" Input for ABC Process: 'AB->ABBBBB':\n",
" 2 Incoming particles:\n",
" A: [6.25909007687458, 0.0, 0.0, 6.178689876537731]\n",
" B: [6.25909007687458, 0.0, 0.0, -6.178689876537731]\n",
" A: [4.946953336826144, 0.0, 0.0, 4.844826861378569]\n",
" B: [4.946953336826144, 0.0, 0.0, -4.844826861378569]\n",
" 6 Outgoing Particles:\n",
" A: [-2.15208406752572, -0.27987613820502405, 0.20983197963180572, -1.873260718983155]\n",
" B: [-3.1436326945514232, -2.0821664144960677, -1.9679549582157083, 0.8210741885063981]\n",
" B: [-2.206056617746511, 1.7689323832663284, -0.4273996865759156, -0.7449117612507478]\n",
" B: [-1.8709609004510535, 0.5332842722412897, 1.48760475220818, -0.055988188078690854]\n",
" B: [-1.0916331546903268, 0.018218872767661307, 0.4300802089857822, 0.07976234031782706]\n",
" B: [-2.0538127187841235, 0.04160702442581186, 0.2678377039658561, 1.7733241394883685]\n",
" A: [-1.0798321354813016, -0.05701177676898147, 0.3748038410417432, -0.1493625751924078]\n",
" B: [-2.535607459805834, 0.2786802518140389, -2.1413493157456154, 0.8753659894167939]\n",
" B: [-1.1465622434125131, 0.048325266102822936, -0.30303094935893476, 0.46951239643469417]\n",
" B: [-1.0565850692648957, -0.15422821749644713, -0.2946016814579471, -0.0761282786060691]\n",
" B: [-1.3897397103611828, 0.8757386144485694, 0.40183039146109456, 0.054687093694094344]\n",
" B: [-2.6855800553265587, -0.9915041381000028, 1.96234771405966, -1.1740746257471053]\n",
"\n",
" Input for ABC Process: 'AB->ABBBBB':\n",
" 2 Incoming particles:\n",
" A: [6.8752382625158255, 0.0, 0.0, 6.802124753807565]\n",
" B: [6.8752382625158255, 0.0, 0.0, -6.802124753807565]\n",
" A: [5.263219273050624, 0.0, 0.0, 5.1673472029864165]\n",
" B: [5.263219273050624, 0.0, 0.0, -5.1673472029864165]\n",
" 6 Outgoing Particles:\n",
" A: [-3.815955448364548, 1.7284392485789066, 3.22998101457395, -0.37581430702794955]\n",
" B: [-3.705003390432734, 0.8773209536576554, -3.1633610279519866, -1.3966048382509024]\n",
" B: [-1.4798429985544235, -0.876885056483666, -0.05155962504198175, 0.6467994303891397]\n",
" B: [-1.196598159149068, -0.6492448407423084, 0.0066213036625077295, -0.10141227532326653]\n",
" B: [-1.307725757451199, -0.47623875265044, -0.08939192779758245, -0.6894580410872709]\n",
" B: [-2.2453507710796776, -0.6033915523601473, 0.06771026255509205, 1.91649003130025]\n",
" A: [-2.399019535788919, -1.2110047848361276, -1.812263889139395, -0.06679625979229631]\n",
" B: [-2.017935306086244, -0.3374680394916718, 1.6282821358219384, 0.5539634536990483]\n",
" B: [-1.6695031594114513, 0.8270762338660977, -0.06260699981442713, 1.0484589005931164]\n",
" B: [-2.2597097606741916, 0.7611180237287621, 0.18055687193684328, -1.869327893238054]\n",
" B: [-1.073204850363539, -0.22248377596385552, 0.3188604064962904, -0.024447115284049005]\n",
" B: [-1.1070659337769053, 0.18276234269679548, -0.25282852530124955, 0.3581489140222342]\n",
"\n",
" Input for ABC Process: 'AB->ABBBBB':\n",
" 2 Incoming particles:\n",
" A: [6.591382068439754, 0.0, 0.0, 6.515083849970707]\n",
" B: [6.591382068439754, 0.0, 0.0, -6.515083849970707]\n",
" A: [4.459941032222146, 0.0, 0.0, 4.346386316343583]\n",
" B: [4.459941032222146, 0.0, 0.0, -4.346386316343583]\n",
" 6 Outgoing Particles:\n",
" A: [-2.166341377746586, 0.738656605699622, 1.1097711420427974, -1.3841348908550482]\n",
" B: [-1.9136122405957643, -1.3687809690739081, -0.8052302154690981, 0.37410528752561706]\n",
" B: [-1.020282522629639, 0.01566959851558055, -0.04103060943002397, -0.1976040959992001]\n",
" B: [-3.3680104240574718, -0.44221430614525714, -3.1855463435158966, -0.015336796039828009]\n",
" B: [-1.1380460439601876, 0.33787512483866744, -0.3053034033656307, 0.2962752606648943]\n",
" B: [-3.576471527889859, 0.7187939461652956, 3.227339429737853, 0.9266952347035636]\n",
" A: [-1.9579957774892203, 0.01711251988645602, -0.9941971785148113, 1.3583175610150744]\n",
" B: [-2.2086526478827153, 0.26811947256465357, -0.29730202477347406, -1.9281778894844153]\n",
" B: [-1.1393295497986875, -0.09576318262839165, 0.3418914140864091, 0.4147426875441645]\n",
" B: [-1.5437833884502452, -0.2526758526831343, 1.1436052762387854, 0.10765238541055888]\n",
" B: [-1.029324601398587, -0.04086809209820055, -0.11666716588470447, -0.21030384327692128]\n",
" B: [-1.040796099424839, 0.10407513495861721, -0.07733032115220424, 0.25776909879153836]\n",
"\n",
" Input for ABC Process: 'AB->ABBBBB':\n",
" 2 Incoming particles:\n",
" A: [7.366791305680796, 0.0, 0.0, 7.298603574756898]\n",
" B: [7.366791305680796, 0.0, 0.0, -7.298603574756898]\n",
" A: [5.6127229037846575, 0.0, 0.0, 5.522921183094041]\n",
" B: [5.6127229037846575, 0.0, 0.0, -5.522921183094041]\n",
" 6 Outgoing Particles:\n",
" A: [-1.1161936134323496, 0.1815174250263101, -0.30155987378038246, 0.34928677273057857]\n",
" B: [-1.1768168637671912, -0.488638136596838, -0.0387546058981897, 0.38030091090042567]\n",
" B: [-3.8756829146246745, -0.22123631639903027, -3.6727532274395425, -0.694878606198396]\n",
" B: [-1.4161987387916468, -0.42653096897021076, -0.26480462532703347, -0.8680833546784509]\n",
" B: [-3.4638938410201177, 2.8217659294852746, 1.2824429941168167, 1.179634497585545]\n",
" B: [-3.6847966397256138, -1.8668779325455054, 2.995429338328331, -0.346260220339702]\n",
" A: [-1.3401191006255044, 0.07455340773270878, 0.8329539127008466, 0.3107229836576332]\n",
" B: [-2.2407608326391446, 1.9616328357565815, 0.2748188274329855, 0.3122184153114968]\n",
" B: [-1.9353505325144305, 0.5041718248979296, 0.4986811623094062, -1.4975678792765024]\n",
" B: [-1.1665291383852119, -0.5919830552573446, -0.0003589073718047799, 0.10171609595055851]\n",
" B: [-1.3532183234755, -0.2764818233423043, 0.8493370095656062, 0.18271364627008788]\n",
" B: [-3.1894678799295257, -1.671893189787572, -2.45543200463704, 0.5901967380867258]\n",
"\n",
" Input for ABC Process: 'AB->ABBBBB':\n",
" 2 Incoming particles:\n",
" A: [4.762032860651893, 0.0, 0.0, 4.655851905497903]\n",
" B: [4.762032860651893, 0.0, 0.0, -4.655851905497903]\n",
" A: [4.8915558702989275, 0.0, 0.0, 4.788247991933574]\n",
" B: [4.8915558702989275, 0.0, 0.0, -4.788247991933574]\n",
" 6 Outgoing Particles:\n",
" A: [-2.656166654414924, 2.017338594394486, -1.384735065574992, 0.2609120345236529]\n",
" B: [-1.031990140619295, -0.035004877965791346, -0.20112979442869375, 0.15272561883031827]\n",
" B: [-1.7319386082994335, -1.0359644740176492, 0.8025718625008718, -0.5312883934487891]\n",
" B: [-1.7450617894727098, -0.49163856285061436, 1.1666756465784553, 0.6651316473275205]\n",
" B: [-1.0945973465763637, -0.42438631366397905, -0.017047995524507212, 0.1332252744613839]\n",
" B: [-1.2643111819210613, -0.030344365896452122, -0.3663346535511349, -0.6807061816940867]\n",
" A: [-1.7166600698631052, -0.6792891539923208, 0.6748994636717233, 1.0148885429772172]\n",
" B: [-2.5106233942424825, -0.7525848308448442, -1.9630692909736174, 0.9397897950798489]\n",
" B: [-1.0591214238384126, 0.22224342472975844, 0.26723772059994233, -0.030496742226701214]\n",
" B: [-2.107615205886531, 1.2019506202258687, 1.111787687227206, -0.8725163042331971]\n",
" B: [-1.1276654384352531, 0.3419112314983172, -0.15371273194576066, -0.3620751950278375]\n",
" B: [-1.2614262083320695, -0.33423129161677956, 0.06285715142050609, -0.689590096569332]\n",
"\n",
" Input for ABC Process: 'AB->ABBBBB':\n",
" 2 Incoming particles:\n",
" A: [6.12211537837656, 0.0, 0.0, 6.039892110473065]\n",
" B: [6.12211537837656, 0.0, 0.0, -6.039892110473065]\n",
" A: [7.730105975946025, 0.0, 0.0, 7.665150905191394]\n",
" B: [7.730105975946025, 0.0, 0.0, -7.665150905191394]\n",
" 6 Outgoing Particles:\n",
" A: [-2.09449973649211, -1.247911941781509, -0.776547530016726, 1.1075282684200622]\n",
" B: [-2.857971140758051, 1.4507115887866229, 2.2078617054725442, 0.43449006556414854]\n",
" B: [-2.068918524386865, -0.43350532192333185, 1.7407499017717505, -0.24957318745593]\n",
" B: [-1.0503370840395667, 0.28162676024293815, -0.11219953076948735, 0.10632790470480236]\n",
" B: [-1.6648953051752136, 0.3171875953909028, -1.2925202016854087, 0.025689195388605857]\n",
" B: [-2.5076089659013125, -0.36810868071562286, -1.7673443447726724, -1.4244622466216894]\n",
" A: [-1.5069861693238755, -0.14569717271308374, -1.0624243147247645, 0.3478997325070473]\n",
" B: [-1.3943234172777221, -0.04432112759455558, 0.08353004942916775, 0.9670554071303941]\n",
" B: [-2.959534510858716, -2.3414048211285614, 1.2349523309699664, 0.8669260203682391]\n",
" B: [-3.9504084752062516, -1.3395798731389539, -0.8585843373250325, -3.4747785282176675]\n",
" B: [-3.4956434330579116, 2.5236614743308494, -0.431975773525167, 2.1596418001942994]\n",
" B: [-2.153315946167574, 1.3473415202443053, 1.0345020451758309, -0.8667444319823133]\n",
"\n",
" Input for ABC Process: 'AB->ABBBBB':\n",
" 2 Incoming particles:\n",
" A: [7.431058837653249, 0.0, 0.0, 7.363466265874004]\n",
" B: [7.431058837653249, 0.0, 0.0, -7.363466265874004]\n",
" A: [5.140973354732315, 0.0, 0.0, 5.042777710158126]\n",
" B: [5.140973354732315, 0.0, 0.0, -5.042777710158126]\n",
" 6 Outgoing Particles:\n",
" A: [-1.4340725727125623, 0.9525417282027518, 0.38239995291064965, -0.05476016666222433]\n",
" B: [-3.5734117962040854, 2.3267511116139916, 2.49915109639257, -0.33127771922267657]\n",
" B: [-2.3529075757582945, 1.185265706342765, -1.375530715171772, 1.1132091075119688]\n",
" B: [-2.710381815585542, -2.1195780947035594, -1.2974231675570782, -0.4126153305389483]\n",
" B: [-2.374272199256637, -1.2400410368129877, 1.6839473809113144, -0.5136028830766439]\n",
" B: [-2.4170717157893766, -1.104939414642962, -1.8925445474856835, 0.1990469919885247]\n",
"\n",
" Input for ABC Process: 'AB->ABBBBB':\n",
" 2 Incoming particles:\n",
" A: [4.370360958267613, 0.0, 0.0, 4.254415930013168]\n",
" B: [4.370360958267613, 0.0, 0.0, -4.254415930013168]\n",
" 6 Outgoing Particles:\n",
" A: [-1.0037967551530176, -0.04979456910726583, -0.007092097585518878, 0.07126098999442977]\n",
" B: [-2.2427356029926337, 0.4432886498747459, -1.2315068062419472, -1.522087101319342]\n",
" B: [-1.576810353663218, -0.08400160217698217, 1.025238316808337, 0.6543401378482231]\n",
" B: [-1.1878570602356244, 0.3852696171578499, -0.47734716319323317, 0.18630996601909597]\n",
" B: [-1.6436772930583505, -1.0018521094453126, 0.4216069097815019, 0.7212593210074284]\n",
" B: [-1.0858448514323804, 0.3070900136969648, 0.26910084043086047, -0.11108331354983517]\n",
"\n",
" Input for ABC Process: 'AB->ABBBBB':\n",
" 2 Incoming particles:\n",
" A: [5.940760429560125, 0.0, 0.0, 5.855991332082674]\n",
" B: [5.940760429560125, 0.0, 0.0, -5.855991332082674]\n",
" 6 Outgoing Particles:\n",
" A: [-2.5515863925730233, 0.0574036477190863, 1.9321385747234918, 1.3319678930281418]\n",
" B: [-3.2707523737124977, -2.710802011299676, -1.41016923110446, -0.6006632045712658]\n",
" B: [-1.6965910302662786, 0.9846458960035911, 0.9504416414719069, -0.07452697242920955]\n",
" B: [-1.0283520810617242, 0.1620200166783027, 0.15874691422324994, -0.07782630689000514]\n",
" B: [-1.277724475991329, 0.26836143674120055, -0.33222621981983513, -0.6709602929248032]\n",
" B: [-2.0565145055153993, 1.2383710141574962, -1.298931679494354, 0.09200888378714224]\n",
"\n",
" Input for ABC Process: 'AB->ABBBBB':\n",
" 2 Incoming particles:\n",
" A: [6.732994664701373, 0.0, 0.0, 6.65831939417877]\n",
" B: [6.732994664701373, 0.0, 0.0, -6.65831939417877]\n",
" 6 Outgoing Particles:\n",
" A: [-1.602557260532173, -0.06659157948757613, 0.9308846463293637, -0.8349904850080558]\n",
" B: [-1.3205375883536927, 0.7078592481114431, -0.05631226213188625, -0.48947291677035515]\n",
" B: [-1.7625153098951976, 0.12706601232750347, 0.34097061443470383, 1.405010137407617]\n",
" B: [-2.7792473938949334, 1.6510422215054068, 1.7155538904747691, -1.0272051928194055]\n",
" B: [-2.722083339444658, -0.5204063912580275, -2.061236049180356, -1.3748530264647703]\n",
" B: [-3.279048437282091, -1.89896951119875, -0.8698608399265956, 2.3215114836549695]\n"
" A: [-2.1212395395513415, 0.5721186152245487, -1.464674439391297, 1.013442776314144]\n",
" B: [-1.4152359585953729, 0.6568206137784666, 0.5137348552056548, -0.5545773150462135]\n",
" B: [-1.6621060291271548, -0.07490000906447869, -1.013680695206552, 0.8540713605247167]\n",
" B: [-1.602034710373159, -1.201656230753467, -0.11487974312683813, 0.3306662379967043]\n",
" B: [-1.6826459861655199, -0.324056691191041, 0.7444127790391002, -1.082651555236741]\n",
" B: [-1.7986844856520843, 0.3716737020059716, 1.3350872434799315, -0.5609515045526104]\n"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
"output_type": "display_data"
}
],
"source": [
@ -459,149 +375,26 @@
},
{
"cell_type": "code",
"execution_count": 14,
"execution_count": 17,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Internal error: stack overflow in type inference of materialize(Base.Broadcast.Broadcasted{Base.Broadcast.DefaultArrayStyle{1}, Nothing, typeof(MetagraphOptimization.compute__bad8f2ac_7bfc_11ee_176b_b72dc8919aad), Tuple{Array{MetagraphOptimization.ABCProcessInput, 1}}}).\n",
"This might be caused by recursion over very long tuples or argument lists.\n"
]
},
{
"ename": "LoadError",
"evalue": "StackOverflowError:",
"output_type": "error",
"traceback": [
"StackOverflowError:",
"",
"Stacktrace:",
" [1] argtypes_to_type",
" @ ./compiler/typeutils.jl:71 [inlined]",
" [2] abstract_call_known(interp::Core.Compiler.NativeInterpreter, f::Any, arginfo::Core.Compiler.ArgInfo, si::Core.Compiler.StmtInfo, sv::Core.Compiler.InferenceState, max_methods::Int64)",
" @ Core.Compiler ./compiler/abstractinterpretation.jl:1948",
" [3] abstract_call(interp::Core.Compiler.NativeInterpreter, arginfo::Core.Compiler.ArgInfo, si::Core.Compiler.StmtInfo, sv::Core.Compiler.InferenceState, max_methods::Int64)",
" @ Core.Compiler ./compiler/abstractinterpretation.jl:2020",
" [4] abstract_apply(interp::Core.Compiler.NativeInterpreter, argtypes::Vector{Any}, si::Core.Compiler.StmtInfo, sv::Core.Compiler.InferenceState, max_methods::Int64)",
" @ Core.Compiler ./compiler/abstractinterpretation.jl:1566",
" [5] abstract_call_known(interp::Core.Compiler.NativeInterpreter, f::Any, arginfo::Core.Compiler.ArgInfo, si::Core.Compiler.StmtInfo, sv::Core.Compiler.InferenceState, max_methods::Int64)",
" @ Core.Compiler ./compiler/abstractinterpretation.jl:1855",
" [6] abstract_call(interp::Core.Compiler.NativeInterpreter, arginfo::Core.Compiler.ArgInfo, si::Core.Compiler.StmtInfo, sv::Core.Compiler.InferenceState, max_methods::Nothing)",
" @ Core.Compiler ./compiler/abstractinterpretation.jl:2020",
" [7] abstract_call(interp::Core.Compiler.NativeInterpreter, arginfo::Core.Compiler.ArgInfo, si::Core.Compiler.StmtInfo, sv::Core.Compiler.InferenceState)",
" @ Core.Compiler ./compiler/abstractinterpretation.jl:1999",
" [8] abstract_eval_statement_expr(interp::Core.Compiler.NativeInterpreter, e::Expr, vtypes::Vector{Core.Compiler.VarState}, sv::Core.Compiler.InferenceState, mi::Nothing)",
" @ Core.Compiler ./compiler/abstractinterpretation.jl:2183",
" [9] abstract_eval_statement(interp::Core.Compiler.NativeInterpreter, e::Any, vtypes::Vector{Core.Compiler.VarState}, sv::Core.Compiler.InferenceState)",
" @ Core.Compiler ./compiler/abstractinterpretation.jl:2396",
" [10] abstract_eval_basic_statement(interp::Core.Compiler.NativeInterpreter, stmt::Any, pc_vartable::Vector{Core.Compiler.VarState}, frame::Core.Compiler.InferenceState)",
" @ Core.Compiler ./compiler/abstractinterpretation.jl:2682",
" [11] typeinf_local(interp::Core.Compiler.NativeInterpreter, frame::Core.Compiler.InferenceState)",
" @ Core.Compiler ./compiler/abstractinterpretation.jl:2867",
" [12] typeinf_nocycle(interp::Core.Compiler.NativeInterpreter, frame::Core.Compiler.InferenceState)",
" @ Core.Compiler ./compiler/abstractinterpretation.jl:2955",
" [13] _typeinf(interp::Core.Compiler.NativeInterpreter, frame::Core.Compiler.InferenceState)",
" @ Core.Compiler ./compiler/typeinfer.jl:246",
" [14] typeinf(interp::Core.Compiler.NativeInterpreter, frame::Core.Compiler.InferenceState)",
" @ Core.Compiler ./compiler/typeinfer.jl:216",
" [15] typeinf_edge(interp::Core.Compiler.NativeInterpreter, method::Method, atype::Any, sparams::Core.SimpleVector, caller::Core.Compiler.InferenceState)",
" @ Core.Compiler ./compiler/typeinfer.jl:932",
" [16] abstract_call_method(interp::Core.Compiler.NativeInterpreter, method::Method, sig::Any, sparams::Core.SimpleVector, hardlimit::Bool, si::Core.Compiler.StmtInfo, sv::Core.Compiler.InferenceState)",
" @ Core.Compiler ./compiler/abstractinterpretation.jl:611",
" [17] abstract_call_gf_by_type(interp::Core.Compiler.NativeInterpreter, f::Any, arginfo::Core.Compiler.ArgInfo, si::Core.Compiler.StmtInfo, atype::Any, sv::Core.Compiler.InferenceState, max_methods::Int64)",
" @ Core.Compiler ./compiler/abstractinterpretation.jl:152",
" [18] abstract_call_known(interp::Core.Compiler.NativeInterpreter, f::Any, arginfo::Core.Compiler.ArgInfo, si::Core.Compiler.StmtInfo, sv::Core.Compiler.InferenceState, max_methods::Int64)",
" @ Core.Compiler ./compiler/abstractinterpretation.jl:1949",
"--- the last 16 lines are repeated 413 more times ---",
" [6627] abstract_call(interp::Core.Compiler.NativeInterpreter, arginfo::Core.Compiler.ArgInfo, si::Core.Compiler.StmtInfo, sv::Core.Compiler.InferenceState, max_methods::Int64)",
" @ Core.Compiler ./compiler/abstractinterpretation.jl:2020",
" [6628] abstract_apply(interp::Core.Compiler.NativeInterpreter, argtypes::Vector{Any}, si::Core.Compiler.StmtInfo, sv::Core.Compiler.InferenceState, max_methods::Int64)",
" @ Core.Compiler ./compiler/abstractinterpretation.jl:1566",
" [6629] abstract_call_known(interp::Core.Compiler.NativeInterpreter, f::Any, arginfo::Core.Compiler.ArgInfo, si::Core.Compiler.StmtInfo, sv::Core.Compiler.InferenceState, max_methods::Int64)",
" @ Core.Compiler ./compiler/abstractinterpretation.jl:1855",
" [6630] abstract_call(interp::Core.Compiler.NativeInterpreter, arginfo::Core.Compiler.ArgInfo, si::Core.Compiler.StmtInfo, sv::Core.Compiler.InferenceState, max_methods::Nothing)",
" @ Core.Compiler ./compiler/abstractinterpretation.jl:2020",
" [6631] abstract_call(interp::Core.Compiler.NativeInterpreter, arginfo::Core.Compiler.ArgInfo, si::Core.Compiler.StmtInfo, sv::Core.Compiler.InferenceState)",
" @ Core.Compiler ./compiler/abstractinterpretation.jl:1999",
" [6632] abstract_eval_statement_expr(interp::Core.Compiler.NativeInterpreter, e::Expr, vtypes::Vector{Core.Compiler.VarState}, sv::Core.Compiler.InferenceState, mi::Nothing)",
" @ Core.Compiler ./compiler/abstractinterpretation.jl:2183",
" [6633] abstract_eval_statement(interp::Core.Compiler.NativeInterpreter, e::Any, vtypes::Vector{Core.Compiler.VarState}, sv::Core.Compiler.InferenceState)",
" @ Core.Compiler ./compiler/abstractinterpretation.jl:2396",
" [6634] abstract_eval_basic_statement(interp::Core.Compiler.NativeInterpreter, stmt::Any, pc_vartable::Vector{Core.Compiler.VarState}, frame::Core.Compiler.InferenceState)",
" @ Core.Compiler ./compiler/abstractinterpretation.jl:2658",
" [6635] typeinf_local(interp::Core.Compiler.NativeInterpreter, frame::Core.Compiler.InferenceState)",
" @ Core.Compiler ./compiler/abstractinterpretation.jl:2867",
" [6636] typeinf_nocycle(interp::Core.Compiler.NativeInterpreter, frame::Core.Compiler.InferenceState)",
" @ Core.Compiler ./compiler/abstractinterpretation.jl:2955",
" [6637] _typeinf(interp::Core.Compiler.NativeInterpreter, frame::Core.Compiler.InferenceState)",
" @ Core.Compiler ./compiler/typeinfer.jl:246",
" [6638] typeinf(interp::Core.Compiler.NativeInterpreter, frame::Core.Compiler.InferenceState)",
" @ Core.Compiler ./compiler/typeinfer.jl:216",
" [6639] typeinf_edge(interp::Core.Compiler.NativeInterpreter, method::Method, atype::Any, sparams::Core.SimpleVector, caller::Core.Compiler.InferenceState)",
" @ Core.Compiler ./compiler/typeinfer.jl:932",
" [6640] abstract_call_method(interp::Core.Compiler.NativeInterpreter, method::Method, sig::Any, sparams::Core.SimpleVector, hardlimit::Bool, si::Core.Compiler.StmtInfo, sv::Core.Compiler.InferenceState)",
" @ Core.Compiler ./compiler/abstractinterpretation.jl:611",
" [6641] abstract_call_gf_by_type(interp::Core.Compiler.NativeInterpreter, f::Any, arginfo::Core.Compiler.ArgInfo, si::Core.Compiler.StmtInfo, atype::Any, sv::Core.Compiler.InferenceState, max_methods::Int64)",
" @ Core.Compiler ./compiler/abstractinterpretation.jl:152",
" [6642] abstract_call_known(interp::Core.Compiler.NativeInterpreter, f::Any, arginfo::Core.Compiler.ArgInfo, si::Core.Compiler.StmtInfo, sv::Core.Compiler.InferenceState, max_methods::Int64)",
" @ Core.Compiler ./compiler/abstractinterpretation.jl:1949",
" [6643] abstract_call(interp::Core.Compiler.NativeInterpreter, arginfo::Core.Compiler.ArgInfo, si::Core.Compiler.StmtInfo, sv::Core.Compiler.InferenceState, max_methods::Nothing)",
" @ Core.Compiler ./compiler/abstractinterpretation.jl:2020",
" [6644] abstract_call(interp::Core.Compiler.NativeInterpreter, arginfo::Core.Compiler.ArgInfo, si::Core.Compiler.StmtInfo, sv::Core.Compiler.InferenceState)",
" @ Core.Compiler ./compiler/abstractinterpretation.jl:1999",
" [6645] abstract_eval_statement_expr(interp::Core.Compiler.NativeInterpreter, e::Expr, vtypes::Vector{Core.Compiler.VarState}, sv::Core.Compiler.InferenceState, mi::Nothing)",
" @ Core.Compiler ./compiler/abstractinterpretation.jl:2183",
" [6646] abstract_eval_statement(interp::Core.Compiler.NativeInterpreter, e::Any, vtypes::Vector{Core.Compiler.VarState}, sv::Core.Compiler.InferenceState)",
" @ Core.Compiler ./compiler/abstractinterpretation.jl:2396",
" [6647] abstract_eval_basic_statement(interp::Core.Compiler.NativeInterpreter, stmt::Any, pc_vartable::Vector{Core.Compiler.VarState}, frame::Core.Compiler.InferenceState)",
" @ Core.Compiler ./compiler/abstractinterpretation.jl:2682",
" [6648] typeinf_local(interp::Core.Compiler.NativeInterpreter, frame::Core.Compiler.InferenceState)",
" @ Core.Compiler ./compiler/abstractinterpretation.jl:2867",
" [6649] typeinf_nocycle(interp::Core.Compiler.NativeInterpreter, frame::Core.Compiler.InferenceState)",
" @ Core.Compiler ./compiler/abstractinterpretation.jl:2955",
" [6650] _typeinf(interp::Core.Compiler.NativeInterpreter, frame::Core.Compiler.InferenceState)",
" @ Core.Compiler ./compiler/typeinfer.jl:246",
" [6651] typeinf(interp::Core.Compiler.NativeInterpreter, frame::Core.Compiler.InferenceState)",
" @ Core.Compiler ./compiler/typeinfer.jl:216",
" [6652] typeinf",
" @ ./compiler/typeinfer.jl:12 [inlined]",
" [6653] typeinf_type(interp::Core.Compiler.NativeInterpreter, method::Method, atype::Any, sparams::Core.SimpleVector)",
" @ Core.Compiler ./compiler/typeinfer.jl:1079",
" [6654] return_type(interp::Core.Compiler.NativeInterpreter, t::DataType)",
" @ Core.Compiler ./compiler/typeinfer.jl:1140",
" [6655] return_type(f::Any, t::DataType)",
" @ Core.Compiler ./compiler/typeinfer.jl:1112",
" [6656] combine_eltypes(f::Function, args::Tuple{Vector{ABCProcessInput}})",
" @ Base.Broadcast ./broadcast.jl:730",
" [6657] copy(bc::Base.Broadcast.Broadcasted{Style}) where Style",
" @ Base.Broadcast ./broadcast.jl:895",
" [6658] materialize(bc::Base.Broadcast.Broadcasted)",
" @ Base.Broadcast ./broadcast.jl:873",
" [6659] var\"##core#302\"()",
" @ Main ~/.julia/packages/BenchmarkTools/0owsb/src/execution.jl:489",
" [6660] var\"##sample#303\"(::Tuple{}, __params::BenchmarkTools.Parameters)",
" @ Main ~/.julia/packages/BenchmarkTools/0owsb/src/execution.jl:495",
" [6661] _run(b::BenchmarkTools.Benchmark, p::BenchmarkTools.Parameters; verbose::Bool, pad::String, kwargs::Base.Pairs{Symbol, Integer, NTuple{4, Symbol}, NamedTuple{(:samples, :evals, :gctrial, :gcsample), Tuple{Int64, Int64, Bool, Bool}}})",
" @ BenchmarkTools ~/.julia/packages/BenchmarkTools/0owsb/src/execution.jl:99",
" [6662] #invokelatest#2",
" @ ./essentials.jl:821 [inlined]",
" [6663] invokelatest",
" @ ./essentials.jl:816 [inlined]",
" [6664] #run_result#45",
" @ ~/.julia/packages/BenchmarkTools/0owsb/src/execution.jl:34 [inlined]",
" [6665] run_result",
" @ ~/.julia/packages/BenchmarkTools/0owsb/src/execution.jl:34 [inlined]",
" [6666] run(b::BenchmarkTools.Benchmark, p::BenchmarkTools.Parameters; progressid::Nothing, nleaves::Float64, ndone::Float64, kwargs::Base.Pairs{Symbol, Integer, NTuple{5, Symbol}, NamedTuple{(:verbose, :samples, :evals, :gctrial, :gcsample), Tuple{Bool, Int64, Int64, Bool, Bool}}})",
" @ BenchmarkTools ~/.julia/packages/BenchmarkTools/0owsb/src/execution.jl:117",
" [6667] run (repeats 2 times)",
" @ ~/.julia/packages/BenchmarkTools/0owsb/src/execution.jl:117 [inlined]",
" [6668] #warmup#54",
" @ ~/.julia/packages/BenchmarkTools/0owsb/src/execution.jl:169 [inlined]",
" [6669] warmup(item::BenchmarkTools.Benchmark)",
" @ BenchmarkTools ~/.julia/packages/BenchmarkTools/0owsb/src/execution.jl:168"
]
"data": {
"text/plain": [
"BenchmarkTools.Trial: 231 samples with 1 evaluation.\n",
" Range \u001b[90m(\u001b[39m\u001b[36m\u001b[1mmin\u001b[22m\u001b[39m … \u001b[35mmax\u001b[39m\u001b[90m): \u001b[39m\u001b[36m\u001b[1m18.197 ms\u001b[22m\u001b[39m … \u001b[35m27.498 ms\u001b[39m \u001b[90m┊\u001b[39m GC \u001b[90m(\u001b[39mmin … max\u001b[90m): \u001b[39m0.00% … 8.36%\n",
" Time \u001b[90m(\u001b[39m\u001b[34m\u001b[1mmedian\u001b[22m\u001b[39m\u001b[90m): \u001b[39m\u001b[34m\u001b[1m21.868 ms \u001b[22m\u001b[39m\u001b[90m┊\u001b[39m GC \u001b[90m(\u001b[39mmedian\u001b[90m): \u001b[39m0.00%\n",
" Time \u001b[90m(\u001b[39m\u001b[32m\u001b[1mmean\u001b[22m\u001b[39m ± \u001b[32mσ\u001b[39m\u001b[90m): \u001b[39m\u001b[32m\u001b[1m21.644 ms\u001b[22m\u001b[39m ± \u001b[32m 1.609 ms\u001b[39m \u001b[90m┊\u001b[39m GC \u001b[90m(\u001b[39mmean ± σ\u001b[90m): \u001b[39m1.21% ± 2.71%\n",
"\n",
" \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[32m \u001b[39m\u001b[39m▃\u001b[34m█\u001b[39m\u001b[39m▁\u001b[39m \u001b[39m▅\u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \n",
" \u001b[39m▃\u001b[39m▃\u001b[39m▁\u001b[39m▅\u001b[39m▇\u001b[39m▃\u001b[39m▅\u001b[39m▅\u001b[39m▅\u001b[39m▃\u001b[39m▄\u001b[39m▃\u001b[39m▃\u001b[39m▅\u001b[39m▄\u001b[39m▅\u001b[39m▃\u001b[39m▅\u001b[39m▄\u001b[39m▃\u001b[39m▅\u001b[39m▄\u001b[39m▃\u001b[39m▅\u001b[39m▇\u001b[39m▅\u001b[39m▅\u001b[32m▆\u001b[39m\u001b[39m█\u001b[34m█\u001b[39m\u001b[39m█\u001b[39m█\u001b[39m█\u001b[39m▇\u001b[39m▆\u001b[39m▇\u001b[39m▄\u001b[39m▅\u001b[39m▄\u001b[39m▅\u001b[39m▅\u001b[39m▄\u001b[39m▃\u001b[39m▅\u001b[39m▃\u001b[39m▁\u001b[39m▁\u001b[39m▃\u001b[39m▄\u001b[39m▁\u001b[39m▄\u001b[39m▁\u001b[39m▃\u001b[39m▃\u001b[39m▁\u001b[39m▃\u001b[39m▁\u001b[39m▁\u001b[39m▃\u001b[39m \u001b[39m▃\n",
" 18.2 ms\u001b[90m Histogram: frequency by time\u001b[39m 25.6 ms \u001b[0m\u001b[1m<\u001b[22m\n",
"\n",
" Memory estimate\u001b[90m: \u001b[39m\u001b[33m6.78 MiB\u001b[39m, allocs estimate\u001b[90m: \u001b[39m\u001b[33m17003\u001b[39m."
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
@ -612,7 +405,7 @@
},
{
"cell_type": "code",
"execution_count": null,
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": []
@ -620,7 +413,7 @@
],
"metadata": {
"kernelspec": {
"display_name": "Julia 1.9.3",
"display_name": "Julia 1.9.4",
"language": "julia",
"name": "julia-1.9"
},
@ -628,7 +421,7 @@
"file_extension": ".jl",
"mimetype": "application/julia",
"name": "julia",
"version": "1.9.3"
"version": "1.9.4"
}
},
"nbformat": 4,

View File

@ -15,390 +15,25 @@
"metadata": {},
"outputs": [],
"source": [
"QEDParticleTypeIn = Union{Type{FermionStateful{Incoming}},Type{AntiFermionStateful{Incoming}},Type{PhotonStateful{Incoming}}};\n",
"QEDParticleTypeOut = Union{Type{FermionStateful{Outgoing}}, Type{AntiFermionStateful{Outgoing}},Type{PhotonStateful{Outgoing}}};\n",
"\n",
"PhotonTypes = Type{PhotonStateful}\n",
"FermionTypes = Union{Type{FermionStateful{Incoming}},Type{AntiFermionStateful{Outgoing}}};\n",
"AntifermionTypes = Union{Type{FermionStateful{Outgoing}},Type{AntiFermionStateful{Incoming}}};\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Feynman Diagram Generation\n",
"Data structure: Ve\n",
"\n"
"import MetagraphOptimization.gen_diagrams"
]
},
{
"cell_type": "code",
"execution_count": 83,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"gen_diagrams (generic function with 1 method)"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import MetagraphOptimization.QEDParticle\n",
"import MetagraphOptimization.caninteract\n",
"import MetagraphOptimization.interaction_result\n",
"import MetagraphOptimization.propagation_result\n",
"import MetagraphOptimization.direction\n",
"\n",
"import Base.copy\n",
"import Base.hash\n",
"import Base.==\n",
"import Base.show\n",
"\n",
"struct FeynmanParticle\n",
" particle::Type{<:QEDParticle}\n",
" id::Int\n",
"end\n",
"\n",
"show(io::IO, p::FeynmanParticle) = print(io, \"$(String(p.particle))_$(String(direction(p.particle)))_$(p.id)\")\n",
"\n",
"struct FeynmanVertex\n",
" in1::FeynmanParticle\n",
" in2::FeynmanParticle\n",
" out::FeynmanParticle\n",
"end\n",
"\n",
"show(io::IO, v::FeynmanVertex) = print(io, \"$(v.in1) + $(v.in2) -> $(v.out)\")\n",
"\n",
"function Base.hash(v::FeynmanVertex)\n",
" return hash(Set{FeynmanParticle}([v.in1, v.in2]))\n",
"end\n",
"\n",
"function ==(v1::FeynmanVertex, v2::FeynmanVertex)\n",
" return Set{FeynmanParticle}([v1.in1, v1.in2]) == Set{FeynmanParticle}([v2.in1, v2.in2])\n",
"end\n",
"\n",
"struct FeynmanTie\n",
" in1::FeynmanParticle\n",
" in2::FeynmanParticle\n",
"end\n",
"\n",
"show(io::IO, t::FeynmanTie) = print(io, \"$(t.in1) -- $(t.in2)\")\n",
"\n",
"function Base.hash(t::FeynmanTie)\n",
" return hash(Set{FeynmanParticle}([t.in1, t.in2]))\n",
"end\n",
"\n",
"function ==(t1::FeynmanTie, t2::FeynmanTie)\n",
" return Set{FeynmanParticle}([t1.in1, t1.in2]) == Set{FeynmanParticle}([t2.in1, t2.in2])\n",
"end\n",
"\n",
"struct FeynmanDiagram\n",
" vertices::Vector{Set{FeynmanVertex}}\n",
" ties::Vector{Set{FeynmanTie}}\n",
" particles::Vector{FeynmanParticle}\n",
"end\n",
"\n",
"function FeynmanDiagram(pd::QEDProcessDescription)\n",
" parts = Vector{FeynmanParticle}()\n",
" for (type, n) in pd.inParticles\n",
" for i in 1:n\n",
" push!(parts, FeynmanParticle(type, i))\n",
" end\n",
" end\n",
" for (type, n) in pd.outParticles\n",
" for i in 1:n\n",
" push!(parts, FeynmanParticle(type, i))\n",
" end\n",
" end\n",
" return FeynmanDiagram([], [], parts)\n",
"end\n",
"\n",
"function ==(d1::FeynmanDiagram, d2::FeynmanDiagram)\n",
" return d1.vertices == d2.vertices && d1.ties == d2.ties && d1.particles == d2.particles\n",
"end\n",
"\n",
"function Base.hash(d::FeynmanDiagram)\n",
" return hash((d.vertices, d.ties, d.particles))\n",
"end\n",
"\n",
"function show(io::IO, d::FeynmanDiagram)\n",
" print(io, \"Initial Particles: [\")\n",
" first = true\n",
" for p in d.particles\n",
" if first\n",
" first = false\n",
" print(io, \"$p\")\n",
" else\n",
" print(io, \", $p\")\n",
" end\n",
" end\n",
" print(io, \"]\\n\")\n",
" for l in eachindex(d.vertices)\n",
" print(io, \"Virtuality Level $l:\\n\")\n",
" print(io, \" Vertices: [\")\n",
" first = true\n",
" for v in d.vertices[l]\n",
" if first\n",
" first = false\n",
" print(io, \"$v\")\n",
" else\n",
" print(io, \", $v\")\n",
" end\n",
" end\n",
" print(io, \"]\\n Ties: [\")\n",
" first = true\n",
" for t in d.ties[l]\n",
" if first\n",
" first = false\n",
" print(io, \"$t\")\n",
" else\n",
" print(io, \", $t\")\n",
" end\n",
" end\n",
" print(io, \"]\\n\")\n",
" end\n",
"end\n",
"\n",
"copy(fd::FeynmanDiagram) = FeynmanDiagram(deepcopy(fd.vertices), deepcopy(fd.ties), deepcopy(fd.particles))\n",
"\n",
"function id_for_type(d::FeynmanDiagram, t::Type{<:QEDParticle})\n",
" id = 1\n",
" for l in 0:length(d.vertices)\n",
" particles = get_particles(d, l)\n",
" for p in particles\n",
" if (p.particle <: t)\n",
" id = max(id, p.id + 1)\n",
" end\n",
" end\n",
" end\n",
" return id\n",
"end\n",
"\n",
"function can_apply_vertex(particles::Vector{FeynmanParticle}, vertex::FeynmanVertex)\n",
" return vertex.in1 in particles && vertex.in2 in particles && !(vertex.out in particles)\n",
"end\n",
"\n",
"function apply_vertex!(particles::Vector{FeynmanParticle}, vertex::FeynmanVertex)\n",
" @assert can_apply_vertex(particles, vertex)\n",
" length_before = length(particles)\n",
" filter!(x -> x != vertex.in1 && x != vertex.in2, particles)\n",
" push!(particles, vertex.out)\n",
" @assert length(particles) == length_before - 1\n",
" return nothing\n",
"end\n",
"\n",
"function can_apply_tie(particles::Vector{FeynmanParticle}, tie::FeynmanTie)\n",
" return tie.in1 in particles && tie.in2 in particles\n",
"end\n",
"\n",
"function apply_tie!(particles::Vector{FeynmanParticle}, tie::FeynmanTie)\n",
" @assert can_apply_tie(particles, tie)\n",
" @assert can_tie(tie.in1.particle, tie.in2.particle)\n",
" length_before = length(particles)\n",
" filter!(x -> x != tie.in1 && x != tie.in2, particles)\n",
" @assert length(particles) == length_before - 2\n",
" return nothing\n",
"end\n",
"\n",
"function get_particles(fd::FeynmanDiagram, level::Int = -1)\n",
" if level == -1\n",
" level = length(fd.vertices)\n",
" end\n",
"\n",
" working_particles = copy(fd.particles)\n",
" for l in 1:length(fd.vertices)\n",
" if l > level\n",
" break\n",
" end\n",
" for v in fd.vertices[l]\n",
" apply_vertex!(working_particles, v)\n",
" end\n",
" for t in fd.ties[l]\n",
" apply_tie!(working_particles, t)\n",
" end\n",
" end\n",
"\n",
" return working_particles\n",
"end\n",
"\n",
"function add_vertex!(fd::FeynmanDiagram, vertex::FeynmanVertex)\n",
" for i in eachindex(fd.vertices)\n",
" if (can_apply_vertex(get_particles(fd, i - 1), vertex))\n",
" push!(fd.vertices[i], vertex)\n",
" return nothing\n",
" end\n",
" end\n",
"\n",
" if !can_apply_vertex(get_particles(fd), vertex)\n",
" @assert false \"Can't add vertex $vertex to diagram\"\n",
" end\n",
"\n",
" push!(fd.vertices, Set{FeynmanVertex}())\n",
" push!(fd.vertices[end], vertex)\n",
" push!(fd.ties, Set{FeynmanTie}())\n",
" return nothing\n",
"end\n",
"\n",
"function add_vertex(fd::FeynmanDiagram, vertex::FeynmanVertex)\n",
" newfd = copy(fd)\n",
" add_vertex!(newfd, vertex)\n",
" return newfd\n",
"end\n",
"\n",
"function add_tie!(fd::FeynmanDiagram, tie::FeynmanTie)\n",
" for i in eachindex(fd.ties)\n",
" if (can_apply_tie(get_particles(fd, i - 1), tie))\n",
" push!(fd.ties[i], tie)\n",
" return nothing\n",
" end\n",
" end\n",
"\n",
" if !can_apply_tie(get_particles(fd), tie)\n",
" @assert false \"Can't add tie $tie to diagram\"\n",
" end\n",
"\n",
" push!(fd.ties, Set{FeynmanTie}())\n",
" push!(fd.ties[end], tie)\n",
" push!(fd.vertices, Set{FeynmanVertex}())\n",
" return nothing\n",
"end\n",
"\n",
"function add_tie(fd::FeynmanDiagram, tie::FeynmanTie)\n",
" newfd = copy(fd)\n",
" add_tie!(newfd, tie)\n",
" return newfd\n",
"end\n",
"\n",
"# whether the diagram is connected and fully constructed\n",
"function isvalid(fd::FeynmanDiagram)\n",
" @assert length(fd.vertices) == length(fd.ties)\n",
"\n",
" if get_particles(fd) != []\n",
" return false\n",
" end\n",
"\n",
" return true\n",
"end\n",
"\n",
"\n",
"function possible_vertices(fd::FeynmanDiagram)\n",
" possibilities = Vector{FeynmanVertex}()\n",
" \n",
" particles = get_particles(fd)\n",
" for i in 1:length(particles)\n",
" for j in i+1:length(particles)\n",
" p1 = particles[i]\n",
" p2 = particles[j]\n",
" if (caninteract(p1.particle, p2.particle))\n",
" interaction_res = propagation_result(interaction_result(p1.particle, p2.particle))\n",
" v = FeynmanVertex(p1, p2, FeynmanParticle(interaction_res, id_for_type(fd, interaction_res)))\n",
" @assert !(v.out in particles) \"$v is in $fd\"\n",
" @assert can_apply_vertex(particles, v)\n",
" push!(possibilities, v)\n",
" end\n",
" end\n",
" end\n",
"\n",
" if (length(possibilities) == 0)\n",
" #println(\"No vertices found for $particles\")\n",
" end\n",
"\n",
" return possibilities\n",
"end\n",
"\n",
"function can_tie(p1::Type, p2::Type)\n",
" if p1 == propagation_result(p2)\n",
" return true\n",
" end\n",
" if (p1 <: PhotonStateful && p2 <: PhotonStateful)\n",
" return true\n",
" end\n",
" return false\n",
"end\n",
"\n",
"function possible_ties(fd::FeynmanDiagram)\n",
" possibilities = Vector{FeynmanTie}()\n",
"\n",
" particles = get_particles(fd)\n",
"\n",
" for i in 1:length(particles)\n",
" p1 = particles[i]\n",
" if p1 in fd.particles\n",
" continue\n",
" end\n",
" for j in i+1:length(particles)\n",
" p2 = particles[j]\n",
" if p2 in fd.particles\n",
" continue\n",
" end\n",
" if (can_tie(p1.particle, p2.particle))\n",
" t = FeynmanTie(p1, p2)\n",
" @assert can_apply_tie(particles, t)\n",
" push!(possibilities, t)\n",
" end\n",
" end\n",
" end\n",
" \n",
" return possibilities\n",
"end\n",
"\n",
"function gen_diagrams(fd::FeynmanDiagram)\n",
" working = Deque{FeynmanDiagram}()\n",
" results = Set{FeynmanDiagram}()\n",
"\n",
" push!(working, fd)\n",
"\n",
" while !isempty(working)\n",
" d = pop!(working)\n",
" if (isvalid(d))\n",
" push!(results, d)\n",
" continue\n",
" end\n",
"\n",
" possibilities = possible_vertices(d)\n",
" for v in possibilities\n",
" newfd = add_vertex(d, v)\n",
" push!(working, newfd)\n",
" end\n",
" possibilities = possible_ties(d)\n",
" for t in possibilities\n",
" push!(working, add_tie(d, t))\n",
" end\n",
" end\n",
"\n",
" return results\n",
"end\n"
]
},
{
"cell_type": "code",
"execution_count": 84,
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Diagram 1: Initial Particles: [k_in_1, e_in_1, e_out_1, k_out_1]\n",
"Virtuality Level 1:\n",
" Vertices: [e_out_1 + k_out_1 -> e_out_2, k_in_1 + e_in_1 -> e_in_2]\n",
" Ties: []\n",
"Virtuality Level 2:\n",
" Vertices: []\n",
" Ties: [e_out_2 -- e_in_2]\n",
"Diagram 1: Initial Particles: [k_in_1, e_in_1, k_out_1, e_out_1]\n",
" Virtuality Level 1 Vertices: [k_out_1 + e_out_1 -> e_out_2, k_in_1 + e_in_1 -> e_in_2]\n",
" Tie: e_out_2 -- e_in_2\n",
"\n",
"Diagram 2: Initial Particles: [k_in_1, e_in_1, e_out_1, k_out_1]\n",
"Virtuality Level 1:\n",
" Vertices: [k_in_1 + e_out_1 -> e_out_2, e_in_1 + k_out_1 -> e_in_2]\n",
" Ties: []\n",
"Virtuality Level 2:\n",
" Vertices: []\n",
" Ties: [e_out_2 -- e_in_2]\n",
"Diagram 2: Initial Particles: [k_in_1, e_in_1, k_out_1, e_out_1]\n",
" Virtuality Level 1 Vertices: [k_in_1 + e_out_1 -> e_out_2, e_in_1 + k_out_1 -> e_in_2]\n",
" Tie: e_out_2 -- e_in_2\n",
"\n"
]
}
@ -418,22 +53,22 @@
},
{
"cell_type": "code",
"execution_count": 101,
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"BenchmarkTools.Trial: 1354 samples with 1 evaluation.\n",
" Range \u001b[90m(\u001b[39m\u001b[36m\u001b[1mmin\u001b[22m\u001b[39m … \u001b[35mmax\u001b[39m\u001b[90m): \u001b[39m\u001b[36m\u001b[1m3.042 ms\u001b[22m\u001b[39m … \u001b[35m 6.234 ms\u001b[39m \u001b[90m┊\u001b[39m GC \u001b[90m(\u001b[39mmin … max\u001b[90m): \u001b[39m0.00% … 34.23%\n",
" Time \u001b[90m(\u001b[39m\u001b[34m\u001b[1mmedian\u001b[22m\u001b[39m\u001b[90m): \u001b[39m\u001b[34m\u001b[1m3.667 ms \u001b[22m\u001b[39m\u001b[90m┊\u001b[39m GC \u001b[90m(\u001b[39mmedian\u001b[90m): \u001b[39m0.00%\n",
" Time \u001b[90m(\u001b[39m\u001b[32m\u001b[1mmean\u001b[22m\u001b[39m ± \u001b[32mσ\u001b[39m\u001b[90m): \u001b[39m\u001b[32m\u001b[1m3.692 ms\u001b[22m\u001b[39m ± \u001b[32m577.114 μs\u001b[39m \u001b[90m┊\u001b[39m GC \u001b[90m(\u001b[39mmean ± σ\u001b[90m): \u001b[39m2.87% ± 7.97%\n",
"BenchmarkTools.Trial: 3077 samples with 1 evaluation.\n",
" Range \u001b[90m(\u001b[39m\u001b[36m\u001b[1mmin\u001b[22m\u001b[39m … \u001b[35mmax\u001b[39m\u001b[90m): \u001b[39m\u001b[36m\u001b[1m1.461 ms\u001b[22m\u001b[39m … \u001b[35m 3.180 ms\u001b[39m \u001b[90m┊\u001b[39m GC \u001b[90m(\u001b[39mmin … max\u001b[90m): \u001b[39m0.00% … 47.86%\n",
" Time \u001b[90m(\u001b[39m\u001b[34m\u001b[1mmedian\u001b[22m\u001b[39m\u001b[90m): \u001b[39m\u001b[34m\u001b[1m1.557 ms \u001b[22m\u001b[39m\u001b[90m┊\u001b[39m GC \u001b[90m(\u001b[39mmedian\u001b[90m): \u001b[39m0.00%\n",
" Time \u001b[90m(\u001b[39m\u001b[32m\u001b[1mmean\u001b[22m\u001b[39m ± \u001b[32mσ\u001b[39m\u001b[90m): \u001b[39m\u001b[32m\u001b[1m1.624 ms\u001b[22m\u001b[39m ± \u001b[32m275.482 μs\u001b[39m \u001b[90m┊\u001b[39m GC \u001b[90m(\u001b[39mmean ± σ\u001b[90m): \u001b[39m3.59% ± 9.19%\n",
"\n",
" \u001b[39m▂\u001b[39m█\u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[34m \u001b[39m\u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m▂\u001b[39m▅\u001b[39m▂\u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \n",
" \u001b[39m█\u001b[39m█\u001b[39m▅\u001b[39m▄\u001b[39m▆\u001b[39m▇\u001b[39m▅\u001b[39m▄\u001b[39m▄\u001b[39m▅\u001b[39m▄\u001b[39m▄\u001b[39m▅\u001b[39m▄\u001b[34m▄\u001b[39m\u001b[39m▅\u001b[39m▄\u001b[39m▅\u001b[39m▆\u001b[39m█\u001b[39m█\u001b[39m█\u001b[39m▅\u001b[39m▃\u001b[39m▃\u001b[39m▃\u001b[39m▂\u001b[39m▂\u001b[39m▂\u001b[39m▂\u001b[39m▂\u001b[39m▁\u001b[39m▂\u001b[39m▂\u001b[39m▂\u001b[39m▂\u001b[39m▂\u001b[39m▁\u001b[39m▂\u001b[39m▁\u001b[39m▂\u001b[39m▁\u001b[39m▂\u001b[39m▂\u001b[39m▂\u001b[39m▂\u001b[39m▂\u001b[39m▃\u001b[39m▂\u001b[39m▂\u001b[39m▂\u001b[39m▂\u001b[39m▂\u001b[39m▂\u001b[39m▂\u001b[39m▃\u001b[39m▃\u001b[39m▂\u001b[39m▂\u001b[39m \u001b[39m▃\n",
" 3.04 ms\u001b[90m Histogram: frequency by time\u001b[39m 5.72 ms \u001b[0m\u001b[1m<\u001b[22m\n",
" \u001b[39m▃\u001b[39m▅\u001b[39m▇\u001b[39m█\u001b[34m█\u001b[39m\u001b[39m▇\u001b[39m▄\u001b[32m▃\u001b[39m\u001b[39m▁\u001b[39m▁\u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m▁\u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m▁\n",
" \u001b[39m█\u001b[39m█\u001b[39m█\u001b[39m█\u001b[34m█\u001b[39m\u001b[39m█\u001b[39m█\u001b[32m█\u001b[39m\u001b[39m█\u001b[39m█\u001b[39m▇\u001b[39m▅\u001b[39m▃\u001b[39m▄\u001b[39m▅\u001b[39m▃\u001b[39m▄\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▃\u001b[39m▁\u001b[39m▁\u001b[39m▃\u001b[39m▅\u001b[39m▆\u001b[39m▅\u001b[39m▅\u001b[39m▃\u001b[39m▃\u001b[39m▃\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▃\u001b[39m▄\u001b[39m▃\u001b[39m▁\u001b[39m▃\u001b[39m▁\u001b[39m▁\u001b[39m▄\u001b[39m▅\u001b[39m▆\u001b[39m▇\u001b[39m█\u001b[39m█\u001b[39m█\u001b[39m█\u001b[39m█\u001b[39m▇\u001b[39m▇\u001b[39m \u001b[39m█\n",
" 1.46 ms\u001b[90m \u001b[39m\u001b[90mHistogram: \u001b[39m\u001b[90m\u001b[1mlog(\u001b[22m\u001b[39m\u001b[90mfrequency\u001b[39m\u001b[90m\u001b[1m)\u001b[22m\u001b[39m\u001b[90m by time\u001b[39m 2.85 ms \u001b[0m\u001b[1m<\u001b[22m\n",
"\n",
" Memory estimate\u001b[90m: \u001b[39m\u001b[33m2.54 MiB\u001b[39m, allocs estimate\u001b[90m: \u001b[39m\u001b[33m24047\u001b[39m."
" Memory estimate\u001b[90m: \u001b[39m\u001b[33m2.16 MiB\u001b[39m, allocs estimate\u001b[90m: \u001b[39m\u001b[33m18208\u001b[39m."
]
},
"metadata": {},
@ -443,25 +78,11 @@
"name": "stdout",
"output_type": "stream",
"text": [
"Initial Diagram: Initial Particles: [k_in_1, k_in_2, e_in_1, e_out_1, k_out_1]\n",
"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Found 12 Diagrams for 2-Photon Compton\n",
"Diagram 1: Initial Particles: [k_in_1, k_in_2, e_in_1, e_out_1, k_out_1]\n",
"Virtuality Level 1:\n",
" Vertices: [k_in_2 + e_in_1 -> e_in_2, e_out_1 + k_out_1 -> e_out_2]\n",
" Ties: []\n",
"Virtuality Level 2:\n",
" Vertices: [k_in_1 + e_in_2 -> e_in_3]\n",
" Ties: []\n",
"Virtuality Level 3:\n",
" Vertices: []\n",
" Ties: [e_out_2 -- e_in_3]\n",
"Found 6 Diagrams for 2-Photon Compton\n",
"Diagram 1: Initial Particles: [k_in_1, k_in_2, e_in_1, k_out_1, e_out_1]\n",
" Virtuality Level 1 Vertices: [k_in_1 + e_in_1 -> e_in_2, k_out_1 + e_out_1 -> e_out_2]\n",
" Virtuality Level 2 Vertices: [k_in_2 + e_in_2 -> e_in_3]\n",
" Tie: e_out_2 -- e_in_3\n",
"\n"
]
}
@ -479,22 +100,22 @@
},
{
"cell_type": "code",
"execution_count": 100,
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"BenchmarkTools.Trial: 124 samples with 1 evaluation.\n",
" Range \u001b[90m(\u001b[39m\u001b[36m\u001b[1mmin\u001b[22m\u001b[39m … \u001b[35mmax\u001b[39m\u001b[90m): \u001b[39m\u001b[36m\u001b[1m35.054 ms\u001b[22m\u001b[39m … \u001b[35m48.433 ms\u001b[39m \u001b[90m┊\u001b[39m GC \u001b[90m(\u001b[39mmin … max\u001b[90m): \u001b[39m0.00% … 5.92%\n",
" Time \u001b[90m(\u001b[39m\u001b[34m\u001b[1mmedian\u001b[22m\u001b[39m\u001b[90m): \u001b[39m\u001b[34m\u001b[1m40.638 ms \u001b[22m\u001b[39m\u001b[90m┊\u001b[39m GC \u001b[90m(\u001b[39mmedian\u001b[90m): \u001b[39m3.66%\n",
" Time \u001b[90m(\u001b[39m\u001b[32m\u001b[1mmean\u001b[22m\u001b[39m ± \u001b[32mσ\u001b[39m\u001b[90m): \u001b[39m\u001b[32m\u001b[1m40.457 ms\u001b[22m\u001b[39m ± \u001b[32m 2.120 ms\u001b[39m \u001b[90m┊\u001b[39m GC \u001b[90m(\u001b[39mmean ± σ\u001b[90m): \u001b[39m3.49% ± 2.97%\n",
"BenchmarkTools.Trial: 500 samples with 1 evaluation.\n",
" Range \u001b[90m(\u001b[39m\u001b[36m\u001b[1mmin\u001b[22m\u001b[39m … \u001b[35mmax\u001b[39m\u001b[90m): \u001b[39m\u001b[36m\u001b[1m 9.130 ms\u001b[22m\u001b[39m … \u001b[35m 16.858 ms\u001b[39m \u001b[90m┊\u001b[39m GC \u001b[90m(\u001b[39mmin … max\u001b[90m): \u001b[39m0.00% … 11.40%\n",
" Time \u001b[90m(\u001b[39m\u001b[34m\u001b[1mmedian\u001b[22m\u001b[39m\u001b[90m): \u001b[39m\u001b[34m\u001b[1m 9.611 ms \u001b[22m\u001b[39m\u001b[90m┊\u001b[39m GC \u001b[90m(\u001b[39mmedian\u001b[90m): \u001b[39m0.00%\n",
" Time \u001b[90m(\u001b[39m\u001b[32m\u001b[1mmean\u001b[22m\u001b[39m ± \u001b[32mσ\u001b[39m\u001b[90m): \u001b[39m\u001b[32m\u001b[1m10.018 ms\u001b[22m\u001b[39m ± \u001b[32m802.928 μs\u001b[39m \u001b[90m┊\u001b[39m GC \u001b[90m(\u001b[39mmean ± σ\u001b[90m): \u001b[39m4.38% ± 5.79%\n",
"\n",
" \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m▄\u001b[39m \u001b[39m▅\u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m▁\u001b[32m▁\u001b[39m\u001b[34m \u001b[39m\u001b[39m \u001b[39m \u001b[39m \u001b[39m▄\u001b[39m█\u001b[39m█\u001b[39m▄\u001b[39m▅\u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \n",
" \u001b[39m▃\u001b[39m▁\u001b[39m▃\u001b[39m▁\u001b[39m▅\u001b[39m▆\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▆\u001b[39m▁\u001b[39m▁\u001b[39m▃\u001b[39m▁\u001b[39m▁\u001b[39m▃\u001b[39m▆\u001b[39m▅\u001b[39m▆\u001b[39m▆\u001b[39m▆\u001b[39m█\u001b[39m▃\u001b[39m█\u001b[39m▆\u001b[39m▁\u001b[39m▅\u001b[39m█\u001b[39m█\u001b[32m█\u001b[39m\u001b[34m▅\u001b[39m\u001b[39m▆\u001b[39m▅\u001b[39m▃\u001b[39m█\u001b[39m█\u001b[39m█\u001b[39m█\u001b[39m█\u001b[39m▃\u001b[39m▆\u001b[39m▅\u001b[39m▅\u001b[39m▁\u001b[39m▁\u001b[39m▃\u001b[39m▁\u001b[39m▁\u001b[39m▃\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▃\u001b[39m▁\u001b[39m▃\u001b[39m \u001b[39m▃\n",
" 35.1 ms\u001b[90m Histogram: frequency by time\u001b[39m 45.9 ms \u001b[0m\u001b[1m<\u001b[22m\n",
" \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m▃\u001b[39m▂\u001b[39m▅\u001b[39m█\u001b[39m▃\u001b[34m▂\u001b[39m\u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[32m \u001b[39m\u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \n",
" \u001b[39m▄\u001b[39m▃\u001b[39m▅\u001b[39m█\u001b[39m▇\u001b[39m█\u001b[39m█\u001b[39m█\u001b[39m█\u001b[39m█\u001b[34m█\u001b[39m\u001b[39m█\u001b[39m▆\u001b[39m▅\u001b[39m▄\u001b[39m▃\u001b[39m▃\u001b[39m▃\u001b[39m▃\u001b[32m▁\u001b[39m\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▂\u001b[39m▃\u001b[39m▂\u001b[39m▁\u001b[39m▃\u001b[39m▃\u001b[39m▄\u001b[39m▃\u001b[39m▅\u001b[39m█\u001b[39m▅\u001b[39m▅\u001b[39m▆\u001b[39m▅\u001b[39m▆\u001b[39m▅\u001b[39m▄\u001b[39m▄\u001b[39m▃\u001b[39m▃\u001b[39m▃\u001b[39m▃\u001b[39m▃\u001b[39m▁\u001b[39m▂\u001b[39m▃\u001b[39m▃\u001b[39m▁\u001b[39m▃\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m\u001b[39m \u001b[39m▃\n",
" 9.13 ms\u001b[90m Histogram: frequency by time\u001b[39m 12 ms \u001b[0m\u001b[1m<\u001b[22m\n",
"\n",
" Memory estimate\u001b[90m: \u001b[39m\u001b[33m26.97 MiB\u001b[39m, allocs estimate\u001b[90m: \u001b[39m\u001b[33m262392\u001b[39m."
" Memory estimate\u001b[90m: \u001b[39m\u001b[33m14.19 MiB\u001b[39m, allocs estimate\u001b[90m: \u001b[39m\u001b[33m117375\u001b[39m."
]
},
"metadata": {},
@ -504,28 +125,11 @@
"name": "stdout",
"output_type": "stream",
"text": [
"Initial Diagram: Initial Particles: [k_in_1, k_in_2, e_in_1, e_out_1, k_out_1]\n",
"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Found 72 Diagrams for 3-Photon Compton\n",
"Diagram 1: Initial Particles: [k_in_1, k_in_2, k_in_3, e_in_1, e_out_1, k_out_1]\n",
"Virtuality Level 1:\n",
" Vertices: [k_in_2 + e_out_1 -> e_out_2, k_in_3 + e_in_1 -> e_in_2]\n",
" Ties: []\n",
"Virtuality Level 2:\n",
" Vertices: [k_out_1 + e_in_2 -> e_in_3]\n",
" Ties: []\n",
"Virtuality Level 3:\n",
" Vertices: [k_in_1 + e_in_3 -> e_in_4]\n",
" Ties: []\n",
"Virtuality Level 4:\n",
" Vertices: []\n",
" Ties: [e_out_2 -- e_in_4]\n",
"Found 24 Diagrams for 3-Photon Compton\n",
"Diagram 1: Initial Particles: [k_in_1, k_in_2, k_in_3, e_in_1, k_out_1, e_out_1]\n",
" Virtuality Level 1 Vertices: [k_in_1 + e_in_1 -> e_in_2, k_in_2 + e_out_1 -> e_out_2]\n",
" Virtuality Level 2 Vertices: [k_in_3 + e_in_2 -> e_in_3, k_out_1 + e_out_2 -> e_out_3]\n",
" Tie: e_in_3 -- e_out_3\n",
"\n"
]
}
@ -543,22 +147,22 @@
},
{
"cell_type": "code",
"execution_count": 103,
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"BenchmarkTools.Trial: 10 samples with 1 evaluation.\n",
" Range \u001b[90m(\u001b[39m\u001b[36m\u001b[1mmin\u001b[22m\u001b[39m … \u001b[35mmax\u001b[39m\u001b[90m): \u001b[39m\u001b[36m\u001b[1m520.818 ms\u001b[22m\u001b[39m … \u001b[35m588.348 ms\u001b[39m \u001b[90m┊\u001b[39m GC \u001b[90m(\u001b[39mmin … max\u001b[90m): \u001b[39m3.87% … 6.33%\n",
" Time \u001b[90m(\u001b[39m\u001b[34m\u001b[1mmedian\u001b[22m\u001b[39m\u001b[90m): \u001b[39m\u001b[34m\u001b[1m553.318 ms \u001b[22m\u001b[39m\u001b[90m┊\u001b[39m GC \u001b[90m(\u001b[39mmedian\u001b[90m): \u001b[39m4.65%\n",
" Time \u001b[90m(\u001b[39m\u001b[32m\u001b[1mmean\u001b[22m\u001b[39m ± \u001b[32mσ\u001b[39m\u001b[90m): \u001b[39m\u001b[32m\u001b[1m556.689 ms\u001b[22m\u001b[39m ± \u001b[32m 19.426 ms\u001b[39m \u001b[90m┊\u001b[39m GC \u001b[90m(\u001b[39mmean ± σ\u001b[90m): \u001b[39m4.75% ± 1.01%\n",
"BenchmarkTools.Trial: 27 samples with 1 evaluation.\n",
" Range \u001b[90m(\u001b[39m\u001b[36m\u001b[1mmin\u001b[22m\u001b[39m … \u001b[35mmax\u001b[39m\u001b[90m): \u001b[39m\u001b[36m\u001b[1m182.038 ms\u001b[22m\u001b[39m … \u001b[35m203.672 ms\u001b[39m \u001b[90m┊\u001b[39m GC \u001b[90m(\u001b[39mmin … max\u001b[90m): \u001b[39m4.83% … 11.23%\n",
" Time \u001b[90m(\u001b[39m\u001b[34m\u001b[1mmedian\u001b[22m\u001b[39m\u001b[90m): \u001b[39m\u001b[34m\u001b[1m187.399 ms \u001b[22m\u001b[39m\u001b[90m┊\u001b[39m GC \u001b[90m(\u001b[39mmedian\u001b[90m): \u001b[39m7.11%\n",
" Time \u001b[90m(\u001b[39m\u001b[32m\u001b[1mmean\u001b[22m\u001b[39m ± \u001b[32mσ\u001b[39m\u001b[90m): \u001b[39m\u001b[32m\u001b[1m189.151 ms\u001b[22m\u001b[39m ± \u001b[32m 5.412 ms\u001b[39m \u001b[90m┊\u001b[39m GC \u001b[90m(\u001b[39mmean ± σ\u001b[90m): \u001b[39m8.49% ± 2.73%\n",
"\n",
" \u001b[39m█\u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m█\u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m█\u001b[39m█\u001b[39m \u001b[39m█\u001b[34m█\u001b[39m\u001b[39m \u001b[39m \u001b[32m \u001b[39m\u001b[39m█\u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m█\u001b[39m \u001b[39m \u001b[39m█\u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m█\u001b[39m \u001b[39m \n",
" \u001b[39m█\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m█\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m█\u001b[39m█\u001b[39m▁\u001b[39m█\u001b[34m█\u001b[39m\u001b[39m▁\u001b[39m▁\u001b[32m▁\u001b[39m\u001b[39m█\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m█\u001b[39m▁\u001b[39m▁\u001b[39m█\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m█\u001b[39m \u001b[39m▁\n",
" 521 ms\u001b[90m Histogram: frequency by time\u001b[39m 588 ms \u001b[0m\u001b[1m<\u001b[22m\n",
" \u001b[39m\u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m▃\u001b[39m \u001b[39m \u001b[34m█\u001b[39m\u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[32m \u001b[39m\u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \n",
" \u001b[39m█\u001b[39m▇\u001b[39m▁\u001b[39m▇\u001b[39m▁\u001b[39m▇\u001b[39m▁\u001b[39m▇\u001b[39m▇\u001b[39m▁\u001b[39m█\u001b[39m▁\u001b[39m▇\u001b[34m█\u001b[39m\u001b[39m▁\u001b[39m▇\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[32m▇\u001b[39m\u001b[39m▇\u001b[39m▁\u001b[39m▇\u001b[39m▇\u001b[39m▁\u001b[39m▇\u001b[39m▇\u001b[39m▇\u001b[39m▁\u001b[39m▇\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▇\u001b[39m▇\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▇\u001b[39m▇\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m\u001b[39m \u001b[39m▁\n",
" 182 ms\u001b[90m Histogram: frequency by time\u001b[39m 204 ms \u001b[0m\u001b[1m<\u001b[22m\n",
"\n",
" Memory estimate\u001b[90m: \u001b[39m\u001b[33m336.89 MiB\u001b[39m, allocs estimate\u001b[90m: \u001b[39m\u001b[33m3305766\u001b[39m."
" Memory estimate\u001b[90m: \u001b[39m\u001b[33m417.57 MiB\u001b[39m, allocs estimate\u001b[90m: \u001b[39m\u001b[33m3203645\u001b[39m."
]
},
"metadata": {},
@ -568,20 +172,12 @@
"name": "stdout",
"output_type": "stream",
"text": [
"Found 480 Diagrams for 4-Photon Compton\n",
"Diagram 1: Initial Particles: [k_in_1, k_in_2, k_in_3, k_in_4, e_in_1, e_out_1, k_out_1]\n",
"Virtuality Level 1:\n",
" Vertices: [k_in_1 + e_out_1 -> e_out_2, e_in_1 + k_out_1 -> e_in_2]\n",
" Ties: []\n",
"Virtuality Level 2:\n",
" Vertices: [k_in_2 + e_out_2 -> e_out_3, k_in_3 + e_in_2 -> e_in_3]\n",
" Ties: []\n",
"Virtuality Level 3:\n",
" Vertices: [k_in_4 + e_out_3 -> e_out_4]\n",
" Ties: []\n",
"Virtuality Level 4:\n",
" Vertices: []\n",
" Ties: [e_in_3 -- e_out_4]\n",
"Found 120 Diagrams for 4-Photon Compton\n",
"Diagram 1: Initial Particles: [k_in_1, k_in_2, k_in_3, k_in_4, e_in_1, k_out_1, e_out_1]\n",
" Virtuality Level 1 Vertices: [k_in_3 + e_in_1 -> e_in_2, k_in_4 + e_out_1 -> e_out_2]\n",
" Virtuality Level 2 Vertices: [k_in_2 + e_out_2 -> e_out_3, k_out_1 + e_in_2 -> e_in_3]\n",
" Virtuality Level 3 Vertices: [k_in_1 + e_in_3 -> e_in_4]\n",
" Tie: e_out_3 -- e_in_4\n",
"\n"
]
}
@ -599,15 +195,22 @@
},
{
"cell_type": "code",
"execution_count": 104,
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"BenchmarkTools.Trial: 1 sample with 1 evaluation.\n",
" Single result which took \u001b[34m8.170 s\u001b[39m (7.15% GC) to evaluate,\n",
" with a memory estimate of \u001b[33m4.69 GiB\u001b[39m, over \u001b[33m47449329\u001b[39m allocations."
"BenchmarkTools.Trial: 2 samples with 1 evaluation.\n",
" Range \u001b[90m(\u001b[39m\u001b[36m\u001b[1mmin\u001b[22m\u001b[39m … \u001b[35mmax\u001b[39m\u001b[90m): \u001b[39m\u001b[36m\u001b[1m3.210 s\u001b[22m\u001b[39m … \u001b[35m 3.254 s\u001b[39m \u001b[90m┊\u001b[39m GC \u001b[90m(\u001b[39mmin … max\u001b[90m): \u001b[39m10.57% … 11.76%\n",
" Time \u001b[90m(\u001b[39m\u001b[34m\u001b[1mmedian\u001b[22m\u001b[39m\u001b[90m): \u001b[39m\u001b[34m\u001b[1m3.232 s \u001b[22m\u001b[39m\u001b[90m┊\u001b[39m GC \u001b[90m(\u001b[39mmedian\u001b[90m): \u001b[39m11.17%\n",
" Time \u001b[90m(\u001b[39m\u001b[32m\u001b[1mmean\u001b[22m\u001b[39m ± \u001b[32mσ\u001b[39m\u001b[90m): \u001b[39m\u001b[32m\u001b[1m3.232 s\u001b[22m\u001b[39m ± \u001b[32m30.898 ms\u001b[39m \u001b[90m┊\u001b[39m GC \u001b[90m(\u001b[39mmean ± σ\u001b[90m): \u001b[39m11.17% ± 0.84%\n",
"\n",
" \u001b[34m█\u001b[39m\u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[32m \u001b[39m\u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m█\u001b[39m \u001b[39m \n",
" \u001b[34m█\u001b[39m\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[32m▁\u001b[39m\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m▁\u001b[39m█\u001b[39m \u001b[39m▁\n",
" 3.21 s\u001b[90m Histogram: frequency by time\u001b[39m 3.25 s \u001b[0m\u001b[1m<\u001b[22m\n",
"\n",
" Memory estimate\u001b[90m: \u001b[39m\u001b[33m8.12 GiB\u001b[39m, allocs estimate\u001b[90m: \u001b[39m\u001b[33m67276764\u001b[39m."
]
},
"metadata": {},
@ -617,26 +220,12 @@
"name": "stdout",
"output_type": "stream",
"text": [
"Found 3600 Diagrams for 5-Photon Compton\n",
"Diagram 1: Initial Particles: [k_in_1, k_in_2, k_in_3, k_in_4, k_in_5, e_in_1, e_out_1, k_out_1]\n",
"Virtuality Level 1:\n",
" Vertices: [k_in_2 + e_out_1 -> e_out_2, k_in_1 + e_in_1 -> e_in_2]\n",
" Ties: []\n",
"Virtuality Level 2:\n",
" Vertices: [k_in_4 + e_in_2 -> e_in_3]\n",
" Ties: []\n",
"Virtuality Level 3:\n",
" Vertices: [k_in_3 + e_in_3 -> e_in_4]\n",
" Ties: []\n",
"Virtuality Level 4:\n",
" Vertices: [k_out_1 + e_in_4 -> e_in_5]\n",
" Ties: []\n",
"Virtuality Level 5:\n",
" Vertices: [k_in_5 + e_in_5 -> e_in_6]\n",
" Ties: []\n",
"Virtuality Level 6:\n",
" Vertices: []\n",
" Ties: [e_out_2 -- e_in_6]\n",
"Found 720 Diagrams for 5-Photon Compton\n",
"Diagram 1: Initial Particles: [k_in_1, k_in_2, k_in_3, k_in_4, k_in_5, e_in_1, k_out_1, e_out_1]\n",
" Virtuality Level 1 Vertices: [k_in_3 + e_in_1 -> e_in_2, k_in_4 + e_out_1 -> e_out_2]\n",
" Virtuality Level 2 Vertices: [k_in_2 + e_out_2 -> e_out_3, k_in_5 + e_in_2 -> e_in_3]\n",
" Virtuality Level 3 Vertices: [k_in_1 + e_out_3 -> e_out_4, k_out_1 + e_in_3 -> e_in_4]\n",
" Tie: e_out_4 -- e_in_4\n",
"\n"
]
}
@ -654,7 +243,7 @@
},
{
"cell_type": "code",
"execution_count": 87,
"execution_count": 8,
"metadata": {},
"outputs": [
{
@ -662,20 +251,12 @@
"output_type": "stream",
"text": [
"Diagram 1: Initial Particles: [p_in_1, e_in_1, p_out_1, e_out_1]\n",
"Virtuality Level 1:\n",
" Vertices: [p_in_1 + p_out_1 -> k_out_1, e_in_1 + e_out_1 -> k_out_2]\n",
" Ties: []\n",
"Virtuality Level 2:\n",
" Vertices: []\n",
" Ties: [k_out_1 -- k_out_2]\n",
" Virtuality Level 1 Vertices: [p_out_1 + e_out_1 -> k_out_2, p_in_1 + e_in_1 -> k_out_1]\n",
" Tie: k_out_2 -- k_out_1\n",
"\n",
"Diagram 2: Initial Particles: [p_in_1, e_in_1, p_out_1, e_out_1]\n",
"Virtuality Level 1:\n",
" Vertices: [p_in_1 + e_in_1 -> k_out_1, p_out_1 + e_out_1 -> k_out_2]\n",
" Ties: []\n",
"Virtuality Level 2:\n",
" Vertices: []\n",
" Ties: [k_out_1 -- k_out_2]\n",
" Virtuality Level 1 Vertices: [p_in_1 + p_out_1 -> k_out_2, e_in_1 + e_out_1 -> k_out_1]\n",
" Tie: k_out_2 -- k_out_1\n",
"\n"
]
}
@ -695,7 +276,7 @@
},
{
"cell_type": "code",
"execution_count": 88,
"execution_count": 9,
"metadata": {},
"outputs": [
{
@ -703,20 +284,12 @@
"output_type": "stream",
"text": [
"Diagram 1: Initial Particles: [e_in_1, e_in_2, e_out_1, e_out_2]\n",
"Virtuality Level 1:\n",
" Vertices: [e_in_1 + e_out_2 -> k_out_1, e_in_2 + e_out_1 -> k_out_2]\n",
" Ties: []\n",
"Virtuality Level 2:\n",
" Vertices: []\n",
" Ties: [k_out_1 -- k_out_2]\n",
" Virtuality Level 1 Vertices: [e_in_1 + e_out_1 -> k_out_1, e_in_2 + e_out_2 -> k_out_2]\n",
" Tie: k_out_1 -- k_out_2\n",
"\n",
"Diagram 2: Initial Particles: [e_in_1, e_in_2, e_out_1, e_out_2]\n",
"Virtuality Level 1:\n",
" Vertices: [e_in_2 + e_out_2 -> k_out_2, e_in_1 + e_out_1 -> k_out_1]\n",
" Ties: []\n",
"Virtuality Level 2:\n",
" Vertices: []\n",
" Ties: [k_out_2 -- k_out_1]\n",
" Virtuality Level 1 Vertices: [e_in_1 + e_out_2 -> k_out_1, e_in_2 + e_out_1 -> k_out_2]\n",
" Tie: k_out_1 -- k_out_2\n",
"\n"
]
}
@ -736,7 +309,7 @@
},
{
"cell_type": "code",
"execution_count": 89,
"execution_count": 10,
"metadata": {},
"outputs": [
{
@ -744,20 +317,12 @@
"output_type": "stream",
"text": [
"Diagram 1: Initial Particles: [p_in_1, e_in_1, k_out_1, k_out_2]\n",
"Virtuality Level 1:\n",
" Vertices: [p_in_1 + k_out_2 -> e_out_1, e_in_1 + k_out_1 -> e_in_2]\n",
" Ties: []\n",
"Virtuality Level 2:\n",
" Vertices: []\n",
" Ties: [e_out_1 -- e_in_2]\n",
" Virtuality Level 1 Vertices: [e_in_1 + k_out_1 -> e_in_2, p_in_1 + k_out_2 -> e_out_1]\n",
" Tie: e_in_2 -- e_out_1\n",
"\n",
"Diagram 2: Initial Particles: [p_in_1, e_in_1, k_out_1, k_out_2]\n",
"Virtuality Level 1:\n",
" Vertices: [p_in_1 + k_out_1 -> e_out_1, e_in_1 + k_out_2 -> e_in_2]\n",
" Ties: []\n",
"Virtuality Level 2:\n",
" Vertices: []\n",
" Ties: [e_out_1 -- e_in_2]\n",
" Virtuality Level 1 Vertices: [e_in_1 + k_out_2 -> e_in_2, p_in_1 + k_out_1 -> e_out_1]\n",
" Tie: e_in_2 -- e_out_1\n",
"\n"
]
}
@ -777,7 +342,7 @@
},
{
"cell_type": "code",
"execution_count": 90,
"execution_count": 11,
"metadata": {},
"outputs": [
{
@ -785,20 +350,12 @@
"output_type": "stream",
"text": [
"Diagram 1: Initial Particles: [k_in_1, k_in_2, p_out_1, e_out_1]\n",
"Virtuality Level 1:\n",
" Vertices: [k_in_1 + p_out_1 -> e_in_1, k_in_2 + e_out_1 -> e_out_2]\n",
" Ties: []\n",
"Virtuality Level 2:\n",
" Vertices: []\n",
" Ties: [e_in_1 -- e_out_2]\n",
" Virtuality Level 1 Vertices: [k_in_1 + e_out_1 -> e_out_2, k_in_2 + p_out_1 -> e_in_1]\n",
" Tie: e_out_2 -- e_in_1\n",
"\n",
"Diagram 2: Initial Particles: [k_in_1, k_in_2, p_out_1, e_out_1]\n",
"Virtuality Level 1:\n",
" Vertices: [k_in_1 + e_out_1 -> e_out_2, k_in_2 + p_out_1 -> e_in_1]\n",
" Ties: []\n",
"Virtuality Level 2:\n",
" Vertices: []\n",
" Ties: [e_out_2 -- e_in_1]\n",
" Virtuality Level 1 Vertices: [k_in_1 + p_out_1 -> e_in_1, k_in_2 + e_out_1 -> e_out_2]\n",
" Tie: e_in_1 -- e_out_2\n",
"\n"
]
}
@ -818,189 +375,53 @@
},
{
"cell_type": "code",
"execution_count": 91,
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Found 16 diagrams:\n",
"Found 8 diagrams:\n",
"Diagram 1: Initial Particles: [k_in_1, e_in_1, p_out_1, e_out_1, e_out_2]\n",
"Virtuality Level 1:\n",
" Vertices: [k_in_1 + p_out_1 -> e_in_2, e_in_1 + e_out_2 -> k_out_1]\n",
" Ties: []\n",
"Virtuality Level 2:\n",
" Vertices: [e_out_1 + k_out_1 -> e_out_3]\n",
" Ties: []\n",
"Virtuality Level 3:\n",
" Vertices: []\n",
" Ties: [e_in_2 -- e_out_3]\n",
" Virtuality Level 1 Vertices: [e_in_1 + e_out_1 -> k_out_1, k_in_1 + p_out_1 -> e_in_2]\n",
" Virtuality Level 2 Vertices: [e_out_2 + k_out_1 -> e_out_3]\n",
" Tie: e_in_2 -- e_out_3\n",
"\n",
"Diagram 2: Initial Particles: [k_in_1, e_in_1, p_out_1, e_out_1, e_out_2]\n",
"Virtuality Level 1:\n",
" Vertices: [k_in_1 + e_out_2 -> e_out_3, e_in_1 + e_out_1 -> k_out_1]\n",
" Ties: []\n",
"Virtuality Level 2:\n",
" Vertices: [p_out_1 + e_out_3 -> k_out_2]\n",
" Ties: []\n",
"Virtuality Level 3:\n",
" Vertices: []\n",
" Ties: [k_out_1 -- k_out_2]\n",
" Virtuality Level 1 Vertices: [k_in_1 + e_out_1 -> e_out_3, p_out_1 + e_out_2 -> k_out_1]\n",
" Virtuality Level 2 Vertices: [e_in_1 + e_out_3 -> k_out_2]\n",
" Tie: k_out_1 -- k_out_2\n",
"\n",
"Diagram 3: Initial Particles: [k_in_1, e_in_1, p_out_1, e_out_1, e_out_2]\n",
"Virtuality Level 1:\n",
" Vertices: [k_in_1 + p_out_1 -> e_in_2, e_in_1 + e_out_1 -> k_out_1]\n",
" Ties: []\n",
"Virtuality Level 2:\n",
" Vertices: [e_out_2 + e_in_2 -> k_out_2]\n",
" Ties: []\n",
"Virtuality Level 3:\n",
" Vertices: []\n",
" Ties: [k_out_1 -- k_out_2]\n",
" Virtuality Level 1 Vertices: [p_out_1 + e_out_1 -> k_out_1, k_in_1 + e_out_2 -> e_out_3]\n",
" Virtuality Level 2 Vertices: [e_in_1 + k_out_1 -> e_in_2]\n",
" Tie: e_out_3 -- e_in_2\n",
"\n",
"Diagram 4: Initial Particles: [k_in_1, e_in_1, p_out_1, e_out_1, e_out_2]\n",
"Virtuality Level 1:\n",
" Vertices: [e_in_1 + e_out_2 -> k_out_1, k_in_1 + e_out_1 -> e_out_3]\n",
" Ties: []\n",
"Virtuality Level 2:\n",
" Vertices: [p_out_1 + e_out_3 -> k_out_2]\n",
" Ties: []\n",
"Virtuality Level 3:\n",
" Vertices: []\n",
" Ties: [k_out_1 -- k_out_2]\n",
" Virtuality Level 1 Vertices: [p_out_1 + e_out_2 -> k_out_1, k_in_1 + e_in_1 -> e_in_2]\n",
" Virtuality Level 2 Vertices: [e_out_1 + k_out_1 -> e_out_3]\n",
" Tie: e_in_2 -- e_out_3\n",
"\n",
"Diagram 5: Initial Particles: [k_in_1, e_in_1, p_out_1, e_out_1, e_out_2]\n",
"Virtuality Level 1:\n",
" Vertices: [k_in_1 + p_out_1 -> e_in_2, e_in_1 + e_out_2 -> k_out_1]\n",
" Ties: []\n",
"Virtuality Level 2:\n",
" Vertices: [e_out_1 + e_in_2 -> k_out_2]\n",
" Ties: []\n",
"Virtuality Level 3:\n",
" Vertices: []\n",
" Ties: [k_out_1 -- k_out_2]\n",
" Virtuality Level 1 Vertices: [e_in_1 + e_out_1 -> k_out_1, k_in_1 + e_out_2 -> e_out_3]\n",
" Virtuality Level 2 Vertices: [p_out_1 + k_out_1 -> e_in_2]\n",
" Tie: e_out_3 -- e_in_2\n",
"\n",
"Diagram 6: Initial Particles: [k_in_1, e_in_1, p_out_1, e_out_1, e_out_2]\n",
"Virtuality Level 1:\n",
" Vertices: [k_in_1 + p_out_1 -> e_in_2, e_in_1 + e_out_1 -> k_out_1]\n",
" Ties: []\n",
"Virtuality Level 2:\n",
" Vertices: [e_out_2 + k_out_1 -> e_out_3]\n",
" Ties: []\n",
"Virtuality Level 3:\n",
" Vertices: []\n",
" Ties: [e_in_2 -- e_out_3]\n",
" Virtuality Level 1 Vertices: [k_in_1 + p_out_1 -> e_in_2, e_in_1 + e_out_2 -> k_out_1]\n",
" Virtuality Level 2 Vertices: [e_out_1 + k_out_1 -> e_out_3]\n",
" Tie: e_in_2 -- e_out_3\n",
"\n",
"Diagram 7: Initial Particles: [k_in_1, e_in_1, p_out_1, e_out_1, e_out_2]\n",
"Virtuality Level 1:\n",
" Vertices: [p_out_1 + e_out_2 -> k_out_1, k_in_1 + e_in_1 -> e_in_2]\n",
" Ties: []\n",
"Virtuality Level 2:\n",
" Vertices: [e_out_1 + k_out_1 -> e_out_3]\n",
" Ties: []\n",
"Virtuality Level 3:\n",
" Vertices: []\n",
" Ties: [e_in_2 -- e_out_3]\n",
" Virtuality Level 1 Vertices: [p_out_1 + e_out_1 -> k_out_1, k_in_1 + e_in_1 -> e_in_2]\n",
" Virtuality Level 2 Vertices: [e_out_2 + k_out_1 -> e_out_3]\n",
" Tie: e_in_2 -- e_out_3\n",
"\n",
"Diagram 8: Initial Particles: [k_in_1, e_in_1, p_out_1, e_out_1, e_out_2]\n",
"Virtuality Level 1:\n",
" Vertices: [p_out_1 + e_out_1 -> k_out_1, k_in_1 + e_in_1 -> e_in_2]\n",
" Ties: []\n",
"Virtuality Level 2:\n",
" Vertices: [e_out_2 + e_in_2 -> k_out_2]\n",
" Ties: []\n",
"Virtuality Level 3:\n",
" Vertices: []\n",
" Ties: [k_out_1 -- k_out_2]\n",
"\n",
"Diagram 9: Initial Particles: [k_in_1, e_in_1, p_out_1, e_out_1, e_out_2]\n",
"Virtuality Level 1:\n",
" Vertices: [p_out_1 + e_out_2 -> k_out_1, k_in_1 + e_in_1 -> e_in_2]\n",
" Ties: []\n",
"Virtuality Level 2:\n",
" Vertices: [e_out_1 + e_in_2 -> k_out_2]\n",
" Ties: []\n",
"Virtuality Level 3:\n",
" Vertices: []\n",
" Ties: [k_out_1 -- k_out_2]\n",
"\n",
"Diagram 10: Initial Particles: [k_in_1, e_in_1, p_out_1, e_out_1, e_out_2]\n",
"Virtuality Level 1:\n",
" Vertices: [k_in_1 + e_out_1 -> e_out_3, p_out_1 + e_out_2 -> k_out_2]\n",
" Ties: []\n",
"Virtuality Level 2:\n",
" Vertices: [e_in_1 + e_out_3 -> k_out_1]\n",
" Ties: []\n",
"Virtuality Level 3:\n",
" Vertices: []\n",
" Ties: [k_out_2 -- k_out_1]\n",
"\n",
"Diagram 11: Initial Particles: [k_in_1, e_in_1, p_out_1, e_out_1, e_out_2]\n",
"Virtuality Level 1:\n",
" Vertices: [k_in_1 + e_out_2 -> e_out_3, p_out_1 + e_out_1 -> k_out_2]\n",
" Ties: []\n",
"Virtuality Level 2:\n",
" Vertices: [e_in_1 + e_out_3 -> k_out_1]\n",
" Ties: []\n",
"Virtuality Level 3:\n",
" Vertices: []\n",
" Ties: [k_out_2 -- k_out_1]\n",
"\n",
"Diagram 12: Initial Particles: [k_in_1, e_in_1, p_out_1, e_out_1, e_out_2]\n",
"Virtuality Level 1:\n",
" Vertices: [k_in_1 + e_out_2 -> e_out_3, e_in_1 + e_out_1 -> k_out_1]\n",
" Ties: []\n",
"Virtuality Level 2:\n",
" Vertices: [p_out_1 + k_out_1 -> e_in_2]\n",
" Ties: []\n",
"Virtuality Level 3:\n",
" Vertices: []\n",
" Ties: [e_out_3 -- e_in_2]\n",
"\n",
"Diagram 13: Initial Particles: [k_in_1, e_in_1, p_out_1, e_out_1, e_out_2]\n",
"Virtuality Level 1:\n",
" Vertices: [p_out_1 + e_out_1 -> k_out_1, k_in_1 + e_in_1 -> e_in_2]\n",
" Ties: []\n",
"Virtuality Level 2:\n",
" Vertices: [e_out_2 + k_out_1 -> e_out_3]\n",
" Ties: []\n",
"Virtuality Level 3:\n",
" Vertices: []\n",
" Ties: [e_in_2 -- e_out_3]\n",
"\n",
"Diagram 14: Initial Particles: [k_in_1, e_in_1, p_out_1, e_out_1, e_out_2]\n",
"Virtuality Level 1:\n",
" Vertices: [k_in_1 + e_out_1 -> e_out_3, p_out_1 + e_out_2 -> k_out_1]\n",
" Ties: []\n",
"Virtuality Level 2:\n",
" Vertices: [e_in_1 + k_out_1 -> e_in_2]\n",
" Ties: []\n",
"Virtuality Level 3:\n",
" Vertices: []\n",
" Ties: [e_out_3 -- e_in_2]\n",
"\n",
"Diagram 15: Initial Particles: [k_in_1, e_in_1, p_out_1, e_out_1, e_out_2]\n",
"Virtuality Level 1:\n",
" Vertices: [e_in_1 + e_out_2 -> k_out_1, k_in_1 + e_out_1 -> e_out_3]\n",
" Ties: []\n",
"Virtuality Level 2:\n",
" Vertices: [p_out_1 + k_out_1 -> e_in_2]\n",
" Ties: []\n",
"Virtuality Level 3:\n",
" Vertices: []\n",
" Ties: [e_out_3 -- e_in_2]\n",
"\n",
"Diagram 16: Initial Particles: [k_in_1, e_in_1, p_out_1, e_out_1, e_out_2]\n",
"Virtuality Level 1:\n",
" Vertices: [k_in_1 + e_out_2 -> e_out_3, p_out_1 + e_out_1 -> k_out_1]\n",
" Ties: []\n",
"Virtuality Level 2:\n",
" Vertices: [e_in_1 + k_out_1 -> e_in_2]\n",
" Ties: []\n",
"Virtuality Level 3:\n",
" Vertices: []\n",
" Ties: [e_out_3 -- e_in_2]\n",
" Virtuality Level 1 Vertices: [k_in_1 + e_out_1 -> e_out_3, e_in_1 + e_out_2 -> k_out_1]\n",
" Virtuality Level 2 Vertices: [p_out_1 + k_out_1 -> e_in_2]\n",
" Tie: e_out_3 -- e_in_2\n",
"\n"
]
}

View File

@ -35,11 +35,11 @@
},
{
"cell_type": "code",
"execution_count": 5,
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"@ProfileView.profview comp_func = get_compute_function(graph, process)"
"@ProfileView.profview comp_func = get_compute_function(graph, process, get_machine_info())"
]
},
{
@ -52,7 +52,7 @@
],
"metadata": {
"kernelspec": {
"display_name": "Julia 1.9.3",
"display_name": "Julia 1.9.4",
"language": "julia",
"name": "julia-1.9"
},
@ -60,7 +60,7 @@
"file_extension": ".jl",
"mimetype": "application/julia",
"name": "julia",
"version": "1.9.3"
"version": "1.9.4"
},
"orig_nbformat": 4
},

View File

@ -63,6 +63,7 @@ export ComputeTaskABC_U
export ComputeTaskABC_Sum
# QED model
export FeynmanDiagram, FeynmanVertex, FeynmanTie, FeynmanParticle
export PhotonStateful, FermionStateful, AntiFermionStateful
export QEDParticle, QEDProcessDescription, QEDProcessInput, QEDModel
export ComputeTaskQED_P
@ -95,6 +96,9 @@ export ==, in, show, isempty, delete!, length
export bytes_to_human_readable
# TODO: this is probably not good
import QEDprocesses.compute
import Base.length
import Base.show
import Base.==
@ -174,6 +178,7 @@ include("models/abc/print.jl")
include("models/qed/types.jl")
include("models/qed/particle.jl")
include("models/qed/diagrams.jl")
include("models/qed/compute.jl")
include("models/qed/create.jl")
include("models/qed/properties.jl")

View File

@ -55,3 +55,39 @@ function gen_process_input(processDescription::QEDProcessDescription)
return return processInput
end
"""
gen_graph(process_description::QEDProcessDescription)
For a given [`QEDProcessDescription`](@ref), return the [`DAG`](@ref) that computes it.
"""
function gen_graph(process_description::QEDProcessDescription)
initial_diagram = FeynmanDiagram(process_description)
diagrams = gen_diagrams(initial_diagram)
graph = DAG()
COMPLEX_SIZE = sizeof(ComplexF64)
# TODO: Not all diagram outputs should always be summed at the end, if they differ by fermion exchange they need to be diffed
# Should not matter for n-Photon Compton processes though
sum_node = insert_node!(graph, make_node(ComputeTaskQED_Sum(0)), track = false, invalidate_cache = false)
global_data_out = insert_node!(graph, make_node(DataTask(COMPLEX_SIZE)), track = false, invalidate_cache = false)
insert_edge!(graph, sum_node, global_data_out, track = false, invalidate_cache = false)
# remember the data out nodes for connection
dataOutNodes = Dict()
for particle in initial_diagram.particles
# generate U tasks
end
for diagram in diagrams
for (vertices, ties) in zip(diagram.vertices, diagram.ties)
end
end
return graph
end

442
src/models/qed/diagrams.jl Normal file
View File

@ -0,0 +1,442 @@
import Base.copy
import Base.hash
import Base.==
import Base.show
"""
FeynmanParticle
Representation of a particle for use in [`FeynmanDiagram`](@ref)s. Consist of the [`QEDParticle`](@ref) type and an id.
"""
struct FeynmanParticle
particle::Type{<:QEDParticle}
id::Int
end
"""
FeynmanVertex
Representation of a vertex in a [`FeynmanDiagram`](@ref). Stores two input [`FeynmanParticle`](@ref)s and one output.
"""
struct FeynmanVertex
in1::FeynmanParticle
in2::FeynmanParticle
out::FeynmanParticle
end
"""
FeynmanTie
Representation of a "tie" in a [`FeynmanDiagram`](@ref). A tie ties two virtual particles in a diagram together and thus represent an inner line of the diagram. Not all inner lines are [`FeynmanTie`](@ref)s, in fact, a connected diagram only ever has exactly one tie.
"""
struct FeynmanTie
in1::FeynmanParticle
in2::FeynmanParticle
end
"""
FeynmanDiagram
Representation of a feynman diagram. It consists of its initial input/output particles, and a vector of sets of [`FeynmanVertex`](@ref)s. The vertices are to be applied level by level.
A [`FeynmanVertex`](@ref) will always be at the lowest level possible, i.e. the lowest level at which all input particles for it exist.
The [`FeynmanTie`](@ref) represents the final inner edge of the diagram.
"""
struct FeynmanDiagram
vertices::Vector{Set{FeynmanVertex}}
tie::Ref{Union{FeynmanTie, Missing}}
particles::Vector{FeynmanParticle}
end
"""
FeynmanDiagram(pd::QEDProcessDescription)
Create an initial [`FeynmanDiagram`](@ref) with only its initial particles set and no vertices or ties.
Use [`gen_diagrams`](@ref) to generate all possible diagrams from this one.
"""
function FeynmanDiagram(pd::QEDProcessDescription)
parts = Vector{FeynmanParticle}()
for (type, n) in pd.inParticles
for i in 1:n
push!(parts, FeynmanParticle(type, i))
end
end
for (type, n) in pd.outParticles
for i in 1:n
push!(parts, FeynmanParticle(type, i))
end
end
return FeynmanDiagram([], missing, parts)
end
function particle_after_tie(p::FeynmanParticle, t::FeynmanTie)
if p == t.in1 || p == t.in2
return FeynmanParticle(FermionStateful{Incoming}, -1) # placeholder particle and id for tied particles
end
return p
end
function vertex_after_tie(v::FeynmanVertex, t::FeynmanTie)
return FeynmanVertex(particle_after_tie(v.in1, t), particle_after_tie(v.in2, t), particle_after_tie(v.out, t))
end
function vertex_set_after_tie(vs::Set{FeynmanVertex}, t::FeynmanTie)
return Set{FeynmanVertex}(vertex_after_tie(v, t) for v in vs)
end
function vertex_set_after_tie(vs::Set{FeynmanVertex}, t::Missing)
return vs
end
"""
String(p::FeynmanParticle)
Return a string representation of the [`FeynmanParticle`](@ref) in a format that is readable by [`type_index_from_name`](@ref).
"""
function String(p::FeynmanParticle)
return "$(String(p.particle))$(String(direction(p.particle)))$(p.id)"
end
function hash(v::FeynmanVertex)
return hash(Set{FeynmanParticle}([v.in1, v.in2]))
end
function hash(t::FeynmanTie)
return hash(Set{FeynmanParticle}([t.in1, t.in2]))
end
function hash(d::FeynmanDiagram)
if (isempty(d.vertices))
return hash(d.particles)
end
return hash((vertex_set_after_tie(union(d.vertices...), d.tie[]), d.particles))
end
function ==(v1::FeynmanVertex, v2::FeynmanVertex)
return Set{FeynmanParticle}([v1.in1, v1.in2]) == Set{FeynmanParticle}([v2.in1, v2.in2])
end
function ==(t1::FeynmanTie, t2::FeynmanTie)
return Set{FeynmanParticle}([t1.in1, t1.in2]) == Set{FeynmanParticle}([t2.in1, t2.in2])
end
function ==(d1::FeynmanDiagram, d2::FeynmanDiagram)
if (!ismissing(d1.tie[]) && ismissing(d2.tie[])) || (ismissing(d1.tie[]) && !ismissing(d2.tie[]))
return false
end
if d1.particles != d2.particles
return false
end
# TODO can i prove that this works?
return vertex_set_after_tie(vertex_set_after_tie(union(d1.vertices...), d1.tie[]), d2.tie[]) ==
vertex_set_after_tie(vertex_set_after_tie(union(d2.vertices...), d1.tie[]), d2.tie[])
end
copy(fd::FeynmanDiagram) = FeynmanDiagram(deepcopy(fd.vertices), copy(fd.tie[]), deepcopy(fd.particles))
"""
id_for_type(d::FeynmanDiagram, t::Type{<:QEDParticle})
Return the highest id of any particle of the given type in the diagram + 1.
"""
function id_for_type(d::FeynmanDiagram, t::Type{<:QEDParticle})
id = 1
for l in 0:length(d.vertices)
particles = get_particles(d, l)
for p in particles
if (p.particle <: t)
id = max(id, p.id + 1)
end
end
end
return id
end
"""
can_apply_vertex(particles::Vector{FeynmanParticle}, vertex::FeynmanVertex)
Return true if the given [`FeynmanVertex`](@ref) can be applied to the given particles, i.e. both input particles of the vertex are in the vector and the output particle is not.
"""
function can_apply_vertex(particles::Vector{FeynmanParticle}, vertex::FeynmanVertex)
return vertex.in1 in particles && vertex.in2 in particles && !(vertex.out in particles)
end
"""
apply_vertex!(particles::Vector{FeynmanParticle}, vertex::FeynmanVertex)
Apply a [`FeynmanVertex`](@ref) to the given vector of [`FeynmanParticle`](@ref)s.
"""
function apply_vertex!(particles::Vector{FeynmanParticle}, vertex::FeynmanVertex)
#@assert can_apply_vertex(particles, vertex)
length_before = length(particles)
filter!(x -> x != vertex.in1 && x != vertex.in2, particles)
push!(particles, vertex.out)
#@assert length(particles) == length_before - 1
return nothing
end
"""
can_apply_tie(particles::Vector{FeynmanParticle}, tie::FeynmanTie)
Return true if the given [`FeynmanTie`](@ref) can be applied to the given particles, i.e. both input particles of the tie are in the vector.
"""
function can_apply_tie(particles::Vector{FeynmanParticle}, tie::FeynmanTie)
return tie.in1 in particles && tie.in2 in particles
end
"""
apply_tie!(particles::Vector{FeynmanParticle}, tie::FeynmanTie)
Apply a [`FeynmanTie`](@ref) to the given vector of [`FeynmanParticle`](@ref)s.
"""
function apply_tie!(particles::Vector{FeynmanParticle}, tie::FeynmanTie)
@assert length(particles) == 2
@assert can_apply_tie(particles, tie)
@assert can_tie(tie.in1.particle, tie.in2.particle)
empty!(particles)
@assert length(particles) == 0
return nothing
end
function apply_tie!(::Vector{FeynmanParticle}, ::Missing)
return nothing
end
"""
get_particles(fd::FeynmanDiagram, level::Int)
Return a vector of the particles after applying the vertices and tie of the diagram up to the given level. If no level is given, apply all. The tie comes last and is its own "level".
"""
function get_particles(fd::FeynmanDiagram, level::Int = -1)
if level == -1
level = length(fd.vertices) + 1
end
working_particles = copy(fd.particles)
for l in 1:length(fd.vertices)
if l > level
break
end
for v in fd.vertices[l]
apply_vertex!(working_particles, v)
end
end
if (level > length(fd.vertices))
apply_tie!(working_particles, fd.tie[])
end
return working_particles
end
"""
add_vertex!(fd::FeynmanDiagram, vertex::FeynmanVertex)
Add the given vertex to the diagram, at the earliest level possible.
"""
function add_vertex!(fd::FeynmanDiagram, vertex::FeynmanVertex)
for i in eachindex(fd.vertices)
if (can_apply_vertex(get_particles(fd, i - 1), vertex))
push!(fd.vertices[i], vertex)
return nothing
end
end
if !can_apply_vertex(get_particles(fd), vertex)
#@assert false "Can't add vertex $vertex to diagram"
end
push!(fd.vertices, Set{FeynmanVertex}())
push!(fd.vertices[end], vertex)
return nothing
end
"""
add_vertex(fd::FeynmanDiagram, vertex::FeynmanVertex)
Add the given vertex to the diagram, at the earliest level possible. Return the new diagram without muting the given one.
"""
function add_vertex(fd::FeynmanDiagram, vertex::FeynmanVertex)
newfd = copy(fd)
add_vertex!(newfd, vertex)
return newfd
end
"""
add_tie!(fd::FeynmanDiagram, tie::FeynmanTie)
Add the given tie to the diagram, always at the last level.
"""
function add_tie!(fd::FeynmanDiagram, tie::FeynmanTie)
if !can_apply_tie(get_particles(fd), tie)
@assert false "Can't add tie $tie to diagram"
end
fd.tie[] = tie
#=
@assert length(fd.vertices) >= 2
#if the last vertex is involved in the tie and alone, lower it one level down
if (length(fd.vertices[end]) != 1)
return nothing
end
vert = fd.vertices[end][1]
if (vert != vertex_after_tie(vert, tie))
return nothing
end
pop!(fd.vertices)
push!(fd.vertices[end], vert)
=#
return nothing
end
"""
add_tie(fd::FeynmanDiagram, tie::FeynmanTie)
Add the given tie to the diagram, at the earliest level possible. Return the new diagram without muting the given one.
"""
function add_tie(fd::FeynmanDiagram, tie::FeynmanTie)
newfd = copy(fd)
add_tie!(newfd, tie)
return newfd
end
"""
isvalid(fd::FeynmanDiagram)
Return whether the given diagram is valid. A diagram is valid iff the following are true:
- After applying all vertices and the tie, there are no more particles left
- The diagram is connected
"""
function isvalid(fd::FeynmanDiagram)
if ismissing(fd.tie[])
# diagram is connected iff there is one tie
return false
end
if get_particles(fd) != []
return false
end
return true
end
"""
possible_vertices(fd::FeynmanDiagram)
Return a vector of all possible vertices that can be applied to the diagram at its current state.
"""
function possible_vertices(fd::FeynmanDiagram)
possibilities = Vector{FeynmanVertex}()
fully_generated_particles = get_particles(fd)
for l in 0:length(fd.vertices)
particles = get_particles(fd, l)
for i in 1:length(particles)
for j in (i + 1):length(particles)
p1 = particles[i]
p2 = particles[j]
if (caninteract(p1.particle, p2.particle))
interaction_res = propagation_result(interaction_result(p1.particle, p2.particle))
v = FeynmanVertex(p1, p2, FeynmanParticle(interaction_res, id_for_type(fd, interaction_res)))
#@assert !(v.out in particles) "$v is in $fd"
if !can_apply_vertex(fully_generated_particles, v)
continue
end
push!(possibilities, v)
end
end
end
if (!isempty(possibilities))
return possibilities
end
end
return possibilities
end
"""
can_tie(p1::Type, p2::Type)
For two given [`QEDParitcle`](@ref) types, return whether they can be tied together.
They can be tied iff one is the [`propagation_result`](@ref) of the other, or if both are photons, in which case their direction does not matter.
"""
function can_tie(p1::Type, p2::Type)
if p1 == propagation_result(p2)
return true
end
if (p1 <: PhotonStateful && p2 <: PhotonStateful)
return true
end
return false
end
"""
possible_tie(fd::FeynmanDiagram)
Return a possible tie or `missing` for the diagram at its current state.
"""
function possible_tie(fd::FeynmanDiagram)
particles = get_particles(fd)
if (length(particles) != 2)
return missing
end
if (particles[1] in fd.particles || particles[2] in fd.particles)
return missing
end
tie = FeynmanTie(particles[1], particles[2])
if (can_apply_tie(particles, tie))
return tie
end
return missing
end
function remove_duplicates(my_set::Set{FeynmanDiagram}, is_eq)
new_set = Set()
for x in my_set
if all(!is_eq(x, y) for y in new_set)
push!(new_set, x)
end
end
return new_set
end
"""
gen_diagrams(fd::FeynmanDiagram)
From a given feynman diagram in its initial state, e.g. when created through the [`FeynmanDiagram(pd::ProcessDescription)`](@ref) constructor, generate and return all possible [`FeynmanDiagram`](@ref)s that describe that process.
"""
function gen_diagrams(fd::FeynmanDiagram)
working = Set{FeynmanDiagram}()
results = Set{FeynmanDiagram}()
push!(working, fd)
while !isempty(working)
d = pop!(working)
possibilities = possible_vertices(d)
for v in possibilities
push!(working, add_vertex(d, v))
end
# can only find a tie when no vertices are possible anymore anyways
tie = possible_tie(d)
if !ismissing(tie)
add_tie!(d, tie)
if (isvalid(d))
push!(results, d)
end
end
end
return remove_duplicates(results, ==)
end

View File

@ -59,3 +59,57 @@ function show(io::IO, particle::T) where {T <: QEDParticle}
print(io, "$(String(typeof(particle))): $(particle.momentum)")
return nothing
end
"""
show(io::IO, particle::FeynmanParticle)
Pretty print a [`FeynmanParticle`](@ref) (no newlines).
"""
show(io::IO, p::FeynmanParticle) = print(io, "$(String(p.particle))_$(String(direction(p.particle)))_$(p.id)")
"""
show(io::IO, particle::FeynmanVertex)
Pretty print a [`FeynmanVertex`](@ref) (no newlines).
"""
show(io::IO, v::FeynmanVertex) = print(io, "$(v.in1) + $(v.in2) -> $(v.out)")
"""
show(io::IO, particle::FeynmanTie)
Pretty print a [`FeynmanTie`](@ref) (no newlines).
"""
show(io::IO, t::FeynmanTie) = print(io, "$(t.in1) -- $(t.in2)")
"""
show(io::IO, particle::FeynmanDiagram)
Pretty print a [`FeynmanDiagram`](@ref) (with newlines).
"""
function show(io::IO, d::FeynmanDiagram)
print(io, "Initial Particles: [")
first = true
for p in d.particles
if first
first = false
print(io, "$p")
else
print(io, ", $p")
end
end
print(io, "]\n")
for l in eachindex(d.vertices)
print(io, " Virtuality Level $l Vertices: [")
first = true
for v in d.vertices[l]
if first
first = false
print(io, "$v")
else
print(io, ", $v")
end
end
print(io, "]\n")
end
return print(io, " Tie: $(d.tie[])\n")
end