-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path04-Carsten-reactive_perfmon.jl
1286 lines (1058 loc) · 102 KB
/
04-Carsten-reactive_perfmon.jl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
### A Pluto.jl notebook ###
# v0.19.13
using Markdown
using InteractiveUtils
# ╔═╡ dc6a2952-ef65-49c0-82a9-2f66c6e50cd8
using LIKWID
# ╔═╡ a07dd047-6abb-4986-8e6e-b4c17d3b4265
using ThreadPinning
# ╔═╡ 23437846-9a30-4e92-ba82-065978aff075
begin
using CpuId
using BenchmarkTools
using Plots
using Base.Threads
using PlutoUI
end
# ╔═╡ 4d60cc67-b7f5-4f0b-8575-d9976ff658e0
md"# Reactive Performance Monitoring"
# ╔═╡ 6173c838-a035-4f2a-889e-7cba26111183
md"""
**Speaker:** Carsten Bauer, [Paderborn Center for Parallel Computing (PC2)](https://pc2.uni-paderborn.de/), [National HPC Alliance (NHR)](https://www.nhr-verein.de/)
"""
# ╔═╡ e4a8fe19-d6a3-4963-8e5c-a6da4c868b5d
md"""
[**Julia for HPC**](https://sc22.supercomputing.org/presentation/?id=bof136&sess=sess309), Birds of a Feather, November 15, 2022
"""
# ╔═╡ dc7e6098-cf54-4046-9209-d4269bdd3f1f
html"""
<img src="data:image/png;base64,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" width=200px>
"""
# ╔═╡ cd19ddb8-05f7-4a5d-8405-e1ed4b6baf43
md"## Counting floating point operations"
# ╔═╡ 072989d7-672b-4fed-9e1c-f9b434dbd331
x = rand(10_000)
# ╔═╡ 0c2f256d-7094-4e35-8978-4be03876344d
function computation(x)
for i in eachindex(x)
x[i] = x[i] * x[i]
end
end
# ╔═╡ 4a803fa5-0d94-440a-8ef2-794de53fab87
md"""
* Hardware performance monitoring: [LIKWID](https://github.com/RRZE-HPC/likwid)
* Julia wrapper: [LIKWID.jl](https://github.com/JuliaPerf/LIKWID.jl)
"""
# ╔═╡ 9116061f-fc3a-4b16-80c1-5d8f2fcd5947
# ╠═╡ show_logs = false
metrics, events = @perfmon "FLOPS_DP" computation(x);
# ╔═╡ e8ffd4d2-3b82-498a-8eb5-cccd448c16d8
metrics["FLOPS_DP"][1]
# ╔═╡ 79c883d5-2bcc-4852-8bbb-8f20b6d964d0
nflop = begin
local flop = 0
for tid in 1:Threads.nthreads()
flops = metrics["FLOPS_DP"][tid]["DP [MFLOP/s]"] * 1e6
runtime = metrics["FLOPS_DP"][tid]["Runtime (RDTSC) [s]"]
flop += round(Int, flops * runtime)
end
flop
end;
# ╔═╡ fdd5077f-4840-4ec9-9f7c-2d2b35e571f6
begin
N = length(x)
extrastr = nflop % N == 0 ? " == $(nflop ÷ N) N" : ""
md"""
Number of **actually performed Flops**: $(nflop) $(extrastr)
"""
# md"""
# **Counted Flops**: $(nflop)
# """
end
# ╔═╡ ba958b37-ba58-4187-8092-e57f21b3efdc
md"## Empirical Roofline model"
# ╔═╡ 4385b8ab-ecdb-4bfe-b313-1a806712a505
function f!(z)
for i in eachindex(z)
x = z[i]
z[i] = sin(x) * tanh(x) + x^2 - sqrt(x)
end
end
# ╔═╡ b2e4b7be-d8f9-489c-b974-b0712759bbe2
# ╠═╡ show_logs = false
begin
# Measurement
function roofline_point(f; N=300_000_000)
z = zeros(N)
ms, es = @perfmon "MEM_DP" f(z)
mflops = sum(getindex.(ms["MEM_DP"],"DP [MFLOP/s]"))
I = sum(getindex.(ms["MEM_DP"],"Operational intensity"))
return I, mflops
end
functions = [f!];
rlpts = roofline_point.(functions)
maxflops = 86221.86 # peakflops on this machine
maxmem = 101932.6 # peak memory bandwidth on this machine
# Plotting
roof(x) = min(x * maxmem, maxflops)
Imax = 2*maximum(getindex.(rlpts,1))
# Imax = 2*maxflops/maxmem
labels = string.(nameof.(functions))
p = plot(roof, 0, Imax;
color=:black,
lw=2,
legend=:bottomright,
label="roofline",
frame=:box,
ylab="DP Performance [MFLOP/s]",
xlab="Operational Intensity [Flops/Bytes]",
# title="Empirical Roofline Model"
)
for (i, pt) in enumerate(rlpts)
scatter!(p, [pt[1]], [pt[2]]; label=labels[i])
end
p
end
# ╔═╡ a09ee93a-a48b-47c8-b044-a7c158a2d0f3
# ╔═╡ 863337e2-09ac-48ec-ad65-d14314cd7409
md"## Dynamic thread pinning"
# ╔═╡ e94287ed-259e-43b4-accf-2867977ff204
md"""
Multithreaded **SDAXPY** kernel, i.e. `A[i] = A[i] + B[i] * C[i]`
"""
# ╔═╡ 95f597a6-46eb-45d2-9baf-b0e43707d6b9
function sdaxpy_kernel(A, B, C)
@threads :static for i in eachindex(A, B, C)
A[i] = A[i] + B[i] * C[i]
end
return nothing
end
# ╔═╡ ef735f72-bbe7-4455-93ef-29dcc895acac
function measure_memory_bandwidth()
N = Int(nnuma() * last(CpuId.cachesize()) / sizeof(Float64))
bytes = 4 * sizeof(Float64) * N # num bytes transferred in sdaxpy
# initialize data in parallel (important for NUMA / first-touch policy)
A = Vector{Float64}(undef, N)
B = Vector{Float64}(undef, N)
C = Vector{Float64}(undef, N)
@threads :static for i in eachindex(A, B, C)
A[i] = rand()
B[i] = rand()
C[i] = 0.0
end
t = @belapsed sdaxpy_kernel($A, $B, $C) evals = 2 samples = 10
mem_rate = bytes * 1e-9 / t # GB/s
return mem_rate
end
# ╔═╡ 047d3725-e0a5-4721-b2fc-988b4db4af47
md"""
* Julia package: [ThreadPinning.jl](https://github.com/carstenbauer/ThreadPinning.jl)
"""
# ╔═╡ 50c6f04c-1517-4735-b25e-0cf27c7c6353
begin
pinthreads(:compact)
threadinfo(; blocksize=20)
membw = measure_memory_bandwidth()
end;
# ╔═╡ 348487d4-56a7-427e-99e3-4fe7627c4ff4
md"""
**Memory Bandwidth**: $(round(membw; digits=2)) GB/s
"""
# ╔═╡ 00000000-0000-0000-0000-000000000001
PLUTO_PROJECT_TOML_CONTENTS = """
[deps]
BenchmarkTools = "6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf"
CpuId = "adafc99b-e345-5852-983c-f28acb93d879"
LIKWID = "bf22376a-e803-4184-b2ed-56326e3bff83"
Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80"
PlutoUI = "7f904dfe-b85e-4ff6-b463-dae2292396a8"
ThreadPinning = "811555cd-349b-4f26-b7bc-1f208b848042"
[compat]
BenchmarkTools = "~1.3.1"
CpuId = "~0.3.1"
LIKWID = "~0.4.2"
Plots = "~1.35.3"
PlutoUI = "~0.7.44"
ThreadPinning = "~0.6.1"
"""
# ╔═╡ 00000000-0000-0000-0000-000000000002
PLUTO_MANIFEST_TOML_CONTENTS = """
# This file is machine-generated - editing it directly is not advised
julia_version = "1.8.2"
manifest_format = "2.0"
project_hash = "a96e9fa33637844d13eb826f315ef6f36eb7ba64"
[[deps.AbstractPlutoDingetjes]]
deps = ["Pkg"]
git-tree-sha1 = "8eaf9f1b4921132a4cff3f36a1d9ba923b14a481"
uuid = "6e696c72-6542-2067-7265-42206c756150"
version = "1.1.4"
[[deps.ArgTools]]
uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f"
version = "1.1.1"
[[deps.Artifacts]]
uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33"
[[deps.Base64]]
uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f"
[[deps.BenchmarkTools]]
deps = ["JSON", "Logging", "Printf", "Profile", "Statistics", "UUIDs"]
git-tree-sha1 = "4c10eee4af024676200bc7752e536f858c6b8f93"
uuid = "6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf"
version = "1.3.1"
[[deps.BitFlags]]
git-tree-sha1 = "84259bb6172806304b9101094a7cc4bc6f56dbc6"
uuid = "d1d4a3ce-64b1-5f1a-9ba4-7e7e69966f35"
version = "0.1.5"
[[deps.Bzip2_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "19a35467a82e236ff51bc17a3a44b69ef35185a2"
uuid = "6e34b625-4abd-537c-b88f-471c36dfa7a0"
version = "1.0.8+0"
[[deps.CEnum]]
git-tree-sha1 = "eb4cb44a499229b3b8426dcfb5dd85333951ff90"
uuid = "fa961155-64e5-5f13-b03f-caf6b980ea82"
version = "0.4.2"
[[deps.Cairo_jll]]
deps = ["Artifacts", "Bzip2_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "JLLWrappers", "LZO_jll", "Libdl", "Pixman_jll", "Pkg", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Zlib_jll", "libpng_jll"]
git-tree-sha1 = "4b859a208b2397a7a623a03449e4636bdb17bcf2"
uuid = "83423d85-b0ee-5818-9007-b63ccbeb887a"
version = "1.16.1+1"
[[deps.ChainRulesCore]]
deps = ["Compat", "LinearAlgebra", "SparseArrays"]
git-tree-sha1 = "e7ff6cadf743c098e08fca25c91103ee4303c9bb"
uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4"
version = "1.15.6"
[[deps.ChangesOfVariables]]
deps = ["ChainRulesCore", "LinearAlgebra", "Test"]
git-tree-sha1 = "38f7a08f19d8810338d4f5085211c7dfa5d5bdd8"
uuid = "9e997f8a-9a97-42d5-a9f1-ce6bfc15e2c0"
version = "0.1.4"
[[deps.CodecZlib]]
deps = ["TranscodingStreams", "Zlib_jll"]
git-tree-sha1 = "ded953804d019afa9a3f98981d99b33e3db7b6da"
uuid = "944b1d66-785c-5afd-91f1-9de20f533193"
version = "0.7.0"
[[deps.ColorSchemes]]
deps = ["ColorTypes", "ColorVectorSpace", "Colors", "FixedPointNumbers", "Random"]
git-tree-sha1 = "1fd869cc3875b57347f7027521f561cf46d1fcd8"
uuid = "35d6a980-a343-548e-a6ea-1d62b119f2f4"
version = "3.19.0"
[[deps.ColorTypes]]
deps = ["FixedPointNumbers", "Random"]
git-tree-sha1 = "eb7f0f8307f71fac7c606984ea5fb2817275d6e4"
uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f"
version = "0.11.4"
[[deps.ColorVectorSpace]]
deps = ["ColorTypes", "FixedPointNumbers", "LinearAlgebra", "SpecialFunctions", "Statistics", "TensorCore"]
git-tree-sha1 = "d08c20eef1f2cbc6e60fd3612ac4340b89fea322"
uuid = "c3611d14-8923-5661-9e6a-0046d554d3a4"
version = "0.9.9"
[[deps.Colors]]
deps = ["ColorTypes", "FixedPointNumbers", "Reexport"]
git-tree-sha1 = "417b0ed7b8b838aa6ca0a87aadf1bb9eb111ce40"
uuid = "5ae59095-9a9b-59fe-a467-6f913c188581"
version = "0.12.8"
[[deps.Compat]]
deps = ["Dates", "LinearAlgebra", "UUIDs"]
git-tree-sha1 = "3ca828fe1b75fa84b021a7860bd039eaea84d2f2"
uuid = "34da2185-b29b-5c13-b0c7-acf172513d20"
version = "4.3.0"
[[deps.CompilerSupportLibraries_jll]]
deps = ["Artifacts", "Libdl"]
uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae"
version = "0.5.2+0"
[[deps.ConstructionBase]]
deps = ["LinearAlgebra"]
git-tree-sha1 = "fb21ddd70a051d882a1686a5a550990bbe371a95"
uuid = "187b0558-2788-49d3-abe0-74a17ed4e7c9"
version = "1.4.1"
[[deps.Contour]]
git-tree-sha1 = "d05d9e7b7aedff4e5b51a029dced05cfb6125781"
uuid = "d38c429a-6771-53c6-b99e-75d170b6e991"
version = "0.6.2"
[[deps.CpuId]]
deps = ["Markdown"]
git-tree-sha1 = "fcbb72b032692610bfbdb15018ac16a36cf2e406"
uuid = "adafc99b-e345-5852-983c-f28acb93d879"
version = "0.3.1"
[[deps.Crayons]]
git-tree-sha1 = "249fe38abf76d48563e2f4556bebd215aa317e15"
uuid = "a8cc5b0e-0ffa-5ad4-8c14-923d3ee1735f"
version = "4.1.1"
[[deps.DataAPI]]
git-tree-sha1 = "46d2680e618f8abd007bce0c3026cb0c4a8f2032"
uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a"
version = "1.12.0"
[[deps.DataStructures]]
deps = ["Compat", "InteractiveUtils", "OrderedCollections"]
git-tree-sha1 = "d1fff3a548102f48987a52a2e0d114fa97d730f0"
uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8"
version = "0.18.13"
[[deps.DataValueInterfaces]]
git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6"
uuid = "e2d170a0-9d28-54be-80f0-106bbe20a464"
version = "1.0.0"
[[deps.Dates]]
deps = ["Printf"]
uuid = "ade2ca70-3891-5945-98fb-dc099432e06a"
[[deps.DelimitedFiles]]
deps = ["Mmap"]
uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab"
[[deps.DocStringExtensions]]
deps = ["LibGit2"]
git-tree-sha1 = "5158c2b41018c5f7eb1470d558127ac274eca0c9"
uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae"
version = "0.9.1"
[[deps.Downloads]]
deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"]
uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6"
version = "1.6.0"
[[deps.Expat_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "bad72f730e9e91c08d9427d5e8db95478a3c323d"
uuid = "2e619515-83b5-522b-bb60-26c02a35a201"
version = "2.4.8+0"
[[deps.FFMPEG]]
deps = ["FFMPEG_jll"]
git-tree-sha1 = "b57e3acbe22f8484b4b5ff66a7499717fe1a9cc8"
uuid = "c87230d0-a227-11e9-1b43-d7ebe4e7570a"
version = "0.4.1"
[[deps.FFMPEG_jll]]
deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "JLLWrappers", "LAME_jll", "Libdl", "Ogg_jll", "OpenSSL_jll", "Opus_jll", "PCRE2_jll", "Pkg", "Zlib_jll", "libaom_jll", "libass_jll", "libfdk_aac_jll", "libvorbis_jll", "x264_jll", "x265_jll"]
git-tree-sha1 = "74faea50c1d007c85837327f6775bea60b5492dd"
uuid = "b22a6f82-2f65-5046-a5b2-351ab43fb4e5"
version = "4.4.2+2"
[[deps.FileWatching]]
uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee"
[[deps.FixedPointNumbers]]
deps = ["Statistics"]
git-tree-sha1 = "335bfdceacc84c5cdf16aadc768aa5ddfc5383cc"
uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93"
version = "0.8.4"
[[deps.Fontconfig_jll]]
deps = ["Artifacts", "Bzip2_jll", "Expat_jll", "FreeType2_jll", "JLLWrappers", "Libdl", "Libuuid_jll", "Pkg", "Zlib_jll"]
git-tree-sha1 = "21efd19106a55620a188615da6d3d06cd7f6ee03"
uuid = "a3f928ae-7b40-5064-980b-68af3947d34b"
version = "2.13.93+0"
[[deps.Formatting]]
deps = ["Printf"]
git-tree-sha1 = "8339d61043228fdd3eb658d86c926cb282ae72a8"
uuid = "59287772-0a20-5a39-b81b-1366585eb4c0"
version = "0.4.2"
[[deps.FreeType2_jll]]
deps = ["Artifacts", "Bzip2_jll", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"]
git-tree-sha1 = "87eb71354d8ec1a96d4a7636bd57a7347dde3ef9"
uuid = "d7e528f0-a631-5988-bf34-fe36492bcfd7"
version = "2.10.4+0"
[[deps.FriBidi_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "aa31987c2ba8704e23c6c8ba8a4f769d5d7e4f91"
uuid = "559328eb-81f9-559d-9380-de523a88c83c"
version = "1.0.10+0"
[[deps.GLFW_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Libglvnd_jll", "Pkg", "Xorg_libXcursor_jll", "Xorg_libXi_jll", "Xorg_libXinerama_jll", "Xorg_libXrandr_jll"]
git-tree-sha1 = "d972031d28c8c8d9d7b41a536ad7bb0c2579caca"
uuid = "0656b61e-2033-5cc2-a64a-77c0f6c09b89"
version = "3.3.8+0"
[[deps.GR]]
deps = ["Base64", "DelimitedFiles", "GR_jll", "HTTP", "JSON", "Libdl", "LinearAlgebra", "Pkg", "Preferences", "Printf", "Random", "Serialization", "Sockets", "Test", "UUIDs"]
git-tree-sha1 = "00a9d4abadc05b9476e937a5557fcce476b9e547"
uuid = "28b8d3ca-fb5f-59d9-8090-bfdbd6d07a71"
version = "0.69.5"
[[deps.GR_jll]]
deps = ["Artifacts", "Bzip2_jll", "Cairo_jll", "FFMPEG_jll", "Fontconfig_jll", "GLFW_jll", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Libtiff_jll", "Pixman_jll", "Pkg", "Qt5Base_jll", "Zlib_jll", "libpng_jll"]
git-tree-sha1 = "bc9f7725571ddb4ab2c4bc74fa397c1c5ad08943"
uuid = "d2c73de3-f751-5644-a686-071e5b155ba9"
version = "0.69.1+0"
[[deps.Gettext_jll]]
deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Libiconv_jll", "Pkg", "XML2_jll"]
git-tree-sha1 = "9b02998aba7bf074d14de89f9d37ca24a1a0b046"
uuid = "78b55507-aeef-58d4-861c-77aaff3498b1"
version = "0.21.0+0"
[[deps.Glib_jll]]
deps = ["Artifacts", "Gettext_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Libiconv_jll", "Libmount_jll", "PCRE2_jll", "Pkg", "Zlib_jll"]
git-tree-sha1 = "fb83fbe02fe57f2c068013aa94bcdf6760d3a7a7"
uuid = "7746bdde-850d-59dc-9ae8-88ece973131d"
version = "2.74.0+1"
[[deps.Graphite2_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "344bf40dcab1073aca04aa0df4fb092f920e4011"
uuid = "3b182d85-2403-5c21-9c21-1e1f0cc25472"
version = "1.3.14+0"
[[deps.Grisu]]
git-tree-sha1 = "53bb909d1151e57e2484c3d1b53e19552b887fb2"
uuid = "42e2da0e-8278-4e71-bc24-59509adca0fe"
version = "1.0.2"
[[deps.HTTP]]
deps = ["Base64", "CodecZlib", "Dates", "IniFile", "Logging", "LoggingExtras", "MbedTLS", "NetworkOptions", "OpenSSL", "Random", "SimpleBufferStream", "Sockets", "URIs", "UUIDs"]
git-tree-sha1 = "e8c58d5f03b9d9eb9ed7067a2f34c7c371ab130b"
uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3"
version = "1.4.1"
[[deps.HarfBuzz_jll]]
deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "Graphite2_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Pkg"]
git-tree-sha1 = "129acf094d168394e80ee1dc4bc06ec835e510a3"
uuid = "2e76f6c2-a576-52d4-95c1-20adfe4de566"
version = "2.8.1+1"
[[deps.Hyperscript]]
deps = ["Test"]
git-tree-sha1 = "8d511d5b81240fc8e6802386302675bdf47737b9"
uuid = "47d2ed2b-36de-50cf-bf87-49c2cf4b8b91"
version = "0.0.4"
[[deps.HypertextLiteral]]
deps = ["Tricks"]
git-tree-sha1 = "c47c5fa4c5308f27ccaac35504858d8914e102f9"
uuid = "ac1192a8-f4b3-4bfe-ba22-af5b92cd3ab2"
version = "0.9.4"
[[deps.IOCapture]]
deps = ["Logging", "Random"]
git-tree-sha1 = "f7be53659ab06ddc986428d3a9dcc95f6fa6705a"
uuid = "b5f81e59-6552-4d32-b1f0-c071b021bf89"
version = "0.2.2"
[[deps.IniFile]]
git-tree-sha1 = "f550e6e32074c939295eb5ea6de31849ac2c9625"
uuid = "83e8ac13-25f8-5344-8a64-a9f2b223428f"
version = "0.5.1"
[[deps.InteractiveUtils]]
deps = ["Markdown"]
uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240"
[[deps.InverseFunctions]]
deps = ["Test"]
git-tree-sha1 = "49510dfcb407e572524ba94aeae2fced1f3feb0f"
uuid = "3587e190-3f89-42d0-90ee-14403ec27112"
version = "0.1.8"
[[deps.IrrationalConstants]]
git-tree-sha1 = "7fd44fd4ff43fc60815f8e764c0f352b83c49151"
uuid = "92d709cd-6900-40b7-9082-c6be49f344b6"
version = "0.1.1"
[[deps.IteratorInterfaceExtensions]]
git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856"
uuid = "82899510-4779-5014-852e-03e436cf321d"
version = "1.0.0"
[[deps.JLFzf]]
deps = ["Pipe", "REPL", "Random", "fzf_jll"]
git-tree-sha1 = "f377670cda23b6b7c1c0b3893e37451c5c1a2185"
uuid = "1019f520-868f-41f5-a6de-eb00f4b6a39c"
version = "0.1.5"
[[deps.JLLWrappers]]
deps = ["Preferences"]
git-tree-sha1 = "abc9885a7ca2052a736a600f7fa66209f96506e1"
uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210"
version = "1.4.1"
[[deps.JSON]]
deps = ["Dates", "Mmap", "Parsers", "Unicode"]
git-tree-sha1 = "3c837543ddb02250ef42f4738347454f95079d4e"
uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6"
version = "0.21.3"
[[deps.JpegTurbo_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "b53380851c6e6664204efb2e62cd24fa5c47e4ba"
uuid = "aacddb02-875f-59d6-b918-886e6ef4fbf8"
version = "2.1.2+0"
[[deps.LAME_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "f6250b16881adf048549549fba48b1161acdac8c"
uuid = "c1c5ebd0-6772-5130-a774-d5fcae4a789d"
version = "3.100.1+0"
[[deps.LERC_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "bf36f528eec6634efc60d7ec062008f171071434"
uuid = "88015f11-f218-50d7-93a8-a6af411a945d"
version = "3.0.0+1"
[[deps.LIKWID]]
deps = ["CEnum", "Libdl", "OrderedCollections", "PrettyTables", "Unitful"]
git-tree-sha1 = "7adf32d5bc8e643d71d3760f8ef003d7e2ac3a7d"
uuid = "bf22376a-e803-4184-b2ed-56326e3bff83"
version = "0.4.2"
[[deps.LZO_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "e5b909bcf985c5e2605737d2ce278ed791b89be6"
uuid = "dd4b983a-f0e5-5f8d-a1b7-129d4a5fb1ac"
version = "2.10.1+0"
[[deps.LaTeXStrings]]
git-tree-sha1 = "f2355693d6778a178ade15952b7ac47a4ff97996"
uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f"
version = "1.3.0"
[[deps.Latexify]]
deps = ["Formatting", "InteractiveUtils", "LaTeXStrings", "MacroTools", "Markdown", "OrderedCollections", "Printf", "Requires"]
git-tree-sha1 = "ab9aa169d2160129beb241cb2750ca499b4e90e9"
uuid = "23fbe1c1-3f47-55db-b15f-69d7ec21a316"
version = "0.15.17"
[[deps.LibCURL]]
deps = ["LibCURL_jll", "MozillaCACerts_jll"]
uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21"
version = "0.6.3"
[[deps.LibCURL_jll]]
deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"]
uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0"
version = "7.84.0+0"
[[deps.LibGit2]]
deps = ["Base64", "NetworkOptions", "Printf", "SHA"]
uuid = "76f85450-5226-5b5a-8eaa-529ad045b433"
[[deps.LibSSH2_jll]]
deps = ["Artifacts", "Libdl", "MbedTLS_jll"]
uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8"
version = "1.10.2+0"
[[deps.Libdl]]
uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb"
[[deps.Libffi_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "0b4a5d71f3e5200a7dff793393e09dfc2d874290"
uuid = "e9f186c6-92d2-5b65-8a66-fee21dc1b490"
version = "3.2.2+1"
[[deps.Libgcrypt_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgpg_error_jll", "Pkg"]
git-tree-sha1 = "64613c82a59c120435c067c2b809fc61cf5166ae"
uuid = "d4300ac3-e22c-5743-9152-c294e39db1e4"
version = "1.8.7+0"
[[deps.Libglvnd_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll", "Xorg_libXext_jll"]
git-tree-sha1 = "7739f837d6447403596a75d19ed01fd08d6f56bf"
uuid = "7e76a0d4-f3c7-5321-8279-8d96eeed0f29"
version = "1.3.0+3"
[[deps.Libgpg_error_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "c333716e46366857753e273ce6a69ee0945a6db9"
uuid = "7add5ba3-2f88-524e-9cd5-f83b8a55f7b8"
version = "1.42.0+0"
[[deps.Libiconv_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "42b62845d70a619f063a7da093d995ec8e15e778"
uuid = "94ce4f54-9a6c-5748-9c1c-f9c7231a4531"
version = "1.16.1+1"
[[deps.Libmount_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "9c30530bf0effd46e15e0fdcf2b8636e78cbbd73"
uuid = "4b2f31a3-9ecc-558c-b454-b3730dcb73e9"
version = "2.35.0+0"
[[deps.Libtiff_jll]]
deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "LERC_jll", "Libdl", "Pkg", "Zlib_jll", "Zstd_jll"]
git-tree-sha1 = "3eb79b0ca5764d4799c06699573fd8f533259713"
uuid = "89763e89-9b03-5906-acba-b20f662cd828"
version = "4.4.0+0"
[[deps.Libuuid_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "7f3efec06033682db852f8b3bc3c1d2b0a0ab066"
uuid = "38a345b3-de98-5d2b-a5d3-14cd9215e700"
version = "2.36.0+0"
[[deps.LinearAlgebra]]
deps = ["Libdl", "libblastrampoline_jll"]
uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
[[deps.LogExpFunctions]]
deps = ["ChainRulesCore", "ChangesOfVariables", "DocStringExtensions", "InverseFunctions", "IrrationalConstants", "LinearAlgebra"]
git-tree-sha1 = "94d9c52ca447e23eac0c0f074effbcd38830deb5"
uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688"
version = "0.3.18"
[[deps.Logging]]
uuid = "56ddb016-857b-54e1-b83d-db4d58db5568"
[[deps.LoggingExtras]]
deps = ["Dates", "Logging"]
git-tree-sha1 = "5d4d2d9904227b8bd66386c1138cf4d5ffa826bf"
uuid = "e6f89c97-d47a-5376-807f-9c37f3926c36"
version = "0.4.9"
[[deps.MacroTools]]
deps = ["Markdown", "Random"]
git-tree-sha1 = "42324d08725e200c23d4dfb549e0d5d89dede2d2"
uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09"
version = "0.5.10"
[[deps.Markdown]]
deps = ["Base64"]
uuid = "d6f4376e-aef5-505a-96c1-9c027394607a"
[[deps.MbedTLS]]
deps = ["Dates", "MbedTLS_jll", "MozillaCACerts_jll", "Random", "Sockets"]
git-tree-sha1 = "6872f9594ff273da6d13c7c1a1545d5a8c7d0c1c"
uuid = "739be429-bea8-5141-9913-cc70e7f3736d"
version = "1.1.6"
[[deps.MbedTLS_jll]]
deps = ["Artifacts", "Libdl"]
uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1"
version = "2.28.0+0"
[[deps.Measures]]
git-tree-sha1 = "e498ddeee6f9fdb4551ce855a46f54dbd900245f"
uuid = "442fdcdd-2543-5da2-b0f3-8c86c306513e"
version = "0.3.1"
[[deps.Missings]]
deps = ["DataAPI"]
git-tree-sha1 = "bf210ce90b6c9eed32d25dbcae1ebc565df2687f"
uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28"
version = "1.0.2"
[[deps.Mmap]]
uuid = "a63ad114-7e13-5084-954f-fe012c677804"
[[deps.MozillaCACerts_jll]]
uuid = "14a3606d-f60d-562e-9121-12d972cd8159"
version = "2022.2.1"
[[deps.NaNMath]]
deps = ["OpenLibm_jll"]
git-tree-sha1 = "a7c3d1da1189a1c2fe843a3bfa04d18d20eb3211"
uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3"
version = "1.0.1"
[[deps.NetworkOptions]]
uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908"
version = "1.2.0"
[[deps.Ogg_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "887579a3eb005446d514ab7aeac5d1d027658b8f"
uuid = "e7412a2a-1a6e-54c0-be00-318e2571c051"
version = "1.3.5+1"
[[deps.OpenBLAS_jll]]
deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"]
uuid = "4536629a-c528-5b80-bd46-f80d51c5b363"
version = "0.3.20+0"
[[deps.OpenLibm_jll]]
deps = ["Artifacts", "Libdl"]
uuid = "05823500-19ac-5b8b-9628-191a04bc5112"
version = "0.8.1+0"
[[deps.OpenSSL]]
deps = ["BitFlags", "Dates", "MozillaCACerts_jll", "OpenSSL_jll", "Sockets"]
git-tree-sha1 = "ebe81469e9d7b471d7ddb611d9e147ea16de0add"
uuid = "4d8831e6-92b7-49fb-bdf8-b643e874388c"
version = "1.2.1"
[[deps.OpenSSL_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "e60321e3f2616584ff98f0a4f18d98ae6f89bbb3"
uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95"
version = "1.1.17+0"
[[deps.OpenSpecFun_jll]]
deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "13652491f6856acfd2db29360e1bbcd4565d04f1"
uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e"
version = "0.5.5+0"
[[deps.Opus_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "51a08fb14ec28da2ec7a927c4337e4332c2a4720"
uuid = "91d4177d-7536-5919-b921-800302f37372"
version = "1.3.2+0"
[[deps.OrderedCollections]]
git-tree-sha1 = "85f8e6578bf1f9ee0d11e7bb1b1456435479d47c"
uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d"
version = "1.4.1"
[[deps.PCRE2_jll]]
deps = ["Artifacts", "Libdl"]
uuid = "efcefdf7-47ab-520b-bdef-62a2eaa19f15"
version = "10.40.0+0"
[[deps.Parsers]]
deps = ["Dates"]
git-tree-sha1 = "6c01a9b494f6d2a9fc180a08b182fcb06f0958a0"
uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0"
version = "2.4.2"
[[deps.Pipe]]
git-tree-sha1 = "6842804e7867b115ca9de748a0cf6b364523c16d"
uuid = "b98c9c47-44ae-5843-9183-064241ee97a0"
version = "1.3.0"
[[deps.Pixman_jll]]
deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
git-tree-sha1 = "b4f5d02549a10e20780a24fce72bea96b6329e29"
uuid = "30392449-352a-5448-841d-b1acce4e97dc"
version = "0.40.1+0"
[[deps.Pkg]]
deps = ["Artifacts", "Dates", "Downloads", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"]
uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f"
version = "1.8.0"
[[deps.PlotThemes]]
deps = ["PlotUtils", "Statistics"]
git-tree-sha1 = "1f03a2d339f42dca4a4da149c7e15e9b896ad899"
uuid = "ccf2f8ad-2431-5c83-bf29-c5338b663b6a"
version = "3.1.0"
[[deps.PlotUtils]]
deps = ["ColorSchemes", "Colors", "Dates", "Printf", "Random", "Reexport", "SnoopPrecompile", "Statistics"]
git-tree-sha1 = "21303256d239f6b484977314674aef4bb1fe4420"
uuid = "995b91a9-d308-5afd-9ec6-746e21dbc043"
version = "1.3.1"
[[deps.Plots]]
deps = ["Base64", "Contour", "Dates", "Downloads", "FFMPEG", "FixedPointNumbers", "GR", "JLFzf", "JSON", "LaTeXStrings", "Latexify", "LinearAlgebra", "Measures", "NaNMath", "Pkg", "PlotThemes", "PlotUtils", "Printf", "REPL", "Random", "RecipesBase", "RecipesPipeline", "Reexport", "RelocatableFolders", "Requires", "Scratch", "Showoff", "SnoopPrecompile", "SparseArrays", "Statistics", "StatsBase", "UUIDs", "UnicodeFun", "Unzip"]
git-tree-sha1 = "524d9ff1b2f4473fef59678c06f9f77160a204b1"
uuid = "91a5bcdd-55d7-5caf-9e0b-520d859cae80"
version = "1.35.3"
[[deps.PlutoUI]]
deps = ["AbstractPlutoDingetjes", "Base64", "ColorTypes", "Dates", "Hyperscript", "HypertextLiteral", "IOCapture", "InteractiveUtils", "JSON", "Logging", "Markdown", "Random", "Reexport", "UUIDs"]
git-tree-sha1 = "6e33d318cf8843dade925e35162992145b4eb12f"
uuid = "7f904dfe-b85e-4ff6-b463-dae2292396a8"
version = "0.7.44"
[[deps.Preferences]]
deps = ["TOML"]
git-tree-sha1 = "47e5f437cc0e7ef2ce8406ce1e7e24d44915f88d"
uuid = "21216c6a-2e73-6563-6e65-726566657250"
version = "1.3.0"
[[deps.PrettyTables]]
deps = ["Crayons", "Formatting", "Markdown", "Reexport", "StringManipulation", "Tables"]
git-tree-sha1 = "460d9e154365e058c4d886f6f7d6df5ffa1ea80e"
uuid = "08abe8d2-0d0c-5749-adfa-8a2ac140af0d"
version = "2.1.2"
[[deps.Printf]]
deps = ["Unicode"]
uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7"
[[deps.Profile]]
deps = ["Printf"]
uuid = "9abbd945-dff8-562f-b5e8-e1ebf5ef1b79"
[[deps.Qt5Base_jll]]
deps = ["Artifacts", "CompilerSupportLibraries_jll", "Fontconfig_jll", "Glib_jll", "JLLWrappers", "Libdl", "Libglvnd_jll", "OpenSSL_jll", "Pkg", "Xorg_libXext_jll", "Xorg_libxcb_jll", "Xorg_xcb_util_image_jll", "Xorg_xcb_util_keysyms_jll", "Xorg_xcb_util_renderutil_jll", "Xorg_xcb_util_wm_jll", "Zlib_jll", "xkbcommon_jll"]
git-tree-sha1 = "c6c0f690d0cc7caddb74cef7aa847b824a16b256"
uuid = "ea2cea3b-5b76-57ae-a6ef-0a8af62496e1"
version = "5.15.3+1"
[[deps.REPL]]
deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"]
uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb"
[[deps.Random]]
deps = ["SHA", "Serialization"]
uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
[[deps.RecipesBase]]
deps = ["SnoopPrecompile"]
git-tree-sha1 = "612a4d76ad98e9722c8ba387614539155a59e30c"
uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01"
version = "1.3.0"
[[deps.RecipesPipeline]]
deps = ["Dates", "NaNMath", "PlotUtils", "RecipesBase", "SnoopPrecompile"]
git-tree-sha1 = "9b1c0c8e9188950e66fc28f40bfe0f8aac311fe0"
uuid = "01d81517-befc-4cb6-b9ec-a95719d0359c"
version = "0.6.7"
[[deps.Reexport]]
git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b"
uuid = "189a3867-3050-52da-a836-e630ba90ab69"
version = "1.2.2"
[[deps.RelocatableFolders]]
deps = ["SHA", "Scratch"]
git-tree-sha1 = "90bc7a7c96410424509e4263e277e43250c05691"
uuid = "05181044-ff0b-4ac5-8273-598c1e38db00"
version = "1.0.0"
[[deps.Requires]]
deps = ["UUIDs"]
git-tree-sha1 = "838a3a4188e2ded87a4f9f184b4b0d78a1e91cb7"
uuid = "ae029012-a4dd-5104-9daa-d747884805df"
version = "1.3.0"
[[deps.SHA]]
uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce"
version = "0.7.0"
[[deps.Scratch]]
deps = ["Dates"]
git-tree-sha1 = "f94f779c94e58bf9ea243e77a37e16d9de9126bd"
uuid = "6c6a2e73-6563-6170-7368-637461726353"
version = "1.1.1"
[[deps.Serialization]]
uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b"
[[deps.Showoff]]
deps = ["Dates", "Grisu"]
git-tree-sha1 = "91eddf657aca81df9ae6ceb20b959ae5653ad1de"
uuid = "992d4aef-0814-514b-bc4d-f2e9a6c4116f"
version = "1.0.3"
[[deps.SimpleBufferStream]]
git-tree-sha1 = "874e8867b33a00e784c8a7e4b60afe9e037b74e1"
uuid = "777ac1f9-54b0-4bf8-805c-2214025038e7"
version = "1.1.0"
[[deps.SnoopPrecompile]]
git-tree-sha1 = "f604441450a3c0569830946e5b33b78c928e1a85"
uuid = "66db9d55-30c0-4569-8b51-7e840670fc0c"
version = "1.0.1"
[[deps.Sockets]]
uuid = "6462fe0b-24de-5631-8697-dd941f90decc"
[[deps.SortingAlgorithms]]
deps = ["DataStructures"]
git-tree-sha1 = "b3363d7460f7d098ca0912c69b082f75625d7508"
uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c"
version = "1.0.1"
[[deps.SparseArrays]]
deps = ["LinearAlgebra", "Random"]
uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"
[[deps.SpecialFunctions]]
deps = ["ChainRulesCore", "IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"]
git-tree-sha1 = "d75bda01f8c31ebb72df80a46c88b25d1c79c56d"
uuid = "276daf66-3868-5448-9aa4-cd146d93841b"
version = "2.1.7"
[[deps.Statistics]]
deps = ["LinearAlgebra", "SparseArrays"]
uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2"
[[deps.StatsAPI]]
deps = ["LinearAlgebra"]
git-tree-sha1 = "f9af7f195fb13589dd2e2d57fdb401717d2eb1f6"
uuid = "82ae8749-77ed-4fe6-ae5f-f523153014b0"
version = "1.5.0"
[[deps.StatsBase]]
deps = ["DataAPI", "DataStructures", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"]
git-tree-sha1 = "d1bf48bfcc554a3761a133fe3a9bb01488e06916"
uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91"
version = "0.33.21"
[[deps.StringManipulation]]
git-tree-sha1 = "46da2434b41f41ac3594ee9816ce5541c6096123"
uuid = "892a3eda-7b42-436c-8928-eab12a02cf0e"
version = "0.3.0"
[[deps.TOML]]
deps = ["Dates"]
uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76"
version = "1.0.0"
[[deps.TableTraits]]
deps = ["IteratorInterfaceExtensions"]
git-tree-sha1 = "c06b2f539df1c6efa794486abfb6ed2022561a39"
uuid = "3783bdb8-4a98-5b6b-af9a-565f29a5fe9c"
version = "1.0.1"
[[deps.Tables]]
deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "LinearAlgebra", "OrderedCollections", "TableTraits", "Test"]
git-tree-sha1 = "c79322d36826aa2f4fd8ecfa96ddb47b174ac78d"
uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c"
version = "1.10.0"
[[deps.Tar]]
deps = ["ArgTools", "SHA"]
uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e"
version = "1.10.1"
[[deps.TensorCore]]
deps = ["LinearAlgebra"]
git-tree-sha1 = "1feb45f88d133a655e001435632f019a9a1bcdb6"
uuid = "62fd8b95-f654-4bbd-a8a5-9c27f68ccd50"
version = "0.1.1"
[[deps.Test]]
deps = ["InteractiveUtils", "Logging", "Random", "Serialization"]
uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
[[deps.ThreadPinning]]
deps = ["DelimitedFiles", "Libdl", "LinearAlgebra", "Preferences", "Random", "SnoopPrecompile"]
git-tree-sha1 = "118bc9bbe771711ee0b10bd1157c3f0fa8704f77"
uuid = "811555cd-349b-4f26-b7bc-1f208b848042"
version = "0.6.1"
[[deps.TranscodingStreams]]
deps = ["Random", "Test"]
git-tree-sha1 = "8a75929dcd3c38611db2f8d08546decb514fcadf"
uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa"
version = "0.9.9"
[[deps.Tricks]]
git-tree-sha1 = "6bac775f2d42a611cdfcd1fb217ee719630c4175"
uuid = "410a4b4d-49e4-4fbc-ab6d-cb71b17b3775"
version = "0.1.6"
[[deps.URIs]]
git-tree-sha1 = "e59ecc5a41b000fa94423a578d29290c7266fc10"
uuid = "5c2747f8-b7ea-4ff2-ba2e-563bfd36b1d4"