From 3fbe21673528c8def3b82504ab6e26a2faf4bf96 Mon Sep 17 00:00:00 2001 From: github-actions Date: Fri, 6 Dec 2024 14:27:24 +0000 Subject: [PATCH] Update from github actions --- .github/dependabot.yml | 19 + .github/workflows/ci.yml | 117 + .nojekyll | 0 .pre-commit-config.yaml | 60 + ...ench-05ae8920514c49deb09dee3d94648622.json | 134 ++ ...ench-0f326341f9d94ba29646527008f9397e.json | 134 ++ ...ench-1255d1c30769449395d041799418a44b.json | 117 + ...ench-1931eb5d1d374795a0001e0bd3593fae.json | 86 + ...ench-1bbc05c89b3142469b1ed34d9e5c57f8.json | 213 ++ ...ench-27a255afd4df46ddbdc52d067feeb958.json | 181 ++ ...ench-3b67dab7a52d48728f3ac9b1c65be965.json | 134 ++ ...ench-3dad8cd026d44af98eb20bf90595f93c.json | 117 + ...ench-47a547f0f82c4c6e881cc3d9b04de02f.json | 133 ++ ...ench-4b2a5a23ba8945cb8e27660743b2b01c.json | 86 + ...ench-4d94d50f10a5440d9e71127a18ccb37f.json | 134 ++ ...ench-504b793dae8f487da53338f4c4375989.json | 182 ++ ...ench-5855e60fafe3432297c3267e8844b853.json | 136 ++ ...ench-60577e0e78d947eea41d9663ea0e3669.json | 134 ++ ...ench-6250900504ea40ecaedc31dd2cb5825f.json | 133 ++ ...ench-66fbf2f1650d4e3f925b6bf0688b7b84.json | 134 ++ ...ench-7800cee608ec44d699f9a435db3e65f1.json | 69 + ...ench-7ca861e4d8f5486aa6185066cfd7d4b0.json | 134 ++ ...ench-9736fe26172840069fdc275df840cbf9.json | 133 ++ ...ench-982c908512be4f42896b0f5b4890b926.json | 135 ++ ...ench-9bcab8ff6d954174bfc465788bba33e9.json | 86 + ...ench-9d00be9dc79741cbbfb02f0aaf274312.json | 133 ++ bench/devcloud/dr-bench-BlackScholes-CPU.csv | 8 + bench/devcloud/dr-bench-BlackScholes-CPU.png | Bin 0 -> 34135 bytes bench/devcloud/dr-bench-BlackScholes-GPU.csv | 10 + bench/devcloud/dr-bench-BlackScholes-GPU.png | Bin 0 -> 41009 bytes bench/devcloud/dr-bench-DotProduct-CPU.csv | 8 + bench/devcloud/dr-bench-DotProduct-CPU.png | Bin 0 -> 39469 bytes bench/devcloud/dr-bench-DotProduct-GPU.csv | 11 + bench/devcloud/dr-bench-DotProduct-GPU.png | Bin 0 -> 41817 bytes bench/devcloud/dr-bench-Gemm-GPU.csv | 3 + bench/devcloud/dr-bench-Gemm-GPU.png | Bin 0 -> 15558 bytes .../devcloud/dr-bench-Inclusive_Scan-CPU.csv | 8 + .../devcloud/dr-bench-Inclusive_Scan-CPU.png | Bin 0 -> 36181 bytes .../devcloud/dr-bench-Inclusive_Scan-GPU.csv | 11 + .../devcloud/dr-bench-Inclusive_Scan-GPU.png | Bin 0 -> 42203 bytes bench/devcloud/dr-bench-Reduce-CPU.csv | 8 + bench/devcloud/dr-bench-Reduce-CPU.png | Bin 0 -> 35396 bytes bench/devcloud/dr-bench-Reduce-GPU.csv | 11 + bench/devcloud/dr-bench-Reduce-GPU.png | Bin 0 -> 41202 bytes bench/devcloud/dr-bench-Sort-GPU.csv | 3 + bench/devcloud/dr-bench-Sort-GPU.png | Bin 0 -> 15327 bytes bench/devcloud/dr-bench-Stencil2D-CPU.csv | 6 + bench/devcloud/dr-bench-Stencil2D-CPU.png | Bin 0 -> 37516 bytes bench/devcloud/dr-bench-Stencil2D-GPU.csv | 10 + bench/devcloud/dr-bench-Stencil2D-GPU.png | Bin 0 -> 41258 bytes bench/devcloud/dr-bench-Stream_Add-CPU.csv | 7 + bench/devcloud/dr-bench-Stream_Add-CPU.png | Bin 0 -> 35775 bytes bench/devcloud/dr-bench-Stream_Add-GPU.csv | 9 + bench/devcloud/dr-bench-Stream_Add-GPU.png | Bin 0 -> 37017 bytes bench/devcloud/dr-bench-Stream_Copy-CPU.csv | 7 + bench/devcloud/dr-bench-Stream_Copy-CPU.png | Bin 0 -> 34587 bytes bench/devcloud/dr-bench-Stream_Copy-GPU.csv | 9 + bench/devcloud/dr-bench-Stream_Copy-GPU.png | Bin 0 -> 36201 bytes bench/devcloud/dr-bench-Stream_Scale-CPU.csv | 7 + bench/devcloud/dr-bench-Stream_Scale-CPU.png | Bin 0 -> 35124 bytes bench/devcloud/dr-bench-Stream_Scale-GPU.csv | 9 + bench/devcloud/dr-bench-Stream_Scale-GPU.png | Bin 0 -> 36030 bytes bench/devcloud/dr-bench-Stream_Triad-CPU.csv | 7 + bench/devcloud/dr-bench-Stream_Triad-CPU.png | Bin 0 -> 35699 bytes bench/devcloud/dr-bench-Stream_Triad-GPU.csv | 9 + bench/devcloud/dr-bench-Stream_Triad-GPU.png | Bin 0 -> 36746 bytes bench/devcloud/dr-bench-WaveEquation-CPU.csv | 5 + bench/devcloud/dr-bench-WaveEquation-CPU.png | Bin 0 -> 38563 bytes bench/devcloud/dr-bench-WaveEquation-GPU.csv | 9 + bench/devcloud/dr-bench-WaveEquation-GPU.png | Bin 0 -> 42314 bytes ...ench-a30b94d525ae4cee8aedceedddca35ce.json | 181 ++ ...ench-a3f4821ec91c4d4c8ae2603dd15b4f11.json | 134 ++ ...ench-cfc91caadee849f29be3cb9102189519.json | 69 + ...ench-d0c2ccea5b0c459ebde79e341a1d68d8.json | 213 ++ ...ench-dc6b76bd54834580a8fccdc353f49de1.json | 134 ++ ...ench-ee56a4c8add24f4b9b6777eb1a3db39b.json | 134 ++ ...ench-f4eaa5a34ce94d35ab3bd5bdcf44ed6b.json | 133 ++ ...ench-fd64e9be192a4f1687d8136fe6bc4640.json | 181 ++ doxygen/algorithms_8hpp_source.html | 103 + doxygen/alignment_8hpp_source.html | 157 ++ doxygen/allocator_8hpp_source.html | 141 ++ doxygen/allocators_8hpp_source.html | 217 ++ doxygen/annotated.html | 235 ++ doxygen/bc_s.png | Bin 0 -> 676 bytes doxygen/bc_sd.png | Bin 0 -> 635 bytes doxygen/bdwn.png | Bin 0 -> 147 bytes ...___detail_1_1direct__iterator-members.html | 119 + ...sdr_1_1____detail_1_1direct__iterator.html | 190 ++ ..._1enumerate__adapter__closure-members.html | 90 + ...detail_1_1enumerate__adapter__closure.html | 107 + ...____detail_1_1enumerate__fn__-members.html | 90 + ...ssdr_1_1____detail_1_1enumerate__fn__.html | 102 + ...lassdr_1_1____detail_1_1event-members.html | 89 + doxygen/classdr_1_1____detail_1_1event.html | 98 + ...ail_1_1mdspan__iter__accessor-members.html | 94 + ...1____detail_1_1mdspan__iter__accessor.html | 114 + ..._1_1____detail_1_1mdtranspose-members.html | 93 + .../classdr_1_1____detail_1_1mdtranspose.html | 129 ++ ...____detail_1_1mdtranspose__coll__graph.map | 4 + ...____detail_1_1mdtranspose__coll__graph.md5 | 1 + ...____detail_1_1mdtranspose__coll__graph.png | Bin 0 -> 5643 bytes ..._detail_1_1mdtranspose__inherit__graph.map | 4 + ..._detail_1_1mdtranspose__inherit__graph.md5 | 1 + ..._detail_1_1mdtranspose__inherit__graph.png | Bin 0 -> 5643 bytes ...1_1____detail_1_1owning__view-members.html | 102 + ...classdr_1_1____detail_1_1owning__view.html | 152 ++ ...___detail_1_1owning__view__coll__graph.map | 4 + ...___detail_1_1owning__view__coll__graph.md5 | 1 + ...___detail_1_1owning__view__coll__graph.png | Bin 0 -> 7482 bytes ...detail_1_1owning__view__inherit__graph.map | 4 + ...detail_1_1owning__view__inherit__graph.md5 | 1 + ...detail_1_1owning__view__inherit__graph.png | Bin 0 -> 7482 bytes doxygen/classdr_1_1communicator-members.html | 121 + doxygen/classdr_1_1communicator.html | 212 ++ doxygen/classdr_1_1index-members.html | 108 + doxygen/classdr_1_1index.html | 165 ++ .../classdr_1_1iterator__adaptor-members.html | 126 ++ doxygen/classdr_1_1iterator__adaptor.html | 213 ++ doxygen/classdr_1_1logger-members.html | 101 + doxygen/classdr_1_1logger.html | 128 ++ .../classdr_1_1mp_1_1MpiBackend-members.html | 94 + doxygen/classdr_1_1mp_1_1MpiBackend.html | 113 + ...mp_1_1____detail_1_1allocator-members.html | 90 + ...ssdr_1_1mp_1_1____detail_1_1allocator.html | 101 + ...1_1mp_1_1____detail_1_1buffer-members.html | 97 + ...classdr_1_1mp_1_1____detail_1_1buffer.html | 123 + ..._1_1____detail_1_1md__segment-members.html | 98 + ...dr_1_1mp_1_1____detail_1_1md__segment.html | 144 ++ ...____detail_1_1md__segment__coll__graph.map | 4 + ...____detail_1_1md__segment__coll__graph.md5 | 1 + ...____detail_1_1md__segment__coll__graph.png | Bin 0 -> 10064 bytes ..._detail_1_1md__segment__inherit__graph.map | 4 + ..._detail_1_1md__segment__inherit__graph.md5 | 1 + ..._detail_1_1md__segment__inherit__graph.png | Bin 0 -> 10064 bytes ...1____detail_1_1mdsub__segment-members.html | 93 + ...1_1mp_1_1____detail_1_1mdsub__segment.html | 129 ++ ..._detail_1_1mdsub__segment__coll__graph.map | 4 + ..._detail_1_1mdsub__segment__coll__graph.md5 | 1 + ..._detail_1_1mdsub__segment__coll__graph.png | Bin 0 -> 7782 bytes ...tail_1_1mdsub__segment__inherit__graph.map | 4 + ...tail_1_1mdsub__segment__inherit__graph.md5 | 1 + ...tail_1_1mdsub__segment__inherit__graph.png | Bin 0 -> 7782 bytes ..._1_1____detail_1_1tmp__buffer-members.html | 91 + ...dr_1_1mp_1_1____detail_1_1tmp__buffer.html | 101 + .../classdr_1_1mp_1_1count__fn__-members.html | 92 + doxygen/classdr_1_1mp_1_1count__fn__.html | 111 + ...ssdr_1_1mp_1_1count__if__fn__-members.html | 92 + doxygen/classdr_1_1mp_1_1count__if__fn__.html | 111 + ...1_1mp_1_1distributed__mdarray-members.html | 102 + ...classdr_1_1mp_1_1distributed__mdarray.html | 145 ++ ..._1_1mp_1_1distributed__vector-members.html | 105 + .../classdr_1_1mp_1_1distributed__vector.html | 167 ++ ...stributed__vector_1_1iterator-members.html | 109 + ...mp_1_1distributed__vector_1_1iterator.html | 163 ++ .../classdr_1_1mp_1_1dv__segment-members.html | 97 + doxygen/classdr_1_1mp_1_1dv__segment.html | 123 + ..._1mp_1_1dv__segment__iterator-members.html | 116 + ...lassdr_1_1mp_1_1dv__segment__iterator.html | 184 ++ ...1mp_1_1dv__segment__reference-members.html | 94 + ...assdr_1_1mp_1_1dv__segment__reference.html | 117 + .../classdr_1_1mp_1_1halo__impl-members.html | 104 + doxygen/classdr_1_1mp_1_1halo__impl.html | 191 ++ ...assdr_1_1mp_1_1halo__impl__coll__graph.map | 8 + ...assdr_1_1mp_1_1halo__impl__coll__graph.md5 | 1 + ...assdr_1_1mp_1_1halo__impl__coll__graph.png | Bin 0 -> 27524 bytes ...dr_1_1mp_1_1halo__impl__inherit__graph.map | 5 + ...dr_1_1mp_1_1halo__impl__inherit__graph.md5 | 1 + ...dr_1_1mp_1_1halo__impl__inherit__graph.png | Bin 0 -> 10405 bytes ...classdr_1_1mp_1_1index__group-members.html | 104 + doxygen/classdr_1_1mp_1_1index__group.html | 149 ++ ...ssdr_1_1mp_1_1segmented__view-members.html | 92 + doxygen/classdr_1_1mp_1_1segmented__view.html | 126 ++ ..._1_1mp_1_1segmented__view__coll__graph.map | 4 + ..._1_1mp_1_1segmented__view__coll__graph.md5 | 1 + ..._1_1mp_1_1segmented__view__coll__graph.png | Bin 0 -> 9197 bytes ...1mp_1_1segmented__view__inherit__graph.map | 4 + ...1mp_1_1segmented__view__inherit__graph.md5 | 1 + ...1mp_1_1segmented__view__inherit__graph.png | Bin 0 -> 9197 bytes ..._1_1segmented__view__iterator-members.html | 97 + ...dr_1_1mp_1_1segmented__view__iterator.html | 123 + .../classdr_1_1mp_1_1span__group-members.html | 102 + doxygen/classdr_1_1mp_1_1span__group.html | 145 ++ .../classdr_1_1mp_1_1span__halo-members.html | 107 + doxygen/classdr_1_1mp_1_1span__halo.html | 188 ++ ...assdr_1_1mp_1_1span__halo__coll__graph.map | 9 + ...assdr_1_1mp_1_1span__halo__coll__graph.md5 | 1 + ...assdr_1_1mp_1_1span__halo__coll__graph.png | Bin 0 -> 32786 bytes ...dr_1_1mp_1_1span__halo__inherit__graph.map | 4 + ...dr_1_1mp_1_1span__halo__inherit__graph.md5 | 1 + ...dr_1_1mp_1_1span__halo__inherit__graph.png | Bin 0 -> 7319 bytes .../classdr_1_1mp_1_1subrange-members.html | 96 + doxygen/classdr_1_1mp_1_1subrange.html | 141 ++ ...classdr_1_1mp_1_1subrange__coll__graph.map | 4 + ...classdr_1_1mp_1_1subrange__coll__graph.md5 | 1 + ...classdr_1_1mp_1_1subrange__coll__graph.png | Bin 0 -> 7317 bytes ...ssdr_1_1mp_1_1subrange__inherit__graph.map | 4 + ...ssdr_1_1mp_1_1subrange__inherit__graph.md5 | 1 + ...ssdr_1_1mp_1_1subrange__inherit__graph.png | Bin 0 -> 7317 bytes ...r_1_1mp_1_1subrange__iterator-members.html | 114 + .../classdr_1_1mp_1_1subrange__iterator.html | 178 ++ ...r_1_1mp_1_1unstructured__halo-members.html | 106 + .../classdr_1_1mp_1_1unstructured__halo.html | 245 ++ ...1mp_1_1unstructured__halo__coll__graph.map | 9 + ...1mp_1_1unstructured__halo__coll__graph.md5 | 1 + ...1mp_1_1unstructured__halo__coll__graph.png | Bin 0 -> 34267 bytes ..._1_1unstructured__halo__inherit__graph.map | 4 + ..._1_1unstructured__halo__inherit__graph.md5 | 1 + ..._1_1unstructured__halo__inherit__graph.png | Bin 0 -> 8301 bytes ..._1enumerate__adapter__closure-members.html | 90 + ...1views_1_1enumerate__adapter__closure.html | 108 + ...p_1_1views_1_1enumerate__fn__-members.html | 90 + ...sdr_1_1mp_1_1views_1_1enumerate__fn__.html | 102 + ...s_1_1mdspan__adapter__closure-members.html | 92 + ..._1_1views_1_1mdspan__adapter__closure.html | 113 + ..._1mp_1_1views_1_1mdspan__fn__-members.html | 92 + ...lassdr_1_1mp_1_1views_1_1mdspan__fn__.html | 111 + ..._1submdspan__adapter__closure-members.html | 91 + ...1views_1_1submdspan__adapter__closure.html | 110 + ...p_1_1views_1_1submdspan__fn__-members.html | 90 + ...sdr_1_1mp_1_1views_1_1submdspan__fn__.html | 103 + ...lassdr_1_1mp_1_1zip__iterator-members.html | 110 + doxygen/classdr_1_1mp_1_1zip__iterator.html | 166 ++ .../classdr_1_1mp_1_1zip__view-members.html | 97 + doxygen/classdr_1_1mp_1_1zip__view.html | 140 ++ ...lassdr_1_1mp_1_1zip__view__coll__graph.map | 4 + ...lassdr_1_1mp_1_1zip__view__coll__graph.md5 | 1 + ...lassdr_1_1mp_1_1zip__view__coll__graph.png | Bin 0 -> 6931 bytes ...sdr_1_1mp_1_1zip__view__inherit__graph.map | 4 + ...sdr_1_1mp_1_1zip__view__inherit__graph.md5 | 1 + ...sdr_1_1mp_1_1zip__view__inherit__graph.png | Bin 0 -> 6931 bytes ...stributed__iterator__accessor-members.html | 108 + ...rmal__distributed__iterator__accessor.html | 153 ++ .../classdr_1_1remote__subrange-members.html | 93 + doxygen/classdr_1_1remote__subrange.html | 127 ++ ...assdr_1_1remote__subrange__coll__graph.map | 4 + ...assdr_1_1remote__subrange__coll__graph.md5 | 1 + ...assdr_1_1remote__subrange__coll__graph.png | Bin 0 -> 5329 bytes ...dr_1_1remote__subrange__inherit__graph.map | 4 + ...dr_1_1remote__subrange__inherit__graph.md5 | 1 + ...dr_1_1remote__subrange__inherit__graph.png | Bin 0 -> 5329 bytes doxygen/classdr_1_1rma__window-members.html | 102 + doxygen/classdr_1_1rma__window.html | 139 ++ ..._1_1____detail_1_1coo__matrix-members.html | 128 ++ ...dr_1_1sp_1_1____detail_1_1coo__matrix.html | 217 ++ ...lassdr_1_1sp_1_1block__cyclic-members.html | 96 + doxygen/classdr_1_1sp_1_1block__cyclic.html | 264 +++ ...dr_1_1sp_1_1block__cyclic__coll__graph.map | 4 + ...dr_1_1sp_1_1block__cyclic__coll__graph.md5 | 1 + ...dr_1_1sp_1_1block__cyclic__coll__graph.png | Bin 0 -> 4468 bytes ...1_1sp_1_1block__cyclic__inherit__graph.map | 4 + ...1_1sp_1_1block__cyclic__inherit__graph.md5 | 1 + ...1_1sp_1_1block__cyclic__inherit__graph.png | Bin 0 -> 4468 bytes ..._1_1sp_1_1buffered__allocator-members.html | 100 + .../classdr_1_1sp_1_1buffered__allocator.html | 132 ++ ...dr_1_1sp_1_1csr__matrix__view-members.html | 109 + .../classdr_1_1sp_1_1csr__matrix__view.html | 180 ++ ..._1csr__matrix__view__accessor-members.html | 113 + ..._1_1sp_1_1csr__matrix__view__accessor.html | 168 ++ ..._1sp_1_1csr__matrix__view__coll__graph.map | 4 + ..._1sp_1_1csr__matrix__view__coll__graph.md5 | 1 + ..._1sp_1_1csr__matrix__view__coll__graph.png | Bin 0 -> 8948 bytes ...p_1_1csr__matrix__view__inherit__graph.map | 4 + ...p_1_1csr__matrix__view__inherit__graph.md5 | 1 + ...p_1_1csr__matrix__view__inherit__graph.png | Bin 0 -> 8948 bytes ...lassdr_1_1sp_1_1dense__matrix-members.html | 114 + doxygen/classdr_1_1sp_1_1dense__matrix.html | 174 ++ ...sp_1_1dense__matrix__accessor-members.html | 111 + ...ssdr_1_1sp_1_1dense__matrix__accessor.html | 162 ++ ...nse__matrix__column__accessor-members.html | 109 + ...sp_1_1dense__matrix__column__accessor.html | 156 ++ ..._1dense__matrix__column__view-members.html | 103 + ..._1_1sp_1_1dense__matrix__column__view.html | 157 ++ ...nse__matrix__column__view__coll__graph.map | 4 + ...nse__matrix__column__view__coll__graph.md5 | 1 + ...nse__matrix__column__view__coll__graph.png | Bin 0 -> 5615 bytes ...1dense__matrix__row__accessor-members.html | 109 + ...1_1sp_1_1dense__matrix__row__accessor.html | 156 ++ ...p_1_1dense__matrix__row__view-members.html | 102 + ...sdr_1_1sp_1_1dense__matrix__row__view.html | 154 ++ ...1dense__matrix__row__view__coll__graph.map | 4 + ...1dense__matrix__row__view__coll__graph.md5 | 1 + ...1dense__matrix__row__view__coll__graph.png | Bin 0 -> 5262 bytes ..._1_1sp_1_1dense__matrix__view-members.html | 109 + .../classdr_1_1sp_1_1dense__matrix__view.html | 182 ++ ...sp_1_1dense__matrix__view__coll__graph.map | 4 + ...sp_1_1dense__matrix__view__coll__graph.md5 | 1 + ...sp_1_1dense__matrix__view__coll__graph.png | Bin 0 -> 8653 bytes ...1_1dense__matrix__view__inherit__graph.map | 4 + ...1_1dense__matrix__view__inherit__graph.md5 | 1 + ...1_1dense__matrix__view__inherit__graph.png | Bin 0 -> 8653 bytes ...dr_1_1sp_1_1device__allocator-members.html | 108 + .../classdr_1_1sp_1_1device__allocator.html | 163 ++ .../classdr_1_1sp_1_1device__ptr-members.html | 130 ++ doxygen/classdr_1_1sp_1_1device__ptr.html | 227 ++ .../classdr_1_1sp_1_1device__ref-members.html | 95 + doxygen/classdr_1_1sp_1_1device__ref.html | 110 + ...classdr_1_1sp_1_1device__span-members.html | 113 + doxygen/classdr_1_1sp_1_1device__span.html | 217 ++ ...sdr_1_1sp_1_1device__span__coll__graph.map | 5 + ...sdr_1_1sp_1_1device__span__coll__graph.md5 | 1 + ...sdr_1_1sp_1_1device__span__coll__graph.png | Bin 0 -> 9736 bytes ..._1_1sp_1_1device__span__inherit__graph.map | 5 + ..._1_1sp_1_1device__span__inherit__graph.md5 | 1 + ..._1_1sp_1_1device__span__inherit__graph.png | Bin 0 -> 9736 bytes ...assdr_1_1sp_1_1device__vector-members.html | 95 + doxygen/classdr_1_1sp_1_1device__vector.html | 254 +++ ...r_1_1sp_1_1device__vector__coll__graph.map | 4 + ...r_1_1sp_1_1device__vector__coll__graph.md5 | 1 + ...r_1_1sp_1_1device__vector__coll__graph.png | Bin 0 -> 6779 bytes ..._1sp_1_1device__vector__inherit__graph.map | 4 + ..._1sp_1_1device__vector__inherit__graph.md5 | 1 + ..._1sp_1_1device__vector__inherit__graph.png | Bin 0 -> 6779 bytes ...1_1distributed__dense__matrix-members.html | 112 + ...r_1_1sp_1_1distributed__dense__matrix.html | 173 ++ ...uted__dense__matrix__accessor-members.html | 110 + ...1distributed__dense__matrix__accessor.html | 159 ++ ...1distributed__range__accessor-members.html | 107 + ...1_1sp_1_1distributed__range__accessor.html | 150 ++ ...dr_1_1sp_1_1distributed__span-members.html | 113 + .../classdr_1_1sp_1_1distributed__span.html | 192 ++ ..._1distributed__span__accessor-members.html | 109 + ..._1_1sp_1_1distributed__span__accessor.html | 156 ++ ..._1sp_1_1distributed__span__coll__graph.map | 4 + ..._1sp_1_1distributed__span__coll__graph.md5 | 1 + ..._1sp_1_1distributed__span__coll__graph.png | Bin 0 -> 7300 bytes ...p_1_1distributed__span__inherit__graph.map | 4 + ...p_1_1distributed__span__inherit__graph.md5 | 1 + ...p_1_1distributed__span__inherit__graph.png | Bin 0 -> 7300 bytes ...distributed__vector__accessor-members.html | 111 + ..._1sp_1_1distributed__vector__accessor.html | 162 ++ ...r_1_1sp_1_1duplicated__vector-members.html | 97 + .../classdr_1_1sp_1_1duplicated__vector.html | 126 ++ doxygen/classdr_1_1sp_1_1future-members.html | 100 + doxygen/classdr_1_1sp_1_1future.html | 135 ++ doxygen/classdr_1_1sp_1_1id-members.html | 94 + doxygen/classdr_1_1sp_1_1id.html | 110 + ...lassdr_1_1sp_1_1matrix__entry-members.html | 107 + doxygen/classdr_1_1sp_1_1matrix__entry.html | 158 ++ ...dr_1_1sp_1_1matrix__partition-members.html | 93 + .../classdr_1_1sp_1_1matrix__partition.html | 116 + ...p_1_1matrix__partition__inherit__graph.map | 4 + ...p_1_1matrix__partition__inherit__graph.md5 | 1 + ...p_1_1matrix__partition__inherit__graph.png | Bin 0 -> 4490 bytes .../classdr_1_1sp_1_1matrix__ref-members.html | 109 + doxygen/classdr_1_1sp_1_1matrix__ref.html | 162 ++ ...assdr_1_1sp_1_1segment__range-members.html | 99 + doxygen/classdr_1_1sp_1_1segment__range.html | 132 ++ ...p_1_1segment__range__accessor-members.html | 107 + ...sdr_1_1sp_1_1segment__range__accessor.html | 150 ++ doxygen/classdr_1_1sp_1_1span-members.html | 107 + doxygen/classdr_1_1sp_1_1span.html | 173 ++ .../classdr_1_1sp_1_1span__coll__graph.map | 4 + .../classdr_1_1sp_1_1span__coll__graph.md5 | 1 + .../classdr_1_1sp_1_1span__coll__graph.png | Bin 0 -> 6355 bytes .../classdr_1_1sp_1_1span__inherit__graph.map | 5 + .../classdr_1_1sp_1_1span__inherit__graph.md5 | 1 + .../classdr_1_1sp_1_1span__inherit__graph.png | Bin 0 -> 9712 bytes ...assdr_1_1sp_1_1sparse__matrix-members.html | 113 + doxygen/classdr_1_1sp_1_1sparse__matrix.html | 176 ++ doxygen/classdr_1_1sp_1_1vector-members.html | 129 ++ doxygen/classdr_1_1sp_1_1vector.html | 218 ++ ..._1enumerate__adapter__closure-members.html | 90 + ...1views_1_1enumerate__adapter__closure.html | 108 + ...p_1_1views_1_1enumerate__fn__-members.html | 90 + ...sdr_1_1sp_1_1views_1_1enumerate__fn__.html | 102 + ...ws_1_1slice__adaptor__closure-members.html | 91 + ...p_1_1views_1_1slice__adaptor__closure.html | 110 + ...lassdr_1_1sp_1_1zip__accessor-members.html | 107 + doxygen/classdr_1_1sp_1_1zip__accessor.html | 150 ++ .../classdr_1_1sp_1_1zip__view-members.html | 101 + doxygen/classdr_1_1sp_1_1zip__view.html | 169 ++ ...lassdr_1_1sp_1_1zip__view__coll__graph.map | 4 + ...lassdr_1_1sp_1_1zip__view__coll__graph.md5 | 1 + ...lassdr_1_1sp_1_1zip__view__coll__graph.png | Bin 0 -> 6808 bytes ...sdr_1_1sp_1_1zip__view__inherit__graph.map | 4 + ...sdr_1_1sp_1_1zip__view__inherit__graph.md5 | 1 + ...sdr_1_1sp_1_1zip__view__inherit__graph.png | Bin 0 -> 6808 bytes doxygen/classdr_1_1timer-members.html | 90 + doxygen/classdr_1_1timer.html | 98 + ...lassdr_1_1transform__iterator-members.html | 118 + doxygen/classdr_1_1transform__iterator.html | 187 ++ .../classdr_1_1transform__view-members.html | 95 + doxygen/classdr_1_1transform__view.html | 135 ++ ...lassdr_1_1transform__view__coll__graph.map | 4 + ...lassdr_1_1transform__view__coll__graph.md5 | 1 + ...lassdr_1_1transform__view__coll__graph.png | Bin 0 -> 8030 bytes ...sdr_1_1transform__view__inherit__graph.map | 4 + ...sdr_1_1transform__view__inherit__graph.md5 | 1 + ...sdr_1_1transform__view__inherit__graph.png | Bin 0 -> 8030 bytes ..._1transform__adapter__closure-members.html | 91 + ...1views_1_1transform__adapter__closure.html | 110 + ...r_1_1views_1_1transform__fn__-members.html | 90 + .../classdr_1_1views_1_1transform__fn__.html | 103 + doxygen/classes.html | 144 ++ doxygen/closed.png | Bin 0 -> 132 bytes doxygen/common__support_8hpp_source.html | 104 + doxygen/communicator_8hpp_source.html | 412 ++++ doxygen/conceptdr_1_1TupleLike.html | 99 + ...eptdr_1_1_0d4_1_1TupleElementGettable.html | 91 + ...ptdr_1_1_0d5_1_1has__segments__method.html | 91 + ...ceptdr_1_1____detail_1_1mdarray__like.html | 89 + ...nceptdr_1_1____detail_1_1mdspan__like.html | 92 + ..._1_1distributed__contiguous__iterator.html | 96 + ...tdr_1_1distributed__contiguous__range.html | 96 + .../conceptdr_1_1distributed__iterator.html | 91 + ...nceptdr_1_1distributed__mdspan__range.html | 91 + doxygen/conceptdr_1_1distributed__range.html | 90 + ..._1mp_1_1____detail_1_1is__distributed.html | 92 + ..._1_1mp_1_1____detail_1_1one__argument.html | 91 + ...1_1mp_1_1____detail_1_1two__arguments.html | 91 + ...ceptdr_1_1mp_1_1____detail_1_1zipable.html | 89 + .../conceptdr_1_1mp_1_1has__halo__method.html | 92 + doxygen/conceptdr_1_1mp_1_1has__segments.html | 89 + .../conceptdr_1_1mp_1_1is__mdspan__view.html | 91 + doxygen/conceptdr_1_1mp_1_1no__segments.html | 90 + ...1_1ranges_1_1_0d14_1_1has__local__adl.html | 91 + ..._1_1ranges_1_1_0d14_1_1has__rank__adl.html | 91 + ...1ranges_1_1_0d14_1_1has__rank__method.html | 91 + ...ranges_1_1_0d14_1_1has__segments__adl.html | 92 + ...ges_1_1_0d14_1_1has__segments__method.html | 92 + ...1_1ranges_1_1_0d14_1_1is__localizable.html | 89 + ...1is__remote__iterator__shadow__impl__.html | 92 + ..._1_1_0d14_1_1iter__has__local__method.html | 92 + ...0d14_1_1remote__range__shadow__impl__.html | 90 + ...1_0d14_1_1segment__has__local__method.html | 92 + ...1_1ranges_1_1_0d14_1_1segments__range.html | 91 + ...1_1ranges_1_1____detail_1_1has__local.html | 91 + ...eptdr_1_1remote__contiguous__iterator.html | 93 + ...onceptdr_1_1remote__contiguous__range.html | 93 + doxygen/conceptdr_1_1remote__iterator.html | 90 + doxygen/conceptdr_1_1remote__range.html | 90 + ..._1_1____detail_1_1is__syclmemcopyable.html | 90 + ...1____detail_1_1sycl__device__selector.html | 91 + doxygen/concepts.html | 116 + doxygen/concepts_8hpp_source.html | 152 ++ doxygen/containers_2detail_8hpp_source.html | 113 + doxygen/coo__matrix_8hpp_source.html | 259 +++ doxygen/count_8hpp_source.html | 214 ++ doxygen/csr__matrix__view_8hpp_source.html | 316 +++ doxygen/dense__column__view_8hpp_source.html | 202 ++ doxygen/dense__matrix_8hpp_source.html | 232 ++ .../dense__matrix__iterator_8hpp_source.html | 199 ++ doxygen/dense__matrix__view_8hpp_source.html | 214 ++ doxygen/dense__row__view_8hpp_source.html | 200 ++ doxygen/detail_2enumerate_8hpp_source.html | 149 ++ doxygen/detail_8hpp_source.html | 176 ++ doxygen/device__ptr_8hpp_source.html | 231 ++ doxygen/device__ref_8hpp_source.html | 146 ++ doxygen/device__span_8hpp_source.html | 185 ++ doxygen/device__vector_8hpp_source.html | 124 + .../dir_323acea4eb551240b18003d2e88b28b7.html | 104 + ...r_323acea4eb551240b18003d2e88b28b7_dep.map | 4 + ...r_323acea4eb551240b18003d2e88b28b7_dep.md5 | 1 + ...r_323acea4eb551240b18003d2e88b28b7_dep.png | Bin 0 -> 1807 bytes .../dir_3e0780f9fd691ce6aa718969242efd7f.html | 101 + ...r_3e0780f9fd691ce6aa718969242efd7f_dep.map | 5 + ...r_3e0780f9fd691ce6aa718969242efd7f_dep.md5 | 1 + ...r_3e0780f9fd691ce6aa718969242efd7f_dep.png | Bin 0 -> 4390 bytes .../dir_4c0da47f5488ee935cb4372f760579e2.html | 120 + ...r_4c0da47f5488ee935cb4372f760579e2_dep.map | 9 + ...r_4c0da47f5488ee935cb4372f760579e2_dep.md5 | 1 + ...r_4c0da47f5488ee935cb4372f760579e2_dep.png | Bin 0 -> 6049 bytes .../dir_67824480cd2296306bea79e091fd0853.html | 128 ++ ...r_67824480cd2296306bea79e091fd0853_dep.map | 5 + ...r_67824480cd2296306bea79e091fd0853_dep.md5 | 1 + ...r_67824480cd2296306bea79e091fd0853_dep.png | Bin 0 -> 3833 bytes .../dir_73601acfd5a2822dd473820b789b56e4.html | 142 ++ ...r_73601acfd5a2822dd473820b789b56e4_dep.map | 4 + ...r_73601acfd5a2822dd473820b789b56e4_dep.md5 | 1 + ...r_73601acfd5a2822dd473820b789b56e4_dep.png | Bin 0 -> 1462 bytes .../dir_807b56d834975cdfd9fb3d45ae6a652f.html | 108 + ...r_807b56d834975cdfd9fb3d45ae6a652f_dep.map | 4 + ...r_807b56d834975cdfd9fb3d45ae6a652f_dep.md5 | 1 + ...r_807b56d834975cdfd9fb3d45ae6a652f_dep.png | Bin 0 -> 2545 bytes .../dir_85ef099189e791ae40d4c24671336591.html | 122 + ...r_85ef099189e791ae40d4c24671336591_dep.map | 7 + ...r_85ef099189e791ae40d4c24671336591_dep.md5 | 1 + ...r_85ef099189e791ae40d4c24671336591_dep.png | Bin 0 -> 5460 bytes .../dir_8fe29de6e48ccf860dd86ed0735e8a6b.html | 108 + ...r_8fe29de6e48ccf860dd86ed0735e8a6b_dep.map | 4 + ...r_8fe29de6e48ccf860dd86ed0735e8a6b_dep.md5 | 1 + ...r_8fe29de6e48ccf860dd86ed0735e8a6b_dep.png | Bin 0 -> 2156 bytes .../dir_93ccc0855ae179af1c425ecfb8e8a806.html | 104 + ...r_93ccc0855ae179af1c425ecfb8e8a806_dep.map | 4 + ...r_93ccc0855ae179af1c425ecfb8e8a806_dep.md5 | 1 + ...r_93ccc0855ae179af1c425ecfb8e8a806_dep.png | Bin 0 -> 1272 bytes .../dir_99158c7dd822eb1a3c9b7f71ffee20be.html | 112 + ...r_99158c7dd822eb1a3c9b7f71ffee20be_dep.map | 4 + ...r_99158c7dd822eb1a3c9b7f71ffee20be_dep.md5 | 1 + ...r_99158c7dd822eb1a3c9b7f71ffee20be_dep.png | Bin 0 -> 1909 bytes .../dir_a385eca21dc3d8045dcdc4e17916b108.html | 100 + ...r_a385eca21dc3d8045dcdc4e17916b108_dep.map | 4 + ...r_a385eca21dc3d8045dcdc4e17916b108_dep.md5 | 1 + ...r_a385eca21dc3d8045dcdc4e17916b108_dep.png | Bin 0 -> 2824 bytes .../dir_b5fcc441902e4a79b0db31964533269a.html | 126 ++ ...r_b5fcc441902e4a79b0db31964533269a_dep.map | 4 + ...r_b5fcc441902e4a79b0db31964533269a_dep.md5 | 1 + ...r_b5fcc441902e4a79b0db31964533269a_dep.png | Bin 0 -> 2276 bytes .../dir_cdec69c82820bd8c004958f42c86ecba.html | 114 + ...r_cdec69c82820bd8c004958f42c86ecba_dep.map | 4 + ...r_cdec69c82820bd8c004958f42c86ecba_dep.md5 | 1 + ...r_cdec69c82820bd8c004958f42c86ecba_dep.png | Bin 0 -> 1947 bytes .../dir_d05a7e68d09c14ebc0e6d03c0cf9ec09.html | 100 + ...r_d05a7e68d09c14ebc0e6d03c0cf9ec09_dep.map | 4 + ...r_d05a7e68d09c14ebc0e6d03c0cf9ec09_dep.md5 | 1 + ...r_d05a7e68d09c14ebc0e6d03c0cf9ec09_dep.png | Bin 0 -> 2353 bytes .../dir_d44c64559bbebec7f509842c48db8b23.html | 91 + .../dir_d7c528dc6ed0943eef8ba09c0b02746e.html | 100 + ...r_d7c528dc6ed0943eef8ba09c0b02746e_dep.map | 4 + ...r_d7c528dc6ed0943eef8ba09c0b02746e_dep.md5 | 1 + ...r_d7c528dc6ed0943eef8ba09c0b02746e_dep.png | Bin 0 -> 2041 bytes .../dir_d7eb10406d49beed6cff678e21fddf87.html | 145 ++ ...r_d7eb10406d49beed6cff678e21fddf87_dep.map | 8 + ...r_d7eb10406d49beed6cff678e21fddf87_dep.md5 | 1 + ...r_d7eb10406d49beed6cff678e21fddf87_dep.png | Bin 0 -> 5993 bytes .../dir_fe6a317965919c4163a6bbac6fc7f579.html | 116 + ...r_fe6a317965919c4163a6bbac6fc7f579_dep.map | 5 + ...r_fe6a317965919c4163a6bbac6fc7f579_dep.md5 | 1 + ...r_fe6a317965919c4163a6bbac6fc7f579_dep.png | Bin 0 -> 4150 bytes ...istributed__dense__matrix_8hpp_source.html | 433 ++++ doxygen/distributed__mdarray_8hpp_source.html | 185 ++ doxygen/distributed__span_8hpp_source.html | 347 +++ doxygen/distribution_8hpp_source.html | 133 ++ doxygen/doc.png | Bin 0 -> 746 bytes doxygen/docd.png | Bin 0 -> 756 bytes doxygen/doxygen.css | 2007 +++++++++++++++++ doxygen/doxygen.svg | 26 + doxygen/duplicated__vector_8hpp_source.html | 135 ++ doxygen/dynsections.js | 123 + doxygen/execution__policy_8hpp_source.html | 120 + doxygen/files.html | 215 ++ doxygen/folderclosed.png | Bin 0 -> 616 bytes doxygen/folderopen.png | Bin 0 -> 597 bytes doxygen/format__shim_8hpp_source.html | 98 + doxygen/functions.html | 92 + doxygen/functions_func.html | 92 + doxygen/future_8hpp_source.html | 134 ++ doxygen/gemm_8hpp_source.html | 333 +++ doxygen/gemv_8hpp_source.html | 300 +++ doxygen/generate__random_8hpp_source.html | 178 ++ doxygen/global_8hpp_source.html | 306 +++ doxygen/graph_legend.html | 141 ++ doxygen/graph_legend.md5 | 1 + doxygen/graph_legend.png | Bin 0 -> 22495 bytes doxygen/halo_8hpp_source.html | 528 +++++ doxygen/hierarchy.html | 236 ++ ...ve__exclusive__scan__impl_8hpp_source.html | 314 +++ doxygen/index.html | 81 + doxygen/index_8hpp_source.html | 221 ++ doxygen/inherit_graph_0.map | 4 + doxygen/inherit_graph_0.md5 | 1 + doxygen/inherit_graph_0.png | Bin 0 -> 7335 bytes doxygen/inherit_graph_1.map | 3 + doxygen/inherit_graph_1.md5 | 1 + doxygen/inherit_graph_1.png | Bin 0 -> 2646 bytes doxygen/inherit_graph_10.map | 3 + doxygen/inherit_graph_10.md5 | 1 + doxygen/inherit_graph_10.png | Bin 0 -> 2151 bytes doxygen/inherit_graph_100.map | 4 + doxygen/inherit_graph_100.md5 | 1 + doxygen/inherit_graph_100.png | Bin 0 -> 4627 bytes doxygen/inherit_graph_101.map | 18 + doxygen/inherit_graph_101.md5 | 1 + doxygen/inherit_graph_101.png | Bin 0 -> 89921 bytes doxygen/inherit_graph_102.map | 11 + doxygen/inherit_graph_102.md5 | 1 + doxygen/inherit_graph_102.png | Bin 0 -> 34218 bytes doxygen/inherit_graph_103.map | 10 + doxygen/inherit_graph_103.md5 | 1 + doxygen/inherit_graph_103.png | Bin 0 -> 41611 bytes doxygen/inherit_graph_104.map | 6 + doxygen/inherit_graph_104.md5 | 1 + doxygen/inherit_graph_104.png | Bin 0 -> 16325 bytes doxygen/inherit_graph_11.map | 3 + doxygen/inherit_graph_11.md5 | 1 + doxygen/inherit_graph_11.png | Bin 0 -> 1635 bytes doxygen/inherit_graph_12.map | 3 + doxygen/inherit_graph_12.md5 | 1 + doxygen/inherit_graph_12.png | Bin 0 -> 2935 bytes doxygen/inherit_graph_13.map | 3 + doxygen/inherit_graph_13.md5 | 1 + doxygen/inherit_graph_13.png | Bin 0 -> 1230 bytes doxygen/inherit_graph_14.map | 3 + doxygen/inherit_graph_14.md5 | 1 + doxygen/inherit_graph_14.png | Bin 0 -> 2539 bytes doxygen/inherit_graph_15.map | 3 + doxygen/inherit_graph_15.md5 | 1 + doxygen/inherit_graph_15.png | Bin 0 -> 1881 bytes doxygen/inherit_graph_16.map | 3 + doxygen/inherit_graph_16.md5 | 1 + doxygen/inherit_graph_16.png | Bin 0 -> 2494 bytes doxygen/inherit_graph_17.map | 3 + doxygen/inherit_graph_17.md5 | 1 + doxygen/inherit_graph_17.png | Bin 0 -> 2937 bytes doxygen/inherit_graph_18.map | 3 + doxygen/inherit_graph_18.md5 | 1 + doxygen/inherit_graph_18.png | Bin 0 -> 2722 bytes doxygen/inherit_graph_19.map | 3 + doxygen/inherit_graph_19.md5 | 1 + doxygen/inherit_graph_19.png | Bin 0 -> 1782 bytes doxygen/inherit_graph_2.map | 3 + doxygen/inherit_graph_2.md5 | 1 + doxygen/inherit_graph_2.png | Bin 0 -> 3144 bytes doxygen/inherit_graph_20.map | 3 + doxygen/inherit_graph_20.md5 | 1 + doxygen/inherit_graph_20.png | Bin 0 -> 1875 bytes doxygen/inherit_graph_21.map | 3 + doxygen/inherit_graph_21.md5 | 1 + doxygen/inherit_graph_21.png | Bin 0 -> 2046 bytes doxygen/inherit_graph_22.map | 3 + doxygen/inherit_graph_22.md5 | 1 + doxygen/inherit_graph_22.png | Bin 0 -> 3361 bytes doxygen/inherit_graph_23.map | 3 + doxygen/inherit_graph_23.md5 | 1 + doxygen/inherit_graph_23.png | Bin 0 -> 3756 bytes doxygen/inherit_graph_24.map | 3 + doxygen/inherit_graph_24.md5 | 1 + doxygen/inherit_graph_24.png | Bin 0 -> 4637 bytes doxygen/inherit_graph_25.map | 3 + doxygen/inherit_graph_25.md5 | 1 + doxygen/inherit_graph_25.png | Bin 0 -> 1837 bytes doxygen/inherit_graph_26.map | 3 + doxygen/inherit_graph_26.md5 | 1 + doxygen/inherit_graph_26.png | Bin 0 -> 2761 bytes doxygen/inherit_graph_27.map | 3 + doxygen/inherit_graph_27.md5 | 1 + doxygen/inherit_graph_27.png | Bin 0 -> 3372 bytes doxygen/inherit_graph_28.map | 3 + doxygen/inherit_graph_28.md5 | 1 + doxygen/inherit_graph_28.png | Bin 0 -> 3298 bytes doxygen/inherit_graph_29.map | 3 + doxygen/inherit_graph_29.md5 | 1 + doxygen/inherit_graph_29.png | Bin 0 -> 1912 bytes doxygen/inherit_graph_3.map | 3 + doxygen/inherit_graph_3.md5 | 1 + doxygen/inherit_graph_3.png | Bin 0 -> 1893 bytes doxygen/inherit_graph_30.map | 5 + doxygen/inherit_graph_30.md5 | 1 + doxygen/inherit_graph_30.png | Bin 0 -> 10606 bytes doxygen/inherit_graph_31.map | 3 + doxygen/inherit_graph_31.md5 | 1 + doxygen/inherit_graph_31.png | Bin 0 -> 3236 bytes doxygen/inherit_graph_32.map | 3 + doxygen/inherit_graph_32.md5 | 1 + doxygen/inherit_graph_32.png | Bin 0 -> 3060 bytes doxygen/inherit_graph_33.map | 3 + doxygen/inherit_graph_33.md5 | 1 + doxygen/inherit_graph_33.png | Bin 0 -> 3424 bytes doxygen/inherit_graph_34.map | 3 + doxygen/inherit_graph_34.md5 | 1 + doxygen/inherit_graph_34.png | Bin 0 -> 3002 bytes doxygen/inherit_graph_35.map | 3 + doxygen/inherit_graph_35.md5 | 1 + doxygen/inherit_graph_35.png | Bin 0 -> 3465 bytes doxygen/inherit_graph_36.map | 3 + doxygen/inherit_graph_36.md5 | 1 + doxygen/inherit_graph_36.png | Bin 0 -> 3373 bytes doxygen/inherit_graph_37.map | 3 + doxygen/inherit_graph_37.md5 | 1 + doxygen/inherit_graph_37.png | Bin 0 -> 2236 bytes doxygen/inherit_graph_38.map | 3 + doxygen/inherit_graph_38.md5 | 1 + doxygen/inherit_graph_38.png | Bin 0 -> 5866 bytes doxygen/inherit_graph_39.map | 3 + doxygen/inherit_graph_39.md5 | 1 + doxygen/inherit_graph_39.png | Bin 0 -> 3311 bytes doxygen/inherit_graph_4.map | 3 + doxygen/inherit_graph_4.md5 | 1 + doxygen/inherit_graph_4.png | Bin 0 -> 1570 bytes doxygen/inherit_graph_40.map | 3 + doxygen/inherit_graph_40.md5 | 1 + doxygen/inherit_graph_40.png | Bin 0 -> 3162 bytes doxygen/inherit_graph_41.map | 3 + doxygen/inherit_graph_41.md5 | 1 + doxygen/inherit_graph_41.png | Bin 0 -> 3768 bytes doxygen/inherit_graph_42.map | 3 + doxygen/inherit_graph_42.md5 | 1 + doxygen/inherit_graph_42.png | Bin 0 -> 3768 bytes doxygen/inherit_graph_43.map | 3 + doxygen/inherit_graph_43.md5 | 1 + doxygen/inherit_graph_43.png | Bin 0 -> 3049 bytes doxygen/inherit_graph_44.map | 3 + doxygen/inherit_graph_44.md5 | 1 + doxygen/inherit_graph_44.png | Bin 0 -> 3784 bytes doxygen/inherit_graph_45.map | 3 + doxygen/inherit_graph_45.md5 | 1 + doxygen/inherit_graph_45.png | Bin 0 -> 2567 bytes doxygen/inherit_graph_46.map | 3 + doxygen/inherit_graph_46.md5 | 1 + doxygen/inherit_graph_46.png | Bin 0 -> 4244 bytes doxygen/inherit_graph_47.map | 3 + doxygen/inherit_graph_47.md5 | 1 + doxygen/inherit_graph_47.png | Bin 0 -> 2308 bytes doxygen/inherit_graph_48.map | 3 + doxygen/inherit_graph_48.md5 | 1 + doxygen/inherit_graph_48.png | Bin 0 -> 4407 bytes doxygen/inherit_graph_49.map | 3 + doxygen/inherit_graph_49.md5 | 1 + doxygen/inherit_graph_49.png | Bin 0 -> 2500 bytes doxygen/inherit_graph_5.map | 3 + doxygen/inherit_graph_5.md5 | 1 + doxygen/inherit_graph_5.png | Bin 0 -> 3324 bytes doxygen/inherit_graph_50.map | 3 + doxygen/inherit_graph_50.md5 | 1 + doxygen/inherit_graph_50.png | Bin 0 -> 3636 bytes doxygen/inherit_graph_51.map | 3 + doxygen/inherit_graph_51.md5 | 1 + doxygen/inherit_graph_51.png | Bin 0 -> 3798 bytes doxygen/inherit_graph_52.map | 3 + doxygen/inherit_graph_52.md5 | 1 + doxygen/inherit_graph_52.png | Bin 0 -> 2522 bytes doxygen/inherit_graph_53.map | 3 + doxygen/inherit_graph_53.md5 | 1 + doxygen/inherit_graph_53.png | Bin 0 -> 1644 bytes doxygen/inherit_graph_54.map | 3 + doxygen/inherit_graph_54.md5 | 1 + doxygen/inherit_graph_54.png | Bin 0 -> 3589 bytes doxygen/inherit_graph_55.map | 3 + doxygen/inherit_graph_55.md5 | 1 + doxygen/inherit_graph_55.png | Bin 0 -> 3348 bytes doxygen/inherit_graph_56.map | 3 + doxygen/inherit_graph_56.md5 | 1 + doxygen/inherit_graph_56.png | Bin 0 -> 3003 bytes doxygen/inherit_graph_57.map | 3 + doxygen/inherit_graph_57.md5 | 1 + doxygen/inherit_graph_57.png | Bin 0 -> 3557 bytes doxygen/inherit_graph_58.map | 3 + doxygen/inherit_graph_58.md5 | 1 + doxygen/inherit_graph_58.png | Bin 0 -> 4314 bytes doxygen/inherit_graph_59.map | 3 + doxygen/inherit_graph_59.md5 | 1 + doxygen/inherit_graph_59.png | Bin 0 -> 3308 bytes doxygen/inherit_graph_6.map | 3 + doxygen/inherit_graph_6.md5 | 1 + doxygen/inherit_graph_6.png | Bin 0 -> 1727 bytes doxygen/inherit_graph_60.map | 3 + doxygen/inherit_graph_60.md5 | 1 + doxygen/inherit_graph_60.png | Bin 0 -> 3463 bytes doxygen/inherit_graph_61.map | 3 + doxygen/inherit_graph_61.md5 | 1 + doxygen/inherit_graph_61.png | Bin 0 -> 4248 bytes doxygen/inherit_graph_62.map | 3 + doxygen/inherit_graph_62.md5 | 1 + doxygen/inherit_graph_62.png | Bin 0 -> 3886 bytes doxygen/inherit_graph_63.map | 3 + doxygen/inherit_graph_63.md5 | 1 + doxygen/inherit_graph_63.png | Bin 0 -> 3774 bytes doxygen/inherit_graph_64.map | 3 + doxygen/inherit_graph_64.md5 | 1 + doxygen/inherit_graph_64.png | Bin 0 -> 3474 bytes doxygen/inherit_graph_65.map | 3 + doxygen/inherit_graph_65.md5 | 1 + doxygen/inherit_graph_65.png | Bin 0 -> 3611 bytes doxygen/inherit_graph_66.map | 3 + doxygen/inherit_graph_66.md5 | 1 + doxygen/inherit_graph_66.png | Bin 0 -> 4107 bytes doxygen/inherit_graph_67.map | 3 + doxygen/inherit_graph_67.md5 | 1 + doxygen/inherit_graph_67.png | Bin 0 -> 2070 bytes doxygen/inherit_graph_68.map | 3 + doxygen/inherit_graph_68.md5 | 1 + doxygen/inherit_graph_68.png | Bin 0 -> 2219 bytes doxygen/inherit_graph_69.map | 3 + doxygen/inherit_graph_69.md5 | 1 + doxygen/inherit_graph_69.png | Bin 0 -> 2216 bytes doxygen/inherit_graph_7.map | 3 + doxygen/inherit_graph_7.md5 | 1 + doxygen/inherit_graph_7.png | Bin 0 -> 2527 bytes doxygen/inherit_graph_70.map | 3 + doxygen/inherit_graph_70.md5 | 1 + doxygen/inherit_graph_70.png | Bin 0 -> 3279 bytes doxygen/inherit_graph_71.map | 3 + doxygen/inherit_graph_71.md5 | 1 + doxygen/inherit_graph_71.png | Bin 0 -> 3978 bytes doxygen/inherit_graph_72.map | 3 + doxygen/inherit_graph_72.md5 | 1 + doxygen/inherit_graph_72.png | Bin 0 -> 3805 bytes doxygen/inherit_graph_73.map | 3 + doxygen/inherit_graph_73.md5 | 1 + doxygen/inherit_graph_73.png | Bin 0 -> 3269 bytes doxygen/inherit_graph_74.map | 3 + doxygen/inherit_graph_74.md5 | 1 + doxygen/inherit_graph_74.png | Bin 0 -> 3337 bytes doxygen/inherit_graph_75.map | 3 + doxygen/inherit_graph_75.md5 | 1 + doxygen/inherit_graph_75.png | Bin 0 -> 3301 bytes doxygen/inherit_graph_76.map | 3 + doxygen/inherit_graph_76.md5 | 1 + doxygen/inherit_graph_76.png | Bin 0 -> 3526 bytes doxygen/inherit_graph_77.map | 3 + doxygen/inherit_graph_77.md5 | 1 + doxygen/inherit_graph_77.png | Bin 0 -> 2623 bytes doxygen/inherit_graph_78.map | 3 + doxygen/inherit_graph_78.md5 | 1 + doxygen/inherit_graph_78.png | Bin 0 -> 2193 bytes doxygen/inherit_graph_79.map | 3 + doxygen/inherit_graph_79.md5 | 1 + doxygen/inherit_graph_79.png | Bin 0 -> 2740 bytes doxygen/inherit_graph_8.map | 3 + doxygen/inherit_graph_8.md5 | 1 + doxygen/inherit_graph_8.png | Bin 0 -> 1590 bytes doxygen/inherit_graph_80.map | 4 + doxygen/inherit_graph_80.md5 | 1 + doxygen/inherit_graph_80.png | Bin 0 -> 4046 bytes doxygen/inherit_graph_81.map | 3 + doxygen/inherit_graph_81.md5 | 1 + doxygen/inherit_graph_81.png | Bin 0 -> 2964 bytes doxygen/inherit_graph_82.map | 3 + doxygen/inherit_graph_82.md5 | 1 + doxygen/inherit_graph_82.png | Bin 0 -> 3422 bytes doxygen/inherit_graph_83.map | 3 + doxygen/inherit_graph_83.md5 | 1 + doxygen/inherit_graph_83.png | Bin 0 -> 3020 bytes doxygen/inherit_graph_84.map | 3 + doxygen/inherit_graph_84.md5 | 1 + doxygen/inherit_graph_84.png | Bin 0 -> 2567 bytes doxygen/inherit_graph_85.map | 4 + doxygen/inherit_graph_85.md5 | 1 + doxygen/inherit_graph_85.png | Bin 0 -> 5586 bytes doxygen/inherit_graph_86.map | 3 + doxygen/inherit_graph_86.md5 | 1 + doxygen/inherit_graph_86.png | Bin 0 -> 3141 bytes doxygen/inherit_graph_87.map | 3 + doxygen/inherit_graph_87.md5 | 1 + doxygen/inherit_graph_87.png | Bin 0 -> 3801 bytes doxygen/inherit_graph_88.map | 3 + doxygen/inherit_graph_88.md5 | 1 + doxygen/inherit_graph_88.png | Bin 0 -> 2592 bytes doxygen/inherit_graph_89.map | 3 + doxygen/inherit_graph_89.md5 | 1 + doxygen/inherit_graph_89.png | Bin 0 -> 3283 bytes doxygen/inherit_graph_9.map | 3 + doxygen/inherit_graph_9.md5 | 1 + doxygen/inherit_graph_9.png | Bin 0 -> 2415 bytes doxygen/inherit_graph_90.map | 3 + doxygen/inherit_graph_90.md5 | 1 + doxygen/inherit_graph_90.png | Bin 0 -> 2958 bytes doxygen/inherit_graph_91.map | 3 + doxygen/inherit_graph_91.md5 | 1 + doxygen/inherit_graph_91.png | Bin 0 -> 1139 bytes doxygen/inherit_graph_92.map | 3 + doxygen/inherit_graph_92.md5 | 1 + doxygen/inherit_graph_92.png | Bin 0 -> 2990 bytes doxygen/inherit_graph_93.map | 3 + doxygen/inherit_graph_93.md5 | 1 + doxygen/inherit_graph_93.png | Bin 0 -> 2169 bytes doxygen/inherit_graph_94.map | 3 + doxygen/inherit_graph_94.md5 | 1 + doxygen/inherit_graph_94.png | Bin 0 -> 3900 bytes doxygen/inherit_graph_95.map | 3 + doxygen/inherit_graph_95.md5 | 1 + doxygen/inherit_graph_95.png | Bin 0 -> 2401 bytes doxygen/inherit_graph_96.map | 4 + doxygen/inherit_graph_96.md5 | 1 + doxygen/inherit_graph_96.png | Bin 0 -> 4900 bytes doxygen/inherit_graph_97.map | 6 + doxygen/inherit_graph_97.md5 | 1 + doxygen/inherit_graph_97.png | Bin 0 -> 16426 bytes doxygen/inherit_graph_98.map | 4 + doxygen/inherit_graph_98.md5 | 1 + doxygen/inherit_graph_98.png | Bin 0 -> 5191 bytes doxygen/inherit_graph_99.map | 3 + doxygen/inherit_graph_99.md5 | 1 + doxygen/inherit_graph_99.png | Bin 0 -> 2040 bytes doxygen/inherits.html | 654 ++++++ doxygen/init_8hpp_source.html | 191 ++ doxygen/iterator__adaptor_8hpp_source.html | 287 +++ doxygen/jquery.js | 34 + doxygen/local__gemm_8hpp_source.html | 169 ++ doxygen/local__gemv_8hpp_source.html | 185 ++ doxygen/logger_8hpp_source.html | 203 ++ doxygen/matrix__algorithms_8hpp_source.html | 93 + doxygen/matrix__entry_8hpp_source.html | 318 +++ doxygen/matrix__io_8hpp_source.html | 371 +++ doxygen/matrix__partition_8hpp_source.html | 207 ++ doxygen/md__for__each_8hpp_source.html | 308 +++ doxygen/mdarray__shim_8hpp_source.html | 92 + doxygen/mdspan__shim_8hpp_source.html | 94 + doxygen/mdspan__utils_8hpp_source.html | 427 ++++ doxygen/mdspan__view_8hpp_source.html | 362 +++ doxygen/memory_8hpp_source.html | 190 ++ doxygen/menu.js | 136 ++ doxygen/menudata.js | 36 + doxygen/mp_2algorithms_2copy_8hpp_source.html | 159 ++ .../mp_2algorithms_2equal_8hpp_source.html | 146 ++ ...gorithms_2exclusive__scan_8hpp_source.html | 138 ++ doxygen/mp_2algorithms_2fill_8hpp_source.html | 117 + ...mp_2algorithms_2for__each_8hpp_source.html | 148 ++ ...gorithms_2inclusive__scan_8hpp_source.html | 158 ++ doxygen/mp_2algorithms_2iota_8hpp_source.html | 120 + .../mp_2algorithms_2reduce_8hpp_source.html | 296 +++ doxygen/mp_2algorithms_2sort_8hpp_source.html | 565 +++++ ...mp_2algorithms_2transform_8hpp_source.html | 127 ++ ...ners_2distributed__vector_8hpp_source.html | 420 ++++ doxygen/mp_2views_2enumerate_8hpp_source.html | 144 ++ doxygen/mp_2views_2views_8hpp_source.html | 173 ++ doxygen/mp_8hpp_source.html | 166 ++ doxygen/nav_f.png | Bin 0 -> 153 bytes doxygen/nav_fd.png | Bin 0 -> 169 bytes doxygen/nav_g.png | Bin 0 -> 95 bytes doxygen/nav_h.png | Bin 0 -> 98 bytes doxygen/nav_hd.png | Bin 0 -> 114 bytes ...al__distributed__iterator_8hpp_source.html | 210 ++ .../onedpl__direct__iterator_8hpp_source.html | 197 ++ doxygen/open.png | Bin 0 -> 123 bytes doxygen/owning__view_8hpp_source.html | 155 ++ doxygen/range_8hpp_source.html | 241 ++ doxygen/range__adaptors_8hpp_source.html | 103 + doxygen/ranges_8hpp_source.html | 360 +++ doxygen/ranges__shim_8hpp_source.html | 112 + doxygen/ranges__utils_8hpp_source.html | 106 + doxygen/remote__subrange_8hpp_source.html | 140 ++ doxygen/search/all_0.js | 5 + doxygen/search/all_1.js | 7 + doxygen/search/all_10.js | 17 + doxygen/search/all_11.js | 4 + doxygen/search/all_12.js | 5 + doxygen/search/all_13.js | 6 + doxygen/search/all_2.js | 9 + doxygen/search/all_3.js | 66 + doxygen/search/all_4.js | 9 + doxygen/search/all_5.js | 5 + doxygen/search/all_6.js | 4 + doxygen/search/all_7.js | 5 + doxygen/search/all_8.js | 27 + doxygen/search/all_9.js | 5 + doxygen/search/all_a.js | 17 + doxygen/search/all_b.js | 4 + doxygen/search/all_c.js | 5 + doxygen/search/all_d.js | 4 + doxygen/search/all_e.js | 10 + doxygen/search/all_f.js | 22 + doxygen/search/classes_0.js | 5 + doxygen/search/classes_1.js | 6 + doxygen/search/classes_10.js | 17 + doxygen/search/classes_11.js | 4 + doxygen/search/classes_12.js | 5 + doxygen/search/classes_13.js | 6 + doxygen/search/classes_2.js | 9 + doxygen/search/classes_3.js | 31 + doxygen/search/classes_4.js | 6 + doxygen/search/classes_5.js | 5 + doxygen/search/classes_6.js | 4 + doxygen/search/classes_7.js | 5 + doxygen/search/classes_8.js | 27 + doxygen/search/classes_9.js | 5 + doxygen/search/classes_a.js | 17 + doxygen/search/classes_b.js | 4 + doxygen/search/classes_c.js | 4 + doxygen/search/classes_d.js | 4 + doxygen/search/classes_e.js | 8 + doxygen/search/classes_f.js | 21 + doxygen/search/close.svg | 31 + doxygen/search/concepts_0.js | 38 + doxygen/search/functions_0.js | 4 + doxygen/search/functions_1.js | 4 + doxygen/search/functions_2.js | 6 + doxygen/search/functions_3.js | 4 + doxygen/search/functions_4.js | 4 + doxygen/search/functions_5.js | 4 + doxygen/search/functions_6.js | 5 + doxygen/search/functions_7.js | 4 + doxygen/search/functions_8.js | 4 + doxygen/search/mag.svg | 37 + doxygen/search/mag_d.svg | 37 + doxygen/search/mag_sel.svg | 74 + doxygen/search/mag_seld.svg | 74 + doxygen/search/search.css | 291 +++ doxygen/search/search.js | 816 +++++++ doxygen/search/searchdata.js | 24 + doxygen/segment_8hpp_source.html | 355 +++ doxygen/segmented_8hpp_source.html | 182 ++ doxygen/segments__tools_8hpp_source.html | 228 ++ doxygen/sliding_8hpp_source.html | 148 ++ doxygen/source__location_8hpp_source.html | 151 ++ doxygen/sp_2algorithms_2copy_8hpp_source.html | 314 +++ .../sp_2algorithms_2equal_8hpp_source.html | 130 ++ ...gorithms_2exclusive__scan_8hpp_source.html | 315 +++ doxygen/sp_2algorithms_2fill_8hpp_source.html | 179 ++ ...sp_2algorithms_2for__each_8hpp_source.html | 158 ++ ...gorithms_2inclusive__scan_8hpp_source.html | 342 +++ doxygen/sp_2algorithms_2iota_8hpp_source.html | 116 + .../sp_2algorithms_2reduce_8hpp_source.html | 255 +++ doxygen/sp_2algorithms_2sort_8hpp_source.html | 383 ++++ ...sp_2algorithms_2transform_8hpp_source.html | 168 ++ .../sp_2distributed__vector_8hpp_source.html | 305 +++ doxygen/sp_2views_2enumerate_8hpp_source.html | 144 ++ doxygen/sp_2views_2views_8hpp_source.html | 111 + doxygen/sp_8hpp_source.html | 105 + doxygen/span_8hpp_source.html | 148 ++ doxygen/sparse__matrix_8hpp_source.html | 522 +++++ doxygen/splitbar.png | Bin 0 -> 314 bytes doxygen/splitbard.png | Bin 0 -> 282 bytes doxygen/standard__views_8hpp_source.html | 135 ++ .../structdr_1_1default__memory-members.html | 96 + doxygen/structdr_1_1default__memory.html | 130 ++ doxygen/structdr_1_1is__drop__view.html | 106 + ...3_01rng_1_1drop__view_3_01T_01_4_01_4.html | 106 + ...rop__view_3_01T_01_4_01_4__coll__graph.map | 4 + ...rop__view_3_01T_01_4_01_4__coll__graph.md5 | 1 + ...rop__view_3_01T_01_4_01_4__coll__graph.png | Bin 0 -> 6419 bytes ...__view_3_01T_01_4_01_4__inherit__graph.map | 4 + ...__view_3_01T_01_4_01_4__inherit__graph.md5 | 1 + ...__view_3_01T_01_4_01_4__inherit__graph.png | Bin 0 -> 6419 bytes ...tructdr_1_1is__drop__view__coll__graph.map | 4 + ...tructdr_1_1is__drop__view__coll__graph.md5 | 1 + ...tructdr_1_1is__drop__view__coll__graph.png | Bin 0 -> 4703 bytes ...ctdr_1_1is__drop__view__inherit__graph.map | 4 + ...ctdr_1_1is__drop__view__inherit__graph.md5 | 1 + ...ctdr_1_1is__drop__view__inherit__graph.png | Bin 0 -> 4703 bytes doxygen/structdr_1_1is__iota__view.html | 106 + ...3_01rng_1_1iota__view_3_01W_01_4_01_4.html | 106 + ...ota__view_3_01W_01_4_01_4__coll__graph.map | 4 + ...ota__view_3_01W_01_4_01_4__coll__graph.md5 | 1 + ...ota__view_3_01W_01_4_01_4__coll__graph.png | Bin 0 -> 6579 bytes ...__view_3_01W_01_4_01_4__inherit__graph.map | 4 + ...__view_3_01W_01_4_01_4__inherit__graph.md5 | 1 + ...__view_3_01W_01_4_01_4__inherit__graph.png | Bin 0 -> 6579 bytes ...tructdr_1_1is__iota__view__coll__graph.map | 4 + ...tructdr_1_1is__iota__view__coll__graph.md5 | 1 + ...tructdr_1_1is__iota__view__coll__graph.png | Bin 0 -> 4780 bytes ...ctdr_1_1is__iota__view__inherit__graph.map | 4 + ...ctdr_1_1is__iota__view__inherit__graph.md5 | 1 + ...ctdr_1_1is__iota__view__inherit__graph.png | Bin 0 -> 4780 bytes doxygen/structdr_1_1is__owning__view.html | 106 + ...uctdr_1_1is__owning__view__coll__graph.map | 4 + ...uctdr_1_1is__owning__view__coll__graph.md5 | 1 + ...uctdr_1_1is__owning__view__coll__graph.png | Bin 0 -> 4941 bytes ...dr_1_1is__owning__view__inherit__graph.map | 4 + ...dr_1_1is__owning__view__inherit__graph.md5 | 1 + ...dr_1_1is__owning__view__inherit__graph.png | Bin 0 -> 4941 bytes doxygen/structdr_1_1is__ref__view.html | 106 + ..._3_01rng_1_1ref__view_3_01R_01_4_01_4.html | 106 + ...ref__view_3_01R_01_4_01_4__coll__graph.map | 4 + ...ref__view_3_01R_01_4_01_4__coll__graph.md5 | 1 + ...ref__view_3_01R_01_4_01_4__coll__graph.png | Bin 0 -> 6029 bytes ...__view_3_01R_01_4_01_4__inherit__graph.map | 4 + ...__view_3_01R_01_4_01_4__inherit__graph.md5 | 1 + ...__view_3_01R_01_4_01_4__inherit__graph.png | Bin 0 -> 6029 bytes ...structdr_1_1is__ref__view__coll__graph.map | 4 + ...structdr_1_1is__ref__view__coll__graph.md5 | 1 + ...structdr_1_1is__ref__view__coll__graph.png | Bin 0 -> 4408 bytes ...uctdr_1_1is__ref__view__inherit__graph.map | 4 + ...uctdr_1_1is__ref__view__inherit__graph.md5 | 1 + ...uctdr_1_1is__ref__view__inherit__graph.png | Bin 0 -> 4408 bytes doxygen/structdr_1_1is__sliding__view.html | 106 + ...1rng_1_1sliding__view_3_01T_01_4_01_4.html | 106 + ...ing__view_3_01T_01_4_01_4__coll__graph.map | 4 + ...ing__view_3_01T_01_4_01_4__coll__graph.md5 | 1 + ...ing__view_3_01T_01_4_01_4__coll__graph.png | Bin 0 -> 6305 bytes ...__view_3_01T_01_4_01_4__inherit__graph.map | 4 + ...__view_3_01T_01_4_01_4__inherit__graph.md5 | 1 + ...__view_3_01T_01_4_01_4__inherit__graph.png | Bin 0 -> 6305 bytes ...ctdr_1_1is__sliding__view__coll__graph.map | 4 + ...ctdr_1_1is__sliding__view__coll__graph.md5 | 1 + ...ctdr_1_1is__sliding__view__coll__graph.png | Bin 0 -> 4783 bytes ...r_1_1is__sliding__view__inherit__graph.map | 4 + ...r_1_1is__sliding__view__inherit__graph.md5 | 1 + ...r_1_1is__sliding__view__inherit__graph.png | Bin 0 -> 4783 bytes doxygen/structdr_1_1is__subrange__view.html | 106 + ...w_3_01rng_1_1subrange_3_01T_01_4_01_4.html | 106 + ...1subrange_3_01T_01_4_01_4__coll__graph.map | 4 + ...1subrange_3_01T_01_4_01_4__coll__graph.md5 | 1 + ...1subrange_3_01T_01_4_01_4__coll__graph.png | Bin 0 -> 6404 bytes ...brange_3_01T_01_4_01_4__inherit__graph.map | 4 + ...brange_3_01T_01_4_01_4__inherit__graph.md5 | 1 + ...brange_3_01T_01_4_01_4__inherit__graph.png | Bin 0 -> 6404 bytes ...tdr_1_1is__subrange__view__coll__graph.map | 4 + ...tdr_1_1is__subrange__view__coll__graph.md5 | 1 + ...tdr_1_1is__subrange__view__coll__graph.png | Bin 0 -> 5121 bytes ..._1_1is__subrange__view__inherit__graph.map | 4 + ..._1_1is__subrange__view__inherit__graph.md5 | 1 + ..._1_1is__subrange__view__inherit__graph.png | Bin 0 -> 5121 bytes doxygen/structdr_1_1is__take__view.html | 106 + ...3_01rng_1_1take__view_3_01T_01_4_01_4.html | 106 + ...ake__view_3_01T_01_4_01_4__coll__graph.map | 4 + ...ake__view_3_01T_01_4_01_4__coll__graph.md5 | 1 + ...ake__view_3_01T_01_4_01_4__coll__graph.png | Bin 0 -> 6361 bytes ...__view_3_01T_01_4_01_4__inherit__graph.map | 4 + ...__view_3_01T_01_4_01_4__inherit__graph.md5 | 1 + ...__view_3_01T_01_4_01_4__inherit__graph.png | Bin 0 -> 6361 bytes ...tructdr_1_1is__take__view__coll__graph.map | 4 + ...tructdr_1_1is__take__view__coll__graph.md5 | 1 + ...tructdr_1_1is__take__view__coll__graph.png | Bin 0 -> 4701 bytes ...ctdr_1_1is__take__view__inherit__graph.map | 4 + ...ctdr_1_1is__take__view__inherit__graph.md5 | 1 + ...ctdr_1_1is__take__view__inherit__graph.png | Bin 0 -> 4701 bytes doxygen/structdr_1_1is__zip__view.html | 106 + ..._1zip__view_3_01Views_8_8_8_01_4_01_4.html | 106 + ...3_01Views_8_8_8_01_4_01_4__coll__graph.map | 4 + ...3_01Views_8_8_8_01_4_01_4__coll__graph.md5 | 1 + ...3_01Views_8_8_8_01_4_01_4__coll__graph.png | Bin 0 -> 6510 bytes ...1Views_8_8_8_01_4_01_4__inherit__graph.map | 4 + ...1Views_8_8_8_01_4_01_4__inherit__graph.md5 | 1 + ...1Views_8_8_8_01_4_01_4__inherit__graph.png | Bin 0 -> 6510 bytes ...structdr_1_1is__zip__view__coll__graph.map | 4 + ...structdr_1_1is__zip__view__coll__graph.md5 | 1 + ...structdr_1_1is__zip__view__coll__graph.png | Bin 0 -> 4628 bytes ...uctdr_1_1is__zip__view__inherit__graph.map | 4 + ...uctdr_1_1is__zip__view__inherit__graph.md5 | 1 + ...uctdr_1_1is__zip__view__inherit__graph.png | Bin 0 -> 4628 bytes ...dr_1_1mp_1_1____detail_1_1any-members.html | 89 + .../structdr_1_1mp_1_1____detail_1_1any.html | 99 + ...____detail_1_1global__context-members.html | 97 + ..._1mp_1_1____detail_1_1global__context.html | 134 ++ ...detail_1_1global__context__coll__graph.map | 5 + ...detail_1_1global__context__coll__graph.md5 | 1 + ...detail_1_1global__context__coll__graph.png | Bin 0 -> 9314 bytes doxygen/structdr_1_1mp_1_1device__policy.html | 88 + ...tructdr_1_1mp_1_1distribution-members.html | 95 + doxygen/structdr_1_1mp_1_1distribution.html | 116 + ...tructdr_1_1mp_1_1halo__bounds-members.html | 91 + doxygen/structdr_1_1mp_1_1halo__bounds.html | 104 + ..._1mp_1_1halo__impl_1_1max__op-members.html | 89 + ...ructdr_1_1mp_1_1halo__impl_1_1max__op.html | 98 + ..._1mp_1_1halo__impl_1_1min__op-members.html | 89 + ...ructdr_1_1mp_1_1halo__impl_1_1min__op.html | 98 + ...1halo__impl_1_1multiplies__op-members.html | 89 + ...1_1mp_1_1halo__impl_1_1multiplies__op.html | 98 + ...1mp_1_1halo__impl_1_1plus__op-members.html | 89 + ...uctdr_1_1mp_1_1halo__impl_1_1plus__op.html | 98 + ...p_1_1halo__impl_1_1second__op-members.html | 89 + ...tdr_1_1mp_1_1halo__impl_1_1second__op.html | 98 + ...tructdr_1_1mp_1_1mdspan__view-members.html | 97 + doxygen/structdr_1_1mp_1_1mdspan__view.html | 144 ++ ...tdr_1_1mp_1_1mdspan__view__coll__graph.map | 4 + ...tdr_1_1mp_1_1mdspan__view__coll__graph.md5 | 1 + ...tdr_1_1mp_1_1mdspan__view__coll__graph.png | Bin 0 -> 8814 bytes ..._1_1mp_1_1mdspan__view__inherit__graph.map | 4 + ..._1_1mp_1_1mdspan__view__inherit__graph.md5 | 1 + ..._1_1mp_1_1mdspan__view__inherit__graph.png | Bin 0 -> 8814 bytes ...ctdr_1_1mp_1_1submdspan__view-members.html | 95 + .../structdr_1_1mp_1_1submdspan__view.html | 134 ++ ..._1_1mp_1_1submdspan__view__coll__graph.map | 4 + ..._1_1mp_1_1submdspan__view__coll__graph.md5 | 1 + ..._1_1mp_1_1submdspan__view__coll__graph.png | Bin 0 -> 8452 bytes ...1mp_1_1submdspan__view__inherit__graph.map | 4 + ...1mp_1_1submdspan__view__inherit__graph.md5 | 1 + ...1mp_1_1submdspan__view__inherit__graph.png | Bin 0 -> 8452 bytes ..._1_1____detail_1_1range__size-members.html | 89 + ...1_1views_1_1____detail_1_1range__size.html | 98 + ...ail_1_1range__size_3_01R_01_4-members.html | 89 + ...1____detail_1_1range__size_3_01R_01_4.html | 98 + ..._1_1____detail_1_1sliding__fn-members.html | 89 + ...1_1views_1_1____detail_1_1sliding__fn.html | 100 + ..._1_1____detail_1_1local__fn__-members.html | 90 + ..._1ranges_1_1____detail_1_1local__fn__.html | 104 + ...____detail_1_1tuple__or__pair-members.html | 89 + ..._1sp_1_1____detail_1_1tuple__or__pair.html | 98 + ...e__or__pair_3_01T_00_01U_01_4-members.html | 89 + ..._1_1tuple__or__pair_3_01T_00_01U_01_4.html | 98 + ..._1device__allocator_1_1rebind-members.html | 89 + ..._1_1sp_1_1device__allocator_1_1rebind.html | 98 + ...uctdr_1_1sp_1_1device__policy-members.html | 94 + doxygen/structdr_1_1sp_1_1device__policy.html | 112 + ..._1_1sp_1_1distributed__vector-members.html | 114 + ...structdr_1_1sp_1_1distributed__vector.html | 185 ++ ...ructdr_1_1views_1_1iota__fn__-members.html | 90 + doxygen/structdr_1_1views_1_1iota__fn__.html | 103 + ...ter_3_01Mdspan_00_01char_01_4-members.html | 90 + ..._1formatter_3_01Mdspan_00_01char_01_4.html | 120 + ...3_01Mdspan_00_01char_01_4__coll__graph.map | 4 + ...3_01Mdspan_00_01char_01_4__coll__graph.md5 | 1 + ...3_01Mdspan_00_01char_01_4__coll__graph.png | Bin 0 -> 6656 bytes ...1Mdspan_00_01char_01_4__inherit__graph.map | 4 + ...1Mdspan_00_01char_01_4__inherit__graph.md5 | 1 + ...1Mdspan_00_01char_01_4__inherit__graph.png | Bin 0 -> 6656 bytes ...ructnostd_1_1source__location-members.html | 95 + doxygen/structnostd_1_1source__location.html | 120 + ...ndex_00_01dr_1_1index_3_01I_01_4_01_4.html | 106 + ..._1_1index_3_01I_01_4_01_4__coll__graph.map | 4 + ..._1_1index_3_01I_01_4_01_4__coll__graph.md5 | 1 + ..._1_1index_3_01I_01_4_01_4__coll__graph.png | Bin 0 -> 6792 bytes ...1index_3_01I_01_4_01_4__inherit__graph.map | 4 + ...1index_3_01I_01_4_01_4__inherit__graph.md5 | 1 + ...1index_3_01I_01_4_01_4__inherit__graph.png | Bin 0 -> 6792 bytes ...1matrix__entry_3_01T_00_01I_01_4_01_4.html | 106 + ...ry_3_01T_00_01I_01_4_01_4__coll__graph.map | 4 + ...ry_3_01T_00_01I_01_4_01_4__coll__graph.md5 | 1 + ...ry_3_01T_00_01I_01_4_01_4__coll__graph.png | Bin 0 -> 9361 bytes ...3_01T_00_01I_01_4_01_4__inherit__graph.map | 4 + ...3_01T_00_01I_01_4_01_4__inherit__graph.md5 | 1 + ...3_01T_00_01I_01_4_01_4__inherit__graph.png | Bin 0 -> 9361 bytes ..._ref_3_01T_00_01I_00_01TRef_01_4_01_4.html | 106 + ...0_01I_00_01TRef_01_4_01_4__coll__graph.map | 4 + ...0_01I_00_01TRef_01_4_01_4__coll__graph.md5 | 1 + ...0_01I_00_01TRef_01_4_01_4__coll__graph.png | Bin 0 -> 9739 bytes ...1I_00_01TRef_01_4_01_4__inherit__graph.map | 4 + ...1I_00_01TRef_01_4_01_4__inherit__graph.md5 | 1 + ...1I_00_01TRef_01_4_01_4__inherit__graph.png | Bin 0 -> 9739 bytes ..._size_3_01dr_1_1index_3_01I_01_4_01_4.html | 106 + ..._1_1index_3_01I_01_4_01_4__coll__graph.map | 4 + ..._1_1index_3_01I_01_4_01_4__coll__graph.md5 | 1 + ..._1_1index_3_01I_01_4_01_4__coll__graph.png | Bin 0 -> 6610 bytes ...1index_3_01I_01_4_01_4__inherit__graph.map | 4 + ...1index_3_01I_01_4_01_4__inherit__graph.md5 | 1 + ...1index_3_01I_01_4_01_4__inherit__graph.png | Bin 0 -> 6610 bytes ...1matrix__entry_3_01T_00_01I_01_4_01_4.html | 106 + ...ry_3_01T_00_01I_01_4_01_4__coll__graph.map | 4 + ...ry_3_01T_00_01I_01_4_01_4__coll__graph.md5 | 1 + ...ry_3_01T_00_01I_01_4_01_4__coll__graph.png | Bin 0 -> 7479 bytes ...3_01T_00_01I_01_4_01_4__inherit__graph.map | 4 + ...3_01T_00_01I_01_4_01_4__inherit__graph.md5 | 1 + ...3_01T_00_01I_01_4_01_4__inherit__graph.png | Bin 0 -> 7479 bytes ..._ref_3_01T_00_01I_00_01TRef_01_4_01_4.html | 106 + ...0_01I_00_01TRef_01_4_01_4__coll__graph.map | 4 + ...0_01I_00_01TRef_01_4_01_4__coll__graph.md5 | 1 + ...0_01I_00_01TRef_01_4_01_4__coll__graph.png | Bin 0 -> 8031 bytes ...1I_00_01TRef_01_4_01_4__inherit__graph.map | 4 + ...1I_00_01TRef_01_4_01_4__inherit__graph.md5 | 1 + ...1I_00_01TRef_01_4_01_4__inherit__graph.png | Bin 0 -> 8031 bytes doxygen/submdspan__view_8hpp_source.html | 256 +++ doxygen/subrange_8hpp_source.html | 289 +++ doxygen/sycl__support_8hpp_source.html | 187 ++ doxygen/sycl__utils_8hpp_source.html | 293 +++ doxygen/sync_off.png | Bin 0 -> 853 bytes doxygen/sync_on.png | Bin 0 -> 845 bytes doxygen/tab_a.png | Bin 0 -> 142 bytes doxygen/tab_ad.png | Bin 0 -> 135 bytes doxygen/tab_b.png | Bin 0 -> 169 bytes doxygen/tab_bd.png | Bin 0 -> 173 bytes doxygen/tab_h.png | Bin 0 -> 177 bytes doxygen/tab_hd.png | Bin 0 -> 180 bytes doxygen/tab_s.png | Bin 0 -> 184 bytes doxygen/tab_sd.png | Bin 0 -> 188 bytes doxygen/tabs.css | 1 + doxygen/transpose_8hpp_source.html | 355 +++ doxygen/tuple__utils_8hpp_source.html | 113 + doxygen/util_8hpp_source.html | 357 +++ doxygen/utils_8hpp_source.html | 115 + doxygen/vector_8hpp_source.html | 334 +++ doxygen/view__detectors_8hpp_source.html | 151 ++ doxygen/views_2iota_8hpp_source.html | 113 + doxygen/views_2transform_8hpp_source.html | 300 +++ doxygen/views_2views_8hpp_source.html | 104 + doxygen/zip_8hpp_source.html | 366 +++ doxygen/zip__view_8hpp_source.html | 442 ++++ spec/.buildinfo | 4 + spec/_sources/algorithms/algorithms.rst | 32 + spec/_sources/algorithms/copy.rst | 45 + spec/_sources/algorithms/exclusive_scan.rst | 46 + spec/_sources/algorithms/fill.rst | 57 + spec/_sources/algorithms/for_each.rst | 45 + spec/_sources/algorithms/inclusive_scan.rst | 61 + spec/_sources/algorithms/iota.rst | 45 + spec/_sources/algorithms/reduce.rst | 78 + spec/_sources/algorithms/sort.rst | 38 + spec/_sources/algorithms/sp_matrix_gemm.rst | 23 + spec/_sources/algorithms/sp_matrix_gemv.rst | 27 + spec/_sources/algorithms/transform.rst | 44 + spec/_sources/arch.rst | 14 + spec/_sources/concepts.rst | 177 ++ spec/_sources/containers/containers.rst | 22 + .../mp_distributed_dense_matrix.rst | 26 + .../containers/mp_distributed_vector.rst | 27 + spec/_sources/containers/sp_dense_matrix.rst | 20 + .../containers/sp_distributed_vector.rst | 24 + spec/_sources/containers/sp_sparse_matrix.rst | 20 + spec/_sources/include/distributed-ranges.rst | 41 + spec/_sources/index.rst | 31 + spec/_sources/intro.rst | 14 + spec/_sources/views/all_view.rst | 21 + spec/_sources/views/counted_view.rst | 21 + spec/_sources/views/drop_view.rst | 21 + spec/_sources/views/iota_view.rst | 21 + spec/_sources/views/sliding_view.rst | 28 + spec/_sources/views/take_view.rst | 21 + spec/_sources/views/transform_view.rst | 21 + spec/_sources/views/views.rst | 21 + spec/_sources/views/zip_view.rst | 39 + spec/_static/basic.css | 925 ++++++++ spec/_static/doctools.js | 156 ++ spec/_static/documentation_options.js | 13 + spec/_static/file.png | Bin 0 -> 286 bytes spec/_static/images/logo_binder.svg | 19 + spec/_static/images/logo_colab.png | Bin 0 -> 7601 bytes spec/_static/images/logo_deepnote.svg | 1 + spec/_static/images/logo_jupyterhub.svg | 1 + spec/_static/language_data.js | 199 ++ .../locales/ar/LC_MESSAGES/booktheme.mo | Bin 0 -> 1541 bytes .../locales/ar/LC_MESSAGES/booktheme.po | 75 + .../locales/bg/LC_MESSAGES/booktheme.mo | Bin 0 -> 1708 bytes .../locales/bg/LC_MESSAGES/booktheme.po | 75 + .../locales/bn/LC_MESSAGES/booktheme.mo | Bin 0 -> 1646 bytes .../locales/bn/LC_MESSAGES/booktheme.po | 63 + .../locales/ca/LC_MESSAGES/booktheme.mo | Bin 0 -> 1246 bytes .../locales/ca/LC_MESSAGES/booktheme.po | 66 + .../locales/cs/LC_MESSAGES/booktheme.mo | Bin 0 -> 1405 bytes .../locales/cs/LC_MESSAGES/booktheme.po | 75 + .../locales/da/LC_MESSAGES/booktheme.mo | Bin 0 -> 1304 bytes .../locales/da/LC_MESSAGES/booktheme.po | 75 + .../locales/de/LC_MESSAGES/booktheme.mo | Bin 0 -> 1388 bytes .../locales/de/LC_MESSAGES/booktheme.po | 75 + .../locales/el/LC_MESSAGES/booktheme.mo | Bin 0 -> 1722 bytes .../locales/el/LC_MESSAGES/booktheme.po | 75 + .../locales/eo/LC_MESSAGES/booktheme.mo | Bin 0 -> 1337 bytes .../locales/eo/LC_MESSAGES/booktheme.po | 75 + .../locales/es/LC_MESSAGES/booktheme.mo | Bin 0 -> 1396 bytes .../locales/es/LC_MESSAGES/booktheme.po | 75 + .../locales/et/LC_MESSAGES/booktheme.mo | Bin 0 -> 1341 bytes .../locales/et/LC_MESSAGES/booktheme.po | 75 + .../locales/fi/LC_MESSAGES/booktheme.mo | Bin 0 -> 1368 bytes .../locales/fi/LC_MESSAGES/booktheme.po | 75 + .../locales/fr/LC_MESSAGES/booktheme.mo | Bin 0 -> 1412 bytes .../locales/fr/LC_MESSAGES/booktheme.po | 75 + .../locales/hr/LC_MESSAGES/booktheme.mo | Bin 0 -> 1402 bytes .../locales/hr/LC_MESSAGES/booktheme.po | 75 + .../locales/id/LC_MESSAGES/booktheme.mo | Bin 0 -> 1323 bytes .../locales/id/LC_MESSAGES/booktheme.po | 75 + .../locales/it/LC_MESSAGES/booktheme.mo | Bin 0 -> 1403 bytes .../locales/it/LC_MESSAGES/booktheme.po | 75 + .../locales/iw/LC_MESSAGES/booktheme.mo | Bin 0 -> 1445 bytes .../locales/iw/LC_MESSAGES/booktheme.po | 75 + .../locales/ja/LC_MESSAGES/booktheme.mo | Bin 0 -> 1471 bytes .../locales/ja/LC_MESSAGES/booktheme.po | 75 + .../locales/ko/LC_MESSAGES/booktheme.mo | Bin 0 -> 1375 bytes .../locales/ko/LC_MESSAGES/booktheme.po | 75 + .../locales/lt/LC_MESSAGES/booktheme.mo | Bin 0 -> 1413 bytes .../locales/lt/LC_MESSAGES/booktheme.po | 75 + .../locales/lv/LC_MESSAGES/booktheme.mo | Bin 0 -> 1404 bytes .../locales/lv/LC_MESSAGES/booktheme.po | 75 + .../locales/ml/LC_MESSAGES/booktheme.mo | Bin 0 -> 1883 bytes .../locales/ml/LC_MESSAGES/booktheme.po | 66 + .../locales/mr/LC_MESSAGES/booktheme.mo | Bin 0 -> 1674 bytes .../locales/mr/LC_MESSAGES/booktheme.po | 66 + .../locales/ms/LC_MESSAGES/booktheme.mo | Bin 0 -> 1213 bytes .../locales/ms/LC_MESSAGES/booktheme.po | 66 + .../locales/nl/LC_MESSAGES/booktheme.mo | Bin 0 -> 1356 bytes .../locales/nl/LC_MESSAGES/booktheme.po | 75 + .../locales/no/LC_MESSAGES/booktheme.mo | Bin 0 -> 1317 bytes .../locales/no/LC_MESSAGES/booktheme.po | 75 + .../locales/pl/LC_MESSAGES/booktheme.mo | Bin 0 -> 1371 bytes .../locales/pl/LC_MESSAGES/booktheme.po | 75 + .../locales/pt/LC_MESSAGES/booktheme.mo | Bin 0 -> 1364 bytes .../locales/pt/LC_MESSAGES/booktheme.po | 75 + .../locales/ro/LC_MESSAGES/booktheme.mo | Bin 0 -> 1390 bytes .../locales/ro/LC_MESSAGES/booktheme.po | 75 + .../locales/ru/LC_MESSAGES/booktheme.mo | Bin 0 -> 1722 bytes .../locales/ru/LC_MESSAGES/booktheme.po | 75 + .../locales/sk/LC_MESSAGES/booktheme.mo | Bin 0 -> 1393 bytes .../locales/sk/LC_MESSAGES/booktheme.po | 75 + .../locales/sl/LC_MESSAGES/booktheme.mo | Bin 0 -> 1374 bytes .../locales/sl/LC_MESSAGES/booktheme.po | 75 + .../locales/sr/LC_MESSAGES/booktheme.mo | Bin 0 -> 1679 bytes .../locales/sr/LC_MESSAGES/booktheme.po | 75 + .../locales/sv/LC_MESSAGES/booktheme.mo | Bin 0 -> 1365 bytes .../locales/sv/LC_MESSAGES/booktheme.po | 75 + .../locales/ta/LC_MESSAGES/booktheme.mo | Bin 0 -> 1928 bytes .../locales/ta/LC_MESSAGES/booktheme.po | 66 + .../locales/te/LC_MESSAGES/booktheme.mo | Bin 0 -> 1806 bytes .../locales/te/LC_MESSAGES/booktheme.po | 66 + .../locales/tg/LC_MESSAGES/booktheme.mo | Bin 0 -> 1628 bytes .../locales/tg/LC_MESSAGES/booktheme.po | 75 + .../locales/th/LC_MESSAGES/booktheme.mo | Bin 0 -> 1766 bytes .../locales/th/LC_MESSAGES/booktheme.po | 75 + .../locales/tl/LC_MESSAGES/booktheme.mo | Bin 0 -> 1273 bytes .../locales/tl/LC_MESSAGES/booktheme.po | 66 + .../locales/tr/LC_MESSAGES/booktheme.mo | Bin 0 -> 1373 bytes .../locales/tr/LC_MESSAGES/booktheme.po | 75 + .../locales/uk/LC_MESSAGES/booktheme.mo | Bin 0 -> 1681 bytes .../locales/uk/LC_MESSAGES/booktheme.po | 75 + .../locales/ur/LC_MESSAGES/booktheme.mo | Bin 0 -> 1462 bytes .../locales/ur/LC_MESSAGES/booktheme.po | 66 + .../locales/vi/LC_MESSAGES/booktheme.mo | Bin 0 -> 1431 bytes .../locales/vi/LC_MESSAGES/booktheme.po | 75 + .../locales/zh_CN/LC_MESSAGES/booktheme.mo | Bin 0 -> 1310 bytes .../locales/zh_CN/LC_MESSAGES/booktheme.po | 75 + .../locales/zh_TW/LC_MESSAGES/booktheme.mo | Bin 0 -> 1341 bytes .../locales/zh_TW/LC_MESSAGES/booktheme.po | 75 + spec/_static/minus.png | Bin 0 -> 90 bytes spec/_static/plus.png | Bin 0 -> 90 bytes spec/_static/pygments.css | 152 ++ spec/_static/sbt-webpack-macros.html | 11 + spec/_static/scripts/bootstrap.js | 3 + spec/_static/scripts/bootstrap.js.LICENSE.txt | 5 + spec/_static/scripts/bootstrap.js.map | 1 + spec/_static/scripts/pydata-sphinx-theme.js | 2 + .../scripts/pydata-sphinx-theme.js.map | 1 + spec/_static/scripts/sphinx-book-theme.js | 2 + spec/_static/scripts/sphinx-book-theme.js.map | 1 + spec/_static/searchtools.js | 620 +++++ spec/_static/sphinx_highlight.js | 154 ++ spec/_static/styles/bootstrap.css | 6 + spec/_static/styles/bootstrap.css.map | 1 + spec/_static/styles/pydata-sphinx-theme.css | 2 + .../styles/pydata-sphinx-theme.css.map | 1 + spec/_static/styles/sphinx-book-theme.css | 9 + spec/_static/styles/sphinx-book-theme.css.map | 1 + spec/_static/styles/theme.css | 2 + .../vendor/fontawesome/6.5.2/LICENSE.txt | 165 ++ .../vendor/fontawesome/6.5.2/css/all.min.css | 5 + .../vendor/fontawesome/6.5.2/js/all.min.js | 2 + .../6.5.2/js/all.min.js.LICENSE.txt | 5 + .../6.5.2/webfonts/fa-brands-400.ttf | Bin 0 -> 209128 bytes .../6.5.2/webfonts/fa-brands-400.woff2 | Bin 0 -> 117852 bytes .../6.5.2/webfonts/fa-regular-400.ttf | Bin 0 -> 67860 bytes .../6.5.2/webfonts/fa-regular-400.woff2 | Bin 0 -> 25392 bytes .../6.5.2/webfonts/fa-solid-900.ttf | Bin 0 -> 420332 bytes .../6.5.2/webfonts/fa-solid-900.woff2 | Bin 0 -> 156400 bytes .../6.5.2/webfonts/fa-v4compatibility.ttf | Bin 0 -> 10832 bytes .../6.5.2/webfonts/fa-v4compatibility.woff2 | Bin 0 -> 4792 bytes spec/_static/webpack-macros.html | 31 + spec/algorithms/algorithms.html | 496 ++++ spec/algorithms/copy.html | 580 +++++ spec/algorithms/exclusive_scan.html | 590 +++++ spec/algorithms/fill.html | 620 +++++ spec/algorithms/for_each.html | 585 +++++ spec/algorithms/inclusive_scan.html | 620 +++++ spec/algorithms/iota.html | 571 +++++ spec/algorithms/reduce.html | 687 ++++++ spec/algorithms/sort.html | 553 +++++ spec/algorithms/sp_matrix_gemm.html | 523 +++++ spec/algorithms/sp_matrix_gemv.html | 551 +++++ spec/algorithms/transform.html | 601 +++++ spec/arch.html | 477 ++++ spec/concepts.html | 740 ++++++ spec/containers/containers.html | 486 ++++ .../mp_distributed_dense_matrix.html | 512 +++++ spec/containers/mp_distributed_vector.html | 587 +++++ spec/containers/sp_dense_matrix.html | 518 +++++ spec/containers/sp_distributed_vector.html | 523 +++++ spec/containers/sp_sparse_matrix.html | 518 +++++ spec/genindex.html | 469 ++++ spec/include/distributed-ranges.html | 478 ++++ spec/index.html | 514 +++++ spec/intro.html | 480 ++++ spec/objects.inv | Bin 0 -> 7591 bytes spec/search.html | 390 ++++ spec/searchindex.js | 1 + spec/views/all_view.html | 507 +++++ spec/views/counted_view.html | 507 +++++ spec/views/drop_view.html | 507 +++++ spec/views/iota_view.html | 507 +++++ spec/views/sliding_view.html | 518 +++++ spec/views/take_view.html | 507 +++++ spec/views/transform_view.html | 507 +++++ spec/views/views.html | 487 ++++ spec/views/zip_view.html | 555 +++++ src-python/drbench/drbench.egg-info/PKG-INFO | 4 + .../drbench/drbench.egg-info/SOURCES.txt | 12 + .../drbench.egg-info/dependency_links.txt | 1 + .../drbench/drbench.egg-info/entry_points.txt | 2 + .../drbench/drbench.egg-info/requires.txt | 6 + .../drbench/drbench.egg-info/top_level.txt | 1 + 1444 files changed, 96610 insertions(+) create mode 100644 .github/dependabot.yml create mode 100644 .github/workflows/ci.yml create mode 100644 .nojekyll create mode 100644 .pre-commit-config.yaml create mode 100644 bench/devcloud/dr-bench-05ae8920514c49deb09dee3d94648622.json create mode 100644 bench/devcloud/dr-bench-0f326341f9d94ba29646527008f9397e.json create mode 100644 bench/devcloud/dr-bench-1255d1c30769449395d041799418a44b.json create mode 100644 bench/devcloud/dr-bench-1931eb5d1d374795a0001e0bd3593fae.json create mode 100644 bench/devcloud/dr-bench-1bbc05c89b3142469b1ed34d9e5c57f8.json create mode 100644 bench/devcloud/dr-bench-27a255afd4df46ddbdc52d067feeb958.json create mode 100644 bench/devcloud/dr-bench-3b67dab7a52d48728f3ac9b1c65be965.json create mode 100644 bench/devcloud/dr-bench-3dad8cd026d44af98eb20bf90595f93c.json create mode 100644 bench/devcloud/dr-bench-47a547f0f82c4c6e881cc3d9b04de02f.json create mode 100644 bench/devcloud/dr-bench-4b2a5a23ba8945cb8e27660743b2b01c.json create mode 100644 bench/devcloud/dr-bench-4d94d50f10a5440d9e71127a18ccb37f.json create mode 100644 bench/devcloud/dr-bench-504b793dae8f487da53338f4c4375989.json create mode 100644 bench/devcloud/dr-bench-5855e60fafe3432297c3267e8844b853.json create mode 100644 bench/devcloud/dr-bench-60577e0e78d947eea41d9663ea0e3669.json create mode 100644 bench/devcloud/dr-bench-6250900504ea40ecaedc31dd2cb5825f.json create mode 100644 bench/devcloud/dr-bench-66fbf2f1650d4e3f925b6bf0688b7b84.json create mode 100644 bench/devcloud/dr-bench-7800cee608ec44d699f9a435db3e65f1.json create mode 100644 bench/devcloud/dr-bench-7ca861e4d8f5486aa6185066cfd7d4b0.json create mode 100644 bench/devcloud/dr-bench-9736fe26172840069fdc275df840cbf9.json create mode 100644 bench/devcloud/dr-bench-982c908512be4f42896b0f5b4890b926.json create mode 100644 bench/devcloud/dr-bench-9bcab8ff6d954174bfc465788bba33e9.json create mode 100644 bench/devcloud/dr-bench-9d00be9dc79741cbbfb02f0aaf274312.json create mode 100644 bench/devcloud/dr-bench-BlackScholes-CPU.csv create mode 100644 bench/devcloud/dr-bench-BlackScholes-CPU.png create mode 100644 bench/devcloud/dr-bench-BlackScholes-GPU.csv create mode 100644 bench/devcloud/dr-bench-BlackScholes-GPU.png create mode 100644 bench/devcloud/dr-bench-DotProduct-CPU.csv create mode 100644 bench/devcloud/dr-bench-DotProduct-CPU.png create mode 100644 bench/devcloud/dr-bench-DotProduct-GPU.csv create mode 100644 bench/devcloud/dr-bench-DotProduct-GPU.png create mode 100644 bench/devcloud/dr-bench-Gemm-GPU.csv create mode 100644 bench/devcloud/dr-bench-Gemm-GPU.png create mode 100644 bench/devcloud/dr-bench-Inclusive_Scan-CPU.csv create mode 100644 bench/devcloud/dr-bench-Inclusive_Scan-CPU.png create mode 100644 bench/devcloud/dr-bench-Inclusive_Scan-GPU.csv create mode 100644 bench/devcloud/dr-bench-Inclusive_Scan-GPU.png create mode 100644 bench/devcloud/dr-bench-Reduce-CPU.csv create mode 100644 bench/devcloud/dr-bench-Reduce-CPU.png create mode 100644 bench/devcloud/dr-bench-Reduce-GPU.csv create mode 100644 bench/devcloud/dr-bench-Reduce-GPU.png create mode 100644 bench/devcloud/dr-bench-Sort-GPU.csv create mode 100644 bench/devcloud/dr-bench-Sort-GPU.png create mode 100644 bench/devcloud/dr-bench-Stencil2D-CPU.csv create mode 100644 bench/devcloud/dr-bench-Stencil2D-CPU.png create mode 100644 bench/devcloud/dr-bench-Stencil2D-GPU.csv create mode 100644 bench/devcloud/dr-bench-Stencil2D-GPU.png create mode 100644 bench/devcloud/dr-bench-Stream_Add-CPU.csv create mode 100644 bench/devcloud/dr-bench-Stream_Add-CPU.png create mode 100644 bench/devcloud/dr-bench-Stream_Add-GPU.csv create mode 100644 bench/devcloud/dr-bench-Stream_Add-GPU.png create mode 100644 bench/devcloud/dr-bench-Stream_Copy-CPU.csv create mode 100644 bench/devcloud/dr-bench-Stream_Copy-CPU.png create mode 100644 bench/devcloud/dr-bench-Stream_Copy-GPU.csv create mode 100644 bench/devcloud/dr-bench-Stream_Copy-GPU.png create mode 100644 bench/devcloud/dr-bench-Stream_Scale-CPU.csv create mode 100644 bench/devcloud/dr-bench-Stream_Scale-CPU.png create mode 100644 bench/devcloud/dr-bench-Stream_Scale-GPU.csv create mode 100644 bench/devcloud/dr-bench-Stream_Scale-GPU.png create mode 100644 bench/devcloud/dr-bench-Stream_Triad-CPU.csv create mode 100644 bench/devcloud/dr-bench-Stream_Triad-CPU.png create mode 100644 bench/devcloud/dr-bench-Stream_Triad-GPU.csv create mode 100644 bench/devcloud/dr-bench-Stream_Triad-GPU.png create mode 100644 bench/devcloud/dr-bench-WaveEquation-CPU.csv create mode 100644 bench/devcloud/dr-bench-WaveEquation-CPU.png create mode 100644 bench/devcloud/dr-bench-WaveEquation-GPU.csv create mode 100644 bench/devcloud/dr-bench-WaveEquation-GPU.png create mode 100644 bench/devcloud/dr-bench-a30b94d525ae4cee8aedceedddca35ce.json create mode 100644 bench/devcloud/dr-bench-a3f4821ec91c4d4c8ae2603dd15b4f11.json create mode 100644 bench/devcloud/dr-bench-cfc91caadee849f29be3cb9102189519.json create mode 100644 bench/devcloud/dr-bench-d0c2ccea5b0c459ebde79e341a1d68d8.json create mode 100644 bench/devcloud/dr-bench-dc6b76bd54834580a8fccdc353f49de1.json create mode 100644 bench/devcloud/dr-bench-ee56a4c8add24f4b9b6777eb1a3db39b.json create mode 100644 bench/devcloud/dr-bench-f4eaa5a34ce94d35ab3bd5bdcf44ed6b.json create mode 100644 bench/devcloud/dr-bench-fd64e9be192a4f1687d8136fe6bc4640.json create mode 100644 doxygen/algorithms_8hpp_source.html create mode 100644 doxygen/alignment_8hpp_source.html create mode 100644 doxygen/allocator_8hpp_source.html create mode 100644 doxygen/allocators_8hpp_source.html create mode 100644 doxygen/annotated.html create mode 100644 doxygen/bc_s.png create mode 100644 doxygen/bc_sd.png create mode 100644 doxygen/bdwn.png create mode 100644 doxygen/classdr_1_1____detail_1_1direct__iterator-members.html create mode 100644 doxygen/classdr_1_1____detail_1_1direct__iterator.html create mode 100644 doxygen/classdr_1_1____detail_1_1enumerate__adapter__closure-members.html create mode 100644 doxygen/classdr_1_1____detail_1_1enumerate__adapter__closure.html create mode 100644 doxygen/classdr_1_1____detail_1_1enumerate__fn__-members.html create mode 100644 doxygen/classdr_1_1____detail_1_1enumerate__fn__.html create mode 100644 doxygen/classdr_1_1____detail_1_1event-members.html create mode 100644 doxygen/classdr_1_1____detail_1_1event.html create mode 100644 doxygen/classdr_1_1____detail_1_1mdspan__iter__accessor-members.html create mode 100644 doxygen/classdr_1_1____detail_1_1mdspan__iter__accessor.html create mode 100644 doxygen/classdr_1_1____detail_1_1mdtranspose-members.html create mode 100644 doxygen/classdr_1_1____detail_1_1mdtranspose.html create mode 100644 doxygen/classdr_1_1____detail_1_1mdtranspose__coll__graph.map create mode 100644 doxygen/classdr_1_1____detail_1_1mdtranspose__coll__graph.md5 create mode 100644 doxygen/classdr_1_1____detail_1_1mdtranspose__coll__graph.png create mode 100644 doxygen/classdr_1_1____detail_1_1mdtranspose__inherit__graph.map create mode 100644 doxygen/classdr_1_1____detail_1_1mdtranspose__inherit__graph.md5 create mode 100644 doxygen/classdr_1_1____detail_1_1mdtranspose__inherit__graph.png create mode 100644 doxygen/classdr_1_1____detail_1_1owning__view-members.html create mode 100644 doxygen/classdr_1_1____detail_1_1owning__view.html create mode 100644 doxygen/classdr_1_1____detail_1_1owning__view__coll__graph.map create mode 100644 doxygen/classdr_1_1____detail_1_1owning__view__coll__graph.md5 create mode 100644 doxygen/classdr_1_1____detail_1_1owning__view__coll__graph.png create mode 100644 doxygen/classdr_1_1____detail_1_1owning__view__inherit__graph.map create mode 100644 doxygen/classdr_1_1____detail_1_1owning__view__inherit__graph.md5 create mode 100644 doxygen/classdr_1_1____detail_1_1owning__view__inherit__graph.png create mode 100644 doxygen/classdr_1_1communicator-members.html create mode 100644 doxygen/classdr_1_1communicator.html create mode 100644 doxygen/classdr_1_1index-members.html create mode 100644 doxygen/classdr_1_1index.html create mode 100644 doxygen/classdr_1_1iterator__adaptor-members.html create mode 100644 doxygen/classdr_1_1iterator__adaptor.html create mode 100644 doxygen/classdr_1_1logger-members.html create mode 100644 doxygen/classdr_1_1logger.html create mode 100644 doxygen/classdr_1_1mp_1_1MpiBackend-members.html create mode 100644 doxygen/classdr_1_1mp_1_1MpiBackend.html create mode 100644 doxygen/classdr_1_1mp_1_1____detail_1_1allocator-members.html create mode 100644 doxygen/classdr_1_1mp_1_1____detail_1_1allocator.html create mode 100644 doxygen/classdr_1_1mp_1_1____detail_1_1buffer-members.html create mode 100644 doxygen/classdr_1_1mp_1_1____detail_1_1buffer.html create mode 100644 doxygen/classdr_1_1mp_1_1____detail_1_1md__segment-members.html create mode 100644 doxygen/classdr_1_1mp_1_1____detail_1_1md__segment.html create mode 100644 doxygen/classdr_1_1mp_1_1____detail_1_1md__segment__coll__graph.map create mode 100644 doxygen/classdr_1_1mp_1_1____detail_1_1md__segment__coll__graph.md5 create mode 100644 doxygen/classdr_1_1mp_1_1____detail_1_1md__segment__coll__graph.png create mode 100644 doxygen/classdr_1_1mp_1_1____detail_1_1md__segment__inherit__graph.map create mode 100644 doxygen/classdr_1_1mp_1_1____detail_1_1md__segment__inherit__graph.md5 create mode 100644 doxygen/classdr_1_1mp_1_1____detail_1_1md__segment__inherit__graph.png create mode 100644 doxygen/classdr_1_1mp_1_1____detail_1_1mdsub__segment-members.html create mode 100644 doxygen/classdr_1_1mp_1_1____detail_1_1mdsub__segment.html create mode 100644 doxygen/classdr_1_1mp_1_1____detail_1_1mdsub__segment__coll__graph.map create mode 100644 doxygen/classdr_1_1mp_1_1____detail_1_1mdsub__segment__coll__graph.md5 create mode 100644 doxygen/classdr_1_1mp_1_1____detail_1_1mdsub__segment__coll__graph.png create mode 100644 doxygen/classdr_1_1mp_1_1____detail_1_1mdsub__segment__inherit__graph.map create mode 100644 doxygen/classdr_1_1mp_1_1____detail_1_1mdsub__segment__inherit__graph.md5 create mode 100644 doxygen/classdr_1_1mp_1_1____detail_1_1mdsub__segment__inherit__graph.png create mode 100644 doxygen/classdr_1_1mp_1_1____detail_1_1tmp__buffer-members.html create mode 100644 doxygen/classdr_1_1mp_1_1____detail_1_1tmp__buffer.html create mode 100644 doxygen/classdr_1_1mp_1_1count__fn__-members.html create mode 100644 doxygen/classdr_1_1mp_1_1count__fn__.html create mode 100644 doxygen/classdr_1_1mp_1_1count__if__fn__-members.html create mode 100644 doxygen/classdr_1_1mp_1_1count__if__fn__.html create mode 100644 doxygen/classdr_1_1mp_1_1distributed__mdarray-members.html create mode 100644 doxygen/classdr_1_1mp_1_1distributed__mdarray.html create mode 100644 doxygen/classdr_1_1mp_1_1distributed__vector-members.html create mode 100644 doxygen/classdr_1_1mp_1_1distributed__vector.html create mode 100644 doxygen/classdr_1_1mp_1_1distributed__vector_1_1iterator-members.html create mode 100644 doxygen/classdr_1_1mp_1_1distributed__vector_1_1iterator.html create mode 100644 doxygen/classdr_1_1mp_1_1dv__segment-members.html create mode 100644 doxygen/classdr_1_1mp_1_1dv__segment.html create mode 100644 doxygen/classdr_1_1mp_1_1dv__segment__iterator-members.html create mode 100644 doxygen/classdr_1_1mp_1_1dv__segment__iterator.html create mode 100644 doxygen/classdr_1_1mp_1_1dv__segment__reference-members.html create mode 100644 doxygen/classdr_1_1mp_1_1dv__segment__reference.html create mode 100644 doxygen/classdr_1_1mp_1_1halo__impl-members.html create mode 100644 doxygen/classdr_1_1mp_1_1halo__impl.html create mode 100644 doxygen/classdr_1_1mp_1_1halo__impl__coll__graph.map create mode 100644 doxygen/classdr_1_1mp_1_1halo__impl__coll__graph.md5 create mode 100644 doxygen/classdr_1_1mp_1_1halo__impl__coll__graph.png create mode 100644 doxygen/classdr_1_1mp_1_1halo__impl__inherit__graph.map create mode 100644 doxygen/classdr_1_1mp_1_1halo__impl__inherit__graph.md5 create mode 100644 doxygen/classdr_1_1mp_1_1halo__impl__inherit__graph.png create mode 100644 doxygen/classdr_1_1mp_1_1index__group-members.html create mode 100644 doxygen/classdr_1_1mp_1_1index__group.html create mode 100644 doxygen/classdr_1_1mp_1_1segmented__view-members.html create mode 100644 doxygen/classdr_1_1mp_1_1segmented__view.html create mode 100644 doxygen/classdr_1_1mp_1_1segmented__view__coll__graph.map create mode 100644 doxygen/classdr_1_1mp_1_1segmented__view__coll__graph.md5 create mode 100644 doxygen/classdr_1_1mp_1_1segmented__view__coll__graph.png create mode 100644 doxygen/classdr_1_1mp_1_1segmented__view__inherit__graph.map create mode 100644 doxygen/classdr_1_1mp_1_1segmented__view__inherit__graph.md5 create mode 100644 doxygen/classdr_1_1mp_1_1segmented__view__inherit__graph.png create mode 100644 doxygen/classdr_1_1mp_1_1segmented__view__iterator-members.html create mode 100644 doxygen/classdr_1_1mp_1_1segmented__view__iterator.html create mode 100644 doxygen/classdr_1_1mp_1_1span__group-members.html create mode 100644 doxygen/classdr_1_1mp_1_1span__group.html create mode 100644 doxygen/classdr_1_1mp_1_1span__halo-members.html create mode 100644 doxygen/classdr_1_1mp_1_1span__halo.html create mode 100644 doxygen/classdr_1_1mp_1_1span__halo__coll__graph.map create mode 100644 doxygen/classdr_1_1mp_1_1span__halo__coll__graph.md5 create mode 100644 doxygen/classdr_1_1mp_1_1span__halo__coll__graph.png create mode 100644 doxygen/classdr_1_1mp_1_1span__halo__inherit__graph.map create mode 100644 doxygen/classdr_1_1mp_1_1span__halo__inherit__graph.md5 create mode 100644 doxygen/classdr_1_1mp_1_1span__halo__inherit__graph.png create mode 100644 doxygen/classdr_1_1mp_1_1subrange-members.html create mode 100644 doxygen/classdr_1_1mp_1_1subrange.html create mode 100644 doxygen/classdr_1_1mp_1_1subrange__coll__graph.map create mode 100644 doxygen/classdr_1_1mp_1_1subrange__coll__graph.md5 create mode 100644 doxygen/classdr_1_1mp_1_1subrange__coll__graph.png create mode 100644 doxygen/classdr_1_1mp_1_1subrange__inherit__graph.map create mode 100644 doxygen/classdr_1_1mp_1_1subrange__inherit__graph.md5 create mode 100644 doxygen/classdr_1_1mp_1_1subrange__inherit__graph.png create mode 100644 doxygen/classdr_1_1mp_1_1subrange__iterator-members.html create mode 100644 doxygen/classdr_1_1mp_1_1subrange__iterator.html create mode 100644 doxygen/classdr_1_1mp_1_1unstructured__halo-members.html create mode 100644 doxygen/classdr_1_1mp_1_1unstructured__halo.html create mode 100644 doxygen/classdr_1_1mp_1_1unstructured__halo__coll__graph.map create mode 100644 doxygen/classdr_1_1mp_1_1unstructured__halo__coll__graph.md5 create mode 100644 doxygen/classdr_1_1mp_1_1unstructured__halo__coll__graph.png create mode 100644 doxygen/classdr_1_1mp_1_1unstructured__halo__inherit__graph.map create mode 100644 doxygen/classdr_1_1mp_1_1unstructured__halo__inherit__graph.md5 create mode 100644 doxygen/classdr_1_1mp_1_1unstructured__halo__inherit__graph.png create mode 100644 doxygen/classdr_1_1mp_1_1views_1_1enumerate__adapter__closure-members.html create mode 100644 doxygen/classdr_1_1mp_1_1views_1_1enumerate__adapter__closure.html create mode 100644 doxygen/classdr_1_1mp_1_1views_1_1enumerate__fn__-members.html create mode 100644 doxygen/classdr_1_1mp_1_1views_1_1enumerate__fn__.html create mode 100644 doxygen/classdr_1_1mp_1_1views_1_1mdspan__adapter__closure-members.html create mode 100644 doxygen/classdr_1_1mp_1_1views_1_1mdspan__adapter__closure.html create mode 100644 doxygen/classdr_1_1mp_1_1views_1_1mdspan__fn__-members.html create mode 100644 doxygen/classdr_1_1mp_1_1views_1_1mdspan__fn__.html create mode 100644 doxygen/classdr_1_1mp_1_1views_1_1submdspan__adapter__closure-members.html create mode 100644 doxygen/classdr_1_1mp_1_1views_1_1submdspan__adapter__closure.html create mode 100644 doxygen/classdr_1_1mp_1_1views_1_1submdspan__fn__-members.html create mode 100644 doxygen/classdr_1_1mp_1_1views_1_1submdspan__fn__.html create mode 100644 doxygen/classdr_1_1mp_1_1zip__iterator-members.html create mode 100644 doxygen/classdr_1_1mp_1_1zip__iterator.html create mode 100644 doxygen/classdr_1_1mp_1_1zip__view-members.html create mode 100644 doxygen/classdr_1_1mp_1_1zip__view.html create mode 100644 doxygen/classdr_1_1mp_1_1zip__view__coll__graph.map create mode 100644 doxygen/classdr_1_1mp_1_1zip__view__coll__graph.md5 create mode 100644 doxygen/classdr_1_1mp_1_1zip__view__coll__graph.png create mode 100644 doxygen/classdr_1_1mp_1_1zip__view__inherit__graph.map create mode 100644 doxygen/classdr_1_1mp_1_1zip__view__inherit__graph.md5 create mode 100644 doxygen/classdr_1_1mp_1_1zip__view__inherit__graph.png create mode 100644 doxygen/classdr_1_1normal__distributed__iterator__accessor-members.html create mode 100644 doxygen/classdr_1_1normal__distributed__iterator__accessor.html create mode 100644 doxygen/classdr_1_1remote__subrange-members.html create mode 100644 doxygen/classdr_1_1remote__subrange.html create mode 100644 doxygen/classdr_1_1remote__subrange__coll__graph.map create mode 100644 doxygen/classdr_1_1remote__subrange__coll__graph.md5 create mode 100644 doxygen/classdr_1_1remote__subrange__coll__graph.png create mode 100644 doxygen/classdr_1_1remote__subrange__inherit__graph.map create mode 100644 doxygen/classdr_1_1remote__subrange__inherit__graph.md5 create mode 100644 doxygen/classdr_1_1remote__subrange__inherit__graph.png create mode 100644 doxygen/classdr_1_1rma__window-members.html create mode 100644 doxygen/classdr_1_1rma__window.html create mode 100644 doxygen/classdr_1_1sp_1_1____detail_1_1coo__matrix-members.html create mode 100644 doxygen/classdr_1_1sp_1_1____detail_1_1coo__matrix.html create mode 100644 doxygen/classdr_1_1sp_1_1block__cyclic-members.html create mode 100644 doxygen/classdr_1_1sp_1_1block__cyclic.html create mode 100644 doxygen/classdr_1_1sp_1_1block__cyclic__coll__graph.map create mode 100644 doxygen/classdr_1_1sp_1_1block__cyclic__coll__graph.md5 create mode 100644 doxygen/classdr_1_1sp_1_1block__cyclic__coll__graph.png create mode 100644 doxygen/classdr_1_1sp_1_1block__cyclic__inherit__graph.map create mode 100644 doxygen/classdr_1_1sp_1_1block__cyclic__inherit__graph.md5 create mode 100644 doxygen/classdr_1_1sp_1_1block__cyclic__inherit__graph.png create mode 100644 doxygen/classdr_1_1sp_1_1buffered__allocator-members.html create mode 100644 doxygen/classdr_1_1sp_1_1buffered__allocator.html create mode 100644 doxygen/classdr_1_1sp_1_1csr__matrix__view-members.html create mode 100644 doxygen/classdr_1_1sp_1_1csr__matrix__view.html create mode 100644 doxygen/classdr_1_1sp_1_1csr__matrix__view__accessor-members.html create mode 100644 doxygen/classdr_1_1sp_1_1csr__matrix__view__accessor.html create mode 100644 doxygen/classdr_1_1sp_1_1csr__matrix__view__coll__graph.map create mode 100644 doxygen/classdr_1_1sp_1_1csr__matrix__view__coll__graph.md5 create mode 100644 doxygen/classdr_1_1sp_1_1csr__matrix__view__coll__graph.png create mode 100644 doxygen/classdr_1_1sp_1_1csr__matrix__view__inherit__graph.map create mode 100644 doxygen/classdr_1_1sp_1_1csr__matrix__view__inherit__graph.md5 create mode 100644 doxygen/classdr_1_1sp_1_1csr__matrix__view__inherit__graph.png create mode 100644 doxygen/classdr_1_1sp_1_1dense__matrix-members.html create mode 100644 doxygen/classdr_1_1sp_1_1dense__matrix.html create mode 100644 doxygen/classdr_1_1sp_1_1dense__matrix__accessor-members.html create mode 100644 doxygen/classdr_1_1sp_1_1dense__matrix__accessor.html create mode 100644 doxygen/classdr_1_1sp_1_1dense__matrix__column__accessor-members.html create mode 100644 doxygen/classdr_1_1sp_1_1dense__matrix__column__accessor.html create mode 100644 doxygen/classdr_1_1sp_1_1dense__matrix__column__view-members.html create mode 100644 doxygen/classdr_1_1sp_1_1dense__matrix__column__view.html create mode 100644 doxygen/classdr_1_1sp_1_1dense__matrix__column__view__coll__graph.map create mode 100644 doxygen/classdr_1_1sp_1_1dense__matrix__column__view__coll__graph.md5 create mode 100644 doxygen/classdr_1_1sp_1_1dense__matrix__column__view__coll__graph.png create mode 100644 doxygen/classdr_1_1sp_1_1dense__matrix__row__accessor-members.html create mode 100644 doxygen/classdr_1_1sp_1_1dense__matrix__row__accessor.html create mode 100644 doxygen/classdr_1_1sp_1_1dense__matrix__row__view-members.html create mode 100644 doxygen/classdr_1_1sp_1_1dense__matrix__row__view.html create mode 100644 doxygen/classdr_1_1sp_1_1dense__matrix__row__view__coll__graph.map create mode 100644 doxygen/classdr_1_1sp_1_1dense__matrix__row__view__coll__graph.md5 create mode 100644 doxygen/classdr_1_1sp_1_1dense__matrix__row__view__coll__graph.png create mode 100644 doxygen/classdr_1_1sp_1_1dense__matrix__view-members.html create mode 100644 doxygen/classdr_1_1sp_1_1dense__matrix__view.html create mode 100644 doxygen/classdr_1_1sp_1_1dense__matrix__view__coll__graph.map create mode 100644 doxygen/classdr_1_1sp_1_1dense__matrix__view__coll__graph.md5 create mode 100644 doxygen/classdr_1_1sp_1_1dense__matrix__view__coll__graph.png create mode 100644 doxygen/classdr_1_1sp_1_1dense__matrix__view__inherit__graph.map create mode 100644 doxygen/classdr_1_1sp_1_1dense__matrix__view__inherit__graph.md5 create mode 100644 doxygen/classdr_1_1sp_1_1dense__matrix__view__inherit__graph.png create mode 100644 doxygen/classdr_1_1sp_1_1device__allocator-members.html create mode 100644 doxygen/classdr_1_1sp_1_1device__allocator.html create mode 100644 doxygen/classdr_1_1sp_1_1device__ptr-members.html create mode 100644 doxygen/classdr_1_1sp_1_1device__ptr.html create mode 100644 doxygen/classdr_1_1sp_1_1device__ref-members.html create mode 100644 doxygen/classdr_1_1sp_1_1device__ref.html create mode 100644 doxygen/classdr_1_1sp_1_1device__span-members.html create mode 100644 doxygen/classdr_1_1sp_1_1device__span.html create mode 100644 doxygen/classdr_1_1sp_1_1device__span__coll__graph.map create mode 100644 doxygen/classdr_1_1sp_1_1device__span__coll__graph.md5 create mode 100644 doxygen/classdr_1_1sp_1_1device__span__coll__graph.png create mode 100644 doxygen/classdr_1_1sp_1_1device__span__inherit__graph.map create mode 100644 doxygen/classdr_1_1sp_1_1device__span__inherit__graph.md5 create mode 100644 doxygen/classdr_1_1sp_1_1device__span__inherit__graph.png create mode 100644 doxygen/classdr_1_1sp_1_1device__vector-members.html create mode 100644 doxygen/classdr_1_1sp_1_1device__vector.html create mode 100644 doxygen/classdr_1_1sp_1_1device__vector__coll__graph.map create mode 100644 doxygen/classdr_1_1sp_1_1device__vector__coll__graph.md5 create mode 100644 doxygen/classdr_1_1sp_1_1device__vector__coll__graph.png create mode 100644 doxygen/classdr_1_1sp_1_1device__vector__inherit__graph.map create mode 100644 doxygen/classdr_1_1sp_1_1device__vector__inherit__graph.md5 create mode 100644 doxygen/classdr_1_1sp_1_1device__vector__inherit__graph.png create mode 100644 doxygen/classdr_1_1sp_1_1distributed__dense__matrix-members.html create mode 100644 doxygen/classdr_1_1sp_1_1distributed__dense__matrix.html create mode 100644 doxygen/classdr_1_1sp_1_1distributed__dense__matrix__accessor-members.html create mode 100644 doxygen/classdr_1_1sp_1_1distributed__dense__matrix__accessor.html create mode 100644 doxygen/classdr_1_1sp_1_1distributed__range__accessor-members.html create mode 100644 doxygen/classdr_1_1sp_1_1distributed__range__accessor.html create mode 100644 doxygen/classdr_1_1sp_1_1distributed__span-members.html create mode 100644 doxygen/classdr_1_1sp_1_1distributed__span.html create mode 100644 doxygen/classdr_1_1sp_1_1distributed__span__accessor-members.html create mode 100644 doxygen/classdr_1_1sp_1_1distributed__span__accessor.html create mode 100644 doxygen/classdr_1_1sp_1_1distributed__span__coll__graph.map create mode 100644 doxygen/classdr_1_1sp_1_1distributed__span__coll__graph.md5 create mode 100644 doxygen/classdr_1_1sp_1_1distributed__span__coll__graph.png create mode 100644 doxygen/classdr_1_1sp_1_1distributed__span__inherit__graph.map create mode 100644 doxygen/classdr_1_1sp_1_1distributed__span__inherit__graph.md5 create mode 100644 doxygen/classdr_1_1sp_1_1distributed__span__inherit__graph.png create mode 100644 doxygen/classdr_1_1sp_1_1distributed__vector__accessor-members.html create mode 100644 doxygen/classdr_1_1sp_1_1distributed__vector__accessor.html create mode 100644 doxygen/classdr_1_1sp_1_1duplicated__vector-members.html create mode 100644 doxygen/classdr_1_1sp_1_1duplicated__vector.html create mode 100644 doxygen/classdr_1_1sp_1_1future-members.html create mode 100644 doxygen/classdr_1_1sp_1_1future.html create mode 100644 doxygen/classdr_1_1sp_1_1id-members.html create mode 100644 doxygen/classdr_1_1sp_1_1id.html create mode 100644 doxygen/classdr_1_1sp_1_1matrix__entry-members.html create mode 100644 doxygen/classdr_1_1sp_1_1matrix__entry.html create mode 100644 doxygen/classdr_1_1sp_1_1matrix__partition-members.html create mode 100644 doxygen/classdr_1_1sp_1_1matrix__partition.html create mode 100644 doxygen/classdr_1_1sp_1_1matrix__partition__inherit__graph.map create mode 100644 doxygen/classdr_1_1sp_1_1matrix__partition__inherit__graph.md5 create mode 100644 doxygen/classdr_1_1sp_1_1matrix__partition__inherit__graph.png create mode 100644 doxygen/classdr_1_1sp_1_1matrix__ref-members.html create mode 100644 doxygen/classdr_1_1sp_1_1matrix__ref.html create mode 100644 doxygen/classdr_1_1sp_1_1segment__range-members.html create mode 100644 doxygen/classdr_1_1sp_1_1segment__range.html create mode 100644 doxygen/classdr_1_1sp_1_1segment__range__accessor-members.html create mode 100644 doxygen/classdr_1_1sp_1_1segment__range__accessor.html create mode 100644 doxygen/classdr_1_1sp_1_1span-members.html create mode 100644 doxygen/classdr_1_1sp_1_1span.html create mode 100644 doxygen/classdr_1_1sp_1_1span__coll__graph.map create mode 100644 doxygen/classdr_1_1sp_1_1span__coll__graph.md5 create mode 100644 doxygen/classdr_1_1sp_1_1span__coll__graph.png create mode 100644 doxygen/classdr_1_1sp_1_1span__inherit__graph.map create mode 100644 doxygen/classdr_1_1sp_1_1span__inherit__graph.md5 create mode 100644 doxygen/classdr_1_1sp_1_1span__inherit__graph.png create mode 100644 doxygen/classdr_1_1sp_1_1sparse__matrix-members.html create mode 100644 doxygen/classdr_1_1sp_1_1sparse__matrix.html create mode 100644 doxygen/classdr_1_1sp_1_1vector-members.html create mode 100644 doxygen/classdr_1_1sp_1_1vector.html create mode 100644 doxygen/classdr_1_1sp_1_1views_1_1enumerate__adapter__closure-members.html create mode 100644 doxygen/classdr_1_1sp_1_1views_1_1enumerate__adapter__closure.html create mode 100644 doxygen/classdr_1_1sp_1_1views_1_1enumerate__fn__-members.html create mode 100644 doxygen/classdr_1_1sp_1_1views_1_1enumerate__fn__.html create mode 100644 doxygen/classdr_1_1sp_1_1views_1_1slice__adaptor__closure-members.html create mode 100644 doxygen/classdr_1_1sp_1_1views_1_1slice__adaptor__closure.html create mode 100644 doxygen/classdr_1_1sp_1_1zip__accessor-members.html create mode 100644 doxygen/classdr_1_1sp_1_1zip__accessor.html create mode 100644 doxygen/classdr_1_1sp_1_1zip__view-members.html create mode 100644 doxygen/classdr_1_1sp_1_1zip__view.html create mode 100644 doxygen/classdr_1_1sp_1_1zip__view__coll__graph.map create mode 100644 doxygen/classdr_1_1sp_1_1zip__view__coll__graph.md5 create mode 100644 doxygen/classdr_1_1sp_1_1zip__view__coll__graph.png create mode 100644 doxygen/classdr_1_1sp_1_1zip__view__inherit__graph.map create mode 100644 doxygen/classdr_1_1sp_1_1zip__view__inherit__graph.md5 create mode 100644 doxygen/classdr_1_1sp_1_1zip__view__inherit__graph.png create mode 100644 doxygen/classdr_1_1timer-members.html create mode 100644 doxygen/classdr_1_1timer.html create mode 100644 doxygen/classdr_1_1transform__iterator-members.html create mode 100644 doxygen/classdr_1_1transform__iterator.html create mode 100644 doxygen/classdr_1_1transform__view-members.html create mode 100644 doxygen/classdr_1_1transform__view.html create mode 100644 doxygen/classdr_1_1transform__view__coll__graph.map create mode 100644 doxygen/classdr_1_1transform__view__coll__graph.md5 create mode 100644 doxygen/classdr_1_1transform__view__coll__graph.png create mode 100644 doxygen/classdr_1_1transform__view__inherit__graph.map create mode 100644 doxygen/classdr_1_1transform__view__inherit__graph.md5 create mode 100644 doxygen/classdr_1_1transform__view__inherit__graph.png create mode 100644 doxygen/classdr_1_1views_1_1transform__adapter__closure-members.html create mode 100644 doxygen/classdr_1_1views_1_1transform__adapter__closure.html create mode 100644 doxygen/classdr_1_1views_1_1transform__fn__-members.html create mode 100644 doxygen/classdr_1_1views_1_1transform__fn__.html create mode 100644 doxygen/classes.html create mode 100644 doxygen/closed.png create mode 100644 doxygen/common__support_8hpp_source.html create mode 100644 doxygen/communicator_8hpp_source.html create mode 100644 doxygen/conceptdr_1_1TupleLike.html create mode 100644 doxygen/conceptdr_1_1_0d4_1_1TupleElementGettable.html create mode 100644 doxygen/conceptdr_1_1_0d5_1_1has__segments__method.html create mode 100644 doxygen/conceptdr_1_1____detail_1_1mdarray__like.html create mode 100644 doxygen/conceptdr_1_1____detail_1_1mdspan__like.html create mode 100644 doxygen/conceptdr_1_1distributed__contiguous__iterator.html create mode 100644 doxygen/conceptdr_1_1distributed__contiguous__range.html create mode 100644 doxygen/conceptdr_1_1distributed__iterator.html create mode 100644 doxygen/conceptdr_1_1distributed__mdspan__range.html create mode 100644 doxygen/conceptdr_1_1distributed__range.html create mode 100644 doxygen/conceptdr_1_1mp_1_1____detail_1_1is__distributed.html create mode 100644 doxygen/conceptdr_1_1mp_1_1____detail_1_1one__argument.html create mode 100644 doxygen/conceptdr_1_1mp_1_1____detail_1_1two__arguments.html create mode 100644 doxygen/conceptdr_1_1mp_1_1____detail_1_1zipable.html create mode 100644 doxygen/conceptdr_1_1mp_1_1has__halo__method.html create mode 100644 doxygen/conceptdr_1_1mp_1_1has__segments.html create mode 100644 doxygen/conceptdr_1_1mp_1_1is__mdspan__view.html create mode 100644 doxygen/conceptdr_1_1mp_1_1no__segments.html create mode 100644 doxygen/conceptdr_1_1ranges_1_1_0d14_1_1has__local__adl.html create mode 100644 doxygen/conceptdr_1_1ranges_1_1_0d14_1_1has__rank__adl.html create mode 100644 doxygen/conceptdr_1_1ranges_1_1_0d14_1_1has__rank__method.html create mode 100644 doxygen/conceptdr_1_1ranges_1_1_0d14_1_1has__segments__adl.html create mode 100644 doxygen/conceptdr_1_1ranges_1_1_0d14_1_1has__segments__method.html create mode 100644 doxygen/conceptdr_1_1ranges_1_1_0d14_1_1is__localizable.html create mode 100644 doxygen/conceptdr_1_1ranges_1_1_0d14_1_1is__remote__iterator__shadow__impl__.html create mode 100644 doxygen/conceptdr_1_1ranges_1_1_0d14_1_1iter__has__local__method.html create mode 100644 doxygen/conceptdr_1_1ranges_1_1_0d14_1_1remote__range__shadow__impl__.html create mode 100644 doxygen/conceptdr_1_1ranges_1_1_0d14_1_1segment__has__local__method.html create mode 100644 doxygen/conceptdr_1_1ranges_1_1_0d14_1_1segments__range.html create mode 100644 doxygen/conceptdr_1_1ranges_1_1____detail_1_1has__local.html create mode 100644 doxygen/conceptdr_1_1remote__contiguous__iterator.html create mode 100644 doxygen/conceptdr_1_1remote__contiguous__range.html create mode 100644 doxygen/conceptdr_1_1remote__iterator.html create mode 100644 doxygen/conceptdr_1_1remote__range.html create mode 100644 doxygen/conceptdr_1_1sp_1_1____detail_1_1is__syclmemcopyable.html create mode 100644 doxygen/conceptdr_1_1sp_1_1____detail_1_1sycl__device__selector.html create mode 100644 doxygen/concepts.html create mode 100644 doxygen/concepts_8hpp_source.html create mode 100644 doxygen/containers_2detail_8hpp_source.html create mode 100644 doxygen/coo__matrix_8hpp_source.html create mode 100644 doxygen/count_8hpp_source.html create mode 100644 doxygen/csr__matrix__view_8hpp_source.html create mode 100644 doxygen/dense__column__view_8hpp_source.html create mode 100644 doxygen/dense__matrix_8hpp_source.html create mode 100644 doxygen/dense__matrix__iterator_8hpp_source.html create mode 100644 doxygen/dense__matrix__view_8hpp_source.html create mode 100644 doxygen/dense__row__view_8hpp_source.html create mode 100644 doxygen/detail_2enumerate_8hpp_source.html create mode 100644 doxygen/detail_8hpp_source.html create mode 100644 doxygen/device__ptr_8hpp_source.html create mode 100644 doxygen/device__ref_8hpp_source.html create mode 100644 doxygen/device__span_8hpp_source.html create mode 100644 doxygen/device__vector_8hpp_source.html create mode 100644 doxygen/dir_323acea4eb551240b18003d2e88b28b7.html create mode 100644 doxygen/dir_323acea4eb551240b18003d2e88b28b7_dep.map create mode 100644 doxygen/dir_323acea4eb551240b18003d2e88b28b7_dep.md5 create mode 100644 doxygen/dir_323acea4eb551240b18003d2e88b28b7_dep.png create mode 100644 doxygen/dir_3e0780f9fd691ce6aa718969242efd7f.html create mode 100644 doxygen/dir_3e0780f9fd691ce6aa718969242efd7f_dep.map create mode 100644 doxygen/dir_3e0780f9fd691ce6aa718969242efd7f_dep.md5 create mode 100644 doxygen/dir_3e0780f9fd691ce6aa718969242efd7f_dep.png create mode 100644 doxygen/dir_4c0da47f5488ee935cb4372f760579e2.html create mode 100644 doxygen/dir_4c0da47f5488ee935cb4372f760579e2_dep.map create mode 100644 doxygen/dir_4c0da47f5488ee935cb4372f760579e2_dep.md5 create mode 100644 doxygen/dir_4c0da47f5488ee935cb4372f760579e2_dep.png create mode 100644 doxygen/dir_67824480cd2296306bea79e091fd0853.html create mode 100644 doxygen/dir_67824480cd2296306bea79e091fd0853_dep.map create mode 100644 doxygen/dir_67824480cd2296306bea79e091fd0853_dep.md5 create mode 100644 doxygen/dir_67824480cd2296306bea79e091fd0853_dep.png create mode 100644 doxygen/dir_73601acfd5a2822dd473820b789b56e4.html create mode 100644 doxygen/dir_73601acfd5a2822dd473820b789b56e4_dep.map create mode 100644 doxygen/dir_73601acfd5a2822dd473820b789b56e4_dep.md5 create mode 100644 doxygen/dir_73601acfd5a2822dd473820b789b56e4_dep.png create mode 100644 doxygen/dir_807b56d834975cdfd9fb3d45ae6a652f.html create mode 100644 doxygen/dir_807b56d834975cdfd9fb3d45ae6a652f_dep.map create mode 100644 doxygen/dir_807b56d834975cdfd9fb3d45ae6a652f_dep.md5 create mode 100644 doxygen/dir_807b56d834975cdfd9fb3d45ae6a652f_dep.png create mode 100644 doxygen/dir_85ef099189e791ae40d4c24671336591.html create mode 100644 doxygen/dir_85ef099189e791ae40d4c24671336591_dep.map create mode 100644 doxygen/dir_85ef099189e791ae40d4c24671336591_dep.md5 create mode 100644 doxygen/dir_85ef099189e791ae40d4c24671336591_dep.png create mode 100644 doxygen/dir_8fe29de6e48ccf860dd86ed0735e8a6b.html create mode 100644 doxygen/dir_8fe29de6e48ccf860dd86ed0735e8a6b_dep.map create mode 100644 doxygen/dir_8fe29de6e48ccf860dd86ed0735e8a6b_dep.md5 create mode 100644 doxygen/dir_8fe29de6e48ccf860dd86ed0735e8a6b_dep.png create mode 100644 doxygen/dir_93ccc0855ae179af1c425ecfb8e8a806.html create mode 100644 doxygen/dir_93ccc0855ae179af1c425ecfb8e8a806_dep.map create mode 100644 doxygen/dir_93ccc0855ae179af1c425ecfb8e8a806_dep.md5 create mode 100644 doxygen/dir_93ccc0855ae179af1c425ecfb8e8a806_dep.png create mode 100644 doxygen/dir_99158c7dd822eb1a3c9b7f71ffee20be.html create mode 100644 doxygen/dir_99158c7dd822eb1a3c9b7f71ffee20be_dep.map create mode 100644 doxygen/dir_99158c7dd822eb1a3c9b7f71ffee20be_dep.md5 create mode 100644 doxygen/dir_99158c7dd822eb1a3c9b7f71ffee20be_dep.png create mode 100644 doxygen/dir_a385eca21dc3d8045dcdc4e17916b108.html create mode 100644 doxygen/dir_a385eca21dc3d8045dcdc4e17916b108_dep.map create mode 100644 doxygen/dir_a385eca21dc3d8045dcdc4e17916b108_dep.md5 create mode 100644 doxygen/dir_a385eca21dc3d8045dcdc4e17916b108_dep.png create mode 100644 doxygen/dir_b5fcc441902e4a79b0db31964533269a.html create mode 100644 doxygen/dir_b5fcc441902e4a79b0db31964533269a_dep.map create mode 100644 doxygen/dir_b5fcc441902e4a79b0db31964533269a_dep.md5 create mode 100644 doxygen/dir_b5fcc441902e4a79b0db31964533269a_dep.png create mode 100644 doxygen/dir_cdec69c82820bd8c004958f42c86ecba.html create mode 100644 doxygen/dir_cdec69c82820bd8c004958f42c86ecba_dep.map create mode 100644 doxygen/dir_cdec69c82820bd8c004958f42c86ecba_dep.md5 create mode 100644 doxygen/dir_cdec69c82820bd8c004958f42c86ecba_dep.png create mode 100644 doxygen/dir_d05a7e68d09c14ebc0e6d03c0cf9ec09.html create mode 100644 doxygen/dir_d05a7e68d09c14ebc0e6d03c0cf9ec09_dep.map create mode 100644 doxygen/dir_d05a7e68d09c14ebc0e6d03c0cf9ec09_dep.md5 create mode 100644 doxygen/dir_d05a7e68d09c14ebc0e6d03c0cf9ec09_dep.png create mode 100644 doxygen/dir_d44c64559bbebec7f509842c48db8b23.html create mode 100644 doxygen/dir_d7c528dc6ed0943eef8ba09c0b02746e.html create mode 100644 doxygen/dir_d7c528dc6ed0943eef8ba09c0b02746e_dep.map create mode 100644 doxygen/dir_d7c528dc6ed0943eef8ba09c0b02746e_dep.md5 create mode 100644 doxygen/dir_d7c528dc6ed0943eef8ba09c0b02746e_dep.png create mode 100644 doxygen/dir_d7eb10406d49beed6cff678e21fddf87.html create mode 100644 doxygen/dir_d7eb10406d49beed6cff678e21fddf87_dep.map create mode 100644 doxygen/dir_d7eb10406d49beed6cff678e21fddf87_dep.md5 create mode 100644 doxygen/dir_d7eb10406d49beed6cff678e21fddf87_dep.png create mode 100644 doxygen/dir_fe6a317965919c4163a6bbac6fc7f579.html create mode 100644 doxygen/dir_fe6a317965919c4163a6bbac6fc7f579_dep.map create mode 100644 doxygen/dir_fe6a317965919c4163a6bbac6fc7f579_dep.md5 create mode 100644 doxygen/dir_fe6a317965919c4163a6bbac6fc7f579_dep.png create mode 100644 doxygen/distributed__dense__matrix_8hpp_source.html create mode 100644 doxygen/distributed__mdarray_8hpp_source.html create mode 100644 doxygen/distributed__span_8hpp_source.html create mode 100644 doxygen/distribution_8hpp_source.html create mode 100644 doxygen/doc.png create mode 100644 doxygen/docd.png create mode 100644 doxygen/doxygen.css create mode 100644 doxygen/doxygen.svg create mode 100644 doxygen/duplicated__vector_8hpp_source.html create mode 100644 doxygen/dynsections.js create mode 100644 doxygen/execution__policy_8hpp_source.html create mode 100644 doxygen/files.html create mode 100644 doxygen/folderclosed.png create mode 100644 doxygen/folderopen.png create mode 100644 doxygen/format__shim_8hpp_source.html create mode 100644 doxygen/functions.html create mode 100644 doxygen/functions_func.html create mode 100644 doxygen/future_8hpp_source.html create mode 100644 doxygen/gemm_8hpp_source.html create mode 100644 doxygen/gemv_8hpp_source.html create mode 100644 doxygen/generate__random_8hpp_source.html create mode 100644 doxygen/global_8hpp_source.html create mode 100644 doxygen/graph_legend.html create mode 100644 doxygen/graph_legend.md5 create mode 100644 doxygen/graph_legend.png create mode 100644 doxygen/halo_8hpp_source.html create mode 100644 doxygen/hierarchy.html create mode 100644 doxygen/inclusive__exclusive__scan__impl_8hpp_source.html create mode 100644 doxygen/index.html create mode 100644 doxygen/index_8hpp_source.html create mode 100644 doxygen/inherit_graph_0.map create mode 100644 doxygen/inherit_graph_0.md5 create mode 100644 doxygen/inherit_graph_0.png create mode 100644 doxygen/inherit_graph_1.map create mode 100644 doxygen/inherit_graph_1.md5 create mode 100644 doxygen/inherit_graph_1.png create mode 100644 doxygen/inherit_graph_10.map create mode 100644 doxygen/inherit_graph_10.md5 create mode 100644 doxygen/inherit_graph_10.png create mode 100644 doxygen/inherit_graph_100.map create mode 100644 doxygen/inherit_graph_100.md5 create mode 100644 doxygen/inherit_graph_100.png create mode 100644 doxygen/inherit_graph_101.map create mode 100644 doxygen/inherit_graph_101.md5 create mode 100644 doxygen/inherit_graph_101.png create mode 100644 doxygen/inherit_graph_102.map create mode 100644 doxygen/inherit_graph_102.md5 create mode 100644 doxygen/inherit_graph_102.png create mode 100644 doxygen/inherit_graph_103.map create mode 100644 doxygen/inherit_graph_103.md5 create mode 100644 doxygen/inherit_graph_103.png create mode 100644 doxygen/inherit_graph_104.map create mode 100644 doxygen/inherit_graph_104.md5 create mode 100644 doxygen/inherit_graph_104.png create mode 100644 doxygen/inherit_graph_11.map create mode 100644 doxygen/inherit_graph_11.md5 create mode 100644 doxygen/inherit_graph_11.png create mode 100644 doxygen/inherit_graph_12.map create mode 100644 doxygen/inherit_graph_12.md5 create mode 100644 doxygen/inherit_graph_12.png create mode 100644 doxygen/inherit_graph_13.map create mode 100644 doxygen/inherit_graph_13.md5 create mode 100644 doxygen/inherit_graph_13.png create mode 100644 doxygen/inherit_graph_14.map create mode 100644 doxygen/inherit_graph_14.md5 create mode 100644 doxygen/inherit_graph_14.png create mode 100644 doxygen/inherit_graph_15.map create mode 100644 doxygen/inherit_graph_15.md5 create mode 100644 doxygen/inherit_graph_15.png create mode 100644 doxygen/inherit_graph_16.map create mode 100644 doxygen/inherit_graph_16.md5 create mode 100644 doxygen/inherit_graph_16.png create mode 100644 doxygen/inherit_graph_17.map create mode 100644 doxygen/inherit_graph_17.md5 create mode 100644 doxygen/inherit_graph_17.png create mode 100644 doxygen/inherit_graph_18.map create mode 100644 doxygen/inherit_graph_18.md5 create mode 100644 doxygen/inherit_graph_18.png create mode 100644 doxygen/inherit_graph_19.map create mode 100644 doxygen/inherit_graph_19.md5 create mode 100644 doxygen/inherit_graph_19.png create mode 100644 doxygen/inherit_graph_2.map create mode 100644 doxygen/inherit_graph_2.md5 create mode 100644 doxygen/inherit_graph_2.png create mode 100644 doxygen/inherit_graph_20.map create mode 100644 doxygen/inherit_graph_20.md5 create mode 100644 doxygen/inherit_graph_20.png create mode 100644 doxygen/inherit_graph_21.map create mode 100644 doxygen/inherit_graph_21.md5 create mode 100644 doxygen/inherit_graph_21.png create mode 100644 doxygen/inherit_graph_22.map create mode 100644 doxygen/inherit_graph_22.md5 create mode 100644 doxygen/inherit_graph_22.png create mode 100644 doxygen/inherit_graph_23.map create mode 100644 doxygen/inherit_graph_23.md5 create mode 100644 doxygen/inherit_graph_23.png create mode 100644 doxygen/inherit_graph_24.map create mode 100644 doxygen/inherit_graph_24.md5 create mode 100644 doxygen/inherit_graph_24.png create mode 100644 doxygen/inherit_graph_25.map create mode 100644 doxygen/inherit_graph_25.md5 create mode 100644 doxygen/inherit_graph_25.png create mode 100644 doxygen/inherit_graph_26.map create mode 100644 doxygen/inherit_graph_26.md5 create mode 100644 doxygen/inherit_graph_26.png create mode 100644 doxygen/inherit_graph_27.map create mode 100644 doxygen/inherit_graph_27.md5 create mode 100644 doxygen/inherit_graph_27.png create mode 100644 doxygen/inherit_graph_28.map create mode 100644 doxygen/inherit_graph_28.md5 create mode 100644 doxygen/inherit_graph_28.png create mode 100644 doxygen/inherit_graph_29.map create mode 100644 doxygen/inherit_graph_29.md5 create mode 100644 doxygen/inherit_graph_29.png create mode 100644 doxygen/inherit_graph_3.map create mode 100644 doxygen/inherit_graph_3.md5 create mode 100644 doxygen/inherit_graph_3.png create mode 100644 doxygen/inherit_graph_30.map create mode 100644 doxygen/inherit_graph_30.md5 create mode 100644 doxygen/inherit_graph_30.png create mode 100644 doxygen/inherit_graph_31.map create mode 100644 doxygen/inherit_graph_31.md5 create mode 100644 doxygen/inherit_graph_31.png create mode 100644 doxygen/inherit_graph_32.map create mode 100644 doxygen/inherit_graph_32.md5 create mode 100644 doxygen/inherit_graph_32.png create mode 100644 doxygen/inherit_graph_33.map create mode 100644 doxygen/inherit_graph_33.md5 create mode 100644 doxygen/inherit_graph_33.png create mode 100644 doxygen/inherit_graph_34.map create mode 100644 doxygen/inherit_graph_34.md5 create mode 100644 doxygen/inherit_graph_34.png create mode 100644 doxygen/inherit_graph_35.map create mode 100644 doxygen/inherit_graph_35.md5 create mode 100644 doxygen/inherit_graph_35.png create mode 100644 doxygen/inherit_graph_36.map create mode 100644 doxygen/inherit_graph_36.md5 create mode 100644 doxygen/inherit_graph_36.png create mode 100644 doxygen/inherit_graph_37.map create mode 100644 doxygen/inherit_graph_37.md5 create mode 100644 doxygen/inherit_graph_37.png create mode 100644 doxygen/inherit_graph_38.map create mode 100644 doxygen/inherit_graph_38.md5 create mode 100644 doxygen/inherit_graph_38.png create mode 100644 doxygen/inherit_graph_39.map create mode 100644 doxygen/inherit_graph_39.md5 create mode 100644 doxygen/inherit_graph_39.png create mode 100644 doxygen/inherit_graph_4.map create mode 100644 doxygen/inherit_graph_4.md5 create mode 100644 doxygen/inherit_graph_4.png create mode 100644 doxygen/inherit_graph_40.map create mode 100644 doxygen/inherit_graph_40.md5 create mode 100644 doxygen/inherit_graph_40.png create mode 100644 doxygen/inherit_graph_41.map create mode 100644 doxygen/inherit_graph_41.md5 create mode 100644 doxygen/inherit_graph_41.png create mode 100644 doxygen/inherit_graph_42.map create mode 100644 doxygen/inherit_graph_42.md5 create mode 100644 doxygen/inherit_graph_42.png create mode 100644 doxygen/inherit_graph_43.map create mode 100644 doxygen/inherit_graph_43.md5 create mode 100644 doxygen/inherit_graph_43.png create mode 100644 doxygen/inherit_graph_44.map create mode 100644 doxygen/inherit_graph_44.md5 create mode 100644 doxygen/inherit_graph_44.png create mode 100644 doxygen/inherit_graph_45.map create mode 100644 doxygen/inherit_graph_45.md5 create mode 100644 doxygen/inherit_graph_45.png create mode 100644 doxygen/inherit_graph_46.map create mode 100644 doxygen/inherit_graph_46.md5 create mode 100644 doxygen/inherit_graph_46.png create mode 100644 doxygen/inherit_graph_47.map create mode 100644 doxygen/inherit_graph_47.md5 create mode 100644 doxygen/inherit_graph_47.png create mode 100644 doxygen/inherit_graph_48.map create mode 100644 doxygen/inherit_graph_48.md5 create mode 100644 doxygen/inherit_graph_48.png create mode 100644 doxygen/inherit_graph_49.map create mode 100644 doxygen/inherit_graph_49.md5 create mode 100644 doxygen/inherit_graph_49.png create mode 100644 doxygen/inherit_graph_5.map create mode 100644 doxygen/inherit_graph_5.md5 create mode 100644 doxygen/inherit_graph_5.png create mode 100644 doxygen/inherit_graph_50.map create mode 100644 doxygen/inherit_graph_50.md5 create mode 100644 doxygen/inherit_graph_50.png create mode 100644 doxygen/inherit_graph_51.map create mode 100644 doxygen/inherit_graph_51.md5 create mode 100644 doxygen/inherit_graph_51.png create mode 100644 doxygen/inherit_graph_52.map create mode 100644 doxygen/inherit_graph_52.md5 create mode 100644 doxygen/inherit_graph_52.png create mode 100644 doxygen/inherit_graph_53.map create mode 100644 doxygen/inherit_graph_53.md5 create mode 100644 doxygen/inherit_graph_53.png create mode 100644 doxygen/inherit_graph_54.map create mode 100644 doxygen/inherit_graph_54.md5 create mode 100644 doxygen/inherit_graph_54.png create mode 100644 doxygen/inherit_graph_55.map create mode 100644 doxygen/inherit_graph_55.md5 create mode 100644 doxygen/inherit_graph_55.png create mode 100644 doxygen/inherit_graph_56.map create mode 100644 doxygen/inherit_graph_56.md5 create mode 100644 doxygen/inherit_graph_56.png create mode 100644 doxygen/inherit_graph_57.map create mode 100644 doxygen/inherit_graph_57.md5 create mode 100644 doxygen/inherit_graph_57.png create mode 100644 doxygen/inherit_graph_58.map create mode 100644 doxygen/inherit_graph_58.md5 create mode 100644 doxygen/inherit_graph_58.png create mode 100644 doxygen/inherit_graph_59.map create mode 100644 doxygen/inherit_graph_59.md5 create mode 100644 doxygen/inherit_graph_59.png create mode 100644 doxygen/inherit_graph_6.map create mode 100644 doxygen/inherit_graph_6.md5 create mode 100644 doxygen/inherit_graph_6.png create mode 100644 doxygen/inherit_graph_60.map create mode 100644 doxygen/inherit_graph_60.md5 create mode 100644 doxygen/inherit_graph_60.png create mode 100644 doxygen/inherit_graph_61.map create mode 100644 doxygen/inherit_graph_61.md5 create mode 100644 doxygen/inherit_graph_61.png create mode 100644 doxygen/inherit_graph_62.map create mode 100644 doxygen/inherit_graph_62.md5 create mode 100644 doxygen/inherit_graph_62.png create mode 100644 doxygen/inherit_graph_63.map create mode 100644 doxygen/inherit_graph_63.md5 create mode 100644 doxygen/inherit_graph_63.png create mode 100644 doxygen/inherit_graph_64.map create mode 100644 doxygen/inherit_graph_64.md5 create mode 100644 doxygen/inherit_graph_64.png create mode 100644 doxygen/inherit_graph_65.map create mode 100644 doxygen/inherit_graph_65.md5 create mode 100644 doxygen/inherit_graph_65.png create mode 100644 doxygen/inherit_graph_66.map create mode 100644 doxygen/inherit_graph_66.md5 create mode 100644 doxygen/inherit_graph_66.png create mode 100644 doxygen/inherit_graph_67.map create mode 100644 doxygen/inherit_graph_67.md5 create mode 100644 doxygen/inherit_graph_67.png create mode 100644 doxygen/inherit_graph_68.map create mode 100644 doxygen/inherit_graph_68.md5 create mode 100644 doxygen/inherit_graph_68.png create mode 100644 doxygen/inherit_graph_69.map create mode 100644 doxygen/inherit_graph_69.md5 create mode 100644 doxygen/inherit_graph_69.png create mode 100644 doxygen/inherit_graph_7.map create mode 100644 doxygen/inherit_graph_7.md5 create mode 100644 doxygen/inherit_graph_7.png create mode 100644 doxygen/inherit_graph_70.map create mode 100644 doxygen/inherit_graph_70.md5 create mode 100644 doxygen/inherit_graph_70.png create mode 100644 doxygen/inherit_graph_71.map create mode 100644 doxygen/inherit_graph_71.md5 create mode 100644 doxygen/inherit_graph_71.png create mode 100644 doxygen/inherit_graph_72.map create mode 100644 doxygen/inherit_graph_72.md5 create mode 100644 doxygen/inherit_graph_72.png create mode 100644 doxygen/inherit_graph_73.map create mode 100644 doxygen/inherit_graph_73.md5 create mode 100644 doxygen/inherit_graph_73.png create mode 100644 doxygen/inherit_graph_74.map create mode 100644 doxygen/inherit_graph_74.md5 create mode 100644 doxygen/inherit_graph_74.png create mode 100644 doxygen/inherit_graph_75.map create mode 100644 doxygen/inherit_graph_75.md5 create mode 100644 doxygen/inherit_graph_75.png create mode 100644 doxygen/inherit_graph_76.map create mode 100644 doxygen/inherit_graph_76.md5 create mode 100644 doxygen/inherit_graph_76.png create mode 100644 doxygen/inherit_graph_77.map create mode 100644 doxygen/inherit_graph_77.md5 create mode 100644 doxygen/inherit_graph_77.png create mode 100644 doxygen/inherit_graph_78.map create mode 100644 doxygen/inherit_graph_78.md5 create mode 100644 doxygen/inherit_graph_78.png create mode 100644 doxygen/inherit_graph_79.map create mode 100644 doxygen/inherit_graph_79.md5 create mode 100644 doxygen/inherit_graph_79.png create mode 100644 doxygen/inherit_graph_8.map create mode 100644 doxygen/inherit_graph_8.md5 create mode 100644 doxygen/inherit_graph_8.png create mode 100644 doxygen/inherit_graph_80.map create mode 100644 doxygen/inherit_graph_80.md5 create mode 100644 doxygen/inherit_graph_80.png create mode 100644 doxygen/inherit_graph_81.map create mode 100644 doxygen/inherit_graph_81.md5 create mode 100644 doxygen/inherit_graph_81.png create mode 100644 doxygen/inherit_graph_82.map create mode 100644 doxygen/inherit_graph_82.md5 create mode 100644 doxygen/inherit_graph_82.png create mode 100644 doxygen/inherit_graph_83.map create mode 100644 doxygen/inherit_graph_83.md5 create mode 100644 doxygen/inherit_graph_83.png create mode 100644 doxygen/inherit_graph_84.map create mode 100644 doxygen/inherit_graph_84.md5 create mode 100644 doxygen/inherit_graph_84.png create mode 100644 doxygen/inherit_graph_85.map create mode 100644 doxygen/inherit_graph_85.md5 create mode 100644 doxygen/inherit_graph_85.png create mode 100644 doxygen/inherit_graph_86.map create mode 100644 doxygen/inherit_graph_86.md5 create mode 100644 doxygen/inherit_graph_86.png create mode 100644 doxygen/inherit_graph_87.map create mode 100644 doxygen/inherit_graph_87.md5 create mode 100644 doxygen/inherit_graph_87.png create mode 100644 doxygen/inherit_graph_88.map create mode 100644 doxygen/inherit_graph_88.md5 create mode 100644 doxygen/inherit_graph_88.png create mode 100644 doxygen/inherit_graph_89.map create mode 100644 doxygen/inherit_graph_89.md5 create mode 100644 doxygen/inherit_graph_89.png create mode 100644 doxygen/inherit_graph_9.map create mode 100644 doxygen/inherit_graph_9.md5 create mode 100644 doxygen/inherit_graph_9.png create mode 100644 doxygen/inherit_graph_90.map create mode 100644 doxygen/inherit_graph_90.md5 create mode 100644 doxygen/inherit_graph_90.png create mode 100644 doxygen/inherit_graph_91.map create mode 100644 doxygen/inherit_graph_91.md5 create mode 100644 doxygen/inherit_graph_91.png create mode 100644 doxygen/inherit_graph_92.map create mode 100644 doxygen/inherit_graph_92.md5 create mode 100644 doxygen/inherit_graph_92.png create mode 100644 doxygen/inherit_graph_93.map create mode 100644 doxygen/inherit_graph_93.md5 create mode 100644 doxygen/inherit_graph_93.png create mode 100644 doxygen/inherit_graph_94.map create mode 100644 doxygen/inherit_graph_94.md5 create mode 100644 doxygen/inherit_graph_94.png create mode 100644 doxygen/inherit_graph_95.map create mode 100644 doxygen/inherit_graph_95.md5 create mode 100644 doxygen/inherit_graph_95.png create mode 100644 doxygen/inherit_graph_96.map create mode 100644 doxygen/inherit_graph_96.md5 create mode 100644 doxygen/inherit_graph_96.png create mode 100644 doxygen/inherit_graph_97.map create mode 100644 doxygen/inherit_graph_97.md5 create mode 100644 doxygen/inherit_graph_97.png create mode 100644 doxygen/inherit_graph_98.map create mode 100644 doxygen/inherit_graph_98.md5 create mode 100644 doxygen/inherit_graph_98.png create mode 100644 doxygen/inherit_graph_99.map create mode 100644 doxygen/inherit_graph_99.md5 create mode 100644 doxygen/inherit_graph_99.png create mode 100644 doxygen/inherits.html create mode 100644 doxygen/init_8hpp_source.html create mode 100644 doxygen/iterator__adaptor_8hpp_source.html create mode 100644 doxygen/jquery.js create mode 100644 doxygen/local__gemm_8hpp_source.html create mode 100644 doxygen/local__gemv_8hpp_source.html create mode 100644 doxygen/logger_8hpp_source.html create mode 100644 doxygen/matrix__algorithms_8hpp_source.html create mode 100644 doxygen/matrix__entry_8hpp_source.html create mode 100644 doxygen/matrix__io_8hpp_source.html create mode 100644 doxygen/matrix__partition_8hpp_source.html create mode 100644 doxygen/md__for__each_8hpp_source.html create mode 100644 doxygen/mdarray__shim_8hpp_source.html create mode 100644 doxygen/mdspan__shim_8hpp_source.html create mode 100644 doxygen/mdspan__utils_8hpp_source.html create mode 100644 doxygen/mdspan__view_8hpp_source.html create mode 100644 doxygen/memory_8hpp_source.html create mode 100644 doxygen/menu.js create mode 100644 doxygen/menudata.js create mode 100644 doxygen/mp_2algorithms_2copy_8hpp_source.html create mode 100644 doxygen/mp_2algorithms_2equal_8hpp_source.html create mode 100644 doxygen/mp_2algorithms_2exclusive__scan_8hpp_source.html create mode 100644 doxygen/mp_2algorithms_2fill_8hpp_source.html create mode 100644 doxygen/mp_2algorithms_2for__each_8hpp_source.html create mode 100644 doxygen/mp_2algorithms_2inclusive__scan_8hpp_source.html create mode 100644 doxygen/mp_2algorithms_2iota_8hpp_source.html create mode 100644 doxygen/mp_2algorithms_2reduce_8hpp_source.html create mode 100644 doxygen/mp_2algorithms_2sort_8hpp_source.html create mode 100644 doxygen/mp_2algorithms_2transform_8hpp_source.html create mode 100644 doxygen/mp_2containers_2distributed__vector_8hpp_source.html create mode 100644 doxygen/mp_2views_2enumerate_8hpp_source.html create mode 100644 doxygen/mp_2views_2views_8hpp_source.html create mode 100644 doxygen/mp_8hpp_source.html create mode 100644 doxygen/nav_f.png create mode 100644 doxygen/nav_fd.png create mode 100644 doxygen/nav_g.png create mode 100644 doxygen/nav_h.png create mode 100644 doxygen/nav_hd.png create mode 100644 doxygen/normal__distributed__iterator_8hpp_source.html create mode 100644 doxygen/onedpl__direct__iterator_8hpp_source.html create mode 100644 doxygen/open.png create mode 100644 doxygen/owning__view_8hpp_source.html create mode 100644 doxygen/range_8hpp_source.html create mode 100644 doxygen/range__adaptors_8hpp_source.html create mode 100644 doxygen/ranges_8hpp_source.html create mode 100644 doxygen/ranges__shim_8hpp_source.html create mode 100644 doxygen/ranges__utils_8hpp_source.html create mode 100644 doxygen/remote__subrange_8hpp_source.html create mode 100644 doxygen/search/all_0.js create mode 100644 doxygen/search/all_1.js create mode 100644 doxygen/search/all_10.js create mode 100644 doxygen/search/all_11.js create mode 100644 doxygen/search/all_12.js create mode 100644 doxygen/search/all_13.js create mode 100644 doxygen/search/all_2.js create mode 100644 doxygen/search/all_3.js create mode 100644 doxygen/search/all_4.js create mode 100644 doxygen/search/all_5.js create mode 100644 doxygen/search/all_6.js create mode 100644 doxygen/search/all_7.js create mode 100644 doxygen/search/all_8.js create mode 100644 doxygen/search/all_9.js create mode 100644 doxygen/search/all_a.js create mode 100644 doxygen/search/all_b.js create mode 100644 doxygen/search/all_c.js create mode 100644 doxygen/search/all_d.js create mode 100644 doxygen/search/all_e.js create mode 100644 doxygen/search/all_f.js create mode 100644 doxygen/search/classes_0.js create mode 100644 doxygen/search/classes_1.js create mode 100644 doxygen/search/classes_10.js create mode 100644 doxygen/search/classes_11.js create mode 100644 doxygen/search/classes_12.js create mode 100644 doxygen/search/classes_13.js create mode 100644 doxygen/search/classes_2.js create mode 100644 doxygen/search/classes_3.js create mode 100644 doxygen/search/classes_4.js create mode 100644 doxygen/search/classes_5.js create mode 100644 doxygen/search/classes_6.js create mode 100644 doxygen/search/classes_7.js create mode 100644 doxygen/search/classes_8.js create mode 100644 doxygen/search/classes_9.js create mode 100644 doxygen/search/classes_a.js create mode 100644 doxygen/search/classes_b.js create mode 100644 doxygen/search/classes_c.js create mode 100644 doxygen/search/classes_d.js create mode 100644 doxygen/search/classes_e.js create mode 100644 doxygen/search/classes_f.js create mode 100644 doxygen/search/close.svg create mode 100644 doxygen/search/concepts_0.js create mode 100644 doxygen/search/functions_0.js create mode 100644 doxygen/search/functions_1.js create mode 100644 doxygen/search/functions_2.js create mode 100644 doxygen/search/functions_3.js create mode 100644 doxygen/search/functions_4.js create mode 100644 doxygen/search/functions_5.js create mode 100644 doxygen/search/functions_6.js create mode 100644 doxygen/search/functions_7.js create mode 100644 doxygen/search/functions_8.js create mode 100644 doxygen/search/mag.svg create mode 100644 doxygen/search/mag_d.svg create mode 100644 doxygen/search/mag_sel.svg create mode 100644 doxygen/search/mag_seld.svg create mode 100644 doxygen/search/search.css create mode 100644 doxygen/search/search.js create mode 100644 doxygen/search/searchdata.js create mode 100644 doxygen/segment_8hpp_source.html create mode 100644 doxygen/segmented_8hpp_source.html create mode 100644 doxygen/segments__tools_8hpp_source.html create mode 100644 doxygen/sliding_8hpp_source.html create mode 100644 doxygen/source__location_8hpp_source.html create mode 100644 doxygen/sp_2algorithms_2copy_8hpp_source.html create mode 100644 doxygen/sp_2algorithms_2equal_8hpp_source.html create mode 100644 doxygen/sp_2algorithms_2exclusive__scan_8hpp_source.html create mode 100644 doxygen/sp_2algorithms_2fill_8hpp_source.html create mode 100644 doxygen/sp_2algorithms_2for__each_8hpp_source.html create mode 100644 doxygen/sp_2algorithms_2inclusive__scan_8hpp_source.html create mode 100644 doxygen/sp_2algorithms_2iota_8hpp_source.html create mode 100644 doxygen/sp_2algorithms_2reduce_8hpp_source.html create mode 100644 doxygen/sp_2algorithms_2sort_8hpp_source.html create mode 100644 doxygen/sp_2algorithms_2transform_8hpp_source.html create mode 100644 doxygen/sp_2distributed__vector_8hpp_source.html create mode 100644 doxygen/sp_2views_2enumerate_8hpp_source.html create mode 100644 doxygen/sp_2views_2views_8hpp_source.html create mode 100644 doxygen/sp_8hpp_source.html create mode 100644 doxygen/span_8hpp_source.html create mode 100644 doxygen/sparse__matrix_8hpp_source.html create mode 100644 doxygen/splitbar.png create mode 100644 doxygen/splitbard.png create mode 100644 doxygen/standard__views_8hpp_source.html create mode 100644 doxygen/structdr_1_1default__memory-members.html create mode 100644 doxygen/structdr_1_1default__memory.html create mode 100644 doxygen/structdr_1_1is__drop__view.html create mode 100644 doxygen/structdr_1_1is__drop__view_3_01rng_1_1drop__view_3_01T_01_4_01_4.html create mode 100644 doxygen/structdr_1_1is__drop__view_3_01rng_1_1drop__view_3_01T_01_4_01_4__coll__graph.map create mode 100644 doxygen/structdr_1_1is__drop__view_3_01rng_1_1drop__view_3_01T_01_4_01_4__coll__graph.md5 create mode 100644 doxygen/structdr_1_1is__drop__view_3_01rng_1_1drop__view_3_01T_01_4_01_4__coll__graph.png create mode 100644 doxygen/structdr_1_1is__drop__view_3_01rng_1_1drop__view_3_01T_01_4_01_4__inherit__graph.map create mode 100644 doxygen/structdr_1_1is__drop__view_3_01rng_1_1drop__view_3_01T_01_4_01_4__inherit__graph.md5 create mode 100644 doxygen/structdr_1_1is__drop__view_3_01rng_1_1drop__view_3_01T_01_4_01_4__inherit__graph.png create mode 100644 doxygen/structdr_1_1is__drop__view__coll__graph.map create mode 100644 doxygen/structdr_1_1is__drop__view__coll__graph.md5 create mode 100644 doxygen/structdr_1_1is__drop__view__coll__graph.png create mode 100644 doxygen/structdr_1_1is__drop__view__inherit__graph.map create mode 100644 doxygen/structdr_1_1is__drop__view__inherit__graph.md5 create mode 100644 doxygen/structdr_1_1is__drop__view__inherit__graph.png create mode 100644 doxygen/structdr_1_1is__iota__view.html create mode 100644 doxygen/structdr_1_1is__iota__view_3_01rng_1_1iota__view_3_01W_01_4_01_4.html create mode 100644 doxygen/structdr_1_1is__iota__view_3_01rng_1_1iota__view_3_01W_01_4_01_4__coll__graph.map create mode 100644 doxygen/structdr_1_1is__iota__view_3_01rng_1_1iota__view_3_01W_01_4_01_4__coll__graph.md5 create mode 100644 doxygen/structdr_1_1is__iota__view_3_01rng_1_1iota__view_3_01W_01_4_01_4__coll__graph.png create mode 100644 doxygen/structdr_1_1is__iota__view_3_01rng_1_1iota__view_3_01W_01_4_01_4__inherit__graph.map create mode 100644 doxygen/structdr_1_1is__iota__view_3_01rng_1_1iota__view_3_01W_01_4_01_4__inherit__graph.md5 create mode 100644 doxygen/structdr_1_1is__iota__view_3_01rng_1_1iota__view_3_01W_01_4_01_4__inherit__graph.png create mode 100644 doxygen/structdr_1_1is__iota__view__coll__graph.map create mode 100644 doxygen/structdr_1_1is__iota__view__coll__graph.md5 create mode 100644 doxygen/structdr_1_1is__iota__view__coll__graph.png create mode 100644 doxygen/structdr_1_1is__iota__view__inherit__graph.map create mode 100644 doxygen/structdr_1_1is__iota__view__inherit__graph.md5 create mode 100644 doxygen/structdr_1_1is__iota__view__inherit__graph.png create mode 100644 doxygen/structdr_1_1is__owning__view.html create mode 100644 doxygen/structdr_1_1is__owning__view__coll__graph.map create mode 100644 doxygen/structdr_1_1is__owning__view__coll__graph.md5 create mode 100644 doxygen/structdr_1_1is__owning__view__coll__graph.png create mode 100644 doxygen/structdr_1_1is__owning__view__inherit__graph.map create mode 100644 doxygen/structdr_1_1is__owning__view__inherit__graph.md5 create mode 100644 doxygen/structdr_1_1is__owning__view__inherit__graph.png create mode 100644 doxygen/structdr_1_1is__ref__view.html create mode 100644 doxygen/structdr_1_1is__ref__view_3_01rng_1_1ref__view_3_01R_01_4_01_4.html create mode 100644 doxygen/structdr_1_1is__ref__view_3_01rng_1_1ref__view_3_01R_01_4_01_4__coll__graph.map create mode 100644 doxygen/structdr_1_1is__ref__view_3_01rng_1_1ref__view_3_01R_01_4_01_4__coll__graph.md5 create mode 100644 doxygen/structdr_1_1is__ref__view_3_01rng_1_1ref__view_3_01R_01_4_01_4__coll__graph.png create mode 100644 doxygen/structdr_1_1is__ref__view_3_01rng_1_1ref__view_3_01R_01_4_01_4__inherit__graph.map create mode 100644 doxygen/structdr_1_1is__ref__view_3_01rng_1_1ref__view_3_01R_01_4_01_4__inherit__graph.md5 create mode 100644 doxygen/structdr_1_1is__ref__view_3_01rng_1_1ref__view_3_01R_01_4_01_4__inherit__graph.png create mode 100644 doxygen/structdr_1_1is__ref__view__coll__graph.map create mode 100644 doxygen/structdr_1_1is__ref__view__coll__graph.md5 create mode 100644 doxygen/structdr_1_1is__ref__view__coll__graph.png create mode 100644 doxygen/structdr_1_1is__ref__view__inherit__graph.map create mode 100644 doxygen/structdr_1_1is__ref__view__inherit__graph.md5 create mode 100644 doxygen/structdr_1_1is__ref__view__inherit__graph.png create mode 100644 doxygen/structdr_1_1is__sliding__view.html create mode 100644 doxygen/structdr_1_1is__sliding__view_3_01rng_1_1sliding__view_3_01T_01_4_01_4.html create mode 100644 doxygen/structdr_1_1is__sliding__view_3_01rng_1_1sliding__view_3_01T_01_4_01_4__coll__graph.map create mode 100644 doxygen/structdr_1_1is__sliding__view_3_01rng_1_1sliding__view_3_01T_01_4_01_4__coll__graph.md5 create mode 100644 doxygen/structdr_1_1is__sliding__view_3_01rng_1_1sliding__view_3_01T_01_4_01_4__coll__graph.png create mode 100644 doxygen/structdr_1_1is__sliding__view_3_01rng_1_1sliding__view_3_01T_01_4_01_4__inherit__graph.map create mode 100644 doxygen/structdr_1_1is__sliding__view_3_01rng_1_1sliding__view_3_01T_01_4_01_4__inherit__graph.md5 create mode 100644 doxygen/structdr_1_1is__sliding__view_3_01rng_1_1sliding__view_3_01T_01_4_01_4__inherit__graph.png create mode 100644 doxygen/structdr_1_1is__sliding__view__coll__graph.map create mode 100644 doxygen/structdr_1_1is__sliding__view__coll__graph.md5 create mode 100644 doxygen/structdr_1_1is__sliding__view__coll__graph.png create mode 100644 doxygen/structdr_1_1is__sliding__view__inherit__graph.map create mode 100644 doxygen/structdr_1_1is__sliding__view__inherit__graph.md5 create mode 100644 doxygen/structdr_1_1is__sliding__view__inherit__graph.png create mode 100644 doxygen/structdr_1_1is__subrange__view.html create mode 100644 doxygen/structdr_1_1is__subrange__view_3_01rng_1_1subrange_3_01T_01_4_01_4.html create mode 100644 doxygen/structdr_1_1is__subrange__view_3_01rng_1_1subrange_3_01T_01_4_01_4__coll__graph.map create mode 100644 doxygen/structdr_1_1is__subrange__view_3_01rng_1_1subrange_3_01T_01_4_01_4__coll__graph.md5 create mode 100644 doxygen/structdr_1_1is__subrange__view_3_01rng_1_1subrange_3_01T_01_4_01_4__coll__graph.png create mode 100644 doxygen/structdr_1_1is__subrange__view_3_01rng_1_1subrange_3_01T_01_4_01_4__inherit__graph.map create mode 100644 doxygen/structdr_1_1is__subrange__view_3_01rng_1_1subrange_3_01T_01_4_01_4__inherit__graph.md5 create mode 100644 doxygen/structdr_1_1is__subrange__view_3_01rng_1_1subrange_3_01T_01_4_01_4__inherit__graph.png create mode 100644 doxygen/structdr_1_1is__subrange__view__coll__graph.map create mode 100644 doxygen/structdr_1_1is__subrange__view__coll__graph.md5 create mode 100644 doxygen/structdr_1_1is__subrange__view__coll__graph.png create mode 100644 doxygen/structdr_1_1is__subrange__view__inherit__graph.map create mode 100644 doxygen/structdr_1_1is__subrange__view__inherit__graph.md5 create mode 100644 doxygen/structdr_1_1is__subrange__view__inherit__graph.png create mode 100644 doxygen/structdr_1_1is__take__view.html create mode 100644 doxygen/structdr_1_1is__take__view_3_01rng_1_1take__view_3_01T_01_4_01_4.html create mode 100644 doxygen/structdr_1_1is__take__view_3_01rng_1_1take__view_3_01T_01_4_01_4__coll__graph.map create mode 100644 doxygen/structdr_1_1is__take__view_3_01rng_1_1take__view_3_01T_01_4_01_4__coll__graph.md5 create mode 100644 doxygen/structdr_1_1is__take__view_3_01rng_1_1take__view_3_01T_01_4_01_4__coll__graph.png create mode 100644 doxygen/structdr_1_1is__take__view_3_01rng_1_1take__view_3_01T_01_4_01_4__inherit__graph.map create mode 100644 doxygen/structdr_1_1is__take__view_3_01rng_1_1take__view_3_01T_01_4_01_4__inherit__graph.md5 create mode 100644 doxygen/structdr_1_1is__take__view_3_01rng_1_1take__view_3_01T_01_4_01_4__inherit__graph.png create mode 100644 doxygen/structdr_1_1is__take__view__coll__graph.map create mode 100644 doxygen/structdr_1_1is__take__view__coll__graph.md5 create mode 100644 doxygen/structdr_1_1is__take__view__coll__graph.png create mode 100644 doxygen/structdr_1_1is__take__view__inherit__graph.map create mode 100644 doxygen/structdr_1_1is__take__view__inherit__graph.md5 create mode 100644 doxygen/structdr_1_1is__take__view__inherit__graph.png create mode 100644 doxygen/structdr_1_1is__zip__view.html create mode 100644 doxygen/structdr_1_1is__zip__view_3_01rng_1_1zip__view_3_01Views_8_8_8_01_4_01_4.html create mode 100644 doxygen/structdr_1_1is__zip__view_3_01rng_1_1zip__view_3_01Views_8_8_8_01_4_01_4__coll__graph.map create mode 100644 doxygen/structdr_1_1is__zip__view_3_01rng_1_1zip__view_3_01Views_8_8_8_01_4_01_4__coll__graph.md5 create mode 100644 doxygen/structdr_1_1is__zip__view_3_01rng_1_1zip__view_3_01Views_8_8_8_01_4_01_4__coll__graph.png create mode 100644 doxygen/structdr_1_1is__zip__view_3_01rng_1_1zip__view_3_01Views_8_8_8_01_4_01_4__inherit__graph.map create mode 100644 doxygen/structdr_1_1is__zip__view_3_01rng_1_1zip__view_3_01Views_8_8_8_01_4_01_4__inherit__graph.md5 create mode 100644 doxygen/structdr_1_1is__zip__view_3_01rng_1_1zip__view_3_01Views_8_8_8_01_4_01_4__inherit__graph.png create mode 100644 doxygen/structdr_1_1is__zip__view__coll__graph.map create mode 100644 doxygen/structdr_1_1is__zip__view__coll__graph.md5 create mode 100644 doxygen/structdr_1_1is__zip__view__coll__graph.png create mode 100644 doxygen/structdr_1_1is__zip__view__inherit__graph.map create mode 100644 doxygen/structdr_1_1is__zip__view__inherit__graph.md5 create mode 100644 doxygen/structdr_1_1is__zip__view__inherit__graph.png create mode 100644 doxygen/structdr_1_1mp_1_1____detail_1_1any-members.html create mode 100644 doxygen/structdr_1_1mp_1_1____detail_1_1any.html create mode 100644 doxygen/structdr_1_1mp_1_1____detail_1_1global__context-members.html create mode 100644 doxygen/structdr_1_1mp_1_1____detail_1_1global__context.html create mode 100644 doxygen/structdr_1_1mp_1_1____detail_1_1global__context__coll__graph.map create mode 100644 doxygen/structdr_1_1mp_1_1____detail_1_1global__context__coll__graph.md5 create mode 100644 doxygen/structdr_1_1mp_1_1____detail_1_1global__context__coll__graph.png create mode 100644 doxygen/structdr_1_1mp_1_1device__policy.html create mode 100644 doxygen/structdr_1_1mp_1_1distribution-members.html create mode 100644 doxygen/structdr_1_1mp_1_1distribution.html create mode 100644 doxygen/structdr_1_1mp_1_1halo__bounds-members.html create mode 100644 doxygen/structdr_1_1mp_1_1halo__bounds.html create mode 100644 doxygen/structdr_1_1mp_1_1halo__impl_1_1max__op-members.html create mode 100644 doxygen/structdr_1_1mp_1_1halo__impl_1_1max__op.html create mode 100644 doxygen/structdr_1_1mp_1_1halo__impl_1_1min__op-members.html create mode 100644 doxygen/structdr_1_1mp_1_1halo__impl_1_1min__op.html create mode 100644 doxygen/structdr_1_1mp_1_1halo__impl_1_1multiplies__op-members.html create mode 100644 doxygen/structdr_1_1mp_1_1halo__impl_1_1multiplies__op.html create mode 100644 doxygen/structdr_1_1mp_1_1halo__impl_1_1plus__op-members.html create mode 100644 doxygen/structdr_1_1mp_1_1halo__impl_1_1plus__op.html create mode 100644 doxygen/structdr_1_1mp_1_1halo__impl_1_1second__op-members.html create mode 100644 doxygen/structdr_1_1mp_1_1halo__impl_1_1second__op.html create mode 100644 doxygen/structdr_1_1mp_1_1mdspan__view-members.html create mode 100644 doxygen/structdr_1_1mp_1_1mdspan__view.html create mode 100644 doxygen/structdr_1_1mp_1_1mdspan__view__coll__graph.map create mode 100644 doxygen/structdr_1_1mp_1_1mdspan__view__coll__graph.md5 create mode 100644 doxygen/structdr_1_1mp_1_1mdspan__view__coll__graph.png create mode 100644 doxygen/structdr_1_1mp_1_1mdspan__view__inherit__graph.map create mode 100644 doxygen/structdr_1_1mp_1_1mdspan__view__inherit__graph.md5 create mode 100644 doxygen/structdr_1_1mp_1_1mdspan__view__inherit__graph.png create mode 100644 doxygen/structdr_1_1mp_1_1submdspan__view-members.html create mode 100644 doxygen/structdr_1_1mp_1_1submdspan__view.html create mode 100644 doxygen/structdr_1_1mp_1_1submdspan__view__coll__graph.map create mode 100644 doxygen/structdr_1_1mp_1_1submdspan__view__coll__graph.md5 create mode 100644 doxygen/structdr_1_1mp_1_1submdspan__view__coll__graph.png create mode 100644 doxygen/structdr_1_1mp_1_1submdspan__view__inherit__graph.map create mode 100644 doxygen/structdr_1_1mp_1_1submdspan__view__inherit__graph.md5 create mode 100644 doxygen/structdr_1_1mp_1_1submdspan__view__inherit__graph.png create mode 100644 doxygen/structdr_1_1mp_1_1views_1_1____detail_1_1range__size-members.html create mode 100644 doxygen/structdr_1_1mp_1_1views_1_1____detail_1_1range__size.html create mode 100644 doxygen/structdr_1_1mp_1_1views_1_1____detail_1_1range__size_3_01R_01_4-members.html create mode 100644 doxygen/structdr_1_1mp_1_1views_1_1____detail_1_1range__size_3_01R_01_4.html create mode 100644 doxygen/structdr_1_1mp_1_1views_1_1____detail_1_1sliding__fn-members.html create mode 100644 doxygen/structdr_1_1mp_1_1views_1_1____detail_1_1sliding__fn.html create mode 100644 doxygen/structdr_1_1ranges_1_1____detail_1_1local__fn__-members.html create mode 100644 doxygen/structdr_1_1ranges_1_1____detail_1_1local__fn__.html create mode 100644 doxygen/structdr_1_1sp_1_1____detail_1_1tuple__or__pair-members.html create mode 100644 doxygen/structdr_1_1sp_1_1____detail_1_1tuple__or__pair.html create mode 100644 doxygen/structdr_1_1sp_1_1____detail_1_1tuple__or__pair_3_01T_00_01U_01_4-members.html create mode 100644 doxygen/structdr_1_1sp_1_1____detail_1_1tuple__or__pair_3_01T_00_01U_01_4.html create mode 100644 doxygen/structdr_1_1sp_1_1device__allocator_1_1rebind-members.html create mode 100644 doxygen/structdr_1_1sp_1_1device__allocator_1_1rebind.html create mode 100644 doxygen/structdr_1_1sp_1_1device__policy-members.html create mode 100644 doxygen/structdr_1_1sp_1_1device__policy.html create mode 100644 doxygen/structdr_1_1sp_1_1distributed__vector-members.html create mode 100644 doxygen/structdr_1_1sp_1_1distributed__vector.html create mode 100644 doxygen/structdr_1_1views_1_1iota__fn__-members.html create mode 100644 doxygen/structdr_1_1views_1_1iota__fn__.html create mode 100644 doxygen/structfmt_1_1formatter_3_01Mdspan_00_01char_01_4-members.html create mode 100644 doxygen/structfmt_1_1formatter_3_01Mdspan_00_01char_01_4.html create mode 100644 doxygen/structfmt_1_1formatter_3_01Mdspan_00_01char_01_4__coll__graph.map create mode 100644 doxygen/structfmt_1_1formatter_3_01Mdspan_00_01char_01_4__coll__graph.md5 create mode 100644 doxygen/structfmt_1_1formatter_3_01Mdspan_00_01char_01_4__coll__graph.png create mode 100644 doxygen/structfmt_1_1formatter_3_01Mdspan_00_01char_01_4__inherit__graph.map create mode 100644 doxygen/structfmt_1_1formatter_3_01Mdspan_00_01char_01_4__inherit__graph.md5 create mode 100644 doxygen/structfmt_1_1formatter_3_01Mdspan_00_01char_01_4__inherit__graph.png create mode 100644 doxygen/structnostd_1_1source__location-members.html create mode 100644 doxygen/structnostd_1_1source__location.html create mode 100644 doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1index_3_01I_01_4_01_4.html create mode 100644 doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1index_3_01I_01_4_01_4__coll__graph.map create mode 100644 doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1index_3_01I_01_4_01_4__coll__graph.md5 create mode 100644 doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1index_3_01I_01_4_01_4__coll__graph.png create mode 100644 doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1index_3_01I_01_4_01_4__inherit__graph.map create mode 100644 doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1index_3_01I_01_4_01_4__inherit__graph.md5 create mode 100644 doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1index_3_01I_01_4_01_4__inherit__graph.png create mode 100644 doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1sp_1_1matrix__entry_3_01T_00_01I_01_4_01_4.html create mode 100644 doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1sp_1_1matrix__entry_3_01T_00_01I_01_4_01_4__coll__graph.map create mode 100644 doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1sp_1_1matrix__entry_3_01T_00_01I_01_4_01_4__coll__graph.md5 create mode 100644 doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1sp_1_1matrix__entry_3_01T_00_01I_01_4_01_4__coll__graph.png create mode 100644 doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1sp_1_1matrix__entry_3_01T_00_01I_01_4_01_4__inherit__graph.map create mode 100644 doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1sp_1_1matrix__entry_3_01T_00_01I_01_4_01_4__inherit__graph.md5 create mode 100644 doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1sp_1_1matrix__entry_3_01T_00_01I_01_4_01_4__inherit__graph.png create mode 100644 doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1sp_1_1matrix__ref_3_01T_00_01I_00_01TRef_01_4_01_4.html create mode 100644 doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1sp_1_1matrix__ref_3_01T_00_01I_00_01TRef_01_4_01_4__coll__graph.map create mode 100644 doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1sp_1_1matrix__ref_3_01T_00_01I_00_01TRef_01_4_01_4__coll__graph.md5 create mode 100644 doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1sp_1_1matrix__ref_3_01T_00_01I_00_01TRef_01_4_01_4__coll__graph.png create mode 100644 doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1sp_1_1matrix__ref_3_01T_00_01I_00_01TRef_01_4_01_4__inherit__graph.map create mode 100644 doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1sp_1_1matrix__ref_3_01T_00_01I_00_01TRef_01_4_01_4__inherit__graph.md5 create mode 100644 doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1sp_1_1matrix__ref_3_01T_00_01I_00_01TRef_01_4_01_4__inherit__graph.png create mode 100644 doxygen/structstd_1_1tuple__size_3_01dr_1_1index_3_01I_01_4_01_4.html create mode 100644 doxygen/structstd_1_1tuple__size_3_01dr_1_1index_3_01I_01_4_01_4__coll__graph.map create mode 100644 doxygen/structstd_1_1tuple__size_3_01dr_1_1index_3_01I_01_4_01_4__coll__graph.md5 create mode 100644 doxygen/structstd_1_1tuple__size_3_01dr_1_1index_3_01I_01_4_01_4__coll__graph.png create mode 100644 doxygen/structstd_1_1tuple__size_3_01dr_1_1index_3_01I_01_4_01_4__inherit__graph.map create mode 100644 doxygen/structstd_1_1tuple__size_3_01dr_1_1index_3_01I_01_4_01_4__inherit__graph.md5 create mode 100644 doxygen/structstd_1_1tuple__size_3_01dr_1_1index_3_01I_01_4_01_4__inherit__graph.png create mode 100644 doxygen/structstd_1_1tuple__size_3_01dr_1_1sp_1_1matrix__entry_3_01T_00_01I_01_4_01_4.html create mode 100644 doxygen/structstd_1_1tuple__size_3_01dr_1_1sp_1_1matrix__entry_3_01T_00_01I_01_4_01_4__coll__graph.map create mode 100644 doxygen/structstd_1_1tuple__size_3_01dr_1_1sp_1_1matrix__entry_3_01T_00_01I_01_4_01_4__coll__graph.md5 create mode 100644 doxygen/structstd_1_1tuple__size_3_01dr_1_1sp_1_1matrix__entry_3_01T_00_01I_01_4_01_4__coll__graph.png create mode 100644 doxygen/structstd_1_1tuple__size_3_01dr_1_1sp_1_1matrix__entry_3_01T_00_01I_01_4_01_4__inherit__graph.map create mode 100644 doxygen/structstd_1_1tuple__size_3_01dr_1_1sp_1_1matrix__entry_3_01T_00_01I_01_4_01_4__inherit__graph.md5 create mode 100644 doxygen/structstd_1_1tuple__size_3_01dr_1_1sp_1_1matrix__entry_3_01T_00_01I_01_4_01_4__inherit__graph.png create mode 100644 doxygen/structstd_1_1tuple__size_3_01dr_1_1sp_1_1matrix__ref_3_01T_00_01I_00_01TRef_01_4_01_4.html create mode 100644 doxygen/structstd_1_1tuple__size_3_01dr_1_1sp_1_1matrix__ref_3_01T_00_01I_00_01TRef_01_4_01_4__coll__graph.map create mode 100644 doxygen/structstd_1_1tuple__size_3_01dr_1_1sp_1_1matrix__ref_3_01T_00_01I_00_01TRef_01_4_01_4__coll__graph.md5 create mode 100644 doxygen/structstd_1_1tuple__size_3_01dr_1_1sp_1_1matrix__ref_3_01T_00_01I_00_01TRef_01_4_01_4__coll__graph.png create mode 100644 doxygen/structstd_1_1tuple__size_3_01dr_1_1sp_1_1matrix__ref_3_01T_00_01I_00_01TRef_01_4_01_4__inherit__graph.map create mode 100644 doxygen/structstd_1_1tuple__size_3_01dr_1_1sp_1_1matrix__ref_3_01T_00_01I_00_01TRef_01_4_01_4__inherit__graph.md5 create mode 100644 doxygen/structstd_1_1tuple__size_3_01dr_1_1sp_1_1matrix__ref_3_01T_00_01I_00_01TRef_01_4_01_4__inherit__graph.png create mode 100644 doxygen/submdspan__view_8hpp_source.html create mode 100644 doxygen/subrange_8hpp_source.html create mode 100644 doxygen/sycl__support_8hpp_source.html create mode 100644 doxygen/sycl__utils_8hpp_source.html create mode 100644 doxygen/sync_off.png create mode 100644 doxygen/sync_on.png create mode 100644 doxygen/tab_a.png create mode 100644 doxygen/tab_ad.png create mode 100644 doxygen/tab_b.png create mode 100644 doxygen/tab_bd.png create mode 100644 doxygen/tab_h.png create mode 100644 doxygen/tab_hd.png create mode 100644 doxygen/tab_s.png create mode 100644 doxygen/tab_sd.png create mode 100644 doxygen/tabs.css create mode 100644 doxygen/transpose_8hpp_source.html create mode 100644 doxygen/tuple__utils_8hpp_source.html create mode 100644 doxygen/util_8hpp_source.html create mode 100644 doxygen/utils_8hpp_source.html create mode 100644 doxygen/vector_8hpp_source.html create mode 100644 doxygen/view__detectors_8hpp_source.html create mode 100644 doxygen/views_2iota_8hpp_source.html create mode 100644 doxygen/views_2transform_8hpp_source.html create mode 100644 doxygen/views_2views_8hpp_source.html create mode 100644 doxygen/zip_8hpp_source.html create mode 100644 doxygen/zip__view_8hpp_source.html create mode 100644 spec/.buildinfo create mode 100644 spec/_sources/algorithms/algorithms.rst create mode 100644 spec/_sources/algorithms/copy.rst create mode 100644 spec/_sources/algorithms/exclusive_scan.rst create mode 100644 spec/_sources/algorithms/fill.rst create mode 100644 spec/_sources/algorithms/for_each.rst create mode 100644 spec/_sources/algorithms/inclusive_scan.rst create mode 100644 spec/_sources/algorithms/iota.rst create mode 100644 spec/_sources/algorithms/reduce.rst create mode 100644 spec/_sources/algorithms/sort.rst create mode 100644 spec/_sources/algorithms/sp_matrix_gemm.rst create mode 100644 spec/_sources/algorithms/sp_matrix_gemv.rst create mode 100644 spec/_sources/algorithms/transform.rst create mode 100644 spec/_sources/arch.rst create mode 100644 spec/_sources/concepts.rst create mode 100644 spec/_sources/containers/containers.rst create mode 100644 spec/_sources/containers/mp_distributed_dense_matrix.rst create mode 100644 spec/_sources/containers/mp_distributed_vector.rst create mode 100644 spec/_sources/containers/sp_dense_matrix.rst create mode 100644 spec/_sources/containers/sp_distributed_vector.rst create mode 100644 spec/_sources/containers/sp_sparse_matrix.rst create mode 100644 spec/_sources/include/distributed-ranges.rst create mode 100644 spec/_sources/index.rst create mode 100644 spec/_sources/intro.rst create mode 100644 spec/_sources/views/all_view.rst create mode 100644 spec/_sources/views/counted_view.rst create mode 100644 spec/_sources/views/drop_view.rst create mode 100644 spec/_sources/views/iota_view.rst create mode 100644 spec/_sources/views/sliding_view.rst create mode 100644 spec/_sources/views/take_view.rst create mode 100644 spec/_sources/views/transform_view.rst create mode 100644 spec/_sources/views/views.rst create mode 100644 spec/_sources/views/zip_view.rst create mode 100644 spec/_static/basic.css create mode 100644 spec/_static/doctools.js create mode 100644 spec/_static/documentation_options.js create mode 100644 spec/_static/file.png create mode 100644 spec/_static/images/logo_binder.svg create mode 100644 spec/_static/images/logo_colab.png create mode 100644 spec/_static/images/logo_deepnote.svg create mode 100644 spec/_static/images/logo_jupyterhub.svg create mode 100644 spec/_static/language_data.js create mode 100644 spec/_static/locales/ar/LC_MESSAGES/booktheme.mo create mode 100644 spec/_static/locales/ar/LC_MESSAGES/booktheme.po create mode 100644 spec/_static/locales/bg/LC_MESSAGES/booktheme.mo create mode 100644 spec/_static/locales/bg/LC_MESSAGES/booktheme.po create mode 100644 spec/_static/locales/bn/LC_MESSAGES/booktheme.mo create mode 100644 spec/_static/locales/bn/LC_MESSAGES/booktheme.po create mode 100644 spec/_static/locales/ca/LC_MESSAGES/booktheme.mo create mode 100644 spec/_static/locales/ca/LC_MESSAGES/booktheme.po create mode 100644 spec/_static/locales/cs/LC_MESSAGES/booktheme.mo create mode 100644 spec/_static/locales/cs/LC_MESSAGES/booktheme.po create mode 100644 spec/_static/locales/da/LC_MESSAGES/booktheme.mo create mode 100644 spec/_static/locales/da/LC_MESSAGES/booktheme.po create mode 100644 spec/_static/locales/de/LC_MESSAGES/booktheme.mo create mode 100644 spec/_static/locales/de/LC_MESSAGES/booktheme.po create mode 100644 spec/_static/locales/el/LC_MESSAGES/booktheme.mo create mode 100644 spec/_static/locales/el/LC_MESSAGES/booktheme.po create mode 100644 spec/_static/locales/eo/LC_MESSAGES/booktheme.mo create mode 100644 spec/_static/locales/eo/LC_MESSAGES/booktheme.po create mode 100644 spec/_static/locales/es/LC_MESSAGES/booktheme.mo create mode 100644 spec/_static/locales/es/LC_MESSAGES/booktheme.po create mode 100644 spec/_static/locales/et/LC_MESSAGES/booktheme.mo create mode 100644 spec/_static/locales/et/LC_MESSAGES/booktheme.po create mode 100644 spec/_static/locales/fi/LC_MESSAGES/booktheme.mo create mode 100644 spec/_static/locales/fi/LC_MESSAGES/booktheme.po create mode 100644 spec/_static/locales/fr/LC_MESSAGES/booktheme.mo create mode 100644 spec/_static/locales/fr/LC_MESSAGES/booktheme.po create mode 100644 spec/_static/locales/hr/LC_MESSAGES/booktheme.mo create mode 100644 spec/_static/locales/hr/LC_MESSAGES/booktheme.po create mode 100644 spec/_static/locales/id/LC_MESSAGES/booktheme.mo create mode 100644 spec/_static/locales/id/LC_MESSAGES/booktheme.po create mode 100644 spec/_static/locales/it/LC_MESSAGES/booktheme.mo create mode 100644 spec/_static/locales/it/LC_MESSAGES/booktheme.po create mode 100644 spec/_static/locales/iw/LC_MESSAGES/booktheme.mo create mode 100644 spec/_static/locales/iw/LC_MESSAGES/booktheme.po create mode 100644 spec/_static/locales/ja/LC_MESSAGES/booktheme.mo create mode 100644 spec/_static/locales/ja/LC_MESSAGES/booktheme.po create mode 100644 spec/_static/locales/ko/LC_MESSAGES/booktheme.mo create mode 100644 spec/_static/locales/ko/LC_MESSAGES/booktheme.po create mode 100644 spec/_static/locales/lt/LC_MESSAGES/booktheme.mo create mode 100644 spec/_static/locales/lt/LC_MESSAGES/booktheme.po create mode 100644 spec/_static/locales/lv/LC_MESSAGES/booktheme.mo create mode 100644 spec/_static/locales/lv/LC_MESSAGES/booktheme.po create mode 100644 spec/_static/locales/ml/LC_MESSAGES/booktheme.mo create mode 100644 spec/_static/locales/ml/LC_MESSAGES/booktheme.po create mode 100644 spec/_static/locales/mr/LC_MESSAGES/booktheme.mo create mode 100644 spec/_static/locales/mr/LC_MESSAGES/booktheme.po create mode 100644 spec/_static/locales/ms/LC_MESSAGES/booktheme.mo create mode 100644 spec/_static/locales/ms/LC_MESSAGES/booktheme.po create mode 100644 spec/_static/locales/nl/LC_MESSAGES/booktheme.mo create mode 100644 spec/_static/locales/nl/LC_MESSAGES/booktheme.po create mode 100644 spec/_static/locales/no/LC_MESSAGES/booktheme.mo create mode 100644 spec/_static/locales/no/LC_MESSAGES/booktheme.po create mode 100644 spec/_static/locales/pl/LC_MESSAGES/booktheme.mo create mode 100644 spec/_static/locales/pl/LC_MESSAGES/booktheme.po create mode 100644 spec/_static/locales/pt/LC_MESSAGES/booktheme.mo create mode 100644 spec/_static/locales/pt/LC_MESSAGES/booktheme.po create mode 100644 spec/_static/locales/ro/LC_MESSAGES/booktheme.mo create mode 100644 spec/_static/locales/ro/LC_MESSAGES/booktheme.po create mode 100644 spec/_static/locales/ru/LC_MESSAGES/booktheme.mo create mode 100644 spec/_static/locales/ru/LC_MESSAGES/booktheme.po create mode 100644 spec/_static/locales/sk/LC_MESSAGES/booktheme.mo create mode 100644 spec/_static/locales/sk/LC_MESSAGES/booktheme.po create mode 100644 spec/_static/locales/sl/LC_MESSAGES/booktheme.mo create mode 100644 spec/_static/locales/sl/LC_MESSAGES/booktheme.po create mode 100644 spec/_static/locales/sr/LC_MESSAGES/booktheme.mo create mode 100644 spec/_static/locales/sr/LC_MESSAGES/booktheme.po create mode 100644 spec/_static/locales/sv/LC_MESSAGES/booktheme.mo create mode 100644 spec/_static/locales/sv/LC_MESSAGES/booktheme.po create mode 100644 spec/_static/locales/ta/LC_MESSAGES/booktheme.mo create mode 100644 spec/_static/locales/ta/LC_MESSAGES/booktheme.po create mode 100644 spec/_static/locales/te/LC_MESSAGES/booktheme.mo create mode 100644 spec/_static/locales/te/LC_MESSAGES/booktheme.po create mode 100644 spec/_static/locales/tg/LC_MESSAGES/booktheme.mo create mode 100644 spec/_static/locales/tg/LC_MESSAGES/booktheme.po create mode 100644 spec/_static/locales/th/LC_MESSAGES/booktheme.mo create mode 100644 spec/_static/locales/th/LC_MESSAGES/booktheme.po create mode 100644 spec/_static/locales/tl/LC_MESSAGES/booktheme.mo create mode 100644 spec/_static/locales/tl/LC_MESSAGES/booktheme.po create mode 100644 spec/_static/locales/tr/LC_MESSAGES/booktheme.mo create mode 100644 spec/_static/locales/tr/LC_MESSAGES/booktheme.po create mode 100644 spec/_static/locales/uk/LC_MESSAGES/booktheme.mo create mode 100644 spec/_static/locales/uk/LC_MESSAGES/booktheme.po create mode 100644 spec/_static/locales/ur/LC_MESSAGES/booktheme.mo create mode 100644 spec/_static/locales/ur/LC_MESSAGES/booktheme.po create mode 100644 spec/_static/locales/vi/LC_MESSAGES/booktheme.mo create mode 100644 spec/_static/locales/vi/LC_MESSAGES/booktheme.po create mode 100644 spec/_static/locales/zh_CN/LC_MESSAGES/booktheme.mo create mode 100644 spec/_static/locales/zh_CN/LC_MESSAGES/booktheme.po create mode 100644 spec/_static/locales/zh_TW/LC_MESSAGES/booktheme.mo create mode 100644 spec/_static/locales/zh_TW/LC_MESSAGES/booktheme.po create mode 100644 spec/_static/minus.png create mode 100644 spec/_static/plus.png create mode 100644 spec/_static/pygments.css create mode 100644 spec/_static/sbt-webpack-macros.html create mode 100644 spec/_static/scripts/bootstrap.js create mode 100644 spec/_static/scripts/bootstrap.js.LICENSE.txt create mode 100644 spec/_static/scripts/bootstrap.js.map create mode 100644 spec/_static/scripts/pydata-sphinx-theme.js create mode 100644 spec/_static/scripts/pydata-sphinx-theme.js.map create mode 100644 spec/_static/scripts/sphinx-book-theme.js create mode 100644 spec/_static/scripts/sphinx-book-theme.js.map create mode 100644 spec/_static/searchtools.js create mode 100644 spec/_static/sphinx_highlight.js create mode 100644 spec/_static/styles/bootstrap.css create mode 100644 spec/_static/styles/bootstrap.css.map create mode 100644 spec/_static/styles/pydata-sphinx-theme.css create mode 100644 spec/_static/styles/pydata-sphinx-theme.css.map create mode 100644 spec/_static/styles/sphinx-book-theme.css create mode 100644 spec/_static/styles/sphinx-book-theme.css.map create mode 100644 spec/_static/styles/theme.css create mode 100644 spec/_static/vendor/fontawesome/6.5.2/LICENSE.txt create mode 100644 spec/_static/vendor/fontawesome/6.5.2/css/all.min.css create mode 100644 spec/_static/vendor/fontawesome/6.5.2/js/all.min.js create mode 100644 spec/_static/vendor/fontawesome/6.5.2/js/all.min.js.LICENSE.txt create mode 100644 spec/_static/vendor/fontawesome/6.5.2/webfonts/fa-brands-400.ttf create mode 100644 spec/_static/vendor/fontawesome/6.5.2/webfonts/fa-brands-400.woff2 create mode 100644 spec/_static/vendor/fontawesome/6.5.2/webfonts/fa-regular-400.ttf create mode 100644 spec/_static/vendor/fontawesome/6.5.2/webfonts/fa-regular-400.woff2 create mode 100644 spec/_static/vendor/fontawesome/6.5.2/webfonts/fa-solid-900.ttf create mode 100644 spec/_static/vendor/fontawesome/6.5.2/webfonts/fa-solid-900.woff2 create mode 100644 spec/_static/vendor/fontawesome/6.5.2/webfonts/fa-v4compatibility.ttf create mode 100644 spec/_static/vendor/fontawesome/6.5.2/webfonts/fa-v4compatibility.woff2 create mode 100644 spec/_static/webpack-macros.html create mode 100644 spec/algorithms/algorithms.html create mode 100644 spec/algorithms/copy.html create mode 100644 spec/algorithms/exclusive_scan.html create mode 100644 spec/algorithms/fill.html create mode 100644 spec/algorithms/for_each.html create mode 100644 spec/algorithms/inclusive_scan.html create mode 100644 spec/algorithms/iota.html create mode 100644 spec/algorithms/reduce.html create mode 100644 spec/algorithms/sort.html create mode 100644 spec/algorithms/sp_matrix_gemm.html create mode 100644 spec/algorithms/sp_matrix_gemv.html create mode 100644 spec/algorithms/transform.html create mode 100644 spec/arch.html create mode 100644 spec/concepts.html create mode 100644 spec/containers/containers.html create mode 100644 spec/containers/mp_distributed_dense_matrix.html create mode 100644 spec/containers/mp_distributed_vector.html create mode 100644 spec/containers/sp_dense_matrix.html create mode 100644 spec/containers/sp_distributed_vector.html create mode 100644 spec/containers/sp_sparse_matrix.html create mode 100644 spec/genindex.html create mode 100644 spec/include/distributed-ranges.html create mode 100644 spec/index.html create mode 100644 spec/intro.html create mode 100644 spec/objects.inv create mode 100644 spec/search.html create mode 100644 spec/searchindex.js create mode 100644 spec/views/all_view.html create mode 100644 spec/views/counted_view.html create mode 100644 spec/views/drop_view.html create mode 100644 spec/views/iota_view.html create mode 100644 spec/views/sliding_view.html create mode 100644 spec/views/take_view.html create mode 100644 spec/views/transform_view.html create mode 100644 spec/views/views.html create mode 100644 spec/views/zip_view.html create mode 100644 src-python/drbench/drbench.egg-info/PKG-INFO create mode 100644 src-python/drbench/drbench.egg-info/SOURCES.txt create mode 100644 src-python/drbench/drbench.egg-info/dependency_links.txt create mode 100644 src-python/drbench/drbench.egg-info/entry_points.txt create mode 100644 src-python/drbench/drbench.egg-info/requires.txt create mode 100644 src-python/drbench/drbench.egg-info/top_level.txt diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000000..53e28a034d --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,19 @@ +# SPDX-FileCopyrightText: Intel Corporation +# +# SPDX-License-Identifier: BSD-3-Clause + +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates + +version: 2 +updates: + - package-ecosystem: "pip" + directory: "/" + schedule: + interval: "weekly" + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000000..5b13fae5a7 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,117 @@ +# SPDX-FileCopyrightText: Intel Corporation +# +# SPDX-License-Identifier: BSD-3-Clause + +on: + push: + branches: + - main + pull_request: + +env: + SPHINXOPTS: -q -W + +jobs: + checks: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-python@v4 + with: + python-version: '3.10' + - run: pip install -r requirements.txt + - name: Checks + run: | + pre-commit run --all + + clang: + runs-on: ubuntu-latest + env: + CXX: clang++ + steps: + - uses: actions/checkout@v3 + - name: Build & test + run: | + #source /opt/intel/oneapi/setvars.sh + cmake -B build + make -j -C build all test + - uses: actions/upload-artifact@v3 + with: + name: log-clang-${{ env.CXX }} + path: build/Testing + + gcc: + runs-on: ubuntuy-latest + strategy: + fail-fast: false + matrix: + include: + - cxx: g++-10 + - cxx: g++-11 + - cxx: g++-12 + name: ${{ matrix.cxx }} + env: + CXX: ${{ matrix.cxx }} + steps: + - uses: actions/checkout@v3 + - name: Build & test + run: | + #source /opt/intel/oneapi/setvars.sh + cmake -B build + make -j -C build all test + cmake -B build-nofmt + make -j -C build-nofmt/examples/cpu all test + - uses: actions/upload-artifact@v3 + with: + name: log-gcc-${{ env.CXX }} + path: build/Testing + + icpx: + runs-on: ubuntu-latest + env: + CXX: icpx + steps: + - uses: actions/checkout@v3 + - name: Build & test + run: | + #source /opt/intel/oneapi/setvars.sh + cmake -B build -DENABLE_SYCL_MPI=on + make -j -C build all test + - uses: actions/upload-artifact@v3 + with: + name: log-icpx-${{ env.CXX }} + path: build/Testing + + publish: + needs: [checks, clang, gcc, icpx] + runs-on: dds-base + if: ${{ github.ref == 'refs/heads/main' }} + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-python@v4 + with: + python-version: '3.10' + - run: pip install -r requirements.txt + - name: Build doc + run: | + make -C doc/spec html + - name: Checkout gh-pages + uses: actions/checkout@v3 + with: + ref: gh-pages + path: gh-pages + - name: Publish to github pages + run: | + rm -rf gh-pages/* + touch gh-pages/.nojekyll + + cp -r doc/spec/build/html gh-pages/spec + cp -r doc/spec/build/doxygen-html gh-pages/doxygen + + cd gh-pages + git config user.name github-actions + git config user.email github-actions@github.com + git add . + # Ignore errors because no updates returns an error status. + git commit --reset-author --amend -m "Update from github actions" + git push --force origin gh-pages diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000000..16da31e05f --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,60 @@ +# SPDX-FileCopyrightText: Intel Corporation +# +# SPDX-License-Identifier: BSD-3-Clause + +# See https://pre-commit.com for more information +# See https://pre-commit.com/hooks.html for more hooks +repos: + +- repo: https://github.com/pre-commit/mirrors-clang-format + rev: v15.0.4 + hooks: + - id: clang-format + +- repo: https://github.com/ambv/black + rev: 22.10.0 + hooks: + - id: black + +- repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.3.0 + hooks: + - id: trailing-whitespace + - id: end-of-file-fixer + - id: mixed-line-ending + - id: check-xml + - id: check-yaml + - id: check-case-conflict + - id: check-toml + - id: check-json + - id: check-added-large-files + args: ['--maxkb=800'] + +- repo: https://github.com/pycqa/flake8 + rev: 5.0.4 + hooks: + - id: flake8 + +- repo: https://github.com/pycqa/doc8 + rev: v1.0.0 + hooks: + - id: doc8 + +- repo: https://github.com/pycqa/isort + rev: 5.10.1 + hooks: + - id: isort + +- repo: https://github.com/fsfe/reuse-tool + rev: v1.0.0 + hooks: + - id: reuse + +- repo: local + hooks: + - id: sphinx + name: sphinx + entry: make -C doc/spec spelling linkcheck html + language: system + pass_filenames: false + always_run: true diff --git a/bench/devcloud/dr-bench-05ae8920514c49deb09dee3d94648622.json b/bench/devcloud/dr-bench-05ae8920514c49deb09dee3d94648622.json new file mode 100644 index 0000000000..e32f94383e --- /dev/null +++ b/bench/devcloud/dr-bench-05ae8920514c49deb09dee3d94648622.json @@ -0,0 +1,134 @@ +{ + "context": { + "date": "2023-12-01T02:48:36-08:00", + "host_name": "idc-beta-batch-pvc-node-13", + "executable": "mhp/mhp-bench", + "num_cpus": 224, + "mhz_per_cpu": 3800, + "cpu_scaling_enabled": false, + "caches": [ + { + "type": "Data", + "level": 1, + "size": 49152, + "num_sharing": 2 + }, + { + "type": "Instruction", + "level": 1, + "size": 32768, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 2, + "size": 2097152, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 3, + "size": 110100480, + "num_sharing": 112 + } + ], + "load_avg": [2.06689,2.31787,24.0571], + "library_build_type": "debug", + "default_repetitions": "50", + "default_vector_size": "6000000000", + "device": "GPU", + "device_info": "Intel(R) Data Center GPU Max 1100, max_compute_units: 448", + "hostname": "idc-beta-batch-pvc-node-13\n", + "lscpu": "Architecture: x86_64\nCPU op-mode(s): 32-bit, 64-bit\nAddress sizes: 52 bits physical, 57 bits virtual\nByte Order: Little Endian\nCPU(s): 224\nOn-line CPU(s) list: 0-223\nVendor ID: GenuineIntel\nModel name: Intel(R) Xeon(R) Platinum 8480+\nCPU family: 6\nModel: 143\nThread(s) per core: 2\nCore(s) per socket: 56\nSocket(s): 2\nStepping: 8\nCPU max MHz: 3800.0000\nCPU min MHz: 800.0000\nBogoMIPS: 4000.00\nFlags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb cat_l3 cat_l2 cdp_l3 invpcid_single intel_ppin cdp_l2 ssbd mba ibrs ibpb stibp ibrs_enhanced tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid cqm rdt_a avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb intel_pt avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local split_lock_detect avx_vnni avx512_bf16 wbnoinvd dtherm ida arat pln pts hwp hwp_act_window hwp_epp hwp_pkg_req avx512vbmi umip pku ospke waitpkg avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg tme avx512_vpopcntdq la57 rdpid bus_lock_detect cldemote movdiri movdir64b enqcmd fsrm md_clear serialize tsxldtrk pconfig arch_lbr amx_bf16 avx512_fp16 amx_tile amx_int8 flush_l1d arch_capabilities\nVirtualization: VT-x\nL1d cache: 5.3 MiB (112 instances)\nL1i cache: 3.5 MiB (112 instances)\nL2 cache: 224 MiB (112 instances)\nL3 cache: 210 MiB (2 instances)\nNUMA node(s): 2\nNUMA node0 CPU(s): 0-55,112-167\nNUMA node1 CPU(s): 56-111,168-223\nVulnerability Gather data sampling: Not affected\nVulnerability Itlb multihit: Not affected\nVulnerability L1tf: Not affected\nVulnerability Mds: Not affected\nVulnerability Meltdown: Not affected\nVulnerability Mmio stale data: Not affected\nVulnerability Retbleed: Not affected\nVulnerability Spec rstack overflow: Not affected\nVulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl and seccomp\nVulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization\nVulnerability Spectre v2: Mitigation; Enhanced IBRS, IBPB conditional, RSB filling, PBRSB-eIBRS SW sequence\nVulnerability Srbds: Not affected\nVulnerability Tsx async abort: Not affected\n", + "model": "MHP", + "numactl": "", + "rank": "0", + "ranks": "3", + "runtime": "SYCL", + "target": "MHP_SYCL_GPU", + "weak-scaling": "1" + }, + "benchmarks": [ + { + "name": "Reduce_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 0, + "per_family_instance_index": 0, + "run_name": "Reduce_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 5.6165553901350177e+02, + "cpu_time": 5.6165532700000040e+02, + "time_unit": "ms", + "bytes_per_second": 2.1365408451373840e+12, + "footprint": 8.0000000000000000e+09 + }, + { + "name": "DotProduct_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 1, + "per_family_instance_index": 0, + "run_name": "DotProduct_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 2.3608734270749260e+03, + "cpu_time": 2.3596445299999968e+03, + "time_unit": "ms", + "bytes_per_second": 2.0331458454963010e+12, + "footprint": 3.2000000000000000e+10 + }, + { + "name": "Inclusive_Scan_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 2, + "per_family_instance_index": 0, + "run_name": "Inclusive_Scan_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 5.1467817188989820e+03, + "cpu_time": 5.1372696359999918e+03, + "time_unit": "ms", + "bytes_per_second": 4.6631081928094995e+11, + "footprint": 1.6000000000000000e+10 + }, + { + "name": "WaveEquation_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 3, + "per_family_instance_index": 0, + "run_name": "WaveEquation_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 9.2316018368905516e+03, + "cpu_time": 9.0834726950000113e+03, + "time_unit": "ms", + "bytes_per_second": 1.1814815513449133e+12, + "flops": 2.1933444641304083e+09, + "footprint": 3.5996591616000000e+10 + }, + { + "name": "Stencil2D_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 4, + "per_family_instance_index": 0, + "run_name": "Stencil2D_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 5.1385008794861028e+02, + "cpu_time": 5.1266339400000049e+02, + "time_unit": "ms", + "bytes_per_second": 1.8682491693881130e+12, + "footprint": 3.2000000000000000e+10 + } + ] +} diff --git a/bench/devcloud/dr-bench-0f326341f9d94ba29646527008f9397e.json b/bench/devcloud/dr-bench-0f326341f9d94ba29646527008f9397e.json new file mode 100644 index 0000000000..90cef0d3a8 --- /dev/null +++ b/bench/devcloud/dr-bench-0f326341f9d94ba29646527008f9397e.json @@ -0,0 +1,134 @@ +{ + "context": { + "date": "2023-12-01T02:42:03-08:00", + "host_name": "idc-beta-batch-pvc-node-13", + "executable": "mhp/mhp-bench", + "num_cpus": 224, + "mhz_per_cpu": 3710, + "cpu_scaling_enabled": false, + "caches": [ + { + "type": "Data", + "level": 1, + "size": 49152, + "num_sharing": 2 + }, + { + "type": "Instruction", + "level": 1, + "size": 32768, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 2, + "size": 2097152, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 3, + "size": 110100480, + "num_sharing": 112 + } + ], + "load_avg": [2.88379,2.87305,35.7134], + "library_build_type": "debug", + "default_repetitions": "50", + "default_vector_size": "2000000000", + "device": "GPU", + "device_info": "Intel(R) Data Center GPU Max 1100, max_compute_units: 448", + "hostname": "idc-beta-batch-pvc-node-13\n", + "lscpu": "Architecture: x86_64\nCPU op-mode(s): 32-bit, 64-bit\nAddress sizes: 52 bits physical, 57 bits virtual\nByte Order: Little Endian\nCPU(s): 224\nOn-line CPU(s) list: 0-223\nVendor ID: GenuineIntel\nModel name: Intel(R) Xeon(R) Platinum 8480+\nCPU family: 6\nModel: 143\nThread(s) per core: 2\nCore(s) per socket: 56\nSocket(s): 2\nStepping: 8\nCPU max MHz: 3800.0000\nCPU min MHz: 800.0000\nBogoMIPS: 4000.00\nFlags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb cat_l3 cat_l2 cdp_l3 invpcid_single intel_ppin cdp_l2 ssbd mba ibrs ibpb stibp ibrs_enhanced tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid cqm rdt_a avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb intel_pt avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local split_lock_detect avx_vnni avx512_bf16 wbnoinvd dtherm ida arat pln pts hwp hwp_act_window hwp_epp hwp_pkg_req avx512vbmi umip pku ospke waitpkg avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg tme avx512_vpopcntdq la57 rdpid bus_lock_detect cldemote movdiri movdir64b enqcmd fsrm md_clear serialize tsxldtrk pconfig arch_lbr amx_bf16 avx512_fp16 amx_tile amx_int8 flush_l1d arch_capabilities\nVirtualization: VT-x\nL1d cache: 5.3 MiB (112 instances)\nL1i cache: 3.5 MiB (112 instances)\nL2 cache: 224 MiB (112 instances)\nL3 cache: 210 MiB (2 instances)\nNUMA node(s): 2\nNUMA node0 CPU(s): 0-55,112-167\nNUMA node1 CPU(s): 56-111,168-223\nVulnerability Gather data sampling: Not affected\nVulnerability Itlb multihit: Not affected\nVulnerability L1tf: Not affected\nVulnerability Mds: Not affected\nVulnerability Meltdown: Not affected\nVulnerability Mmio stale data: Not affected\nVulnerability Retbleed: Not affected\nVulnerability Spec rstack overflow: Not affected\nVulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl and seccomp\nVulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization\nVulnerability Spectre v2: Mitigation; Enhanced IBRS, IBPB conditional, RSB filling, PBRSB-eIBRS SW sequence\nVulnerability Srbds: Not affected\nVulnerability Tsx async abort: Not affected\n", + "model": "MHP", + "numactl": "", + "rank": "0", + "ranks": "1", + "runtime": "SYCL", + "target": "MHP_SYCL_GPU", + "weak-scaling": "0" + }, + "benchmarks": [ + { + "name": "Reduce_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 0, + "per_family_instance_index": 0, + "run_name": "Reduce_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 5.5516163100903964e+02, + "cpu_time": 5.5515669999999955e+02, + "time_unit": "ms", + "bytes_per_second": 7.2051088846499707e+11, + "footprint": 8.0000000000000000e+09 + }, + { + "name": "DotProduct_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 1, + "per_family_instance_index": 0, + "run_name": "DotProduct_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 2.3124956898975342e+03, + "cpu_time": 2.3124854639999980e+03, + "time_unit": "ms", + "bytes_per_second": 6.9189318146184106e+11, + "footprint": 3.2000000000000000e+10 + }, + { + "name": "Inclusive_Scan_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 2, + "per_family_instance_index": 0, + "run_name": "Inclusive_Scan_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 4.1613349071019511e+03, + "cpu_time": 4.1606854099999991e+03, + "time_unit": "ms", + "bytes_per_second": 1.9224600227073248e+11, + "footprint": 1.6000000000000000e+10 + }, + { + "name": "WaveEquation_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 3, + "per_family_instance_index": 0, + "run_name": "WaveEquation_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 8.8141352109033178e+03, + "cpu_time": 8.7900688860000009e+03, + "time_unit": "ms", + "bytes_per_second": 4.1249411816401971e+11, + "flops": 7.6576878372033358e+08, + "footprint": 3.5997811200000000e+10 + }, + { + "name": "Stencil2D_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 4, + "per_family_instance_index": 0, + "run_name": "Stencil2D_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 5.0708981210029782e+02, + "cpu_time": 5.0706769800000018e+02, + "time_unit": "ms", + "bytes_per_second": 6.3105192091042615e+11, + "footprint": 3.2000000000000000e+10 + } + ] +} diff --git a/bench/devcloud/dr-bench-1255d1c30769449395d041799418a44b.json b/bench/devcloud/dr-bench-1255d1c30769449395d041799418a44b.json new file mode 100644 index 0000000000..4814090c1c --- /dev/null +++ b/bench/devcloud/dr-bench-1255d1c30769449395d041799418a44b.json @@ -0,0 +1,117 @@ +{ + "context": { + "date": "2023-12-01T03:08:33-08:00", + "host_name": "idc-beta-batch-pvc-node-13", + "executable": "shp/shp-bench", + "num_cpus": 224, + "mhz_per_cpu": 3619, + "cpu_scaling_enabled": false, + "caches": [ + { + "type": "Data", + "level": 1, + "size": 49152, + "num_sharing": 2 + }, + { + "type": "Instruction", + "level": 1, + "size": 32768, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 2, + "size": 2097152, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 3, + "size": 110100480, + "num_sharing": 112 + } + ], + "load_avg": [142.663,118.33,79.1997], + "library_build_type": "debug", + "default_repetitions": "50", + "default_vector_size": "2000000000", + "device": "CPU", + "device_info0": "Intel(R) Xeon(R) Platinum 8480+, max_compute_units: 112", + "hostname": "idc-beta-batch-pvc-node-13\n", + "lscpu": "Architecture: x86_64\nCPU op-mode(s): 32-bit, 64-bit\nAddress sizes: 52 bits physical, 57 bits virtual\nByte Order: Little Endian\nCPU(s): 224\nOn-line CPU(s) list: 0-223\nVendor ID: GenuineIntel\nModel name: Intel(R) Xeon(R) Platinum 8480+\nCPU family: 6\nModel: 143\nThread(s) per core: 2\nCore(s) per socket: 56\nSocket(s): 2\nStepping: 8\nCPU max MHz: 3800.0000\nCPU min MHz: 800.0000\nBogoMIPS: 4000.00\nFlags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb cat_l3 cat_l2 cdp_l3 invpcid_single intel_ppin cdp_l2 ssbd mba ibrs ibpb stibp ibrs_enhanced tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid cqm rdt_a avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb intel_pt avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local split_lock_detect avx_vnni avx512_bf16 wbnoinvd dtherm ida arat pln pts hwp hwp_act_window hwp_epp hwp_pkg_req avx512vbmi umip pku ospke waitpkg avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg tme avx512_vpopcntdq la57 rdpid bus_lock_detect cldemote movdiri movdir64b enqcmd fsrm md_clear serialize tsxldtrk pconfig arch_lbr amx_bf16 avx512_fp16 amx_tile amx_int8 flush_l1d arch_capabilities\nVirtualization: VT-x\nL1d cache: 5.3 MiB (112 instances)\nL1i cache: 3.5 MiB (112 instances)\nL2 cache: 224 MiB (112 instances)\nL3 cache: 210 MiB (2 instances)\nNUMA node(s): 2\nNUMA node0 CPU(s): 0-55,112-167\nNUMA node1 CPU(s): 56-111,168-223\nVulnerability Gather data sampling: Not affected\nVulnerability Itlb multihit: Not affected\nVulnerability L1tf: Not affected\nVulnerability Mds: Not affected\nVulnerability Meltdown: Not affected\nVulnerability Mmio stale data: Not affected\nVulnerability Retbleed: Not affected\nVulnerability Spec rstack overflow: Not affected\nVulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl and seccomp\nVulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization\nVulnerability Spectre v2: Mitigation; Enhanced IBRS, IBPB conditional, RSB filling, PBRSB-eIBRS SW sequence\nVulnerability Srbds: Not affected\nVulnerability Tsx async abort: Not affected\n", + "model": "SHP", + "numactl": "", + "rank": "0", + "ranks": "1", + "runtime": "SYCL", + "target": "SHP_SYCL_CPU", + "weak-scaling": "0" + }, + "benchmarks": [ + { + "name": "Reduce_Reference/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 0, + "per_family_instance_index": 0, + "run_name": "Reduce_Reference/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 1.8577399690809459e+03, + "cpu_time": 1.8487172580000006e+03, + "time_unit": "ms", + "bytes_per_second": 2.1531538679112689e+11, + "footprint": 8.0000000000000000e+09 + }, + { + "name": "DotProduct_Reference/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 1, + "per_family_instance_index": 0, + "run_name": "DotProduct_Reference/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 7.3865799620094967e+03, + "cpu_time": 7.3686075740000024e+03, + "time_unit": "ms", + "bytes_per_second": 2.1660904075080569e+11, + "footprint": 3.2000000000000000e+10 + }, + { + "name": "Inclusive_Scan_Reference/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 2, + "per_family_instance_index": 0, + "run_name": "Inclusive_Scan_Reference/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 1.1631580167999262e+04, + "cpu_time": 1.1597553164000004e+04, + "time_unit": "ms", + "bytes_per_second": 6.8778273325317871e+10, + "footprint": 1.6000000000000000e+10 + }, + { + "name": "BlackScholes_Reference/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 3, + "per_family_instance_index": 0, + "run_name": "BlackScholes_Reference/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 4.0471538821970993e+04, + "cpu_time": 4.0396294231000000e+04, + "time_unit": "ms", + "bytes_per_second": 4.9417443917755104e+10, + "footprint": 4.0000000000000000e+10 + } + ] +} diff --git a/bench/devcloud/dr-bench-1931eb5d1d374795a0001e0bd3593fae.json b/bench/devcloud/dr-bench-1931eb5d1d374795a0001e0bd3593fae.json new file mode 100644 index 0000000000..aa448cdb68 --- /dev/null +++ b/bench/devcloud/dr-bench-1931eb5d1d374795a0001e0bd3593fae.json @@ -0,0 +1,86 @@ +{ + "context": { + "date": "2023-12-01T03:07:47-08:00", + "host_name": "idc-beta-batch-pvc-node-13", + "executable": "mhp/mhp-bench", + "num_cpus": 224, + "mhz_per_cpu": 3799, + "cpu_scaling_enabled": false, + "caches": [ + { + "type": "Data", + "level": 1, + "size": 49152, + "num_sharing": 2 + }, + { + "type": "Instruction", + "level": 1, + "size": 32768, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 2, + "size": 2097152, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 3, + "size": 110100480, + "num_sharing": 112 + } + ], + "load_avg": [109.821,109.198,74.4443], + "library_build_type": "debug", + "default_repetitions": "50", + "default_vector_size": "2000000000", + "device": "CPU", + "device_info": "Intel(R) Xeon(R) Platinum 8480+, max_compute_units: 112", + "hostname": "idc-beta-batch-pvc-node-13\n", + "lscpu": "Architecture: x86_64\nCPU op-mode(s): 32-bit, 64-bit\nAddress sizes: 52 bits physical, 57 bits virtual\nByte Order: Little Endian\nCPU(s): 224\nOn-line CPU(s) list: 0-223\nVendor ID: GenuineIntel\nModel name: Intel(R) Xeon(R) Platinum 8480+\nCPU family: 6\nModel: 143\nThread(s) per core: 2\nCore(s) per socket: 56\nSocket(s): 2\nStepping: 8\nCPU max MHz: 3800.0000\nCPU min MHz: 800.0000\nBogoMIPS: 4000.00\nFlags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb cat_l3 cat_l2 cdp_l3 invpcid_single intel_ppin cdp_l2 ssbd mba ibrs ibpb stibp ibrs_enhanced tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid cqm rdt_a avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb intel_pt avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local split_lock_detect avx_vnni avx512_bf16 wbnoinvd dtherm ida arat pln pts hwp hwp_act_window hwp_epp hwp_pkg_req avx512vbmi umip pku ospke waitpkg avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg tme avx512_vpopcntdq la57 rdpid bus_lock_detect cldemote movdiri movdir64b enqcmd fsrm md_clear serialize tsxldtrk pconfig arch_lbr amx_bf16 avx512_fp16 amx_tile amx_int8 flush_l1d arch_capabilities\nVirtualization: VT-x\nL1d cache: 5.3 MiB (112 instances)\nL1i cache: 3.5 MiB (112 instances)\nL2 cache: 224 MiB (112 instances)\nL3 cache: 210 MiB (2 instances)\nNUMA node(s): 2\nNUMA node0 CPU(s): 0-55,112-167\nNUMA node1 CPU(s): 56-111,168-223\nVulnerability Gather data sampling: Not affected\nVulnerability Itlb multihit: Not affected\nVulnerability L1tf: Not affected\nVulnerability Mds: Not affected\nVulnerability Meltdown: Not affected\nVulnerability Mmio stale data: Not affected\nVulnerability Retbleed: Not affected\nVulnerability Spec rstack overflow: Not affected\nVulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl and seccomp\nVulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization\nVulnerability Spectre v2: Mitigation; Enhanced IBRS, IBPB conditional, RSB filling, PBRSB-eIBRS SW sequence\nVulnerability Srbds: Not affected\nVulnerability Tsx async abort: Not affected\n", + "model": "MHP", + "numactl": "", + "rank": "0", + "ranks": "2", + "runtime": "SYCL", + "target": "MHP_SYCL_CPU", + "weak-scaling": "0" + }, + "benchmarks": [ + { + "name": "WaveEquation_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 0, + "per_family_instance_index": 0, + "run_name": "WaveEquation_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 1.8118294787895607e+04, + "cpu_time": 1.7760385455999996e+04, + "time_unit": "ms", + "bytes_per_second": 2.0066893566766425e+11, + "flops": 3.7252896472957474e+08, + "footprint": 1.7998905600000000e+10 + }, + { + "name": "Stencil2D_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 1, + "per_family_instance_index": 0, + "run_name": "Stencil2D_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 2.0610982560803536e+03, + "cpu_time": 2.0606356890000015e+03, + "time_unit": "ms", + "bytes_per_second": 1.5525703301915973e+11, + "footprint": 1.6000000000000000e+10 + } + ] +} diff --git a/bench/devcloud/dr-bench-1bbc05c89b3142469b1ed34d9e5c57f8.json b/bench/devcloud/dr-bench-1bbc05c89b3142469b1ed34d9e5c57f8.json new file mode 100644 index 0000000000..f60ef2186a --- /dev/null +++ b/bench/devcloud/dr-bench-1bbc05c89b3142469b1ed34d9e5c57f8.json @@ -0,0 +1,213 @@ +{ + "context": { + "date": "2023-12-01T03:11:36-08:00", + "host_name": "idc-beta-batch-pvc-node-13", + "executable": "mhp/mhp-bench", + "num_cpus": 224, + "mhz_per_cpu": 3000, + "cpu_scaling_enabled": false, + "caches": [ + { + "type": "Data", + "level": 1, + "size": 49152, + "num_sharing": 2 + }, + { + "type": "Instruction", + "level": 1, + "size": 32768, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 2, + "size": 2097152, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 3, + "size": 110100480, + "num_sharing": 112 + } + ], + "load_avg": [92.9668,104.205,80.2827], + "library_build_type": "debug", + "default_repetitions": "50", + "default_vector_size": "2000000000", + "device": "CPU", + "hostname": "idc-beta-batch-pvc-node-13\n", + "lscpu": "Architecture: x86_64\nCPU op-mode(s): 32-bit, 64-bit\nAddress sizes: 52 bits physical, 57 bits virtual\nByte Order: Little Endian\nCPU(s): 224\nOn-line CPU(s) list: 0-223\nVendor ID: GenuineIntel\nModel name: Intel(R) Xeon(R) Platinum 8480+\nCPU family: 6\nModel: 143\nThread(s) per core: 2\nCore(s) per socket: 56\nSocket(s): 2\nStepping: 8\nCPU max MHz: 3800.0000\nCPU min MHz: 800.0000\nBogoMIPS: 4000.00\nFlags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb cat_l3 cat_l2 cdp_l3 invpcid_single intel_ppin cdp_l2 ssbd mba ibrs ibpb stibp ibrs_enhanced tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid cqm rdt_a avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb intel_pt avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local split_lock_detect avx_vnni avx512_bf16 wbnoinvd dtherm ida arat pln pts hwp hwp_act_window hwp_epp hwp_pkg_req avx512vbmi umip pku ospke waitpkg avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg tme avx512_vpopcntdq la57 rdpid bus_lock_detect cldemote movdiri movdir64b enqcmd fsrm md_clear serialize tsxldtrk pconfig arch_lbr amx_bf16 avx512_fp16 amx_tile amx_int8 flush_l1d arch_capabilities\nVirtualization: VT-x\nL1d cache: 5.3 MiB (112 instances)\nL1i cache: 3.5 MiB (112 instances)\nL2 cache: 224 MiB (112 instances)\nL3 cache: 210 MiB (2 instances)\nNUMA node(s): 2\nNUMA node0 CPU(s): 0-55,112-167\nNUMA node1 CPU(s): 56-111,168-223\nVulnerability Gather data sampling: Not affected\nVulnerability Itlb multihit: Not affected\nVulnerability L1tf: Not affected\nVulnerability Mds: Not affected\nVulnerability Meltdown: Not affected\nVulnerability Mmio stale data: Not affected\nVulnerability Retbleed: Not affected\nVulnerability Spec rstack overflow: Not affected\nVulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl and seccomp\nVulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization\nVulnerability Spectre v2: Mitigation; Enhanced IBRS, IBPB conditional, RSB filling, PBRSB-eIBRS SW sequence\nVulnerability Srbds: Not affected\nVulnerability Tsx async abort: Not affected\n", + "model": "MHP", + "numactl": "", + "rank": "0", + "ranks": "56", + "runtime": "DIRECT", + "target": "MHP_DIRECT_CPU", + "weak-scaling": "0" + }, + "benchmarks": [ + { + "name": "Reduce_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 0, + "per_family_instance_index": 0, + "run_name": "Reduce_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 2.0528119340009212e+03, + "cpu_time": 2.0527000079999993e+03, + "time_unit": "ms", + "bytes_per_second": 1.9485467391082523e+11, + "footprint": 1.4285714200000000e+08 + }, + { + "name": "DotProduct_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 1, + "per_family_instance_index": 0, + "run_name": "DotProduct_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 7.8632067970901653e+03, + "cpu_time": 7.8629778639999977e+03, + "time_unit": "ms", + "bytes_per_second": 2.0347932354927905e+11, + "footprint": 5.7142857100000000e+08 + }, + { + "name": "Inclusive_Scan_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 2, + "per_family_instance_index": 0, + "run_name": "Inclusive_Scan_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 1.3750288408972910e+04, + "cpu_time": 1.3749173764999994e+04, + "time_unit": "ms", + "bytes_per_second": 5.8180597832257156e+10, + "footprint": 2.8571428500000000e+08 + }, + { + "name": "Stream_Copy/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 3, + "per_family_instance_index": 0, + "run_name": "Stream_Copy/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 4.4045541670832581e+03, + "cpu_time": 4.4044608720000015e+03, + "time_unit": "ms", + "bytes_per_second": 1.8163018767680823e+11, + "footprint": 2.8571428500000000e+08 + }, + { + "name": "Stream_Scale/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 4, + "per_family_instance_index": 0, + "run_name": "Stream_Scale/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 4.4591662551080772e+03, + "cpu_time": 4.4590019729999995e+03, + "time_unit": "ms", + "bytes_per_second": 1.7940573511552335e+11, + "footprint": 2.8571428500000000e+08 + }, + { + "name": "Stream_Add/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 5, + "per_family_instance_index": 0, + "run_name": "Stream_Add/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 6.4642623949062536e+03, + "cpu_time": 6.4642111510000004e+03, + "time_unit": "ms", + "bytes_per_second": 1.8563602878273984e+11, + "footprint": 4.2857142800000000e+08 + }, + { + "name": "Stream_Triad/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 6, + "per_family_instance_index": 0, + "run_name": "Stream_Triad/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 6.3968053419699909e+03, + "cpu_time": 6.3965907470000047e+03, + "time_unit": "ms", + "bytes_per_second": 1.8759364023893250e+11, + "footprint": 4.2857142800000000e+08 + }, + { + "name": "WaveEquation_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 7, + "per_family_instance_index": 0, + "run_name": "WaveEquation_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 1.9712159749890143e+04, + "cpu_time": 1.9711895787000001e+04, + "time_unit": "ms", + "bytes_per_second": 1.8444345913036050e+11, + "flops": 3.4240741175190687e+08, + "footprint": 6.4281805700000000e+08 + }, + { + "name": "Stencil2D_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 8, + "per_family_instance_index": 0, + "run_name": "Stencil2D_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 2.2683754339010302e+03, + "cpu_time": 2.2683492609999976e+03, + "time_unit": "ms", + "bytes_per_second": 1.4109269357127237e+11, + "footprint": 5.7152000000000000e+08 + }, + { + "name": "BlackScholes_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 9, + "per_family_instance_index": 0, + "run_name": "BlackScholes_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 1.2497487882982461e+04, + "cpu_time": 1.2497265677999991e+04, + "time_unit": "ms", + "bytes_per_second": 1.6003216156131293e+11, + "footprint": 7.1428571400000000e+08 + } + ] +} diff --git a/bench/devcloud/dr-bench-27a255afd4df46ddbdc52d067feeb958.json b/bench/devcloud/dr-bench-27a255afd4df46ddbdc52d067feeb958.json new file mode 100644 index 0000000000..ea5161eabe --- /dev/null +++ b/bench/devcloud/dr-bench-27a255afd4df46ddbdc52d067feeb958.json @@ -0,0 +1,181 @@ +{ + "context": { + "date": "2023-12-01T03:00:14-08:00", + "host_name": "idc-beta-batch-pvc-node-13", + "executable": "shp/shp-bench", + "num_cpus": 224, + "mhz_per_cpu": 3800, + "cpu_scaling_enabled": false, + "caches": [ + { + "type": "Data", + "level": 1, + "size": 49152, + "num_sharing": 2 + }, + { + "type": "Instruction", + "level": 1, + "size": 32768, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 2, + "size": 2097152, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 3, + "size": 110100480, + "num_sharing": 112 + } + ], + "load_avg": [195.833,99.2056,53.0107], + "library_build_type": "debug", + "default_repetitions": "50", + "default_vector_size": "2000000000", + "device": "CPU", + "device_info0": "Intel(R) Xeon(R) Platinum 8480+, max_compute_units: 112", + "hostname": "idc-beta-batch-pvc-node-13\n", + "lscpu": "Architecture: x86_64\nCPU op-mode(s): 32-bit, 64-bit\nAddress sizes: 52 bits physical, 57 bits virtual\nByte Order: Little Endian\nCPU(s): 224\nOn-line CPU(s) list: 0-223\nVendor ID: GenuineIntel\nModel name: Intel(R) Xeon(R) Platinum 8480+\nCPU family: 6\nModel: 143\nThread(s) per core: 2\nCore(s) per socket: 56\nSocket(s): 2\nStepping: 8\nCPU max MHz: 3800.0000\nCPU min MHz: 800.0000\nBogoMIPS: 4000.00\nFlags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb cat_l3 cat_l2 cdp_l3 invpcid_single intel_ppin cdp_l2 ssbd mba ibrs ibpb stibp ibrs_enhanced tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid cqm rdt_a avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb intel_pt avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local split_lock_detect avx_vnni avx512_bf16 wbnoinvd dtherm ida arat pln pts hwp hwp_act_window hwp_epp hwp_pkg_req avx512vbmi umip pku ospke waitpkg avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg tme avx512_vpopcntdq la57 rdpid bus_lock_detect cldemote movdiri movdir64b enqcmd fsrm md_clear serialize tsxldtrk pconfig arch_lbr amx_bf16 avx512_fp16 amx_tile amx_int8 flush_l1d arch_capabilities\nVirtualization: VT-x\nL1d cache: 5.3 MiB (112 instances)\nL1i cache: 3.5 MiB (112 instances)\nL2 cache: 224 MiB (112 instances)\nL3 cache: 210 MiB (2 instances)\nNUMA node(s): 2\nNUMA node0 CPU(s): 0-55,112-167\nNUMA node1 CPU(s): 56-111,168-223\nVulnerability Gather data sampling: Not affected\nVulnerability Itlb multihit: Not affected\nVulnerability L1tf: Not affected\nVulnerability Mds: Not affected\nVulnerability Meltdown: Not affected\nVulnerability Mmio stale data: Not affected\nVulnerability Retbleed: Not affected\nVulnerability Spec rstack overflow: Not affected\nVulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl and seccomp\nVulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization\nVulnerability Spectre v2: Mitigation; Enhanced IBRS, IBPB conditional, RSB filling, PBRSB-eIBRS SW sequence\nVulnerability Srbds: Not affected\nVulnerability Tsx async abort: Not affected\n", + "model": "SHP", + "numactl": "", + "rank": "0", + "ranks": "1", + "runtime": "SYCL", + "target": "SHP_SYCL_CPU", + "weak-scaling": "0" + }, + "benchmarks": [ + { + "name": "Reduce_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 0, + "per_family_instance_index": 0, + "run_name": "Reduce_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 1.8646866271095548e+03, + "cpu_time": 1.8501959899999995e+03, + "time_unit": "ms", + "bytes_per_second": 2.1451325610675870e+11, + "footprint": 8.0000000000000000e+09 + }, + { + "name": "DotProduct_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 1, + "per_family_instance_index": 0, + "run_name": "DotProduct_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 7.3905101448925943e+03, + "cpu_time": 7.3666108349999995e+03, + "time_unit": "ms", + "bytes_per_second": 2.1649385071282553e+11, + "footprint": 3.2000000000000000e+10 + }, + { + "name": "Inclusive_Scan_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 2, + "per_family_instance_index": 0, + "run_name": "Inclusive_Scan_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 1.2791255334911728e+04, + "cpu_time": 1.2748943330000004e+04, + "time_unit": "ms", + "bytes_per_second": 6.2542727750616104e+10, + "footprint": 1.6000000000000000e+10 + }, + { + "name": "Stream_Copy/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 3, + "per_family_instance_index": 0, + "run_name": "Stream_Copy/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 4.3128416599641369e+03, + "cpu_time": 6.6100220000038235e+00, + "time_unit": "ms", + "bytes_per_second": 1.8549255063693951e+11, + "footprint": 1.6000000000000000e+10 + }, + { + "name": "Stream_Scale/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 4, + "per_family_instance_index": 0, + "run_name": "Stream_Scale/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 4.3243016421108987e+03, + "cpu_time": 6.0379869999991342e+00, + "time_unit": "ms", + "bytes_per_second": 1.8500097037853299e+11, + "footprint": 1.6000000000000000e+10 + }, + { + "name": "Stream_Add/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 5, + "per_family_instance_index": 0, + "run_name": "Stream_Add/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 6.2428005789869521e+03, + "cpu_time": 6.3116660000019920e+00, + "time_unit": "ms", + "bytes_per_second": 1.9222142127031223e+11, + "footprint": 2.4000000000000000e+10 + }, + { + "name": "Stream_Triad/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 6, + "per_family_instance_index": 0, + "run_name": "Stream_Triad/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 6.2416961680003942e+03, + "cpu_time": 6.4830270000015844e+00, + "time_unit": "ms", + "bytes_per_second": 1.9225543309078357e+11, + "footprint": 2.4000000000000000e+10 + }, + { + "name": "BlackScholes_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 7, + "per_family_instance_index": 0, + "run_name": "BlackScholes_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 4.0670778174916413e+04, + "cpu_time": 9.4669509999931734e+00, + "time_unit": "ms", + "bytes_per_second": 4.9175356109450943e+10, + "footprint": 4.0000000000000000e+10 + } + ] +} diff --git a/bench/devcloud/dr-bench-3b67dab7a52d48728f3ac9b1c65be965.json b/bench/devcloud/dr-bench-3b67dab7a52d48728f3ac9b1c65be965.json new file mode 100644 index 0000000000..da3917516b --- /dev/null +++ b/bench/devcloud/dr-bench-3b67dab7a52d48728f3ac9b1c65be965.json @@ -0,0 +1,134 @@ +{ + "context": { + "date": "2023-12-01T02:44:23-08:00", + "host_name": "idc-beta-batch-pvc-node-13", + "executable": "mhp/mhp-bench", + "num_cpus": 224, + "mhz_per_cpu": 3389, + "cpu_scaling_enabled": false, + "caches": [ + { + "type": "Data", + "level": 1, + "size": 49152, + "num_sharing": 2 + }, + { + "type": "Instruction", + "level": 1, + "size": 32768, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 2, + "size": 2097152, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 3, + "size": 110100480, + "num_sharing": 112 + } + ], + "load_avg": [2.33691,2.49316,30.9614], + "library_build_type": "debug", + "default_repetitions": "50", + "default_vector_size": "2000000000", + "device": "GPU", + "device_info": "Intel(R) Data Center GPU Max 1100, max_compute_units: 448", + "hostname": "idc-beta-batch-pvc-node-13\n", + "lscpu": "Architecture: x86_64\nCPU op-mode(s): 32-bit, 64-bit\nAddress sizes: 52 bits physical, 57 bits virtual\nByte Order: Little Endian\nCPU(s): 224\nOn-line CPU(s) list: 0-223\nVendor ID: GenuineIntel\nModel name: Intel(R) Xeon(R) Platinum 8480+\nCPU family: 6\nModel: 143\nThread(s) per core: 2\nCore(s) per socket: 56\nSocket(s): 2\nStepping: 8\nCPU max MHz: 3800.0000\nCPU min MHz: 800.0000\nBogoMIPS: 4000.00\nFlags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb cat_l3 cat_l2 cdp_l3 invpcid_single intel_ppin cdp_l2 ssbd mba ibrs ibpb stibp ibrs_enhanced tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid cqm rdt_a avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb intel_pt avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local split_lock_detect avx_vnni avx512_bf16 wbnoinvd dtherm ida arat pln pts hwp hwp_act_window hwp_epp hwp_pkg_req avx512vbmi umip pku ospke waitpkg avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg tme avx512_vpopcntdq la57 rdpid bus_lock_detect cldemote movdiri movdir64b enqcmd fsrm md_clear serialize tsxldtrk pconfig arch_lbr amx_bf16 avx512_fp16 amx_tile amx_int8 flush_l1d arch_capabilities\nVirtualization: VT-x\nL1d cache: 5.3 MiB (112 instances)\nL1i cache: 3.5 MiB (112 instances)\nL2 cache: 224 MiB (112 instances)\nL3 cache: 210 MiB (2 instances)\nNUMA node(s): 2\nNUMA node0 CPU(s): 0-55,112-167\nNUMA node1 CPU(s): 56-111,168-223\nVulnerability Gather data sampling: Not affected\nVulnerability Itlb multihit: Not affected\nVulnerability L1tf: Not affected\nVulnerability Mds: Not affected\nVulnerability Meltdown: Not affected\nVulnerability Mmio stale data: Not affected\nVulnerability Retbleed: Not affected\nVulnerability Spec rstack overflow: Not affected\nVulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl and seccomp\nVulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization\nVulnerability Spectre v2: Mitigation; Enhanced IBRS, IBPB conditional, RSB filling, PBRSB-eIBRS SW sequence\nVulnerability Srbds: Not affected\nVulnerability Tsx async abort: Not affected\n", + "model": "MHP", + "numactl": "", + "rank": "0", + "ranks": "3", + "runtime": "SYCL", + "target": "MHP_SYCL_GPU", + "weak-scaling": "0" + }, + "benchmarks": [ + { + "name": "Reduce_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 0, + "per_family_instance_index": 0, + "run_name": "Reduce_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 1.8678983089047455e+02, + "cpu_time": 1.8677556899999990e+02, + "time_unit": "ms", + "bytes_per_second": 2.1414442001103511e+12, + "footprint": 2.6666666660000000e+09 + }, + { + "name": "DotProduct_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 1, + "per_family_instance_index": 0, + "run_name": "DotProduct_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 7.8309814293891316e+02, + "cpu_time": 7.8306104400000004e+02, + "time_unit": "ms", + "bytes_per_second": 2.0431666380861418e+12, + "footprint": 1.0666666666000000e+10 + }, + { + "name": "Inclusive_Scan_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 2, + "per_family_instance_index": 0, + "run_name": "Inclusive_Scan_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 1.7300336490206105e+03, + "cpu_time": 1.7267569800000010e+03, + "time_unit": "ms", + "bytes_per_second": 4.6241875148086749e+11, + "footprint": 5.3333333330000000e+09 + }, + { + "name": "WaveEquation_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 3, + "per_family_instance_index": 0, + "run_name": "WaveEquation_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 3.2536409489151224e+03, + "cpu_time": 3.1660738910000000e+03, + "time_unit": "ms", + "bytes_per_second": 1.1174493400730945e+12, + "flops": 2.0744727847891603e+09, + "footprint": 1.1999270400000000e+10 + }, + { + "name": "Stencil2D_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 4, + "per_family_instance_index": 0, + "run_name": "Stencil2D_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 1.7660868994339677e+02, + "cpu_time": 1.7595972499999846e+02, + "time_unit": "ms", + "bytes_per_second": 1.8119244307998706e+12, + "footprint": 1.0666720000000000e+10 + } + ] +} diff --git a/bench/devcloud/dr-bench-3dad8cd026d44af98eb20bf90595f93c.json b/bench/devcloud/dr-bench-3dad8cd026d44af98eb20bf90595f93c.json new file mode 100644 index 0000000000..8f323d59fc --- /dev/null +++ b/bench/devcloud/dr-bench-3dad8cd026d44af98eb20bf90595f93c.json @@ -0,0 +1,117 @@ +{ + "context": { + "date": "2023-12-01T02:52:17-08:00", + "host_name": "idc-beta-batch-pvc-node-13", + "executable": "shp/shp-bench", + "num_cpus": 224, + "mhz_per_cpu": 3800, + "cpu_scaling_enabled": false, + "caches": [ + { + "type": "Data", + "level": 1, + "size": 49152, + "num_sharing": 2 + }, + { + "type": "Instruction", + "level": 1, + "size": 32768, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 2, + "size": 2097152, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 3, + "size": 110100480, + "num_sharing": 112 + } + ], + "load_avg": [4.90234,3.4458,19.8945], + "library_build_type": "debug", + "default_repetitions": "50", + "default_vector_size": "2000000000", + "device": "GPU", + "device_info0": "Intel(R) Data Center GPU Max 1100, max_compute_units: 448", + "hostname": "idc-beta-batch-pvc-node-13\n", + "lscpu": "Architecture: x86_64\nCPU op-mode(s): 32-bit, 64-bit\nAddress sizes: 52 bits physical, 57 bits virtual\nByte Order: Little Endian\nCPU(s): 224\nOn-line CPU(s) list: 0-223\nVendor ID: GenuineIntel\nModel name: Intel(R) Xeon(R) Platinum 8480+\nCPU family: 6\nModel: 143\nThread(s) per core: 2\nCore(s) per socket: 56\nSocket(s): 2\nStepping: 8\nCPU max MHz: 3800.0000\nCPU min MHz: 800.0000\nBogoMIPS: 4000.00\nFlags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb cat_l3 cat_l2 cdp_l3 invpcid_single intel_ppin cdp_l2 ssbd mba ibrs ibpb stibp ibrs_enhanced tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid cqm rdt_a avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb intel_pt avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local split_lock_detect avx_vnni avx512_bf16 wbnoinvd dtherm ida arat pln pts hwp hwp_act_window hwp_epp hwp_pkg_req avx512vbmi umip pku ospke waitpkg avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg tme avx512_vpopcntdq la57 rdpid bus_lock_detect cldemote movdiri movdir64b enqcmd fsrm md_clear serialize tsxldtrk pconfig arch_lbr amx_bf16 avx512_fp16 amx_tile amx_int8 flush_l1d arch_capabilities\nVirtualization: VT-x\nL1d cache: 5.3 MiB (112 instances)\nL1i cache: 3.5 MiB (112 instances)\nL2 cache: 224 MiB (112 instances)\nL3 cache: 210 MiB (2 instances)\nNUMA node(s): 2\nNUMA node0 CPU(s): 0-55,112-167\nNUMA node1 CPU(s): 56-111,168-223\nVulnerability Gather data sampling: Not affected\nVulnerability Itlb multihit: Not affected\nVulnerability L1tf: Not affected\nVulnerability Mds: Not affected\nVulnerability Meltdown: Not affected\nVulnerability Mmio stale data: Not affected\nVulnerability Retbleed: Not affected\nVulnerability Spec rstack overflow: Not affected\nVulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl and seccomp\nVulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization\nVulnerability Spectre v2: Mitigation; Enhanced IBRS, IBPB conditional, RSB filling, PBRSB-eIBRS SW sequence\nVulnerability Srbds: Not affected\nVulnerability Tsx async abort: Not affected\n", + "model": "SHP", + "numactl": "", + "rank": "0", + "ranks": "1", + "runtime": "SYCL", + "target": "SHP_SYCL_GPU", + "weak-scaling": "0" + }, + "benchmarks": [ + { + "name": "Reduce_Reference/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 0, + "per_family_instance_index": 0, + "run_name": "Reduce_Reference/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 5.5441771891002475e+02, + "cpu_time": 5.5434709100000032e+02, + "time_unit": "ms", + "bytes_per_second": 7.2147766270239844e+11, + "footprint": 8.0000000000000000e+09 + }, + { + "name": "DotProduct_Reference/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 1, + "per_family_instance_index": 0, + "run_name": "DotProduct_Reference/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 2.3062339069814975e+03, + "cpu_time": 2.3054007839999995e+03, + "time_unit": "ms", + "bytes_per_second": 6.9377177881065491e+11, + "footprint": 3.2000000000000000e+10 + }, + { + "name": "Inclusive_Scan_Reference/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 2, + "per_family_instance_index": 0, + "run_name": "Inclusive_Scan_Reference/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 4.1594624510100275e+03, + "cpu_time": 4.1581149100000021e+03, + "time_unit": "ms", + "bytes_per_second": 1.9233254523207413e+11, + "footprint": 1.6000000000000000e+10 + }, + { + "name": "BlackScholes_Reference/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 3, + "per_family_instance_index": 0, + "run_name": "BlackScholes_Reference/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 2.6197639669901782e+03, + "cpu_time": 2.6190965850000011e+03, + "time_unit": "ms", + "bytes_per_second": 7.6342755500136938e+11, + "footprint": 4.0000000000000000e+10 + } + ] +} diff --git a/bench/devcloud/dr-bench-47a547f0f82c4c6e881cc3d9b04de02f.json b/bench/devcloud/dr-bench-47a547f0f82c4c6e881cc3d9b04de02f.json new file mode 100644 index 0000000000..6608d68996 --- /dev/null +++ b/bench/devcloud/dr-bench-47a547f0f82c4c6e881cc3d9b04de02f.json @@ -0,0 +1,133 @@ +{ + "context": { + "date": "2023-12-01T02:38:35-08:00", + "host_name": "idc-beta-batch-pvc-node-13", + "executable": "shp/shp-bench", + "num_cpus": 224, + "mhz_per_cpu": 3800, + "cpu_scaling_enabled": false, + "caches": [ + { + "type": "Data", + "level": 1, + "size": 49152, + "num_sharing": 2 + }, + { + "type": "Instruction", + "level": 1, + "size": 32768, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 2, + "size": 2097152, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 3, + "size": 110100480, + "num_sharing": 112 + } + ], + "load_avg": [5.06348,3.64062,44.063], + "library_build_type": "debug", + "default_repetitions": "50", + "default_vector_size": "2000000000", + "device": "GPU", + "device_info0": "Intel(R) Data Center GPU Max 1100, max_compute_units: 448", + "hostname": "idc-beta-batch-pvc-node-13\n", + "lscpu": "Architecture: x86_64\nCPU op-mode(s): 32-bit, 64-bit\nAddress sizes: 52 bits physical, 57 bits virtual\nByte Order: Little Endian\nCPU(s): 224\nOn-line CPU(s) list: 0-223\nVendor ID: GenuineIntel\nModel name: Intel(R) Xeon(R) Platinum 8480+\nCPU family: 6\nModel: 143\nThread(s) per core: 2\nCore(s) per socket: 56\nSocket(s): 2\nStepping: 8\nCPU max MHz: 3800.0000\nCPU min MHz: 800.0000\nBogoMIPS: 4000.00\nFlags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb cat_l3 cat_l2 cdp_l3 invpcid_single intel_ppin cdp_l2 ssbd mba ibrs ibpb stibp ibrs_enhanced tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid cqm rdt_a avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb intel_pt avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local split_lock_detect avx_vnni avx512_bf16 wbnoinvd dtherm ida arat pln pts hwp hwp_act_window hwp_epp hwp_pkg_req avx512vbmi umip pku ospke waitpkg avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg tme avx512_vpopcntdq la57 rdpid bus_lock_detect cldemote movdiri movdir64b enqcmd fsrm md_clear serialize tsxldtrk pconfig arch_lbr amx_bf16 avx512_fp16 amx_tile amx_int8 flush_l1d arch_capabilities\nVirtualization: VT-x\nL1d cache: 5.3 MiB (112 instances)\nL1i cache: 3.5 MiB (112 instances)\nL2 cache: 224 MiB (112 instances)\nL3 cache: 210 MiB (2 instances)\nNUMA node(s): 2\nNUMA node0 CPU(s): 0-55,112-167\nNUMA node1 CPU(s): 56-111,168-223\nVulnerability Gather data sampling: Not affected\nVulnerability Itlb multihit: Not affected\nVulnerability L1tf: Not affected\nVulnerability Mds: Not affected\nVulnerability Meltdown: Not affected\nVulnerability Mmio stale data: Not affected\nVulnerability Retbleed: Not affected\nVulnerability Spec rstack overflow: Not affected\nVulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl and seccomp\nVulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization\nVulnerability Spectre v2: Mitigation; Enhanced IBRS, IBPB conditional, RSB filling, PBRSB-eIBRS SW sequence\nVulnerability Srbds: Not affected\nVulnerability Tsx async abort: Not affected\n", + "model": "SHP", + "numactl": "", + "rank": "0", + "ranks": "1", + "runtime": "SYCL", + "target": "SHP_SYCL_GPU", + "weak-scaling": "0" + }, + "benchmarks": [ + { + "name": "Stream_Copy/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 0, + "per_family_instance_index": 0, + "run_name": "Stream_Copy/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 9.2767433704822122e+02, + "cpu_time": 3.5146409999999850e+00, + "time_unit": "ms", + "bytes_per_second": 8.6237159749996985e+11, + "footprint": 1.6000000000000000e+10 + }, + { + "name": "Stream_Scale/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 1, + "per_family_instance_index": 0, + "run_name": "Stream_Scale/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 9.3459736807634465e+02, + "cpu_time": 4.1861409999999211e+00, + "time_unit": "ms", + "bytes_per_second": 8.5598357894653333e+11, + "footprint": 1.6000000000000000e+10 + }, + { + "name": "Stream_Add/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 2, + "per_family_instance_index": 0, + "run_name": "Stream_Add/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 1.4542426809764263e+03, + "cpu_time": 4.0649390000000452e+00, + "time_unit": "ms", + "bytes_per_second": 8.2517176513776953e+11, + "footprint": 2.4000000000000000e+10 + }, + { + "name": "Stream_Triad/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 3, + "per_family_instance_index": 0, + "run_name": "Stream_Triad/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 1.4702525659040602e+03, + "cpu_time": 4.1476529999999734e+00, + "time_unit": "ms", + "bytes_per_second": 8.1618629875481189e+11, + "footprint": 2.4000000000000000e+10 + }, + { + "name": "BlackScholes_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 4, + "per_family_instance_index": 0, + "run_name": "BlackScholes_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 2.4503114609444197e+03, + "cpu_time": 4.1543390000000624e+00, + "time_unit": "ms", + "bytes_per_second": 8.1622276672906848e+11, + "footprint": 4.0000000000000000e+10 + } + ] +} diff --git a/bench/devcloud/dr-bench-4b2a5a23ba8945cb8e27660743b2b01c.json b/bench/devcloud/dr-bench-4b2a5a23ba8945cb8e27660743b2b01c.json new file mode 100644 index 0000000000..21c6060172 --- /dev/null +++ b/bench/devcloud/dr-bench-4b2a5a23ba8945cb8e27660743b2b01c.json @@ -0,0 +1,86 @@ +{ + "context": { + "date": "2023-12-01T03:06:38-08:00", + "host_name": "idc-beta-batch-pvc-node-13", + "executable": "mhp/mhp-bench", + "num_cpus": 224, + "mhz_per_cpu": 3036, + "cpu_scaling_enabled": false, + "caches": [ + { + "type": "Data", + "level": 1, + "size": 49152, + "num_sharing": 2 + }, + { + "type": "Instruction", + "level": 1, + "size": 32768, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 2, + "size": 2097152, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 3, + "size": 110100480, + "num_sharing": 112 + } + ], + "load_avg": [159.696,113.046,72.7725], + "library_build_type": "debug", + "default_repetitions": "50", + "default_vector_size": "2000000000", + "device": "CPU", + "device_info": "Intel(R) Xeon(R) Platinum 8480+, max_compute_units: 112", + "hostname": "idc-beta-batch-pvc-node-13\n", + "lscpu": "Architecture: x86_64\nCPU op-mode(s): 32-bit, 64-bit\nAddress sizes: 52 bits physical, 57 bits virtual\nByte Order: Little Endian\nCPU(s): 224\nOn-line CPU(s) list: 0-223\nVendor ID: GenuineIntel\nModel name: Intel(R) Xeon(R) Platinum 8480+\nCPU family: 6\nModel: 143\nThread(s) per core: 2\nCore(s) per socket: 56\nSocket(s): 2\nStepping: 8\nCPU max MHz: 3800.0000\nCPU min MHz: 800.0000\nBogoMIPS: 4000.00\nFlags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb cat_l3 cat_l2 cdp_l3 invpcid_single intel_ppin cdp_l2 ssbd mba ibrs ibpb stibp ibrs_enhanced tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid cqm rdt_a avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb intel_pt avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local split_lock_detect avx_vnni avx512_bf16 wbnoinvd dtherm ida arat pln pts hwp hwp_act_window hwp_epp hwp_pkg_req avx512vbmi umip pku ospke waitpkg avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg tme avx512_vpopcntdq la57 rdpid bus_lock_detect cldemote movdiri movdir64b enqcmd fsrm md_clear serialize tsxldtrk pconfig arch_lbr amx_bf16 avx512_fp16 amx_tile amx_int8 flush_l1d arch_capabilities\nVirtualization: VT-x\nL1d cache: 5.3 MiB (112 instances)\nL1i cache: 3.5 MiB (112 instances)\nL2 cache: 224 MiB (112 instances)\nL3 cache: 210 MiB (2 instances)\nNUMA node(s): 2\nNUMA node0 CPU(s): 0-55,112-167\nNUMA node1 CPU(s): 56-111,168-223\nVulnerability Gather data sampling: Not affected\nVulnerability Itlb multihit: Not affected\nVulnerability L1tf: Not affected\nVulnerability Mds: Not affected\nVulnerability Meltdown: Not affected\nVulnerability Mmio stale data: Not affected\nVulnerability Retbleed: Not affected\nVulnerability Spec rstack overflow: Not affected\nVulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl and seccomp\nVulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization\nVulnerability Spectre v2: Mitigation; Enhanced IBRS, IBPB conditional, RSB filling, PBRSB-eIBRS SW sequence\nVulnerability Srbds: Not affected\nVulnerability Tsx async abort: Not affected\n", + "model": "MHP", + "numactl": "", + "rank": "0", + "ranks": "1", + "runtime": "SYCL", + "target": "MHP_SYCL_CPU", + "weak-scaling": "0" + }, + "benchmarks": [ + { + "name": "WaveEquation_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 0, + "per_family_instance_index": 0, + "run_name": "WaveEquation_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 2.8323353646897627e+04, + "cpu_time": 2.8057506888000000e+04, + "time_unit": "ms", + "bytes_per_second": 1.2836682324157761e+11, + "flops": 2.3830474611679012e+08, + "footprint": 3.5997811200000000e+10 + }, + { + "name": "Stencil2D_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 1, + "per_family_instance_index": 0, + "run_name": "Stencil2D_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 3.2234370399226418e+03, + "cpu_time": 3.2130882019999945e+03, + "time_unit": "ms", + "bytes_per_second": 9.9272917707640289e+10, + "footprint": 3.2000000000000000e+10 + } + ] +} diff --git a/bench/devcloud/dr-bench-4d94d50f10a5440d9e71127a18ccb37f.json b/bench/devcloud/dr-bench-4d94d50f10a5440d9e71127a18ccb37f.json new file mode 100644 index 0000000000..3ffe60f234 --- /dev/null +++ b/bench/devcloud/dr-bench-4d94d50f10a5440d9e71127a18ccb37f.json @@ -0,0 +1,134 @@ +{ + "context": { + "date": "2023-12-01T02:50:19-08:00", + "host_name": "idc-beta-batch-pvc-node-13", + "executable": "mhp/mhp-bench", + "num_cpus": 224, + "mhz_per_cpu": 3675, + "cpu_scaling_enabled": false, + "caches": [ + { + "type": "Data", + "level": 1, + "size": 49152, + "num_sharing": 2 + }, + { + "type": "Instruction", + "level": 1, + "size": 32768, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 2, + "size": 2097152, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 3, + "size": 110100480, + "num_sharing": 112 + } + ], + "load_avg": [3.42627,2.70752,21.9697], + "library_build_type": "debug", + "default_repetitions": "50", + "default_vector_size": "8000000000", + "device": "GPU", + "device_info": "Intel(R) Data Center GPU Max 1100, max_compute_units: 448", + "hostname": "idc-beta-batch-pvc-node-13\n", + "lscpu": "Architecture: x86_64\nCPU op-mode(s): 32-bit, 64-bit\nAddress sizes: 52 bits physical, 57 bits virtual\nByte Order: Little Endian\nCPU(s): 224\nOn-line CPU(s) list: 0-223\nVendor ID: GenuineIntel\nModel name: Intel(R) Xeon(R) Platinum 8480+\nCPU family: 6\nModel: 143\nThread(s) per core: 2\nCore(s) per socket: 56\nSocket(s): 2\nStepping: 8\nCPU max MHz: 3800.0000\nCPU min MHz: 800.0000\nBogoMIPS: 4000.00\nFlags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb cat_l3 cat_l2 cdp_l3 invpcid_single intel_ppin cdp_l2 ssbd mba ibrs ibpb stibp ibrs_enhanced tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid cqm rdt_a avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb intel_pt avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local split_lock_detect avx_vnni avx512_bf16 wbnoinvd dtherm ida arat pln pts hwp hwp_act_window hwp_epp hwp_pkg_req avx512vbmi umip pku ospke waitpkg avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg tme avx512_vpopcntdq la57 rdpid bus_lock_detect cldemote movdiri movdir64b enqcmd fsrm md_clear serialize tsxldtrk pconfig arch_lbr amx_bf16 avx512_fp16 amx_tile amx_int8 flush_l1d arch_capabilities\nVirtualization: VT-x\nL1d cache: 5.3 MiB (112 instances)\nL1i cache: 3.5 MiB (112 instances)\nL2 cache: 224 MiB (112 instances)\nL3 cache: 210 MiB (2 instances)\nNUMA node(s): 2\nNUMA node0 CPU(s): 0-55,112-167\nNUMA node1 CPU(s): 56-111,168-223\nVulnerability Gather data sampling: Not affected\nVulnerability Itlb multihit: Not affected\nVulnerability L1tf: Not affected\nVulnerability Mds: Not affected\nVulnerability Meltdown: Not affected\nVulnerability Mmio stale data: Not affected\nVulnerability Retbleed: Not affected\nVulnerability Spec rstack overflow: Not affected\nVulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl and seccomp\nVulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization\nVulnerability Spectre v2: Mitigation; Enhanced IBRS, IBPB conditional, RSB filling, PBRSB-eIBRS SW sequence\nVulnerability Srbds: Not affected\nVulnerability Tsx async abort: Not affected\n", + "model": "MHP", + "numactl": "", + "rank": "0", + "ranks": "4", + "runtime": "SYCL", + "target": "MHP_SYCL_GPU", + "weak-scaling": "1" + }, + "benchmarks": [ + { + "name": "Reduce_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 0, + "per_family_instance_index": 0, + "run_name": "Reduce_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 5.6175510802643703e+02, + "cpu_time": 5.6174769899999785e+02, + "time_unit": "ms", + "bytes_per_second": 2.8482162015778262e+12, + "footprint": 8.0000000000000000e+09 + }, + { + "name": "DotProduct_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 1, + "per_family_instance_index": 0, + "run_name": "DotProduct_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 2.3643713110717772e+03, + "cpu_time": 2.3643595180000007e+03, + "time_unit": "ms", + "bytes_per_second": 2.7068506414497388e+12, + "footprint": 3.2000000000000000e+10 + }, + { + "name": "Inclusive_Scan_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 2, + "per_family_instance_index": 0, + "run_name": "Inclusive_Scan_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 5.1494293889559958e+03, + "cpu_time": 5.1441228399999945e+03, + "time_unit": "ms", + "bytes_per_second": 6.2142807645116064e+11, + "footprint": 1.6000000000000000e+10 + }, + { + "name": "WaveEquation_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 3, + "per_family_instance_index": 0, + "run_name": "WaveEquation_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 9.2204183599029802e+03, + "cpu_time": 8.9897945809999983e+03, + "time_unit": "ms", + "bytes_per_second": 1.5772728695309468e+12, + "flops": 2.9281055746242824e+09, + "footprint": 3.5997811200000000e+10 + }, + { + "name": "Stencil2D_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 4, + "per_family_instance_index": 0, + "run_name": "Stencil2D_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 5.1413105293202989e+02, + "cpu_time": 5.1167924599999992e+02, + "time_unit": "ms", + "bytes_per_second": 2.4896375986245303e+12, + "footprint": 3.2000000000000000e+10 + } + ] +} diff --git a/bench/devcloud/dr-bench-504b793dae8f487da53338f4c4375989.json b/bench/devcloud/dr-bench-504b793dae8f487da53338f4c4375989.json new file mode 100644 index 0000000000..09d72ea72d --- /dev/null +++ b/bench/devcloud/dr-bench-504b793dae8f487da53338f4c4375989.json @@ -0,0 +1,182 @@ +{ + "context": { + "date": "2023-12-01T03:03:48-08:00", + "host_name": "idc-beta-batch-pvc-node-13", + "executable": "shp/shp-bench", + "num_cpus": 224, + "mhz_per_cpu": 3777, + "cpu_scaling_enabled": false, + "caches": [ + { + "type": "Data", + "level": 1, + "size": 49152, + "num_sharing": 2 + }, + { + "type": "Instruction", + "level": 1, + "size": 32768, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 2, + "size": 2097152, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 3, + "size": 110100480, + "num_sharing": 112 + } + ], + "load_avg": [112.497,100.962,62.8032], + "library_build_type": "debug", + "default_repetitions": "50", + "default_vector_size": "2000000000", + "device": "CPU", + "device_info0": "Intel(R) Xeon(R) Platinum 8480+, max_compute_units: 112", + "device_info1": "Intel(R) Xeon(R) Platinum 8480+, max_compute_units: 112", + "hostname": "idc-beta-batch-pvc-node-13\n", + "lscpu": "Architecture: x86_64\nCPU op-mode(s): 32-bit, 64-bit\nAddress sizes: 52 bits physical, 57 bits virtual\nByte Order: Little Endian\nCPU(s): 224\nOn-line CPU(s) list: 0-223\nVendor ID: GenuineIntel\nModel name: Intel(R) Xeon(R) Platinum 8480+\nCPU family: 6\nModel: 143\nThread(s) per core: 2\nCore(s) per socket: 56\nSocket(s): 2\nStepping: 8\nCPU max MHz: 3800.0000\nCPU min MHz: 800.0000\nBogoMIPS: 4000.00\nFlags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb cat_l3 cat_l2 cdp_l3 invpcid_single intel_ppin cdp_l2 ssbd mba ibrs ibpb stibp ibrs_enhanced tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid cqm rdt_a avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb intel_pt avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local split_lock_detect avx_vnni avx512_bf16 wbnoinvd dtherm ida arat pln pts hwp hwp_act_window hwp_epp hwp_pkg_req avx512vbmi umip pku ospke waitpkg avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg tme avx512_vpopcntdq la57 rdpid bus_lock_detect cldemote movdiri movdir64b enqcmd fsrm md_clear serialize tsxldtrk pconfig arch_lbr amx_bf16 avx512_fp16 amx_tile amx_int8 flush_l1d arch_capabilities\nVirtualization: VT-x\nL1d cache: 5.3 MiB (112 instances)\nL1i cache: 3.5 MiB (112 instances)\nL2 cache: 224 MiB (112 instances)\nL3 cache: 210 MiB (2 instances)\nNUMA node(s): 2\nNUMA node0 CPU(s): 0-55,112-167\nNUMA node1 CPU(s): 56-111,168-223\nVulnerability Gather data sampling: Not affected\nVulnerability Itlb multihit: Not affected\nVulnerability L1tf: Not affected\nVulnerability Mds: Not affected\nVulnerability Meltdown: Not affected\nVulnerability Mmio stale data: Not affected\nVulnerability Retbleed: Not affected\nVulnerability Spec rstack overflow: Not affected\nVulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl and seccomp\nVulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization\nVulnerability Spectre v2: Mitigation; Enhanced IBRS, IBPB conditional, RSB filling, PBRSB-eIBRS SW sequence\nVulnerability Srbds: Not affected\nVulnerability Tsx async abort: Not affected\n", + "model": "SHP", + "numactl": "", + "rank": "0", + "ranks": "2", + "runtime": "SYCL", + "target": "SHP_SYCL_CPU", + "weak-scaling": "0" + }, + "benchmarks": [ + { + "name": "Reduce_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 0, + "per_family_instance_index": 0, + "run_name": "Reduce_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 1.5048122539442868e+03, + "cpu_time": 9.6845947799999976e+02, + "time_unit": "ms", + "bytes_per_second": 2.6581389070400894e+11, + "footprint": 4.0000000000000000e+09 + }, + { + "name": "DotProduct_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 1, + "per_family_instance_index": 0, + "run_name": "DotProduct_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 5.0602420900029492e+03, + "cpu_time": 3.7317751040000003e+03, + "time_unit": "ms", + "bytes_per_second": 3.1619040582286987e+11, + "footprint": 1.6000000000000000e+10 + }, + { + "name": "Inclusive_Scan_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 2, + "per_family_instance_index": 0, + "run_name": "Inclusive_Scan_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 1.0485001341903724e+04, + "cpu_time": 6.1815530639999988e+03, + "time_unit": "ms", + "bytes_per_second": 7.6299465676057495e+10, + "footprint": 8.0000000000000000e+09 + }, + { + "name": "Stream_Copy/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 3, + "per_family_instance_index": 0, + "run_name": "Stream_Copy/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 3.1075174429734507e+03, + "cpu_time": 7.7651490000008039e+00, + "time_unit": "ms", + "bytes_per_second": 2.5744022831116086e+11, + "footprint": 8.0000000000000000e+09 + }, + { + "name": "Stream_Scale/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 4, + "per_family_instance_index": 0, + "run_name": "Stream_Scale/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 3.1934110898864596e+03, + "cpu_time": 7.9798829999973009e+00, + "time_unit": "ms", + "bytes_per_second": 2.5051582069518134e+11, + "footprint": 8.0000000000000000e+09 + }, + { + "name": "Stream_Add/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 5, + "per_family_instance_index": 0, + "run_name": "Stream_Add/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 4.3504073669151376e+03, + "cpu_time": 7.4055979999982924e+00, + "time_unit": "ms", + "bytes_per_second": 2.7583623757306128e+11, + "footprint": 1.2000000000000000e+10 + }, + { + "name": "Stream_Triad/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 6, + "per_family_instance_index": 0, + "run_name": "Stream_Triad/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 4.2855591999695043e+03, + "cpu_time": 9.0602880000005825e+00, + "time_unit": "ms", + "bytes_per_second": 2.8001013263532544e+11, + "footprint": 1.2000000000000000e+10 + }, + { + "name": "BlackScholes_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 7, + "per_family_instance_index": 0, + "run_name": "BlackScholes_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 2.0143088417085510e+04, + "cpu_time": 1.3105503000005569e+01, + "time_unit": "ms", + "bytes_per_second": 9.9289640128054352e+10, + "footprint": 2.0000000000000000e+10 + } + ] +} diff --git a/bench/devcloud/dr-bench-5855e60fafe3432297c3267e8844b853.json b/bench/devcloud/dr-bench-5855e60fafe3432297c3267e8844b853.json new file mode 100644 index 0000000000..80d2dce5be --- /dev/null +++ b/bench/devcloud/dr-bench-5855e60fafe3432297c3267e8844b853.json @@ -0,0 +1,136 @@ +{ + "context": { + "date": "2023-12-01T02:39:12-08:00", + "host_name": "idc-beta-batch-pvc-node-13", + "executable": "shp/shp-bench", + "num_cpus": 224, + "mhz_per_cpu": 3798, + "cpu_scaling_enabled": false, + "caches": [ + { + "type": "Data", + "level": 1, + "size": 49152, + "num_sharing": 2 + }, + { + "type": "Instruction", + "level": 1, + "size": 32768, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 2, + "size": 2097152, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 3, + "size": 110100480, + "num_sharing": 112 + } + ], + "load_avg": [3.21729,3.33203,42.4629], + "library_build_type": "debug", + "default_repetitions": "50", + "default_vector_size": "2000000000", + "device": "GPU", + "device_info0": "Intel(R) Data Center GPU Max 1100, max_compute_units: 448", + "device_info1": "Intel(R) Data Center GPU Max 1100, max_compute_units: 448", + "device_info2": "Intel(R) Data Center GPU Max 1100, max_compute_units: 448", + "device_info3": "Intel(R) Data Center GPU Max 1100, max_compute_units: 448", + "hostname": "idc-beta-batch-pvc-node-13\n", + "lscpu": "Architecture: x86_64\nCPU op-mode(s): 32-bit, 64-bit\nAddress sizes: 52 bits physical, 57 bits virtual\nByte Order: Little Endian\nCPU(s): 224\nOn-line CPU(s) list: 0-223\nVendor ID: GenuineIntel\nModel name: Intel(R) Xeon(R) Platinum 8480+\nCPU family: 6\nModel: 143\nThread(s) per core: 2\nCore(s) per socket: 56\nSocket(s): 2\nStepping: 8\nCPU max MHz: 3800.0000\nCPU min MHz: 800.0000\nBogoMIPS: 4000.00\nFlags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb cat_l3 cat_l2 cdp_l3 invpcid_single intel_ppin cdp_l2 ssbd mba ibrs ibpb stibp ibrs_enhanced tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid cqm rdt_a avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb intel_pt avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local split_lock_detect avx_vnni avx512_bf16 wbnoinvd dtherm ida arat pln pts hwp hwp_act_window hwp_epp hwp_pkg_req avx512vbmi umip pku ospke waitpkg avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg tme avx512_vpopcntdq la57 rdpid bus_lock_detect cldemote movdiri movdir64b enqcmd fsrm md_clear serialize tsxldtrk pconfig arch_lbr amx_bf16 avx512_fp16 amx_tile amx_int8 flush_l1d arch_capabilities\nVirtualization: VT-x\nL1d cache: 5.3 MiB (112 instances)\nL1i cache: 3.5 MiB (112 instances)\nL2 cache: 224 MiB (112 instances)\nL3 cache: 210 MiB (2 instances)\nNUMA node(s): 2\nNUMA node0 CPU(s): 0-55,112-167\nNUMA node1 CPU(s): 56-111,168-223\nVulnerability Gather data sampling: Not affected\nVulnerability Itlb multihit: Not affected\nVulnerability L1tf: Not affected\nVulnerability Mds: Not affected\nVulnerability Meltdown: Not affected\nVulnerability Mmio stale data: Not affected\nVulnerability Retbleed: Not affected\nVulnerability Spec rstack overflow: Not affected\nVulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl and seccomp\nVulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization\nVulnerability Spectre v2: Mitigation; Enhanced IBRS, IBPB conditional, RSB filling, PBRSB-eIBRS SW sequence\nVulnerability Srbds: Not affected\nVulnerability Tsx async abort: Not affected\n", + "model": "SHP", + "numactl": "", + "rank": "0", + "ranks": "4", + "runtime": "SYCL", + "target": "SHP_SYCL_GPU", + "weak-scaling": "0" + }, + "benchmarks": [ + { + "name": "Stream_Copy/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 0, + "per_family_instance_index": 0, + "run_name": "Stream_Copy/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 2.3325329298617777e+02, + "cpu_time": 1.9933230000002133e+00, + "time_unit": "ms", + "bytes_per_second": 3.4297479352088149e+12, + "footprint": 4.0000000000000000e+09 + }, + { + "name": "Stream_Scale/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 1, + "per_family_instance_index": 0, + "run_name": "Stream_Scale/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 2.3419590093052662e+02, + "cpu_time": 1.8998169999999703e+00, + "time_unit": "ms", + "bytes_per_second": 3.4159436472686904e+12, + "footprint": 4.0000000000000000e+09 + }, + { + "name": "Stream_Add/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 2, + "per_family_instance_index": 0, + "run_name": "Stream_Add/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 3.6309831208078140e+02, + "cpu_time": 2.2632049999997683e+00, + "time_unit": "ms", + "bytes_per_second": 3.3048900533942065e+12, + "footprint": 6.0000000000000000e+09 + }, + { + "name": "Stream_Triad/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 3, + "per_family_instance_index": 0, + "run_name": "Stream_Triad/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 3.6253453299445562e+02, + "cpu_time": 2.3339540000000270e+00, + "time_unit": "ms", + "bytes_per_second": 3.3100295028125010e+12, + "footprint": 6.0000000000000000e+09 + }, + { + "name": "BlackScholes_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 4, + "per_family_instance_index": 0, + "run_name": "BlackScholes_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 6.1424283089181984e+02, + "cpu_time": 5.8677320000000144e+00, + "time_unit": "ms", + "bytes_per_second": 3.2560412583020264e+12, + "footprint": 1.0000000000000000e+10 + } + ] +} diff --git a/bench/devcloud/dr-bench-60577e0e78d947eea41d9663ea0e3669.json b/bench/devcloud/dr-bench-60577e0e78d947eea41d9663ea0e3669.json new file mode 100644 index 0000000000..f577cadc74 --- /dev/null +++ b/bench/devcloud/dr-bench-60577e0e78d947eea41d9663ea0e3669.json @@ -0,0 +1,134 @@ +{ + "context": { + "date": "2023-12-01T02:45:01-08:00", + "host_name": "idc-beta-batch-pvc-node-13", + "executable": "mhp/mhp-bench", + "num_cpus": 224, + "mhz_per_cpu": 3778, + "cpu_scaling_enabled": false, + "caches": [ + { + "type": "Data", + "level": 1, + "size": 49152, + "num_sharing": 2 + }, + { + "type": "Instruction", + "level": 1, + "size": 32768, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 2, + "size": 2097152, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 3, + "size": 110100480, + "num_sharing": 112 + } + ], + "load_avg": [2.76758,2.58887,29.791], + "library_build_type": "debug", + "default_repetitions": "50", + "default_vector_size": "2000000000", + "device": "GPU", + "device_info": "Intel(R) Data Center GPU Max 1100, max_compute_units: 448", + "hostname": "idc-beta-batch-pvc-node-13\n", + "lscpu": "Architecture: x86_64\nCPU op-mode(s): 32-bit, 64-bit\nAddress sizes: 52 bits physical, 57 bits virtual\nByte Order: Little Endian\nCPU(s): 224\nOn-line CPU(s) list: 0-223\nVendor ID: GenuineIntel\nModel name: Intel(R) Xeon(R) Platinum 8480+\nCPU family: 6\nModel: 143\nThread(s) per core: 2\nCore(s) per socket: 56\nSocket(s): 2\nStepping: 8\nCPU max MHz: 3800.0000\nCPU min MHz: 800.0000\nBogoMIPS: 4000.00\nFlags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb cat_l3 cat_l2 cdp_l3 invpcid_single intel_ppin cdp_l2 ssbd mba ibrs ibpb stibp ibrs_enhanced tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid cqm rdt_a avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb intel_pt avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local split_lock_detect avx_vnni avx512_bf16 wbnoinvd dtherm ida arat pln pts hwp hwp_act_window hwp_epp hwp_pkg_req avx512vbmi umip pku ospke waitpkg avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg tme avx512_vpopcntdq la57 rdpid bus_lock_detect cldemote movdiri movdir64b enqcmd fsrm md_clear serialize tsxldtrk pconfig arch_lbr amx_bf16 avx512_fp16 amx_tile amx_int8 flush_l1d arch_capabilities\nVirtualization: VT-x\nL1d cache: 5.3 MiB (112 instances)\nL1i cache: 3.5 MiB (112 instances)\nL2 cache: 224 MiB (112 instances)\nL3 cache: 210 MiB (2 instances)\nNUMA node(s): 2\nNUMA node0 CPU(s): 0-55,112-167\nNUMA node1 CPU(s): 56-111,168-223\nVulnerability Gather data sampling: Not affected\nVulnerability Itlb multihit: Not affected\nVulnerability L1tf: Not affected\nVulnerability Mds: Not affected\nVulnerability Meltdown: Not affected\nVulnerability Mmio stale data: Not affected\nVulnerability Retbleed: Not affected\nVulnerability Spec rstack overflow: Not affected\nVulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl and seccomp\nVulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization\nVulnerability Spectre v2: Mitigation; Enhanced IBRS, IBPB conditional, RSB filling, PBRSB-eIBRS SW sequence\nVulnerability Srbds: Not affected\nVulnerability Tsx async abort: Not affected\n", + "model": "MHP", + "numactl": "", + "rank": "0", + "ranks": "4", + "runtime": "SYCL", + "target": "MHP_SYCL_GPU", + "weak-scaling": "0" + }, + "benchmarks": [ + { + "name": "Reduce_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 0, + "per_family_instance_index": 0, + "run_name": "Reduce_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 1.4087592093710325e+02, + "cpu_time": 1.4087091599999991e+02, + "time_unit": "ms", + "bytes_per_second": 2.8393780664517373e+12, + "footprint": 2.0000000000000000e+09 + }, + { + "name": "DotProduct_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 1, + "per_family_instance_index": 0, + "run_name": "DotProduct_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 5.9309943610959851e+02, + "cpu_time": 5.9309413599999948e+02, + "time_unit": "ms", + "bytes_per_second": 2.6976926676833613e+12, + "footprint": 8.0000000000000000e+09 + }, + { + "name": "Inclusive_Scan_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 2, + "per_family_instance_index": 0, + "run_name": "Inclusive_Scan_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 1.3147923870565719e+03, + "cpu_time": 1.3117010009999995e+03, + "time_unit": "ms", + "bytes_per_second": 6.0846108319121130e+11, + "footprint": 4.0000000000000000e+09 + }, + { + "name": "WaveEquation_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 3, + "per_family_instance_index": 0, + "run_name": "WaveEquation_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 2.5449880020658366e+03, + "cpu_time": 2.4650086589999987e+03, + "time_unit": "ms", + "bytes_per_second": 1.4286035644367434e+12, + "flops": 2.6521105775434594e+09, + "footprint": 8.9994528000000000e+09 + }, + { + "name": "Stencil2D_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 4, + "per_family_instance_index": 0, + "run_name": "Stencil2D_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 1.3530595807127114e+02, + "cpu_time": 1.3452668200000062e+02, + "time_unit": "ms", + "bytes_per_second": 2.3650104146296577e+12, + "footprint": 8.0000000000000000e+09 + } + ] +} diff --git a/bench/devcloud/dr-bench-6250900504ea40ecaedc31dd2cb5825f.json b/bench/devcloud/dr-bench-6250900504ea40ecaedc31dd2cb5825f.json new file mode 100644 index 0000000000..c8e63f9b4a --- /dev/null +++ b/bench/devcloud/dr-bench-6250900504ea40ecaedc31dd2cb5825f.json @@ -0,0 +1,133 @@ +{ + "context": { + "date": "2023-12-01T02:41:43-08:00", + "host_name": "idc-beta-batch-pvc-node-13", + "executable": "mhp/mhp-bench", + "num_cpus": 224, + "mhz_per_cpu": 3590, + "cpu_scaling_enabled": false, + "caches": [ + { + "type": "Data", + "level": 1, + "size": 49152, + "num_sharing": 2 + }, + { + "type": "Instruction", + "level": 1, + "size": 32768, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 2, + "size": 2097152, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 3, + "size": 110100480, + "num_sharing": 112 + } + ], + "load_avg": [2.44043,2.79443,36.4048], + "library_build_type": "debug", + "default_repetitions": "50", + "default_vector_size": "2000000000", + "device": "GPU", + "device_info": "Intel(R) Data Center GPU Max 1100, max_compute_units: 448", + "hostname": "idc-beta-batch-pvc-node-13\n", + "lscpu": "Architecture: x86_64\nCPU op-mode(s): 32-bit, 64-bit\nAddress sizes: 52 bits physical, 57 bits virtual\nByte Order: Little Endian\nCPU(s): 224\nOn-line CPU(s) list: 0-223\nVendor ID: GenuineIntel\nModel name: Intel(R) Xeon(R) Platinum 8480+\nCPU family: 6\nModel: 143\nThread(s) per core: 2\nCore(s) per socket: 56\nSocket(s): 2\nStepping: 8\nCPU max MHz: 3800.0000\nCPU min MHz: 800.0000\nBogoMIPS: 4000.00\nFlags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb cat_l3 cat_l2 cdp_l3 invpcid_single intel_ppin cdp_l2 ssbd mba ibrs ibpb stibp ibrs_enhanced tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid cqm rdt_a avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb intel_pt avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local split_lock_detect avx_vnni avx512_bf16 wbnoinvd dtherm ida arat pln pts hwp hwp_act_window hwp_epp hwp_pkg_req avx512vbmi umip pku ospke waitpkg avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg tme avx512_vpopcntdq la57 rdpid bus_lock_detect cldemote movdiri movdir64b enqcmd fsrm md_clear serialize tsxldtrk pconfig arch_lbr amx_bf16 avx512_fp16 amx_tile amx_int8 flush_l1d arch_capabilities\nVirtualization: VT-x\nL1d cache: 5.3 MiB (112 instances)\nL1i cache: 3.5 MiB (112 instances)\nL2 cache: 224 MiB (112 instances)\nL3 cache: 210 MiB (2 instances)\nNUMA node(s): 2\nNUMA node0 CPU(s): 0-55,112-167\nNUMA node1 CPU(s): 56-111,168-223\nVulnerability Gather data sampling: Not affected\nVulnerability Itlb multihit: Not affected\nVulnerability L1tf: Not affected\nVulnerability Mds: Not affected\nVulnerability Meltdown: Not affected\nVulnerability Mmio stale data: Not affected\nVulnerability Retbleed: Not affected\nVulnerability Spec rstack overflow: Not affected\nVulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl and seccomp\nVulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization\nVulnerability Spectre v2: Mitigation; Enhanced IBRS, IBPB conditional, RSB filling, PBRSB-eIBRS SW sequence\nVulnerability Srbds: Not affected\nVulnerability Tsx async abort: Not affected\n", + "model": "MHP", + "numactl": "", + "rank": "0", + "ranks": "4", + "runtime": "SYCL", + "target": "MHP_SYCL_GPU", + "weak-scaling": "0" + }, + "benchmarks": [ + { + "name": "Stream_Copy/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 0, + "per_family_instance_index": 0, + "run_name": "Stream_Copy/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 2.3363383195950294e+02, + "cpu_time": 4.0231070000000813e+00, + "time_unit": "ms", + "bytes_per_second": 3.4241616177346631e+12, + "footprint": 4.0000000000000000e+09 + }, + { + "name": "Stream_Scale/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 1, + "per_family_instance_index": 0, + "run_name": "Stream_Scale/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 2.3287898110275810e+02, + "cpu_time": 5.4413149999996691e+00, + "time_unit": "ms", + "bytes_per_second": 3.4352606500240532e+12, + "footprint": 4.0000000000000000e+09 + }, + { + "name": "Stream_Add/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 2, + "per_family_instance_index": 0, + "run_name": "Stream_Add/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 3.7361330898735730e+02, + "cpu_time": 6.2352160000003209e+00, + "time_unit": "ms", + "bytes_per_second": 3.2118770159780547e+12, + "footprint": 6.0000000000000000e+09 + }, + { + "name": "Stream_Triad/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 3, + "per_family_instance_index": 0, + "run_name": "Stream_Triad/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 3.7350632600031844e+02, + "cpu_time": 7.7625230000002432e+00, + "time_unit": "ms", + "bytes_per_second": 3.2127969902147710e+12, + "footprint": 6.0000000000000000e+09 + }, + { + "name": "BlackScholes_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 4, + "per_family_instance_index": 0, + "run_name": "BlackScholes_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 6.6721946799791203e+02, + "cpu_time": 3.6261122000000867e+01, + "time_unit": "ms", + "bytes_per_second": 2.9975144550282500e+12, + "footprint": 1.0000000000000000e+10 + } + ] +} diff --git a/bench/devcloud/dr-bench-66fbf2f1650d4e3f925b6bf0688b7b84.json b/bench/devcloud/dr-bench-66fbf2f1650d4e3f925b6bf0688b7b84.json new file mode 100644 index 0000000000..dd0e715d99 --- /dev/null +++ b/bench/devcloud/dr-bench-66fbf2f1650d4e3f925b6bf0688b7b84.json @@ -0,0 +1,134 @@ +{ + "context": { + "date": "2023-12-01T02:38:53-08:00", + "host_name": "idc-beta-batch-pvc-node-13", + "executable": "shp/shp-bench", + "num_cpus": 224, + "mhz_per_cpu": 3691, + "cpu_scaling_enabled": false, + "caches": [ + { + "type": "Data", + "level": 1, + "size": 49152, + "num_sharing": 2 + }, + { + "type": "Instruction", + "level": 1, + "size": 32768, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 2, + "size": 2097152, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 3, + "size": 110100480, + "num_sharing": 112 + } + ], + "load_avg": [4.08936,3.49414,43.3667], + "library_build_type": "debug", + "default_repetitions": "50", + "default_vector_size": "2000000000", + "device": "GPU", + "device_info0": "Intel(R) Data Center GPU Max 1100, max_compute_units: 448", + "device_info1": "Intel(R) Data Center GPU Max 1100, max_compute_units: 448", + "hostname": "idc-beta-batch-pvc-node-13\n", + "lscpu": "Architecture: x86_64\nCPU op-mode(s): 32-bit, 64-bit\nAddress sizes: 52 bits physical, 57 bits virtual\nByte Order: Little Endian\nCPU(s): 224\nOn-line CPU(s) list: 0-223\nVendor ID: GenuineIntel\nModel name: Intel(R) Xeon(R) Platinum 8480+\nCPU family: 6\nModel: 143\nThread(s) per core: 2\nCore(s) per socket: 56\nSocket(s): 2\nStepping: 8\nCPU max MHz: 3800.0000\nCPU min MHz: 800.0000\nBogoMIPS: 4000.00\nFlags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb cat_l3 cat_l2 cdp_l3 invpcid_single intel_ppin cdp_l2 ssbd mba ibrs ibpb stibp ibrs_enhanced tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid cqm rdt_a avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb intel_pt avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local split_lock_detect avx_vnni avx512_bf16 wbnoinvd dtherm ida arat pln pts hwp hwp_act_window hwp_epp hwp_pkg_req avx512vbmi umip pku ospke waitpkg avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg tme avx512_vpopcntdq la57 rdpid bus_lock_detect cldemote movdiri movdir64b enqcmd fsrm md_clear serialize tsxldtrk pconfig arch_lbr amx_bf16 avx512_fp16 amx_tile amx_int8 flush_l1d arch_capabilities\nVirtualization: VT-x\nL1d cache: 5.3 MiB (112 instances)\nL1i cache: 3.5 MiB (112 instances)\nL2 cache: 224 MiB (112 instances)\nL3 cache: 210 MiB (2 instances)\nNUMA node(s): 2\nNUMA node0 CPU(s): 0-55,112-167\nNUMA node1 CPU(s): 56-111,168-223\nVulnerability Gather data sampling: Not affected\nVulnerability Itlb multihit: Not affected\nVulnerability L1tf: Not affected\nVulnerability Mds: Not affected\nVulnerability Meltdown: Not affected\nVulnerability Mmio stale data: Not affected\nVulnerability Retbleed: Not affected\nVulnerability Spec rstack overflow: Not affected\nVulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl and seccomp\nVulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization\nVulnerability Spectre v2: Mitigation; Enhanced IBRS, IBPB conditional, RSB filling, PBRSB-eIBRS SW sequence\nVulnerability Srbds: Not affected\nVulnerability Tsx async abort: Not affected\n", + "model": "SHP", + "numactl": "", + "rank": "0", + "ranks": "2", + "runtime": "SYCL", + "target": "SHP_SYCL_GPU", + "weak-scaling": "0" + }, + "benchmarks": [ + { + "name": "Stream_Copy/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 0, + "per_family_instance_index": 0, + "run_name": "Stream_Copy/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 4.7125676499661682e+02, + "cpu_time": 2.3728100000000030e+00, + "time_unit": "ms", + "bytes_per_second": 1.6975883624837581e+12, + "footprint": 8.0000000000000000e+09 + }, + { + "name": "Stream_Scale/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 1, + "per_family_instance_index": 0, + "run_name": "Stream_Scale/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 4.7019346299559152e+02, + "cpu_time": 3.0029430000000357e+00, + "time_unit": "ms", + "bytes_per_second": 1.7014273122880500e+12, + "footprint": 8.0000000000000000e+09 + }, + { + "name": "Stream_Add/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 2, + "per_family_instance_index": 0, + "run_name": "Stream_Add/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 7.2705783096899427e+02, + "cpu_time": 4.7765499999998795e+00, + "time_unit": "ms", + "bytes_per_second": 1.6504876900929421e+12, + "footprint": 1.2000000000000000e+10 + }, + { + "name": "Stream_Triad/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 3, + "per_family_instance_index": 0, + "run_name": "Stream_Triad/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 7.2930800494220853e+02, + "cpu_time": 4.4668640000000703e+00, + "time_unit": "ms", + "bytes_per_second": 1.6453953499318713e+12, + "footprint": 1.2000000000000000e+10 + }, + { + "name": "BlackScholes_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 4, + "per_family_instance_index": 0, + "run_name": "BlackScholes_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 1.3184490349126627e+03, + "cpu_time": 4.6986640000001856e+00, + "time_unit": "ms", + "bytes_per_second": 1.5169338723301389e+12, + "footprint": 2.0000000000000000e+10 + } + ] +} diff --git a/bench/devcloud/dr-bench-7800cee608ec44d699f9a435db3e65f1.json b/bench/devcloud/dr-bench-7800cee608ec44d699f9a435db3e65f1.json new file mode 100644 index 0000000000..27ef186248 --- /dev/null +++ b/bench/devcloud/dr-bench-7800cee608ec44d699f9a435db3e65f1.json @@ -0,0 +1,69 @@ +{ + "context": { + "date": "2023-12-01T03:11:20-08:00", + "host_name": "idc-beta-batch-pvc-node-13", + "executable": "mhp/mhp-bench", + "num_cpus": 224, + "mhz_per_cpu": 3782, + "cpu_scaling_enabled": false, + "caches": [ + { + "type": "Data", + "level": 1, + "size": 49152, + "num_sharing": 2 + }, + { + "type": "Instruction", + "level": 1, + "size": 32768, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 2, + "size": 2097152, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 3, + "size": 110100480, + "num_sharing": 112 + } + ], + "load_avg": [107.614,107.566,80.9629], + "library_build_type": "debug", + "default_repetitions": "50", + "default_vector_size": "2000000000", + "device": "CPU", + "device_info": "Intel(R) Xeon(R) Platinum 8480+, max_compute_units: 112", + "hostname": "idc-beta-batch-pvc-node-13\n", + "lscpu": "Architecture: x86_64\nCPU op-mode(s): 32-bit, 64-bit\nAddress sizes: 52 bits physical, 57 bits virtual\nByte Order: Little Endian\nCPU(s): 224\nOn-line CPU(s) list: 0-223\nVendor ID: GenuineIntel\nModel name: Intel(R) Xeon(R) Platinum 8480+\nCPU family: 6\nModel: 143\nThread(s) per core: 2\nCore(s) per socket: 56\nSocket(s): 2\nStepping: 8\nCPU max MHz: 3800.0000\nCPU min MHz: 800.0000\nBogoMIPS: 4000.00\nFlags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb cat_l3 cat_l2 cdp_l3 invpcid_single intel_ppin cdp_l2 ssbd mba ibrs ibpb stibp ibrs_enhanced tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid cqm rdt_a avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb intel_pt avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local split_lock_detect avx_vnni avx512_bf16 wbnoinvd dtherm ida arat pln pts hwp hwp_act_window hwp_epp hwp_pkg_req avx512vbmi umip pku ospke waitpkg avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg tme avx512_vpopcntdq la57 rdpid bus_lock_detect cldemote movdiri movdir64b enqcmd fsrm md_clear serialize tsxldtrk pconfig arch_lbr amx_bf16 avx512_fp16 amx_tile amx_int8 flush_l1d arch_capabilities\nVirtualization: VT-x\nL1d cache: 5.3 MiB (112 instances)\nL1i cache: 3.5 MiB (112 instances)\nL2 cache: 224 MiB (112 instances)\nL3 cache: 210 MiB (2 instances)\nNUMA node(s): 2\nNUMA node0 CPU(s): 0-55,112-167\nNUMA node1 CPU(s): 56-111,168-223\nVulnerability Gather data sampling: Not affected\nVulnerability Itlb multihit: Not affected\nVulnerability L1tf: Not affected\nVulnerability Mds: Not affected\nVulnerability Meltdown: Not affected\nVulnerability Mmio stale data: Not affected\nVulnerability Retbleed: Not affected\nVulnerability Spec rstack overflow: Not affected\nVulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl and seccomp\nVulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization\nVulnerability Spectre v2: Mitigation; Enhanced IBRS, IBPB conditional, RSB filling, PBRSB-eIBRS SW sequence\nVulnerability Srbds: Not affected\nVulnerability Tsx async abort: Not affected\n", + "model": "MHP", + "numactl": "", + "rank": "0", + "ranks": "1", + "runtime": "SYCL", + "target": "MHP_SYCL_CPU", + "weak-scaling": "0" + }, + "benchmarks": [ + { + "name": "Stencil2D_Reference/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 0, + "per_family_instance_index": 0, + "run_name": "Stencil2D_Reference/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 3.1855799399601656e+03, + "cpu_time": 3.1803619880000006e+03, + "time_unit": "ms", + "bytes_per_second": 1.0045266671411847e+11, + "footprint": 3.2000000000000000e+10 + } + ] +} diff --git a/bench/devcloud/dr-bench-7ca861e4d8f5486aa6185066cfd7d4b0.json b/bench/devcloud/dr-bench-7ca861e4d8f5486aa6185066cfd7d4b0.json new file mode 100644 index 0000000000..a6da798e9c --- /dev/null +++ b/bench/devcloud/dr-bench-7ca861e4d8f5486aa6185066cfd7d4b0.json @@ -0,0 +1,134 @@ +{ + "context": { + "date": "2023-12-01T02:45:33-08:00", + "host_name": "idc-beta-batch-pvc-node-13", + "executable": "mhp/mhp-bench", + "num_cpus": 224, + "mhz_per_cpu": 3785, + "cpu_scaling_enabled": false, + "caches": [ + { + "type": "Data", + "level": 1, + "size": 49152, + "num_sharing": 2 + }, + { + "type": "Instruction", + "level": 1, + "size": 32768, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 2, + "size": 2097152, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 3, + "size": 110100480, + "num_sharing": 112 + } + ], + "load_avg": [3.54297,2.79004,28.9907], + "library_build_type": "debug", + "default_repetitions": "50", + "default_vector_size": "2000000000", + "device": "GPU", + "device_info": "Intel(R) Data Center GPU Max 1100, max_compute_units: 448", + "hostname": "idc-beta-batch-pvc-node-13\n", + "lscpu": "Architecture: x86_64\nCPU op-mode(s): 32-bit, 64-bit\nAddress sizes: 52 bits physical, 57 bits virtual\nByte Order: Little Endian\nCPU(s): 224\nOn-line CPU(s) list: 0-223\nVendor ID: GenuineIntel\nModel name: Intel(R) Xeon(R) Platinum 8480+\nCPU family: 6\nModel: 143\nThread(s) per core: 2\nCore(s) per socket: 56\nSocket(s): 2\nStepping: 8\nCPU max MHz: 3800.0000\nCPU min MHz: 800.0000\nBogoMIPS: 4000.00\nFlags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb cat_l3 cat_l2 cdp_l3 invpcid_single intel_ppin cdp_l2 ssbd mba ibrs ibpb stibp ibrs_enhanced tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid cqm rdt_a avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb intel_pt avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local split_lock_detect avx_vnni avx512_bf16 wbnoinvd dtherm ida arat pln pts hwp hwp_act_window hwp_epp hwp_pkg_req avx512vbmi umip pku ospke waitpkg avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg tme avx512_vpopcntdq la57 rdpid bus_lock_detect cldemote movdiri movdir64b enqcmd fsrm md_clear serialize tsxldtrk pconfig arch_lbr amx_bf16 avx512_fp16 amx_tile amx_int8 flush_l1d arch_capabilities\nVirtualization: VT-x\nL1d cache: 5.3 MiB (112 instances)\nL1i cache: 3.5 MiB (112 instances)\nL2 cache: 224 MiB (112 instances)\nL3 cache: 210 MiB (2 instances)\nNUMA node(s): 2\nNUMA node0 CPU(s): 0-55,112-167\nNUMA node1 CPU(s): 56-111,168-223\nVulnerability Gather data sampling: Not affected\nVulnerability Itlb multihit: Not affected\nVulnerability L1tf: Not affected\nVulnerability Mds: Not affected\nVulnerability Meltdown: Not affected\nVulnerability Mmio stale data: Not affected\nVulnerability Retbleed: Not affected\nVulnerability Spec rstack overflow: Not affected\nVulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl and seccomp\nVulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization\nVulnerability Spectre v2: Mitigation; Enhanced IBRS, IBPB conditional, RSB filling, PBRSB-eIBRS SW sequence\nVulnerability Srbds: Not affected\nVulnerability Tsx async abort: Not affected\n", + "model": "MHP", + "numactl": "", + "rank": "0", + "ranks": "1", + "runtime": "SYCL", + "target": "MHP_SYCL_GPU", + "weak-scaling": "1" + }, + "benchmarks": [ + { + "name": "Reduce_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 0, + "per_family_instance_index": 0, + "run_name": "Reduce_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 5.5363951008610945e+02, + "cpu_time": 5.5363853499999925e+02, + "time_unit": "ms", + "bytes_per_second": 7.2249178881360291e+11, + "footprint": 8.0000000000000000e+09 + }, + { + "name": "DotProduct_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 1, + "per_family_instance_index": 0, + "run_name": "DotProduct_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 2.3046611520618158e+03, + "cpu_time": 2.3046508220000028e+03, + "time_unit": "ms", + "bytes_per_second": 6.9424522497313501e+11, + "footprint": 3.2000000000000000e+10 + }, + { + "name": "Inclusive_Scan_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 2, + "per_family_instance_index": 0, + "run_name": "Inclusive_Scan_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 4.1552449670309843e+03, + "cpu_time": 4.1543743730000033e+03, + "time_unit": "ms", + "bytes_per_second": 1.9252775861530444e+11, + "footprint": 1.6000000000000000e+10 + }, + { + "name": "WaveEquation_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 3, + "per_family_instance_index": 0, + "run_name": "WaveEquation_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 8.7966737679239213e+03, + "cpu_time": 8.7705582979999981e+03, + "time_unit": "ms", + "bytes_per_second": 4.1331292112451160e+11, + "flops": 7.6728883872124672e+08, + "footprint": 3.5997811200000000e+10 + }, + { + "name": "Stencil2D_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 4, + "per_family_instance_index": 0, + "run_name": "Stencil2D_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 5.0692690308589169e+02, + "cpu_time": 5.0692577499999913e+02, + "time_unit": "ms", + "bytes_per_second": 6.3125471947141943e+11, + "footprint": 3.2000000000000000e+10 + } + ] +} diff --git a/bench/devcloud/dr-bench-9736fe26172840069fdc275df840cbf9.json b/bench/devcloud/dr-bench-9736fe26172840069fdc275df840cbf9.json new file mode 100644 index 0000000000..276bbfd4b2 --- /dev/null +++ b/bench/devcloud/dr-bench-9736fe26172840069fdc275df840cbf9.json @@ -0,0 +1,133 @@ +{ + "context": { + "date": "2023-12-01T02:40:34-08:00", + "host_name": "idc-beta-batch-pvc-node-13", + "executable": "mhp/mhp-bench", + "num_cpus": 224, + "mhz_per_cpu": 3797, + "cpu_scaling_enabled": false, + "caches": [ + { + "type": "Data", + "level": 1, + "size": 49152, + "num_sharing": 2 + }, + { + "type": "Instruction", + "level": 1, + "size": 32768, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 2, + "size": 2097152, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 3, + "size": 110100480, + "num_sharing": 112 + } + ], + "load_avg": [1.75879,2.82764,39.0518], + "library_build_type": "debug", + "default_repetitions": "50", + "default_vector_size": "2000000000", + "device": "GPU", + "device_info": "Intel(R) Data Center GPU Max 1100, max_compute_units: 448", + "hostname": "idc-beta-batch-pvc-node-13\n", + "lscpu": "Architecture: x86_64\nCPU op-mode(s): 32-bit, 64-bit\nAddress sizes: 52 bits physical, 57 bits virtual\nByte Order: Little Endian\nCPU(s): 224\nOn-line CPU(s) list: 0-223\nVendor ID: GenuineIntel\nModel name: Intel(R) Xeon(R) Platinum 8480+\nCPU family: 6\nModel: 143\nThread(s) per core: 2\nCore(s) per socket: 56\nSocket(s): 2\nStepping: 8\nCPU max MHz: 3800.0000\nCPU min MHz: 800.0000\nBogoMIPS: 4000.00\nFlags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb cat_l3 cat_l2 cdp_l3 invpcid_single intel_ppin cdp_l2 ssbd mba ibrs ibpb stibp ibrs_enhanced tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid cqm rdt_a avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb intel_pt avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local split_lock_detect avx_vnni avx512_bf16 wbnoinvd dtherm ida arat pln pts hwp hwp_act_window hwp_epp hwp_pkg_req avx512vbmi umip pku ospke waitpkg avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg tme avx512_vpopcntdq la57 rdpid bus_lock_detect cldemote movdiri movdir64b enqcmd fsrm md_clear serialize tsxldtrk pconfig arch_lbr amx_bf16 avx512_fp16 amx_tile amx_int8 flush_l1d arch_capabilities\nVirtualization: VT-x\nL1d cache: 5.3 MiB (112 instances)\nL1i cache: 3.5 MiB (112 instances)\nL2 cache: 224 MiB (112 instances)\nL3 cache: 210 MiB (2 instances)\nNUMA node(s): 2\nNUMA node0 CPU(s): 0-55,112-167\nNUMA node1 CPU(s): 56-111,168-223\nVulnerability Gather data sampling: Not affected\nVulnerability Itlb multihit: Not affected\nVulnerability L1tf: Not affected\nVulnerability Mds: Not affected\nVulnerability Meltdown: Not affected\nVulnerability Mmio stale data: Not affected\nVulnerability Retbleed: Not affected\nVulnerability Spec rstack overflow: Not affected\nVulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl and seccomp\nVulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization\nVulnerability Spectre v2: Mitigation; Enhanced IBRS, IBPB conditional, RSB filling, PBRSB-eIBRS SW sequence\nVulnerability Srbds: Not affected\nVulnerability Tsx async abort: Not affected\n", + "model": "MHP", + "numactl": "", + "rank": "0", + "ranks": "2", + "runtime": "SYCL", + "target": "MHP_SYCL_GPU", + "weak-scaling": "0" + }, + "benchmarks": [ + { + "name": "Stream_Copy/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 0, + "per_family_instance_index": 0, + "run_name": "Stream_Copy/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 4.7538095796464046e+02, + "cpu_time": 5.8109689999996661e+00, + "time_unit": "ms", + "bytes_per_second": 1.6828608437014954e+12, + "footprint": 8.0000000000000000e+09 + }, + { + "name": "Stream_Scale/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 1, + "per_family_instance_index": 0, + "run_name": "Stream_Scale/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 4.7353414393531943e+02, + "cpu_time": 5.1237479999990398e+00, + "time_unit": "ms", + "bytes_per_second": 1.6894241106915256e+12, + "footprint": 8.0000000000000000e+09 + }, + { + "name": "Stream_Add/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 2, + "per_family_instance_index": 0, + "run_name": "Stream_Add/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 7.3717815506481179e+02, + "cpu_time": 3.7706250000013597e+00, + "time_unit": "ms", + "bytes_per_second": 1.6278290285127854e+12, + "footprint": 1.2000000000000000e+10 + }, + { + "name": "Stream_Triad/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 3, + "per_family_instance_index": 0, + "run_name": "Stream_Triad/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 7.4532339501341619e+02, + "cpu_time": 4.3830029999973874e+00, + "time_unit": "ms", + "bytes_per_second": 1.6100393574501970e+12, + "footprint": 1.2000000000000000e+10 + }, + { + "name": "BlackScholes_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 4, + "per_family_instance_index": 0, + "run_name": "BlackScholes_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 1.2879471159133802e+03, + "cpu_time": 6.5052462000000588e+01, + "time_unit": "ms", + "bytes_per_second": 1.5528587899990361e+12, + "footprint": 2.0000000000000000e+10 + } + ] +} diff --git a/bench/devcloud/dr-bench-982c908512be4f42896b0f5b4890b926.json b/bench/devcloud/dr-bench-982c908512be4f42896b0f5b4890b926.json new file mode 100644 index 0000000000..98183fb955 --- /dev/null +++ b/bench/devcloud/dr-bench-982c908512be4f42896b0f5b4890b926.json @@ -0,0 +1,135 @@ +{ + "context": { + "date": "2023-12-01T02:39:04-08:00", + "host_name": "idc-beta-batch-pvc-node-13", + "executable": "shp/shp-bench", + "num_cpus": 224, + "mhz_per_cpu": 3786, + "cpu_scaling_enabled": false, + "caches": [ + { + "type": "Data", + "level": 1, + "size": 49152, + "num_sharing": 2 + }, + { + "type": "Instruction", + "level": 1, + "size": 32768, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 2, + "size": 2097152, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 3, + "size": 110100480, + "num_sharing": 112 + } + ], + "load_avg": [3.53369,3.39502,42.9067], + "library_build_type": "debug", + "default_repetitions": "50", + "default_vector_size": "2000000000", + "device": "GPU", + "device_info0": "Intel(R) Data Center GPU Max 1100, max_compute_units: 448", + "device_info1": "Intel(R) Data Center GPU Max 1100, max_compute_units: 448", + "device_info2": "Intel(R) Data Center GPU Max 1100, max_compute_units: 448", + "hostname": "idc-beta-batch-pvc-node-13\n", + "lscpu": "Architecture: x86_64\nCPU op-mode(s): 32-bit, 64-bit\nAddress sizes: 52 bits physical, 57 bits virtual\nByte Order: Little Endian\nCPU(s): 224\nOn-line CPU(s) list: 0-223\nVendor ID: GenuineIntel\nModel name: Intel(R) Xeon(R) Platinum 8480+\nCPU family: 6\nModel: 143\nThread(s) per core: 2\nCore(s) per socket: 56\nSocket(s): 2\nStepping: 8\nCPU max MHz: 3800.0000\nCPU min MHz: 800.0000\nBogoMIPS: 4000.00\nFlags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb cat_l3 cat_l2 cdp_l3 invpcid_single intel_ppin cdp_l2 ssbd mba ibrs ibpb stibp ibrs_enhanced tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid cqm rdt_a avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb intel_pt avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local split_lock_detect avx_vnni avx512_bf16 wbnoinvd dtherm ida arat pln pts hwp hwp_act_window hwp_epp hwp_pkg_req avx512vbmi umip pku ospke waitpkg avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg tme avx512_vpopcntdq la57 rdpid bus_lock_detect cldemote movdiri movdir64b enqcmd fsrm md_clear serialize tsxldtrk pconfig arch_lbr amx_bf16 avx512_fp16 amx_tile amx_int8 flush_l1d arch_capabilities\nVirtualization: VT-x\nL1d cache: 5.3 MiB (112 instances)\nL1i cache: 3.5 MiB (112 instances)\nL2 cache: 224 MiB (112 instances)\nL3 cache: 210 MiB (2 instances)\nNUMA node(s): 2\nNUMA node0 CPU(s): 0-55,112-167\nNUMA node1 CPU(s): 56-111,168-223\nVulnerability Gather data sampling: Not affected\nVulnerability Itlb multihit: Not affected\nVulnerability L1tf: Not affected\nVulnerability Mds: Not affected\nVulnerability Meltdown: Not affected\nVulnerability Mmio stale data: Not affected\nVulnerability Retbleed: Not affected\nVulnerability Spec rstack overflow: Not affected\nVulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl and seccomp\nVulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization\nVulnerability Spectre v2: Mitigation; Enhanced IBRS, IBPB conditional, RSB filling, PBRSB-eIBRS SW sequence\nVulnerability Srbds: Not affected\nVulnerability Tsx async abort: Not affected\n", + "model": "SHP", + "numactl": "", + "rank": "0", + "ranks": "3", + "runtime": "SYCL", + "target": "SHP_SYCL_GPU", + "weak-scaling": "0" + }, + "benchmarks": [ + { + "name": "Stream_Copy/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 0, + "per_family_instance_index": 0, + "run_name": "Stream_Copy/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 3.1163578898584115e+02, + "cpu_time": 1.7084939999998383e+00, + "time_unit": "ms", + "bytes_per_second": 2.5670992494265386e+12, + "footprint": 5.3333333330000000e+09 + }, + { + "name": "Stream_Scale/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 1, + "per_family_instance_index": 0, + "run_name": "Stream_Scale/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 3.1133390499648874e+02, + "cpu_time": 1.8784039999997226e+00, + "time_unit": "ms", + "bytes_per_second": 2.5695884295320244e+12, + "footprint": 5.3333333330000000e+09 + }, + { + "name": "Stream_Add/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 2, + "per_family_instance_index": 0, + "run_name": "Stream_Add/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 4.8830343389668059e+02, + "cpu_time": 5.0915680000001018e+00, + "time_unit": "ms", + "bytes_per_second": 2.4574883498646587e+12, + "footprint": 8.0000000000000000e+09 + }, + { + "name": "Stream_Triad/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 3, + "per_family_instance_index": 0, + "run_name": "Stream_Triad/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 5.0738236808511351e+02, + "cpu_time": 4.5421920000001670e+00, + "time_unit": "ms", + "bytes_per_second": 2.3650802146098613e+12, + "footprint": 8.0000000000000000e+09 + }, + { + "name": "BlackScholes_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 4, + "per_family_instance_index": 0, + "run_name": "BlackScholes_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 8.4333098311327967e+02, + "cpu_time": 5.5361199999999222e+00, + "time_unit": "ms", + "bytes_per_second": 2.3715481110592041e+12, + "footprint": 1.3333333333000000e+10 + } + ] +} diff --git a/bench/devcloud/dr-bench-9bcab8ff6d954174bfc465788bba33e9.json b/bench/devcloud/dr-bench-9bcab8ff6d954174bfc465788bba33e9.json new file mode 100644 index 0000000000..81ab2c00a6 --- /dev/null +++ b/bench/devcloud/dr-bench-9bcab8ff6d954174bfc465788bba33e9.json @@ -0,0 +1,86 @@ +{ + "context": { + "date": "2023-12-01T02:53:04-08:00", + "host_name": "idc-beta-batch-pvc-node-13", + "executable": "shp/shp-bench", + "num_cpus": 224, + "mhz_per_cpu": 3793, + "cpu_scaling_enabled": false, + "caches": [ + { + "type": "Data", + "level": 1, + "size": 49152, + "num_sharing": 2 + }, + { + "type": "Instruction", + "level": 1, + "size": 32768, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 2, + "size": 2097152, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 3, + "size": 110100480, + "num_sharing": 112 + } + ], + "load_avg": [2.9502,3.13232,19.0088], + "library_build_type": "debug", + "default_repetitions": "50", + "default_vector_size": "2000000000", + "device": "GPU", + "device_info0": "Intel(R) Data Center GPU Max 1100, max_compute_units: 448", + "hostname": "idc-beta-batch-pvc-node-13\n", + "lscpu": "Architecture: x86_64\nCPU op-mode(s): 32-bit, 64-bit\nAddress sizes: 52 bits physical, 57 bits virtual\nByte Order: Little Endian\nCPU(s): 224\nOn-line CPU(s) list: 0-223\nVendor ID: GenuineIntel\nModel name: Intel(R) Xeon(R) Platinum 8480+\nCPU family: 6\nModel: 143\nThread(s) per core: 2\nCore(s) per socket: 56\nSocket(s): 2\nStepping: 8\nCPU max MHz: 3800.0000\nCPU min MHz: 800.0000\nBogoMIPS: 4000.00\nFlags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb cat_l3 cat_l2 cdp_l3 invpcid_single intel_ppin cdp_l2 ssbd mba ibrs ibpb stibp ibrs_enhanced tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid cqm rdt_a avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb intel_pt avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local split_lock_detect avx_vnni avx512_bf16 wbnoinvd dtherm ida arat pln pts hwp hwp_act_window hwp_epp hwp_pkg_req avx512vbmi umip pku ospke waitpkg avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg tme avx512_vpopcntdq la57 rdpid bus_lock_detect cldemote movdiri movdir64b enqcmd fsrm md_clear serialize tsxldtrk pconfig arch_lbr amx_bf16 avx512_fp16 amx_tile amx_int8 flush_l1d arch_capabilities\nVirtualization: VT-x\nL1d cache: 5.3 MiB (112 instances)\nL1i cache: 3.5 MiB (112 instances)\nL2 cache: 224 MiB (112 instances)\nL3 cache: 210 MiB (2 instances)\nNUMA node(s): 2\nNUMA node0 CPU(s): 0-55,112-167\nNUMA node1 CPU(s): 56-111,168-223\nVulnerability Gather data sampling: Not affected\nVulnerability Itlb multihit: Not affected\nVulnerability L1tf: Not affected\nVulnerability Mds: Not affected\nVulnerability Meltdown: Not affected\nVulnerability Mmio stale data: Not affected\nVulnerability Retbleed: Not affected\nVulnerability Spec rstack overflow: Not affected\nVulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl and seccomp\nVulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization\nVulnerability Spectre v2: Mitigation; Enhanced IBRS, IBPB conditional, RSB filling, PBRSB-eIBRS SW sequence\nVulnerability Srbds: Not affected\nVulnerability Tsx async abort: Not affected\n", + "model": "SHP", + "numactl": "", + "rank": "0", + "ranks": "1", + "runtime": "SYCL", + "target": "SHP_SYCL_GPU", + "weak-scaling": "0" + }, + "benchmarks": [ + { + "name": "Gemm_Reference/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 0, + "per_family_instance_index": 0, + "run_name": "Gemm_Reference/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 3.7745659003653083e+02, + "cpu_time": 3.7741401400000018e+02, + "time_unit": "ms", + "bytes_per_second": 8.1386842383721189e+09, + "flops": 1.0851578984496158e+13, + "footprint": 3.0720000000000000e+09 + }, + { + "name": "SyclSortFixture/Sort_Reference/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 1, + "per_family_instance_index": 0, + "run_name": "SyclSortFixture/Sort_Reference/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 7.6249401105612128e+02, + "cpu_time": 7.6124128000000019e+02, + "time_unit": "ms", + "bytes_per_second": 1.0491885685658432e+10, + "footprint": 8.0000000000000000e+09 + } + ] +} diff --git a/bench/devcloud/dr-bench-9d00be9dc79741cbbfb02f0aaf274312.json b/bench/devcloud/dr-bench-9d00be9dc79741cbbfb02f0aaf274312.json new file mode 100644 index 0000000000..76e6c57482 --- /dev/null +++ b/bench/devcloud/dr-bench-9d00be9dc79741cbbfb02f0aaf274312.json @@ -0,0 +1,133 @@ +{ + "context": { + "date": "2023-12-01T02:39:21-08:00", + "host_name": "idc-beta-batch-pvc-node-13", + "executable": "mhp/mhp-bench", + "num_cpus": 224, + "mhz_per_cpu": 3361, + "cpu_scaling_enabled": false, + "caches": [ + { + "type": "Data", + "level": 1, + "size": 49152, + "num_sharing": 2 + }, + { + "type": "Instruction", + "level": 1, + "size": 32768, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 2, + "size": 2097152, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 3, + "size": 110100480, + "num_sharing": 112 + } + ], + "load_avg": [2.87598,3.25488,42.0181], + "library_build_type": "debug", + "default_repetitions": "50", + "default_vector_size": "2000000000", + "device": "GPU", + "device_info": "Intel(R) Data Center GPU Max 1100, max_compute_units: 448", + "hostname": "idc-beta-batch-pvc-node-13\n", + "lscpu": "Architecture: x86_64\nCPU op-mode(s): 32-bit, 64-bit\nAddress sizes: 52 bits physical, 57 bits virtual\nByte Order: Little Endian\nCPU(s): 224\nOn-line CPU(s) list: 0-223\nVendor ID: GenuineIntel\nModel name: Intel(R) Xeon(R) Platinum 8480+\nCPU family: 6\nModel: 143\nThread(s) per core: 2\nCore(s) per socket: 56\nSocket(s): 2\nStepping: 8\nCPU max MHz: 3800.0000\nCPU min MHz: 800.0000\nBogoMIPS: 4000.00\nFlags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb cat_l3 cat_l2 cdp_l3 invpcid_single intel_ppin cdp_l2 ssbd mba ibrs ibpb stibp ibrs_enhanced tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid cqm rdt_a avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb intel_pt avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local split_lock_detect avx_vnni avx512_bf16 wbnoinvd dtherm ida arat pln pts hwp hwp_act_window hwp_epp hwp_pkg_req avx512vbmi umip pku ospke waitpkg avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg tme avx512_vpopcntdq la57 rdpid bus_lock_detect cldemote movdiri movdir64b enqcmd fsrm md_clear serialize tsxldtrk pconfig arch_lbr amx_bf16 avx512_fp16 amx_tile amx_int8 flush_l1d arch_capabilities\nVirtualization: VT-x\nL1d cache: 5.3 MiB (112 instances)\nL1i cache: 3.5 MiB (112 instances)\nL2 cache: 224 MiB (112 instances)\nL3 cache: 210 MiB (2 instances)\nNUMA node(s): 2\nNUMA node0 CPU(s): 0-55,112-167\nNUMA node1 CPU(s): 56-111,168-223\nVulnerability Gather data sampling: Not affected\nVulnerability Itlb multihit: Not affected\nVulnerability L1tf: Not affected\nVulnerability Mds: Not affected\nVulnerability Meltdown: Not affected\nVulnerability Mmio stale data: Not affected\nVulnerability Retbleed: Not affected\nVulnerability Spec rstack overflow: Not affected\nVulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl and seccomp\nVulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization\nVulnerability Spectre v2: Mitigation; Enhanced IBRS, IBPB conditional, RSB filling, PBRSB-eIBRS SW sequence\nVulnerability Srbds: Not affected\nVulnerability Tsx async abort: Not affected\n", + "model": "MHP", + "numactl": "", + "rank": "0", + "ranks": "1", + "runtime": "SYCL", + "target": "MHP_SYCL_GPU", + "weak-scaling": "0" + }, + "benchmarks": [ + { + "name": "Stream_Copy/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 0, + "per_family_instance_index": 0, + "run_name": "Stream_Copy/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 9.3012359001425682e+02, + "cpu_time": 4.0234730000001662e+00, + "time_unit": "ms", + "bytes_per_second": 8.6010075283408057e+11, + "footprint": 1.6000000000000000e+10 + }, + { + "name": "Stream_Scale/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 1, + "per_family_instance_index": 0, + "run_name": "Stream_Scale/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 9.3045015894611788e+02, + "cpu_time": 4.0667689999995815e+00, + "time_unit": "ms", + "bytes_per_second": 8.5979887510162463e+11, + "footprint": 1.6000000000000000e+10 + }, + { + "name": "Stream_Add/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 2, + "per_family_instance_index": 0, + "run_name": "Stream_Add/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 1.4788316269197792e+03, + "cpu_time": 4.1088970000018321e+00, + "time_unit": "ms", + "bytes_per_second": 8.1145140403809827e+11, + "footprint": 2.4000000000000000e+10 + }, + { + "name": "Stream_Triad/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 3, + "per_family_instance_index": 0, + "run_name": "Stream_Triad/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 1.5049269669732180e+03, + "cpu_time": 3.9623049999946147e+00, + "time_unit": "ms", + "bytes_per_second": 7.9738088713600378e+11, + "footprint": 2.4000000000000000e+10 + }, + { + "name": "BlackScholes_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 4, + "per_family_instance_index": 0, + "run_name": "BlackScholes_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 2.4765454599224972e+03, + "cpu_time": 4.3175810000022352e+00, + "time_unit": "ms", + "bytes_per_second": 8.0757653447742065e+11, + "footprint": 4.0000000000000000e+10 + } + ] +} diff --git a/bench/devcloud/dr-bench-BlackScholes-CPU.csv b/bench/devcloud/dr-bench-BlackScholes-CPU.csv new file mode 100644 index 0000000000..b6af18cc77 --- /dev/null +++ b/bench/devcloud/dr-bench-BlackScholes-CPU.csv @@ -0,0 +1,8 @@ +,bench_name,Benchmark,Target,Ranks,Scaling,Bandwidth (TB/s),Bandwidth (GB/s),model,runtime,device,vsize,Number of GPU Tiles,Number of CPU Cores,Number of CPU Sockets,rtime +76,BlackScholes_DR,BlackScholes,MHP_DIRECT_CPU,56,strong,0.16003216156131292,160.03216156131293,MHP,DIRECT,CPU,2000000000,56,56,1.0,12497.487882982461 +96,BlackScholes_DR,BlackScholes,MHP_DIRECT_CPU,112,strong,0.24000247484789544,240.00247484789546,MHP,DIRECT,CPU,2000000000,112,112,2.0,8333.247402000854 +35,BlackScholes_DR,BlackScholes,MHP_SYCL_CPU,1,strong,0.04902669621189425,49.02669621189425,MHP,SYCL,CPU,2000000000,1,56,1.0,40794.101061918685 +66,BlackScholes_DR,BlackScholes,MHP_SYCL_CPU,2,strong,0.09920903596072829,99.20903596072829,MHP,SYCL,CPU,2000000000,2,112,2.0,20159.454031905887 +142,BlackScholes_Reference,BlackScholes,Reference_CPU,1,strong,0.049417443917755106,49.4174439177551,SHP,SYCL,CPU,2000000000,1,56,1.0,40471.53882197099 +84,BlackScholes_DR,BlackScholes,SHP_SYCL_CPU,1,strong,0.049175356109450945,49.175356109450945,SHP,SYCL,CPU,2000000000,1,56,1.0,40670.77817491641 +53,BlackScholes_DR,BlackScholes,SHP_SYCL_CPU,2,strong,0.09928964012805436,99.28964012805436,SHP,SYCL,CPU,2000000000,2,112,2.0,20143.08841708551 diff --git a/bench/devcloud/dr-bench-BlackScholes-CPU.png b/bench/devcloud/dr-bench-BlackScholes-CPU.png new file mode 100644 index 0000000000000000000000000000000000000000..900af6113f85a07db444c32fef37d08e6e0a8a0c GIT binary patch literal 34135 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 literal 0 HcmV?d00001 diff --git a/bench/devcloud/dr-bench-BlackScholes-GPU.csv b/bench/devcloud/dr-bench-BlackScholes-GPU.csv new file mode 100644 index 0000000000..372960d805 --- /dev/null +++ b/bench/devcloud/dr-bench-BlackScholes-GPU.csv @@ -0,0 +1,10 @@ +,bench_name,Benchmark,Target,Ranks,Scaling,Bandwidth (TB/s),Bandwidth (GB/s),model,runtime,device,vsize,Number of GPU Tiles,Number of CPU Cores,Number of CPU Sockets,rtime +152,BlackScholes_DR,BlackScholes,MHP_SYCL_GPU,1,strong,0.8075765344774206,807.5765344774206,MHP,SYCL,GPU,2000000000,1,56,1.0,2476.5454599224972 +22,BlackScholes_DR,BlackScholes,MHP_SYCL_GPU,2,strong,1.552858789999036,1552.8587899990362,MHP,SYCL,GPU,2000000000,2,112,2.0,1287.9471159133802 +147,BlackScholes_DR,BlackScholes,MHP_SYCL_GPU,3,strong,2.397058117688871,2397.058117688871,MHP,SYCL,GPU,2000000000,3,168,3.0,834.3560739062532 +4,BlackScholes_DR,BlackScholes,MHP_SYCL_GPU,4,strong,2.99751445502825,2997.51445502825,MHP,SYCL,GPU,2000000000,4,224,4.0,667.219467997912 +122,BlackScholes_Reference,BlackScholes,Reference_GPU,1,strong,0.7634275550013694,763.4275550013693,SHP,SYCL,GPU,2000000000,1,56,1.0,2619.7639669901782 +15,BlackScholes_DR,BlackScholes,SHP_SYCL_GPU,1,strong,0.8162227667290685,816.2227667290684,SHP,SYCL,GPU,2000000000,1,56,1.0,2450.3114609444197 +113,BlackScholes_DR,BlackScholes,SHP_SYCL_GPU,2,strong,1.5169338723301389,1516.933872330139,SHP,SYCL,GPU,2000000000,2,112,2.0,1318.4490349126627 +133,BlackScholes_DR,BlackScholes,SHP_SYCL_GPU,3,strong,2.3715481110592043,2371.548111059204,SHP,SYCL,GPU,2000000000,3,168,3.0,843.3309831132797 +58,BlackScholes_DR,BlackScholes,SHP_SYCL_GPU,4,strong,3.256041258302026,3256.0412583020266,SHP,SYCL,GPU,2000000000,4,224,4.0,614.2428308918198 diff --git a/bench/devcloud/dr-bench-BlackScholes-GPU.png b/bench/devcloud/dr-bench-BlackScholes-GPU.png new file mode 100644 index 0000000000000000000000000000000000000000..cfd7b973a28e8b22188f09e9f1c5e1fac5c3cbde GIT binary patch literal 41009 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 literal 0 HcmV?d00001 diff --git a/bench/devcloud/dr-bench-DotProduct-CPU.csv b/bench/devcloud/dr-bench-DotProduct-CPU.csv new file mode 100644 index 0000000000..4214be11a8 --- /dev/null +++ b/bench/devcloud/dr-bench-DotProduct-CPU.csv @@ -0,0 +1,8 @@ +,bench_name,Benchmark,Target,Ranks,Scaling,Bandwidth (TB/s),Bandwidth (GB/s),model,runtime,device,vsize,Number of GPU Tiles,Number of CPU Cores,Number of CPU Sockets,rtime +68,DotProduct_DR,DotProduct,MHP_DIRECT_CPU,56,strong,0.20347932354927906,203.47932354927906,MHP,DIRECT,CPU,2000000000,56,56,1.0,7863.206797090165 +88,DotProduct_DR,DotProduct,MHP_DIRECT_CPU,112,strong,0.3145914293880514,314.5914293880514,MHP,DIRECT,CPU,2000000000,112,112,2.0,5085.96182391983 +29,DotProduct_DR,DotProduct,MHP_SYCL_CPU,1,strong,0.21645868946359753,216.45868946359752,MHP,SYCL,CPU,2000000000,1,56,1.0,7391.710649107836 +60,DotProduct_DR,DotProduct,MHP_SYCL_CPU,2,strong,0.33470211226801505,334.70211226801507,MHP,SYCL,CPU,2000000000,2,112,2.0,4780.370189952039 +140,DotProduct_Reference,DotProduct,Reference_CPU,1,strong,0.2166090407508057,216.6090407508057,SHP,SYCL,CPU,2000000000,1,56,1.0,7386.579962009497 +78,DotProduct_DR,DotProduct,SHP_SYCL_CPU,1,strong,0.21649385071282554,216.49385071282552,SHP,SYCL,CPU,2000000000,1,56,1.0,7390.510144892594 +47,DotProduct_DR,DotProduct,SHP_SYCL_CPU,2,strong,0.3161904058228699,316.1904058228699,SHP,SYCL,CPU,2000000000,2,112,2.0,5060.242090002949 diff --git a/bench/devcloud/dr-bench-DotProduct-CPU.png b/bench/devcloud/dr-bench-DotProduct-CPU.png new file mode 100644 index 0000000000000000000000000000000000000000..2e1ead45f562afdaf89ac719b1345b2f9c2cb0af GIT binary patch literal 39469 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 literal 0 HcmV?d00001 diff --git a/bench/devcloud/dr-bench-DotProduct-GPU.csv b/bench/devcloud/dr-bench-DotProduct-GPU.csv new file mode 100644 index 0000000000..83f81ec1af --- /dev/null +++ b/bench/devcloud/dr-bench-DotProduct-GPU.csv @@ -0,0 +1,11 @@ +,bench_name,Benchmark,Target,Ranks,Scaling,Bandwidth (TB/s),Bandwidth (GB/s),model,runtime,device,vsize,Number of GPU Tiles,Number of CPU Cores,Number of CPU Sockets,rtime +42,DotProduct_DR,DotProduct,MHP_SYCL_GPU,1,strong,0.6918931814618411,691.8931814618411,MHP,SYCL,GPU,2000000000,1,56,1.0,2312.4956898975342 +115,DotProduct_DR,DotProduct,MHP_SYCL_GPU,1,weak,0.694245224973135,694.245224973135,MHP,SYCL,GPU,2000000000,1,56,1.0,2304.6611520618158 +37,DotProduct_DR,DotProduct,MHP_SYCL_GPU,2,weak,1.3586457430666643,1358.6457430666644,MHP,SYCL,GPU,4000000000,2,112,2.0,2355.28651698207 +100,DotProduct_DR,DotProduct,MHP_SYCL_GPU,2,strong,1.3625164578560522,1362.5164578560523,MHP,SYCL,GPU,2000000000,2,112,2.0,1174.2977420747145 +24,DotProduct_DR,DotProduct,MHP_SYCL_GPU,3,weak,2.033145845496301,2033.145845496301,MHP,SYCL,GPU,6000000000,3,168,3.0,2360.873427074926 +124,DotProduct_DR,DotProduct,MHP_SYCL_GPU,3,strong,2.043166638086142,2043.1666380861418,MHP,SYCL,GPU,2000000000,3,168,3.0,783.0981429389132 +105,DotProduct_DR,DotProduct,MHP_SYCL_GPU,4,strong,2.6976926676833615,2697.6926676833614,MHP,SYCL,GPU,2000000000,4,224,4.0,593.0994361095985 +135,DotProduct_DR,DotProduct,MHP_SYCL_GPU,4,weak,2.706850641449739,2706.8506414497388,MHP,SYCL,GPU,8000000000,4,224,4.0,2364.371311071777 +120,DotProduct_Reference,DotProduct,Reference_GPU,1,strong,0.6937717788106549,693.771778810655,SHP,SYCL,GPU,2000000000,1,56,1.0,2306.2339069814975 +7,DotProduct_DR,DotProduct,SHP_SYCL_GPU,1,strong,0.6943473283595865,694.3473283595864,SHP,SYCL,GPU,2000000000,1,56,1.0,2304.322252927856 diff --git a/bench/devcloud/dr-bench-DotProduct-GPU.png b/bench/devcloud/dr-bench-DotProduct-GPU.png new file mode 100644 index 0000000000000000000000000000000000000000..784a2472c12e86ba480616df36d1fbafdaeea678 GIT binary patch literal 41817 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�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 Bj1m9< literal 0 HcmV?d00001 diff --git a/bench/devcloud/dr-bench-Reduce-GPU.csv b/bench/devcloud/dr-bench-Reduce-GPU.csv new file mode 100644 index 0000000000..9bed35ebf1 --- /dev/null +++ b/bench/devcloud/dr-bench-Reduce-GPU.csv @@ -0,0 +1,11 @@ +,bench_name,Benchmark,Target,Ranks,Scaling,Bandwidth (TB/s),Bandwidth (GB/s),model,runtime,device,vsize,Number of GPU Tiles,Number of CPU Cores,Number of CPU Sockets,rtime +41,Reduce_DR,Reduce,MHP_SYCL_GPU,1,strong,0.7205108884649971,720.510888464997,MHP,SYCL,GPU,2000000000,1,56,1.0,555.1616310090396 +114,Reduce_DR,Reduce,MHP_SYCL_GPU,1,weak,0.7224917888136029,722.4917888136029,MHP,SYCL,GPU,2000000000,1,56,1.0,553.6395100861095 +36,Reduce_DR,Reduce,MHP_SYCL_GPU,2,weak,1.4271992451952922,1427.1992451952922,MHP,SYCL,GPU,4000000000,2,112,2.0,560.5384130444459 +99,Reduce_DR,Reduce,MHP_SYCL_GPU,2,strong,1.4368887518570235,1436.8887518570234,MHP,SYCL,GPU,2000000000,2,112,2.0,278.37924090020414 +23,Reduce_DR,Reduce,MHP_SYCL_GPU,3,weak,2.136540845137384,2136.540845137384,MHP,SYCL,GPU,6000000000,3,168,3.0,561.6555390135018 +123,Reduce_DR,Reduce,MHP_SYCL_GPU,3,strong,2.141444200110351,2141.444200110351,MHP,SYCL,GPU,2000000000,3,168,3.0,186.78983089047455 +104,Reduce_DR,Reduce,MHP_SYCL_GPU,4,strong,2.8393780664517374,2839.378066451737,MHP,SYCL,GPU,2000000000,4,224,4.0,140.87592093710325 +134,Reduce_DR,Reduce,MHP_SYCL_GPU,4,weak,2.8482162015778263,2848.2162015778263,MHP,SYCL,GPU,8000000000,4,224,4.0,561.755108026437 +119,Reduce_Reference,Reduce,Reference_GPU,1,strong,0.7214776627023984,721.4776627023984,SHP,SYCL,GPU,2000000000,1,56,1.0,554.4177189100247 +6,Reduce_DR,Reduce,SHP_SYCL_GPU,1,strong,0.721602498208321,721.6024982083211,SHP,SYCL,GPU,2000000000,1,56,1.0,554.3218059709698 diff --git a/bench/devcloud/dr-bench-Reduce-GPU.png b/bench/devcloud/dr-bench-Reduce-GPU.png new file mode 100644 index 0000000000000000000000000000000000000000..9d1bdc29378c02df340cbd3486c46ae26a379ed9 GIT binary patch literal 41202 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

YWE3%r4w}WXQMQ-MhX40c67UCq(o7l5Q-04pe#A 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 literal 0 HcmV?d00001 diff --git a/bench/devcloud/dr-bench-Stencil2D-CPU.csv b/bench/devcloud/dr-bench-Stencil2D-CPU.csv new file mode 100644 index 0000000000..e3910455cb --- /dev/null +++ b/bench/devcloud/dr-bench-Stencil2D-CPU.csv @@ -0,0 +1,6 @@ +,bench_name,Benchmark,Target,Ranks,Scaling,Bandwidth (TB/s),Bandwidth (GB/s),model,runtime,device,vsize,Number of GPU Tiles,Number of CPU Cores,Number of CPU Sockets,rtime +75,Stencil2D_DR,Stencil2D,MHP_DIRECT_CPU,56,strong,0.14109269357127238,141.09269357127238,MHP,DIRECT,CPU,2000000000,56,56,1.0,2268.37543390103 +95,Stencil2D_DR,Stencil2D,MHP_DIRECT_CPU,112,strong,0.22374492609400282,223.7449260940028,MHP,DIRECT,CPU,2000000000,112,112,2.0,1430.4288619512008 +86,Stencil2D_DR,Stencil2D,MHP_SYCL_CPU,1,strong,0.0992729177076403,99.27291770764029,MHP,SYCL,CPU,2000000000,1,56,1.0,3223.437039922642 +98,Stencil2D_DR,Stencil2D,MHP_SYCL_CPU,2,strong,0.15525703301915972,155.25703301915973,MHP,SYCL,CPU,2000000000,2,112,2.0,2061.0982560803536 +10,Stencil2D_Reference,Stencil2D,Reference_CPU,1,strong,0.10045266671411847,100.45266671411846,MHP,SYCL,CPU,2000000000,1,56,1.0,3185.5799399601656 diff --git a/bench/devcloud/dr-bench-Stencil2D-CPU.png b/bench/devcloud/dr-bench-Stencil2D-CPU.png new file mode 100644 index 0000000000000000000000000000000000000000..d545a9fe4edbd00858f3921dab2496703032593b GIT binary patch literal 37516 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 S_&y5$PkWE9M!ve$+5ZcqY@Bxh literal 0 HcmV?d00001 diff --git a/bench/devcloud/dr-bench-Stream_Add-CPU.csv b/bench/devcloud/dr-bench-Stream_Add-CPU.csv new file mode 100644 index 0000000000..222b604c05 --- /dev/null +++ b/bench/devcloud/dr-bench-Stream_Add-CPU.csv @@ -0,0 +1,7 @@ +,bench_name,Benchmark,Target,Ranks,Scaling,Bandwidth (TB/s),Bandwidth (GB/s),model,runtime,device,vsize,Number of GPU Tiles,Number of CPU Cores,Number of CPU Sockets,rtime +72,Stream_Add,Stream_Add,MHP_DIRECT_CPU,56,strong,0.18563602878273983,185.63602878273983,MHP,DIRECT,CPU,2000000000,56,56,1.0,6464.262394906254 +92,Stream_Add,Stream_Add,MHP_DIRECT_CPU,112,strong,0.2842423906434117,284.24239064341174,MHP,DIRECT,CPU,2000000000,112,112,2.0,4221.748899886738 +33,Stream_Add,Stream_Add,MHP_SYCL_CPU,1,strong,0.19229622411853517,192.29622411853515,MHP,SYCL,CPU,2000000000,1,56,1.0,6240.372141994304 +64,Stream_Add,Stream_Add,MHP_SYCL_CPU,2,strong,0.29322029965250074,293.2202996525007,MHP,SYCL,CPU,2000000000,2,112,2.0,4092.4860980707545 +82,Stream_Add,Stream_Add,SHP_SYCL_CPU,1,strong,0.19222142127031222,192.22142127031222,SHP,SYCL,CPU,2000000000,1,56,1.0,6242.800578986952 +51,Stream_Add,Stream_Add,SHP_SYCL_CPU,2,strong,0.2758362375730613,275.8362375730613,SHP,SYCL,CPU,2000000000,2,112,2.0,4350.407366915138 diff --git a/bench/devcloud/dr-bench-Stream_Add-CPU.png b/bench/devcloud/dr-bench-Stream_Add-CPU.png new file mode 100644 index 0000000000000000000000000000000000000000..3473fe10b403de06af0baf1f86544467f4b6e1fd GIT binary patch literal 35775 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 B^qT+x literal 0 HcmV?d00001 diff --git a/bench/devcloud/dr-bench-Stream_Add-GPU.csv b/bench/devcloud/dr-bench-Stream_Add-GPU.csv new file mode 100644 index 0000000000..bd1c5d1399 --- /dev/null +++ b/bench/devcloud/dr-bench-Stream_Add-GPU.csv @@ -0,0 +1,9 @@ +,bench_name,Benchmark,Target,Ranks,Scaling,Bandwidth (TB/s),Bandwidth (GB/s),model,runtime,device,vsize,Number of GPU Tiles,Number of CPU Cores,Number of CPU Sockets,rtime +150,Stream_Add,Stream_Add,MHP_SYCL_GPU,1,strong,0.8114514040380982,811.4514040380983,MHP,SYCL,GPU,2000000000,1,56,1.0,1478.8316269197792 +20,Stream_Add,Stream_Add,MHP_SYCL_GPU,2,strong,1.6278290285127854,1627.8290285127855,MHP,SYCL,GPU,2000000000,2,112,2.0,737.1781550648118 +145,Stream_Add,Stream_Add,MHP_SYCL_GPU,3,strong,2.3760460629098152,2376.0460629098156,MHP,SYCL,GPU,2000000000,3,168,3.0,505.0407139541835 +2,Stream_Add,Stream_Add,MHP_SYCL_GPU,4,strong,3.2118770159780548,3211.8770159780547,MHP,SYCL,GPU,2000000000,4,224,4.0,373.6133089873573 +13,Stream_Add,Stream_Add,SHP_SYCL_GPU,1,strong,0.8251717651377696,825.1717651377695,SHP,SYCL,GPU,2000000000,1,56,1.0,1454.2426809764263 +111,Stream_Add,Stream_Add,SHP_SYCL_GPU,2,strong,1.6504876900929422,1650.487690092942,SHP,SYCL,GPU,2000000000,2,112,2.0,727.0578309689943 +131,Stream_Add,Stream_Add,SHP_SYCL_GPU,3,strong,2.4574883498646587,2457.4883498646586,SHP,SYCL,GPU,2000000000,3,168,3.0,488.3034338966806 +56,Stream_Add,Stream_Add,SHP_SYCL_GPU,4,strong,3.3048900533942067,3304.8900533942065,SHP,SYCL,GPU,2000000000,4,224,4.0,363.0983120807814 diff --git a/bench/devcloud/dr-bench-Stream_Add-GPU.png b/bench/devcloud/dr-bench-Stream_Add-GPU.png new file mode 100644 index 0000000000000000000000000000000000000000..c1ae6736b451d16bd54352b60b0d047d2b602d9f GIT binary patch literal 37017 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 DUs#MI literal 0 HcmV?d00001 diff --git a/bench/devcloud/dr-bench-Stream_Copy-GPU.csv b/bench/devcloud/dr-bench-Stream_Copy-GPU.csv new file mode 100644 index 0000000000..1b44536d67 --- /dev/null +++ b/bench/devcloud/dr-bench-Stream_Copy-GPU.csv @@ -0,0 +1,9 @@ +,bench_name,Benchmark,Target,Ranks,Scaling,Bandwidth (TB/s),Bandwidth (GB/s),model,runtime,device,vsize,Number of GPU Tiles,Number of CPU Cores,Number of CPU Sockets,rtime +148,Stream_Copy,Stream_Copy,MHP_SYCL_GPU,1,strong,0.8601007528340806,860.1007528340806,MHP,SYCL,GPU,2000000000,1,56,1.0,930.1235900142568 +18,Stream_Copy,Stream_Copy,MHP_SYCL_GPU,2,strong,1.6828608437014954,1682.8608437014955,MHP,SYCL,GPU,2000000000,2,112,2.0,475.38095796464046 +143,Stream_Copy,Stream_Copy,MHP_SYCL_GPU,3,strong,2.558839252763398,2558.839252763398,MHP,SYCL,GPU,2000000000,3,168,3.0,312.6417570529475 +0,Stream_Copy,Stream_Copy,MHP_SYCL_GPU,4,strong,3.424161617734663,3424.161617734663,MHP,SYCL,GPU,2000000000,4,224,4.0,233.63383195950294 +11,Stream_Copy,Stream_Copy,SHP_SYCL_GPU,1,strong,0.8623715974999698,862.3715974999699,SHP,SYCL,GPU,2000000000,1,56,1.0,927.6743370482212 +109,Stream_Copy,Stream_Copy,SHP_SYCL_GPU,2,strong,1.697588362483758,1697.5883624837581,SHP,SYCL,GPU,2000000000,2,112,2.0,471.2567649966168 +129,Stream_Copy,Stream_Copy,SHP_SYCL_GPU,3,strong,2.5670992494265388,2567.099249426539,SHP,SYCL,GPU,2000000000,3,168,3.0,311.63578898584115 +54,Stream_Copy,Stream_Copy,SHP_SYCL_GPU,4,strong,3.429747935208815,3429.747935208815,SHP,SYCL,GPU,2000000000,4,224,4.0,233.25329298617777 diff --git a/bench/devcloud/dr-bench-Stream_Copy-GPU.png b/bench/devcloud/dr-bench-Stream_Copy-GPU.png new file mode 100644 index 0000000000000000000000000000000000000000..f12ddefdc9b26c067aa1c97a9dc1db8687730b5f GIT binary patch literal 36201 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%0D{en06tPkJ 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 N8?7_EZs2m@e*g!m4f+58 literal 0 HcmV?d00001 diff --git a/bench/devcloud/dr-bench-Stream_Scale-GPU.csv b/bench/devcloud/dr-bench-Stream_Scale-GPU.csv new file mode 100644 index 0000000000..3edd62cad2 --- /dev/null +++ b/bench/devcloud/dr-bench-Stream_Scale-GPU.csv @@ -0,0 +1,9 @@ +,bench_name,Benchmark,Target,Ranks,Scaling,Bandwidth (TB/s),Bandwidth (GB/s),model,runtime,device,vsize,Number of GPU Tiles,Number of CPU Cores,Number of CPU Sockets,rtime +149,Stream_Scale,Stream_Scale,MHP_SYCL_GPU,1,strong,0.8597988751016247,859.7988751016246,MHP,SYCL,GPU,2000000000,1,56,1.0,930.4501589461179 +19,Stream_Scale,Stream_Scale,MHP_SYCL_GPU,2,strong,1.6894241106915255,1689.4241106915256,MHP,SYCL,GPU,2000000000,2,112,2.0,473.53414393531943 +144,Stream_Scale,Stream_Scale,MHP_SYCL_GPU,3,strong,2.5582928699235805,2558.2928699235804,MHP,SYCL,GPU,2000000000,3,168,3.0,312.70852895896047 +1,Stream_Scale,Stream_Scale,MHP_SYCL_GPU,4,strong,3.4352606500240532,3435.260650024053,MHP,SYCL,GPU,2000000000,4,224,4.0,232.8789811027581 +12,Stream_Scale,Stream_Scale,SHP_SYCL_GPU,1,strong,0.8559835789465333,855.9835789465333,SHP,SYCL,GPU,2000000000,1,56,1.0,934.5973680763447 +110,Stream_Scale,Stream_Scale,SHP_SYCL_GPU,2,strong,1.70142731228805,1701.42731228805,SHP,SYCL,GPU,2000000000,2,112,2.0,470.1934629955915 +130,Stream_Scale,Stream_Scale,SHP_SYCL_GPU,3,strong,2.5695884295320246,2569.5884295320243,SHP,SYCL,GPU,2000000000,3,168,3.0,311.33390499648874 +55,Stream_Scale,Stream_Scale,SHP_SYCL_GPU,4,strong,3.4159436472686906,3415.9436472686903,SHP,SYCL,GPU,2000000000,4,224,4.0,234.19590093052662 diff --git a/bench/devcloud/dr-bench-Stream_Scale-GPU.png b/bench/devcloud/dr-bench-Stream_Scale-GPU.png new file mode 100644 index 0000000000000000000000000000000000000000..e18a08f06dd99db3d8de795ef6852c6b6e7f0522 GIT binary patch literal 36030 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 V^7@q=7X|-2bl|8;%0A<3{{=lWRQ~_~ literal 0 HcmV?d00001 diff --git a/bench/devcloud/dr-bench-Stream_Triad-CPU.csv b/bench/devcloud/dr-bench-Stream_Triad-CPU.csv new file mode 100644 index 0000000000..6279e5dd41 --- /dev/null +++ b/bench/devcloud/dr-bench-Stream_Triad-CPU.csv @@ -0,0 +1,7 @@ +,bench_name,Benchmark,Target,Ranks,Scaling,Bandwidth (TB/s),Bandwidth (GB/s),model,runtime,device,vsize,Number of GPU Tiles,Number of CPU Cores,Number of CPU Sockets,rtime +73,Stream_Triad,Stream_Triad,MHP_DIRECT_CPU,56,strong,0.1875936402389325,187.5936402389325,MHP,DIRECT,CPU,2000000000,56,56,1.0,6396.805341969991 +93,Stream_Triad,Stream_Triad,MHP_DIRECT_CPU,112,strong,0.27757003651989137,277.57003651989135,MHP,DIRECT,CPU,2000000000,112,112,2.0,4323.233210058698 +34,Stream_Triad,Stream_Triad,MHP_SYCL_CPU,1,strong,0.19230421338885123,192.30421338885122,MHP,SYCL,CPU,2000000000,1,56,1.0,6240.112886000706 +65,Stream_Triad,Stream_Triad,MHP_SYCL_CPU,2,strong,0.2924331110612302,292.43311106123025,MHP,SYCL,CPU,2000000000,2,112,2.0,4103.50249205789 +83,Stream_Triad,Stream_Triad,SHP_SYCL_CPU,1,strong,0.19225543309078358,192.25543309078358,SHP,SYCL,CPU,2000000000,1,56,1.0,6241.696168000394 +52,Stream_Triad,Stream_Triad,SHP_SYCL_CPU,2,strong,0.2800101326353254,280.0101326353254,SHP,SYCL,CPU,2000000000,2,112,2.0,4285.559199969504 diff --git a/bench/devcloud/dr-bench-Stream_Triad-CPU.png b/bench/devcloud/dr-bench-Stream_Triad-CPU.png new file mode 100644 index 0000000000000000000000000000000000000000..b8bef57dd254f58511ab2afd65c749ce966c7e05 GIT binary patch literal 35699 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 Fe*pEd$zA{e literal 0 HcmV?d00001 diff --git a/bench/devcloud/dr-bench-WaveEquation-CPU.csv b/bench/devcloud/dr-bench-WaveEquation-CPU.csv new file mode 100644 index 0000000000..72747489a3 --- /dev/null +++ b/bench/devcloud/dr-bench-WaveEquation-CPU.csv @@ -0,0 +1,5 @@ +,bench_name,Benchmark,Target,Ranks,Scaling,Bandwidth (TB/s),Bandwidth (GB/s),model,runtime,device,vsize,Number of GPU Tiles,Number of CPU Cores,Number of CPU Sockets,rtime +74,WaveEquation_DR,WaveEquation,MHP_DIRECT_CPU,56,strong,0.1844434591303605,184.4434591303605,MHP,DIRECT,CPU,2000000000,56,56,1.0,19712.159749890143 +94,WaveEquation_DR,WaveEquation,MHP_DIRECT_CPU,112,strong,0.27535465652306274,275.3546565230628,MHP,DIRECT,CPU,2000000000,112,112,2.0,13203.985642042264 +85,WaveEquation_DR,WaveEquation,MHP_SYCL_CPU,1,strong,0.1283668232415776,128.3668232415776,MHP,SYCL,CPU,2000000000,1,56,1.0,28323.353646897627 +97,WaveEquation_DR,WaveEquation,MHP_SYCL_CPU,2,strong,0.20066893566766425,200.66893566766424,MHP,SYCL,CPU,2000000000,2,112,2.0,18118.294787895607 diff --git a/bench/devcloud/dr-bench-WaveEquation-CPU.png b/bench/devcloud/dr-bench-WaveEquation-CPU.png new file mode 100644 index 0000000000000000000000000000000000000000..62174387fbf2e8a1322df2b6736f5620e67fe00d GIT binary patch literal 38563 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 literal 0 HcmV?d00001 diff --git a/bench/devcloud/dr-bench-a30b94d525ae4cee8aedceedddca35ce.json b/bench/devcloud/dr-bench-a30b94d525ae4cee8aedceedddca35ce.json new file mode 100644 index 0000000000..ae82d91e39 --- /dev/null +++ b/bench/devcloud/dr-bench-a30b94d525ae4cee8aedceedddca35ce.json @@ -0,0 +1,181 @@ +{ + "context": { + "date": "2023-12-01T02:54:28-08:00", + "host_name": "idc-beta-batch-pvc-node-13", + "executable": "mhp/mhp-bench", + "num_cpus": 224, + "mhz_per_cpu": 3798, + "cpu_scaling_enabled": false, + "caches": [ + { + "type": "Data", + "level": 1, + "size": 49152, + "num_sharing": 2 + }, + { + "type": "Instruction", + "level": 1, + "size": 32768, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 2, + "size": 2097152, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 3, + "size": 110100480, + "num_sharing": 112 + } + ], + "load_avg": [1.45947,2.59961,17.4307], + "library_build_type": "debug", + "default_repetitions": "50", + "default_vector_size": "2000000000", + "device": "CPU", + "device_info": "Intel(R) Xeon(R) Platinum 8480+, max_compute_units: 112", + "hostname": "idc-beta-batch-pvc-node-13\n", + "lscpu": "Architecture: x86_64\nCPU op-mode(s): 32-bit, 64-bit\nAddress sizes: 52 bits physical, 57 bits virtual\nByte Order: Little Endian\nCPU(s): 224\nOn-line CPU(s) list: 0-223\nVendor ID: GenuineIntel\nModel name: Intel(R) Xeon(R) Platinum 8480+\nCPU family: 6\nModel: 143\nThread(s) per core: 2\nCore(s) per socket: 56\nSocket(s): 2\nStepping: 8\nCPU max MHz: 3800.0000\nCPU min MHz: 800.0000\nBogoMIPS: 4000.00\nFlags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb cat_l3 cat_l2 cdp_l3 invpcid_single intel_ppin cdp_l2 ssbd mba ibrs ibpb stibp ibrs_enhanced tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid cqm rdt_a avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb intel_pt avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local split_lock_detect avx_vnni avx512_bf16 wbnoinvd dtherm ida arat pln pts hwp hwp_act_window hwp_epp hwp_pkg_req avx512vbmi umip pku ospke waitpkg avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg tme avx512_vpopcntdq la57 rdpid bus_lock_detect cldemote movdiri movdir64b enqcmd fsrm md_clear serialize tsxldtrk pconfig arch_lbr amx_bf16 avx512_fp16 amx_tile amx_int8 flush_l1d arch_capabilities\nVirtualization: VT-x\nL1d cache: 5.3 MiB (112 instances)\nL1i cache: 3.5 MiB (112 instances)\nL2 cache: 224 MiB (112 instances)\nL3 cache: 210 MiB (2 instances)\nNUMA node(s): 2\nNUMA node0 CPU(s): 0-55,112-167\nNUMA node1 CPU(s): 56-111,168-223\nVulnerability Gather data sampling: Not affected\nVulnerability Itlb multihit: Not affected\nVulnerability L1tf: Not affected\nVulnerability Mds: Not affected\nVulnerability Meltdown: Not affected\nVulnerability Mmio stale data: Not affected\nVulnerability Retbleed: Not affected\nVulnerability Spec rstack overflow: Not affected\nVulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl and seccomp\nVulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization\nVulnerability Spectre v2: Mitigation; Enhanced IBRS, IBPB conditional, RSB filling, PBRSB-eIBRS SW sequence\nVulnerability Srbds: Not affected\nVulnerability Tsx async abort: Not affected\n", + "model": "MHP", + "numactl": "", + "rank": "0", + "ranks": "1", + "runtime": "SYCL", + "target": "MHP_SYCL_CPU", + "weak-scaling": "0" + }, + "benchmarks": [ + { + "name": "Reduce_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 0, + "per_family_instance_index": 0, + "run_name": "Reduce_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 1.8634358140750003e+03, + "cpu_time": 1.8550503020000003e+03, + "time_unit": "ms", + "bytes_per_second": 2.1465724602838434e+11, + "footprint": 8.0000000000000000e+09 + }, + { + "name": "DotProduct_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 1, + "per_family_instance_index": 0, + "run_name": "DotProduct_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 7.3917106491078357e+03, + "cpu_time": 7.3764912130000012e+03, + "time_unit": "ms", + "bytes_per_second": 2.1645868946359753e+11, + "footprint": 3.2000000000000000e+10 + }, + { + "name": "Inclusive_Scan_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 2, + "per_family_instance_index": 0, + "run_name": "Inclusive_Scan_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 1.2765140839086536e+04, + "cpu_time": 1.2740335561000002e+04, + "time_unit": "ms", + "bytes_per_second": 6.2670675559678932e+10, + "footprint": 1.6000000000000000e+10 + }, + { + "name": "Stream_Copy/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 3, + "per_family_instance_index": 0, + "run_name": "Stream_Copy/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 4.3128942310700277e+03, + "cpu_time": 6.9288480000011532e+00, + "time_unit": "ms", + "bytes_per_second": 1.8549028961499020e+11, + "footprint": 1.6000000000000000e+10 + }, + { + "name": "Stream_Scale/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 4, + "per_family_instance_index": 0, + "run_name": "Stream_Scale/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 4.3264578159361281e+03, + "cpu_time": 6.8725500000113016e+00, + "time_unit": "ms", + "bytes_per_second": 1.8490877157134647e+11, + "footprint": 1.6000000000000000e+10 + }, + { + "name": "Stream_Add/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 5, + "per_family_instance_index": 0, + "run_name": "Stream_Add/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 6.2403721419943040e+03, + "cpu_time": 7.4926879999992479e+00, + "time_unit": "ms", + "bytes_per_second": 1.9229622411853516e+11, + "footprint": 2.4000000000000000e+10 + }, + { + "name": "Stream_Triad/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 6, + "per_family_instance_index": 0, + "run_name": "Stream_Triad/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 6.2401128860007057e+03, + "cpu_time": 6.5171560000010231e+00, + "time_unit": "ms", + "bytes_per_second": 1.9230421338885123e+11, + "footprint": 2.4000000000000000e+10 + }, + { + "name": "BlackScholes_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 7, + "per_family_instance_index": 0, + "run_name": "BlackScholes_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 4.0794101061918685e+04, + "cpu_time": 1.1052277999993976e+01, + "time_unit": "ms", + "bytes_per_second": 4.9026696211894249e+10, + "footprint": 4.0000000000000000e+10 + } + ] +} diff --git a/bench/devcloud/dr-bench-a3f4821ec91c4d4c8ae2603dd15b4f11.json b/bench/devcloud/dr-bench-a3f4821ec91c4d4c8ae2603dd15b4f11.json new file mode 100644 index 0000000000..99a9993d38 --- /dev/null +++ b/bench/devcloud/dr-bench-a3f4821ec91c4d4c8ae2603dd15b4f11.json @@ -0,0 +1,134 @@ +{ + "context": { + "date": "2023-12-01T02:47:00-08:00", + "host_name": "idc-beta-batch-pvc-node-13", + "executable": "mhp/mhp-bench", + "num_cpus": 224, + "mhz_per_cpu": 3745, + "cpu_scaling_enabled": false, + "caches": [ + { + "type": "Data", + "level": 1, + "size": 49152, + "num_sharing": 2 + }, + { + "type": "Instruction", + "level": 1, + "size": 32768, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 2, + "size": 2097152, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 3, + "size": 110100480, + "num_sharing": 112 + } + ], + "load_avg": [1.87012,2.40039,26.4268], + "library_build_type": "debug", + "default_repetitions": "50", + "default_vector_size": "4000000000", + "device": "GPU", + "device_info": "Intel(R) Data Center GPU Max 1100, max_compute_units: 448", + "hostname": "idc-beta-batch-pvc-node-13\n", + "lscpu": "Architecture: x86_64\nCPU op-mode(s): 32-bit, 64-bit\nAddress sizes: 52 bits physical, 57 bits virtual\nByte Order: Little Endian\nCPU(s): 224\nOn-line CPU(s) list: 0-223\nVendor ID: GenuineIntel\nModel name: Intel(R) Xeon(R) Platinum 8480+\nCPU family: 6\nModel: 143\nThread(s) per core: 2\nCore(s) per socket: 56\nSocket(s): 2\nStepping: 8\nCPU max MHz: 3800.0000\nCPU min MHz: 800.0000\nBogoMIPS: 4000.00\nFlags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb cat_l3 cat_l2 cdp_l3 invpcid_single intel_ppin cdp_l2 ssbd mba ibrs ibpb stibp ibrs_enhanced tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid cqm rdt_a avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb intel_pt avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local split_lock_detect avx_vnni avx512_bf16 wbnoinvd dtherm ida arat pln pts hwp hwp_act_window hwp_epp hwp_pkg_req avx512vbmi umip pku ospke waitpkg avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg tme avx512_vpopcntdq la57 rdpid bus_lock_detect cldemote movdiri movdir64b enqcmd fsrm md_clear serialize tsxldtrk pconfig arch_lbr amx_bf16 avx512_fp16 amx_tile amx_int8 flush_l1d arch_capabilities\nVirtualization: VT-x\nL1d cache: 5.3 MiB (112 instances)\nL1i cache: 3.5 MiB (112 instances)\nL2 cache: 224 MiB (112 instances)\nL3 cache: 210 MiB (2 instances)\nNUMA node(s): 2\nNUMA node0 CPU(s): 0-55,112-167\nNUMA node1 CPU(s): 56-111,168-223\nVulnerability Gather data sampling: Not affected\nVulnerability Itlb multihit: Not affected\nVulnerability L1tf: Not affected\nVulnerability Mds: Not affected\nVulnerability Meltdown: Not affected\nVulnerability Mmio stale data: Not affected\nVulnerability Retbleed: Not affected\nVulnerability Spec rstack overflow: Not affected\nVulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl and seccomp\nVulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization\nVulnerability Spectre v2: Mitigation; Enhanced IBRS, IBPB conditional, RSB filling, PBRSB-eIBRS SW sequence\nVulnerability Srbds: Not affected\nVulnerability Tsx async abort: Not affected\n", + "model": "MHP", + "numactl": "", + "rank": "0", + "ranks": "2", + "runtime": "SYCL", + "target": "MHP_SYCL_GPU", + "weak-scaling": "1" + }, + "benchmarks": [ + { + "name": "Reduce_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 0, + "per_family_instance_index": 0, + "run_name": "Reduce_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 5.6053841304444586e+02, + "cpu_time": 5.6053320200000019e+02, + "time_unit": "ms", + "bytes_per_second": 1.4271992451952922e+12, + "footprint": 8.0000000000000000e+09 + }, + { + "name": "DotProduct_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 1, + "per_family_instance_index": 0, + "run_name": "DotProduct_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 2.3552865169820702e+03, + "cpu_time": 2.3551524550000026e+03, + "time_unit": "ms", + "bytes_per_second": 1.3586457430666643e+12, + "footprint": 3.2000000000000000e+10 + }, + { + "name": "Inclusive_Scan_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 2, + "per_family_instance_index": 0, + "run_name": "Inclusive_Scan_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 5.1521667200750826e+03, + "cpu_time": 5.1448086500000018e+03, + "time_unit": "ms", + "bytes_per_second": 3.1054895676525842e+11, + "footprint": 1.6000000000000000e+10 + }, + { + "name": "WaveEquation_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 3, + "per_family_instance_index": 0, + "run_name": "WaveEquation_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 9.3439200869310826e+03, + "cpu_time": 9.2250372820000030e+03, + "time_unit": "ms", + "bytes_per_second": 7.7822185558056274e+11, + "flops": 1.4447187913005497e+09, + "footprint": 3.5998231824000000e+10 + }, + { + "name": "Stencil2D_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 4, + "per_family_instance_index": 0, + "run_name": "Stencil2D_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 5.1370978191092911e+02, + "cpu_time": 5.1277019999999141e+02, + "time_unit": "ms", + "bytes_per_second": 1.2458396210001858e+12, + "footprint": 3.2000000000000000e+10 + } + ] +} diff --git a/bench/devcloud/dr-bench-cfc91caadee849f29be3cb9102189519.json b/bench/devcloud/dr-bench-cfc91caadee849f29be3cb9102189519.json new file mode 100644 index 0000000000..68923aa04c --- /dev/null +++ b/bench/devcloud/dr-bench-cfc91caadee849f29be3cb9102189519.json @@ -0,0 +1,69 @@ +{ + "context": { + "date": "2023-12-01T02:53:02-08:00", + "host_name": "idc-beta-batch-pvc-node-13", + "executable": "mhp/mhp-bench", + "num_cpus": 224, + "mhz_per_cpu": 3789, + "cpu_scaling_enabled": false, + "caches": [ + { + "type": "Data", + "level": 1, + "size": 49152, + "num_sharing": 2 + }, + { + "type": "Instruction", + "level": 1, + "size": 32768, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 2, + "size": 2097152, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 3, + "size": 110100480, + "num_sharing": 112 + } + ], + "load_avg": [2.9502,3.13232,19.0088], + "library_build_type": "debug", + "default_repetitions": "50", + "default_vector_size": "2000000000", + "device": "GPU", + "device_info": "Intel(R) Data Center GPU Max 1100, max_compute_units: 448", + "hostname": "idc-beta-batch-pvc-node-13\n", + "lscpu": "Architecture: x86_64\nCPU op-mode(s): 32-bit, 64-bit\nAddress sizes: 52 bits physical, 57 bits virtual\nByte Order: Little Endian\nCPU(s): 224\nOn-line CPU(s) list: 0-223\nVendor ID: GenuineIntel\nModel name: Intel(R) Xeon(R) Platinum 8480+\nCPU family: 6\nModel: 143\nThread(s) per core: 2\nCore(s) per socket: 56\nSocket(s): 2\nStepping: 8\nCPU max MHz: 3800.0000\nCPU min MHz: 800.0000\nBogoMIPS: 4000.00\nFlags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb cat_l3 cat_l2 cdp_l3 invpcid_single intel_ppin cdp_l2 ssbd mba ibrs ibpb stibp ibrs_enhanced tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid cqm rdt_a avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb intel_pt avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local split_lock_detect avx_vnni avx512_bf16 wbnoinvd dtherm ida arat pln pts hwp hwp_act_window hwp_epp hwp_pkg_req avx512vbmi umip pku ospke waitpkg avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg tme avx512_vpopcntdq la57 rdpid bus_lock_detect cldemote movdiri movdir64b enqcmd fsrm md_clear serialize tsxldtrk pconfig arch_lbr amx_bf16 avx512_fp16 amx_tile amx_int8 flush_l1d arch_capabilities\nVirtualization: VT-x\nL1d cache: 5.3 MiB (112 instances)\nL1i cache: 3.5 MiB (112 instances)\nL2 cache: 224 MiB (112 instances)\nL3 cache: 210 MiB (2 instances)\nNUMA node(s): 2\nNUMA node0 CPU(s): 0-55,112-167\nNUMA node1 CPU(s): 56-111,168-223\nVulnerability Gather data sampling: Not affected\nVulnerability Itlb multihit: Not affected\nVulnerability L1tf: Not affected\nVulnerability Mds: Not affected\nVulnerability Meltdown: Not affected\nVulnerability Mmio stale data: Not affected\nVulnerability Retbleed: Not affected\nVulnerability Spec rstack overflow: Not affected\nVulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl and seccomp\nVulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization\nVulnerability Spectre v2: Mitigation; Enhanced IBRS, IBPB conditional, RSB filling, PBRSB-eIBRS SW sequence\nVulnerability Srbds: Not affected\nVulnerability Tsx async abort: Not affected\n", + "model": "MHP", + "numactl": "", + "rank": "0", + "ranks": "1", + "runtime": "SYCL", + "target": "MHP_SYCL_GPU", + "weak-scaling": "0" + }, + "benchmarks": [ + { + "name": "Stencil2D_Reference/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 0, + "per_family_instance_index": 0, + "run_name": "Stencil2D_Reference/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 5.1119005197353073e+02, + "cpu_time": 5.1118343600000003e+02, + "time_unit": "ms", + "bytes_per_second": 6.2599027262871985e+11, + "footprint": 3.2000000000000000e+10 + } + ] +} diff --git a/bench/devcloud/dr-bench-d0c2ccea5b0c459ebde79e341a1d68d8.json b/bench/devcloud/dr-bench-d0c2ccea5b0c459ebde79e341a1d68d8.json new file mode 100644 index 0000000000..2e5ef863f1 --- /dev/null +++ b/bench/devcloud/dr-bench-d0c2ccea5b0c459ebde79e341a1d68d8.json @@ -0,0 +1,213 @@ +{ + "context": { + "date": "2023-12-01T03:14:46-08:00", + "host_name": "idc-beta-batch-pvc-node-13", + "executable": "mhp/mhp-bench", + "num_cpus": 224, + "mhz_per_cpu": 3000, + "cpu_scaling_enabled": false, + "caches": [ + { + "type": "Data", + "level": 1, + "size": 49152, + "num_sharing": 2 + }, + { + "type": "Instruction", + "level": 1, + "size": 32768, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 2, + "size": 2097152, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 3, + "size": 110100480, + "num_sharing": 112 + } + ], + "load_avg": [66.4565,83.0801,76.3306], + "library_build_type": "debug", + "default_repetitions": "50", + "default_vector_size": "2000000000", + "device": "CPU", + "hostname": "idc-beta-batch-pvc-node-13\n", + "lscpu": "Architecture: x86_64\nCPU op-mode(s): 32-bit, 64-bit\nAddress sizes: 52 bits physical, 57 bits virtual\nByte Order: Little Endian\nCPU(s): 224\nOn-line CPU(s) list: 0-223\nVendor ID: GenuineIntel\nModel name: Intel(R) Xeon(R) Platinum 8480+\nCPU family: 6\nModel: 143\nThread(s) per core: 2\nCore(s) per socket: 56\nSocket(s): 2\nStepping: 8\nCPU max MHz: 3800.0000\nCPU min MHz: 800.0000\nBogoMIPS: 4000.00\nFlags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb cat_l3 cat_l2 cdp_l3 invpcid_single intel_ppin cdp_l2 ssbd mba ibrs ibpb stibp ibrs_enhanced tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid cqm rdt_a avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb intel_pt avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local split_lock_detect avx_vnni avx512_bf16 wbnoinvd dtherm ida arat pln pts hwp hwp_act_window hwp_epp hwp_pkg_req avx512vbmi umip pku ospke waitpkg avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg tme avx512_vpopcntdq la57 rdpid bus_lock_detect cldemote movdiri movdir64b enqcmd fsrm md_clear serialize tsxldtrk pconfig arch_lbr amx_bf16 avx512_fp16 amx_tile amx_int8 flush_l1d arch_capabilities\nVirtualization: VT-x\nL1d cache: 5.3 MiB (112 instances)\nL1i cache: 3.5 MiB (112 instances)\nL2 cache: 224 MiB (112 instances)\nL3 cache: 210 MiB (2 instances)\nNUMA node(s): 2\nNUMA node0 CPU(s): 0-55,112-167\nNUMA node1 CPU(s): 56-111,168-223\nVulnerability Gather data sampling: Not affected\nVulnerability Itlb multihit: Not affected\nVulnerability L1tf: Not affected\nVulnerability Mds: Not affected\nVulnerability Meltdown: Not affected\nVulnerability Mmio stale data: Not affected\nVulnerability Retbleed: Not affected\nVulnerability Spec rstack overflow: Not affected\nVulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl and seccomp\nVulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization\nVulnerability Spectre v2: Mitigation; Enhanced IBRS, IBPB conditional, RSB filling, PBRSB-eIBRS SW sequence\nVulnerability Srbds: Not affected\nVulnerability Tsx async abort: Not affected\n", + "model": "MHP", + "numactl": "", + "rank": "0", + "ranks": "112", + "runtime": "DIRECT", + "target": "MHP_DIRECT_CPU", + "weak-scaling": "0" + }, + "benchmarks": [ + { + "name": "Reduce_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 0, + "per_family_instance_index": 0, + "run_name": "Reduce_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 1.2869208970933362e+03, + "cpu_time": 1.2868947490000000e+03, + "time_unit": "ms", + "bytes_per_second": 3.1081941470019452e+11, + "footprint": 7.1428571000000000e+07 + }, + { + "name": "DotProduct_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 1, + "per_family_instance_index": 0, + "run_name": "DotProduct_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 5.0859618239198298e+03, + "cpu_time": 5.0858296690000025e+03, + "time_unit": "ms", + "bytes_per_second": 3.1459142938805139e+11, + "footprint": 2.8571428500000000e+08 + }, + { + "name": "Inclusive_Scan_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 2, + "per_family_instance_index": 0, + "run_name": "Inclusive_Scan_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 8.9769161189791685e+03, + "cpu_time": 8.9727574059999988e+03, + "time_unit": "ms", + "bytes_per_second": 8.9117464104251190e+10, + "footprint": 1.4285714200000000e+08 + }, + { + "name": "Stream_Copy/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 3, + "per_family_instance_index": 0, + "run_name": "Stream_Copy/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 2.8961379438985155e+03, + "cpu_time": 2.8959479829999991e+03, + "time_unit": "ms", + "bytes_per_second": 2.7622993638317981e+11, + "footprint": 1.4285714200000000e+08 + }, + { + "name": "Stream_Scale/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 4, + "per_family_instance_index": 0, + "run_name": "Stream_Scale/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 3.1407158260151191e+03, + "cpu_time": 3.1388039919999997e+03, + "time_unit": "ms", + "bytes_per_second": 2.5471900175541348e+11, + "footprint": 1.4285714200000000e+08 + }, + { + "name": "Stream_Add/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 5, + "per_family_instance_index": 0, + "run_name": "Stream_Add/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 4.2217488998867384e+03, + "cpu_time": 4.2216444820000024e+03, + "time_unit": "ms", + "bytes_per_second": 2.8424239064341174e+11, + "footprint": 2.1428571400000000e+08 + }, + { + "name": "Stream_Triad/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 6, + "per_family_instance_index": 0, + "run_name": "Stream_Triad/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 4.3232332100586982e+03, + "cpu_time": 4.3231834630000067e+03, + "time_unit": "ms", + "bytes_per_second": 2.7757003651989136e+11, + "footprint": 2.1428571400000000e+08 + }, + { + "name": "WaveEquation_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 7, + "per_family_instance_index": 0, + "run_name": "WaveEquation_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 1.3203985642042264e+04, + "cpu_time": 1.3203679198999993e+04, + "time_unit": "ms", + "bytes_per_second": 2.7535465652306274e+11, + "flops": 5.1117819899083436e+08, + "footprint": 3.2140902800000000e+08 + }, + { + "name": "Stencil2D_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 8, + "per_family_instance_index": 0, + "run_name": "Stencil2D_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 1.4304288619512008e+03, + "cpu_time": 1.4279558479999964e+03, + "time_unit": "ms", + "bytes_per_second": 2.2374492609400281e+11, + "footprint": 2.8576000000000000e+08 + }, + { + "name": "BlackScholes_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 9, + "per_family_instance_index": 0, + "run_name": "BlackScholes_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 8.3332474020008540e+03, + "cpu_time": 8.3297003160000004e+03, + "time_unit": "ms", + "bytes_per_second": 2.4000247484789545e+11, + "footprint": 3.5714285700000000e+08 + } + ] +} diff --git a/bench/devcloud/dr-bench-dc6b76bd54834580a8fccdc353f49de1.json b/bench/devcloud/dr-bench-dc6b76bd54834580a8fccdc353f49de1.json new file mode 100644 index 0000000000..57da20cf8b --- /dev/null +++ b/bench/devcloud/dr-bench-dc6b76bd54834580a8fccdc353f49de1.json @@ -0,0 +1,134 @@ +{ + "context": { + "date": "2023-12-01T02:53:39-08:00", + "host_name": "idc-beta-batch-pvc-node-13", + "executable": "shp/shp-bench", + "num_cpus": 224, + "mhz_per_cpu": 3798, + "cpu_scaling_enabled": false, + "caches": [ + { + "type": "Data", + "level": 1, + "size": 49152, + "num_sharing": 2 + }, + { + "type": "Instruction", + "level": 1, + "size": 32768, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 2, + "size": 2097152, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 3, + "size": 110100480, + "num_sharing": 112 + } + ], + "load_avg": [2.08643,2.89502,18.3413], + "library_build_type": "debug", + "default_repetitions": "50", + "default_vector_size": "2000000000", + "device": "GPU", + "device_info0": "Intel(R) Data Center GPU Max 1100, max_compute_units: 448", + "hostname": "idc-beta-batch-pvc-node-13\n", + "lscpu": "Architecture: x86_64\nCPU op-mode(s): 32-bit, 64-bit\nAddress sizes: 52 bits physical, 57 bits virtual\nByte Order: Little Endian\nCPU(s): 224\nOn-line CPU(s) list: 0-223\nVendor ID: GenuineIntel\nModel name: Intel(R) Xeon(R) Platinum 8480+\nCPU family: 6\nModel: 143\nThread(s) per core: 2\nCore(s) per socket: 56\nSocket(s): 2\nStepping: 8\nCPU max MHz: 3800.0000\nCPU min MHz: 800.0000\nBogoMIPS: 4000.00\nFlags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb cat_l3 cat_l2 cdp_l3 invpcid_single intel_ppin cdp_l2 ssbd mba ibrs ibpb stibp ibrs_enhanced tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid cqm rdt_a avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb intel_pt avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local split_lock_detect avx_vnni avx512_bf16 wbnoinvd dtherm ida arat pln pts hwp hwp_act_window hwp_epp hwp_pkg_req avx512vbmi umip pku ospke waitpkg avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg tme avx512_vpopcntdq la57 rdpid bus_lock_detect cldemote movdiri movdir64b enqcmd fsrm md_clear serialize tsxldtrk pconfig arch_lbr amx_bf16 avx512_fp16 amx_tile amx_int8 flush_l1d arch_capabilities\nVirtualization: VT-x\nL1d cache: 5.3 MiB (112 instances)\nL1i cache: 3.5 MiB (112 instances)\nL2 cache: 224 MiB (112 instances)\nL3 cache: 210 MiB (2 instances)\nNUMA node(s): 2\nNUMA node0 CPU(s): 0-55,112-167\nNUMA node1 CPU(s): 56-111,168-223\nVulnerability Gather data sampling: Not affected\nVulnerability Itlb multihit: Not affected\nVulnerability L1tf: Not affected\nVulnerability Mds: Not affected\nVulnerability Meltdown: Not affected\nVulnerability Mmio stale data: Not affected\nVulnerability Retbleed: Not affected\nVulnerability Spec rstack overflow: Not affected\nVulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl and seccomp\nVulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization\nVulnerability Spectre v2: Mitigation; Enhanced IBRS, IBPB conditional, RSB filling, PBRSB-eIBRS SW sequence\nVulnerability Srbds: Not affected\nVulnerability Tsx async abort: Not affected\n", + "model": "SHP", + "numactl": "", + "rank": "0", + "ranks": "1", + "runtime": "SYCL", + "target": "SHP_SYCL_GPU", + "weak-scaling": "0" + }, + "benchmarks": [ + { + "name": "Gemm_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 0, + "per_family_instance_index": 0, + "run_name": "Gemm_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 3.8455069191646544e+02, + "cpu_time": 6.0797000000001322e-02, + "time_unit": "ms", + "bytes_per_second": 7.9885436811730385e+09, + "flops": 1.0651391574897385e+13, + "footprint": 3.0720000000000000e+09 + }, + { + "name": "Reduce_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 1, + "per_family_instance_index": 0, + "run_name": "Reduce_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 5.5432180597096976e+02, + "cpu_time": 5.5375251300000002e+02, + "time_unit": "ms", + "bytes_per_second": 7.2160249820832104e+11, + "footprint": 8.0000000000000000e+09 + }, + { + "name": "DotProduct_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 2, + "per_family_instance_index": 0, + "run_name": "DotProduct_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 2.3043222529278560e+03, + "cpu_time": 2.3034746080000000e+03, + "time_unit": "ms", + "bytes_per_second": 6.9434732835958643e+11, + "footprint": 3.2000000000000000e+10 + }, + { + "name": "Inclusive_Scan_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 3, + "per_family_instance_index": 0, + "run_name": "Inclusive_Scan_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 4.1826807269988785e+03, + "cpu_time": 4.1751754369999999e+03, + "time_unit": "ms", + "bytes_per_second": 1.9126489737456229e+11, + "footprint": 1.6000000000000000e+10 + }, + { + "name": "DRSortFixture/Sort_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 4, + "per_family_instance_index": 0, + "run_name": "DRSortFixture/Sort_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 6.5593484393230244e+02, + "cpu_time": 6.5548174799999265e+02, + "time_unit": "ms", + "bytes_per_second": 1.2196333330975878e+10, + "footprint": 8.0000000000000000e+09 + } + ] +} diff --git a/bench/devcloud/dr-bench-ee56a4c8add24f4b9b6777eb1a3db39b.json b/bench/devcloud/dr-bench-ee56a4c8add24f4b9b6777eb1a3db39b.json new file mode 100644 index 0000000000..788af94380 --- /dev/null +++ b/bench/devcloud/dr-bench-ee56a4c8add24f4b9b6777eb1a3db39b.json @@ -0,0 +1,134 @@ +{ + "context": { + "date": "2023-12-01T02:43:32-08:00", + "host_name": "idc-beta-batch-pvc-node-13", + "executable": "mhp/mhp-bench", + "num_cpus": 224, + "mhz_per_cpu": 3797, + "cpu_scaling_enabled": false, + "caches": [ + { + "type": "Data", + "level": 1, + "size": 49152, + "num_sharing": 2 + }, + { + "type": "Instruction", + "level": 1, + "size": 32768, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 2, + "size": 2097152, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 3, + "size": 110100480, + "num_sharing": 112 + } + ], + "load_avg": [1.56152,2.44971,32.5269], + "library_build_type": "debug", + "default_repetitions": "50", + "default_vector_size": "2000000000", + "device": "GPU", + "device_info": "Intel(R) Data Center GPU Max 1100, max_compute_units: 448", + "hostname": "idc-beta-batch-pvc-node-13\n", + "lscpu": "Architecture: x86_64\nCPU op-mode(s): 32-bit, 64-bit\nAddress sizes: 52 bits physical, 57 bits virtual\nByte Order: Little Endian\nCPU(s): 224\nOn-line CPU(s) list: 0-223\nVendor ID: GenuineIntel\nModel name: Intel(R) Xeon(R) Platinum 8480+\nCPU family: 6\nModel: 143\nThread(s) per core: 2\nCore(s) per socket: 56\nSocket(s): 2\nStepping: 8\nCPU max MHz: 3800.0000\nCPU min MHz: 800.0000\nBogoMIPS: 4000.00\nFlags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb cat_l3 cat_l2 cdp_l3 invpcid_single intel_ppin cdp_l2 ssbd mba ibrs ibpb stibp ibrs_enhanced tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid cqm rdt_a avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb intel_pt avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local split_lock_detect avx_vnni avx512_bf16 wbnoinvd dtherm ida arat pln pts hwp hwp_act_window hwp_epp hwp_pkg_req avx512vbmi umip pku ospke waitpkg avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg tme avx512_vpopcntdq la57 rdpid bus_lock_detect cldemote movdiri movdir64b enqcmd fsrm md_clear serialize tsxldtrk pconfig arch_lbr amx_bf16 avx512_fp16 amx_tile amx_int8 flush_l1d arch_capabilities\nVirtualization: VT-x\nL1d cache: 5.3 MiB (112 instances)\nL1i cache: 3.5 MiB (112 instances)\nL2 cache: 224 MiB (112 instances)\nL3 cache: 210 MiB (2 instances)\nNUMA node(s): 2\nNUMA node0 CPU(s): 0-55,112-167\nNUMA node1 CPU(s): 56-111,168-223\nVulnerability Gather data sampling: Not affected\nVulnerability Itlb multihit: Not affected\nVulnerability L1tf: Not affected\nVulnerability Mds: Not affected\nVulnerability Meltdown: Not affected\nVulnerability Mmio stale data: Not affected\nVulnerability Retbleed: Not affected\nVulnerability Spec rstack overflow: Not affected\nVulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl and seccomp\nVulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization\nVulnerability Spectre v2: Mitigation; Enhanced IBRS, IBPB conditional, RSB filling, PBRSB-eIBRS SW sequence\nVulnerability Srbds: Not affected\nVulnerability Tsx async abort: Not affected\n", + "model": "MHP", + "numactl": "", + "rank": "0", + "ranks": "2", + "runtime": "SYCL", + "target": "MHP_SYCL_GPU", + "weak-scaling": "0" + }, + "benchmarks": [ + { + "name": "Reduce_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 0, + "per_family_instance_index": 0, + "run_name": "Reduce_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 2.7837924090020414e+02, + "cpu_time": 2.7828499700000009e+02, + "time_unit": "ms", + "bytes_per_second": 1.4368887518570234e+12, + "footprint": 4.0000000000000000e+09 + }, + { + "name": "DotProduct_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 1, + "per_family_instance_index": 0, + "run_name": "DotProduct_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 1.1742977420747145e+03, + "cpu_time": 1.1742842789999984e+03, + "time_unit": "ms", + "bytes_per_second": 1.3625164578560522e+12, + "footprint": 1.6000000000000000e+10 + }, + { + "name": "Inclusive_Scan_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 2, + "per_family_instance_index": 0, + "run_name": "Inclusive_Scan_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 2.5778796020036316e+03, + "cpu_time": 2.5765050490000012e+03, + "time_unit": "ms", + "bytes_per_second": 3.1033256920851068e+11, + "footprint": 8.0000000000000000e+09 + }, + { + "name": "WaveEquation_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 3, + "per_family_instance_index": 0, + "run_name": "WaveEquation_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 4.5682617340895868e+03, + "cpu_time": 4.5051493720000053e+03, + "time_unit": "ms", + "bytes_per_second": 7.9587798222436523e+11, + "flops": 1.4774962541293907e+09, + "footprint": 1.7998905600000000e+10 + }, + { + "name": "Stencil2D_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 4, + "per_family_instance_index": 0, + "run_name": "Stencil2D_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 2.5990616592370077e+02, + "cpu_time": 2.5885902199999578e+02, + "time_unit": "ms", + "bytes_per_second": 1.2312135761101592e+12, + "footprint": 1.6000000000000000e+10 + } + ] +} diff --git a/bench/devcloud/dr-bench-f4eaa5a34ce94d35ab3bd5bdcf44ed6b.json b/bench/devcloud/dr-bench-f4eaa5a34ce94d35ab3bd5bdcf44ed6b.json new file mode 100644 index 0000000000..c20f1feabd --- /dev/null +++ b/bench/devcloud/dr-bench-f4eaa5a34ce94d35ab3bd5bdcf44ed6b.json @@ -0,0 +1,133 @@ +{ + "context": { + "date": "2023-12-01T02:41:14-08:00", + "host_name": "idc-beta-batch-pvc-node-13", + "executable": "mhp/mhp-bench", + "num_cpus": 224, + "mhz_per_cpu": 3793, + "cpu_scaling_enabled": false, + "caches": [ + { + "type": "Data", + "level": 1, + "size": 49152, + "num_sharing": 2 + }, + { + "type": "Instruction", + "level": 1, + "size": 32768, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 2, + "size": 2097152, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 3, + "size": 110100480, + "num_sharing": 112 + } + ], + "load_avg": [2.07471,2.771,37.5034], + "library_build_type": "debug", + "default_repetitions": "50", + "default_vector_size": "2000000000", + "device": "GPU", + "device_info": "Intel(R) Data Center GPU Max 1100, max_compute_units: 448", + "hostname": "idc-beta-batch-pvc-node-13\n", + "lscpu": "Architecture: x86_64\nCPU op-mode(s): 32-bit, 64-bit\nAddress sizes: 52 bits physical, 57 bits virtual\nByte Order: Little Endian\nCPU(s): 224\nOn-line CPU(s) list: 0-223\nVendor ID: GenuineIntel\nModel name: Intel(R) Xeon(R) Platinum 8480+\nCPU family: 6\nModel: 143\nThread(s) per core: 2\nCore(s) per socket: 56\nSocket(s): 2\nStepping: 8\nCPU max MHz: 3800.0000\nCPU min MHz: 800.0000\nBogoMIPS: 4000.00\nFlags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb cat_l3 cat_l2 cdp_l3 invpcid_single intel_ppin cdp_l2 ssbd mba ibrs ibpb stibp ibrs_enhanced tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid cqm rdt_a avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb intel_pt avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local split_lock_detect avx_vnni avx512_bf16 wbnoinvd dtherm ida arat pln pts hwp hwp_act_window hwp_epp hwp_pkg_req avx512vbmi umip pku ospke waitpkg avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg tme avx512_vpopcntdq la57 rdpid bus_lock_detect cldemote movdiri movdir64b enqcmd fsrm md_clear serialize tsxldtrk pconfig arch_lbr amx_bf16 avx512_fp16 amx_tile amx_int8 flush_l1d arch_capabilities\nVirtualization: VT-x\nL1d cache: 5.3 MiB (112 instances)\nL1i cache: 3.5 MiB (112 instances)\nL2 cache: 224 MiB (112 instances)\nL3 cache: 210 MiB (2 instances)\nNUMA node(s): 2\nNUMA node0 CPU(s): 0-55,112-167\nNUMA node1 CPU(s): 56-111,168-223\nVulnerability Gather data sampling: Not affected\nVulnerability Itlb multihit: Not affected\nVulnerability L1tf: Not affected\nVulnerability Mds: Not affected\nVulnerability Meltdown: Not affected\nVulnerability Mmio stale data: Not affected\nVulnerability Retbleed: Not affected\nVulnerability Spec rstack overflow: Not affected\nVulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl and seccomp\nVulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization\nVulnerability Spectre v2: Mitigation; Enhanced IBRS, IBPB conditional, RSB filling, PBRSB-eIBRS SW sequence\nVulnerability Srbds: Not affected\nVulnerability Tsx async abort: Not affected\n", + "model": "MHP", + "numactl": "", + "rank": "0", + "ranks": "3", + "runtime": "SYCL", + "target": "MHP_SYCL_GPU", + "weak-scaling": "0" + }, + "benchmarks": [ + { + "name": "Stream_Copy/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 0, + "per_family_instance_index": 0, + "run_name": "Stream_Copy/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 3.1264175705294753e+02, + "cpu_time": 3.9651670000000472e+00, + "time_unit": "ms", + "bytes_per_second": 2.5588392527633979e+12, + "footprint": 5.3333333330000000e+09 + }, + { + "name": "Stream_Scale/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 1, + "per_family_instance_index": 0, + "run_name": "Stream_Scale/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 3.1270852895896047e+02, + "cpu_time": 4.4775960000000836e+00, + "time_unit": "ms", + "bytes_per_second": 2.5582928699235806e+12, + "footprint": 5.3333333330000000e+09 + }, + { + "name": "Stream_Add/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 2, + "per_family_instance_index": 0, + "run_name": "Stream_Add/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 5.0504071395418350e+02, + "cpu_time": 1.0612863000000416e+01, + "time_unit": "ms", + "bytes_per_second": 2.3760460629098154e+12, + "footprint": 8.0000000000000000e+09 + }, + { + "name": "Stream_Triad/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 3, + "per_family_instance_index": 0, + "run_name": "Stream_Triad/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 5.0120324504279898e+02, + "cpu_time": 6.1936550000005752e+00, + "time_unit": "ms", + "bytes_per_second": 2.3942382892942544e+12, + "footprint": 8.0000000000000000e+09 + }, + { + "name": "BlackScholes_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 4, + "per_family_instance_index": 0, + "run_name": "BlackScholes_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 8.3435607390625319e+02, + "cpu_time": 4.6766060000003051e+00, + "time_unit": "ms", + "bytes_per_second": 2.3970581176888711e+12, + "footprint": 1.3333333333000000e+10 + } + ] +} diff --git a/bench/devcloud/dr-bench-fd64e9be192a4f1687d8136fe6bc4640.json b/bench/devcloud/dr-bench-fd64e9be192a4f1687d8136fe6bc4640.json new file mode 100644 index 0000000000..f5f3ce2cb1 --- /dev/null +++ b/bench/devcloud/dr-bench-fd64e9be192a4f1687d8136fe6bc4640.json @@ -0,0 +1,181 @@ +{ + "context": { + "date": "2023-12-01T02:58:00-08:00", + "host_name": "idc-beta-batch-pvc-node-13", + "executable": "mhp/mhp-bench", + "num_cpus": 224, + "mhz_per_cpu": 3800, + "cpu_scaling_enabled": false, + "caches": [ + { + "type": "Data", + "level": 1, + "size": 49152, + "num_sharing": 2 + }, + { + "type": "Instruction", + "level": 1, + "size": 32768, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 2, + "size": 2097152, + "num_sharing": 2 + }, + { + "type": "Unified", + "level": 3, + "size": 110100480, + "num_sharing": 112 + } + ], + "load_avg": [92.4893,49.0439,32.8345], + "library_build_type": "debug", + "default_repetitions": "50", + "default_vector_size": "2000000000", + "device": "CPU", + "device_info": "Intel(R) Xeon(R) Platinum 8480+, max_compute_units: 112", + "hostname": "idc-beta-batch-pvc-node-13\n", + "lscpu": "Architecture: x86_64\nCPU op-mode(s): 32-bit, 64-bit\nAddress sizes: 52 bits physical, 57 bits virtual\nByte Order: Little Endian\nCPU(s): 224\nOn-line CPU(s) list: 0-223\nVendor ID: GenuineIntel\nModel name: Intel(R) Xeon(R) Platinum 8480+\nCPU family: 6\nModel: 143\nThread(s) per core: 2\nCore(s) per socket: 56\nSocket(s): 2\nStepping: 8\nCPU max MHz: 3800.0000\nCPU min MHz: 800.0000\nBogoMIPS: 4000.00\nFlags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb cat_l3 cat_l2 cdp_l3 invpcid_single intel_ppin cdp_l2 ssbd mba ibrs ibpb stibp ibrs_enhanced tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid cqm rdt_a avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb intel_pt avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local split_lock_detect avx_vnni avx512_bf16 wbnoinvd dtherm ida arat pln pts hwp hwp_act_window hwp_epp hwp_pkg_req avx512vbmi umip pku ospke waitpkg avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg tme avx512_vpopcntdq la57 rdpid bus_lock_detect cldemote movdiri movdir64b enqcmd fsrm md_clear serialize tsxldtrk pconfig arch_lbr amx_bf16 avx512_fp16 amx_tile amx_int8 flush_l1d arch_capabilities\nVirtualization: VT-x\nL1d cache: 5.3 MiB (112 instances)\nL1i cache: 3.5 MiB (112 instances)\nL2 cache: 224 MiB (112 instances)\nL3 cache: 210 MiB (2 instances)\nNUMA node(s): 2\nNUMA node0 CPU(s): 0-55,112-167\nNUMA node1 CPU(s): 56-111,168-223\nVulnerability Gather data sampling: Not affected\nVulnerability Itlb multihit: Not affected\nVulnerability L1tf: Not affected\nVulnerability Mds: Not affected\nVulnerability Meltdown: Not affected\nVulnerability Mmio stale data: Not affected\nVulnerability Retbleed: Not affected\nVulnerability Spec rstack overflow: Not affected\nVulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl and seccomp\nVulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization\nVulnerability Spectre v2: Mitigation; Enhanced IBRS, IBPB conditional, RSB filling, PBRSB-eIBRS SW sequence\nVulnerability Srbds: Not affected\nVulnerability Tsx async abort: Not affected\n", + "model": "MHP", + "numactl": "", + "rank": "0", + "ranks": "2", + "runtime": "SYCL", + "target": "MHP_SYCL_CPU", + "weak-scaling": "0" + }, + "benchmarks": [ + { + "name": "Reduce_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 0, + "per_family_instance_index": 0, + "run_name": "Reduce_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 1.2182735549121476e+03, + "cpu_time": 1.2036727840000001e+03, + "time_unit": "ms", + "bytes_per_second": 3.2833348338489124e+11, + "footprint": 4.0000000000000000e+09 + }, + { + "name": "DotProduct_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 1, + "per_family_instance_index": 0, + "run_name": "DotProduct_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 4.7803701899520393e+03, + "cpu_time": 4.7243844870000021e+03, + "time_unit": "ms", + "bytes_per_second": 3.3470211226801508e+11, + "footprint": 1.6000000000000000e+10 + }, + { + "name": "Inclusive_Scan_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 2, + "per_family_instance_index": 0, + "run_name": "Inclusive_Scan_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 9.8932958750273046e+03, + "cpu_time": 9.8681771910000007e+03, + "time_unit": "ms", + "bytes_per_second": 8.0862839856974564e+10, + "footprint": 8.0000000000000000e+09 + }, + { + "name": "Stream_Copy/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 3, + "per_family_instance_index": 0, + "run_name": "Stream_Copy/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 2.8351826231058162e+03, + "cpu_time": 6.6812887300000057e+02, + "time_unit": "ms", + "bytes_per_second": 2.8216877229715649e+11, + "footprint": 8.0000000000000000e+09 + }, + { + "name": "Stream_Scale/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 4, + "per_family_instance_index": 0, + "run_name": "Stream_Scale/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 2.8555264128859349e+03, + "cpu_time": 6.7897184599999605e+02, + "time_unit": "ms", + "bytes_per_second": 2.8015850121010815e+11, + "footprint": 8.0000000000000000e+09 + }, + { + "name": "Stream_Add/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 5, + "per_family_instance_index": 0, + "run_name": "Stream_Add/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 4.0924860980707545e+03, + "cpu_time": 9.6872324499999968e+02, + "time_unit": "ms", + "bytes_per_second": 2.9322029965250073e+11, + "footprint": 1.2000000000000000e+10 + }, + { + "name": "Stream_Triad/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 6, + "per_family_instance_index": 0, + "run_name": "Stream_Triad/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 4.1035024920578899e+03, + "cpu_time": 9.4834765600000287e+02, + "time_unit": "ms", + "bytes_per_second": 2.9243311106123022e+11, + "footprint": 1.2000000000000000e+10 + }, + { + "name": "BlackScholes_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "family_index": 7, + "per_family_instance_index": 0, + "run_name": "BlackScholes_DR/min_time:0.100/min_warmup_time:0.100/real_time", + "run_type": "iteration", + "repetitions": 1, + "repetition_index": 0, + "threads": 1, + "iterations": 1, + "real_time": 2.0159454031905887e+04, + "cpu_time": 1.5916687900000426e+02, + "time_unit": "ms", + "bytes_per_second": 9.9209035960728287e+10, + "footprint": 2.0000000000000000e+10 + } + ] +} diff --git a/doxygen/algorithms_8hpp_source.html b/doxygen/algorithms_8hpp_source.html new file mode 100644 index 0000000000..67e23517ee --- /dev/null +++ b/doxygen/algorithms_8hpp_source.html @@ -0,0 +1,103 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/algorithms/algorithms.hpp Source File + + + + + + + + + + +
    +
    algorithms.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <dr/sp/algorithms/copy.hpp>
    +
    8#include <dr/sp/algorithms/equal.hpp>
    +
    9#include <dr/sp/algorithms/exclusive_scan.hpp>
    +
    10#include <dr/sp/algorithms/execution_policy.hpp>
    +
    11#include <dr/sp/algorithms/fill.hpp>
    +
    12#include <dr/sp/algorithms/for_each.hpp>
    +
    13#include <dr/sp/algorithms/inclusive_scan.hpp>
    +
    14#include <dr/sp/algorithms/iota.hpp>
    +
    15#include <dr/sp/algorithms/matrix/matrix_algorithms.hpp>
    +
    16#include <dr/sp/algorithms/reduce.hpp>
    +
    17#include <dr/sp/algorithms/sort.hpp>
    +
    18#include <dr/sp/algorithms/transform.hpp>
    +
    + + + + diff --git a/doxygen/alignment_8hpp_source.html b/doxygen/alignment_8hpp_source.html new file mode 100644 index 0000000000..39e0411587 --- /dev/null +++ b/doxygen/alignment_8hpp_source.html @@ -0,0 +1,157 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/alignment.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    alignment.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <dr/concepts/concepts.hpp>
    +
    8#include <dr/detail/ranges.hpp>
    +
    9#include <dr/detail/ranges_shim.hpp>
    +
    10
    +
    11namespace dr::mp {
    +
    12
    +
    13template <typename T>
    +
    14concept has_segments = requires(T &t) { dr::ranges::segments(t); };
    +
    15
    +
    16template <typename T>
    + +
    18
    +
    19auto sub_aligned(has_segments auto &&r) {
    +
    20 if (rng::empty(dr::ranges::segments(r))) {
    +
    21 dr::drlog.debug("unaligned: empty segments\n");
    +
    22 return false;
    +
    23 } else {
    +
    24 return true;
    +
    25 }
    +
    26}
    +
    27
    +
    28auto sub_aligned(auto &&r) { return true; }
    +
    29
    +
    30// iter1 is aligned with iter2, and iter2 is aligned with the rest
    +
    31bool sub_aligned(has_segments auto &&r1, has_segments auto &&r2,
    +
    32 auto &&...rest) {
    +
    33 auto z = rng::views::zip(dr::ranges::segments(r1), dr::ranges::segments(r2));
    +
    34 auto i = rng::distance(z) - 1;
    +
    35 for (auto seg : z) {
    +
    36 if (dr::ranges::rank(seg.first) != dr::ranges::rank(seg.second)) {
    +
    37 dr::drlog.debug("unaligned: ranks: {} {}\n", dr::ranges::rank(seg.first),
    +
    38 dr::ranges::rank(seg.second));
    +
    39 return false;
    +
    40 }
    +
    41 // Size mismatch would misalign following segments. Skip test if this is the
    +
    42 // last segment
    +
    43 if (i > 0 && rng::distance(seg.first) != rng::distance(seg.second)) {
    +
    44 dr::drlog.debug("unaligned: size: {} {}\n", rng::distance(seg.first),
    +
    45 rng::distance(seg.second));
    +
    46 return false;
    +
    47 }
    +
    48 i--;
    +
    49 }
    +
    50
    +
    51 return sub_aligned(r2, rest...);
    +
    52}
    +
    53
    +
    54// Skip local iterators
    +
    55bool sub_aligned(no_segments auto &&r1, has_segments auto &&r2, auto... rest) {
    +
    56 return sub_aligned(r2, rest...);
    +
    57}
    +
    58
    +
    59bool sub_aligned(has_segments auto &&r1, no_segments auto &&r2,
    +
    60 auto &&...rest) {
    +
    61 return sub_aligned(r1, rest...);
    +
    62}
    +
    63
    +
    64// This was added to allow passing state down the call tree, but it is
    +
    65// no longer needed. I did not delete it in case we need it again.
    +
    66template <typename... Args> bool aligned(Args &&...args) {
    +
    67 return sub_aligned(std::forward<Args>(args)...);
    +
    68}
    +
    69
    +
    70} // namespace dr::mp
    +
    Definition: alignment.hpp:14
    +
    Definition: alignment.hpp:17
    +
    + + + + diff --git a/doxygen/allocator_8hpp_source.html b/doxygen/allocator_8hpp_source.html new file mode 100644 index 0000000000..bb601801af --- /dev/null +++ b/doxygen/allocator_8hpp_source.html @@ -0,0 +1,141 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/allocator.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    allocator.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <dr/mp/global.hpp>
    +
    8
    +
    9namespace dr::mp::__detail {
    +
    10
    +
    11template <typename T> class allocator {
    +
    12
    +
    13public:
    +
    14 T *allocate(std::size_t sz) {
    +
    15 if (sz == 0) {
    +
    16 return nullptr;
    +
    17 }
    +
    18
    +
    19 T *mem = nullptr;
    +
    20
    +
    21 if (mp::use_sycl()) {
    +
    22#ifdef SYCL_LANGUAGE_VERSION
    +
    23 mem = sycl::malloc<T>(sz, sycl_queue(), sycl_mem_kind());
    +
    24#else
    +
    25 assert(false);
    +
    26#endif
    +
    27 } else {
    +
    28 mem = std_allocator_.allocate(sz);
    +
    29 }
    +
    30
    +
    31 assert(mem != nullptr);
    +
    32 return mem;
    +
    33 }
    +
    34
    +
    35 void deallocate(T *ptr, std::size_t sz) {
    +
    36 if (sz == 0) {
    +
    37 assert(ptr == nullptr);
    +
    38 return;
    +
    39 }
    +
    40 assert(ptr != nullptr);
    +
    41#ifdef SYCL_LANGUAGE_VERSION
    +
    42 if (mp::use_sycl()) {
    +
    43 sycl::free(ptr, sycl_queue());
    +
    44 return;
    +
    45 }
    +
    46#endif
    +
    47
    +
    48 std_allocator_.deallocate(ptr, sz);
    +
    49 }
    +
    50
    +
    51private:
    +
    52 std::allocator<T> std_allocator_;
    +
    53};
    +
    54
    +
    55} // namespace dr::mp::__detail
    +
    Definition: allocator.hpp:11
    +
    + + + + diff --git a/doxygen/allocators_8hpp_source.html b/doxygen/allocators_8hpp_source.html new file mode 100644 index 0000000000..8e6906b797 --- /dev/null +++ b/doxygen/allocators_8hpp_source.html @@ -0,0 +1,217 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/allocators.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    allocators.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <type_traits>
    +
    8
    +
    9#include <sycl/sycl.hpp>
    +
    10
    +
    11#include <dr/sp/device_ptr.hpp>
    +
    12
    +
    13namespace dr::sp {
    +
    14
    +
    15template <typename T>
    +
    16using shared_allocator = sycl::usm_allocator<T, sycl::usm::alloc::shared>;
    +
    17
    +
    18template <typename T, std::size_t Alignment = 0>
    +
    19 requires(std::is_trivially_copyable_v<T>)
    + +
    21public:
    +
    22 using value_type = T;
    +
    23 using pointer = device_ptr<T>;
    + + + +
    27 using size_type = std::size_t;
    +
    28 using difference_type = std::ptrdiff_t;
    +
    29
    +
    30 template <typename U>
    + +
    32 : device_(other.get_device()), context_(other.get_context()) {}
    +
    33
    +
    34 device_allocator(const sycl::queue &q) noexcept
    +
    35 : device_(q.get_device()), context_(q.get_context()) {}
    +
    36 device_allocator(const sycl::context &ctxt, const sycl::device &dev) noexcept
    +
    37 : device_(dev), context_(ctxt) {}
    +
    38
    +
    39 device_allocator(const device_allocator &) = default;
    +
    40 device_allocator &operator=(const device_allocator &) = default;
    +
    41 ~device_allocator() = default;
    +
    42
    +
    43 using is_always_equal = std::false_type;
    +
    44
    +
    45 pointer allocate(std::size_t size) {
    +
    46 if constexpr (Alignment == 0) {
    +
    47 return pointer(sycl::malloc_device<T>(size, device_, context_));
    +
    48 } else {
    +
    49 return pointer(
    +
    50 sycl::aligned_alloc_device<T>(Alignment, size, device_, context_));
    +
    51 }
    +
    52 }
    +
    53
    +
    54 void deallocate(pointer ptr, std::size_t n) {
    +
    55 sycl::free(ptr.get_raw_pointer(), context_);
    +
    56 }
    +
    57
    +
    58 bool operator==(const device_allocator &) const = default;
    +
    59 bool operator!=(const device_allocator &) const = default;
    +
    60
    +
    61 template <typename U> struct rebind {
    + +
    63 };
    +
    64
    +
    65 sycl::device get_device() const noexcept { return device_; }
    +
    66
    +
    67 sycl::context get_context() const noexcept { return context_; }
    +
    68
    +
    69private:
    +
    70 sycl::device device_;
    +
    71 sycl::context context_;
    +
    72};
    +
    73
    +
    74template <typename Allocator> class buffered_allocator {
    +
    75public:
    +
    76 using value_type = typename std::allocator_traits<Allocator>::value_type;
    +
    77 using pointer = typename std::allocator_traits<Allocator>::pointer;
    +
    78 using const_pointer =
    +
    79 typename std::allocator_traits<Allocator>::const_pointer;
    +
    80 using size_type = typename std::allocator_traits<Allocator>::size_type;
    +
    81 using difference_type =
    +
    82 typename std::allocator_traits<Allocator>::difference_type;
    +
    83
    +
    84 buffered_allocator(const Allocator &alloc, std::size_t buffer_size,
    +
    85 std::size_t n_buffers)
    +
    86 : alloc_(alloc), buffer_size_(buffer_size),
    +
    87 free_buffers_(new std::vector<pointer>()),
    +
    88 buffers_(new std::vector<pointer>()) {
    +
    89 for (std::size_t i = 0; i < n_buffers; i++) {
    +
    90 buffers_->push_back(alloc_.allocate(buffer_size_));
    +
    91 }
    +
    92 free_buffers_->assign(buffers_->begin(), buffers_->end());
    +
    93 }
    +
    94
    + +
    96 if (buffers_.use_count() == 1) {
    +
    97 for (auto &&buffer : *buffers_) {
    +
    98 alloc_.deallocate(buffer, buffer_size_);
    +
    99 }
    +
    100 }
    +
    101 }
    +
    102
    +
    103 using is_always_equal = std::false_type;
    +
    104
    +
    105 pointer allocate(std::size_t size) {
    +
    106 if (size > buffer_size_ || free_buffers_->empty()) {
    +
    107 throw std::bad_alloc();
    +
    108 } else {
    +
    109 pointer buffer = free_buffers_->back();
    +
    110 free_buffers_->pop_back();
    +
    111 return buffer;
    +
    112 }
    +
    113 }
    +
    114
    +
    115 void deallocate(pointer ptr, std::size_t n) { free_buffers_->push_back(ptr); }
    +
    116
    +
    117 bool operator==(const buffered_allocator &) const = default;
    +
    118 bool operator!=(const buffered_allocator &) const = default;
    +
    119
    +
    120private:
    +
    121 Allocator alloc_;
    +
    122 std::size_t buffer_size_;
    +
    123 std::shared_ptr<std::vector<pointer>> free_buffers_;
    +
    124 std::shared_ptr<std::vector<pointer>> buffers_;
    +
    125};
    +
    126
    +
    127} // namespace dr::sp
    +
    Definition: allocators.hpp:74
    +
    Definition: allocators.hpp:20
    +
    Definition: device_ptr.hpp:17
    +
    Definition: device_ref.hpp:15
    +
    Definition: allocators.hpp:61
    +
    + + + + diff --git a/doxygen/annotated.html b/doxygen/annotated.html new file mode 100644 index 0000000000..88b183d0b1 --- /dev/null +++ b/doxygen/annotated.html @@ -0,0 +1,235 @@ + + + + + + + +Distributed Ranges: Class List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Class List
    +
    +
    +
    Here are the classes, structs, unions and interfaces with brief descriptions:
    +
    [detail level 12345]
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     Ndr
     N__detail
     Nmp
     Nranges
     Nsp
     Nviews
     Ccommunicator
     Cdefault_memory
     Cindex
     Cis_drop_view
     Cis_drop_view< rng::drop_view< T > >
     Cis_iota_view
     Cis_iota_view< rng::iota_view< W > >
     Cis_owning_view
     Cis_ref_view
     Cis_ref_view< rng::ref_view< R > >
     Cis_sliding_view
     Cis_sliding_view< rng::sliding_view< T > >
     Cis_subrange_view
     Cis_subrange_view< rng::subrange< T > >
     Cis_take_view
     Cis_take_view< rng::take_view< T > >
     Cis_zip_view
     Cis_zip_view< rng::zip_view< Views... > >
     Citerator_adaptor
     Clogger
     Cnormal_distributed_iterator_accessor
     Cremote_subrange
     Crma_window
     Ctimer
     Ctransform_iterator
     Ctransform_view
     Nfmt
     Cformatter< Mdspan, char >
     Nnostd
     Csource_location
     Nstd
     Ctuple_element< Index, dr::index< I > >
     Ctuple_element< Index, dr::sp::matrix_entry< T, I > >
     Ctuple_element< Index, dr::sp::matrix_ref< T, I, TRef > >
     Ctuple_size< dr::index< I > >
     Ctuple_size< dr::sp::matrix_entry< T, I > >
     Ctuple_size< dr::sp::matrix_ref< T, I, TRef > >
    +
    +
    + + + + diff --git a/doxygen/bc_s.png b/doxygen/bc_s.png new file mode 100644 index 0000000000000000000000000000000000000000..224b29aa9847d5a4b3902efd602b7ddf7d33e6c2 GIT binary patch literal 676 zcmV;V0$crwP)y__>=_9%My z{n931IS})GlGUF8K#6VIbs%684A^L3@%PlP2>_sk`UWPq@f;rU*V%rPy_ekbhXT&s z(GN{DxFv}*vZp`F>S!r||M`I*nOwwKX+BC~3P5N3-)Y{65c;ywYiAh-1*hZcToLHK ztpl1xomJ+Yb}K(cfbJr2=GNOnT!UFA7Vy~fBz8?J>XHsbZoDad^8PxfSa0GDgENZS zuLCEqzb*xWX2CG*b&5IiO#NzrW*;`VC9455M`o1NBh+(k8~`XCEEoC1Ybwf;vr4K3 zg|EB<07?SOqHp9DhLpS&bzgo70I+ghB_#)K7H%AMU3v}xuyQq9&Bm~++VYhF09a+U zl7>n7Jjm$K#b*FONz~fj;I->Bf;ule1prFN9FovcDGBkpg>)O*-}eLnC{6oZHZ$o% zXKW$;0_{8hxHQ>l;_*HATI(`7t#^{$(zLe}h*mqwOc*nRY9=?Sx4OOeVIfI|0V(V2 zBrW#G7Ss9wvzr@>H*`r>zE z+e8bOBgqIgldUJlG(YUDviMB`9+DH8n-s9SXRLyJHO1!=wY^79WYZMTa(wiZ!zP66 zA~!21vmF3H2{ngD;+`6j#~6j;$*f*G_2ZD1E;9(yaw7d-QnSCpK(cR1zU3qU0000< KMNUMnLSTYoA~SLT literal 0 HcmV?d00001 diff --git a/doxygen/bc_sd.png b/doxygen/bc_sd.png new file mode 100644 index 0000000000000000000000000000000000000000..31ca888dc71049713b35c351933a8d0f36180bf1 GIT binary patch literal 635 zcmV->0)+jEP)Jwi0r1~gdSq#w{Bu1q z`craw(p2!hu$4C_$Oc3X(sI6e=9QSTwPt{G) z=htT&^~&c~L2~e{r5_5SYe7#Is-$ln>~Kd%$F#tC65?{LvQ}8O`A~RBB0N~`2M+waajO;5>3B&-viHGJeEK2TQOiPRa zfDKyqwMc4wfaEh4jt>H`nW_Zidwk@Bowp`}(VUaj-pSI(-1L>FJVsX}Yl9~JsqgsZ zUD9(rMwf23Gez6KPa|wwInZodP-2}9@fK0Ga_9{8SOjU&4l`pH4@qlQp83>>HT$xW zER^U>)MyV%t(Lu=`d=Y?{k1@}&r7ZGkFQ%z%N+sE9BtYjovzxyxCPxN6&@wLK{soQ zSmkj$aLI}miuE^p@~4}mg9OjDfGEkgY4~^XzLRUBB*O{+&vq<3v(E%+k_i%=`~j%{ Vj14gnt9}3g002ovPDHLkV1n!oC4m3{ literal 0 HcmV?d00001 diff --git a/doxygen/bdwn.png b/doxygen/bdwn.png new file mode 100644 index 0000000000000000000000000000000000000000..940a0b950443a0bb1b216ac03c45b8a16c955452 GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)H!3HEvS)PKZC{Gv1kP61Pb5HX&C2wk~_T + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::__detail::direct_iterator< Iter > Member List
    +
    +
    + +

    This is the complete list of members for dr::__detail::direct_iterator< Iter >, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    base() const noexcept (defined in dr::__detail::direct_iterator< Iter >)dr::__detail::direct_iterator< Iter >inline
    difference_type typedef (defined in dr::__detail::direct_iterator< Iter >)dr::__detail::direct_iterator< Iter >
    direct_iterator(Iter iter) noexcept (defined in dr::__detail::direct_iterator< Iter >)dr::__detail::direct_iterator< Iter >inline
    direct_iterator() noexcept=default (defined in dr::__detail::direct_iterator< Iter >)dr::__detail::direct_iterator< Iter >
    direct_iterator(const direct_iterator &) noexcept=default (defined in dr::__detail::direct_iterator< Iter >)dr::__detail::direct_iterator< Iter >
    is_passed_directly typedef (defined in dr::__detail::direct_iterator< Iter >)dr::__detail::direct_iterator< Iter >
    iterator typedef (defined in dr::__detail::direct_iterator< Iter >)dr::__detail::direct_iterator< Iter >
    iterator_category typedef (defined in dr::__detail::direct_iterator< Iter >)dr::__detail::direct_iterator< Iter >
    operator!=(const direct_iterator &) const noexcept=default (defined in dr::__detail::direct_iterator< Iter >)dr::__detail::direct_iterator< Iter >
    operator*() const noexcept (defined in dr::__detail::direct_iterator< Iter >)dr::__detail::direct_iterator< Iter >inline
    operator+(difference_type offset) const noexcept (defined in dr::__detail::direct_iterator< Iter >)dr::__detail::direct_iterator< Iter >inline
    operator+ (defined in dr::__detail::direct_iterator< Iter >)dr::__detail::direct_iterator< Iter >friend
    operator++() noexcept (defined in dr::__detail::direct_iterator< Iter >)dr::__detail::direct_iterator< Iter >inline
    operator++(int) noexcept (defined in dr::__detail::direct_iterator< Iter >)dr::__detail::direct_iterator< Iter >inline
    operator+=(difference_type offset) noexcept (defined in dr::__detail::direct_iterator< Iter >)dr::__detail::direct_iterator< Iter >inline
    operator-(difference_type offset) const noexcept (defined in dr::__detail::direct_iterator< Iter >)dr::__detail::direct_iterator< Iter >inline
    operator-(iterator other) const noexcept (defined in dr::__detail::direct_iterator< Iter >)dr::__detail::direct_iterator< Iter >inline
    operator--() noexcept (defined in dr::__detail::direct_iterator< Iter >)dr::__detail::direct_iterator< Iter >inline
    operator--(int) noexcept (defined in dr::__detail::direct_iterator< Iter >)dr::__detail::direct_iterator< Iter >inline
    operator-=(difference_type offset) noexcept (defined in dr::__detail::direct_iterator< Iter >)dr::__detail::direct_iterator< Iter >inline
    operator<(iterator other) const noexcept (defined in dr::__detail::direct_iterator< Iter >)dr::__detail::direct_iterator< Iter >inline
    operator<=(iterator other) const noexcept (defined in dr::__detail::direct_iterator< Iter >)dr::__detail::direct_iterator< Iter >inline
    operator=(const direct_iterator &) noexcept=default (defined in dr::__detail::direct_iterator< Iter >)dr::__detail::direct_iterator< Iter >
    operator==(const direct_iterator &) const noexcept=default (defined in dr::__detail::direct_iterator< Iter >)dr::__detail::direct_iterator< Iter >
    operator>(iterator other) const noexcept (defined in dr::__detail::direct_iterator< Iter >)dr::__detail::direct_iterator< Iter >inline
    operator>=(iterator other) const noexcept (defined in dr::__detail::direct_iterator< Iter >)dr::__detail::direct_iterator< Iter >inline
    operator[](difference_type offset) const noexcept (defined in dr::__detail::direct_iterator< Iter >)dr::__detail::direct_iterator< Iter >inline
    pointer typedef (defined in dr::__detail::direct_iterator< Iter >)dr::__detail::direct_iterator< Iter >
    reference typedef (defined in dr::__detail::direct_iterator< Iter >)dr::__detail::direct_iterator< Iter >
    value_type typedef (defined in dr::__detail::direct_iterator< Iter >)dr::__detail::direct_iterator< Iter >
    ~direct_iterator() noexcept=default (defined in dr::__detail::direct_iterator< Iter >)dr::__detail::direct_iterator< Iter >
    + + + + diff --git a/doxygen/classdr_1_1____detail_1_1direct__iterator.html b/doxygen/classdr_1_1____detail_1_1direct__iterator.html new file mode 100644 index 0000000000..1b9a4d1599 --- /dev/null +++ b/doxygen/classdr_1_1____detail_1_1direct__iterator.html @@ -0,0 +1,190 @@ + + + + + + + +Distributed Ranges: dr::__detail::direct_iterator< Iter > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::__detail::direct_iterator< Iter > Class Template Reference
    +
    +
    + + + + + + + + + + + + + + + + +

    +Public Types

    +using value_type = std::iter_value_t< Iter >
     
    +using difference_type = std::iter_difference_t< Iter >
     
    +using reference = std::iter_reference_t< Iter >
     
    +using iterator = direct_iterator< Iter >
     
    +using pointer = iterator
     
    +using iterator_category = std::random_access_iterator_tag
     
    +using is_passed_directly = ::std::true_type
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    direct_iterator (Iter iter) noexcept
     
    direct_iterator (const direct_iterator &) noexcept=default
     
    +direct_iteratoroperator= (const direct_iterator &) noexcept=default
     
    +bool operator== (const direct_iterator &) const noexcept=default
     
    +bool operator!= (const direct_iterator &) const noexcept=default
     
    +iterator operator+ (difference_type offset) const noexcept
     
    +iterator operator- (difference_type offset) const noexcept
     
    +difference_type operator- (iterator other) const noexcept
     
    +bool operator< (iterator other) const noexcept
     
    +bool operator> (iterator other) const noexcept
     
    +bool operator<= (iterator other) const noexcept
     
    +bool operator>= (iterator other) const noexcept
     
    +iteratoroperator++ () noexcept
     
    +iterator operator++ (int) noexcept
     
    +iteratoroperator-- () noexcept
     
    +iterator operator-- (int) noexcept
     
    +iteratoroperator+= (difference_type offset) noexcept
     
    +iteratoroperator-= (difference_type offset) noexcept
     
    +reference operator* () const noexcept
     
    +reference operator[] (difference_type offset) const noexcept
     
    +Iter base () const noexcept
     
    + + + +

    +Friends

    +iterator operator+ (difference_type n, iterator iter)
     
    +
    The documentation for this class was generated from the following file: +
    + + + + diff --git a/doxygen/classdr_1_1____detail_1_1enumerate__adapter__closure-members.html b/doxygen/classdr_1_1____detail_1_1enumerate__adapter__closure-members.html new file mode 100644 index 0000000000..541c120fa0 --- /dev/null +++ b/doxygen/classdr_1_1____detail_1_1enumerate__adapter__closure-members.html @@ -0,0 +1,90 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::__detail::enumerate_adapter_closure Member List
    +
    +
    + +

    This is the complete list of members for dr::__detail::enumerate_adapter_closure, including all inherited members.

    + + + +
    operator()(R &&r) const (defined in dr::__detail::enumerate_adapter_closure)dr::__detail::enumerate_adapter_closureinline
    operator| (defined in dr::__detail::enumerate_adapter_closure)dr::__detail::enumerate_adapter_closurefriend
    + + + + diff --git a/doxygen/classdr_1_1____detail_1_1enumerate__adapter__closure.html b/doxygen/classdr_1_1____detail_1_1enumerate__adapter__closure.html new file mode 100644 index 0000000000..cecc766948 --- /dev/null +++ b/doxygen/classdr_1_1____detail_1_1enumerate__adapter__closure.html @@ -0,0 +1,107 @@ + + + + + + + +Distributed Ranges: dr::__detail::enumerate_adapter_closure Class Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::__detail::enumerate_adapter_closure Class Reference
    +
    +
    + + + + + +

    +Public Member Functions

    +template<rng::viewable_range R>
    auto operator() (R &&r) const
     
    + + + + +

    +Friends

    +template<rng::viewable_range R>
    auto operator| (R &&r, const enumerate_adapter_closure &closure)
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/detail/enumerate.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1____detail_1_1enumerate__fn__-members.html b/doxygen/classdr_1_1____detail_1_1enumerate__fn__-members.html new file mode 100644 index 0000000000..2c3b32672b --- /dev/null +++ b/doxygen/classdr_1_1____detail_1_1enumerate__fn__-members.html @@ -0,0 +1,90 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::__detail::enumerate_fn_ Member List
    +
    +
    + +

    This is the complete list of members for dr::__detail::enumerate_fn_, including all inherited members.

    + + + +
    enumerate() const (defined in dr::__detail::enumerate_fn_)dr::__detail::enumerate_fn_inline
    operator()(R &&r) const (defined in dr::__detail::enumerate_fn_)dr::__detail::enumerate_fn_inline
    + + + + diff --git a/doxygen/classdr_1_1____detail_1_1enumerate__fn__.html b/doxygen/classdr_1_1____detail_1_1enumerate__fn__.html new file mode 100644 index 0000000000..b5f555cca5 --- /dev/null +++ b/doxygen/classdr_1_1____detail_1_1enumerate__fn__.html @@ -0,0 +1,102 @@ + + + + + + + +Distributed Ranges: dr::__detail::enumerate_fn_ Class Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::__detail::enumerate_fn_ Class Reference
    +
    +
    + + + + + + + +

    +Public Member Functions

    +template<rng::viewable_range R>
    constexpr auto operator() (R &&r) const
     
    +auto enumerate () const
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/detail/enumerate.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1____detail_1_1event-members.html b/doxygen/classdr_1_1____detail_1_1event-members.html new file mode 100644 index 0000000000..3098970689 --- /dev/null +++ b/doxygen/classdr_1_1____detail_1_1event-members.html @@ -0,0 +1,89 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::__detail::event Member List
    +
    +
    + +

    This is the complete list of members for dr::__detail::event, including all inherited members.

    + + +
    wait() (defined in dr::__detail::event)dr::__detail::eventinline
    + + + + diff --git a/doxygen/classdr_1_1____detail_1_1event.html b/doxygen/classdr_1_1____detail_1_1event.html new file mode 100644 index 0000000000..ccc9362382 --- /dev/null +++ b/doxygen/classdr_1_1____detail_1_1event.html @@ -0,0 +1,98 @@ + + + + + + + +Distributed Ranges: dr::__detail::event Class Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::__detail::event Class Reference
    +
    +
    + + + + +

    +Public Member Functions

    +void wait ()
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/detail/sycl_utils.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1____detail_1_1mdspan__iter__accessor-members.html b/doxygen/classdr_1_1____detail_1_1mdspan__iter__accessor-members.html new file mode 100644 index 0000000000..dc5908d4f3 --- /dev/null +++ b/doxygen/classdr_1_1____detail_1_1mdspan__iter__accessor-members.html @@ -0,0 +1,94 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::__detail::mdspan_iter_accessor< Iter > Member List
    +
    +
    + +

    This is the complete list of members for dr::__detail::mdspan_iter_accessor< Iter >, including all inherited members.

    + + + + + + + +
    access(Iter iter, std::size_t index) const (defined in dr::__detail::mdspan_iter_accessor< Iter >)dr::__detail::mdspan_iter_accessor< Iter >inline
    data_handle_type typedef (defined in dr::__detail::mdspan_iter_accessor< Iter >)dr::__detail::mdspan_iter_accessor< Iter >
    mdspan_iter_accessor() noexcept=default (defined in dr::__detail::mdspan_iter_accessor< Iter >)dr::__detail::mdspan_iter_accessor< Iter >
    offset(Iter iter, std::size_t index) const noexcept (defined in dr::__detail::mdspan_iter_accessor< Iter >)dr::__detail::mdspan_iter_accessor< Iter >inline
    offset_policy typedef (defined in dr::__detail::mdspan_iter_accessor< Iter >)dr::__detail::mdspan_iter_accessor< Iter >
    reference typedef (defined in dr::__detail::mdspan_iter_accessor< Iter >)dr::__detail::mdspan_iter_accessor< Iter >
    + + + + diff --git a/doxygen/classdr_1_1____detail_1_1mdspan__iter__accessor.html b/doxygen/classdr_1_1____detail_1_1mdspan__iter__accessor.html new file mode 100644 index 0000000000..8d60db69e7 --- /dev/null +++ b/doxygen/classdr_1_1____detail_1_1mdspan__iter__accessor.html @@ -0,0 +1,114 @@ + + + + + + + +Distributed Ranges: dr::__detail::mdspan_iter_accessor< Iter > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::__detail::mdspan_iter_accessor< Iter > Class Template Reference
    +
    +
    + + + + + + + + +

    +Public Types

    +using data_handle_type = Iter
     
    +using reference = std::iter_reference_t< Iter >
     
    +using offset_policy = mdspan_iter_accessor
     
    + + + + + +

    +Public Member Functions

    +constexpr auto access (Iter iter, std::size_t index) const
     
    +constexpr auto offset (Iter iter, std::size_t index) const noexcept
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/detail/mdspan_utils.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1____detail_1_1mdtranspose-members.html b/doxygen/classdr_1_1____detail_1_1mdtranspose-members.html new file mode 100644 index 0000000000..10b354eb98 --- /dev/null +++ b/doxygen/classdr_1_1____detail_1_1mdtranspose-members.html @@ -0,0 +1,93 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::__detail::mdtranspose< Mdspan, Is > Member List
    +
    +
    + +

    This is the complete list of members for dr::__detail::mdtranspose< Mdspan, Is >, including all inherited members.

    + + + + + + +
    extent(std::size_t d) const (defined in dr::__detail::mdtranspose< Mdspan, Is >)dr::__detail::mdtranspose< Mdspan, Is >inline
    extents() const (defined in dr::__detail::mdtranspose< Mdspan, Is >)dr::__detail::mdtranspose< Mdspan, Is >inline
    mdtranspose(Mdspan &mdspan) (defined in dr::__detail::mdtranspose< Mdspan, Is >)dr::__detail::mdtranspose< Mdspan, Is >inline
    operator()(Indexes... indexes) const (defined in dr::__detail::mdtranspose< Mdspan, Is >)dr::__detail::mdtranspose< Mdspan, Is >inline
    operator()(std::array< std::size_t, rank_ > index) const (defined in dr::__detail::mdtranspose< Mdspan, Is >)dr::__detail::mdtranspose< Mdspan, Is >inline
    + + + + diff --git a/doxygen/classdr_1_1____detail_1_1mdtranspose.html b/doxygen/classdr_1_1____detail_1_1mdtranspose.html new file mode 100644 index 0000000000..b8bae48d10 --- /dev/null +++ b/doxygen/classdr_1_1____detail_1_1mdtranspose.html @@ -0,0 +1,129 @@ + + + + + + + +Distributed Ranges: dr::__detail::mdtranspose< Mdspan, Is > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::__detail::mdtranspose< Mdspan, Is > Class Template Reference
    +
    +
    +
    +Inheritance diagram for dr::__detail::mdtranspose< Mdspan, Is >:
    +
    +
    Inheritance graph
    + + + + +
    [legend]
    +
    +Collaboration diagram for dr::__detail::mdtranspose< Mdspan, Is >:
    +
    +
    Collaboration graph
    + + + + +
    [legend]
    + + + + + + + + + + + + + +

    +Public Member Functions

    mdtranspose (Mdspan &mdspan)
     
    +template<std::integral... Indexes>
    auto & operator() (Indexes... indexes) const
     
    +auto & operator() (std::array< std::size_t, rank_ > index) const
     
    +auto extents () const
     
    +auto extent (std::size_t d) const
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/detail/mdspan_utils.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1____detail_1_1mdtranspose__coll__graph.map b/doxygen/classdr_1_1____detail_1_1mdtranspose__coll__graph.map new file mode 100644 index 0000000000..9675cf5cd6 --- /dev/null +++ b/doxygen/classdr_1_1____detail_1_1mdtranspose__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/classdr_1_1____detail_1_1mdtranspose__coll__graph.md5 b/doxygen/classdr_1_1____detail_1_1mdtranspose__coll__graph.md5 new file mode 100644 index 0000000000..3b5ea06957 --- /dev/null +++ b/doxygen/classdr_1_1____detail_1_1mdtranspose__coll__graph.md5 @@ -0,0 +1 @@ +a7cbe1affc508275deb0cb300a18c197 \ No newline at end of file diff --git a/doxygen/classdr_1_1____detail_1_1mdtranspose__coll__graph.png b/doxygen/classdr_1_1____detail_1_1mdtranspose__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..f2205f1613608ea58bef4ef5497da36b294feab9 GIT binary patch literal 5643 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 + + + diff --git a/doxygen/classdr_1_1____detail_1_1mdtranspose__inherit__graph.md5 b/doxygen/classdr_1_1____detail_1_1mdtranspose__inherit__graph.md5 new file mode 100644 index 0000000000..3b5ea06957 --- /dev/null +++ b/doxygen/classdr_1_1____detail_1_1mdtranspose__inherit__graph.md5 @@ -0,0 +1 @@ +a7cbe1affc508275deb0cb300a18c197 \ No newline at end of file diff --git a/doxygen/classdr_1_1____detail_1_1mdtranspose__inherit__graph.png b/doxygen/classdr_1_1____detail_1_1mdtranspose__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..f2205f1613608ea58bef4ef5497da36b294feab9 GIT binary patch literal 5643 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 + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::__detail::owning_view< R > Member List
    +
    +
    + +

    This is the complete list of members for dr::__detail::owning_view< R >, including all inherited members.

    + + + + + + + + + + + + + + + +
    base() (defined in dr::__detail::owning_view< R >)dr::__detail::owning_view< R >inline
    base() const (defined in dr::__detail::owning_view< R >)dr::__detail::owning_view< R >inline
    begin() (defined in dr::__detail::owning_view< R >)dr::__detail::owning_view< R >inline
    begin() const (defined in dr::__detail::owning_view< R >)dr::__detail::owning_view< R >inline
    empty() const (defined in dr::__detail::owning_view< R >)dr::__detail::owning_view< R >inline
    end() (defined in dr::__detail::owning_view< R >)dr::__detail::owning_view< R >inline
    end() const (defined in dr::__detail::owning_view< R >)dr::__detail::owning_view< R >inline
    operator=(owning_view &&other)=default (defined in dr::__detail::owning_view< R >)dr::__detail::owning_view< R >
    operator=(const owning_view &other)=default (defined in dr::__detail::owning_view< R >)dr::__detail::owning_view< R >
    owning_view(R &&range) (defined in dr::__detail::owning_view< R >)dr::__detail::owning_view< R >inline
    owning_view()=default (defined in dr::__detail::owning_view< R >)dr::__detail::owning_view< R >
    owning_view(owning_view &&other)=default (defined in dr::__detail::owning_view< R >)dr::__detail::owning_view< R >
    owning_view(const owning_view &other)=default (defined in dr::__detail::owning_view< R >)dr::__detail::owning_view< R >
    size() const (defined in dr::__detail::owning_view< R >)dr::__detail::owning_view< R >inline
    + + + + diff --git a/doxygen/classdr_1_1____detail_1_1owning__view.html b/doxygen/classdr_1_1____detail_1_1owning__view.html new file mode 100644 index 0000000000..2260d91402 --- /dev/null +++ b/doxygen/classdr_1_1____detail_1_1owning__view.html @@ -0,0 +1,152 @@ + + + + + + + +Distributed Ranges: dr::__detail::owning_view< R > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::__detail::owning_view< R > Class Template Reference
    +
    +
    +
    +Inheritance diagram for dr::__detail::owning_view< R >:
    +
    +
    Inheritance graph
    + + + + +
    [legend]
    +
    +Collaboration diagram for dr::__detail::owning_view< R >:
    +
    +
    Collaboration graph
    + + + + +
    [legend]
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    owning_view (R &&range)
     
    owning_view (owning_view &&other)=default
     
    owning_view (const owning_view &other)=default
     
    +owning_viewoperator= (owning_view &&other)=default
     
    +owning_viewoperator= (const owning_view &other)=default
     
    +auto size () const
     
    +auto empty () const
     
    +auto begin ()
     
    +auto begin () const
     
    +auto end ()
     
    +auto end () const
     
    +decltype(auto) base ()
     
    +decltype(auto) base () const
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/detail/owning_view.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1____detail_1_1owning__view__coll__graph.map b/doxygen/classdr_1_1____detail_1_1owning__view__coll__graph.map new file mode 100644 index 0000000000..ed2505a804 --- /dev/null +++ b/doxygen/classdr_1_1____detail_1_1owning__view__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/classdr_1_1____detail_1_1owning__view__coll__graph.md5 b/doxygen/classdr_1_1____detail_1_1owning__view__coll__graph.md5 new file mode 100644 index 0000000000..5a2d800828 --- /dev/null +++ b/doxygen/classdr_1_1____detail_1_1owning__view__coll__graph.md5 @@ -0,0 +1 @@ +3f46f3a33fc911a141cee3201c506d49 \ No newline at end of file diff --git a/doxygen/classdr_1_1____detail_1_1owning__view__coll__graph.png b/doxygen/classdr_1_1____detail_1_1owning__view__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..7a5f550d0230956eb8512b8f5dcd5b4c53f13f24 GIT binary patch literal 7482 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 + + + diff --git a/doxygen/classdr_1_1____detail_1_1owning__view__inherit__graph.md5 b/doxygen/classdr_1_1____detail_1_1owning__view__inherit__graph.md5 new file mode 100644 index 0000000000..5a2d800828 --- /dev/null +++ b/doxygen/classdr_1_1____detail_1_1owning__view__inherit__graph.md5 @@ -0,0 +1 @@ +3f46f3a33fc911a141cee3201c506d49 \ No newline at end of file diff --git a/doxygen/classdr_1_1____detail_1_1owning__view__inherit__graph.png b/doxygen/classdr_1_1____detail_1_1owning__view__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..7a5f550d0230956eb8512b8f5dcd5b4c53f13f24 GIT binary patch literal 7482 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 + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::communicator Member List
    +
    +
    + +

    This is the complete list of members for dr::communicator, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    all_gather(const T *src, T *dst, std::size_t count) const (defined in dr::communicator)dr::communicatorinline
    all_gather(const T &src, std::vector< T > &dst) const (defined in dr::communicator)dr::communicatorinline
    all_gather(const R &src, R &dst) const (defined in dr::communicator)dr::communicatorinline
    alltoall(const R &sendr, R &recvr, std::size_t count) (defined in dr::communicator)dr::communicatorinline
    alltoall(const T *send, T *receive, std::size_t count) (defined in dr::communicator)dr::communicatorinline
    alltoallv(const SendR &sendbuf, const std::vector< std::size_t > &sendcnt, const std::vector< std::size_t > &senddsp, RecvR &recvbuf, const std::vector< std::size_t > &recvcnt, const std::vector< std::size_t > &recvdsp) (defined in dr::communicator)dr::communicatorinline
    barrier() const (defined in dr::communicator)dr::communicatorinline
    bcast(void *src, std::size_t count, std::size_t root) const (defined in dr::communicator)dr::communicatorinline
    communicator(MPI_Comm comm=MPI_COMM_WORLD) (defined in dr::communicator)dr::communicatorinline
    first() const (defined in dr::communicator)dr::communicatorinline
    gather(const void *src, void *dst, std::size_t count, std::size_t root) const (defined in dr::communicator)dr::communicatorinline
    gather(const T &src, std::span< T > dst, std::size_t root) const (defined in dr::communicator)dr::communicatorinline
    gatherv(const void *src, int *counts, int *offsets, void *dst, std::size_t root) const (defined in dr::communicator)dr::communicatorinline
    i_all_gather(const T *src, T *dst, std::size_t count, MPI_Request *req) const (defined in dr::communicator)dr::communicatorinline
    i_all_gather(const T &src, std::vector< T > &dst, MPI_Request *req) const (defined in dr::communicator)dr::communicatorinline
    irecv(T *data, std::size_t size, std::size_t src_rank, auto tag, MPI_Request *request) const (defined in dr::communicator)dr::communicatorinline
    irecv(T *data, std::size_t size, std::size_t src_rank, MPI_Request *request) const (defined in dr::communicator)dr::communicatorinline
    irecv(R &data, std::size_t src_rank, int tag, MPI_Request *request) const (defined in dr::communicator)dr::communicatorinline
    irecv(R &data, std::size_t src_rank, MPI_Request *request) const (defined in dr::communicator)dr::communicatorinline
    isend(const T *data, std::size_t count, std::size_t dst_rank, auto tag, MPI_Request *request) const (defined in dr::communicator)dr::communicatorinline
    isend(const T *data, std::size_t count, std::size_t dst_rank, MPI_Request *request) const (defined in dr::communicator)dr::communicatorinline
    isend(const R &data, std::size_t dst_rank, auto tag, MPI_Request *request) const (defined in dr::communicator)dr::communicatorinline
    isend(const R &data, std::size_t dst_rank, MPI_Request *request) const (defined in dr::communicator)dr::communicatorinline
    last() const (defined in dr::communicator)dr::communicatorinline
    mpi_comm() const (defined in dr::communicator)dr::communicatorinline
    next() const (defined in dr::communicator)dr::communicatorinline
    operator==(const communicator &other) const (defined in dr::communicator)dr::communicatorinline
    prev() const (defined in dr::communicator)dr::communicatorinline
    rank() const (defined in dr::communicator)dr::communicatorinline
    scatter(const void *src, void *dst, std::size_t count, std::size_t root) const (defined in dr::communicator)dr::communicatorinline
    scatter(const std::span< T > src, T &dst, std::size_t root) const (defined in dr::communicator)dr::communicatorinline
    scatterv(const void *src, int *counts, int *offsets, void *dst, int dst_count, std::size_t root) const (defined in dr::communicator)dr::communicatorinline
    size() const (defined in dr::communicator)dr::communicatorinline
    + + + + diff --git a/doxygen/classdr_1_1communicator.html b/doxygen/classdr_1_1communicator.html new file mode 100644 index 0000000000..fd5e1ba405 --- /dev/null +++ b/doxygen/classdr_1_1communicator.html @@ -0,0 +1,212 @@ + + + + + + + +Distributed Ranges: dr::communicator Class Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::communicator Class Reference
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    communicator (MPI_Comm comm=MPI_COMM_WORLD)
     
    +auto size () const
     
    +auto rank () const
     
    +auto prev () const
     
    +auto next () const
     
    +auto first () const
     
    +auto last () const
     
    +MPI_Comm mpi_comm () const
     
    +void barrier () const
     
    +void bcast (void *src, std::size_t count, std::size_t root) const
     
    +void scatter (const void *src, void *dst, std::size_t count, std::size_t root) const
     
    +template<typename T >
    void scatter (const std::span< T > src, T &dst, std::size_t root) const
     
    +void scatterv (const void *src, int *counts, int *offsets, void *dst, int dst_count, std::size_t root) const
     
    +void gather (const void *src, void *dst, std::size_t count, std::size_t root) const
     
    +template<typename T >
    void gather (const T &src, std::span< T > dst, std::size_t root) const
     
    +template<typename T >
    void all_gather (const T *src, T *dst, std::size_t count) const
     
    +template<typename T >
    void all_gather (const T &src, std::vector< T > &dst) const
     
    +template<rng::contiguous_range R>
    void all_gather (const R &src, R &dst) const
     
    +template<typename T >
    void i_all_gather (const T *src, T *dst, std::size_t count, MPI_Request *req) const
     
    +template<typename T >
    void i_all_gather (const T &src, std::vector< T > &dst, MPI_Request *req) const
     
    +void gatherv (const void *src, int *counts, int *offsets, void *dst, std::size_t root) const
     
    +template<typename T >
    void isend (const T *data, std::size_t count, std::size_t dst_rank, auto tag, MPI_Request *request) const
     
    +template<typename T >
    void isend (const T *data, std::size_t count, std::size_t dst_rank, MPI_Request *request) const
     
    +template<rng::contiguous_range R>
    void isend (const R &data, std::size_t dst_rank, auto tag, MPI_Request *request) const
     
    +template<rng::contiguous_range R>
    void isend (const R &data, std::size_t dst_rank, MPI_Request *request) const
     
    +template<typename T >
    void irecv (T *data, std::size_t size, std::size_t src_rank, auto tag, MPI_Request *request) const
     
    +template<typename T >
    void irecv (T *data, std::size_t size, std::size_t src_rank, MPI_Request *request) const
     
    +template<rng::contiguous_range R>
    void irecv (R &data, std::size_t src_rank, int tag, MPI_Request *request) const
     
    +template<rng::contiguous_range R>
    void irecv (R &data, std::size_t src_rank, MPI_Request *request) const
     
    +template<rng::contiguous_range R>
    void alltoall (const R &sendr, R &recvr, std::size_t count)
     
    +template<typename T >
    void alltoall (const T *send, T *receive, std::size_t count)
     
    +template<rng::contiguous_range SendR, rng::contiguous_range RecvR>
    void alltoallv (const SendR &sendbuf, const std::vector< std::size_t > &sendcnt, const std::vector< std::size_t > &senddsp, RecvR &recvbuf, const std::vector< std::size_t > &recvcnt, const std::vector< std::size_t > &recvdsp)
     
    +bool operator== (const communicator &other) const
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/detail/communicator.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1index-members.html b/doxygen/classdr_1_1index-members.html new file mode 100644 index 0000000000..e8507a172d --- /dev/null +++ b/doxygen/classdr_1_1index-members.html @@ -0,0 +1,108 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::index< T > Member List
    +
    +
    + +

    This is the complete list of members for dr::index< T >, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + +
    first (defined in dr::index< T >)dr::index< T >
    first_type typedef (defined in dr::index< T >)dr::index< T >
    get() const noexcept (defined in dr::index< T >)dr::index< T >inline
    index(index_type first, index_type second) (defined in dr::index< T >)dr::index< T >inline
    index(Tuple tuple) (defined in dr::index< T >)dr::index< T >inline
    index(std::initializer_list< U > tuple) (defined in dr::index< T >)dr::index< T >inline
    index()=default (defined in dr::index< T >)dr::index< T >
    index(const index &)=default (defined in dr::index< T >)dr::index< T >
    index(index &&)=default (defined in dr::index< T >)dr::index< T >
    index_type typedef (defined in dr::index< T >)dr::index< T >
    operator index< U >() const noexcept (defined in dr::index< T >)dr::index< T >inline
    operator index< U >() const noexcept (defined in dr::index< T >)dr::index< T >inlineexplicit
    operator<(const index &other) const noexcept (defined in dr::index< T >)dr::index< T >inline
    operator=(const index &)=default (defined in dr::index< T >)dr::index< T >
    operator=(index &&)=default (defined in dr::index< T >)dr::index< T >
    operator==(const index &) const noexcept=default (defined in dr::index< T >)dr::index< T >
    operator[](index_type dim) const noexcept (defined in dr::index< T >)dr::index< T >inline
    second (defined in dr::index< T >)dr::index< T >
    second_type typedef (defined in dr::index< T >)dr::index< T >
    ~index()=default (defined in dr::index< T >)dr::index< T >
    + + + + diff --git a/doxygen/classdr_1_1index.html b/doxygen/classdr_1_1index.html new file mode 100644 index 0000000000..3309129b99 --- /dev/null +++ b/doxygen/classdr_1_1index.html @@ -0,0 +1,165 @@ + + + + + + + +Distributed Ranges: dr::index< T > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::index< T > Class Template Reference
    +
    +
    + + + + + + + + +

    +Public Types

    +using index_type = T
     
    +using first_type = T
     
    +using second_type = T
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    +constexpr index_type operator[] (index_type dim) const noexcept
     
    +template<std::integral U>
    +requires (std::numeric_limits<U>::max() >= std::numeric_limits<T>::max())
    constexpr operator index< U > () const noexcept
     
    +template<std::integral U>
    +requires (std::numeric_limits<U>::max() < std::numeric_limits<T>::max())
    constexpr operator index< U > () const noexcept
     
    +constexpr index (index_type first, index_type second)
     
    +template<TupleLike< T, T > Tuple>
    constexpr index (Tuple tuple)
     
    +template<std::integral U>
    constexpr index (std::initializer_list< U > tuple)
     
    +constexpr bool operator== (const index &) const noexcept=default
     
    +constexpr bool operator< (const index &other) const noexcept
     
    +template<std::size_t Index>
    +requires (Index <= 1)
    constexpr T get () const noexcept
     
    index (const index &)=default
     
    +indexoperator= (const index &)=default
     
    index (index &&)=default
     
    +indexoperator= (index &&)=default
     
    + + + + + +

    +Public Attributes

    +index_type first
     
    +index_type second
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/detail/index.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1iterator__adaptor-members.html b/doxygen/classdr_1_1iterator__adaptor-members.html new file mode 100644 index 0000000000..aec60c69fe --- /dev/null +++ b/doxygen/classdr_1_1iterator__adaptor-members.html @@ -0,0 +1,126 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::iterator_adaptor< Accessor > Member List
    +
    +
    + +

    This is the complete list of members for dr::iterator_adaptor< Accessor >, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    accessor_type typedef (defined in dr::iterator_adaptor< Accessor >)dr::iterator_adaptor< Accessor >
    const_accessor_type typedef (defined in dr::iterator_adaptor< Accessor >)dr::iterator_adaptor< Accessor >
    const_iterator typedef (defined in dr::iterator_adaptor< Accessor >)dr::iterator_adaptor< Accessor >
    difference_type typedef (defined in dr::iterator_adaptor< Accessor >)dr::iterator_adaptor< Accessor >
    iterator typedef (defined in dr::iterator_adaptor< Accessor >)dr::iterator_adaptor< Accessor >
    iterator_adaptor()=default (defined in dr::iterator_adaptor< Accessor >)dr::iterator_adaptor< Accessor >
    iterator_adaptor(const iterator_adaptor &)=default (defined in dr::iterator_adaptor< Accessor >)dr::iterator_adaptor< Accessor >
    iterator_adaptor(Args &&...args) (defined in dr::iterator_adaptor< Accessor >)dr::iterator_adaptor< Accessor >inline
    iterator_adaptor(const accessor_type &accessor) (defined in dr::iterator_adaptor< Accessor >)dr::iterator_adaptor< Accessor >inline
    iterator_adaptor(const const_accessor_type &accessor) (defined in dr::iterator_adaptor< Accessor >)dr::iterator_adaptor< Accessor >inline
    iterator_category typedef (defined in dr::iterator_adaptor< Accessor >)dr::iterator_adaptor< Accessor >
    nonconst_accessor_type typedef (defined in dr::iterator_adaptor< Accessor >)dr::iterator_adaptor< Accessor >
    nonconst_iterator typedef (defined in dr::iterator_adaptor< Accessor >)dr::iterator_adaptor< Accessor >
    operator const_iterator() const (defined in dr::iterator_adaptor< Accessor >)dr::iterator_adaptor< Accessor >inline
    operator!=(const_iterator other) const (defined in dr::iterator_adaptor< Accessor >)dr::iterator_adaptor< Accessor >inline
    operator*() const (defined in dr::iterator_adaptor< Accessor >)dr::iterator_adaptor< Accessor >inline
    operator+(difference_type offset) const (defined in dr::iterator_adaptor< Accessor >)dr::iterator_adaptor< Accessor >inline
    operator+ (defined in dr::iterator_adaptor< Accessor >)dr::iterator_adaptor< Accessor >friend
    operator++() noexcept (defined in dr::iterator_adaptor< Accessor >)dr::iterator_adaptor< Accessor >inline
    operator++() noexcept (defined in dr::iterator_adaptor< Accessor >)dr::iterator_adaptor< Accessor >inline
    operator++(int) noexcept (defined in dr::iterator_adaptor< Accessor >)dr::iterator_adaptor< Accessor >inline
    operator+=(difference_type offset) noexcept (defined in dr::iterator_adaptor< Accessor >)dr::iterator_adaptor< Accessor >inline
    operator-(difference_type offset) const (defined in dr::iterator_adaptor< Accessor >)dr::iterator_adaptor< Accessor >inline
    operator-(const_iterator other) const (defined in dr::iterator_adaptor< Accessor >)dr::iterator_adaptor< Accessor >inline
    operator--() noexcept (defined in dr::iterator_adaptor< Accessor >)dr::iterator_adaptor< Accessor >inline
    operator--(int) noexcept (defined in dr::iterator_adaptor< Accessor >)dr::iterator_adaptor< Accessor >inline
    operator-=(difference_type offset) noexcept (defined in dr::iterator_adaptor< Accessor >)dr::iterator_adaptor< Accessor >inline
    operator<(const_iterator other) const (defined in dr::iterator_adaptor< Accessor >)dr::iterator_adaptor< Accessor >inline
    operator<=(const_iterator other) const (defined in dr::iterator_adaptor< Accessor >)dr::iterator_adaptor< Accessor >inline
    operator=(const iterator_adaptor &)=default (defined in dr::iterator_adaptor< Accessor >)dr::iterator_adaptor< Accessor >
    operator==(const_iterator other) const (defined in dr::iterator_adaptor< Accessor >)dr::iterator_adaptor< Accessor >inline
    operator>(const_iterator other) const (defined in dr::iterator_adaptor< Accessor >)dr::iterator_adaptor< Accessor >inline
    operator>=(const_iterator other) const (defined in dr::iterator_adaptor< Accessor >)dr::iterator_adaptor< Accessor >inline
    operator[](difference_type offset) const (defined in dr::iterator_adaptor< Accessor >)dr::iterator_adaptor< Accessor >inline
    reference typedef (defined in dr::iterator_adaptor< Accessor >)dr::iterator_adaptor< Accessor >
    segments() const noexcept (defined in dr::iterator_adaptor< Accessor >)dr::iterator_adaptor< Accessor >inline
    value_type typedef (defined in dr::iterator_adaptor< Accessor >)dr::iterator_adaptor< Accessor >
    ~iterator_adaptor()=default (defined in dr::iterator_adaptor< Accessor >)dr::iterator_adaptor< Accessor >
    + + + + diff --git a/doxygen/classdr_1_1iterator__adaptor.html b/doxygen/classdr_1_1iterator__adaptor.html new file mode 100644 index 0000000000..2580ae3b31 --- /dev/null +++ b/doxygen/classdr_1_1iterator__adaptor.html @@ -0,0 +1,213 @@ + + + + + + + +Distributed Ranges: dr::iterator_adaptor< Accessor > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::iterator_adaptor< Accessor > Class Template Reference
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + +

    +Public Types

    +using accessor_type = Accessor
     
    +using const_accessor_type = typename Accessor::const_iterator_accessor
     
    +using nonconst_accessor_type = typename Accessor::nonconst_iterator_accessor
     
    +using difference_type = typename Accessor::difference_type
     
    +using value_type = typename Accessor::value_type
     
    +using iterator = iterator_adaptor< accessor_type >
     
    +using const_iterator = iterator_adaptor< const_accessor_type >
     
    +using reference = typename Accessor::reference
     
    +using iterator_category = typename Accessor::iterator_category
     
    +using nonconst_iterator = iterator_adaptor< nonconst_accessor_type >
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    iterator_adaptor (const iterator_adaptor &)=default
     
    +iterator_adaptoroperator= (const iterator_adaptor &)=default
     
    +template<typename... Args>
    +requires ( sizeof...(Args) >= 1 && !((sizeof...(Args) == 1 && (std::is_same_v<nonconst_iterator, std::decay_t<Args>> || ...)) || (std::is_same_v<const_iterator, std::decay_t<Args>> || ...) || (std::is_same_v<nonconst_accessor_type, std::decay_t<Args>> || ...) || (std::is_same_v<const_accessor_type, std::decay_t<Args>> || ...)) && std::is_constructible_v<accessor_type, Args...>)
     iterator_adaptor (Args &&...args)
     
    iterator_adaptor (const accessor_type &accessor)
     
    iterator_adaptor (const const_accessor_type &accessor)
     
    operator const_iterator () const
     
    +bool operator== (const_iterator other) const
     
    +bool operator!= (const_iterator other) const
     
    +bool operator< (const_iterator other) const
     
    +bool operator<= (const_iterator other) const
     
    +bool operator> (const_iterator other) const
     
    +bool operator>= (const_iterator other) const
     
    +reference operator* () const
     
    +reference operator[] (difference_type offset) const
     
    +iteratoroperator+= (difference_type offset) noexcept
     
    +iteratoroperator-= (difference_type offset) noexcept
     
    +iterator operator+ (difference_type offset) const
     
    +iterator operator- (difference_type offset) const
     
    +difference_type operator- (const_iterator other) const
     
    +iteratoroperator++ () noexcept
     
    +iteratoroperator++ () noexcept
     
    +iterator operator++ (int) noexcept
     
    +iteratoroperator-- () noexcept
     
    +iterator operator-- (int) noexcept
     
    +auto segments () const noexcept
     
    + + + +

    +Friends

    +iterator operator+ (difference_type n, iterator iter)
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/detail/iterator_adaptor.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1logger-members.html b/doxygen/classdr_1_1logger-members.html new file mode 100644 index 0000000000..082791b4a4 --- /dev/null +++ b/doxygen/classdr_1_1logger-members.html @@ -0,0 +1,101 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::logger Member List
    +
    +
    + +

    This is the complete list of members for dr::logger, including all inherited members.

    + + + + + + + + + + + + + + +
    base enum value (defined in dr::logger)dr::logger
    debug(const nostd::source_location &location, std::string format, Args &&...args) (defined in dr::logger)dr::loggerinline
    debug(std::string format, Args &&...args) (defined in dr::logger)dr::loggerinline
    debug(filters filter, std::string format, Args &&...args) (defined in dr::logger)dr::loggerinline
    filter(const std::vector< std::string > &names) (defined in dr::logger)dr::loggerinline
    filters enum name (defined in dr::logger)dr::logger
    for_each enum value (defined in dr::logger)dr::logger
    last enum value (defined in dr::logger)dr::logger
    logger() (defined in dr::logger)dr::loggerinline
    mdspan_view enum value (defined in dr::logger)dr::logger
    mpi enum value (defined in dr::logger)dr::logger
    set_file(std::ofstream &fout) (defined in dr::logger)dr::loggerinline
    transpose enum value (defined in dr::logger)dr::logger
    + + + + diff --git a/doxygen/classdr_1_1logger.html b/doxygen/classdr_1_1logger.html new file mode 100644 index 0000000000..4d06c0fe7e --- /dev/null +++ b/doxygen/classdr_1_1logger.html @@ -0,0 +1,128 @@ + + + + + + + +Distributed Ranges: dr::logger Class Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::logger Class Reference
    +
    +
    + + + + +

    +Public Types

    enum  filters {
    +  base +, for_each +, transpose +, mdspan_view +,
    +  mpi +, last +
    + }
     
    + + + + + + + + + + + + + + +

    +Public Member Functions

    +void set_file (std::ofstream &fout)
     
    +void filter (const std::vector< std::string > &names)
     
    +template<typename... Args>
    void debug (const nostd::source_location &location, std::string format, Args &&...args)
     
    +template<typename... Args>
    void debug (std::string format, Args &&...args)
     
    +template<typename... Args>
    void debug (filters filter, std::string format, Args &&...args)
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/detail/logger.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1MpiBackend-members.html b/doxygen/classdr_1_1mp_1_1MpiBackend-members.html new file mode 100644 index 0000000000..a87b2bfeee --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1MpiBackend-members.html @@ -0,0 +1,94 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::mp::MpiBackend Member List
    +
    +
    + +

    This is the complete list of members for dr::mp::MpiBackend, including all inherited members.

    + + + + + + + +
    allocate(std::size_t data_size) (defined in dr::mp::MpiBackend)dr::mp::MpiBackendinline
    deallocate(void *data, std::size_t data_size) (defined in dr::mp::MpiBackend)dr::mp::MpiBackendinline
    fence() (defined in dr::mp::MpiBackend)dr::mp::MpiBackendinline
    getmem(void *dst, std::size_t offset, std::size_t datalen, int segment_index) (defined in dr::mp::MpiBackend)dr::mp::MpiBackendinline
    getrank() (defined in dr::mp::MpiBackend)dr::mp::MpiBackendinline
    putmem(void const *src, std::size_t offset, std::size_t datalen, int segment_index) (defined in dr::mp::MpiBackend)dr::mp::MpiBackendinline
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1MpiBackend.html b/doxygen/classdr_1_1mp_1_1MpiBackend.html new file mode 100644 index 0000000000..acd41d82df --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1MpiBackend.html @@ -0,0 +1,113 @@ + + + + + + + +Distributed Ranges: dr::mp::MpiBackend Class Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::mp::MpiBackend Class Reference
    +
    +
    + + + + + + + + + + + + + + +

    +Public Member Functions

    +void * allocate (std::size_t data_size)
     
    +void deallocate (void *data, std::size_t data_size)
     
    +void getmem (void *dst, std::size_t offset, std::size_t datalen, int segment_index)
     
    +void putmem (void const *src, std::size_t offset, std::size_t datalen, int segment_index)
     
    +std::size_t getrank ()
     
    +void fence ()
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/containers/distributed_vector.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1____detail_1_1allocator-members.html b/doxygen/classdr_1_1mp_1_1____detail_1_1allocator-members.html new file mode 100644 index 0000000000..0b2848930b --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1____detail_1_1allocator-members.html @@ -0,0 +1,90 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::mp::__detail::allocator< T > Member List
    +
    +
    + +

    This is the complete list of members for dr::mp::__detail::allocator< T >, including all inherited members.

    + + + +
    allocate(std::size_t sz) (defined in dr::mp::__detail::allocator< T >)dr::mp::__detail::allocator< T >inline
    deallocate(T *ptr, std::size_t sz) (defined in dr::mp::__detail::allocator< T >)dr::mp::__detail::allocator< T >inline
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1____detail_1_1allocator.html b/doxygen/classdr_1_1mp_1_1____detail_1_1allocator.html new file mode 100644 index 0000000000..63b1332d5a --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1____detail_1_1allocator.html @@ -0,0 +1,101 @@ + + + + + + + +Distributed Ranges: dr::mp::__detail::allocator< T > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::mp::__detail::allocator< T > Class Template Reference
    +
    +
    + + + + + + +

    +Public Member Functions

    +T * allocate (std::size_t sz)
     
    +void deallocate (T *ptr, std::size_t sz)
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/allocator.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1____detail_1_1buffer-members.html b/doxygen/classdr_1_1mp_1_1____detail_1_1buffer-members.html new file mode 100644 index 0000000000..82fc71636f --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1____detail_1_1buffer-members.html @@ -0,0 +1,97 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::mp::__detail::buffer< T > Member List
    +
    +
    + +

    This is the complete list of members for dr::mp::__detail::buffer< T >, including all inherited members.

    + + + + + + + + + + +
    begin() (defined in dr::mp::__detail::buffer< T >)dr::mp::__detail::buffer< T >inline
    buffer(std::size_t cnt) (defined in dr::mp::__detail::buffer< T >)dr::mp::__detail::buffer< T >inline
    data() (defined in dr::mp::__detail::buffer< T >)dr::mp::__detail::buffer< T >inline
    end() (defined in dr::mp::__detail::buffer< T >)dr::mp::__detail::buffer< T >inline
    replace(buffer &other) (defined in dr::mp::__detail::buffer< T >)dr::mp::__detail::buffer< T >inline
    resize(std::size_t cnt) (defined in dr::mp::__detail::buffer< T >)dr::mp::__detail::buffer< T >inline
    size() (defined in dr::mp::__detail::buffer< T >)dr::mp::__detail::buffer< T >inline
    value_type typedef (defined in dr::mp::__detail::buffer< T >)dr::mp::__detail::buffer< T >
    ~buffer() (defined in dr::mp::__detail::buffer< T >)dr::mp::__detail::buffer< T >inline
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1____detail_1_1buffer.html b/doxygen/classdr_1_1mp_1_1____detail_1_1buffer.html new file mode 100644 index 0000000000..6d9567326c --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1____detail_1_1buffer.html @@ -0,0 +1,123 @@ + + + + + + + +Distributed Ranges: dr::mp::__detail::buffer< T > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::mp::__detail::buffer< T > Class Template Reference
    +
    +
    + + + + +

    +Public Types

    +using value_type = T
     
    + + + + + + + + + + + + + + + +

    +Public Member Functions

    +std::size_t size ()
     
    buffer (std::size_t cnt)
     
    +T * resize (std::size_t cnt)
     
    +void replace (buffer &other)
     
    +T * data ()
     
    +T * begin ()
     
    +T * end ()
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/algorithms/sort.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1____detail_1_1md__segment-members.html b/doxygen/classdr_1_1mp_1_1____detail_1_1md__segment-members.html new file mode 100644 index 0000000000..75e30ca1ec --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1____detail_1_1md__segment-members.html @@ -0,0 +1,98 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::mp::__detail::md_segment< BaseSegment, Rank > Member List
    +
    +
    + +

    This is the complete list of members for dr::mp::__detail::md_segment< BaseSegment, Rank >, including all inherited members.

    + + + + + + + + + + + +
    begin() const (defined in dr::mp::__detail::md_segment< BaseSegment, Rank >)dr::mp::__detail::md_segment< BaseSegment, Rank >inline
    end() const (defined in dr::mp::__detail::md_segment< BaseSegment, Rank >)dr::mp::__detail::md_segment< BaseSegment, Rank >inline
    halo() const (defined in dr::mp::__detail::md_segment< BaseSegment, Rank >)dr::mp::__detail::md_segment< BaseSegment, Rank >inline
    index_type typedef (defined in dr::mp::__detail::md_segment< BaseSegment, Rank >)dr::mp::__detail::md_segment< BaseSegment, Rank >
    md_segment() (defined in dr::mp::__detail::md_segment< BaseSegment, Rank >)dr::mp::__detail::md_segment< BaseSegment, Rank >inline
    md_segment(index_type origin, BaseSegment segment, index_type tile_shape) (defined in dr::mp::__detail::md_segment< BaseSegment, Rank >)dr::mp::__detail::md_segment< BaseSegment, Rank >inline
    mdspan() const (defined in dr::mp::__detail::md_segment< BaseSegment, Rank >)dr::mp::__detail::md_segment< BaseSegment, Rank >inline
    origin() const (defined in dr::mp::__detail::md_segment< BaseSegment, Rank >)dr::mp::__detail::md_segment< BaseSegment, Rank >inline
    reserved() const (defined in dr::mp::__detail::md_segment< BaseSegment, Rank >)dr::mp::__detail::md_segment< BaseSegment, Rank >inline
    root_mdspan() const (defined in dr::mp::__detail::md_segment< BaseSegment, Rank >)dr::mp::__detail::md_segment< BaseSegment, Rank >inline
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1____detail_1_1md__segment.html b/doxygen/classdr_1_1mp_1_1____detail_1_1md__segment.html new file mode 100644 index 0000000000..66d7cd335d --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1____detail_1_1md__segment.html @@ -0,0 +1,144 @@ + + + + + + + +Distributed Ranges: dr::mp::__detail::md_segment< BaseSegment, Rank > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::mp::__detail::md_segment< BaseSegment, Rank > Class Template Reference
    +
    +
    +
    +Inheritance diagram for dr::mp::__detail::md_segment< BaseSegment, Rank >:
    +
    +
    Inheritance graph
    + + + + +
    [legend]
    +
    +Collaboration diagram for dr::mp::__detail::md_segment< BaseSegment, Rank >:
    +
    +
    Collaboration graph
    + + + + +
    [legend]
    + + + + +

    +Public Types

    +using index_type = dr::__detail::dr_extents< Rank >
     
    + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    md_segment (index_type origin, BaseSegment segment, index_type tile_shape)
     
    +auto begin () const
     
    +auto end () const
     
    +auto reserved () const
     
    +auto halo () const
     
    +auto mdspan () const
     
    +auto origin () const
     
    +auto root_mdspan () const
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/views/mdspan_view.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1____detail_1_1md__segment__coll__graph.map b/doxygen/classdr_1_1mp_1_1____detail_1_1md__segment__coll__graph.map new file mode 100644 index 0000000000..bf2ca36f98 --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1____detail_1_1md__segment__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/classdr_1_1mp_1_1____detail_1_1md__segment__coll__graph.md5 b/doxygen/classdr_1_1mp_1_1____detail_1_1md__segment__coll__graph.md5 new file mode 100644 index 0000000000..e07ad2027b --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1____detail_1_1md__segment__coll__graph.md5 @@ -0,0 +1 @@ +7719183145da056c231849ce888e7fff \ No newline at end of file diff --git a/doxygen/classdr_1_1mp_1_1____detail_1_1md__segment__coll__graph.png b/doxygen/classdr_1_1mp_1_1____detail_1_1md__segment__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..0d31c5bf8f274d15d153beb688c2913526ca027d GIT binary patch literal 10064 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 D5~@g! literal 0 HcmV?d00001 diff --git a/doxygen/classdr_1_1mp_1_1____detail_1_1md__segment__inherit__graph.map b/doxygen/classdr_1_1mp_1_1____detail_1_1md__segment__inherit__graph.map new file mode 100644 index 0000000000..bf2ca36f98 --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1____detail_1_1md__segment__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/classdr_1_1mp_1_1____detail_1_1md__segment__inherit__graph.md5 b/doxygen/classdr_1_1mp_1_1____detail_1_1md__segment__inherit__graph.md5 new file mode 100644 index 0000000000..e07ad2027b --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1____detail_1_1md__segment__inherit__graph.md5 @@ -0,0 +1 @@ +7719183145da056c231849ce888e7fff \ No newline at end of file diff --git a/doxygen/classdr_1_1mp_1_1____detail_1_1md__segment__inherit__graph.png b/doxygen/classdr_1_1mp_1_1____detail_1_1md__segment__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..0d31c5bf8f274d15d153beb688c2913526ca027d GIT binary patch literal 10064 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 D5~@g! literal 0 HcmV?d00001 diff --git a/doxygen/classdr_1_1mp_1_1____detail_1_1mdsub__segment-members.html b/doxygen/classdr_1_1mp_1_1____detail_1_1mdsub__segment-members.html new file mode 100644 index 0000000000..2c8bfaad5d --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1____detail_1_1mdsub__segment-members.html @@ -0,0 +1,93 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::mp::__detail::mdsub_segment< BaseSegment, Rank, Layout > Member List
    +
    + + + + + diff --git a/doxygen/classdr_1_1mp_1_1____detail_1_1mdsub__segment.html b/doxygen/classdr_1_1mp_1_1____detail_1_1mdsub__segment.html new file mode 100644 index 0000000000..a3d2aa98a6 --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1____detail_1_1mdsub__segment.html @@ -0,0 +1,129 @@ + + + + + + + +Distributed Ranges: dr::mp::__detail::mdsub_segment< BaseSegment, Rank, Layout > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::mp::__detail::mdsub_segment< BaseSegment, Rank, Layout > Class Template Reference
    +
    +
    +
    +Inheritance diagram for dr::mp::__detail::mdsub_segment< BaseSegment, Rank, Layout >:
    +
    +
    Inheritance graph
    + + + + +
    [legend]
    +
    +Collaboration diagram for dr::mp::__detail::mdsub_segment< BaseSegment, Rank, Layout >:
    +
    +
    Collaboration graph
    + + + + +
    [legend]
    + + + + +

    +Public Types

    +using index_type = dr::__detail::dr_extents< Rank >
     
    + + + + + + + +

    +Public Member Functions

    mdsub_segment (BaseSegment segment, const index_type &slice_starts, const index_type &slice_ends)
     
    +auto mdspan () const
     
    +auto root_mdspan () const
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/views/submdspan_view.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1____detail_1_1mdsub__segment__coll__graph.map b/doxygen/classdr_1_1mp_1_1____detail_1_1mdsub__segment__coll__graph.map new file mode 100644 index 0000000000..b19a2eacd4 --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1____detail_1_1mdsub__segment__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/classdr_1_1mp_1_1____detail_1_1mdsub__segment__coll__graph.md5 b/doxygen/classdr_1_1mp_1_1____detail_1_1mdsub__segment__coll__graph.md5 new file mode 100644 index 0000000000..972d3334da --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1____detail_1_1mdsub__segment__coll__graph.md5 @@ -0,0 +1 @@ +c39dddf58831abd1e8535e56290858ad \ No newline at end of file diff --git a/doxygen/classdr_1_1mp_1_1____detail_1_1mdsub__segment__coll__graph.png b/doxygen/classdr_1_1mp_1_1____detail_1_1mdsub__segment__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..4c0c5c4015125ee9b4c17bc7d152cb27a5f16912 GIT binary patch literal 7782 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 literal 0 HcmV?d00001 diff --git a/doxygen/classdr_1_1mp_1_1____detail_1_1mdsub__segment__inherit__graph.map b/doxygen/classdr_1_1mp_1_1____detail_1_1mdsub__segment__inherit__graph.map new file mode 100644 index 0000000000..b19a2eacd4 --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1____detail_1_1mdsub__segment__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/classdr_1_1mp_1_1____detail_1_1mdsub__segment__inherit__graph.md5 b/doxygen/classdr_1_1mp_1_1____detail_1_1mdsub__segment__inherit__graph.md5 new file mode 100644 index 0000000000..972d3334da --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1____detail_1_1mdsub__segment__inherit__graph.md5 @@ -0,0 +1 @@ +c39dddf58831abd1e8535e56290858ad \ No newline at end of file diff --git a/doxygen/classdr_1_1mp_1_1____detail_1_1mdsub__segment__inherit__graph.png b/doxygen/classdr_1_1mp_1_1____detail_1_1mdsub__segment__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..4c0c5c4015125ee9b4c17bc7d152cb27a5f16912 GIT binary patch literal 7782 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 literal 0 HcmV?d00001 diff --git a/doxygen/classdr_1_1mp_1_1____detail_1_1tmp__buffer-members.html b/doxygen/classdr_1_1mp_1_1____detail_1_1tmp__buffer-members.html new file mode 100644 index 0000000000..e572cd33eb --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1____detail_1_1tmp__buffer-members.html @@ -0,0 +1,91 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::mp::__detail::tmp_buffer< T > Member List
    +
    +
    + +

    This is the complete list of members for dr::mp::__detail::tmp_buffer< T >, including all inherited members.

    + + + + +
    data() (defined in dr::mp::__detail::tmp_buffer< T >)dr::mp::__detail::tmp_buffer< T >inline
    tmp_buffer(std::size_t size, auto &&candidate) (defined in dr::mp::__detail::tmp_buffer< T >)dr::mp::__detail::tmp_buffer< T >inline
    ~tmp_buffer() (defined in dr::mp::__detail::tmp_buffer< T >)dr::mp::__detail::tmp_buffer< T >inline
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1____detail_1_1tmp__buffer.html b/doxygen/classdr_1_1mp_1_1____detail_1_1tmp__buffer.html new file mode 100644 index 0000000000..af239045a1 --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1____detail_1_1tmp__buffer.html @@ -0,0 +1,101 @@ + + + + + + + +Distributed Ranges: dr::mp::__detail::tmp_buffer< T > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::mp::__detail::tmp_buffer< T > Class Template Reference
    +
    +
    + + + + + + +

    +Public Member Functions

    tmp_buffer (std::size_t size, auto &&candidate)
     
    +T * data ()
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/algorithms/transpose.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1count__fn__-members.html b/doxygen/classdr_1_1mp_1_1count__fn__-members.html new file mode 100644 index 0000000000..701394defd --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1count__fn__-members.html @@ -0,0 +1,92 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::mp::count_fn_ Member List
    +
    +
    + +

    This is the complete list of members for dr::mp::count_fn_, including all inherited members.

    + + + + + +
    operator()(std::size_t root, DR &&dr, const T &value) const (defined in dr::mp::count_fn_)dr::mp::count_fn_inline
    operator()(DR &&dr, const T &value) const (defined in dr::mp::count_fn_)dr::mp::count_fn_inline
    operator()(std::size_t root, DI first, DI last, const T &value) const (defined in dr::mp::count_fn_)dr::mp::count_fn_inline
    operator()(DI first, DI last, const T &value) const (defined in dr::mp::count_fn_)dr::mp::count_fn_inline
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1count__fn__.html b/doxygen/classdr_1_1mp_1_1count__fn__.html new file mode 100644 index 0000000000..5e281f328c --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1count__fn__.html @@ -0,0 +1,111 @@ + + + + + + + +Distributed Ranges: dr::mp::count_fn_ Class Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::mp::count_fn_ Class Reference
    +
    +
    + + + + + + + + + + + + + + +

    +Public Member Functions

    +template<typename T , dr::distributed_range DR>
    auto operator() (std::size_t root, DR &&dr, const T &value) const
     
    +template<typename T , dr::distributed_range DR>
    auto operator() (DR &&dr, const T &value) const
     
    +template<typename T , dr::distributed_iterator DI>
    auto operator() (std::size_t root, DI first, DI last, const T &value) const
     
    +template<typename T , dr::distributed_iterator DI>
    auto operator() (DI first, DI last, const T &value) const
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/algorithms/count.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1count__if__fn__-members.html b/doxygen/classdr_1_1mp_1_1count__if__fn__-members.html new file mode 100644 index 0000000000..6afa740101 --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1count__if__fn__-members.html @@ -0,0 +1,92 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::mp::count_if_fn_ Member List
    +
    +
    + +

    This is the complete list of members for dr::mp::count_if_fn_, including all inherited members.

    + + + + + +
    operator()(std::size_t root, DR &&dr, auto &&pred) const (defined in dr::mp::count_if_fn_)dr::mp::count_if_fn_inline
    operator()(DR &&dr, auto &&pred) const (defined in dr::mp::count_if_fn_)dr::mp::count_if_fn_inline
    operator()(std::size_t root, DI first, DI last, auto &&pred) const (defined in dr::mp::count_if_fn_)dr::mp::count_if_fn_inline
    operator()(DI first, DI last, auto &&pred) const (defined in dr::mp::count_if_fn_)dr::mp::count_if_fn_inline
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1count__if__fn__.html b/doxygen/classdr_1_1mp_1_1count__if__fn__.html new file mode 100644 index 0000000000..2dc8331991 --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1count__if__fn__.html @@ -0,0 +1,111 @@ + + + + + + + +Distributed Ranges: dr::mp::count_if_fn_ Class Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::mp::count_if_fn_ Class Reference
    +
    +
    + + + + + + + + + + + + + + +

    +Public Member Functions

    +template<dr::distributed_range DR>
    auto operator() (std::size_t root, DR &&dr, auto &&pred) const
     
    +template<dr::distributed_range DR>
    auto operator() (DR &&dr, auto &&pred) const
     
    +template<dr::distributed_iterator DI>
    auto operator() (std::size_t root, DI first, DI last, auto &&pred) const
     
    +template<dr::distributed_iterator DI>
    auto operator() (DI first, DI last, auto &&pred) const
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/algorithms/count.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1distributed__mdarray-members.html b/doxygen/classdr_1_1mp_1_1distributed__mdarray-members.html new file mode 100644 index 0000000000..28683e6e37 --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1distributed__mdarray-members.html @@ -0,0 +1,102 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::mp::distributed_mdarray< T, Rank > Member List
    +
    +
    + +

    This is the complete list of members for dr::mp::distributed_mdarray< T, Rank >, including all inherited members.

    + + + + + + + + + + + + + + + +
    begin() const (defined in dr::mp::distributed_mdarray< T, Rank >)dr::mp::distributed_mdarray< T, Rank >inline
    distributed_mdarray(dr::__detail::dr_extents< Rank > shape, distribution dist=distribution()) (defined in dr::mp::distributed_mdarray< T, Rank >)dr::mp::distributed_mdarray< T, Rank >inline
    end() const (defined in dr::mp::distributed_mdarray< T, Rank >)dr::mp::distributed_mdarray< T, Rank >inline
    extent(std::size_t r) const (defined in dr::mp::distributed_mdarray< T, Rank >)dr::mp::distributed_mdarray< T, Rank >inline
    grid() (defined in dr::mp::distributed_mdarray< T, Rank >)dr::mp::distributed_mdarray< T, Rank >inline
    halo() const (defined in dr::mp::distributed_mdarray< T, Rank >)dr::mp::distributed_mdarray< T, Rank >inline
    mdspan() const (defined in dr::mp::distributed_mdarray< T, Rank >)dr::mp::distributed_mdarray< T, Rank >inline
    operator==(const distributed_mdarray &other) const (defined in dr::mp::distributed_mdarray< T, Rank >)dr::mp::distributed_mdarray< T, Rank >inline
    operator[](auto n) (defined in dr::mp::distributed_mdarray< T, Rank >)dr::mp::distributed_mdarray< T, Rank >inline
    rank() (defined in dr::mp::distributed_mdarray< T, Rank >)dr::mp::distributed_mdarray< T, Rank >inlinestatic
    segments() (defined in dr::mp::distributed_mdarray< T, Rank >)dr::mp::distributed_mdarray< T, Rank >inline
    shape_type typedef (defined in dr::mp::distributed_mdarray< T, Rank >)dr::mp::distributed_mdarray< T, Rank >
    size() const (defined in dr::mp::distributed_mdarray< T, Rank >)dr::mp::distributed_mdarray< T, Rank >inline
    view() const (defined in dr::mp::distributed_mdarray< T, Rank >)dr::mp::distributed_mdarray< T, Rank >inline
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1distributed__mdarray.html b/doxygen/classdr_1_1mp_1_1distributed__mdarray.html new file mode 100644 index 0000000000..140b66db9c --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1distributed__mdarray.html @@ -0,0 +1,145 @@ + + + + + + + +Distributed Ranges: dr::mp::distributed_mdarray< T, Rank > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::mp::distributed_mdarray< T, Rank > Class Template Reference
    +
    +
    + + + + +

    +Public Types

    +using shape_type = dr::__detail::dr_extents< Rank >
     
    + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    distributed_mdarray (dr::__detail::dr_extents< Rank > shape, distribution dist=distribution())
     
    +auto begin () const
     
    +auto end () const
     
    +auto size () const
     
    +auto operator[] (auto n)
     
    +auto segments ()
     
    +auto & halo () const
     
    +auto mdspan () const
     
    +auto extent (std::size_t r) const
     
    +auto grid ()
     
    +auto view () const
     
    +auto operator== (const distributed_mdarray &other) const
     
    + + + +

    +Static Public Member Functions

    +static constexpr auto rank ()
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/containers/distributed_mdarray.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1distributed__vector-members.html b/doxygen/classdr_1_1mp_1_1distributed__vector-members.html new file mode 100644 index 0000000000..76c84e9abf --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1distributed__vector-members.html @@ -0,0 +1,105 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::mp::distributed_vector< T, BackendT > Member List
    +
    +
    + +

    This is the complete list of members for dr::mp::distributed_vector< T, BackendT >, including all inherited members.

    + + + + + + + + + + + + + + + + + + +
    backend_type typedef (defined in dr::mp::distributed_vector< T, BackendT >)dr::mp::distributed_vector< T, BackendT >
    begin() constdr::mp::distributed_vector< T, BackendT >inline
    difference_type typedef (defined in dr::mp::distributed_vector< T, BackendT >)dr::mp::distributed_vector< T, BackendT >
    distributed_vector(const distributed_vector &)=delete (defined in dr::mp::distributed_vector< T, BackendT >)dr::mp::distributed_vector< T, BackendT >
    distributed_vector(distributed_vector &&) (defined in dr::mp::distributed_vector< T, BackendT >)dr::mp::distributed_vector< T, BackendT >inline
    distributed_vector(std::size_t size=0, distribution dist=distribution())dr::mp::distributed_vector< T, BackendT >inline
    distributed_vector(std::size_t size, value_type fill_value, distribution dist=distribution())dr::mp::distributed_vector< T, BackendT >inline
    end() constdr::mp::distributed_vector< T, BackendT >inline
    fence() (defined in dr::mp::distributed_vector< T, BackendT >)dr::mp::distributed_vector< T, BackendT >inline
    halo() const (defined in dr::mp::distributed_vector< T, BackendT >)dr::mp::distributed_vector< T, BackendT >inline
    operator=(const distributed_vector &)=delete (defined in dr::mp::distributed_vector< T, BackendT >)dr::mp::distributed_vector< T, BackendT >
    operator[](difference_type n) constdr::mp::distributed_vector< T, BackendT >inline
    segments() const (defined in dr::mp::distributed_vector< T, BackendT >)dr::mp::distributed_vector< T, BackendT >inline
    size() constdr::mp::distributed_vector< T, BackendT >inline
    size_type typedef (defined in dr::mp::distributed_vector< T, BackendT >)dr::mp::distributed_vector< T, BackendT >
    value_type typedef (defined in dr::mp::distributed_vector< T, BackendT >)dr::mp::distributed_vector< T, BackendT >
    ~distributed_vector() (defined in dr::mp::distributed_vector< T, BackendT >)dr::mp::distributed_vector< T, BackendT >inline
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1distributed__vector.html b/doxygen/classdr_1_1mp_1_1distributed__vector.html new file mode 100644 index 0000000000..3b7f77464d --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1distributed__vector.html @@ -0,0 +1,167 @@ + + + + + + + +Distributed Ranges: dr::mp::distributed_vector< T, BackendT > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::mp::distributed_vector< T, BackendT > Class Template Reference
    +
    +
    + +

    distributed vector + More...

    + +

    #include <distributed_vector.hpp>

    + + + + +

    +Classes

    class  iterator
     
    + + + + + + + + + +

    +Public Types

    +using value_type = T
     
    +using size_type = std::size_t
     
    +using difference_type = std::ptrdiff_t
     
    +using backend_type = BackendT
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    distributed_vector (const distributed_vector &)=delete
     
    +distributed_vectoroperator= (const distributed_vector &)=delete
     
    distributed_vector (distributed_vector &&)
     
    distributed_vector (std::size_t size=0, distribution dist=distribution())
     Constructor.
     
    distributed_vector (std::size_t size, value_type fill_value, distribution dist=distribution())
     Constructor.
     
    +auto begin () const
     Returns iterator to beginning.
     
    +auto end () const
     Returns iterator to end.
     
    +auto size () const
     Returns size.
     
    +auto operator[] (difference_type n) const
     Returns reference using index.
     
    +auto & halo () const
     
    +auto segments () const
     
    +void fence ()
     
    +

    Detailed Description

    +
    template<typename T, class BackendT = MpiBackend>
    +class dr::mp::distributed_vector< T, BackendT >

    distributed vector

    +

    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/containers/distributed_vector.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1distributed__vector_1_1iterator-members.html b/doxygen/classdr_1_1mp_1_1distributed__vector_1_1iterator-members.html new file mode 100644 index 0000000000..a621721f25 --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1distributed__vector_1_1iterator-members.html @@ -0,0 +1,109 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::mp::distributed_vector< T, BackendT >::iterator Member List
    +
    +
    + +

    This is the complete list of members for dr::mp::distributed_vector< T, BackendT >::iterator, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + +
    difference_type typedef (defined in dr::mp::distributed_vector< T, BackendT >::iterator)dr::mp::distributed_vector< T, BackendT >::iterator
    iterator() (defined in dr::mp::distributed_vector< T, BackendT >::iterator)dr::mp::distributed_vector< T, BackendT >::iteratorinline
    iterator(const distributed_vector *parent, difference_type offset) (defined in dr::mp::distributed_vector< T, BackendT >::iterator)dr::mp::distributed_vector< T, BackendT >::iteratorinline
    iterator_category typedef (defined in dr::mp::distributed_vector< T, BackendT >::iterator)dr::mp::distributed_vector< T, BackendT >::iterator
    local() (defined in dr::mp::distributed_vector< T, BackendT >::iterator)dr::mp::distributed_vector< T, BackendT >::iteratorinline
    operator*() const (defined in dr::mp::distributed_vector< T, BackendT >::iterator)dr::mp::distributed_vector< T, BackendT >::iteratorinline
    operator+(difference_type n) const (defined in dr::mp::distributed_vector< T, BackendT >::iterator)dr::mp::distributed_vector< T, BackendT >::iteratorinline
    operator+ (defined in dr::mp::distributed_vector< T, BackendT >::iterator)dr::mp::distributed_vector< T, BackendT >::iteratorfriend
    operator++() (defined in dr::mp::distributed_vector< T, BackendT >::iterator)dr::mp::distributed_vector< T, BackendT >::iteratorinline
    operator++(int) (defined in dr::mp::distributed_vector< T, BackendT >::iterator)dr::mp::distributed_vector< T, BackendT >::iteratorinline
    operator+=(difference_type n) (defined in dr::mp::distributed_vector< T, BackendT >::iterator)dr::mp::distributed_vector< T, BackendT >::iteratorinline
    operator-(difference_type n) const (defined in dr::mp::distributed_vector< T, BackendT >::iterator)dr::mp::distributed_vector< T, BackendT >::iteratorinline
    operator-(iterator other) const (defined in dr::mp::distributed_vector< T, BackendT >::iterator)dr::mp::distributed_vector< T, BackendT >::iteratorinline
    operator--() (defined in dr::mp::distributed_vector< T, BackendT >::iterator)dr::mp::distributed_vector< T, BackendT >::iteratorinline
    operator--(int) (defined in dr::mp::distributed_vector< T, BackendT >::iterator)dr::mp::distributed_vector< T, BackendT >::iteratorinline
    operator-=(difference_type n) (defined in dr::mp::distributed_vector< T, BackendT >::iterator)dr::mp::distributed_vector< T, BackendT >::iteratorinline
    operator<=>(iterator other) const (defined in dr::mp::distributed_vector< T, BackendT >::iterator)dr::mp::distributed_vector< T, BackendT >::iteratorinline
    operator==(iterator other) const (defined in dr::mp::distributed_vector< T, BackendT >::iterator)dr::mp::distributed_vector< T, BackendT >::iteratorinline
    operator[](difference_type n) const (defined in dr::mp::distributed_vector< T, BackendT >::iterator)dr::mp::distributed_vector< T, BackendT >::iteratorinline
    segments() (defined in dr::mp::distributed_vector< T, BackendT >::iterator)dr::mp::distributed_vector< T, BackendT >::iteratorinline
    value_type typedef (defined in dr::mp::distributed_vector< T, BackendT >::iterator)dr::mp::distributed_vector< T, BackendT >::iterator
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1distributed__vector_1_1iterator.html b/doxygen/classdr_1_1mp_1_1distributed__vector_1_1iterator.html new file mode 100644 index 0000000000..2072e4dac7 --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1distributed__vector_1_1iterator.html @@ -0,0 +1,163 @@ + + + + + + + +Distributed Ranges: dr::mp::distributed_vector< T, BackendT >::iterator Class Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::mp::distributed_vector< T, BackendT >::iterator Class Reference
    +
    +
    + + + + + + + + +

    +Public Types

    +using iterator_category = std::random_access_iterator_tag
     
    +using value_type = typename distributed_vector::value_type
     
    +using difference_type = typename distributed_vector::difference_type
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    iterator (const distributed_vector *parent, difference_type offset)
     
    +auto operator+ (difference_type n) const
     
    +auto operator- (difference_type n) const
     
    +auto operator- (iterator other) const
     
    +auto & operator+= (difference_type n)
     
    +auto & operator-= (difference_type n)
     
    +auto & operator++ ()
     
    +auto operator++ (int)
     
    +auto & operator-- ()
     
    +auto operator-- (int)
     
    +bool operator== (iterator other) const
     
    +auto operator<=> (iterator other) const
     
    +auto operator* () const
     
    +auto operator[] (difference_type n) const
     
    +auto local ()
     
    +auto segments ()
     
    + + + +

    +Friends

    +auto operator+ (difference_type n, const iterator &other)
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/containers/distributed_vector.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1dv__segment-members.html b/doxygen/classdr_1_1mp_1_1dv__segment-members.html new file mode 100644 index 0000000000..599ca425c4 --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1dv__segment-members.html @@ -0,0 +1,97 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::mp::dv_segment< DV > Member List
    +
    +
    + +

    This is the complete list of members for dr::mp::dv_segment< DV >, including all inherited members.

    + + + + + + + + + + +
    begin() const (defined in dr::mp::dv_segment< DV >)dr::mp::dv_segment< DV >inline
    difference_type typedef (defined in dr::mp::dv_segment< DV >)dr::mp::dv_segment< DV >
    dv_segment()=default (defined in dr::mp::dv_segment< DV >)dr::mp::dv_segment< DV >
    dv_segment(DV *dv, std::size_t segment_index, std::size_t size, std::size_t reserved) (defined in dr::mp::dv_segment< DV >)dr::mp::dv_segment< DV >inline
    end() const (defined in dr::mp::dv_segment< DV >)dr::mp::dv_segment< DV >inline
    is_local() const (defined in dr::mp::dv_segment< DV >)dr::mp::dv_segment< DV >inline
    operator[](difference_type n) const (defined in dr::mp::dv_segment< DV >)dr::mp::dv_segment< DV >inline
    reserved() const (defined in dr::mp::dv_segment< DV >)dr::mp::dv_segment< DV >inline
    size() const (defined in dr::mp::dv_segment< DV >)dr::mp::dv_segment< DV >inline
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1dv__segment.html b/doxygen/classdr_1_1mp_1_1dv__segment.html new file mode 100644 index 0000000000..ad2cc20b6f --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1dv__segment.html @@ -0,0 +1,123 @@ + + + + + + + +Distributed Ranges: dr::mp::dv_segment< DV > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::mp::dv_segment< DV > Class Template Reference
    +
    +
    + + + + +

    +Public Types

    +using difference_type = std::ptrdiff_t
     
    + + + + + + + + + + + + + + + +

    +Public Member Functions

    dv_segment (DV *dv, std::size_t segment_index, std::size_t size, std::size_t reserved)
     
    +auto size () const
     
    +auto begin () const
     
    +auto end () const
     
    +auto reserved () const
     
    +auto operator[] (difference_type n) const
     
    +bool is_local () const
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/containers/segment.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1dv__segment__iterator-members.html b/doxygen/classdr_1_1mp_1_1dv__segment__iterator-members.html new file mode 100644 index 0000000000..fd6c248aa2 --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1dv__segment__iterator-members.html @@ -0,0 +1,116 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::mp::dv_segment_iterator< DV > Member List
    +
    +
    + +

    This is the complete list of members for dr::mp::dv_segment_iterator< DV >, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    difference_type typedef (defined in dr::mp::dv_segment_iterator< DV >)dr::mp::dv_segment_iterator< DV >
    dv_segment_iterator()=default (defined in dr::mp::dv_segment_iterator< DV >)dr::mp::dv_segment_iterator< DV >
    dv_segment_iterator(DV *dv, std::size_t segment_index, std::size_t index) (defined in dr::mp::dv_segment_iterator< DV >)dr::mp::dv_segment_iterator< DV >inline
    get(value_type *dst, std::size_t size) const (defined in dr::mp::dv_segment_iterator< DV >)dr::mp::dv_segment_iterator< DV >inline
    get() const (defined in dr::mp::dv_segment_iterator< DV >)dr::mp::dv_segment_iterator< DV >inline
    halo() const (defined in dr::mp::dv_segment_iterator< DV >)dr::mp::dv_segment_iterator< DV >inline
    halo_bounds() const (defined in dr::mp::dv_segment_iterator< DV >)dr::mp::dv_segment_iterator< DV >inline
    local() const (defined in dr::mp::dv_segment_iterator< DV >)dr::mp::dv_segment_iterator< DV >inline
    operator*() const (defined in dr::mp::dv_segment_iterator< DV >)dr::mp::dv_segment_iterator< DV >inline
    operator+(difference_type n) const (defined in dr::mp::dv_segment_iterator< DV >)dr::mp::dv_segment_iterator< DV >inline
    operator+ (defined in dr::mp::dv_segment_iterator< DV >)dr::mp::dv_segment_iterator< DV >friend
    operator++() (defined in dr::mp::dv_segment_iterator< DV >)dr::mp::dv_segment_iterator< DV >inline
    operator++(int) (defined in dr::mp::dv_segment_iterator< DV >)dr::mp::dv_segment_iterator< DV >inline
    operator+=(difference_type n) (defined in dr::mp::dv_segment_iterator< DV >)dr::mp::dv_segment_iterator< DV >inline
    operator-(const dv_segment_iterator &other) const noexcept (defined in dr::mp::dv_segment_iterator< DV >)dr::mp::dv_segment_iterator< DV >inline
    operator-(difference_type n) const (defined in dr::mp::dv_segment_iterator< DV >)dr::mp::dv_segment_iterator< DV >inline
    operator--() (defined in dr::mp::dv_segment_iterator< DV >)dr::mp::dv_segment_iterator< DV >inline
    operator--(int) (defined in dr::mp::dv_segment_iterator< DV >)dr::mp::dv_segment_iterator< DV >inline
    operator-=(difference_type n) (defined in dr::mp::dv_segment_iterator< DV >)dr::mp::dv_segment_iterator< DV >inline
    operator<=>(const dv_segment_iterator &other) const noexcept (defined in dr::mp::dv_segment_iterator< DV >)dr::mp::dv_segment_iterator< DV >inline
    operator==(const dv_segment_iterator &other) const noexcept (defined in dr::mp::dv_segment_iterator< DV >)dr::mp::dv_segment_iterator< DV >inline
    operator[](difference_type n) const (defined in dr::mp::dv_segment_iterator< DV >)dr::mp::dv_segment_iterator< DV >inline
    put(const value_type *dst, std::size_t size) const (defined in dr::mp::dv_segment_iterator< DV >)dr::mp::dv_segment_iterator< DV >inline
    put(const value_type &value) const (defined in dr::mp::dv_segment_iterator< DV >)dr::mp::dv_segment_iterator< DV >inline
    rank() const (defined in dr::mp::dv_segment_iterator< DV >)dr::mp::dv_segment_iterator< DV >inline
    segments() const (defined in dr::mp::dv_segment_iterator< DV >)dr::mp::dv_segment_iterator< DV >inline
    size_type typedef (defined in dr::mp::dv_segment_iterator< DV >)dr::mp::dv_segment_iterator< DV >
    value_type typedef (defined in dr::mp::dv_segment_iterator< DV >)dr::mp::dv_segment_iterator< DV >
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1dv__segment__iterator.html b/doxygen/classdr_1_1mp_1_1dv__segment__iterator.html new file mode 100644 index 0000000000..ceee86cd8d --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1dv__segment__iterator.html @@ -0,0 +1,184 @@ + + + + + + + +Distributed Ranges: dr::mp::dv_segment_iterator< DV > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::mp::dv_segment_iterator< DV > Class Template Reference
    +
    +
    + + + + + + + + +

    +Public Types

    +using value_type = typename DV::value_type
     
    +using size_type = typename DV::size_type
     
    +using difference_type = typename DV::difference_type
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    dv_segment_iterator (DV *dv, std::size_t segment_index, std::size_t index)
     
    +auto operator<=> (const dv_segment_iterator &other) const noexcept
     
    +bool operator== (const dv_segment_iterator &other) const noexcept
     
    +auto & operator+= (difference_type n)
     
    +auto & operator-= (difference_type n)
     
    +difference_type operator- (const dv_segment_iterator &other) const noexcept
     
    +auto & operator++ ()
     
    +auto & operator-- ()
     
    +auto operator++ (int)
     
    +auto operator-- (int)
     
    +auto operator+ (difference_type n) const
     
    +auto operator- (difference_type n) const
     
    +auto operator* () const
     
    +auto operator[] (difference_type n) const
     
    +void get (value_type *dst, std::size_t size) const
     
    +value_type get () const
     
    +void put (const value_type *dst, std::size_t size) const
     
    +void put (const value_type &value) const
     
    +auto rank () const
     
    +auto local () const
     
    +auto segments () const
     
    +auto & halo () const
     
    +auto halo_bounds () const
     
    + + + +

    +Friends

    +auto operator+ (difference_type n, const dv_segment_iterator &other)
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/containers/segment.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1dv__segment__reference-members.html b/doxygen/classdr_1_1mp_1_1dv__segment__reference-members.html new file mode 100644 index 0000000000..67982e8022 --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1dv__segment__reference-members.html @@ -0,0 +1,94 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::mp::dv_segment_reference< DV > Member List
    +
    +
    + +

    This is the complete list of members for dr::mp::dv_segment_reference< DV >, including all inherited members.

    + + + + + + + +
    dv_segment_reference(const iterator it) (defined in dr::mp::dv_segment_reference< DV >)dr::mp::dv_segment_reference< DV >inline
    operator value_type() const (defined in dr::mp::dv_segment_reference< DV >)dr::mp::dv_segment_reference< DV >inline
    operator&() const (defined in dr::mp::dv_segment_reference< DV >)dr::mp::dv_segment_reference< DV >inline
    operator=(const value_type &value) const (defined in dr::mp::dv_segment_reference< DV >)dr::mp::dv_segment_reference< DV >inline
    operator=(const dv_segment_reference &other) const (defined in dr::mp::dv_segment_reference< DV >)dr::mp::dv_segment_reference< DV >inline
    value_type typedef (defined in dr::mp::dv_segment_reference< DV >)dr::mp::dv_segment_reference< DV >
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1dv__segment__reference.html b/doxygen/classdr_1_1mp_1_1dv__segment__reference.html new file mode 100644 index 0000000000..8629be2142 --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1dv__segment__reference.html @@ -0,0 +1,117 @@ + + + + + + + +Distributed Ranges: dr::mp::dv_segment_reference< DV > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::mp::dv_segment_reference< DV > Class Template Reference
    +
    +
    + + + + +

    +Public Types

    +using value_type = typename DV::value_type
     
    + + + + + + + + + + + +

    +Public Member Functions

    dv_segment_reference (const iterator it)
     
    operator value_type () const
     
    +auto operator= (const value_type &value) const
     
    +auto operator= (const dv_segment_reference &other) const
     
    +auto operator& () const
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/containers/segment.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1halo__impl-members.html b/doxygen/classdr_1_1mp_1_1halo__impl-members.html new file mode 100644 index 0000000000..a9e1ca0c31 --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1halo__impl-members.html @@ -0,0 +1,104 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::mp::halo_impl< Group > Member List
    +
    +
    + +

    This is the complete list of members for dr::mp::halo_impl< Group >, including all inherited members.

    + + + + + + + + + + + + + + + + + +
    exchange() (defined in dr::mp::halo_impl< Group >)dr::mp::halo_impl< Group >inline
    exchange_begin()dr::mp::halo_impl< Group >inline
    exchange_finalize()dr::mp::halo_impl< Group >inline
    group_type typedef (defined in dr::mp::halo_impl< Group >)dr::mp::halo_impl< Group >
    halo_impl(const halo_impl &)=delete (defined in dr::mp::halo_impl< Group >)dr::mp::halo_impl< Group >
    halo_impl(communicator comm, const std::vector< Group > &owned_groups, const std::vector< Group > &halo_groups, const Memory &memory=Memory())dr::mp::halo_impl< Group >inline
    max (defined in dr::mp::halo_impl< Group >)dr::mp::halo_impl< Group >
    min (defined in dr::mp::halo_impl< Group >)dr::mp::halo_impl< Group >
    multiplies (defined in dr::mp::halo_impl< Group >)dr::mp::halo_impl< Group >
    operator=(const halo_impl &)=delete (defined in dr::mp::halo_impl< Group >)dr::mp::halo_impl< Group >
    plus (defined in dr::mp::halo_impl< Group >)dr::mp::halo_impl< Group >
    reduce_begin()dr::mp::halo_impl< Group >inline
    reduce_finalize(const auto &op)dr::mp::halo_impl< Group >inline
    reduce_finalize()dr::mp::halo_impl< Group >inline
    second (defined in dr::mp::halo_impl< Group >)dr::mp::halo_impl< Group >
    ~halo_impl() (defined in dr::mp::halo_impl< Group >)dr::mp::halo_impl< Group >inline
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1halo__impl.html b/doxygen/classdr_1_1mp_1_1halo__impl.html new file mode 100644 index 0000000000..74962cf46d --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1halo__impl.html @@ -0,0 +1,191 @@ + + + + + + + +Distributed Ranges: dr::mp::halo_impl< Group > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::mp::halo_impl< Group > Class Template Reference
    +
    +
    +
    +Inheritance diagram for dr::mp::halo_impl< Group >:
    +
    +
    Inheritance graph
    + + + + + +
    [legend]
    +
    +Collaboration diagram for dr::mp::halo_impl< Group >:
    +
    +
    Collaboration graph
    + + + + + + + + +
    [legend]
    + + + + + + + + + + + + +

    +Classes

    struct  max_op
     
    struct  min_op
     
    struct  multiplies_op
     
    struct  plus_op
     
    struct  second_op
     
    + + + +

    +Public Types

    +using group_type = Group
     
    + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    halo_impl (const halo_impl &)=delete
     
    +halo_impl operator= (const halo_impl &)=delete
     
    halo_impl (communicator comm, const std::vector< Group > &owned_groups, const std::vector< Group > &halo_groups, const Memory &memory=Memory())
     halo constructor
     
    +void exchange_begin ()
     Begin a halo exchange.
     
    +void exchange_finalize ()
     Complete a halo exchange.
     
    +void exchange ()
     
    +void reduce_begin ()
     Begin a halo reduction.
     
    +void reduce_finalize (const auto &op)
     Complete a halo reduction.
     
    +void reduce_finalize ()
     Complete a halo reduction.
     
    + + + + + + + + + + + +

    +Public Attributes

    +struct dr::mp::halo_impl::second_op second
     
    +struct dr::mp::halo_impl::plus_op plus
     
    +struct dr::mp::halo_impl::max_op max
     
    +struct dr::mp::halo_impl::min_op min
     
    +struct dr::mp::halo_impl::multiplies_op multiplies
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/halo.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1halo__impl__coll__graph.map b/doxygen/classdr_1_1mp_1_1halo__impl__coll__graph.map new file mode 100644 index 0000000000..d773bc0730 --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1halo__impl__coll__graph.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/doxygen/classdr_1_1mp_1_1halo__impl__coll__graph.md5 b/doxygen/classdr_1_1mp_1_1halo__impl__coll__graph.md5 new file mode 100644 index 0000000000..cbe7b1b01c --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1halo__impl__coll__graph.md5 @@ -0,0 +1 @@ +2ee58bbc898005fc1a70ce693827e189 \ No newline at end of file diff --git a/doxygen/classdr_1_1mp_1_1halo__impl__coll__graph.png b/doxygen/classdr_1_1mp_1_1halo__impl__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..60db6ae7b424106e183cc043942a097819ffccbe GIT binary patch literal 27524 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 literal 0 HcmV?d00001 diff --git a/doxygen/classdr_1_1mp_1_1halo__impl__inherit__graph.map b/doxygen/classdr_1_1mp_1_1halo__impl__inherit__graph.map new file mode 100644 index 0000000000..9de4caf406 --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1halo__impl__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/doxygen/classdr_1_1mp_1_1halo__impl__inherit__graph.md5 b/doxygen/classdr_1_1mp_1_1halo__impl__inherit__graph.md5 new file mode 100644 index 0000000000..afc06f3f82 --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1halo__impl__inherit__graph.md5 @@ -0,0 +1 @@ +e35e7c2544c61c8c3e20c6b5437f7812 \ No newline at end of file diff --git a/doxygen/classdr_1_1mp_1_1halo__impl__inherit__graph.png b/doxygen/classdr_1_1mp_1_1halo__impl__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..0966f0767f3af710e6ece84d354a16826200716c GIT binary patch literal 10405 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 + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::mp::index_group< T, Memory > Member List
    +
    +
    + +

    This is the complete list of members for dr::mp::index_group< T, Memory >, including all inherited members.

    + + + + + + + + + + + + + + + + + +
    buffer (defined in dr::mp::index_group< T, Memory >)dr::mp::index_group< T, Memory >
    buffer_size() (defined in dr::mp::index_group< T, Memory >)dr::mp::index_group< T, Memory >inline
    buffered (defined in dr::mp::index_group< T, Memory >)dr::mp::index_group< T, Memory >
    data_pointer() (defined in dr::mp::index_group< T, Memory >)dr::mp::index_group< T, Memory >inline
    data_size() (defined in dr::mp::index_group< T, Memory >)dr::mp::index_group< T, Memory >inline
    element_type typedef (defined in dr::mp::index_group< T, Memory >)dr::mp::index_group< T, Memory >
    index_group(T *data, std::size_t rank, const std::vector< std::size_t > &indices, const Memory &memory)dr::mp::index_group< T, Memory >inline
    index_group(const index_group &o) (defined in dr::mp::index_group< T, Memory >)dr::mp::index_group< T, Memory >inline
    memory_type typedef (defined in dr::mp::index_group< T, Memory >)dr::mp::index_group< T, Memory >
    pack() (defined in dr::mp::index_group< T, Memory >)dr::mp::index_group< T, Memory >inline
    rank() (defined in dr::mp::index_group< T, Memory >)dr::mp::index_group< T, Memory >inline
    receive (defined in dr::mp::index_group< T, Memory >)dr::mp::index_group< T, Memory >
    request_index (defined in dr::mp::index_group< T, Memory >)dr::mp::index_group< T, Memory >
    tag() (defined in dr::mp::index_group< T, Memory >)dr::mp::index_group< T, Memory >inline
    unpack(const auto &op) (defined in dr::mp::index_group< T, Memory >)dr::mp::index_group< T, Memory >inline
    ~index_group() (defined in dr::mp::index_group< T, Memory >)dr::mp::index_group< T, Memory >inline
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1index__group.html b/doxygen/classdr_1_1mp_1_1index__group.html new file mode 100644 index 0000000000..85d8a78229 --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1index__group.html @@ -0,0 +1,149 @@ + + + + + + + +Distributed Ranges: dr::mp::index_group< T, Memory > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::mp::index_group< T, Memory > Class Template Reference
    +
    +
    + + + + + + +

    +Public Types

    +using element_type = T
     
    +using memory_type = Memory
     
    + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    index_group (T *data, std::size_t rank, const std::vector< std::size_t > &indices, const Memory &memory)
     Constructor.
     
    index_group (const index_group &o)
     
    +void unpack (const auto &op)
     
    +void pack ()
     
    +std::size_t buffer_size ()
     
    +T * data_pointer ()
     
    +std::size_t data_size ()
     
    +std::size_t rank ()
     
    +auto tag ()
     
    + + + + + + + + + +

    +Public Attributes

    +T * buffer = nullptr
     
    +std::size_t request_index
     
    +bool receive
     
    +bool buffered
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/halo.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1segmented__view-members.html b/doxygen/classdr_1_1mp_1_1segmented__view-members.html new file mode 100644 index 0000000000..7710b50042 --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1segmented__view-members.html @@ -0,0 +1,92 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::mp::segmented_view< R, SegTpl > Member List
    +
    +
    + +

    This is the complete list of members for dr::mp::segmented_view< R, SegTpl >, including all inherited members.

    + + + + + +
    begin() const (defined in dr::mp::segmented_view< R, SegTpl >)dr::mp::segmented_view< R, SegTpl >inline
    end() const (defined in dr::mp::segmented_view< R, SegTpl >)dr::mp::segmented_view< R, SegTpl >inline
    segmented_view(V1 &&r, V2 &&tpl) (defined in dr::mp::segmented_view< R, SegTpl >)dr::mp::segmented_view< R, SegTpl >inline
    size() const (defined in dr::mp::segmented_view< R, SegTpl >)dr::mp::segmented_view< R, SegTpl >inline
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1segmented__view.html b/doxygen/classdr_1_1mp_1_1segmented__view.html new file mode 100644 index 0000000000..2cea8b942b --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1segmented__view.html @@ -0,0 +1,126 @@ + + + + + + + +Distributed Ranges: dr::mp::segmented_view< R, SegTpl > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::mp::segmented_view< R, SegTpl > Class Template Reference
    +
    +
    +
    +Inheritance diagram for dr::mp::segmented_view< R, SegTpl >:
    +
    +
    Inheritance graph
    + + + + +
    [legend]
    +
    +Collaboration diagram for dr::mp::segmented_view< R, SegTpl >:
    +
    +
    Collaboration graph
    + + + + +
    [legend]
    + + + + + + + + + + + +

    +Public Member Functions

    +template<typename V1 , typename V2 >
     segmented_view (V1 &&r, V2 &&tpl)
     
    +auto begin () const
     
    +auto end () const
     
    +auto size () const
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/views/segmented.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1segmented__view__coll__graph.map b/doxygen/classdr_1_1mp_1_1segmented__view__coll__graph.map new file mode 100644 index 0000000000..4867a10a10 --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1segmented__view__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/classdr_1_1mp_1_1segmented__view__coll__graph.md5 b/doxygen/classdr_1_1mp_1_1segmented__view__coll__graph.md5 new file mode 100644 index 0000000000..df2d1d2476 --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1segmented__view__coll__graph.md5 @@ -0,0 +1 @@ +686ade089aad85588bcced2fdf0560e9 \ No newline at end of file diff --git a/doxygen/classdr_1_1mp_1_1segmented__view__coll__graph.png b/doxygen/classdr_1_1mp_1_1segmented__view__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..fc2745aca4d81b4c5e5a936a1c54082456f8abcb GIT binary patch literal 9197 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 + + + diff --git a/doxygen/classdr_1_1mp_1_1segmented__view__inherit__graph.md5 b/doxygen/classdr_1_1mp_1_1segmented__view__inherit__graph.md5 new file mode 100644 index 0000000000..df2d1d2476 --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1segmented__view__inherit__graph.md5 @@ -0,0 +1 @@ +686ade089aad85588bcced2fdf0560e9 \ No newline at end of file diff --git a/doxygen/classdr_1_1mp_1_1segmented__view__inherit__graph.png b/doxygen/classdr_1_1mp_1_1segmented__view__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..fc2745aca4d81b4c5e5a936a1c54082456f8abcb GIT binary patch literal 9197 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 + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::mp::segmented_view_iterator< BaseIter, SegTplIter, SegTplSentinel > Member List
    +
    +
    + +

    This is the complete list of members for dr::mp::segmented_view_iterator< BaseIter, SegTplIter, SegTplSentinel >, including all inherited members.

    + + + + + + + + + + +
    difference_type typedef (defined in dr::mp::segmented_view_iterator< BaseIter, SegTplIter, SegTplSentinel >)dr::mp::segmented_view_iterator< BaseIter, SegTplIter, SegTplSentinel >
    iterator_category typedef (defined in dr::mp::segmented_view_iterator< BaseIter, SegTplIter, SegTplSentinel >)dr::mp::segmented_view_iterator< BaseIter, SegTplIter, SegTplSentinel >
    operator*() const (defined in dr::mp::segmented_view_iterator< BaseIter, SegTplIter, SegTplSentinel >)dr::mp::segmented_view_iterator< BaseIter, SegTplIter, SegTplSentinel >inline
    operator++() (defined in dr::mp::segmented_view_iterator< BaseIter, SegTplIter, SegTplSentinel >)dr::mp::segmented_view_iterator< BaseIter, SegTplIter, SegTplSentinel >inline
    operator++(int) (defined in dr::mp::segmented_view_iterator< BaseIter, SegTplIter, SegTplSentinel >)dr::mp::segmented_view_iterator< BaseIter, SegTplIter, SegTplSentinel >inline
    operator==(segmented_view_iterator other) const (defined in dr::mp::segmented_view_iterator< BaseIter, SegTplIter, SegTplSentinel >)dr::mp::segmented_view_iterator< BaseIter, SegTplIter, SegTplSentinel >inline
    segmented_view_iterator() (defined in dr::mp::segmented_view_iterator< BaseIter, SegTplIter, SegTplSentinel >)dr::mp::segmented_view_iterator< BaseIter, SegTplIter, SegTplSentinel >inline
    segmented_view_iterator(BaseIter base_begin, SegTplIter tpl_begin, SegTplSentinel tpl_end) (defined in dr::mp::segmented_view_iterator< BaseIter, SegTplIter, SegTplSentinel >)dr::mp::segmented_view_iterator< BaseIter, SegTplIter, SegTplSentinel >inline
    value_type typedef (defined in dr::mp::segmented_view_iterator< BaseIter, SegTplIter, SegTplSentinel >)dr::mp::segmented_view_iterator< BaseIter, SegTplIter, SegTplSentinel >
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1segmented__view__iterator.html b/doxygen/classdr_1_1mp_1_1segmented__view__iterator.html new file mode 100644 index 0000000000..7c8571eb1d --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1segmented__view__iterator.html @@ -0,0 +1,123 @@ + + + + + + + +Distributed Ranges: dr::mp::segmented_view_iterator< BaseIter, SegTplIter, SegTplSentinel > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::mp::segmented_view_iterator< BaseIter, SegTplIter, SegTplSentinel > Class Template Reference
    +
    +
    + + + + + + + + +

    +Public Types

    +using iterator_category = std::forward_iterator_tag
     
    +using difference_type = rng::iter_difference_t< SegTplIter >
     
    +using value_type = dr::remote_subrange< BaseIter >
     
    + + + + + + + + + + + +

    +Public Member Functions

    segmented_view_iterator (BaseIter base_begin, SegTplIter tpl_begin, SegTplSentinel tpl_end)
     
    +auto operator== (segmented_view_iterator other) const
     
    +auto & operator++ ()
     
    +auto operator++ (int)
     
    +auto operator* () const
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/views/segmented.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1span__group-members.html b/doxygen/classdr_1_1mp_1_1span__group-members.html new file mode 100644 index 0000000000..8d4185b3ae --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1span__group-members.html @@ -0,0 +1,102 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::mp::span_group< T, Memory > Member List
    +
    + + + + + diff --git a/doxygen/classdr_1_1mp_1_1span__group.html b/doxygen/classdr_1_1mp_1_1span__group.html new file mode 100644 index 0000000000..6dcc35013b --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1span__group.html @@ -0,0 +1,145 @@ + + + + + + + +Distributed Ranges: dr::mp::span_group< T, Memory > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::mp::span_group< T, Memory > Class Template Reference
    +
    +
    + + + + + + +

    +Public Types

    +using element_type = T
     
    +using memory_type = Memory
     
    + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    span_group (std::span< T > data, std::size_t rank, halo_tag tag)
     
    +void unpack ()
     
    +void pack ()
     
    +std::size_t buffer_size ()
     
    +std::size_t data_size ()
     
    +T * data_pointer ()
     
    +std::size_t rank ()
     
    +auto tag ()
     
    + + + + + + + + + +

    +Public Attributes

    +T * buffer = nullptr
     
    +std::size_t request_index = 0
     
    +bool receive = false
     
    +bool buffered = false
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/halo.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1span__halo-members.html b/doxygen/classdr_1_1mp_1_1span__halo-members.html new file mode 100644 index 0000000000..a684f1b09f --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1span__halo-members.html @@ -0,0 +1,107 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::mp::span_halo< T, Memory > Member List
    +
    +
    + +

    This is the complete list of members for dr::mp::span_halo< T, Memory >, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + +
    exchange() (defined in dr::mp::halo_impl< Group >)dr::mp::halo_impl< Group >inline
    exchange_begin()dr::mp::halo_impl< Group >inline
    exchange_finalize()dr::mp::halo_impl< Group >inline
    group_type typedef (defined in dr::mp::span_halo< T, Memory >)dr::mp::span_halo< T, Memory >
    halo_impl(const halo_impl &)=delete (defined in dr::mp::halo_impl< Group >)dr::mp::halo_impl< Group >
    halo_impl(communicator comm, const std::vector< Group > &owned_groups, const std::vector< Group > &halo_groups, const Memory &memory=Memory())dr::mp::halo_impl< Group >inline
    max (defined in dr::mp::halo_impl< Group >)dr::mp::halo_impl< Group >
    min (defined in dr::mp::halo_impl< Group >)dr::mp::halo_impl< Group >
    multiplies (defined in dr::mp::halo_impl< Group >)dr::mp::halo_impl< Group >
    operator=(const halo_impl &)=delete (defined in dr::mp::halo_impl< Group >)dr::mp::halo_impl< Group >
    plus (defined in dr::mp::halo_impl< Group >)dr::mp::halo_impl< Group >
    reduce_begin()dr::mp::halo_impl< Group >inline
    reduce_finalize(const auto &op)dr::mp::halo_impl< Group >inline
    reduce_finalize()dr::mp::halo_impl< Group >inline
    second (defined in dr::mp::halo_impl< Group >)dr::mp::halo_impl< Group >
    span_halo() (defined in dr::mp::span_halo< T, Memory >)dr::mp::span_halo< T, Memory >inline
    span_halo(communicator comm, T *data, std::size_t size, halo_bounds hb) (defined in dr::mp::span_halo< T, Memory >)dr::mp::span_halo< T, Memory >inline
    span_halo(communicator comm, std::span< T > span, halo_bounds hb) (defined in dr::mp::span_halo< T, Memory >)dr::mp::span_halo< T, Memory >inline
    ~halo_impl() (defined in dr::mp::halo_impl< Group >)dr::mp::halo_impl< Group >inline
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1span__halo.html b/doxygen/classdr_1_1mp_1_1span__halo.html new file mode 100644 index 0000000000..4fe793231c --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1span__halo.html @@ -0,0 +1,188 @@ + + + + + + + +Distributed Ranges: dr::mp::span_halo< T, Memory > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::mp::span_halo< T, Memory > Class Template Reference
    +
    +
    +
    +Inheritance diagram for dr::mp::span_halo< T, Memory >:
    +
    +
    Inheritance graph
    + + + + +
    [legend]
    +
    +Collaboration diagram for dr::mp::span_halo< T, Memory >:
    +
    +
    Collaboration graph
    + + + + + + + + + +
    [legend]
    + + + + + + + +

    +Public Types

    +using group_type = span_group< T, Memory >
     
    - Public Types inherited from dr::mp::halo_impl< Group >
    +using group_type = Group
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    span_halo (communicator comm, T *data, std::size_t size, halo_bounds hb)
     
    span_halo (communicator comm, std::span< T > span, halo_bounds hb)
     
    - Public Member Functions inherited from dr::mp::halo_impl< Group >
    halo_impl (const halo_impl &)=delete
     
    +halo_impl operator= (const halo_impl &)=delete
     
    halo_impl (communicator comm, const std::vector< Group > &owned_groups, const std::vector< Group > &halo_groups, const Memory &memory=Memory())
     halo constructor
     
    +void exchange_begin ()
     Begin a halo exchange.
     
    +void exchange_finalize ()
     Complete a halo exchange.
     
    +void exchange ()
     
    +void reduce_begin ()
     Begin a halo reduction.
     
    +void reduce_finalize (const auto &op)
     Complete a halo reduction.
     
    +void reduce_finalize ()
     Complete a halo reduction.
     
    + + + + + + + + + + + + +

    +Additional Inherited Members

    - Public Attributes inherited from dr::mp::halo_impl< Group >
    +struct dr::mp::halo_impl::second_op second
     
    +struct dr::mp::halo_impl::plus_op plus
     
    +struct dr::mp::halo_impl::max_op max
     
    +struct dr::mp::halo_impl::min_op min
     
    +struct dr::mp::halo_impl::multiplies_op multiplies
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/halo.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1span__halo__coll__graph.map b/doxygen/classdr_1_1mp_1_1span__halo__coll__graph.map new file mode 100644 index 0000000000..b6abf90739 --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1span__halo__coll__graph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/doxygen/classdr_1_1mp_1_1span__halo__coll__graph.md5 b/doxygen/classdr_1_1mp_1_1span__halo__coll__graph.md5 new file mode 100644 index 0000000000..845bb0bc03 --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1span__halo__coll__graph.md5 @@ -0,0 +1 @@ +2d937a4a14a2899f3fbd02508b45e8b4 \ No newline at end of file diff --git a/doxygen/classdr_1_1mp_1_1span__halo__coll__graph.png b/doxygen/classdr_1_1mp_1_1span__halo__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..8e3f5559ff2bf743743cf9e0a1a5f9ab2c364f8b GIT binary patch literal 32786 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 + + + diff --git a/doxygen/classdr_1_1mp_1_1span__halo__inherit__graph.md5 b/doxygen/classdr_1_1mp_1_1span__halo__inherit__graph.md5 new file mode 100644 index 0000000000..f2ac4a367f --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1span__halo__inherit__graph.md5 @@ -0,0 +1 @@ +e191ca51ccc1ede2129eb9b4b7bdbce4 \ No newline at end of file diff --git a/doxygen/classdr_1_1mp_1_1span__halo__inherit__graph.png b/doxygen/classdr_1_1mp_1_1span__halo__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..923eca519124d82469fbeee68a5142fe58bb284b GIT binary patch literal 7319 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 JDp4>A{0|2&6AAzT literal 0 HcmV?d00001 diff --git a/doxygen/classdr_1_1mp_1_1subrange-members.html b/doxygen/classdr_1_1mp_1_1subrange-members.html new file mode 100644 index 0000000000..e9ca1662ab --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1subrange-members.html @@ -0,0 +1,96 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::mp::subrange< DM > Member List
    +
    +
    + +

    This is the complete list of members for dr::mp::subrange< DM >, including all inherited members.

    + + + + + + + + + +
    begin() const (defined in dr::mp::subrange< DM >)dr::mp::subrange< DM >inline
    end() const (defined in dr::mp::subrange< DM >)dr::mp::subrange< DM >inline
    halo() const (defined in dr::mp::subrange< DM >)dr::mp::subrange< DM >inline
    iterator typedef (defined in dr::mp::subrange< DM >)dr::mp::subrange< DM >
    segments() const (defined in dr::mp::subrange< DM >)dr::mp::subrange< DM >inline
    size() (defined in dr::mp::subrange< DM >)dr::mp::subrange< DM >inline
    subrange(DM &dm, std::pair< std::size_t, std::size_t > row_rng, std::pair< std::size_t, std::size_t > col_rng) (defined in dr::mp::subrange< DM >)dr::mp::subrange< DM >inline
    value_type typedef (defined in dr::mp::subrange< DM >)dr::mp::subrange< DM >
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1subrange.html b/doxygen/classdr_1_1mp_1_1subrange.html new file mode 100644 index 0000000000..f7534f078f --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1subrange.html @@ -0,0 +1,141 @@ + + + + + + + +Distributed Ranges: dr::mp::subrange< DM > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::mp::subrange< DM > Class Template Reference
    +
    +
    +
    +Inheritance diagram for dr::mp::subrange< DM >:
    +
    +
    Inheritance graph
    + + + + +
    [legend]
    +
    +Collaboration diagram for dr::mp::subrange< DM >:
    +
    +
    Collaboration graph
    + + + + +
    [legend]
    + + + + + + +

    +Public Types

    +using iterator = subrange_iterator< DM >
     
    +using value_type = typename DM::value_type
     
    + + + + + + + + + + + + + +

    +Public Member Functions

    subrange (DM &dm, std::pair< std::size_t, std::size_t > row_rng, std::pair< std::size_t, std::size_t > col_rng)
     
    +iterator begin () const
     
    +iterator end () const
     
    +auto size ()
     
    +auto & halo () const
     
    +auto segments () const
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/containers/subrange.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1subrange__coll__graph.map b/doxygen/classdr_1_1mp_1_1subrange__coll__graph.map new file mode 100644 index 0000000000..675f21b645 --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1subrange__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/classdr_1_1mp_1_1subrange__coll__graph.md5 b/doxygen/classdr_1_1mp_1_1subrange__coll__graph.md5 new file mode 100644 index 0000000000..00f0da0fd9 --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1subrange__coll__graph.md5 @@ -0,0 +1 @@ +ca2bf6c4967947da75a33e5bc0ee9c63 \ No newline at end of file diff --git a/doxygen/classdr_1_1mp_1_1subrange__coll__graph.png b/doxygen/classdr_1_1mp_1_1subrange__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..2f26e8cc6d74c3b8ae01b5f9d8977757d2001cf7 GIT binary patch literal 7317 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

    JmHu=?04APSs%hukNr#~BgC{hJY6aao9I>QMH z3Tix@Fy<@PXOeGNC4_lL!d`vLkibA(W6O{UFtYkOHl~~WMY-MG_zMJ|K|0p9woBk6 zcMcB5>}~?0gA@;a@q!pUF**i@+tp>j;2b(iA z45E%L;7p?c;ymj}gNf^IuC1+Ig9vJ-)A&sy zZrHtJm$u)IZ{NIGTpP|ghLZ>sF@a^JU}a@JAF>|#cxST4i2(pbM^6unh9*^iO5eb9 zC`;b3(uT;<$w}w_eRPyRYb(KHVq#KKQ9-41b+Cx=p(hrvMBpmIl$-_SWrAjTny{4Ml5 zWfC(O8f5`AH|j#F@&;&_bMFR727pXMVq*ya1Gmc{xip$tw?s%Y%oynFw|)CY4CgQ2 zd&_vTi%y17(Jzyeu^`$BOw*z90tSb$+-m>#;AFi=aoACzOOHjQd?C4|elhpxJzOE5A6PkCXLbc~GfVJwYsJTUFK zah1~inie9W94DH3N`NvYRaJ+X_-4Yt0snCj|5t{Je0l2*&ZhJrtaV5-zC%ul25n$0 kROr9Y@!&Ym-T0EgIHp1A*Y?N*IA=uMQNE{Cs$d@aUr_b;RR910 literal 0 HcmV?d00001 diff --git a/doxygen/classdr_1_1mp_1_1subrange__inherit__graph.map b/doxygen/classdr_1_1mp_1_1subrange__inherit__graph.map new file mode 100644 index 0000000000..675f21b645 --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1subrange__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/classdr_1_1mp_1_1subrange__inherit__graph.md5 b/doxygen/classdr_1_1mp_1_1subrange__inherit__graph.md5 new file mode 100644 index 0000000000..00f0da0fd9 --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1subrange__inherit__graph.md5 @@ -0,0 +1 @@ +ca2bf6c4967947da75a33e5bc0ee9c63 \ No newline at end of file diff --git a/doxygen/classdr_1_1mp_1_1subrange__inherit__graph.png b/doxygen/classdr_1_1mp_1_1subrange__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..2f26e8cc6d74c3b8ae01b5f9d8977757d2001cf7 GIT binary patch literal 7317 zcmcIpcQ}^uyMOJy_s(A7RkE{JB9s-`GP29wdxRtzMIqT)nIU_RvNN(mME1yb?)Ue{ zxz4%H-zQhNp6Btr-*Mlc^^MWKr%HrRkB>kgi0-H<-G`s;@ZTR78@`V%VWMteTi#Vw zLR_J~vcBdgArOq}ca-FHy)!o7`RVG8Gj})JddD=fgyP-^l^*Ah#!n07d7fqYD$jHL zTBU=}t$q#7eZ5bmrt16#_D#s-o<<|1yLX1kbnf^^q($T6V(>n{#*QRJ?l%O9XY{wU z>@YiTeK)GN$-Fqe_~w$io$>YGlr4gm5Id~Z90@;i?CT~dW&Do*;zlS8*H&g&ASKCP zED64#yP21jyW(LyDo!S_BJS+FF>8seXJ&hgw-A+*;*v~@$TBE1r4@HIcPJL7HR+qG zv^6$S9olt9(q3gEg^{%CX|%M2oEn62o~%i|lhOWEq3*5O2EA!@ zb#(8-@A$$Iv%pU$xFS_wBH#3uEYwl}og3M`jEl$?dWl80JCykl;?}0a{m%xOLDa)KA z)Ho#F_kU|XAwu+wk0*O>&uOwHMqA&Ydne`fLWzxxlY?VOYP(TUR8*8BQ7t;UpsMOM zVkj65!)|--tNU^f+1|myN6xz`q+~iC9=Elf+kFHHtSRD+jvLqH3@)9wMzl@Hi z#K(%KyBXOPN2eG?!jgA!_Ag1B=cCh14H?-mtXEH8-}9rtQ;OX$m~xb3sfTSd1G>(n zEZQ)AFAjf<=Xq^TD{pOW@vVwkbrBlXxw4Xx-O0U=F8A=^LxDX`QPC8Ce}5QSUS8zD z;9&2-K-}}^&!eN)R#MIKZaGZY#knaqytPbAOH)Je$jH2hSv|J3bvURl9Xt(q16MCj z4|CwTmuegzUcDk``(SfsAej2V-2B?f>FJ2qe1NK(o14g!F&^LZ;|diPqcC{xrtPS8EK7?mv12Y(zm|~*W_P@*KFD#f-ovo~_oUc|@iPQ(2)l63@v9YqVv)6m?vXPM` zzkdBPBm~Xm%hQNxdb8JW{dswKu7$|Sb#`{TFScRPOSB=W}^^7Pr>>os;qL zaTsjLaMZ*QwXl0{M(fOsF{c1|jO#)R8YLyA99Pof(dJCg;GiDw(&A!kP|fGhZAsi( z2*jH=Z+7@wHL)&FD<3(*zN5Y^G4WNmG2K3nfWiXU;joTRnz z=TA&ai`?4AMs1IfhX|FTNB6B0zNB76!BMWH$YEJ-E+?~W;HMhryT8WYxSx!y$1{j6 z{QVmT?RM?@b;1`fUex*Q+r(}pFo+Qs78cgI{~1FGJ4Ah+gFdBOVP6&D#39B{VConDe99r4f4HqrZ3o0RgXH zzpm>0k&;yyq^PKvn4BDOeC&M*SkSF)WHfCdQ_-CfHhGKHI2pgC@ZJ|*QZaP zxLu%OU@w?mozeh8gk>v6wT+HaeEaszzdR!&166=Z%F3;9NimYJHA_BhC`Xk95&Z5Q zQ=Vozww9LG@$s>FdnD2EPCLoTk;~7zkb!{#u2IHrRz5y_1~F$PZ*Otviu41$Bq0RS zW`OqmWHoc=@Ngvo2M32;N~&SBqs5KU)MtfCBSV}lM>V1A1(TG~vcuh>v1Sj?xxh0g zZ*T9G*;%HFiVEb78|z4x`tTZ!EM+z_Jw3fb#^Tb_Jiz^tWPSrRt|T256>NYPis4GV zvXS(3OmYl+*(ajkuJrmhRm3n@{emJ}@;UwzaiA_%n)A>oVW9+?!Nk zH_YbLFmBJm!C}7C75`*kzw}YzXZkKXsjF1WwA+57SCof7*F;2Ko9vjhJgd<8J~P9B zL(Di-!w~2E?HMaJb`B>}_#6w5hzP6OZ9$wkGBVQD)3Yl>;+gA8A64~==jL?oQ|a5c znHalUCnxLpXD1|$Xu=e-TmFpZlTlGcXr_zW&%ATibg-+9=t{nddtIW=X` z5lx2bLA^dAW@*})8m9*mH9#&ZGxx`K=lr%U7TY4!?%c6I{8E+gY@2;c_#B=!{PL7D zT!HoX_e>H$Kfi&r;RE%_RI@-lZfKho~xPAM!WYDEF)Q9?=JK2x>Q+7{)&fM3>cx42rWAPBlDJkS+iK(eH4-E}b z%n4XIUFXLB=Iz^&_9&8*^SQ5nqp&yyH8uL3o=#2zCJmnPj~+dOPIw`^wX&iN=;i)r zgtMriAZu;S?sG-O;`hhPJ&7U?6W4u@cUYl?lFG`2(6Uq$n90a=Kn+DiMCjbRN1U9T zJnXmqRTZFs^~xs zd{6f3{3ab8oqd%aO-^_?=3CG}K>kAoIyr0UE=`L|^AA1Jb7o}SW8>mD5R_C@%0Qh? zZeKGp7=ds;0E`q2y2Q}R94}xbOTK^q{$NmSe&+Vj^(n{r);mjnR{<$Se%v-5r-C9F77R8)VeR(C#d*3$;MB=AFVP7X$l zQYer#nw{ULw~E)PG30VCbm6Z+Gq=lL?vm*0>YBHOzB06HhAegc!2Tc5pkg|euM(r z!jv_v8Z}5pc~etn{ZEF&1@S-!?7X~qP2qLw9g^xI5$0 zYymARAR`7O97ijR9!n$C1&sAFDJhIZ<~aDfm%Dq%Yu*Q>0GCo;TUnn!lcx%qsX+T& z&B+;CjlTpv02O9=vbQo>>%!7>zIV5p#!pTT5nZ4+-_zi=9jVLL3A0C$x5viBt$GYE zm09PI8qxJ$>l@Qm_7q?0>Ry8U@$vB~Yz$0$_f8WH4Q;H_R*PQ5juh2t@xKXy=sqU0 ztG=qJ5ccu&8wE%?J_Yen6?7Fyl@7RN?ci|t^z?Ljds}O}ai18p;jM@Hi^Zw%3ne|h zIu{q$^5UXAJct<#2p_#R#s3ke%nn=xjmRb|D|`AUKU0#!l!8m+8UizzkdUyztT|A` z@5r&<|Kw@TQ_c9n8A;nU!K%mKhKicMUn7qpK3pGnkUXQ>ns|18>;|2xx)MRJvg!uh zNjf|Li0nD1HFDFa3wkaa{N>A+qyUuWozJP#ZaJjX%vy?sO=QYl>CuTfGZHgNVrFYc z1HN1Rovb+iTlu|elRAfP@?CaPIS68CxiTj)+LGW|y8l>R!boy1Y-~kvu3}k@Ml;OF zU{Q^%$2Z%lvd3Vxnm3to2_;BPtV zz4>0~H|J2?4~pqsjG{Q=FruXYy(bu9+2JuEt=erJE#^EHmgdOU|1+id@2&g)eoW-l ziWAVpYe9Sq%Sn7+TH)U-RqbX(<8Bwj&8p4*{f=+%q=M|cKPA$NzwirLstYq&A`ffu zMAUgA%!Rj~h{R^U0LAQC%1;@@4-Dii(z>`q+xh3-tE)hbgfQqwcj_@<`@rGRpYV{@a?xK&<`w z(+X|~{Cjt~MLX#51eFyot@ngpUS5}VN^Gq#)a?BHsM`6!hT>TR0t$>Alt!-e+@uHe z5(eW}{TSjM3rEK|VXH0xXKL`U;vh2uFHdY6_rFP%S5_|d-}c@?#Kgq#S)%TMmDkqO z8~-HK+uMs25eWyyad2=Txy3O)#A>O{L#d{rp`@=*ef|3Nh1J#kSIsW-GTuHutg^B! zfG4=b#F0vD@?Zo_gDyM}a!;NVsr$mrX_4j#7zZnLtcAUO%+8LhwEr>bojZ35ii+A` zUJDx=#g?`^3#~o<{fhGPXpWAKq}0^dR#sNkqV##so;`Eh`YEBtK`t&SX$e$!Ui(vQ z-al+;NETwK^-Ukt0CPzCuP z?<|5GZe8k5uz36!3z%|w**cE?7CtQc;50a#Ht;8I;JUzkQ(j(Py1Kc+kOwCm2$*iz zM#sjscgE5zuCC$$4#F6VmseL-EFcXU8Xs47bw&Q&++?_YZkP70zrP*Alc@K%{n(I5 zQp*b3bTOAMAOdBqAOrdM`A^)PoSbrehJmiqt6*`PnwoG)NV+>>C@g^Q z%bHH{B_t&HRx6<*plmG;)`q=L4|tnS*ZF0Ft}ZW7cKQ6`f|U}#!r_M?Rc7GH3eEYd z>{UoZgA};jn1cg%2-Z|{T{peEgfoi}N+WkE{b!Ci#t%r~> z8?rH3XLECenVH#tQjn3+Q434U(7=mRd&f}_S}0+YB4kDkg#@q0L4}3GIjTCkx?_A- zBEwr!&~zw6QSP~EgtA?Ttg^BM(9MOf8H6n{+uGWWtIEpC`kX2)=n*Oj%<-^G7zj*s zv>NBx=MW9R1L%kyaPAA>BG%@cWzB5YhO%Kva1exy;-n}I0?DZ`?7oeYItMun8(yHO zrA2~)LmaNb<)C-{Z6z!t@b9@T2?>d=o*t`&1RZF`^WETJghmC+e)UYg77OSf^YyX9I=_E{fft7c zjIx1@&|j-%iAN*O!l zS!w%SrN8#jX=8o;gUfuA_s&9yN;*hK+S|S&A98Yrn}dStzI*{StojULWY_RbB>;fO z71|t}fIL@HHpD76Ha2{ZegAC@28rIdfxh!sL5QC}3{o#4Oa$M2736)vj|95`iRn)s z>gr-TI5>Fw`Q_Br(L%#U>GDNnW|}p0{|0Z57%GUD2{>(;n4pH>t>dfTznuwVmug?$ zdS}6BV2PH0|F(n9zKkL z{;KJjgVYu2v91e2-9lRgfts3H%XGB^D=BUk==BJN*3^>HQs?T;Q{k7r){`LPpzuLZ z<6>Z7e9X-)Buom<`~F363%U-P*vWc+Xy_$NO+f=P#MTQRLb%tdsY`n+{o)?$lt

    JmHu=?04APSs%hukNr#~BgC{hJY6aao9I>QMH z3Tix@Fy<@PXOeGNC4_lL!d`vLkibA(W6O{UFtYkOHl~~WMY-MG_zMJ|K|0p9woBk6 zcMcB5>}~?0gA@;a@q!pUF**i@+tp>j;2b(iA z45E%L;7p?c;ymj}gNf^IuC1+Ig9vJ-)A&sy zZrHtJm$u)IZ{NIGTpP|ghLZ>sF@a^JU}a@JAF>|#cxST4i2(pbM^6unh9*^iO5eb9 zC`;b3(uT;<$w}w_eRPyRYb(KHVq#KKQ9-41b+Cx=p(hrvMBpmIl$-_SWrAjTny{4Ml5 zWfC(O8f5`AH|j#F@&;&_bMFR727pXMVq*ya1Gmc{xip$tw?s%Y%oynFw|)CY4CgQ2 zd&_vTi%y17(Jzyeu^`$BOw*z90tSb$+-m>#;AFi=aoACzOOHjQd?C4|elhpxJzOE5A6PkCXLbc~GfVJwYsJTUFK zah1~inie9W94DH3N`NvYRaJ+X_-4Yt0snCj|5t{Je0l2*&ZhJrtaV5-zC%ul25n$0 kROr9Y@!&Ym-T0EgIHp1A*Y?N*IA=uMQNE{Cs$d@aUr_b;RR910 literal 0 HcmV?d00001 diff --git a/doxygen/classdr_1_1mp_1_1subrange__iterator-members.html b/doxygen/classdr_1_1mp_1_1subrange__iterator-members.html new file mode 100644 index 0000000000..dc4d2de804 --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1subrange__iterator-members.html @@ -0,0 +1,114 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::mp::subrange_iterator< DM > Member List
    +
    +
    + +

    This is the complete list of members for dr::mp::subrange_iterator< DM >, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    difference_type typedef (defined in dr::mp::subrange_iterator< DM >)dr::mp::subrange_iterator< DM >
    find_dm_offset() const (defined in dr::mp::subrange_iterator< DM >)dr::mp::subrange_iterator< DM >inline
    halo() (defined in dr::mp::subrange_iterator< DM >)dr::mp::subrange_iterator< DM >inline
    is_local() (defined in dr::mp::subrange_iterator< DM >)dr::mp::subrange_iterator< DM >inline
    operator!= (defined in dr::mp::subrange_iterator< DM >)dr::mp::subrange_iterator< DM >friend
    operator!= (defined in dr::mp::subrange_iterator< DM >)dr::mp::subrange_iterator< DM >friend
    operator*() const (defined in dr::mp::subrange_iterator< DM >)dr::mp::subrange_iterator< DM >inline
    operator+(difference_type n) const (defined in dr::mp::subrange_iterator< DM >)dr::mp::subrange_iterator< DM >inline
    operator+ (defined in dr::mp::subrange_iterator< DM >)dr::mp::subrange_iterator< DM >friend
    operator++() (defined in dr::mp::subrange_iterator< DM >)dr::mp::subrange_iterator< DM >inline
    operator++(int) (defined in dr::mp::subrange_iterator< DM >)dr::mp::subrange_iterator< DM >inline
    operator+=(difference_type n) (defined in dr::mp::subrange_iterator< DM >)dr::mp::subrange_iterator< DM >inline
    operator-(const subrange_iterator &other) const noexcept (defined in dr::mp::subrange_iterator< DM >)dr::mp::subrange_iterator< DM >inline
    operator-(difference_type n) const (defined in dr::mp::subrange_iterator< DM >)dr::mp::subrange_iterator< DM >inline
    operator--() (defined in dr::mp::subrange_iterator< DM >)dr::mp::subrange_iterator< DM >inline
    operator--(int) (defined in dr::mp::subrange_iterator< DM >)dr::mp::subrange_iterator< DM >inline
    operator-=(difference_type n) (defined in dr::mp::subrange_iterator< DM >)dr::mp::subrange_iterator< DM >inline
    operator<=>(const subrange_iterator &other) const noexcept (defined in dr::mp::subrange_iterator< DM >)dr::mp::subrange_iterator< DM >inline
    operator== (defined in dr::mp::subrange_iterator< DM >)dr::mp::subrange_iterator< DM >friend
    operator== (defined in dr::mp::subrange_iterator< DM >)dr::mp::subrange_iterator< DM >friend
    operator[](int n) (defined in dr::mp::subrange_iterator< DM >)dr::mp::subrange_iterator< DM >inline
    operator[](std::pair< int, int > p) (defined in dr::mp::subrange_iterator< DM >)dr::mp::subrange_iterator< DM >inline
    segments() (defined in dr::mp::subrange_iterator< DM >)dr::mp::subrange_iterator< DM >inline
    subrange_iterator() (defined in dr::mp::subrange_iterator< DM >)dr::mp::subrange_iterator< DM >inline
    subrange_iterator(DM *dm, std::pair< std::size_t, std::size_t > row_rng, std::pair< std::size_t, std::size_t > col_rng, difference_type index=0) noexcept (defined in dr::mp::subrange_iterator< DM >)dr::mp::subrange_iterator< DM >inline
    value_type typedef (defined in dr::mp::subrange_iterator< DM >)dr::mp::subrange_iterator< DM >
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1subrange__iterator.html b/doxygen/classdr_1_1mp_1_1subrange__iterator.html new file mode 100644 index 0000000000..d9b3bd162c --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1subrange__iterator.html @@ -0,0 +1,178 @@ + + + + + + + +Distributed Ranges: dr::mp::subrange_iterator< DM > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::mp::subrange_iterator< DM > Class Template Reference
    +
    +
    + + + + + + +

    +Public Types

    +using value_type = typename DM::value_type
     
    +using difference_type = typename DM::difference_type
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    subrange_iterator (DM *dm, std::pair< std::size_t, std::size_t > row_rng, std::pair< std::size_t, std::size_t > col_rng, difference_type index=0) noexcept
     
    +value_type & operator* () const
     
    +dm_row< value_type > operator[] (int n)
     
    +value_type & operator[] (std::pair< int, int > p)
     
    +auto operator<=> (const subrange_iterator &other) const noexcept
     
    +auto & operator-= (difference_type n)
     
    +auto & operator+= (difference_type n)
     
    +difference_type operator- (const subrange_iterator &other) const noexcept
     
    +auto & operator++ ()
     
    +auto & operator-- ()
     
    +auto operator++ (int)
     
    +auto operator-- (int)
     
    +auto operator+ (difference_type n) const
     
    +auto operator- (difference_type n) const
     
    +auto & halo ()
     
    +auto segments ()
     
    +bool is_local ()
     
    +std::size_t find_dm_offset () const
     
    + + + + + + + + + + + +

    +Friends

    +bool operator== (subrange_iterator &first, subrange_iterator &second)
     
    +bool operator!= (subrange_iterator &first, subrange_iterator &second)
     
    +bool operator== (subrange_iterator first, subrange_iterator second)
     
    +bool operator!= (subrange_iterator first, subrange_iterator second)
     
    +auto operator+ (difference_type n, const subrange_iterator &other)
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/containers/subrange.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1unstructured__halo-members.html b/doxygen/classdr_1_1mp_1_1unstructured__halo-members.html new file mode 100644 index 0000000000..c9fdbac5b2 --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1unstructured__halo-members.html @@ -0,0 +1,106 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::mp::unstructured_halo< T, Memory > Member List
    +
    +
    + +

    This is the complete list of members for dr::mp::unstructured_halo< T, Memory >, including all inherited members.

    + + + + + + + + + + + + + + + + + + + +
    exchange() (defined in dr::mp::halo_impl< Group >)dr::mp::halo_impl< Group >inline
    exchange_begin()dr::mp::halo_impl< Group >inline
    exchange_finalize()dr::mp::halo_impl< Group >inline
    group_type typedef (defined in dr::mp::unstructured_halo< T, Memory >)dr::mp::unstructured_halo< T, Memory >
    halo_impl(const halo_impl &)=delete (defined in dr::mp::halo_impl< Group >)dr::mp::halo_impl< Group >
    halo_impl(communicator comm, const std::vector< Group > &owned_groups, const std::vector< Group > &halo_groups, const Memory &memory=Memory())dr::mp::halo_impl< Group >inline
    index_map typedef (defined in dr::mp::unstructured_halo< T, Memory >)dr::mp::unstructured_halo< T, Memory >
    max (defined in dr::mp::halo_impl< Group >)dr::mp::halo_impl< Group >
    min (defined in dr::mp::halo_impl< Group >)dr::mp::halo_impl< Group >
    multiplies (defined in dr::mp::halo_impl< Group >)dr::mp::halo_impl< Group >
    operator=(const halo_impl &)=delete (defined in dr::mp::halo_impl< Group >)dr::mp::halo_impl< Group >
    plus (defined in dr::mp::halo_impl< Group >)dr::mp::halo_impl< Group >
    reduce_begin()dr::mp::halo_impl< Group >inline
    reduce_finalize(const auto &op)dr::mp::halo_impl< Group >inline
    reduce_finalize()dr::mp::halo_impl< Group >inline
    second (defined in dr::mp::halo_impl< Group >)dr::mp::halo_impl< Group >
    unstructured_halo(communicator comm, T *data, const std::vector< index_map > &owned, const std::vector< index_map > &halo, const Memory &memory=Memory())dr::mp::unstructured_halo< T, Memory >inline
    ~halo_impl() (defined in dr::mp::halo_impl< Group >)dr::mp::halo_impl< Group >inline
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1unstructured__halo.html b/doxygen/classdr_1_1mp_1_1unstructured__halo.html new file mode 100644 index 0000000000..3863b0b73b --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1unstructured__halo.html @@ -0,0 +1,245 @@ + + + + + + + +Distributed Ranges: dr::mp::unstructured_halo< T, Memory > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::mp::unstructured_halo< T, Memory > Class Template Reference
    +
    +
    +
    +Inheritance diagram for dr::mp::unstructured_halo< T, Memory >:
    +
    +
    Inheritance graph
    + + + + +
    [legend]
    +
    +Collaboration diagram for dr::mp::unstructured_halo< T, Memory >:
    +
    +
    Collaboration graph
    + + + + + + + + + +
    [legend]
    + + + + + + + + + +

    +Public Types

    +using group_type = index_group< T, Memory >
     
    +using index_map = std::pair< std::size_t, std::vector< std::size_t > >
     
    - Public Types inherited from dr::mp::halo_impl< Group >
    +using group_type = Group
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

     unstructured_halo (communicator comm, T *data, const std::vector< index_map > &owned, const std::vector< index_map > &halo, const Memory &memory=Memory())
     
    - Public Member Functions inherited from dr::mp::halo_impl< Group >
    halo_impl (const halo_impl &)=delete
     
    +halo_impl operator= (const halo_impl &)=delete
     
    halo_impl (communicator comm, const std::vector< Group > &owned_groups, const std::vector< Group > &halo_groups, const Memory &memory=Memory())
     halo constructor
     
    +void exchange_begin ()
     Begin a halo exchange.
     
    +void exchange_finalize ()
     Complete a halo exchange.
     
    +void exchange ()
     
    +void reduce_begin ()
     Begin a halo reduction.
     
    +void reduce_finalize (const auto &op)
     Complete a halo reduction.
     
    +void reduce_finalize ()
     Complete a halo reduction.
     
    + + + + + + + + + + + + +

    +Additional Inherited Members

    - Public Attributes inherited from dr::mp::halo_impl< Group >
    +struct dr::mp::halo_impl::second_op second
     
    +struct dr::mp::halo_impl::plus_op plus
     
    +struct dr::mp::halo_impl::max_op max
     
    +struct dr::mp::halo_impl::min_op min
     
    +struct dr::mp::halo_impl::multiplies_op multiplies
     
    +

    Constructor & Destructor Documentation

    + +

    ◆ unstructured_halo()

    + +
    +
    +
    +template<typename T , typename Memory = default_memory<T>>
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    dr::mp::unstructured_halo< T, Memory >::unstructured_halo (communicator comm,
    T * data,
    const std::vector< index_map > & owned,
    const std::vector< index_map > & halo,
    const Memory & memory = Memory() 
    )
    +
    +inline
    +
    +

    Constructor

    + +
    +
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/halo.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1unstructured__halo__coll__graph.map b/doxygen/classdr_1_1mp_1_1unstructured__halo__coll__graph.map new file mode 100644 index 0000000000..a16386e608 --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1unstructured__halo__coll__graph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/doxygen/classdr_1_1mp_1_1unstructured__halo__coll__graph.md5 b/doxygen/classdr_1_1mp_1_1unstructured__halo__coll__graph.md5 new file mode 100644 index 0000000000..2ad17e6bea --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1unstructured__halo__coll__graph.md5 @@ -0,0 +1 @@ +01006e6dc3c5e33fed009d8dc94f8f31 \ No newline at end of file diff --git a/doxygen/classdr_1_1mp_1_1unstructured__halo__coll__graph.png b/doxygen/classdr_1_1mp_1_1unstructured__halo__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..d8351a44cf70905ebf281f38328c56dff4a0d36e GIT binary patch literal 34267 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 OqoSm#_~wYoo&NznBxrH~ literal 0 HcmV?d00001 diff --git a/doxygen/classdr_1_1mp_1_1unstructured__halo__inherit__graph.map b/doxygen/classdr_1_1mp_1_1unstructured__halo__inherit__graph.map new file mode 100644 index 0000000000..331a3da170 --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1unstructured__halo__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/classdr_1_1mp_1_1unstructured__halo__inherit__graph.md5 b/doxygen/classdr_1_1mp_1_1unstructured__halo__inherit__graph.md5 new file mode 100644 index 0000000000..624ccf6694 --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1unstructured__halo__inherit__graph.md5 @@ -0,0 +1 @@ +9118bfec060224283f3f38383b3c1acc \ No newline at end of file diff --git a/doxygen/classdr_1_1mp_1_1unstructured__halo__inherit__graph.png b/doxygen/classdr_1_1mp_1_1unstructured__halo__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..cd95c5f1a6a596b1a6affb0e029d61016b0a0256 GIT binary patch literal 8301 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 + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::mp::views::enumerate_adapter_closure Member List
    +
    +
    + +

    This is the complete list of members for dr::mp::views::enumerate_adapter_closure, including all inherited members.

    + + + +
    operator()(R &&r) const (defined in dr::mp::views::enumerate_adapter_closure)dr::mp::views::enumerate_adapter_closureinline
    operator| (defined in dr::mp::views::enumerate_adapter_closure)dr::mp::views::enumerate_adapter_closurefriend
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1views_1_1enumerate__adapter__closure.html b/doxygen/classdr_1_1mp_1_1views_1_1enumerate__adapter__closure.html new file mode 100644 index 0000000000..cbfb82c8c8 --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1views_1_1enumerate__adapter__closure.html @@ -0,0 +1,108 @@ + + + + + + + +Distributed Ranges: dr::mp::views::enumerate_adapter_closure Class Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::mp::views::enumerate_adapter_closure Class Reference
    +
    +
    + + + + + +

    +Public Member Functions

    +template<rng::viewable_range R>
    +requires (rng::sized_range<R>)
    auto operator() (R &&r) const
     
    + + + + +

    +Friends

    +template<rng::viewable_range R>
    auto operator| (R &&r, const enumerate_adapter_closure &closure)
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/views/enumerate.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1views_1_1enumerate__fn__-members.html b/doxygen/classdr_1_1mp_1_1views_1_1enumerate__fn__-members.html new file mode 100644 index 0000000000..fb5f9acf79 --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1views_1_1enumerate__fn__-members.html @@ -0,0 +1,90 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::mp::views::enumerate_fn_ Member List
    +
    +
    + +

    This is the complete list of members for dr::mp::views::enumerate_fn_, including all inherited members.

    + + + +
    enumerate() const (defined in dr::mp::views::enumerate_fn_)dr::mp::views::enumerate_fn_inline
    operator()(R &&r) const (defined in dr::mp::views::enumerate_fn_)dr::mp::views::enumerate_fn_inline
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1views_1_1enumerate__fn__.html b/doxygen/classdr_1_1mp_1_1views_1_1enumerate__fn__.html new file mode 100644 index 0000000000..7201fc0807 --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1views_1_1enumerate__fn__.html @@ -0,0 +1,102 @@ + + + + + + + +Distributed Ranges: dr::mp::views::enumerate_fn_ Class Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::mp::views::enumerate_fn_ Class Reference
    +
    +
    + + + + + + + +

    +Public Member Functions

    +template<rng::viewable_range R>
    constexpr auto operator() (R &&r) const
     
    +auto enumerate () const
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/views/enumerate.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1views_1_1mdspan__adapter__closure-members.html b/doxygen/classdr_1_1mp_1_1views_1_1mdspan__adapter__closure-members.html new file mode 100644 index 0000000000..6a4aa7079c --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1views_1_1mdspan__adapter__closure-members.html @@ -0,0 +1,92 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::mp::views::mdspan_adapter_closure< Rank > Member List
    +
    +
    + +

    This is the complete list of members for dr::mp::views::mdspan_adapter_closure< Rank >, including all inherited members.

    + + + + + +
    mdspan_adapter_closure(dr::__detail::dr_extents< Rank > full_shape, dr::__detail::dr_extents< Rank > tile_shape) (defined in dr::mp::views::mdspan_adapter_closure< Rank >)dr::mp::views::mdspan_adapter_closure< Rank >inline
    mdspan_adapter_closure(dr::__detail::dr_extents< Rank > full_shape) (defined in dr::mp::views::mdspan_adapter_closure< Rank >)dr::mp::views::mdspan_adapter_closure< Rank >inline
    operator()(R &&r) const (defined in dr::mp::views::mdspan_adapter_closure< Rank >)dr::mp::views::mdspan_adapter_closure< Rank >inline
    operator| (defined in dr::mp::views::mdspan_adapter_closure< Rank >)dr::mp::views::mdspan_adapter_closure< Rank >friend
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1views_1_1mdspan__adapter__closure.html b/doxygen/classdr_1_1mp_1_1views_1_1mdspan__adapter__closure.html new file mode 100644 index 0000000000..bf9fb2c7f6 --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1views_1_1mdspan__adapter__closure.html @@ -0,0 +1,113 @@ + + + + + + + +Distributed Ranges: dr::mp::views::mdspan_adapter_closure< Rank > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::mp::views::mdspan_adapter_closure< Rank > Class Template Reference
    +
    +
    + + + + + + + + + +

    +Public Member Functions

    mdspan_adapter_closure (dr::__detail::dr_extents< Rank > full_shape, dr::__detail::dr_extents< Rank > tile_shape)
     
    mdspan_adapter_closure (dr::__detail::dr_extents< Rank > full_shape)
     
    +template<rng::viewable_range R>
    auto operator() (R &&r) const
     
    + + + + +

    +Friends

    +template<rng::viewable_range R>
    auto operator| (R &&r, const mdspan_adapter_closure &closure)
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/views/mdspan_view.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1views_1_1mdspan__fn__-members.html b/doxygen/classdr_1_1mp_1_1views_1_1mdspan__fn__-members.html new file mode 100644 index 0000000000..9c070211ad --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1views_1_1mdspan__fn__-members.html @@ -0,0 +1,92 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::mp::views::mdspan_fn_ Member List
    +
    +
    + +

    This is the complete list of members for dr::mp::views::mdspan_fn_, including all inherited members.

    + + + + + +
    operator()(R &&r, Shape &&full_shape, Shape &&tile_shape) const (defined in dr::mp::views::mdspan_fn_)dr::mp::views::mdspan_fn_inline
    operator()(R &&r, Shape &&full_shape) const (defined in dr::mp::views::mdspan_fn_)dr::mp::views::mdspan_fn_inline
    operator()(Shape &&full_shape, Shape &&tile_shape) const (defined in dr::mp::views::mdspan_fn_)dr::mp::views::mdspan_fn_inline
    operator()(Shape &&full_shape) const (defined in dr::mp::views::mdspan_fn_)dr::mp::views::mdspan_fn_inline
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1views_1_1mdspan__fn__.html b/doxygen/classdr_1_1mp_1_1views_1_1mdspan__fn__.html new file mode 100644 index 0000000000..35da6e6108 --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1views_1_1mdspan__fn__.html @@ -0,0 +1,111 @@ + + + + + + + +Distributed Ranges: dr::mp::views::mdspan_fn_ Class Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::mp::views::mdspan_fn_ Class Reference
    +
    +
    + + + + + + + + + + + + + + +

    +Public Member Functions

    +template<rng::viewable_range R, typename Shape >
    auto operator() (R &&r, Shape &&full_shape, Shape &&tile_shape) const
     
    +template<rng::viewable_range R, typename Shape >
    auto operator() (R &&r, Shape &&full_shape) const
     
    +template<typename Shape >
    auto operator() (Shape &&full_shape, Shape &&tile_shape) const
     
    +template<typename Shape >
    auto operator() (Shape &&full_shape) const
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/views/mdspan_view.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1views_1_1submdspan__adapter__closure-members.html b/doxygen/classdr_1_1mp_1_1views_1_1submdspan__adapter__closure-members.html new file mode 100644 index 0000000000..327fb49c47 --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1views_1_1submdspan__adapter__closure-members.html @@ -0,0 +1,91 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::mp::views::submdspan_adapter_closure< Extents > Member List
    +
    +
    + +

    This is the complete list of members for dr::mp::views::submdspan_adapter_closure< Extents >, including all inherited members.

    + + + + +
    operator()(R &&r) const (defined in dr::mp::views::submdspan_adapter_closure< Extents >)dr::mp::views::submdspan_adapter_closure< Extents >inline
    operator| (defined in dr::mp::views::submdspan_adapter_closure< Extents >)dr::mp::views::submdspan_adapter_closure< Extents >friend
    submdspan_adapter_closure(Extents slice_starts, Extents slice_ends) (defined in dr::mp::views::submdspan_adapter_closure< Extents >)dr::mp::views::submdspan_adapter_closure< Extents >inline
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1views_1_1submdspan__adapter__closure.html b/doxygen/classdr_1_1mp_1_1views_1_1submdspan__adapter__closure.html new file mode 100644 index 0000000000..15390cd014 --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1views_1_1submdspan__adapter__closure.html @@ -0,0 +1,110 @@ + + + + + + + +Distributed Ranges: dr::mp::views::submdspan_adapter_closure< Extents > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::mp::views::submdspan_adapter_closure< Extents > Class Template Reference
    +
    +
    + + + + + + + +

    +Public Member Functions

    submdspan_adapter_closure (Extents slice_starts, Extents slice_ends)
     
    +template<rng::viewable_range R>
    auto operator() (R &&r) const
     
    + + + + +

    +Friends

    +template<rng::viewable_range R>
    auto operator| (R &&r, const submdspan_adapter_closure &closure)
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/views/submdspan_view.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1views_1_1submdspan__fn__-members.html b/doxygen/classdr_1_1mp_1_1views_1_1submdspan__fn__-members.html new file mode 100644 index 0000000000..d8b2f540f3 --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1views_1_1submdspan__fn__-members.html @@ -0,0 +1,90 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::mp::views::submdspan_fn_ Member List
    +
    +
    + +

    This is the complete list of members for dr::mp::views::submdspan_fn_, including all inherited members.

    + + + +
    operator()(R r, Extents &&slice_starts, Extents &&slice_ends) const (defined in dr::mp::views::submdspan_fn_)dr::mp::views::submdspan_fn_inline
    operator()(Extents &&slice_starts, Extents &&slice_ends) const (defined in dr::mp::views::submdspan_fn_)dr::mp::views::submdspan_fn_inline
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1views_1_1submdspan__fn__.html b/doxygen/classdr_1_1mp_1_1views_1_1submdspan__fn__.html new file mode 100644 index 0000000000..8ff4eafeb3 --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1views_1_1submdspan__fn__.html @@ -0,0 +1,103 @@ + + + + + + + +Distributed Ranges: dr::mp::views::submdspan_fn_ Class Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::mp::views::submdspan_fn_ Class Reference
    +
    +
    + + + + + + + + +

    +Public Member Functions

    +template<is_mdspan_view R, typename Extents >
    auto operator() (R r, Extents &&slice_starts, Extents &&slice_ends) const
     
    +template<typename Extents >
    auto operator() (Extents &&slice_starts, Extents &&slice_ends) const
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/views/submdspan_view.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1zip__iterator-members.html b/doxygen/classdr_1_1mp_1_1zip__iterator-members.html new file mode 100644 index 0000000000..5f68691a2a --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1zip__iterator-members.html @@ -0,0 +1,110 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::mp::zip_iterator< RngIter, BaseIters > Member List
    +
    +
    + +

    This is the complete list of members for dr::mp::zip_iterator< RngIter, BaseIters >, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + + +
    difference_type typedef (defined in dr::mp::zip_iterator< RngIter, BaseIters >)dr::mp::zip_iterator< RngIter, BaseIters >
    iterator_category typedef (defined in dr::mp::zip_iterator< RngIter, BaseIters >)dr::mp::zip_iterator< RngIter, BaseIters >
    local() const (defined in dr::mp::zip_iterator< RngIter, BaseIters >)dr::mp::zip_iterator< RngIter, BaseIters >inline
    operator*() const (defined in dr::mp::zip_iterator< RngIter, BaseIters >)dr::mp::zip_iterator< RngIter, BaseIters >inline
    operator+(difference_type n) const (defined in dr::mp::zip_iterator< RngIter, BaseIters >)dr::mp::zip_iterator< RngIter, BaseIters >inline
    operator+ (defined in dr::mp::zip_iterator< RngIter, BaseIters >)dr::mp::zip_iterator< RngIter, BaseIters >friend
    operator++() (defined in dr::mp::zip_iterator< RngIter, BaseIters >)dr::mp::zip_iterator< RngIter, BaseIters >inline
    operator++(int) (defined in dr::mp::zip_iterator< RngIter, BaseIters >)dr::mp::zip_iterator< RngIter, BaseIters >inline
    operator+=(difference_type n) (defined in dr::mp::zip_iterator< RngIter, BaseIters >)dr::mp::zip_iterator< RngIter, BaseIters >inline
    operator-(difference_type n) const (defined in dr::mp::zip_iterator< RngIter, BaseIters >)dr::mp::zip_iterator< RngIter, BaseIters >inline
    operator-(zip_iterator other) const (defined in dr::mp::zip_iterator< RngIter, BaseIters >)dr::mp::zip_iterator< RngIter, BaseIters >inline
    operator--() (defined in dr::mp::zip_iterator< RngIter, BaseIters >)dr::mp::zip_iterator< RngIter, BaseIters >inline
    operator--(int) (defined in dr::mp::zip_iterator< RngIter, BaseIters >)dr::mp::zip_iterator< RngIter, BaseIters >inline
    operator-=(difference_type n) (defined in dr::mp::zip_iterator< RngIter, BaseIters >)dr::mp::zip_iterator< RngIter, BaseIters >inline
    operator<=>(zip_iterator other) const (defined in dr::mp::zip_iterator< RngIter, BaseIters >)dr::mp::zip_iterator< RngIter, BaseIters >inline
    operator==(zip_iterator other) const (defined in dr::mp::zip_iterator< RngIter, BaseIters >)dr::mp::zip_iterator< RngIter, BaseIters >inline
    operator[](difference_type n) const (defined in dr::mp::zip_iterator< RngIter, BaseIters >)dr::mp::zip_iterator< RngIter, BaseIters >inline
    rank() const (defined in dr::mp::zip_iterator< RngIter, BaseIters >)dr::mp::zip_iterator< RngIter, BaseIters >inline
    segments() const (defined in dr::mp::zip_iterator< RngIter, BaseIters >)dr::mp::zip_iterator< RngIter, BaseIters >inline
    value_type typedef (defined in dr::mp::zip_iterator< RngIter, BaseIters >)dr::mp::zip_iterator< RngIter, BaseIters >
    zip_iterator() (defined in dr::mp::zip_iterator< RngIter, BaseIters >)dr::mp::zip_iterator< RngIter, BaseIters >inline
    zip_iterator(RngIter rng_iter, BaseIters... base_iters) (defined in dr::mp::zip_iterator< RngIter, BaseIters >)dr::mp::zip_iterator< RngIter, BaseIters >inline
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1zip__iterator.html b/doxygen/classdr_1_1mp_1_1zip__iterator.html new file mode 100644 index 0000000000..8dda06d61a --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1zip__iterator.html @@ -0,0 +1,166 @@ + + + + + + + +Distributed Ranges: dr::mp::zip_iterator< RngIter, BaseIters > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::mp::zip_iterator< RngIter, BaseIters > Class Template Reference
    +
    +
    + + + + + + + + +

    +Public Types

    +using value_type = rng::iter_value_t< RngIter >
     
    +using difference_type = rng::iter_difference_t< RngIter >
     
    +using iterator_category = std::random_access_iterator_tag
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    zip_iterator (RngIter rng_iter, BaseIters... base_iters)
     
    +auto operator+ (difference_type n) const
     
    +auto operator- (difference_type n) const
     
    +auto operator- (zip_iterator other) const
     
    +auto & operator+= (difference_type n)
     
    +auto & operator-= (difference_type n)
     
    +auto & operator++ ()
     
    +auto operator++ (int)
     
    +auto & operator-- ()
     
    +auto operator-- (int)
     
    +bool operator== (zip_iterator other) const
     
    +auto operator<=> (zip_iterator other) const
     
    +auto operator* () const
     
    +auto operator[] (difference_type n) const
     
    +auto segments () const
     
    +auto rank () const
     
    +auto local () const
     
    + + + +

    +Friends

    +auto operator+ (difference_type n, const zip_iterator &other)
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/views/zip.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1zip__view-members.html b/doxygen/classdr_1_1mp_1_1zip__view-members.html new file mode 100644 index 0000000000..19e8ecc5a4 --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1zip__view-members.html @@ -0,0 +1,97 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::mp::zip_view< Rs > Member List
    +
    +
    + +

    This is the complete list of members for dr::mp::zip_view< Rs >, including all inherited members.

    + + + + + + + + + + +
    base() const (defined in dr::mp::zip_view< Rs >)dr::mp::zip_view< Rs >inline
    begin() const (defined in dr::mp::zip_view< Rs >)dr::mp::zip_view< Rs >inline
    end() const (defined in dr::mp::zip_view< Rs >)dr::mp::zip_view< Rs >inline
    local() const (defined in dr::mp::zip_view< Rs >)dr::mp::zip_view< Rs >inline
    operator[](difference_type n) const (defined in dr::mp::zip_view< Rs >)dr::mp::zip_view< Rs >inline
    rank() const (defined in dr::mp::zip_view< Rs >)dr::mp::zip_view< Rs >inline
    segments() const (defined in dr::mp::zip_view< Rs >)dr::mp::zip_view< Rs >inline
    size() const (defined in dr::mp::zip_view< Rs >)dr::mp::zip_view< Rs >inline
    zip_view(Rs... rs) (defined in dr::mp::zip_view< Rs >)dr::mp::zip_view< Rs >inline
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1zip__view.html b/doxygen/classdr_1_1mp_1_1zip__view.html new file mode 100644 index 0000000000..5a745ec866 --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1zip__view.html @@ -0,0 +1,140 @@ + + + + + + + +Distributed Ranges: dr::mp::zip_view< Rs > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::mp::zip_view< Rs > Class Template Reference
    +
    +
    +
    +Inheritance diagram for dr::mp::zip_view< Rs >:
    +
    +
    Inheritance graph
    + + + + +
    [legend]
    +
    +Collaboration diagram for dr::mp::zip_view< Rs >:
    +
    +
    Collaboration graph
    + + + + +
    [legend]
    + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    zip_view (Rs... rs)
     
    +auto begin () const
     
    +auto end () const
     
    +auto size () const
     
    +auto operator[] (difference_type n) const
     
    +auto base () const
     
    +auto segments () const
     
    +auto rank () const
     
    +auto local () const
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/views/zip.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1mp_1_1zip__view__coll__graph.map b/doxygen/classdr_1_1mp_1_1zip__view__coll__graph.map new file mode 100644 index 0000000000..24394e7331 --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1zip__view__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/classdr_1_1mp_1_1zip__view__coll__graph.md5 b/doxygen/classdr_1_1mp_1_1zip__view__coll__graph.md5 new file mode 100644 index 0000000000..5e33838057 --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1zip__view__coll__graph.md5 @@ -0,0 +1 @@ +049b7a8eacc69f48357fac5562dfd0ef \ No newline at end of file diff --git a/doxygen/classdr_1_1mp_1_1zip__view__coll__graph.png b/doxygen/classdr_1_1mp_1_1zip__view__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..d5a0ce3aade3903e64c29f2136e59cb7f264630c GIT binary patch literal 6931 zcmcgxcQ}^++rEvjBqK9>RkA(EEGtBIRx*>Ftc;K?dw*qxtjtJ8gzPP3CtLR3vc1>y z{{H#>@&5fD4({7?+{bfYpU-t&=XIXvCqzv}jsTAu4?z%uNAfc2aIJ!04_qAhD-cYq z2N#^@igGf@CHg15Ha8YQs5>6XNNKvJY^1)?>G^%pK0RHl_$2#U=sWIe)Usdnk9fVL zPO>&(NBmcA)Zx4q!ka1j=K8&;CHs`1Ap7XXZ}|Qu^2X}ySD9r0D&>EyP{^;9sFz5o zt9RMZE0`P|S#vwwE3aGIb@Tq^zI9+Qy=AyTfTG05@o#*Fq71KitMQJQoZL)W#$SLf zu+dcy8&m4D{H@Tqgxst=5@Lcy;Z2>j&gUpyLS|8n8B#YlJY~Zm`CBin#PA=6?ank} zk&%Fa5yXN1|f{NuYr#F8UIMS@tYe{nYcS}xE67lo*AJ+{XL&XaDyX`H`o*nOP zDNigfTXGsyla*QgZ2RuEcbERs=JBypKt|&4GK=Q1u@fQ&pjTAK>?aUFAkocvf(2Cbr zR8Z(uyljMzci`KcvG3C| z^PPpJ=4K|6knOW$M?~`BL!7p7D*v%D-MI4!)aO!h{YqOpbq$RYt3j4v8RjIjz)~-3 z;rOYkDPe~{*u5XbuEof|{qhBcsEO1$JHQSTlaalJ?Ri{uF@PHr6BC=2nVHA7zcHTB z-QB%BZdacj9E|IJxK1@$^ExUsGn18>*{{N8{9#T`4jC!wO^x<}fqw<9;Kn9L-~7roD^YaXJ=;4?CVo|WpAJEd3xBN#BU*gi==

    C9DJT@MlsGpaA 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 + + + diff --git a/doxygen/classdr_1_1mp_1_1zip__view__inherit__graph.md5 b/doxygen/classdr_1_1mp_1_1zip__view__inherit__graph.md5 new file mode 100644 index 0000000000..5e33838057 --- /dev/null +++ b/doxygen/classdr_1_1mp_1_1zip__view__inherit__graph.md5 @@ -0,0 +1 @@ +049b7a8eacc69f48357fac5562dfd0ef \ No newline at end of file diff --git a/doxygen/classdr_1_1mp_1_1zip__view__inherit__graph.png b/doxygen/classdr_1_1mp_1_1zip__view__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..d5a0ce3aade3903e64c29f2136e59cb7f264630c GIT binary patch literal 6931 zcmcgxcQ}^++rEvjBqK9>RkA(EEGtBIRx*>Ftc;K?dw*qxtjtJ8gzPP3CtLR3vc1>y z{{H#>@&5fD4({7?+{bfYpU-t&=XIXvCqzv}jsTAu4?z%uNAfc2aIJ!04_qAhD-cYq z2N#^@igGf@CHg15Ha8YQs5>6XNNKvJY^1)?>G^%pK0RHl_$2#U=sWIe)Usdnk9fVL zPO>&(NBmcA)Zx4q!ka1j=K8&;CHs`1Ap7XXZ}|Qu^2X}ySD9r0D&>EyP{^;9sFz5o zt9RMZE0`P|S#vwwE3aGIb@Tq^zI9+Qy=AyTfTG05@o#*Fq71KitMQJQoZL)W#$SLf zu+dcy8&m4D{H@Tqgxst=5@Lcy;Z2>j&gUpyLS|8n8B#YlJY~Zm`CBin#PA=6?ank} zk&%Fa5yXN1|f{NuYr#F8UIMS@tYe{nYcS}xE67lo*AJ+{XL&XaDyX`H`o*nOP zDNigfTXGsyla*QgZ2RuEcbERs=JBypKt|&4GK=Q1u@fQ&pjTAK>?aUFAkocvf(2Cbr zR8Z(uyljMzci`KcvG3C| z^PPpJ=4K|6knOW$M?~`BL!7p7D*v%D-MI4!)aO!h{YqOpbq$RYt3j4v8RjIjz)~-3 z;rOYkDPe~{*u5XbuEof|{qhBcsEO1$JHQSTlaalJ?Ri{uF@PHr6BC=2nVHA7zcHTB z-QB%BZdacj9E|IJxK1@$^ExUsGn18>*{{N8{9#T`4jC!wO^x<}fqw<9;Kn9L-~7roD^YaXJ=;4?CVo|WpAJEd3xBN#BU*gi==

    C9DJT@MlsGpaA z>o1kX-W<*k!m7$Ge$tB<~-o3$rY(+M9_D~X1Qmq$pLh;1J#AK9|@)#HxP?fS&R8%rD?Cr0I3$#pa zY?SZ4-uyV2t2&r=v42PO&0(P~_0Yn_`6)bk5Zk6yXFvNO+w6g~G@G!nPEKzqImeNc zp&`B9pR+R$5?t*4?OAE@%jNzo53fg$uCA=E?qbQwXzJ=JY>a))3J=Gxc3dK)qM^|+ zGrOH;WN6rXnVOoaEMzyOnMg0{#OnEX^0h~`_vOX@`QPcil@oJ~?112o{{9%1R8iSt zqk0w%4GrCTFR`8^{-EGsKR-W9_*#Wi6+?Y3PkEX7g#}sYrKP>$es()fNRcWN6O+Q% zVTNhAkBy8ZG^lY=&QX$;4S*%d#&zm>C~t0Va>uGDDmH&MsELk`58T~-MMg$;x7zBJ zv-84b#g{M0wz*YwS{jk3r{}k-s-5HW)4xlXUi-_$FJ8RZ?h%^qC~tS5g#w&iS_-Oi zTxuE|Bo!AIrxbii$)fzeC86x=*MOp;qNe@sB>obIxrdxab+kkb;xg*$Bwoi0H>#G3 z6vAq2#U4gb2SDNJ=;$;I50jJLQEB<+Fvl3D;Bc_2#cB9m$1AtMH&eX4yxfDMNOG>^ zT~O(c@}ox>#EtFkaygM18BCi~wV&bx_wY48Z=QI992!ihK%4x5# zH-9&oI63i?1#KR@dd2tlK}MJ3@qDc6muHQbEiElG`zwP-+s#D%RgM+`x>{CL0x!t4 zKkHw;cI_G(iEM3c^NNaEOHA6;^z_0ouyFE*KH|!Hvht|X75S{|bV&~%y-!Y-W{ycO zEW}@2T(ry1xNSMSG+$L!Fk76Lv3fV{P z5*Lk2HQ&CaTm1YG92M2RJ&T44lxfHHiP|?eplQE(o(ggsRAU<$7`VE*F#%Sxv9X=e z$o`JFgHTdY&Bm&VH%`^QaX8vG?oJWW$k5i(MH+tnx}o~vzLcx0Fy!SQgi_?yEi`V$ z$bTHrvht0PBWsotc)MfB4qf}6IcV{%3sso-d>rA<7}xF3t=@(Pc!uP z_EO%pyq=PpYHVql=i&*GtWVc7&5%8@@z@M*u=yiVBC20i?PmkS6*+CpPijj`uemC#m3a=@!>Gj zfN`A|KqOb~6FXN!a#BxoGuF=!Vsi{D5!3>BD=RDCSM>aUil5>G;8XIM;x6_i=f-P0 zs|nOS$ha;SMc;a`_N%{0Psr8P^;y?Dw&l?hlQ1hw3OmQSr08hLfByL=A~N^mM>QoS z{J8jdbuX{F?w*Iuq9h@20V+*xDIj1rUfviyJUmtwmcadkgGbCU9W5Q5of&W6Vv~fm zM*LY?Sa=Kpd*9R!Dxmo(`q{8np|i6yBJvIk%fMFs<<#;wJ}$`6yXfeKT%$UVM~@#r z)>Ky?$SY)~Zqv#oN)z`~=R+hL4e`Bii(QI zo@VFSgax+u$+_p5Z{ED)Nc+05=x?l?oLqBbBZfh>Q{&pN;+>V;w9K3woTc7WYYl^N z3Bt>9Rj=nQ!NhidRY`3kLPD+v642m4rvR*EC?;?VJFjZ${dge&t3#P}kyW{Qd3otn zyi5utuRT4RRi4UKWw`IQ`?1K(5+C+Kzt;UL+>*b%!7RPzma8OgKO?z5S@UG=Ij?Sl z#M!HCaR9xcE*<5@pFfG}FHSg+hK2@2MMXuY+9|(#&ohvdI=M4jo$a%Jl^+$q`Ln&n zp7(gCy?yU4o_@1u3dV(*n#gZKn4_E=2#{wjvy>?thO(Rb{xD6q(q(e7Zq#D7)!8y2Ham6dzwx zUxu{9>7mWnF^wRYkPlQE;pkTMD z{P^+h{{B8I8(WA(g?SJ4?!m#rAb|2(zw zv#Yn4g*np~>xw$WWchb<5+mjjS`!2LBOgjE-o&K_g-^nW@Smqycn)`S|N$&HVD0TgS(-tOTp^t zl`BCHSH6G0AIFO(U-a~mzlx1+^6`;mXJ;p(jQu7`lai7UADF(oimVxGxWEm0>{cuK zAIi!a_oYiw3fa;^13!kk8y(e2s%7ihNUIibGd5l%B<)e6?0q|UY2loTb! zc+L!Xy*lL9YN0FcT~bp17Y`WE&g-Kwuqc{^{1Xcd<^zjYAuNb`e+;)qroL)-i+ zkOqm4LZLOo1Rf(6=3^G4ikDQ!M@P{mCA?KNHG|OJ!;uN`@eh$a=%R>S>NXf4<*qx= zfl)Kwym@o?@Gu7&>1j?ckj;FJT$M9|`QyE%s|ekF*DsIG)A8L{ypMNpKh@P8fb`}; zuxQ>60Bic}nItgsY-qJTvt;XC3FfUcZW*(0H8mzXe_9hoonPoF8kaK_xG>deFs$)Y z+WBk0zt6#;xEZ8C+inc%!-gv=!+0vcmV*EYU*yCbNQEb-4z$vz{ar~Zjd?`;BGPNd zEEbkx-SgBrXU=*Yu9s?Vb5C`2@~+Zt5lEON&&=8K^s6-3hU>xd;zB{X zSEqqRH}OV{GLR?Cn8$TwgkV_jR^g0H#^zm&JvHKOH^ba=7t73jh-{X=zlO}>^*o9)H zBclD?r*E~mS|@hu(Ok{JjJ~{9h;2Z^s8i-QB>|t2GDl7o*3fWkt;YFobSn<2I%fXw z=P^k)c(40J3_PHHA@uDHz+hNCSq9e_smR8y-M3wzzN+fH=L|T<)NLoNv;kI3^2yX>t-Db&UVDygc&_j zt+R!--u`0Pv?H1cB_J?dt)n~(?4hHp3lk}~{zXW4&!q)w*4V~ovZ6_|VPyWrb8G8Q zymMB3+H_i4TEQV9jYWEuWbtk%`)uJ65yaQ8`w-uJIJ590Vf4Ejzk;ITH2b1m{dph+ zlaZ6NXk+$CHmrMIJ)aCv)b;F$7u5L7#s*g`kQgaY=Ql(|M1V#%LUc?NVKFHw;ouBl zAb;lO%m%Iy(aQkG-PvE!m|t9MnwX#kS-@yH!3TrS;becsALt62 z&H-F(|NR?OQc^NOc`yh-D(tpvn&p@bb8&rr-G074H*1x#X4hIDVMZ|LqNf;HI6IK3zQH`CQS8vKi0$Gw#P{1Q0AwdCDBa%ROVUFwo z05)`Vpn03H#}TUTWR(LKyVUW$Cc7*={M^LE;qRt_)7l6DxCl=Qrn|fGK{z1DlP6C& zb-p0L+|QQSVN`zeIu~tu&I|C%3nLq?)@**jx8C5^Zr*Zx6Ob`JOUQ~ z#c4&I_MQv=$jHdi`1D2KZN+$y(OUTzCy;9?_P9*xAVLJ*6>c+LkzvvvxqWaD@ZkeJ z_)6p>fA{xW3ba0bG3_Lwq@gjHuJhEXdUYFG&>tjaevveJ&xg*|=e)p)eFdyX(m@9x zQ-!|{HzzqXY=NLa6)g>7;o$p(g@rZUMerHKX|v>_a1dN<%=OU{ED+6pNl8@5Or!r5 z*Q0GFS~|L8QA0yRFxwDhe|7j8hjt;lf=>Q!72nN?i6NGdUYMU}WMRQE@;biFph(~K zoGlZI)!xZT1~y`vftQzeduJy`udcL|1fBF!vmei_t*;^WE-r0MAMA_BjtlSfc~&!zg+JptI;`hlhvR$JYn4uYvP&osu&6j_QY*Uq;@opb1b`1Gl`+ zlBLU(4Rv&I;rXc<Jyg{T7DAI);kP$!;l{Tlqz`zK4jghFL ztSo=q$?A;sbjgiG=#kMX$2&PHsd!heTxq@YnK_;hhloBLFs%s`HSl3H7Jxsx5YNTR z>H{oKRpNYzbqhSvFXiQLlap!a#oV#M^w4?wv=J0AR3t*oBp{&G#tME9D>wH;*mA>K z_kUmq(BM*CUCr){<>T*ysoAphdvx^K(e^Af0TyI!c6}XRRaN!tSW!Vi z)5dru@r@fn-Q7z2ThsNAo{*c}9iPX+!O6?dmr_(0hU#(8N+XX>XI$t6OBe z4qO;os(`#00C>F8E(j#Y#N?zN7Z^1+BI(6K_xGL9WEv1>F+rAq7llIF9nhApX-joT zYfle>#N`=(czF2C;v$ZJ_KuENh*F9$F&MNRKYla=C$r!ABMW>jr~e$;UVOX< z4i|cL^Yf-oTT^scR|s1mGV;%J(}Cv2okfL(&uncY!DmJg;#trH>}##z9H z6B8+?JOHX-O8mJZ`Lz4}d+POxDpJ_<>mf2dk=giSVq$0)MpTp zGdB-}{+@*(U!=ZCt$A+wo$N};e^Wg$q*Fk7-xUS_haPT>|F|z}6)edpDKC$ExHTO$ z?R823x>*wN5{HnsBl#B~H@Fq7tgJJqQ;=jBM*vM)`Pq(3y+=oLQM_Jfu9}*fdD-=Z z-rnAjB4~p9KHz_$;R)>rp@f9m!8M8GHEDy{B5ymHp3Ybf>iW^nRN%v3*&-l?(8m%Q zm184ALyQs<4CdzMC=?1EG}JT`8D30kDgo%_B*j-Cce}c}jufq$oti~qf$SLbEL*oVg z2e$c9d#E?|X!{9QxDIC + + + + + + +Distributed Ranges: Member List + + + + + + + + + +

    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::normal_distributed_iterator_accessor< V > Member List
    +
    +
    + +

    This is the complete list of members for dr::normal_distributed_iterator_accessor< V >, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + +
    const_iterator_accessor typedef (defined in dr::normal_distributed_iterator_accessor< V >)dr::normal_distributed_iterator_accessor< V >
    difference_type typedef (defined in dr::normal_distributed_iterator_accessor< V >)dr::normal_distributed_iterator_accessor< V >
    iterator_accessor typedef (defined in dr::normal_distributed_iterator_accessor< V >)dr::normal_distributed_iterator_accessor< V >
    iterator_category typedef (defined in dr::normal_distributed_iterator_accessor< V >)dr::normal_distributed_iterator_accessor< V >
    nonconst_iterator_accessor typedef (defined in dr::normal_distributed_iterator_accessor< V >)dr::normal_distributed_iterator_accessor< V >
    normal_distributed_iterator_accessor() noexcept=default (defined in dr::normal_distributed_iterator_accessor< V >)dr::normal_distributed_iterator_accessor< V >
    normal_distributed_iterator_accessor(const normal_distributed_iterator_accessor &) noexcept=default (defined in dr::normal_distributed_iterator_accessor< V >)dr::normal_distributed_iterator_accessor< V >
    normal_distributed_iterator_accessor(V segments, size_type segment_id, size_type idx) noexcept (defined in dr::normal_distributed_iterator_accessor< V >)dr::normal_distributed_iterator_accessor< V >inline
    operator*() const noexcept (defined in dr::normal_distributed_iterator_accessor< V >)dr::normal_distributed_iterator_accessor< V >inline
    operator+=(difference_type offset) noexcept (defined in dr::normal_distributed_iterator_accessor< V >)dr::normal_distributed_iterator_accessor< V >inline
    operator-(const iterator_accessor &other) const noexcept (defined in dr::normal_distributed_iterator_accessor< V >)dr::normal_distributed_iterator_accessor< V >inline
    operator<(const iterator_accessor &other) const noexcept (defined in dr::normal_distributed_iterator_accessor< V >)dr::normal_distributed_iterator_accessor< V >inline
    operator=(const normal_distributed_iterator_accessor &) noexcept=default (defined in dr::normal_distributed_iterator_accessor< V >)dr::normal_distributed_iterator_accessor< V >
    operator==(const iterator_accessor &other) const noexcept (defined in dr::normal_distributed_iterator_accessor< V >)dr::normal_distributed_iterator_accessor< V >inline
    reference typedef (defined in dr::normal_distributed_iterator_accessor< V >)dr::normal_distributed_iterator_accessor< V >
    segment_type typedef (defined in dr::normal_distributed_iterator_accessor< V >)dr::normal_distributed_iterator_accessor< V >
    segments() const noexcept (defined in dr::normal_distributed_iterator_accessor< V >)dr::normal_distributed_iterator_accessor< V >inline
    size_type typedef (defined in dr::normal_distributed_iterator_accessor< V >)dr::normal_distributed_iterator_accessor< V >
    value_type typedef (defined in dr::normal_distributed_iterator_accessor< V >)dr::normal_distributed_iterator_accessor< V >
    ~normal_distributed_iterator_accessor() noexcept=default (defined in dr::normal_distributed_iterator_accessor< V >)dr::normal_distributed_iterator_accessor< V >
    + + + + diff --git a/doxygen/classdr_1_1normal__distributed__iterator__accessor.html b/doxygen/classdr_1_1normal__distributed__iterator__accessor.html new file mode 100644 index 0000000000..16bddd3bf3 --- /dev/null +++ b/doxygen/classdr_1_1normal__distributed__iterator__accessor.html @@ -0,0 +1,153 @@ + + + + + + + +Distributed Ranges: dr::normal_distributed_iterator_accessor< V > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::normal_distributed_iterator_accessor< V > Class Template Reference
    +
    +
    + + + + + + + + + + + + + + + + + + + + +

    +Public Types

    +using value_type = rng::range_value_t< rng::range_reference_t< V > >
     
    +using segment_type = rng::range_value_t< V >
     
    +using size_type = rng::range_size_t< segment_type >
     
    +using difference_type = rng::range_difference_t< segment_type >
     
    +using reference = rng::range_reference_t< segment_type >
     
    +using iterator_category = std::random_access_iterator_tag
     
    +using iterator_accessor = normal_distributed_iterator_accessor
     
    +using const_iterator_accessor = iterator_accessor
     
    +using nonconst_iterator_accessor = iterator_accessor
     
    + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    +constexpr normal_distributed_iterator_accessor (const normal_distributed_iterator_accessor &) noexcept=default
     
    +constexpr normal_distributed_iterator_accessoroperator= (const normal_distributed_iterator_accessor &) noexcept=default
     
    +constexpr normal_distributed_iterator_accessor (V segments, size_type segment_id, size_type idx) noexcept
     
    +constexpr normal_distributed_iterator_accessoroperator+= (difference_type offset) noexcept
     
    +constexpr bool operator== (const iterator_accessor &other) const noexcept
     
    +constexpr difference_type operator- (const iterator_accessor &other) const noexcept
     
    +constexpr bool operator< (const iterator_accessor &other) const noexcept
     
    +constexpr reference operator* () const noexcept
     
    +auto segments () const noexcept
     
    +
    The documentation for this class was generated from the following file: +
    + + + + diff --git a/doxygen/classdr_1_1remote__subrange-members.html b/doxygen/classdr_1_1remote__subrange-members.html new file mode 100644 index 0000000000..b79d444c3d --- /dev/null +++ b/doxygen/classdr_1_1remote__subrange-members.html @@ -0,0 +1,93 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::remote_subrange< I > Member List
    +
    +
    + +

    This is the complete list of members for dr::remote_subrange< I >, including all inherited members.

    + + + + + + +
    rank() const noexcept (defined in dr::remote_subrange< I >)dr::remote_subrange< I >inline
    remote_subrange()=default (defined in dr::remote_subrange< I >)dr::remote_subrange< I >
    remote_subrange(I first, I last, std::size_t rank) (defined in dr::remote_subrange< I >)dr::remote_subrange< I >inline
    remote_subrange(R &&r, std::size_t rank) (defined in dr::remote_subrange< I >)dr::remote_subrange< I >inline
    remote_subrange(R &&r) (defined in dr::remote_subrange< I >)dr::remote_subrange< I >inline
    + + + + diff --git a/doxygen/classdr_1_1remote__subrange.html b/doxygen/classdr_1_1remote__subrange.html new file mode 100644 index 0000000000..c577207efb --- /dev/null +++ b/doxygen/classdr_1_1remote__subrange.html @@ -0,0 +1,127 @@ + + + + + + + +Distributed Ranges: dr::remote_subrange< I > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::remote_subrange< I > Class Template Reference
    +
    +
    +
    +Inheritance diagram for dr::remote_subrange< I >:
    +
    +
    Inheritance graph
    + + + + +
    [legend]
    +
    +Collaboration diagram for dr::remote_subrange< I >:
    +
    +
    Collaboration graph
    + + + + +
    [legend]
    + + + + + + + + + + + + +

    +Public Member Functions

    +constexpr remote_subrange (I first, I last, std::size_t rank)
     
    +template<rng::forward_range R>
    constexpr remote_subrange (R &&r, std::size_t rank)
     
    +template<dr::remote_range R>
    constexpr remote_subrange (R &&r)
     
    +constexpr std::size_t rank () const noexcept
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/detail/remote_subrange.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1remote__subrange__coll__graph.map b/doxygen/classdr_1_1remote__subrange__coll__graph.map new file mode 100644 index 0000000000..fe7563bbed --- /dev/null +++ b/doxygen/classdr_1_1remote__subrange__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/classdr_1_1remote__subrange__coll__graph.md5 b/doxygen/classdr_1_1remote__subrange__coll__graph.md5 new file mode 100644 index 0000000000..f15229df57 --- /dev/null +++ b/doxygen/classdr_1_1remote__subrange__coll__graph.md5 @@ -0,0 +1 @@ +bdfea634e84bf4d69592d9279dbc636a \ No newline at end of file diff --git a/doxygen/classdr_1_1remote__subrange__coll__graph.png b/doxygen/classdr_1_1remote__subrange__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..c96f8705dbb49e9de2b260a4922c55abd3b0898e GIT binary patch literal 5329 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 literal 0 HcmV?d00001 diff --git a/doxygen/classdr_1_1remote__subrange__inherit__graph.map b/doxygen/classdr_1_1remote__subrange__inherit__graph.map new file mode 100644 index 0000000000..fe7563bbed --- /dev/null +++ b/doxygen/classdr_1_1remote__subrange__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/classdr_1_1remote__subrange__inherit__graph.md5 b/doxygen/classdr_1_1remote__subrange__inherit__graph.md5 new file mode 100644 index 0000000000..f15229df57 --- /dev/null +++ b/doxygen/classdr_1_1remote__subrange__inherit__graph.md5 @@ -0,0 +1 @@ +bdfea634e84bf4d69592d9279dbc636a \ No newline at end of file diff --git a/doxygen/classdr_1_1remote__subrange__inherit__graph.png b/doxygen/classdr_1_1remote__subrange__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..c96f8705dbb49e9de2b260a4922c55abd3b0898e GIT binary patch literal 5329 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 literal 0 HcmV?d00001 diff --git a/doxygen/classdr_1_1rma__window-members.html b/doxygen/classdr_1_1rma__window-members.html new file mode 100644 index 0000000000..7643d19c00 --- /dev/null +++ b/doxygen/classdr_1_1rma__window-members.html @@ -0,0 +1,102 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::rma_window Member List
    +
    +
    + +

    This is the complete list of members for dr::rma_window, including all inherited members.

    + + + + + + + + + + + + + + + +
    communicator() const (defined in dr::rma_window)dr::rma_windowinline
    create(communicator comm, void *data, std::size_t size) (defined in dr::rma_window)dr::rma_windowinline
    fence() const (defined in dr::rma_window)dr::rma_windowinline
    flush(std::size_t rank) const (defined in dr::rma_window)dr::rma_windowinline
    free() (defined in dr::rma_window)dr::rma_windowinline
    get(std::size_t rank, std::size_t disp) const (defined in dr::rma_window)dr::rma_windowinline
    get(void *dst, std::size_t size, std::size_t rank, std::size_t disp) const (defined in dr::rma_window)dr::rma_windowinline
    local_data() (defined in dr::rma_window)dr::rma_windowinline
    mpi_win() (defined in dr::rma_window)dr::rma_windowinline
    null() const noexcept (defined in dr::rma_window)dr::rma_windowinline
    operator==(const rma_window other) const noexcept (defined in dr::rma_window)dr::rma_windowinline
    put(const auto &src, std::size_t rank, std::size_t disp) const (defined in dr::rma_window)dr::rma_windowinline
    put(const void *src, std::size_t size, std::size_t rank, std::size_t disp) const (defined in dr::rma_window)dr::rma_windowinline
    set_null() (defined in dr::rma_window)dr::rma_windowinline
    + + + + diff --git a/doxygen/classdr_1_1rma__window.html b/doxygen/classdr_1_1rma__window.html new file mode 100644 index 0000000000..2cff3f39d4 --- /dev/null +++ b/doxygen/classdr_1_1rma__window.html @@ -0,0 +1,139 @@ + + + + + + + +Distributed Ranges: dr::rma_window Class Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::rma_window Class Reference
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    +void create (communicator comm, void *data, std::size_t size)
     
    +template<typename T >
    auto local_data ()
     
    +void free ()
     
    +bool operator== (const rma_window other) const noexcept
     
    +void set_null ()
     
    +bool null () const noexcept
     
    +template<typename T >
    get (std::size_t rank, std::size_t disp) const
     
    +void get (void *dst, std::size_t size, std::size_t rank, std::size_t disp) const
     
    +void put (const auto &src, std::size_t rank, std::size_t disp) const
     
    +void put (const void *src, std::size_t size, std::size_t rank, std::size_t disp) const
     
    +void fence () const
     
    +void flush (std::size_t rank) const
     
    +const auto & communicator () const
     
    +auto mpi_win ()
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/detail/communicator.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1____detail_1_1coo__matrix-members.html b/doxygen/classdr_1_1sp_1_1____detail_1_1coo__matrix-members.html new file mode 100644 index 0000000000..8c7113dab3 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1____detail_1_1coo__matrix-members.html @@ -0,0 +1,128 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::sp::__detail::coo_matrix< T, I, Allocator > Member List
    +
    +
    + +

    This is the complete list of members for dr::sp::__detail::coo_matrix< T, I, Allocator >, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    allocator_type typedef (defined in dr::sp::__detail::coo_matrix< T, I, Allocator >)dr::sp::__detail::coo_matrix< T, I, Allocator >
    assign_tuples(InputIt first, InputIt last) (defined in dr::sp::__detail::coo_matrix< T, I, Allocator >)dr::sp::__detail::coo_matrix< T, I, Allocator >inline
    backend_allocator_type typedef (defined in dr::sp::__detail::coo_matrix< T, I, Allocator >)dr::sp::__detail::coo_matrix< T, I, Allocator >
    backend_type typedef (defined in dr::sp::__detail::coo_matrix< T, I, Allocator >)dr::sp::__detail::coo_matrix< T, I, Allocator >
    begin() noexcept (defined in dr::sp::__detail::coo_matrix< T, I, Allocator >)dr::sp::__detail::coo_matrix< T, I, Allocator >inline
    begin() const noexcept (defined in dr::sp::__detail::coo_matrix< T, I, Allocator >)dr::sp::__detail::coo_matrix< T, I, Allocator >inline
    const_iterator typedef (defined in dr::sp::__detail::coo_matrix< T, I, Allocator >)dr::sp::__detail::coo_matrix< T, I, Allocator >
    const_reference typedef (defined in dr::sp::__detail::coo_matrix< T, I, Allocator >)dr::sp::__detail::coo_matrix< T, I, Allocator >
    coo_matrix(dr::index< I > shape) (defined in dr::sp::__detail::coo_matrix< T, I, Allocator >)dr::sp::__detail::coo_matrix< T, I, Allocator >inline
    coo_matrix()=default (defined in dr::sp::__detail::coo_matrix< T, I, Allocator >)dr::sp::__detail::coo_matrix< T, I, Allocator >
    coo_matrix(const coo_matrix &)=default (defined in dr::sp::__detail::coo_matrix< T, I, Allocator >)dr::sp::__detail::coo_matrix< T, I, Allocator >
    coo_matrix(coo_matrix &&)=default (defined in dr::sp::__detail::coo_matrix< T, I, Allocator >)dr::sp::__detail::coo_matrix< T, I, Allocator >
    difference_type typedef (defined in dr::sp::__detail::coo_matrix< T, I, Allocator >)dr::sp::__detail::coo_matrix< T, I, Allocator >
    end() noexcept (defined in dr::sp::__detail::coo_matrix< T, I, Allocator >)dr::sp::__detail::coo_matrix< T, I, Allocator >inline
    end() const noexcept (defined in dr::sp::__detail::coo_matrix< T, I, Allocator >)dr::sp::__detail::coo_matrix< T, I, Allocator >inline
    find(key_type key) noexcept (defined in dr::sp::__detail::coo_matrix< T, I, Allocator >)dr::sp::__detail::coo_matrix< T, I, Allocator >inline
    find(key_type key) const noexcept (defined in dr::sp::__detail::coo_matrix< T, I, Allocator >)dr::sp::__detail::coo_matrix< T, I, Allocator >inline
    index_type typedef (defined in dr::sp::__detail::coo_matrix< T, I, Allocator >)dr::sp::__detail::coo_matrix< T, I, Allocator >
    insert(InputIt first, InputIt last) (defined in dr::sp::__detail::coo_matrix< T, I, Allocator >)dr::sp::__detail::coo_matrix< T, I, Allocator >inline
    insert(value_type &&value) (defined in dr::sp::__detail::coo_matrix< T, I, Allocator >)dr::sp::__detail::coo_matrix< T, I, Allocator >inline
    insert(const value_type &value) (defined in dr::sp::__detail::coo_matrix< T, I, Allocator >)dr::sp::__detail::coo_matrix< T, I, Allocator >inline
    insert_or_assign(key_type k, M &&obj) (defined in dr::sp::__detail::coo_matrix< T, I, Allocator >)dr::sp::__detail::coo_matrix< T, I, Allocator >inline
    iterator typedef (defined in dr::sp::__detail::coo_matrix< T, I, Allocator >)dr::sp::__detail::coo_matrix< T, I, Allocator >
    key_type typedef (defined in dr::sp::__detail::coo_matrix< T, I, Allocator >)dr::sp::__detail::coo_matrix< T, I, Allocator >
    map_type typedef (defined in dr::sp::__detail::coo_matrix< T, I, Allocator >)dr::sp::__detail::coo_matrix< T, I, Allocator >
    nbytes() const noexcept (defined in dr::sp::__detail::coo_matrix< T, I, Allocator >)dr::sp::__detail::coo_matrix< T, I, Allocator >inline
    operator=(const coo_matrix &)=default (defined in dr::sp::__detail::coo_matrix< T, I, Allocator >)dr::sp::__detail::coo_matrix< T, I, Allocator >
    operator=(coo_matrix &&)=default (defined in dr::sp::__detail::coo_matrix< T, I, Allocator >)dr::sp::__detail::coo_matrix< T, I, Allocator >
    push_back(InputIt first, InputIt last) (defined in dr::sp::__detail::coo_matrix< T, I, Allocator >)dr::sp::__detail::coo_matrix< T, I, Allocator >inline
    push_back(const value_type &value) (defined in dr::sp::__detail::coo_matrix< T, I, Allocator >)dr::sp::__detail::coo_matrix< T, I, Allocator >inline
    reference typedef (defined in dr::sp::__detail::coo_matrix< T, I, Allocator >)dr::sp::__detail::coo_matrix< T, I, Allocator >
    reserve(size_type new_cap) (defined in dr::sp::__detail::coo_matrix< T, I, Allocator >)dr::sp::__detail::coo_matrix< T, I, Allocator >inline
    reshape(dr::index< I > shape) (defined in dr::sp::__detail::coo_matrix< T, I, Allocator >)dr::sp::__detail::coo_matrix< T, I, Allocator >inline
    scalar_reference typedef (defined in dr::sp::__detail::coo_matrix< T, I, Allocator >)dr::sp::__detail::coo_matrix< T, I, Allocator >
    scalar_type typedef (defined in dr::sp::__detail::coo_matrix< T, I, Allocator >)dr::sp::__detail::coo_matrix< T, I, Allocator >
    shape() const noexcept (defined in dr::sp::__detail::coo_matrix< T, I, Allocator >)dr::sp::__detail::coo_matrix< T, I, Allocator >inline
    size() const noexcept (defined in dr::sp::__detail::coo_matrix< T, I, Allocator >)dr::sp::__detail::coo_matrix< T, I, Allocator >inline
    size_type typedef (defined in dr::sp::__detail::coo_matrix< T, I, Allocator >)dr::sp::__detail::coo_matrix< T, I, Allocator >
    value_type typedef (defined in dr::sp::__detail::coo_matrix< T, I, Allocator >)dr::sp::__detail::coo_matrix< T, I, Allocator >
    ~coo_matrix()=default (defined in dr::sp::__detail::coo_matrix< T, I, Allocator >)dr::sp::__detail::coo_matrix< T, I, Allocator >
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1____detail_1_1coo__matrix.html b/doxygen/classdr_1_1sp_1_1____detail_1_1coo__matrix.html new file mode 100644 index 0000000000..49c74ca951 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1____detail_1_1coo__matrix.html @@ -0,0 +1,217 @@ + + + + + + + +Distributed Ranges: dr::sp::__detail::coo_matrix< T, I, Allocator > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::sp::__detail::coo_matrix< T, I, Allocator > Class Template Reference
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Types

    +using value_type = dr::sp::matrix_entry< T, I >
     
    +using scalar_type = T
     
    +using index_type = I
     
    +using size_type = std::size_t
     
    +using difference_type = std::ptrdiff_t
     
    +using allocator_type = Allocator
     
    +using key_type = dr::index< I >
     
    +using map_type = T
     
    +using backend_allocator_type = typename std::allocator_traits< allocator_type >::template rebind_alloc< value_type >
     
    +using backend_type = std::vector< value_type, backend_allocator_type >
     
    +using iterator = typename backend_type::iterator
     
    +using const_iterator = typename backend_type::const_iterator
     
    +using reference = dr::sp::matrix_ref< T, I >
     
    +using const_reference = dr::sp::matrix_ref< std::add_const_t< T >, I >
     
    +using scalar_reference = T &
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    coo_matrix (dr::index< I > shape)
     
    +dr::index< I > shape () const noexcept
     
    +size_type size () const noexcept
     
    +void reserve (size_type new_cap)
     
    +iterator begin () noexcept
     
    +const_iterator begin () const noexcept
     
    +iterator end () noexcept
     
    +const_iterator end () const noexcept
     
    +template<typename InputIt >
    void insert (InputIt first, InputIt last)
     
    +template<typename InputIt >
    void push_back (InputIt first, InputIt last)
     
    +void push_back (const value_type &value)
     
    +template<typename InputIt >
    void assign_tuples (InputIt first, InputIt last)
     
    +std::pair< iterator, bool > insert (value_type &&value)
     
    +std::pair< iterator, bool > insert (const value_type &value)
     
    +template<class M >
    std::pair< iterator, bool > insert_or_assign (key_type k, M &&obj)
     
    +iterator find (key_type key) noexcept
     
    +const_iterator find (key_type key) const noexcept
     
    +void reshape (dr::index< I > shape)
     
    coo_matrix (const coo_matrix &)=default
     
    coo_matrix (coo_matrix &&)=default
     
    +coo_matrixoperator= (const coo_matrix &)=default
     
    +coo_matrixoperator= (coo_matrix &&)=default
     
    +std::size_t nbytes () const noexcept
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/util/coo_matrix.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1block__cyclic-members.html b/doxygen/classdr_1_1sp_1_1block__cyclic-members.html new file mode 100644 index 0000000000..182811d7d9 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1block__cyclic-members.html @@ -0,0 +1,96 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::sp::block_cyclic Member List
    +
    +
    + +

    This is the complete list of members for dr::sp::block_cyclic, including all inherited members.

    + + + + + + + + + +
    block_cyclic(dr::index<> tile_shape={dr::sp::tile::div, dr::sp::tile::div}, dr::index<> grid_shape=detail::factor(dr::sp::nprocs())) (defined in dr::sp::block_cyclic)dr::sp::block_cyclicinline
    block_cyclic(const block_cyclic &) noexcept=default (defined in dr::sp::block_cyclic)dr::sp::block_cyclic
    clone() const noexcept (defined in dr::sp::block_cyclic)dr::sp::block_cyclicinlinevirtual
    grid_shape(dr::index<> matrix_shape) const (defined in dr::sp::block_cyclic)dr::sp::block_cyclicinlinevirtual
    tile_rank(dr::index<> matrix_shape, dr::index<> tile_id) const (defined in dr::sp::block_cyclic)dr::sp::block_cyclicinlinevirtual
    tile_shape() const (defined in dr::sp::block_cyclic)dr::sp::block_cyclicinline
    tile_shape(dr::index<> matrix_shape) const (defined in dr::sp::block_cyclic)dr::sp::block_cyclicinlinevirtual
    ~matrix_partition() (defined in dr::sp::matrix_partition)dr::sp::matrix_partitioninlinevirtual
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1block__cyclic.html b/doxygen/classdr_1_1sp_1_1block__cyclic.html new file mode 100644 index 0000000000..43c2513614 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1block__cyclic.html @@ -0,0 +1,264 @@ + + + + + + + +Distributed Ranges: dr::sp::block_cyclic Class Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::sp::block_cyclic Class Referencefinal
    +
    +
    +
    +Inheritance diagram for dr::sp::block_cyclic:
    +
    +
    Inheritance graph
    + + + + +
    [legend]
    +
    +Collaboration diagram for dr::sp::block_cyclic:
    +
    +
    Collaboration graph
    + + + + +
    [legend]
    + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    block_cyclic (dr::index<> tile_shape={dr::sp::tile::div, dr::sp::tile::div}, dr::index<> grid_shape=detail::factor(dr::sp::nprocs()))
     
    block_cyclic (const block_cyclic &) noexcept=default
     
    +dr::index tile_shape () const
     
    std::size_t tile_rank (dr::index<> matrix_shape, dr::index<> tile_id) const
     
    dr::index grid_shape (dr::index<> matrix_shape) const
     
    dr::index tile_shape (dr::index<> matrix_shape) const
     
    std::unique_ptr< matrix_partitionclone () const noexcept
     
    +virtual std::size_t tile_rank (dr::index<> matrix_shape, dr::index<> tile_id) const =0
     
    +virtual dr::index grid_shape (dr::index<> matrix_shape) const =0
     
    +virtual dr::index tile_shape (dr::index<> matrix_shape) const =0
     
    +virtual std::unique_ptr< matrix_partitionclone () const =0
     
    +

    Member Function Documentation

    + +

    ◆ clone()

    + +
    +
    + + + + + +
    + + + + + + + +
    std::unique_ptr< matrix_partition > dr::sp::block_cyclic::clone () const
    +
    +inlinevirtualnoexcept
    +
    + +

    Implements dr::sp::matrix_partition.

    + +
    +
    + +

    ◆ grid_shape()

    + +
    +
    + + + + + +
    + + + + + + + + +
    dr::index dr::sp::block_cyclic::grid_shape (dr::index<> matrix_shape) const
    +
    +inlinevirtual
    +
    + +

    Implements dr::sp::matrix_partition.

    + +
    +
    + +

    ◆ tile_rank()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    std::size_t dr::sp::block_cyclic::tile_rank (dr::index<> matrix_shape,
    dr::index<> tile_id 
    ) const
    +
    +inlinevirtual
    +
    + +

    Implements dr::sp::matrix_partition.

    + +
    +
    + +

    ◆ tile_shape()

    + +
    +
    + + + + + +
    + + + + + + + + +
    dr::index dr::sp::block_cyclic::tile_shape (dr::index<> matrix_shape) const
    +
    +inlinevirtual
    +
    + +

    Implements dr::sp::matrix_partition.

    + +
    +
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/containers/matrix_partition.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1block__cyclic__coll__graph.map b/doxygen/classdr_1_1sp_1_1block__cyclic__coll__graph.map new file mode 100644 index 0000000000..f282f666aa --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1block__cyclic__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/classdr_1_1sp_1_1block__cyclic__coll__graph.md5 b/doxygen/classdr_1_1sp_1_1block__cyclic__coll__graph.md5 new file mode 100644 index 0000000000..8ab62f1e13 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1block__cyclic__coll__graph.md5 @@ -0,0 +1 @@ +071e74cd42fa2b1e410dff34c8b9f471 \ No newline at end of file diff --git a/doxygen/classdr_1_1sp_1_1block__cyclic__coll__graph.png b/doxygen/classdr_1_1sp_1_1block__cyclic__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..9726f911d9c69683bc6583d8b1ab423d91c3608e GIT binary patch literal 4468 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 literal 0 HcmV?d00001 diff --git a/doxygen/classdr_1_1sp_1_1block__cyclic__inherit__graph.map b/doxygen/classdr_1_1sp_1_1block__cyclic__inherit__graph.map new file mode 100644 index 0000000000..f282f666aa --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1block__cyclic__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/classdr_1_1sp_1_1block__cyclic__inherit__graph.md5 b/doxygen/classdr_1_1sp_1_1block__cyclic__inherit__graph.md5 new file mode 100644 index 0000000000..8ab62f1e13 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1block__cyclic__inherit__graph.md5 @@ -0,0 +1 @@ +071e74cd42fa2b1e410dff34c8b9f471 \ No newline at end of file diff --git a/doxygen/classdr_1_1sp_1_1block__cyclic__inherit__graph.png b/doxygen/classdr_1_1sp_1_1block__cyclic__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..9726f911d9c69683bc6583d8b1ab423d91c3608e GIT binary patch literal 4468 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 literal 0 HcmV?d00001 diff --git a/doxygen/classdr_1_1sp_1_1buffered__allocator-members.html b/doxygen/classdr_1_1sp_1_1buffered__allocator-members.html new file mode 100644 index 0000000000..a7d1e28451 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1buffered__allocator-members.html @@ -0,0 +1,100 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::sp::buffered_allocator< Allocator > Member List
    +
    +
    + +

    This is the complete list of members for dr::sp::buffered_allocator< Allocator >, including all inherited members.

    + + + + + + + + + + + + + +
    allocate(std::size_t size) (defined in dr::sp::buffered_allocator< Allocator >)dr::sp::buffered_allocator< Allocator >inline
    buffered_allocator(const Allocator &alloc, std::size_t buffer_size, std::size_t n_buffers) (defined in dr::sp::buffered_allocator< Allocator >)dr::sp::buffered_allocator< Allocator >inline
    const_pointer typedef (defined in dr::sp::buffered_allocator< Allocator >)dr::sp::buffered_allocator< Allocator >
    deallocate(pointer ptr, std::size_t n) (defined in dr::sp::buffered_allocator< Allocator >)dr::sp::buffered_allocator< Allocator >inline
    difference_type typedef (defined in dr::sp::buffered_allocator< Allocator >)dr::sp::buffered_allocator< Allocator >
    is_always_equal typedef (defined in dr::sp::buffered_allocator< Allocator >)dr::sp::buffered_allocator< Allocator >
    operator!=(const buffered_allocator &) const =default (defined in dr::sp::buffered_allocator< Allocator >)dr::sp::buffered_allocator< Allocator >
    operator==(const buffered_allocator &) const =default (defined in dr::sp::buffered_allocator< Allocator >)dr::sp::buffered_allocator< Allocator >
    pointer typedef (defined in dr::sp::buffered_allocator< Allocator >)dr::sp::buffered_allocator< Allocator >
    size_type typedef (defined in dr::sp::buffered_allocator< Allocator >)dr::sp::buffered_allocator< Allocator >
    value_type typedef (defined in dr::sp::buffered_allocator< Allocator >)dr::sp::buffered_allocator< Allocator >
    ~buffered_allocator() (defined in dr::sp::buffered_allocator< Allocator >)dr::sp::buffered_allocator< Allocator >inline
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1buffered__allocator.html b/doxygen/classdr_1_1sp_1_1buffered__allocator.html new file mode 100644 index 0000000000..b66f147d6a --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1buffered__allocator.html @@ -0,0 +1,132 @@ + + + + + + + +Distributed Ranges: dr::sp::buffered_allocator< Allocator > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::sp::buffered_allocator< Allocator > Class Template Reference
    +
    +
    + + + + + + + + + + + + + + +

    +Public Types

    +using value_type = typename std::allocator_traits< Allocator >::value_type
     
    +using pointer = typename std::allocator_traits< Allocator >::pointer
     
    +using const_pointer = typename std::allocator_traits< Allocator >::const_pointer
     
    +using size_type = typename std::allocator_traits< Allocator >::size_type
     
    +using difference_type = typename std::allocator_traits< Allocator >::difference_type
     
    +using is_always_equal = std::false_type
     
    + + + + + + + + + + + +

    +Public Member Functions

    buffered_allocator (const Allocator &alloc, std::size_t buffer_size, std::size_t n_buffers)
     
    +pointer allocate (std::size_t size)
     
    +void deallocate (pointer ptr, std::size_t n)
     
    +bool operator== (const buffered_allocator &) const =default
     
    +bool operator!= (const buffered_allocator &) const =default
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/allocators.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1csr__matrix__view-members.html b/doxygen/classdr_1_1sp_1_1csr__matrix__view-members.html new file mode 100644 index 0000000000..6fc08a609c --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1csr__matrix__view-members.html @@ -0,0 +1,109 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::sp::csr_matrix_view< T, I, TIter, IIter > Member List
    +
    +
    + +

    This is the complete list of members for dr::sp::csr_matrix_view< T, I, TIter, IIter >, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + +
    begin() const (defined in dr::sp::csr_matrix_view< T, I, TIter, IIter >)dr::sp::csr_matrix_view< T, I, TIter, IIter >inline
    colind_data() const (defined in dr::sp::csr_matrix_view< T, I, TIter, IIter >)dr::sp::csr_matrix_view< T, I, TIter, IIter >inline
    csr_matrix_view(TIter values, IIter rowptr, IIter colind, key_type shape, size_type nnz, size_type rank) (defined in dr::sp::csr_matrix_view< T, I, TIter, IIter >)dr::sp::csr_matrix_view< T, I, TIter, IIter >inline
    csr_matrix_view(TIter values, IIter rowptr, IIter colind, key_type shape, size_type nnz, size_type rank, key_type idx_offset) (defined in dr::sp::csr_matrix_view< T, I, TIter, IIter >)dr::sp::csr_matrix_view< T, I, TIter, IIter >inline
    difference_type typedef (defined in dr::sp::csr_matrix_view< T, I, TIter, IIter >)dr::sp::csr_matrix_view< T, I, TIter, IIter >
    end() const (defined in dr::sp::csr_matrix_view< T, I, TIter, IIter >)dr::sp::csr_matrix_view< T, I, TIter, IIter >inline
    index_type typedef (defined in dr::sp::csr_matrix_view< T, I, TIter, IIter >)dr::sp::csr_matrix_view< T, I, TIter, IIter >
    iterator typedef (defined in dr::sp::csr_matrix_view< T, I, TIter, IIter >)dr::sp::csr_matrix_view< T, I, TIter, IIter >
    key_type typedef (defined in dr::sp::csr_matrix_view< T, I, TIter, IIter >)dr::sp::csr_matrix_view< T, I, TIter, IIter >
    map_type typedef (defined in dr::sp::csr_matrix_view< T, I, TIter, IIter >)dr::sp::csr_matrix_view< T, I, TIter, IIter >
    rank() const (defined in dr::sp::csr_matrix_view< T, I, TIter, IIter >)dr::sp::csr_matrix_view< T, I, TIter, IIter >inline
    reference typedef (defined in dr::sp::csr_matrix_view< T, I, TIter, IIter >)dr::sp::csr_matrix_view< T, I, TIter, IIter >
    row(I row_index) const (defined in dr::sp::csr_matrix_view< T, I, TIter, IIter >)dr::sp::csr_matrix_view< T, I, TIter, IIter >inline
    rowptr_data() const (defined in dr::sp::csr_matrix_view< T, I, TIter, IIter >)dr::sp::csr_matrix_view< T, I, TIter, IIter >inline
    scalar_reference typedef (defined in dr::sp::csr_matrix_view< T, I, TIter, IIter >)dr::sp::csr_matrix_view< T, I, TIter, IIter >
    scalar_type typedef (defined in dr::sp::csr_matrix_view< T, I, TIter, IIter >)dr::sp::csr_matrix_view< T, I, TIter, IIter >
    shape() const noexcept (defined in dr::sp::csr_matrix_view< T, I, TIter, IIter >)dr::sp::csr_matrix_view< T, I, TIter, IIter >inline
    size() const noexcept (defined in dr::sp::csr_matrix_view< T, I, TIter, IIter >)dr::sp::csr_matrix_view< T, I, TIter, IIter >inline
    size_type typedef (defined in dr::sp::csr_matrix_view< T, I, TIter, IIter >)dr::sp::csr_matrix_view< T, I, TIter, IIter >
    submatrix(key_type rows, key_type columns) const (defined in dr::sp::csr_matrix_view< T, I, TIter, IIter >)dr::sp::csr_matrix_view< T, I, TIter, IIter >inline
    values_data() const (defined in dr::sp::csr_matrix_view< T, I, TIter, IIter >)dr::sp::csr_matrix_view< T, I, TIter, IIter >inline
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1csr__matrix__view.html b/doxygen/classdr_1_1sp_1_1csr__matrix__view.html new file mode 100644 index 0000000000..87d75b6e25 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1csr__matrix__view.html @@ -0,0 +1,180 @@ + + + + + + + +Distributed Ranges: dr::sp::csr_matrix_view< T, I, TIter, IIter > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::sp::csr_matrix_view< T, I, TIter, IIter > Class Template Reference
    +
    +
    +
    +Inheritance diagram for dr::sp::csr_matrix_view< T, I, TIter, IIter >:
    +
    +
    Inheritance graph
    + + + + +
    [legend]
    +
    +Collaboration diagram for dr::sp::csr_matrix_view< T, I, TIter, IIter >:
    +
    +
    Collaboration graph
    + + + + +
    [legend]
    + + + + + + + + + + + + + + + + + + + + +

    +Public Types

    +using size_type = std::size_t
     
    +using difference_type = std::ptrdiff_t
     
    +using scalar_reference = std::iter_reference_t< TIter >
     
    +using reference = dr::sp::matrix_ref< T, I, scalar_reference >
     
    +using scalar_type = T
     
    +using index_type = I
     
    +using key_type = dr::index< I >
     
    +using map_type = T
     
    +using iterator = csr_matrix_view_iterator< T, I, TIter, IIter >
     
    + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    csr_matrix_view (TIter values, IIter rowptr, IIter colind, key_type shape, size_type nnz, size_type rank)
     
    csr_matrix_view (TIter values, IIter rowptr, IIter colind, key_type shape, size_type nnz, size_type rank, key_type idx_offset)
     
    +key_type shape () const noexcept
     
    +size_type size () const noexcept
     
    +std::size_t rank () const
     
    +iterator begin () const
     
    +iterator end () const
     
    +auto row (I row_index) const
     
    +auto submatrix (key_type rows, key_type columns) const
     
    +auto values_data () const
     
    +auto rowptr_data () const
     
    +auto colind_data () const
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/views/csr_matrix_view.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1csr__matrix__view__accessor-members.html b/doxygen/classdr_1_1sp_1_1csr__matrix__view__accessor-members.html new file mode 100644 index 0000000000..bea8f29b84 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1csr__matrix__view__accessor-members.html @@ -0,0 +1,113 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::sp::csr_matrix_view_accessor< T, I, TIter, IIter > Member List
    +
    +
    + +

    This is the complete list of members for dr::sp::csr_matrix_view_accessor< T, I, TIter, IIter >, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    const_iterator_accessor typedef (defined in dr::sp::csr_matrix_view_accessor< T, I, TIter, IIter >)dr::sp::csr_matrix_view_accessor< T, I, TIter, IIter >
    csr_matrix_view_accessor() noexcept=default (defined in dr::sp::csr_matrix_view_accessor< T, I, TIter, IIter >)dr::sp::csr_matrix_view_accessor< T, I, TIter, IIter >
    csr_matrix_view_accessor(const csr_matrix_view_accessor &) noexcept=default (defined in dr::sp::csr_matrix_view_accessor< T, I, TIter, IIter >)dr::sp::csr_matrix_view_accessor< T, I, TIter, IIter >
    csr_matrix_view_accessor(TIter values, IIter rowptr, IIter colind, size_type idx, index_type row, size_type row_dim) noexcept (defined in dr::sp::csr_matrix_view_accessor< T, I, TIter, IIter >)dr::sp::csr_matrix_view_accessor< T, I, TIter, IIter >inline
    csr_matrix_view_accessor(TIter values, IIter rowptr, IIter colind, size_type idx, index_type row, size_type row_dim, key_type idx_offset) noexcept (defined in dr::sp::csr_matrix_view_accessor< T, I, TIter, IIter >)dr::sp::csr_matrix_view_accessor< T, I, TIter, IIter >inline
    difference_type typedef (defined in dr::sp::csr_matrix_view_accessor< T, I, TIter, IIter >)dr::sp::csr_matrix_view_accessor< T, I, TIter, IIter >
    fast_backward_row() noexcept (defined in dr::sp::csr_matrix_view_accessor< T, I, TIter, IIter >)dr::sp::csr_matrix_view_accessor< T, I, TIter, IIter >inline
    fast_forward_row() noexcept (defined in dr::sp::csr_matrix_view_accessor< T, I, TIter, IIter >)dr::sp::csr_matrix_view_accessor< T, I, TIter, IIter >inline
    index_type typedef (defined in dr::sp::csr_matrix_view_accessor< T, I, TIter, IIter >)dr::sp::csr_matrix_view_accessor< T, I, TIter, IIter >
    iterator_accessor typedef (defined in dr::sp::csr_matrix_view_accessor< T, I, TIter, IIter >)dr::sp::csr_matrix_view_accessor< T, I, TIter, IIter >
    iterator_category typedef (defined in dr::sp::csr_matrix_view_accessor< T, I, TIter, IIter >)dr::sp::csr_matrix_view_accessor< T, I, TIter, IIter >
    key_type typedef (defined in dr::sp::csr_matrix_view_accessor< T, I, TIter, IIter >)dr::sp::csr_matrix_view_accessor< T, I, TIter, IIter >
    nonconst_iterator_accessor typedef (defined in dr::sp::csr_matrix_view_accessor< T, I, TIter, IIter >)dr::sp::csr_matrix_view_accessor< T, I, TIter, IIter >
    operator*() const noexcept (defined in dr::sp::csr_matrix_view_accessor< T, I, TIter, IIter >)dr::sp::csr_matrix_view_accessor< T, I, TIter, IIter >inline
    operator+=(difference_type offset) noexcept (defined in dr::sp::csr_matrix_view_accessor< T, I, TIter, IIter >)dr::sp::csr_matrix_view_accessor< T, I, TIter, IIter >inline
    operator-(const iterator_accessor &other) const noexcept (defined in dr::sp::csr_matrix_view_accessor< T, I, TIter, IIter >)dr::sp::csr_matrix_view_accessor< T, I, TIter, IIter >inline
    operator<(const iterator_accessor &other) const noexcept (defined in dr::sp::csr_matrix_view_accessor< T, I, TIter, IIter >)dr::sp::csr_matrix_view_accessor< T, I, TIter, IIter >inline
    operator=(const csr_matrix_view_accessor &) noexcept=default (defined in dr::sp::csr_matrix_view_accessor< T, I, TIter, IIter >)dr::sp::csr_matrix_view_accessor< T, I, TIter, IIter >
    operator==(const iterator_accessor &other) const noexcept (defined in dr::sp::csr_matrix_view_accessor< T, I, TIter, IIter >)dr::sp::csr_matrix_view_accessor< T, I, TIter, IIter >inline
    reference typedef (defined in dr::sp::csr_matrix_view_accessor< T, I, TIter, IIter >)dr::sp::csr_matrix_view_accessor< T, I, TIter, IIter >
    scalar_reference typedef (defined in dr::sp::csr_matrix_view_accessor< T, I, TIter, IIter >)dr::sp::csr_matrix_view_accessor< T, I, TIter, IIter >
    scalar_type typedef (defined in dr::sp::csr_matrix_view_accessor< T, I, TIter, IIter >)dr::sp::csr_matrix_view_accessor< T, I, TIter, IIter >
    size_type typedef (defined in dr::sp::csr_matrix_view_accessor< T, I, TIter, IIter >)dr::sp::csr_matrix_view_accessor< T, I, TIter, IIter >
    value_type typedef (defined in dr::sp::csr_matrix_view_accessor< T, I, TIter, IIter >)dr::sp::csr_matrix_view_accessor< T, I, TIter, IIter >
    ~csr_matrix_view_accessor() noexcept=default (defined in dr::sp::csr_matrix_view_accessor< T, I, TIter, IIter >)dr::sp::csr_matrix_view_accessor< T, I, TIter, IIter >
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1csr__matrix__view__accessor.html b/doxygen/classdr_1_1sp_1_1csr__matrix__view__accessor.html new file mode 100644 index 0000000000..6dab64c1d6 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1csr__matrix__view__accessor.html @@ -0,0 +1,168 @@ + + + + + + + +Distributed Ranges: dr::sp::csr_matrix_view_accessor< T, I, TIter, IIter > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::sp::csr_matrix_view_accessor< T, I, TIter, IIter > Class Template Reference
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Types

    +using size_type = std::size_t
     
    +using difference_type = std::ptrdiff_t
     
    +using scalar_type = std::iter_value_t< TIter >
     
    +using scalar_reference = std::iter_reference_t< TIter >
     
    +using index_type = I
     
    +using value_type = dr::sp::matrix_entry< scalar_type, I >
     
    +using reference = dr::sp::matrix_ref< T, I, scalar_reference >
     
    +using iterator_category = std::random_access_iterator_tag
     
    +using iterator_accessor = csr_matrix_view_accessor
     
    +using const_iterator_accessor = iterator_accessor
     
    +using nonconst_iterator_accessor = iterator_accessor
     
    +using key_type = dr::index< I >
     
    + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    +constexpr csr_matrix_view_accessor (const csr_matrix_view_accessor &) noexcept=default
     
    +constexpr csr_matrix_view_accessoroperator= (const csr_matrix_view_accessor &) noexcept=default
     
    +constexpr csr_matrix_view_accessor (TIter values, IIter rowptr, IIter colind, size_type idx, index_type row, size_type row_dim) noexcept
     
    +constexpr csr_matrix_view_accessor (TIter values, IIter rowptr, IIter colind, size_type idx, index_type row, size_type row_dim, key_type idx_offset) noexcept
     
    +void fast_forward_row () noexcept
     
    +void fast_backward_row () noexcept
     
    +constexpr csr_matrix_view_accessoroperator+= (difference_type offset) noexcept
     
    +constexpr bool operator== (const iterator_accessor &other) const noexcept
     
    +constexpr difference_type operator- (const iterator_accessor &other) const noexcept
     
    +constexpr bool operator< (const iterator_accessor &other) const noexcept
     
    +constexpr reference operator* () const noexcept
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/views/csr_matrix_view.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1csr__matrix__view__coll__graph.map b/doxygen/classdr_1_1sp_1_1csr__matrix__view__coll__graph.map new file mode 100644 index 0000000000..6ee437bb18 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1csr__matrix__view__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/classdr_1_1sp_1_1csr__matrix__view__coll__graph.md5 b/doxygen/classdr_1_1sp_1_1csr__matrix__view__coll__graph.md5 new file mode 100644 index 0000000000..a58101abc1 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1csr__matrix__view__coll__graph.md5 @@ -0,0 +1 @@ +39f828210c8b0987e5a88142b54e6b4e \ No newline at end of file diff --git a/doxygen/classdr_1_1sp_1_1csr__matrix__view__coll__graph.png b/doxygen/classdr_1_1sp_1_1csr__matrix__view__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..a5dca4c05cf037b8916d342a970d9a0b00dc2b9e GIT binary patch literal 8948 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 QUt>Wi$*IYfOPjp>A2fR%#Q*>R literal 0 HcmV?d00001 diff --git a/doxygen/classdr_1_1sp_1_1csr__matrix__view__inherit__graph.map b/doxygen/classdr_1_1sp_1_1csr__matrix__view__inherit__graph.map new file mode 100644 index 0000000000..6ee437bb18 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1csr__matrix__view__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/classdr_1_1sp_1_1csr__matrix__view__inherit__graph.md5 b/doxygen/classdr_1_1sp_1_1csr__matrix__view__inherit__graph.md5 new file mode 100644 index 0000000000..a58101abc1 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1csr__matrix__view__inherit__graph.md5 @@ -0,0 +1 @@ +39f828210c8b0987e5a88142b54e6b4e \ No newline at end of file diff --git a/doxygen/classdr_1_1sp_1_1csr__matrix__view__inherit__graph.png b/doxygen/classdr_1_1sp_1_1csr__matrix__view__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..a5dca4c05cf037b8916d342a970d9a0b00dc2b9e GIT binary patch literal 8948 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 QUt>Wi$*IYfOPjp>A2fR%#Q*>R literal 0 HcmV?d00001 diff --git a/doxygen/classdr_1_1sp_1_1dense__matrix-members.html b/doxygen/classdr_1_1sp_1_1dense__matrix-members.html new file mode 100644 index 0000000000..0d0f958f5e --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1dense__matrix-members.html @@ -0,0 +1,114 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::sp::dense_matrix< T, Allocator > Member List
    +
    +
    + +

    This is the complete list of members for dr::sp::dense_matrix< T, Allocator >, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    allocator_type typedef (defined in dr::sp::dense_matrix< T, Allocator >)dr::sp::dense_matrix< T, Allocator >
    begin() const (defined in dr::sp::dense_matrix< T, Allocator >)dr::sp::dense_matrix< T, Allocator >inline
    column(size_type column_index) const (defined in dr::sp::dense_matrix< T, Allocator >)dr::sp::dense_matrix< T, Allocator >inline
    data() const (defined in dr::sp::dense_matrix< T, Allocator >)dr::sp::dense_matrix< T, Allocator >inline
    dense_matrix(key_type shape) (defined in dr::sp::dense_matrix< T, Allocator >)dr::sp::dense_matrix< T, Allocator >inline
    dense_matrix(key_type shape, std::size_t ld) (defined in dr::sp::dense_matrix< T, Allocator >)dr::sp::dense_matrix< T, Allocator >inline
    dense_matrix(key_type shape, std::size_t ld, const Allocator &alloc) (defined in dr::sp::dense_matrix< T, Allocator >)dr::sp::dense_matrix< T, Allocator >inline
    dense_matrix(dense_matrix &&other) (defined in dr::sp::dense_matrix< T, Allocator >)dr::sp::dense_matrix< T, Allocator >inline
    dense_matrix(const dense_matrix &other)=delete (defined in dr::sp::dense_matrix< T, Allocator >)dr::sp::dense_matrix< T, Allocator >
    difference_type typedef (defined in dr::sp::dense_matrix< T, Allocator >)dr::sp::dense_matrix< T, Allocator >
    end() const (defined in dr::sp::dense_matrix< T, Allocator >)dr::sp::dense_matrix< T, Allocator >inline
    iterator typedef (defined in dr::sp::dense_matrix< T, Allocator >)dr::sp::dense_matrix< T, Allocator >
    key_type typedef (defined in dr::sp::dense_matrix< T, Allocator >)dr::sp::dense_matrix< T, Allocator >
    ld() const (defined in dr::sp::dense_matrix< T, Allocator >)dr::sp::dense_matrix< T, Allocator >inline
    map_type typedef (defined in dr::sp::dense_matrix< T, Allocator >)dr::sp::dense_matrix< T, Allocator >
    operator=(dense_matrix &&other) (defined in dr::sp::dense_matrix< T, Allocator >)dr::sp::dense_matrix< T, Allocator >inline
    operator=(const dense_matrix &other)=delete (defined in dr::sp::dense_matrix< T, Allocator >)dr::sp::dense_matrix< T, Allocator >
    operator[](key_type idx) const (defined in dr::sp::dense_matrix< T, Allocator >)dr::sp::dense_matrix< T, Allocator >inline
    reference typedef (defined in dr::sp::dense_matrix< T, Allocator >)dr::sp::dense_matrix< T, Allocator >
    row(size_type row_index) const (defined in dr::sp::dense_matrix< T, Allocator >)dr::sp::dense_matrix< T, Allocator >inline
    scalar_pointer typedef (defined in dr::sp::dense_matrix< T, Allocator >)dr::sp::dense_matrix< T, Allocator >
    scalar_reference typedef (defined in dr::sp::dense_matrix< T, Allocator >)dr::sp::dense_matrix< T, Allocator >
    shape() const noexcept (defined in dr::sp::dense_matrix< T, Allocator >)dr::sp::dense_matrix< T, Allocator >inline
    size() const noexcept (defined in dr::sp::dense_matrix< T, Allocator >)dr::sp::dense_matrix< T, Allocator >inline
    size_type typedef (defined in dr::sp::dense_matrix< T, Allocator >)dr::sp::dense_matrix< T, Allocator >
    ~dense_matrix() (defined in dr::sp::dense_matrix< T, Allocator >)dr::sp::dense_matrix< T, Allocator >inline
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1dense__matrix.html b/doxygen/classdr_1_1sp_1_1dense__matrix.html new file mode 100644 index 0000000000..6cec416c34 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1dense__matrix.html @@ -0,0 +1,174 @@ + + + + + + + +Distributed Ranges: dr::sp::dense_matrix< T, Allocator > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::sp::dense_matrix< T, Allocator > Class Template Reference
    +
    +
    + + + + + + + + + + + + + + + + + + + + +

    +Public Types

    +using size_type = std::size_t
     
    +using difference_type = std::ptrdiff_t
     
    +using allocator_type = Allocator
     
    +using scalar_pointer = typename std::allocator_traits< Allocator >::pointer
     
    +using scalar_reference = std::iter_reference_t< scalar_pointer >
     
    +using reference = dr::sp::matrix_ref< T, std::size_t, scalar_reference >
     
    +using key_type = dr::index<>
     
    +using map_type = T
     
    +using iterator = dense_matrix_iterator< T, scalar_pointer >
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    dense_matrix (key_type shape)
     
    dense_matrix (key_type shape, std::size_t ld)
     
    dense_matrix (key_type shape, std::size_t ld, const Allocator &alloc)
     
    dense_matrix (dense_matrix &&other)
     
    +dense_matrixoperator= (dense_matrix &&other)
     
    dense_matrix (const dense_matrix &other)=delete
     
    +dense_matrixoperator= (const dense_matrix &other)=delete
     
    +key_type shape () const noexcept
     
    +size_type size () const noexcept
     
    +scalar_reference operator[] (key_type idx) const
     
    +iterator begin () const
     
    +iterator end () const
     
    +auto row (size_type row_index) const
     
    +auto column (size_type column_index) const
     
    +scalar_pointer data () const
     
    +size_type ld () const
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/containers/sequential/dense_matrix.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1dense__matrix__accessor-members.html b/doxygen/classdr_1_1sp_1_1dense__matrix__accessor-members.html new file mode 100644 index 0000000000..da3b829e07 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1dense__matrix__accessor-members.html @@ -0,0 +1,111 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::sp::dense_matrix_accessor< T, Iter > Member List
    +
    +
    + +

    This is the complete list of members for dr::sp::dense_matrix_accessor< T, Iter >, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + + + +
    const_iterator_accessor typedef (defined in dr::sp::dense_matrix_accessor< T, Iter >)dr::sp::dense_matrix_accessor< T, Iter >
    data() const noexcept (defined in dr::sp::dense_matrix_accessor< T, Iter >)dr::sp::dense_matrix_accessor< T, Iter >inline
    dense_matrix_accessor() noexcept=default (defined in dr::sp::dense_matrix_accessor< T, Iter >)dr::sp::dense_matrix_accessor< T, Iter >
    dense_matrix_accessor(const dense_matrix_accessor &) noexcept=default (defined in dr::sp::dense_matrix_accessor< T, Iter >)dr::sp::dense_matrix_accessor< T, Iter >
    dense_matrix_accessor(Iter data, key_type idx, key_type matrix_shape, size_type ld) noexcept (defined in dr::sp::dense_matrix_accessor< T, Iter >)dr::sp::dense_matrix_accessor< T, Iter >inline
    dense_matrix_accessor(Iter data, key_type idx, key_type idx_offset, key_type matrix_shape, size_type ld) noexcept (defined in dr::sp::dense_matrix_accessor< T, Iter >)dr::sp::dense_matrix_accessor< T, Iter >inline
    difference_type typedef (defined in dr::sp::dense_matrix_accessor< T, Iter >)dr::sp::dense_matrix_accessor< T, Iter >
    iterator_accessor typedef (defined in dr::sp::dense_matrix_accessor< T, Iter >)dr::sp::dense_matrix_accessor< T, Iter >
    iterator_category typedef (defined in dr::sp::dense_matrix_accessor< T, Iter >)dr::sp::dense_matrix_accessor< T, Iter >
    key_type typedef (defined in dr::sp::dense_matrix_accessor< T, Iter >)dr::sp::dense_matrix_accessor< T, Iter >
    nonconst_iterator_accessor typedef (defined in dr::sp::dense_matrix_accessor< T, Iter >)dr::sp::dense_matrix_accessor< T, Iter >
    operator*() const noexcept (defined in dr::sp::dense_matrix_accessor< T, Iter >)dr::sp::dense_matrix_accessor< T, Iter >inline
    operator+=(difference_type offset) noexcept (defined in dr::sp::dense_matrix_accessor< T, Iter >)dr::sp::dense_matrix_accessor< T, Iter >inline
    operator-(const iterator_accessor &other) const noexcept (defined in dr::sp::dense_matrix_accessor< T, Iter >)dr::sp::dense_matrix_accessor< T, Iter >inline
    operator<(const iterator_accessor &other) const noexcept (defined in dr::sp::dense_matrix_accessor< T, Iter >)dr::sp::dense_matrix_accessor< T, Iter >inline
    operator=(const dense_matrix_accessor &) noexcept=default (defined in dr::sp::dense_matrix_accessor< T, Iter >)dr::sp::dense_matrix_accessor< T, Iter >
    operator==(const iterator_accessor &other) const noexcept (defined in dr::sp::dense_matrix_accessor< T, Iter >)dr::sp::dense_matrix_accessor< T, Iter >inline
    reference typedef (defined in dr::sp::dense_matrix_accessor< T, Iter >)dr::sp::dense_matrix_accessor< T, Iter >
    scalar_reference typedef (defined in dr::sp::dense_matrix_accessor< T, Iter >)dr::sp::dense_matrix_accessor< T, Iter >
    scalar_type typedef (defined in dr::sp::dense_matrix_accessor< T, Iter >)dr::sp::dense_matrix_accessor< T, Iter >
    size_type typedef (defined in dr::sp::dense_matrix_accessor< T, Iter >)dr::sp::dense_matrix_accessor< T, Iter >
    value_type typedef (defined in dr::sp::dense_matrix_accessor< T, Iter >)dr::sp::dense_matrix_accessor< T, Iter >
    ~dense_matrix_accessor() noexcept=default (defined in dr::sp::dense_matrix_accessor< T, Iter >)dr::sp::dense_matrix_accessor< T, Iter >
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1dense__matrix__accessor.html b/doxygen/classdr_1_1sp_1_1dense__matrix__accessor.html new file mode 100644 index 0000000000..518a584381 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1dense__matrix__accessor.html @@ -0,0 +1,162 @@ + + + + + + + +Distributed Ranges: dr::sp::dense_matrix_accessor< T, Iter > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::sp::dense_matrix_accessor< T, Iter > Class Template Reference
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Types

    +using size_type = std::size_t
     
    +using difference_type = std::ptrdiff_t
     
    +using scalar_type = std::iter_value_t< Iter >
     
    +using scalar_reference = std::iter_reference_t< Iter >
     
    +using value_type = dr::sp::matrix_entry< scalar_type, std::size_t >
     
    +using reference = dr::sp::matrix_ref< T, std::size_t, scalar_reference >
     
    +using iterator_category = std::random_access_iterator_tag
     
    +using iterator_accessor = dense_matrix_accessor
     
    +using const_iterator_accessor = iterator_accessor
     
    +using nonconst_iterator_accessor = iterator_accessor
     
    +using key_type = dr::index<>
     
    + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    +constexpr dense_matrix_accessor (const dense_matrix_accessor &) noexcept=default
     
    +constexpr dense_matrix_accessoroperator= (const dense_matrix_accessor &) noexcept=default
     
    +constexpr dense_matrix_accessor (Iter data, key_type idx, key_type matrix_shape, size_type ld) noexcept
     
    +constexpr dense_matrix_accessor (Iter data, key_type idx, key_type idx_offset, key_type matrix_shape, size_type ld) noexcept
     
    +constexpr dense_matrix_accessoroperator+= (difference_type offset) noexcept
     
    +constexpr bool operator== (const iterator_accessor &other) const noexcept
     
    +constexpr difference_type operator- (const iterator_accessor &other) const noexcept
     
    +constexpr bool operator< (const iterator_accessor &other) const noexcept
     
    +constexpr reference operator* () const noexcept
     
    +Iter data () const noexcept
     
    +
    The documentation for this class was generated from the following file: +
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1dense__matrix__column__accessor-members.html b/doxygen/classdr_1_1sp_1_1dense__matrix__column__accessor-members.html new file mode 100644 index 0000000000..368f085e6c --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1dense__matrix__column__accessor-members.html @@ -0,0 +1,109 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::sp::dense_matrix_column_accessor< T, Iter > Member List
    +
    +
    + +

    This is the complete list of members for dr::sp::dense_matrix_column_accessor< T, Iter >, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + +
    const_iterator_accessor typedef (defined in dr::sp::dense_matrix_column_accessor< T, Iter >)dr::sp::dense_matrix_column_accessor< T, Iter >
    dense_matrix_column_accessor() noexcept=default (defined in dr::sp::dense_matrix_column_accessor< T, Iter >)dr::sp::dense_matrix_column_accessor< T, Iter >
    dense_matrix_column_accessor(const dense_matrix_column_accessor &) noexcept=default (defined in dr::sp::dense_matrix_column_accessor< T, Iter >)dr::sp::dense_matrix_column_accessor< T, Iter >
    dense_matrix_column_accessor(Iter data, std::size_t i, std::size_t j, std::size_t ld) noexcept (defined in dr::sp::dense_matrix_column_accessor< T, Iter >)dr::sp::dense_matrix_column_accessor< T, Iter >inline
    difference_type typedef (defined in dr::sp::dense_matrix_column_accessor< T, Iter >)dr::sp::dense_matrix_column_accessor< T, Iter >
    iterator_accessor typedef (defined in dr::sp::dense_matrix_column_accessor< T, Iter >)dr::sp::dense_matrix_column_accessor< T, Iter >
    iterator_category typedef (defined in dr::sp::dense_matrix_column_accessor< T, Iter >)dr::sp::dense_matrix_column_accessor< T, Iter >
    key_type typedef (defined in dr::sp::dense_matrix_column_accessor< T, Iter >)dr::sp::dense_matrix_column_accessor< T, Iter >
    nonconst_iterator_accessor typedef (defined in dr::sp::dense_matrix_column_accessor< T, Iter >)dr::sp::dense_matrix_column_accessor< T, Iter >
    operator*() const noexcept (defined in dr::sp::dense_matrix_column_accessor< T, Iter >)dr::sp::dense_matrix_column_accessor< T, Iter >inline
    operator+=(difference_type offset) noexcept (defined in dr::sp::dense_matrix_column_accessor< T, Iter >)dr::sp::dense_matrix_column_accessor< T, Iter >inline
    operator-(const iterator_accessor &other) const noexcept (defined in dr::sp::dense_matrix_column_accessor< T, Iter >)dr::sp::dense_matrix_column_accessor< T, Iter >inline
    operator<(const iterator_accessor &other) const noexcept (defined in dr::sp::dense_matrix_column_accessor< T, Iter >)dr::sp::dense_matrix_column_accessor< T, Iter >inline
    operator=(const dense_matrix_column_accessor &) noexcept=default (defined in dr::sp::dense_matrix_column_accessor< T, Iter >)dr::sp::dense_matrix_column_accessor< T, Iter >
    operator==(const iterator_accessor &other) const noexcept (defined in dr::sp::dense_matrix_column_accessor< T, Iter >)dr::sp::dense_matrix_column_accessor< T, Iter >inline
    reference typedef (defined in dr::sp::dense_matrix_column_accessor< T, Iter >)dr::sp::dense_matrix_column_accessor< T, Iter >
    scalar_reference typedef (defined in dr::sp::dense_matrix_column_accessor< T, Iter >)dr::sp::dense_matrix_column_accessor< T, Iter >
    scalar_value_type typedef (defined in dr::sp::dense_matrix_column_accessor< T, Iter >)dr::sp::dense_matrix_column_accessor< T, Iter >
    size_type typedef (defined in dr::sp::dense_matrix_column_accessor< T, Iter >)dr::sp::dense_matrix_column_accessor< T, Iter >
    value_type typedef (defined in dr::sp::dense_matrix_column_accessor< T, Iter >)dr::sp::dense_matrix_column_accessor< T, Iter >
    ~dense_matrix_column_accessor() noexcept=default (defined in dr::sp::dense_matrix_column_accessor< T, Iter >)dr::sp::dense_matrix_column_accessor< T, Iter >
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1dense__matrix__column__accessor.html b/doxygen/classdr_1_1sp_1_1dense__matrix__column__accessor.html new file mode 100644 index 0000000000..449bd01f52 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1dense__matrix__column__accessor.html @@ -0,0 +1,156 @@ + + + + + + + +Distributed Ranges: dr::sp::dense_matrix_column_accessor< T, Iter > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::sp::dense_matrix_column_accessor< T, Iter > Class Template Reference
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Types

    +using size_type = std::size_t
     
    +using difference_type = std::ptrdiff_t
     
    +using scalar_value_type = std::iter_value_t< Iter >
     
    +using scalar_reference = std::iter_reference_t< Iter >
     
    +using value_type = dr::sp::matrix_entry< scalar_value_type, std::size_t >
     
    +using reference = dr::sp::matrix_ref< T, std::size_t, scalar_reference >
     
    +using iterator_category = std::random_access_iterator_tag
     
    +using iterator_accessor = dense_matrix_column_accessor
     
    +using const_iterator_accessor = iterator_accessor
     
    +using nonconst_iterator_accessor = iterator_accessor
     
    +using key_type = dr::index<>
     
    + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    +constexpr dense_matrix_column_accessor (const dense_matrix_column_accessor &) noexcept=default
     
    +constexpr dense_matrix_column_accessoroperator= (const dense_matrix_column_accessor &) noexcept=default
     
    +constexpr dense_matrix_column_accessor (Iter data, std::size_t i, std::size_t j, std::size_t ld) noexcept
     
    +constexpr dense_matrix_column_accessoroperator+= (difference_type offset) noexcept
     
    +constexpr bool operator== (const iterator_accessor &other) const noexcept
     
    +constexpr difference_type operator- (const iterator_accessor &other) const noexcept
     
    +constexpr bool operator< (const iterator_accessor &other) const noexcept
     
    +constexpr reference operator* () const noexcept
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/views/dense_column_view.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1dense__matrix__column__view-members.html b/doxygen/classdr_1_1sp_1_1dense__matrix__column__view-members.html new file mode 100644 index 0000000000..fd16e68210 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1dense__matrix__column__view-members.html @@ -0,0 +1,103 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::sp::dense_matrix_column_view< T, Iter > Member List
    +
    +
    + +

    This is the complete list of members for dr::sp::dense_matrix_column_view< T, Iter >, including all inherited members.

    + + + + + + + + + + + + + + + + +
    begin() const (defined in dr::sp::dense_matrix_column_view< T, Iter >)dr::sp::dense_matrix_column_view< T, Iter >inline
    column_idx_ (defined in dr::sp::dense_matrix_column_view< T, Iter >)dr::sp::dense_matrix_column_view< T, Iter >
    data_ (defined in dr::sp::dense_matrix_column_view< T, Iter >)dr::sp::dense_matrix_column_view< T, Iter >
    dense_matrix_column_view(Iter data, size_type column_idx, size_type size, size_type ld) (defined in dr::sp::dense_matrix_column_view< T, Iter >)dr::sp::dense_matrix_column_view< T, Iter >inline
    difference_type typedef (defined in dr::sp::dense_matrix_column_view< T, Iter >)dr::sp::dense_matrix_column_view< T, Iter >
    end() const (defined in dr::sp::dense_matrix_column_view< T, Iter >)dr::sp::dense_matrix_column_view< T, Iter >inline
    iterator typedef (defined in dr::sp::dense_matrix_column_view< T, Iter >)dr::sp::dense_matrix_column_view< T, Iter >
    key_type typedef (defined in dr::sp::dense_matrix_column_view< T, Iter >)dr::sp::dense_matrix_column_view< T, Iter >
    ld_ (defined in dr::sp::dense_matrix_column_view< T, Iter >)dr::sp::dense_matrix_column_view< T, Iter >
    map_type typedef (defined in dr::sp::dense_matrix_column_view< T, Iter >)dr::sp::dense_matrix_column_view< T, Iter >
    operator[](size_type idx) (defined in dr::sp::dense_matrix_column_view< T, Iter >)dr::sp::dense_matrix_column_view< T, Iter >inline
    scalar_reference typedef (defined in dr::sp::dense_matrix_column_view< T, Iter >)dr::sp::dense_matrix_column_view< T, Iter >
    size() const noexcept (defined in dr::sp::dense_matrix_column_view< T, Iter >)dr::sp::dense_matrix_column_view< T, Iter >inline
    size_ (defined in dr::sp::dense_matrix_column_view< T, Iter >)dr::sp::dense_matrix_column_view< T, Iter >
    size_type typedef (defined in dr::sp::dense_matrix_column_view< T, Iter >)dr::sp::dense_matrix_column_view< T, Iter >
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1dense__matrix__column__view.html b/doxygen/classdr_1_1sp_1_1dense__matrix__column__view.html new file mode 100644 index 0000000000..21896cf0ff --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1dense__matrix__column__view.html @@ -0,0 +1,157 @@ + + + + + + + +Distributed Ranges: dr::sp::dense_matrix_column_view< T, Iter > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::sp::dense_matrix_column_view< T, Iter > Class Template Reference
    +
    +
    +
    +Collaboration diagram for dr::sp::dense_matrix_column_view< T, Iter >:
    +
    +
    Collaboration graph
    + + + + +
    [legend]
    + + + + + + + + + + + + + + +

    +Public Types

    +using size_type = std::size_t
     
    +using difference_type = std::ptrdiff_t
     
    +using scalar_reference = std::iter_reference_t< Iter >
     
    +using key_type = dr::index<>
     
    +using map_type = T
     
    +using iterator = dense_matrix_column_iterator< T, Iter >
     
    + + + + + + + + + + + +

    +Public Member Functions

    dense_matrix_column_view (Iter data, size_type column_idx, size_type size, size_type ld)
     
    +scalar_reference operator[] (size_type idx)
     
    +iterator begin () const
     
    +iterator end () const
     
    +size_type size () const noexcept
     
    + + + + + + + + + +

    +Public Attributes

    +Iter data_
     
    +size_type column_idx_
     
    +size_type size_
     
    +size_type ld_
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/views/dense_column_view.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1dense__matrix__column__view__coll__graph.map b/doxygen/classdr_1_1sp_1_1dense__matrix__column__view__coll__graph.map new file mode 100644 index 0000000000..17f59a267b --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1dense__matrix__column__view__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/classdr_1_1sp_1_1dense__matrix__column__view__coll__graph.md5 b/doxygen/classdr_1_1sp_1_1dense__matrix__column__view__coll__graph.md5 new file mode 100644 index 0000000000..f0ca41c607 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1dense__matrix__column__view__coll__graph.md5 @@ -0,0 +1 @@ +86a6c157873e4335a9edb520f6688572 \ No newline at end of file diff --git a/doxygen/classdr_1_1sp_1_1dense__matrix__column__view__coll__graph.png b/doxygen/classdr_1_1sp_1_1dense__matrix__column__view__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..e01ce5592e3b27ce7ac9baef2d969c510f88535c GIT binary patch literal 5615 zcmZWt2RPgBw~yJ{vu5oWwW_wNQ9JezwTn`lT8+IGHA+#dYEwngs!h}^mD;uUikaA> z=6!qbeeU!B|L-G`uSnka`<`ZB-IN20{n~LIP7$(gUyU;5Y6zK6suCyGjEu z_|_V#N|2ksKY56f6bR%_5lrc^f$s)FUDNSfEbBH zRSEnS`!(bJb^Yf_;`9PX>iOAf6LP$&T0C9ZP&e52S!MavY_(Q}!7DXoj&?>?t8nay zP)|nN;E?zn+XfP@Uy#EfnZ(4v!8Pez5ieP<)&;NDb>iFMtpEM68i4BG64JdZ8|a%< zYSUnu3}wod@nMfmg2K52yXjtCCb}&I?ynylYhB5O3Ie@Ihget{JB;&9cFHb$cP9W-qhIFuWz@sw47~Q-o!RH zHqT`AJHl*m2iyANIJ)MrM7gw(`yvl{A1?eJD^Ocs#MJtG>>sHVlWhVtQ7TH?H zQZZ7P(}?I4X~^bIL)OQHpLb(q!(sx-lhCZN=|8ObW7e*YGiR3IALcPoA&RV-G@ZJ6 z*92bqI73sXt&Cr(YS{Y2>Kb?Q@P@)8U!4q-b$;KKjMd)o0(oRTUefQpLtcnSe3KV~cK8fZt zwOVd%7DL&Xx^l8oKjI$c7f$}3t74W8zWBQZtaJeTd~R;29k9Kz%}74m z)OFd=U2yX)in>#%;W6V|VD*LW`=n<^VHg+iGjO^JH8T8JX(VqyA~Apz%O{1waoa_c zxwAF3GhYhV%&p?JJ$WfH*&Bx~2iG5yxLi*XP#l(-bS?@@cWX|VqU>j*N?F7cxQne_ zmw7i7qc${RH+|anTYN3EO(c|XP9gvz)Ypc*N`~Xh3_rl+I)yz$f23n6AZCD1bs~pM#V6`M8Qq&;7Hho4L`?WpDs!bx8d%nCtN8}<0()ZS*C?c9 z`rRPB`Z}`t24m0kjU!neGA9=CN)W|~eJh?WZWxsK*I-Y%cE^|YaSu5XX#SV#|A+9w z^N?y&L$16K`-9MdF3h~nqVtyIuS_-U_MI3g`LCS+f6cM; z{h*#)^l5;G#(&`~TzSyaXF%@d+;IuJevdUNHKDSJr>Cdkj3bj^8Z4Qb6Q&on-y!Ul z9!TasQ|6ckjbR}Xjv5~ypKI%=8*OT_zRSS-!kZF5y`w|H$;s)VCaq00E`Wu+5I_s= zw+U{T`}VlNyx%$#Ai;}*a|?-~1KVm1p#_0>L!Pt`LgfVn<@fkFgZaSB3}dmLigdjbNS;^JvdO%D$a4t!5c=I*DUR#!Jt zuKaq;E#byXJ^ei{(R8GS=T6&Q>_y*SzL5Vf?r`dr9c5$?k+Ba@w%#~OV7$G)$x z&)w70`ug&Z`S;-L-PVhQj~}_XbaFI(eH&T^L_3>ZQZi$4(aOo$8K$AJ@{>Eat4H)Ss7w5LcibZ8WF=7!b+*3(RCaM?rL)d;<_HCJ?Mu*wH@|>D%$qmeNF-6Msg}on zNbutt*T%}q1fPYV^rg<|!(NU=D;t~69+r^LMwX_g41|&4APc;Fe16*%^$lQw=%$B! zjIlmIkay-0Szm2>gyCBTAi8Q=T4MoMM@KI|fBu~Dzy|;L_}FEtx>)rqV_CB_Cnx95 zY$H`bK)^?xTx}B*dJqZ0fRml2rDzr|a4PUMLL#Cyct>Yvrd){ZA*#OgZ*%Qko)1oCgfl_nnJPEKsfl)x9-K9IxrSs3!v}hR8%61lo07AXO^wQogC2OEMps?j(RhI6) zzF3cyAH%b=;Oq_#JYch1RQ_(CfV)ttiY=I}Aue+E2{W7wv zOX)5X6P9Ga2|rNQv-7Q-osG3M&MHQ7a(R7yD%C`0+oO$PUteD$zYH zbpLy?xH#JT$?xCyjg=euEyr-vi8;M%Kf5Trr5z5=YGZ55xvMK*;ufV|Ji;d}CH1pE z`ouO>y*r*>s;=spqvOxl6da#EeG)RR&-dlygwxzrl(D{Ljy*qbG8uPXa?1U zyGzrx&Y}_$`etS`g>^v}gXJQFj}D0m2nf#3&d3=Vo!$RjZ-u1*cSia~B|@dJy|0gO z2u+MWF6y5#G&jHd{rb47(Q}Ou)bm|Q_t4|*31sxlN!9SsP$&X%h126~ZyybX{mK+k z%?Z(&>DqkJW@hyDv<8Ez37NwzJG^*-8VtD>NlHr6%#~$gWMl+BltUuAX*6YUyS%E^ z`fP8>ywNifxHPN)sP7{F2M|?lZEfJF=^zz`$b7|U;>z@tl)?!bH#0%N8**|iL_|b^ zfq@yaK@Zo~*8CUTdlFgFedYn>30k&lT3O|_H<5I2qfk)*q}|FMbO|08qNj>AI0&(ClC)fzA4VrHSYudkrEIC8j9mC?Mad7xac^!Y+-(9Yyn z9ByvzN()4vO`;5!gtUCUh}+~BtYSTwpP!V6hsQy^qYs=h)+k^1i_;kI$jFGK{}E4T z6iH!qb#iZSFEjj{xcizFzHr~i$LB{P%U~0H+uh4cvBGc#6l1PDD58;HV z>dJwEE$#m0<>gbYLDI-HfzIyk$V?G?&!rALu(0oDak_ty^toxY%_cC?-_??f;xCxg zD~26-?%(ej9;T3%mIhq6cYNI4(Gi}UObN>0!`=ODx>5NUp!L4!p%dFsMu`{hD?dm8 zl2%7^A>gmouRY8*%Uv-B1_q1E%LVDIGNsMUzPqKRrTLYWq!JPm2>lP}de!nV&;4a( zl{XBW5?)QQbGmbLjyFwOT3YW?Q-78`dOUFpP^^)Wk)NruG9JhTfK}eGLxaak)O=(W z*hTm0(>JN9cjo8k0nq}P;Yn40r_TB0$&=X@zZ8(JzQe5d?|B3SY*%}ejLpnW9RlLf z7~QQo(1iG(QXQF6(v2dZ8#|Y+tS^hpq2!6rcDT2;w$xy-&6o3Fmkbg6gd`4O793%M z@d`8hEpq>CVEwCF&&x_Xg*2|t4=k*$*?SV0MBsECtP@o!R(VvgM?%ECs3G~Jw{NYs z$d4RE84Rl|=GFou6&~y9CAa&_o-N|c&dr(BI8Z=BE>~D$Vq(~MovdU_RiW*y1!GQ9 zA=i(lrl!C_du_5XU#qLxrKC&*L8;i-+xJx4BIB8y5(7`B?7_n992@~J(VOX8hfoJ6 zCu>kuAEdmZe*92TP*gN&aAy-27ymsmk&=|u-srUsnKOB-97nU6edy*4xahO-SA|w# zbA5e91qJL~#3}R1$%)HsLsDoc1VDtJOw6J+P%2&U=`v7gQ86(J8k!%;oEoc3_#o&| z00jUgKjWk2?l=NM!Y%LS);}mlVG$9NX77qe6=h|ywaydOj-y;3va?~Dn$U+2O_{T& zW@mrRBLa@2{*k*n8kLlm_S*V=?*uc4%yMfbXlo6+I9rapKUw2QB`7FJO-uXD@6c{O zU>8A3I}Sji?(HouB_+i}O$dbM%}MWvckigx)zv4z+T4=%-m&`q=^t=YFPkg!0u~}7 zBGyiWHb;tIMMiFp$pDQ@V3JnR)1$1bs{^u1PES8o_`vYAa4>~cOf1!`{>A`>D;%pY0L1U|L#hpoPbHn`yG^s6+XecM={tresa&q!EK&PNfm6Ve5z|2aS zKYe={sFz%vRJhEzatzYWU9<>p$}dz{v-=Z53}Cqvqw zkEuJh2m}P(0>T{6AXYZYhsw#x;Ww>$jYmYItE(%otxXDYt5mE&a=$PN#j52_L`c+z;58%e5tRu2V`+q zF8J<{m~wS>b(0J2#P8p4v$BvQ#TtMP+sDV#8X6>looVzx<^{zH?4LfkYoNG*;eoV7 zUtR`62nh*SIau3rWCA8@ooT^9VNoaKoJu2&|JkpM2P#^jm2}hN0d@l)VyddD+SxdO zMFOtjE0`>ZyH3ACAY@pAjwmccuHaQ&GbO6wTU$=lgm|6NWV=E-6^4bnJV&i!y8=e~ z`iF6DYXKYi(W~DD1O&d;)%^gNb9=8+xapZ4(8+9SYD(N{Xkb7+Q|HPdD43v;E(nxx z=vnWn3?Qb^O4x)2m;+c?Sm5I0>*?yY4dpA+%lM17x3>d2xXEj5%q%EiM|jBS$Q)CH zDZ|c=i$wrh3}8Cu_3O5YiHX&ip%hoVqo`(|lG@r-ul0fbtJ4Lq^CL$vj4-Z#PLRT_ zgGu$h5G4TUb98kruCCT|<0smf4;>#j{If@Cn4J^0E`uasiC#CHIaQc6S!Vr z|9X+g6t@jWIi+)E;A?@m%J!MxtRAGIqw57$lur2h?Z=NFOG--S0l2)}AP2SD-Px&V zG2Y%DX7bJMf%73C@3`@o%Cob78(C{EFqT^w6wH8;^{m84ozHL1;oU}0?#)~;#uTc zk%ghav_}JzXaww9PAl;OD=axf*p@JwjD-uJvsAytyYX{M3KbQXrq#s>+PvBOO1Sma4-?1tNPnFg4?$tFJtz{j4Xey4fy)|AN)7eZ=&UJ1J1MkJ0-90?mz~Bjt{95N< zy#N!U{k3$<<;~4fiLz=DKBLN2%bRmrmcTtMfE93~e;XWr0XR!UaWN+t4gqhZ{6ZKP z56@#`hz)TqZv?gg7*j=hmozn*x;-yr1A*cKoeikum6a7h_~GrY=$J?%S_X?xw8Xvt z6e%oBe|d)U{bFv{f7XtLr;A4~zen6<66ja_R# + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::sp::dense_matrix_row_accessor< T, Iter > Member List
    +
    +
    + +

    This is the complete list of members for dr::sp::dense_matrix_row_accessor< T, Iter >, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + +
    const_iterator_accessor typedef (defined in dr::sp::dense_matrix_row_accessor< T, Iter >)dr::sp::dense_matrix_row_accessor< T, Iter >
    dense_matrix_row_accessor() noexcept=default (defined in dr::sp::dense_matrix_row_accessor< T, Iter >)dr::sp::dense_matrix_row_accessor< T, Iter >
    dense_matrix_row_accessor(const dense_matrix_row_accessor &) noexcept=default (defined in dr::sp::dense_matrix_row_accessor< T, Iter >)dr::sp::dense_matrix_row_accessor< T, Iter >
    dense_matrix_row_accessor(Iter data, std::size_t i, std::size_t j) noexcept (defined in dr::sp::dense_matrix_row_accessor< T, Iter >)dr::sp::dense_matrix_row_accessor< T, Iter >inline
    difference_type typedef (defined in dr::sp::dense_matrix_row_accessor< T, Iter >)dr::sp::dense_matrix_row_accessor< T, Iter >
    iterator_accessor typedef (defined in dr::sp::dense_matrix_row_accessor< T, Iter >)dr::sp::dense_matrix_row_accessor< T, Iter >
    iterator_category typedef (defined in dr::sp::dense_matrix_row_accessor< T, Iter >)dr::sp::dense_matrix_row_accessor< T, Iter >
    key_type typedef (defined in dr::sp::dense_matrix_row_accessor< T, Iter >)dr::sp::dense_matrix_row_accessor< T, Iter >
    nonconst_iterator_accessor typedef (defined in dr::sp::dense_matrix_row_accessor< T, Iter >)dr::sp::dense_matrix_row_accessor< T, Iter >
    operator*() const noexcept (defined in dr::sp::dense_matrix_row_accessor< T, Iter >)dr::sp::dense_matrix_row_accessor< T, Iter >inline
    operator+=(difference_type offset) noexcept (defined in dr::sp::dense_matrix_row_accessor< T, Iter >)dr::sp::dense_matrix_row_accessor< T, Iter >inline
    operator-(const iterator_accessor &other) const noexcept (defined in dr::sp::dense_matrix_row_accessor< T, Iter >)dr::sp::dense_matrix_row_accessor< T, Iter >inline
    operator<(const iterator_accessor &other) const noexcept (defined in dr::sp::dense_matrix_row_accessor< T, Iter >)dr::sp::dense_matrix_row_accessor< T, Iter >inline
    operator=(const dense_matrix_row_accessor &) noexcept=default (defined in dr::sp::dense_matrix_row_accessor< T, Iter >)dr::sp::dense_matrix_row_accessor< T, Iter >
    operator==(const iterator_accessor &other) const noexcept (defined in dr::sp::dense_matrix_row_accessor< T, Iter >)dr::sp::dense_matrix_row_accessor< T, Iter >inline
    reference typedef (defined in dr::sp::dense_matrix_row_accessor< T, Iter >)dr::sp::dense_matrix_row_accessor< T, Iter >
    scalar_reference typedef (defined in dr::sp::dense_matrix_row_accessor< T, Iter >)dr::sp::dense_matrix_row_accessor< T, Iter >
    scalar_value_type typedef (defined in dr::sp::dense_matrix_row_accessor< T, Iter >)dr::sp::dense_matrix_row_accessor< T, Iter >
    size_type typedef (defined in dr::sp::dense_matrix_row_accessor< T, Iter >)dr::sp::dense_matrix_row_accessor< T, Iter >
    value_type typedef (defined in dr::sp::dense_matrix_row_accessor< T, Iter >)dr::sp::dense_matrix_row_accessor< T, Iter >
    ~dense_matrix_row_accessor() noexcept=default (defined in dr::sp::dense_matrix_row_accessor< T, Iter >)dr::sp::dense_matrix_row_accessor< T, Iter >
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1dense__matrix__row__accessor.html b/doxygen/classdr_1_1sp_1_1dense__matrix__row__accessor.html new file mode 100644 index 0000000000..e7d1bcc25b --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1dense__matrix__row__accessor.html @@ -0,0 +1,156 @@ + + + + + + + +Distributed Ranges: dr::sp::dense_matrix_row_accessor< T, Iter > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::sp::dense_matrix_row_accessor< T, Iter > Class Template Reference
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Types

    +using size_type = std::size_t
     
    +using difference_type = std::ptrdiff_t
     
    +using scalar_value_type = std::iter_value_t< Iter >
     
    +using scalar_reference = std::iter_reference_t< Iter >
     
    +using value_type = dr::sp::matrix_entry< scalar_value_type, std::size_t >
     
    +using reference = dr::sp::matrix_ref< T, std::size_t, scalar_reference >
     
    +using iterator_category = std::random_access_iterator_tag
     
    +using iterator_accessor = dense_matrix_row_accessor
     
    +using const_iterator_accessor = iterator_accessor
     
    +using nonconst_iterator_accessor = iterator_accessor
     
    +using key_type = dr::index<>
     
    + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    +constexpr dense_matrix_row_accessor (const dense_matrix_row_accessor &) noexcept=default
     
    +constexpr dense_matrix_row_accessoroperator= (const dense_matrix_row_accessor &) noexcept=default
     
    +constexpr dense_matrix_row_accessor (Iter data, std::size_t i, std::size_t j) noexcept
     
    +constexpr dense_matrix_row_accessoroperator+= (difference_type offset) noexcept
     
    +constexpr bool operator== (const iterator_accessor &other) const noexcept
     
    +constexpr difference_type operator- (const iterator_accessor &other) const noexcept
     
    +constexpr bool operator< (const iterator_accessor &other) const noexcept
     
    +constexpr reference operator* () const noexcept
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/views/dense_row_view.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1dense__matrix__row__view-members.html b/doxygen/classdr_1_1sp_1_1dense__matrix__row__view-members.html new file mode 100644 index 0000000000..898908a7b0 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1dense__matrix__row__view-members.html @@ -0,0 +1,102 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::sp::dense_matrix_row_view< T, Iter > Member List
    +
    +
    + +

    This is the complete list of members for dr::sp::dense_matrix_row_view< T, Iter >, including all inherited members.

    + + + + + + + + + + + + + + + +
    begin() const (defined in dr::sp::dense_matrix_row_view< T, Iter >)dr::sp::dense_matrix_row_view< T, Iter >inline
    data_ (defined in dr::sp::dense_matrix_row_view< T, Iter >)dr::sp::dense_matrix_row_view< T, Iter >
    dense_matrix_row_view(Iter data, size_type row_idx, size_type size) (defined in dr::sp::dense_matrix_row_view< T, Iter >)dr::sp::dense_matrix_row_view< T, Iter >inline
    difference_type typedef (defined in dr::sp::dense_matrix_row_view< T, Iter >)dr::sp::dense_matrix_row_view< T, Iter >
    end() const (defined in dr::sp::dense_matrix_row_view< T, Iter >)dr::sp::dense_matrix_row_view< T, Iter >inline
    iterator typedef (defined in dr::sp::dense_matrix_row_view< T, Iter >)dr::sp::dense_matrix_row_view< T, Iter >
    key_type typedef (defined in dr::sp::dense_matrix_row_view< T, Iter >)dr::sp::dense_matrix_row_view< T, Iter >
    map_type typedef (defined in dr::sp::dense_matrix_row_view< T, Iter >)dr::sp::dense_matrix_row_view< T, Iter >
    operator[](size_type idx) (defined in dr::sp::dense_matrix_row_view< T, Iter >)dr::sp::dense_matrix_row_view< T, Iter >inline
    row_idx_ (defined in dr::sp::dense_matrix_row_view< T, Iter >)dr::sp::dense_matrix_row_view< T, Iter >
    scalar_reference typedef (defined in dr::sp::dense_matrix_row_view< T, Iter >)dr::sp::dense_matrix_row_view< T, Iter >
    size() const noexcept (defined in dr::sp::dense_matrix_row_view< T, Iter >)dr::sp::dense_matrix_row_view< T, Iter >inline
    size_ (defined in dr::sp::dense_matrix_row_view< T, Iter >)dr::sp::dense_matrix_row_view< T, Iter >
    size_type typedef (defined in dr::sp::dense_matrix_row_view< T, Iter >)dr::sp::dense_matrix_row_view< T, Iter >
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1dense__matrix__row__view.html b/doxygen/classdr_1_1sp_1_1dense__matrix__row__view.html new file mode 100644 index 0000000000..3de45cfa89 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1dense__matrix__row__view.html @@ -0,0 +1,154 @@ + + + + + + + +Distributed Ranges: dr::sp::dense_matrix_row_view< T, Iter > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::sp::dense_matrix_row_view< T, Iter > Class Template Reference
    +
    +
    +
    +Collaboration diagram for dr::sp::dense_matrix_row_view< T, Iter >:
    +
    +
    Collaboration graph
    + + + + +
    [legend]
    + + + + + + + + + + + + + + +

    +Public Types

    +using size_type = std::size_t
     
    +using difference_type = std::ptrdiff_t
     
    +using scalar_reference = std::iter_reference_t< Iter >
     
    +using key_type = dr::index<>
     
    +using map_type = T
     
    +using iterator = dense_matrix_row_iterator< T, Iter >
     
    + + + + + + + + + + + +

    +Public Member Functions

    dense_matrix_row_view (Iter data, size_type row_idx, size_type size)
     
    +scalar_reference operator[] (size_type idx)
     
    +iterator begin () const
     
    +iterator end () const
     
    +size_type size () const noexcept
     
    + + + + + + + +

    +Public Attributes

    +Iter data_
     
    +size_type row_idx_
     
    +size_type size_
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/views/dense_row_view.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1dense__matrix__row__view__coll__graph.map b/doxygen/classdr_1_1sp_1_1dense__matrix__row__view__coll__graph.map new file mode 100644 index 0000000000..5978a484e5 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1dense__matrix__row__view__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/classdr_1_1sp_1_1dense__matrix__row__view__coll__graph.md5 b/doxygen/classdr_1_1sp_1_1dense__matrix__row__view__coll__graph.md5 new file mode 100644 index 0000000000..74501e52be --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1dense__matrix__row__view__coll__graph.md5 @@ -0,0 +1 @@ +1137af73c131f7c89a3577c3626fa635 \ No newline at end of file diff --git a/doxygen/classdr_1_1sp_1_1dense__matrix__row__view__coll__graph.png b/doxygen/classdr_1_1sp_1_1dense__matrix__row__view__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..9973ff572757ec636adb16cc68ee093e45481b95 GIT binary patch literal 5262 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 + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::sp::dense_matrix_view< T, Iter > Member List
    +
    +
    + +

    This is the complete list of members for dr::sp::dense_matrix_view< T, Iter >, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + +
    begin() const (defined in dr::sp::dense_matrix_view< T, Iter >)dr::sp::dense_matrix_view< T, Iter >inline
    column(size_type column_index) const (defined in dr::sp::dense_matrix_view< T, Iter >)dr::sp::dense_matrix_view< T, Iter >inline
    data() const (defined in dr::sp::dense_matrix_view< T, Iter >)dr::sp::dense_matrix_view< T, Iter >inline
    dense_matrix_view(Iter data, key_type shape, size_type ld, size_type rank) (defined in dr::sp::dense_matrix_view< T, Iter >)dr::sp::dense_matrix_view< T, Iter >inline
    dense_matrix_view(Iter data, key_type shape, key_type idx_offset, size_type ld, size_type rank) (defined in dr::sp::dense_matrix_view< T, Iter >)dr::sp::dense_matrix_view< T, Iter >inline
    dense_matrix_view(dense_matrix< T, Allocator > &m) (defined in dr::sp::dense_matrix_view< T, Iter >)dr::sp::dense_matrix_view< T, Iter >inline
    difference_type typedef (defined in dr::sp::dense_matrix_view< T, Iter >)dr::sp::dense_matrix_view< T, Iter >
    end() const (defined in dr::sp::dense_matrix_view< T, Iter >)dr::sp::dense_matrix_view< T, Iter >inline
    iterator typedef (defined in dr::sp::dense_matrix_view< T, Iter >)dr::sp::dense_matrix_view< T, Iter >
    key_type typedef (defined in dr::sp::dense_matrix_view< T, Iter >)dr::sp::dense_matrix_view< T, Iter >
    ld() const (defined in dr::sp::dense_matrix_view< T, Iter >)dr::sp::dense_matrix_view< T, Iter >inline
    local() const (defined in dr::sp::dense_matrix_view< T, Iter >)dr::sp::dense_matrix_view< T, Iter >inline
    map_type typedef (defined in dr::sp::dense_matrix_view< T, Iter >)dr::sp::dense_matrix_view< T, Iter >
    operator[](key_type idx) const (defined in dr::sp::dense_matrix_view< T, Iter >)dr::sp::dense_matrix_view< T, Iter >inline
    rank() const (defined in dr::sp::dense_matrix_view< T, Iter >)dr::sp::dense_matrix_view< T, Iter >inline
    reference typedef (defined in dr::sp::dense_matrix_view< T, Iter >)dr::sp::dense_matrix_view< T, Iter >
    row(size_type row_index) const (defined in dr::sp::dense_matrix_view< T, Iter >)dr::sp::dense_matrix_view< T, Iter >inline
    scalar_reference typedef (defined in dr::sp::dense_matrix_view< T, Iter >)dr::sp::dense_matrix_view< T, Iter >
    shape() const noexcept (defined in dr::sp::dense_matrix_view< T, Iter >)dr::sp::dense_matrix_view< T, Iter >inline
    size() const noexcept (defined in dr::sp::dense_matrix_view< T, Iter >)dr::sp::dense_matrix_view< T, Iter >inline
    size_type typedef (defined in dr::sp::dense_matrix_view< T, Iter >)dr::sp::dense_matrix_view< T, Iter >
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1dense__matrix__view.html b/doxygen/classdr_1_1sp_1_1dense__matrix__view.html new file mode 100644 index 0000000000..55bff2dad3 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1dense__matrix__view.html @@ -0,0 +1,182 @@ + + + + + + + +Distributed Ranges: dr::sp::dense_matrix_view< T, Iter > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::sp::dense_matrix_view< T, Iter > Class Template Reference
    +
    +
    +
    +Inheritance diagram for dr::sp::dense_matrix_view< T, Iter >:
    +
    +
    Inheritance graph
    + + + + +
    [legend]
    +
    +Collaboration diagram for dr::sp::dense_matrix_view< T, Iter >:
    +
    +
    Collaboration graph
    + + + + +
    [legend]
    + + + + + + + + + + + + + + + + +

    +Public Types

    +using size_type = std::size_t
     
    +using difference_type = std::ptrdiff_t
     
    +using scalar_reference = std::iter_reference_t< Iter >
     
    +using reference = dr::sp::matrix_ref< T, std::size_t, scalar_reference >
     
    +using key_type = dr::index<>
     
    +using map_type = T
     
    +using iterator = dense_matrix_view_iterator< T, Iter >
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    dense_matrix_view (Iter data, key_type shape, size_type ld, size_type rank)
     
    dense_matrix_view (Iter data, key_type shape, key_type idx_offset, size_type ld, size_type rank)
     
    +template<typename Allocator >
    +requires (std::is_same_v<typename std::allocator_traits<Allocator>::pointer, Iter>)
     dense_matrix_view (dense_matrix< T, Allocator > &m)
     
    +key_type shape () const noexcept
     
    +size_type size () const noexcept
     
    +scalar_reference operator[] (key_type idx) const
     
    +iterator begin () const
     
    +iterator end () const
     
    +auto row (size_type row_index) const
     
    +auto column (size_type column_index) const
     
    +Iter data () const
     
    +std::size_t rank () const
     
    +size_type ld () const
     
    +auto local () const
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/views/dense_matrix_view.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1dense__matrix__view__coll__graph.map b/doxygen/classdr_1_1sp_1_1dense__matrix__view__coll__graph.map new file mode 100644 index 0000000000..e7d4c559c8 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1dense__matrix__view__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/classdr_1_1sp_1_1dense__matrix__view__coll__graph.md5 b/doxygen/classdr_1_1sp_1_1dense__matrix__view__coll__graph.md5 new file mode 100644 index 0000000000..4b218fe147 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1dense__matrix__view__coll__graph.md5 @@ -0,0 +1 @@ +1764ab512137a5ba56a131edb75658b2 \ No newline at end of file diff --git a/doxygen/classdr_1_1sp_1_1dense__matrix__view__coll__graph.png b/doxygen/classdr_1_1sp_1_1dense__matrix__view__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..020be4de628238c41a8ce74ba107716a22100111 GIT binary patch literal 8653 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 LQdcaMH}?A + + + diff --git a/doxygen/classdr_1_1sp_1_1dense__matrix__view__inherit__graph.md5 b/doxygen/classdr_1_1sp_1_1dense__matrix__view__inherit__graph.md5 new file mode 100644 index 0000000000..4b218fe147 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1dense__matrix__view__inherit__graph.md5 @@ -0,0 +1 @@ +1764ab512137a5ba56a131edb75658b2 \ No newline at end of file diff --git a/doxygen/classdr_1_1sp_1_1dense__matrix__view__inherit__graph.png b/doxygen/classdr_1_1sp_1_1dense__matrix__view__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..020be4de628238c41a8ce74ba107716a22100111 GIT binary patch literal 8653 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 LQdcaMH}?A + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::sp::device_allocator< T, Alignment > Member List
    +
    +
    + +

    This is the complete list of members for dr::sp::device_allocator< T, Alignment >, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + +
    allocate(std::size_t size) (defined in dr::sp::device_allocator< T, Alignment >)dr::sp::device_allocator< T, Alignment >inline
    const_pointer typedef (defined in dr::sp::device_allocator< T, Alignment >)dr::sp::device_allocator< T, Alignment >
    const_reference typedef (defined in dr::sp::device_allocator< T, Alignment >)dr::sp::device_allocator< T, Alignment >
    deallocate(pointer ptr, std::size_t n) (defined in dr::sp::device_allocator< T, Alignment >)dr::sp::device_allocator< T, Alignment >inline
    device_allocator(const device_allocator< U, Alignment > &other) noexcept (defined in dr::sp::device_allocator< T, Alignment >)dr::sp::device_allocator< T, Alignment >inline
    device_allocator(const sycl::queue &q) noexcept (defined in dr::sp::device_allocator< T, Alignment >)dr::sp::device_allocator< T, Alignment >inline
    device_allocator(const sycl::context &ctxt, const sycl::device &dev) noexcept (defined in dr::sp::device_allocator< T, Alignment >)dr::sp::device_allocator< T, Alignment >inline
    device_allocator(const device_allocator &)=default (defined in dr::sp::device_allocator< T, Alignment >)dr::sp::device_allocator< T, Alignment >
    difference_type typedef (defined in dr::sp::device_allocator< T, Alignment >)dr::sp::device_allocator< T, Alignment >
    get_context() const noexcept (defined in dr::sp::device_allocator< T, Alignment >)dr::sp::device_allocator< T, Alignment >inline
    get_device() const noexcept (defined in dr::sp::device_allocator< T, Alignment >)dr::sp::device_allocator< T, Alignment >inline
    is_always_equal typedef (defined in dr::sp::device_allocator< T, Alignment >)dr::sp::device_allocator< T, Alignment >
    operator!=(const device_allocator &) const =default (defined in dr::sp::device_allocator< T, Alignment >)dr::sp::device_allocator< T, Alignment >
    operator=(const device_allocator &)=default (defined in dr::sp::device_allocator< T, Alignment >)dr::sp::device_allocator< T, Alignment >
    operator==(const device_allocator &) const =default (defined in dr::sp::device_allocator< T, Alignment >)dr::sp::device_allocator< T, Alignment >
    pointer typedef (defined in dr::sp::device_allocator< T, Alignment >)dr::sp::device_allocator< T, Alignment >
    reference typedef (defined in dr::sp::device_allocator< T, Alignment >)dr::sp::device_allocator< T, Alignment >
    size_type typedef (defined in dr::sp::device_allocator< T, Alignment >)dr::sp::device_allocator< T, Alignment >
    value_type typedef (defined in dr::sp::device_allocator< T, Alignment >)dr::sp::device_allocator< T, Alignment >
    ~device_allocator()=default (defined in dr::sp::device_allocator< T, Alignment >)dr::sp::device_allocator< T, Alignment >
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1device__allocator.html b/doxygen/classdr_1_1sp_1_1device__allocator.html new file mode 100644 index 0000000000..5b22ccaa43 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1device__allocator.html @@ -0,0 +1,163 @@ + + + + + + + +Distributed Ranges: dr::sp::device_allocator< T, Alignment > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::sp::device_allocator< T, Alignment > Class Template Reference
    +
    +
    + + + + +

    +Classes

    struct  rebind
     
    + + + + + + + + + + + + + + + + + +

    +Public Types

    +using value_type = T
     
    +using pointer = device_ptr< T >
     
    +using const_pointer = device_ptr< T >
     
    +using reference = device_ref< T >
     
    +using const_reference = device_ref< const T >
     
    +using size_type = std::size_t
     
    +using difference_type = std::ptrdiff_t
     
    +using is_always_equal = std::false_type
     
    + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    +template<typename U >
     device_allocator (const device_allocator< U, Alignment > &other) noexcept
     
    device_allocator (const sycl::queue &q) noexcept
     
    device_allocator (const sycl::context &ctxt, const sycl::device &dev) noexcept
     
    device_allocator (const device_allocator &)=default
     
    +device_allocatoroperator= (const device_allocator &)=default
     
    +pointer allocate (std::size_t size)
     
    +void deallocate (pointer ptr, std::size_t n)
     
    +bool operator== (const device_allocator &) const =default
     
    +bool operator!= (const device_allocator &) const =default
     
    +sycl::device get_device () const noexcept
     
    +sycl::context get_context () const noexcept
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/allocators.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1device__ptr-members.html b/doxygen/classdr_1_1sp_1_1device__ptr-members.html new file mode 100644 index 0000000000..cb5a66fb67 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1device__ptr-members.html @@ -0,0 +1,130 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::sp::device_ptr< T > Member List
    +
    +
    + +

    This is the complete list of members for dr::sp::device_ptr< T >, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    const_pointer typedef (defined in dr::sp::device_ptr< T >)dr::sp::device_ptr< T >
    const_pointer (defined in dr::sp::device_ptr< T >)dr::sp::device_ptr< T >
    device_ptr(T *pointer) noexcept (defined in dr::sp::device_ptr< T >)dr::sp::device_ptr< T >inline
    device_ptr() noexcept=default (defined in dr::sp::device_ptr< T >)dr::sp::device_ptr< T >
    device_ptr(const device_ptr &) noexcept=default (defined in dr::sp::device_ptr< T >)dr::sp::device_ptr< T >
    device_ptr(std::nullptr_t) noexcept (defined in dr::sp::device_ptr< T >)dr::sp::device_ptr< T >inline
    difference_type typedef (defined in dr::sp::device_ptr< T >)dr::sp::device_ptr< T >
    get_raw_pointer() const noexcept (defined in dr::sp::device_ptr< T >)dr::sp::device_ptr< T >inline
    iterator_category typedef (defined in dr::sp::device_ptr< T >)dr::sp::device_ptr< T >
    local() const noexcept (defined in dr::sp::device_ptr< T >)dr::sp::device_ptr< T >inline
    nonconst_pointer typedef (defined in dr::sp::device_ptr< T >)dr::sp::device_ptr< T >
    nonconst_pointer (defined in dr::sp::device_ptr< T >)dr::sp::device_ptr< T >
    operator const_pointer() const noexcept (defined in dr::sp::device_ptr< T >)dr::sp::device_ptr< T >inline
    operator device_ptr< const void >() const noexcept (defined in dr::sp::device_ptr< T >)dr::sp::device_ptr< T >inline
    operator device_ptr< void >() const noexcept (defined in dr::sp::device_ptr< T >)dr::sp::device_ptr< T >inline
    operator!=(std::nullptr_t) const noexcept (defined in dr::sp::device_ptr< T >)dr::sp::device_ptr< T >inline
    operator!=(const device_ptr &) const noexcept=default (defined in dr::sp::device_ptr< T >)dr::sp::device_ptr< T >
    operator*() const noexcept (defined in dr::sp::device_ptr< T >)dr::sp::device_ptr< T >inline
    operator+(difference_type offset) const noexcept (defined in dr::sp::device_ptr< T >)dr::sp::device_ptr< T >inline
    operator+ (defined in dr::sp::device_ptr< T >)dr::sp::device_ptr< T >friend
    operator++() noexcept (defined in dr::sp::device_ptr< T >)dr::sp::device_ptr< T >inline
    operator++(int) noexcept (defined in dr::sp::device_ptr< T >)dr::sp::device_ptr< T >inline
    operator+=(difference_type offset) noexcept (defined in dr::sp::device_ptr< T >)dr::sp::device_ptr< T >inline
    operator-(difference_type offset) const noexcept (defined in dr::sp::device_ptr< T >)dr::sp::device_ptr< T >inline
    operator-(const_pointer other) const noexcept (defined in dr::sp::device_ptr< T >)dr::sp::device_ptr< T >inline
    operator-(pointer other) const noexcept (defined in dr::sp::device_ptr< T >)dr::sp::device_ptr< T >inline
    operator--() noexcept (defined in dr::sp::device_ptr< T >)dr::sp::device_ptr< T >inline
    operator--(int) noexcept (defined in dr::sp::device_ptr< T >)dr::sp::device_ptr< T >inline
    operator-=(difference_type offset) noexcept (defined in dr::sp::device_ptr< T >)dr::sp::device_ptr< T >inline
    operator<(const_pointer other) const noexcept (defined in dr::sp::device_ptr< T >)dr::sp::device_ptr< T >inline
    operator<=(const_pointer other) const noexcept (defined in dr::sp::device_ptr< T >)dr::sp::device_ptr< T >inline
    operator=(const device_ptr &) noexcept=default (defined in dr::sp::device_ptr< T >)dr::sp::device_ptr< T >
    operator=(std::nullptr_t) noexcept (defined in dr::sp::device_ptr< T >)dr::sp::device_ptr< T >inline
    operator==(std::nullptr_t) const noexcept (defined in dr::sp::device_ptr< T >)dr::sp::device_ptr< T >inline
    operator==(const device_ptr &) const noexcept=default (defined in dr::sp::device_ptr< T >)dr::sp::device_ptr< T >
    operator>(const_pointer other) const noexcept (defined in dr::sp::device_ptr< T >)dr::sp::device_ptr< T >inline
    operator>=(const_pointer other) const noexcept (defined in dr::sp::device_ptr< T >)dr::sp::device_ptr< T >inline
    operator[](difference_type offset) const noexcept (defined in dr::sp::device_ptr< T >)dr::sp::device_ptr< T >inline
    pointer typedef (defined in dr::sp::device_ptr< T >)dr::sp::device_ptr< T >
    reference typedef (defined in dr::sp::device_ptr< T >)dr::sp::device_ptr< T >
    value_type typedef (defined in dr::sp::device_ptr< T >)dr::sp::device_ptr< T >
    ~device_ptr() noexcept=default (defined in dr::sp::device_ptr< T >)dr::sp::device_ptr< T >
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1device__ptr.html b/doxygen/classdr_1_1sp_1_1device__ptr.html new file mode 100644 index 0000000000..65bfb92af7 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1device__ptr.html @@ -0,0 +1,227 @@ + + + + + + + +Distributed Ranges: dr::sp::device_ptr< T > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::sp::device_ptr< T > Class Template Reference
    +
    +
    + + + + + + + + + + + + + + + + +

    +Public Types

    +using value_type = T
     
    +using difference_type = std::ptrdiff_t
     
    +using pointer = device_ptr< T >
     
    +using const_pointer = device_ptr< std::add_const_t< T > >
     
    +using nonconst_pointer = device_ptr< std::remove_const_t< T > >
     
    +using iterator_category = std::random_access_iterator_tag
     
    +using reference = device_ref< T >
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    device_ptr (T *pointer) noexcept
     
    device_ptr (const device_ptr &) noexcept=default
     
    +device_ptroperator= (const device_ptr &) noexcept=default
     
    device_ptr (std::nullptr_t) noexcept
     
    +device_ptroperator= (std::nullptr_t) noexcept
     
    operator device_ptr< void > () const noexcept
     
    operator device_ptr< const void > () const noexcept
     
    operator const_pointer () const noexcept
     
    +bool operator== (std::nullptr_t) const noexcept
     
    +bool operator!= (std::nullptr_t) const noexcept
     
    +bool operator== (const device_ptr &) const noexcept=default
     
    +bool operator!= (const device_ptr &) const noexcept=default
     
    +pointer operator+ (difference_type offset) const noexcept
     
    +pointer operator- (difference_type offset) const noexcept
     
    +difference_type operator- (const_pointer other) const noexcept
     
    +difference_type operator- (pointer other) const noexcept
     
    +bool operator< (const_pointer other) const noexcept
     
    +bool operator> (const_pointer other) const noexcept
     
    +bool operator<= (const_pointer other) const noexcept
     
    +bool operator>= (const_pointer other) const noexcept
     
    +pointeroperator++ () noexcept
     
    +pointer operator++ (int) noexcept
     
    +pointeroperator-- () noexcept
     
    +pointer operator-- (int) noexcept
     
    +pointeroperator+= (difference_type offset) noexcept
     
    +pointeroperator-= (difference_type offset) noexcept
     
    +reference operator* () const noexcept
     
    +reference operator[] (difference_type offset) const noexcept
     
    +T * get_raw_pointer () const noexcept
     
    +T * local () const noexcept
     
    + + + + + +

    +Public Attributes

    +friend const_pointer
     
    +friend nonconst_pointer
     
    + + + +

    +Friends

    +pointer operator+ (difference_type n, pointer iter)
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/device_ptr.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1device__ref-members.html b/doxygen/classdr_1_1sp_1_1device__ref-members.html new file mode 100644 index 0000000000..29e8f3f78c --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1device__ref-members.html @@ -0,0 +1,95 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::sp::device_ref< T > Member List
    +
    +
    + +

    This is the complete list of members for dr::sp::device_ref< T >, including all inherited members.

    + + + + + + + + +
    device_ref()=delete (defined in dr::sp::device_ref< T >)dr::sp::device_ref< T >
    device_ref(const device_ref &)=default (defined in dr::sp::device_ref< T >)dr::sp::device_ref< T >
    device_ref(T *pointer) (defined in dr::sp::device_ref< T >)dr::sp::device_ref< T >inline
    operator T() const (defined in dr::sp::device_ref< T >)dr::sp::device_ref< T >inline
    operator=(const T &value) const (defined in dr::sp::device_ref< T >)dr::sp::device_ref< T >inline
    operator=(const device_ref &other) const (defined in dr::sp::device_ref< T >)dr::sp::device_ref< T >inline
    ~device_ref()=default (defined in dr::sp::device_ref< T >)dr::sp::device_ref< T >
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1device__ref.html b/doxygen/classdr_1_1sp_1_1device__ref.html new file mode 100644 index 0000000000..8b9aafbb00 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1device__ref.html @@ -0,0 +1,110 @@ + + + + + + + +Distributed Ranges: dr::sp::device_ref< T > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::sp::device_ref< T > Class Template Reference
    +
    +
    + + + + + + + + + + + + +

    +Public Member Functions

    device_ref (const device_ref &)=default
     
    device_ref (T *pointer)
     
    operator T () const
     
    +device_ref operator= (const T &value) const
     
    +device_ref operator= (const device_ref &other) const
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/device_ref.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1device__span-members.html b/doxygen/classdr_1_1sp_1_1device__span-members.html new file mode 100644 index 0000000000..fd4a4b5e77 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1device__span-members.html @@ -0,0 +1,113 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::sp::device_span< T, Iter > Member List
    +
    +
    + +

    This is the complete list of members for dr::sp::device_span< T, Iter >, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    begin() const noexcept (defined in dr::sp::span< T, Iter >)dr::sp::span< T, Iter >inline
    device_span() noexcept (defined in dr::sp::device_span< T, Iter >)dr::sp::device_span< T, Iter >inline
    device_span(R &&r) (defined in dr::sp::device_span< T, Iter >)dr::sp::device_span< T, Iter >inline
    device_span(R &&r, std::size_t rank) (defined in dr::sp::device_span< T, Iter >)dr::sp::device_span< T, Iter >inline
    device_span(It first, std::size_t count, std::size_t rank) (defined in dr::sp::device_span< T, Iter >)dr::sp::device_span< T, Iter >inline
    device_span(It first, End last, std::size_t rank) (defined in dr::sp::device_span< T, Iter >)dr::sp::device_span< T, Iter >inline
    difference_type typedef (defined in dr::sp::device_span< T, Iter >)dr::sp::device_span< T, Iter >
    empty() const noexcept (defined in dr::sp::span< T, Iter >)dr::sp::span< T, Iter >inline
    end() const noexcept (defined in dr::sp::span< T, Iter >)dr::sp::span< T, Iter >inline
    first(std::size_t n) const (defined in dr::sp::device_span< T, Iter >)dr::sp::device_span< T, Iter >inline
    iterator typedef (defined in dr::sp::span< T, Iter >)dr::sp::span< T, Iter >
    last(std::size_t n) const (defined in dr::sp::device_span< T, Iter >)dr::sp::device_span< T, Iter >inline
    operator=(const span &) noexcept=default (defined in dr::sp::span< T, Iter >)dr::sp::span< T, Iter >
    operator[](size_type index) const (defined in dr::sp::span< T, Iter >)dr::sp::span< T, Iter >inline
    rank() const noexcept (defined in dr::sp::device_span< T, Iter >)dr::sp::device_span< T, Iter >inline
    reference typedef (defined in dr::sp::device_span< T, Iter >)dr::sp::device_span< T, Iter >
    size() const noexcept (defined in dr::sp::span< T, Iter >)dr::sp::span< T, Iter >inline
    size_type typedef (defined in dr::sp::device_span< T, Iter >)dr::sp::device_span< T, Iter >
    span(R &&r) (defined in dr::sp::span< T, Iter >)dr::sp::span< T, Iter >inline
    span(Iter first, Iter last) (defined in dr::sp::span< T, Iter >)dr::sp::span< T, Iter >inline
    span(Iter first, std::size_t count) (defined in dr::sp::span< T, Iter >)dr::sp::span< T, Iter >inline
    span()=default (defined in dr::sp::span< T, Iter >)dr::sp::span< T, Iter >
    span(const span &) noexcept=default (defined in dr::sp::span< T, Iter >)dr::sp::span< T, Iter >
    subspan(std::size_t offset, std::size_t count) const (defined in dr::sp::device_span< T, Iter >)dr::sp::device_span< T, Iter >inline
    value_type typedef (defined in dr::sp::device_span< T, Iter >)dr::sp::device_span< T, Iter >
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1device__span.html b/doxygen/classdr_1_1sp_1_1device__span.html new file mode 100644 index 0000000000..0c05e3c31a --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1device__span.html @@ -0,0 +1,217 @@ + + + + + + + +Distributed Ranges: dr::sp::device_span< T, Iter > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::sp::device_span< T, Iter > Class Template Reference
    +
    +
    +
    +Inheritance diagram for dr::sp::device_span< T, Iter >:
    +
    +
    Inheritance graph
    + + + + + +
    [legend]
    +
    +Collaboration diagram for dr::sp::device_span< T, Iter >:
    +
    +
    Collaboration graph
    + + + + + +
    [legend]
    + + + + + + + + + + + + + + + + + + + + + +

    +Public Types

    +using value_type = T
     
    +using size_type = std::size_t
     
    +using difference_type = std::size_t
     
    +using reference = std::iter_reference_t< Iter >
     
    - Public Types inherited from dr::sp::span< T, Iter >
    +using value_type = std::iter_value_t< Iter >
     
    +using size_type = std::size_t
     
    +using difference_type = std::iter_difference_t< Iter >
     
    +using reference = std::iter_reference_t< Iter >
     
    +using iterator = Iter
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    +template<rng::random_access_range R>
    +requires (dr::remote_range<R>)
     device_span (R &&r)
     
    +template<rng::random_access_range R>
     device_span (R &&r, std::size_t rank)
     
    +template<class It >
    constexpr device_span (It first, std::size_t count, std::size_t rank)
     
    +template<class It , class End >
    constexpr device_span (It first, End last, std::size_t rank)
     
    +constexpr std::size_t rank () const noexcept
     
    +device_span first (std::size_t n) const
     
    +device_span last (std::size_t n) const
     
    +device_span subspan (std::size_t offset, std::size_t count) const
     
    - Public Member Functions inherited from dr::sp::span< T, Iter >
    +template<rng::random_access_range R>
     span (R &&r)
     
    span (Iter first, Iter last)
     
    span (Iter first, std::size_t count)
     
    span (const span &) noexcept=default
     
    +spanoperator= (const span &) noexcept=default
     
    +std::size_t size () const noexcept
     
    +bool empty () const noexcept
     
    +Iter begin () const noexcept
     
    +Iter end () const noexcept
     
    +reference operator[] (size_type index) const
     
    +span first (size_type n) const
     
    +span last (size_type n) const
     
    +span subspan (std::size_t offset, std::size_t count) const
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/device_span.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1device__span__coll__graph.map b/doxygen/classdr_1_1sp_1_1device__span__coll__graph.map new file mode 100644 index 0000000000..29ef7b1ade --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1device__span__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/doxygen/classdr_1_1sp_1_1device__span__coll__graph.md5 b/doxygen/classdr_1_1sp_1_1device__span__coll__graph.md5 new file mode 100644 index 0000000000..85b959b29a --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1device__span__coll__graph.md5 @@ -0,0 +1 @@ +5f31eb58af854b2f5a815d6a249f0d9e \ No newline at end of file diff --git a/doxygen/classdr_1_1sp_1_1device__span__coll__graph.png b/doxygen/classdr_1_1sp_1_1device__span__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..a4ce5bd5c2a09f102685fefd3a4a27b3a323815b GIT binary patch literal 9736 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 literal 0 HcmV?d00001 diff --git a/doxygen/classdr_1_1sp_1_1device__span__inherit__graph.map b/doxygen/classdr_1_1sp_1_1device__span__inherit__graph.map new file mode 100644 index 0000000000..29ef7b1ade --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1device__span__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/doxygen/classdr_1_1sp_1_1device__span__inherit__graph.md5 b/doxygen/classdr_1_1sp_1_1device__span__inherit__graph.md5 new file mode 100644 index 0000000000..85b959b29a --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1device__span__inherit__graph.md5 @@ -0,0 +1 @@ +5f31eb58af854b2f5a815d6a249f0d9e \ No newline at end of file diff --git a/doxygen/classdr_1_1sp_1_1device__span__inherit__graph.png b/doxygen/classdr_1_1sp_1_1device__span__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..a4ce5bd5c2a09f102685fefd3a4a27b3a323815b GIT binary patch literal 9736 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 literal 0 HcmV?d00001 diff --git a/doxygen/classdr_1_1sp_1_1device__vector-members.html b/doxygen/classdr_1_1sp_1_1device__vector-members.html new file mode 100644 index 0000000000..9364f3ea97 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1device__vector-members.html @@ -0,0 +1,95 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::sp::device_vector< T, Allocator > Member List
    +
    +
    + +

    This is the complete list of members for dr::sp::device_vector< T, Allocator >, including all inherited members.

    + + + + + + + + +
    base typedef (defined in dr::sp::device_vector< T, Allocator >)dr::sp::device_vector< T, Allocator >
    device_vector() noexcept (defined in dr::sp::device_vector< T, Allocator >)dr::sp::device_vector< T, Allocator >inline
    device_vector(size_type count, const Allocator &alloc, size_type rank) (defined in dr::sp::device_vector< T, Allocator >)dr::sp::device_vector< T, Allocator >inline
    difference_type typedef (defined in dr::sp::device_vector< T, Allocator >)dr::sp::device_vector< T, Allocator >
    rank() const noexcept (defined in dr::sp::device_vector< T, Allocator >)dr::sp::device_vector< T, Allocator >inline
    size_type typedef (defined in dr::sp::device_vector< T, Allocator >)dr::sp::device_vector< T, Allocator >
    value_type typedef (defined in dr::sp::device_vector< T, Allocator >)dr::sp::device_vector< T, Allocator >
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1device__vector.html b/doxygen/classdr_1_1sp_1_1device__vector.html new file mode 100644 index 0000000000..b7b3a404b2 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1device__vector.html @@ -0,0 +1,254 @@ + + + + + + + +Distributed Ranges: dr::sp::device_vector< T, Allocator > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::sp::device_vector< T, Allocator > Class Template Reference
    +
    +
    +
    +Inheritance diagram for dr::sp::device_vector< T, Allocator >:
    +
    +
    Inheritance graph
    + + + + +
    [legend]
    +
    +Collaboration diagram for dr::sp::device_vector< T, Allocator >:
    +
    +
    Collaboration graph
    + + + + +
    [legend]
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Types

    +using base = dr::sp::vector< T, Allocator >
     
    +using value_type = T
     
    +using size_type = std::size_t
     
    +using difference_type = std::size_t
     
    - Public Types inherited from dr::sp::vector< T, Allocator >
    +using value_type = T
     
    +using allocator_type = Allocator
     
    +using size_type = std::size_t
     
    +using difference_type = std::ptrdiff_t
     
    +using pointer = typename std::allocator_traits< allocator_type >::pointer
     
    +using const_pointer = typename std::allocator_traits< allocator_type >::const_pointer
     
    +using reference = decltype(*std::declval< pointer >())
     
    +using const_reference = decltype(*std::declval< const_pointer >())
     
    +using iterator = pointer
     
    +using const_iterator = const_pointer
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    +constexpr device_vector (size_type count, const Allocator &alloc, size_type rank)
     
    +constexpr std::size_t rank () const noexcept
     
    - Public Member Functions inherited from dr::sp::vector< T, Allocator >
    vector (const Allocator &allocator) noexcept
     
    vector (size_type count, const T &value, const Allocator &alloc=Allocator())
     
    vector (size_type count, const Allocator &alloc=Allocator())
     
    +constexpr vector (Iter first, Iter last, const Allocator &alloc=Allocator())
     
    vector (const vector &other)
     
    vector (const vector &other, const Allocator &alloc)
     
    vector (vector &&other) noexcept
     
    vector (vector &&other, const Allocator &alloc) noexcept
     
    vector (std::initializer_list< T > init, const Allocator &alloc=Allocator())
     
    +vectoroperator= (const vector &other)
     
    +void assign (Iter first, Iter last)
     
    +size_type size () const noexcept
     
    +bool empty () const noexcept
     
    +size_type capacity () const noexcept
     
    +pointer data () noexcept
     
    +const_pointer data () const noexcept
     
    +allocator_type get_allocator () const noexcept
     
    +iterator begin () noexcept
     
    +const_iterator begin () const noexcept
     
    +iterator end () noexcept
     
    +const_iterator end () const noexcept
     
    +reference operator[] (size_type pos)
     
    +const_reference operator[] (size_type pos) const
     
    +void reserve (size_type new_cap)
     
    +void push_back (const T &value)
     
    +void push_back (T &&value)
     
    +bool try_push_back (const T &value)
     
    +void resize (size_type count)
     
    +void resize (size_type count, const value_type &value)
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/device_vector.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1device__vector__coll__graph.map b/doxygen/classdr_1_1sp_1_1device__vector__coll__graph.map new file mode 100644 index 0000000000..6813076ebe --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1device__vector__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/classdr_1_1sp_1_1device__vector__coll__graph.md5 b/doxygen/classdr_1_1sp_1_1device__vector__coll__graph.md5 new file mode 100644 index 0000000000..d360019607 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1device__vector__coll__graph.md5 @@ -0,0 +1 @@ +47e38a81836ea07904d6a2a85bf6ea85 \ No newline at end of file diff --git a/doxygen/classdr_1_1sp_1_1device__vector__coll__graph.png b/doxygen/classdr_1_1sp_1_1device__vector__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..03b37cb788b5b571bb79cef800d3141aa57c9cce GIT binary patch literal 6779 zcmc(kWmJ@5w1tNd5Qz~fkq$*A29WL{q(MTEP#Tf$?(R-W5kX3jlx|Q^S`nlLB?U#K zxo2*yb${IdcQLhwZ_Rw)`<`?5v-d=4sNE+fq#;Bg5X6cKvYPN*3ilWSJb3);GR^@{ zc&5ttWf2#czk;@s6a<0>r6?<{?U}Qk>!p!;|GYonqX~BvDXo!&g(Zh2cb#NRM_ZPM zMpeO8=LI9#L!&F#T#GqYj3_c>Ih9wuc5^jhP4*9UlM(%d7-i6tW|uZ)vr~Y4-tkg)L&XUZQwQeog93NN21rW zRPw}*VntT#rzkp6!`5zQ8s7J^`PmV%)I8W{C;xs$YNXPmy}X2-ot-D+do~fA>DLiNMMY(&OD{3zpq}dM(>!kTF1Ef-PBP9^>-k||FCpL*XKHFH zGB$Qn;cO^_+ri^io7D(?Q&W>`A+uMhH2+`>75DD(-%Yg`?j!}rm40G#3k#F&nR@4e z3@#(WBn4c=;g^o{Fqa>nm_$Uf#qI6v=B#J5c zV{>z?(c#IrRM!LU!qZJkw=3QT2Hr@L6?%KO|@2YERx&#+| zaq#i+vpnVH<(r&V@M7cQYMfV@HT$7%kW3erV?Ch_W2X zixYNPLm+th_?#9yu?WJ@LLwrjaLOn_L93CG;o;t{5PT+bLLT=my^6))2ERR?ML!Un<&d+>Vu0X0cRA)$Hx_vRimqBqwoP7kKW=+NJwOg`v`n~^CTfS z82jMx&ySHB>xrAJw{EepvlH-HeF{}zMVp#3)6mc$q`1!3OY&dT)sf%Tt?JF>F+&BM z`(}CG5VV(tBZ7m2jqUB@_f`g0-lyCmG^|2x5&o6Hny1TnI3=Cpap9@GcB0Fbi zZ&X!PP1jjp6R?}XwX?I!k?^C*_dB>QA5R;#xM#Qe6r>7&YP;o7Ot+mo?_w}-BO`Qt~4aL=b_)uQE@BRCzt*^Bas#FvdS2;O3 zoe#Dip$V9lmX>;_rgUDZxViBwDkw1ins3v}6yV`uQdCsjI^yT&-@3pY($y8Dz)B|Y z>(7YfEfW)yJALOnEx#i3^BD}>KW6iruMKC}>N6q}=|tTJfBxOwWxO9x%M^;__1=H_ z*6WXD)=GVSeJB#m%*;Hv+!wPtV|8+{ZQK0zZSwy5M1V)O}~-rmWu z=*Sv96^T@Fp97?*XbUOV7fK5Y3sxqkpwi7ZTx}s_=-vHwEl*F+YOjY6A5sfB77Tk8 z$;Txt-nf3fYhVE1+uNIP0=}YWyjYpXW5;l7zU_vNjt=kYC2TCu)(fMul9F4_E-pIJ zbIw$Exwyh*nY&=euF}#DKUQ~l7l>z&Bw=7+ICxWCjf8E*V#4h>JGgOEEr-3Rq`1Yt z+^;{LZfGqlGt>BRcd6pB-1f@GMs#8#Qq1c&?sGwh{&v3;jmM9xs^fR$GvcMMhX)lF z7RCk*a$xk@?^J4|>P2PX+7#bQTW@mqhmst?B)zP6)QBl#3wzIK` zkvv;h7xF(9l8>Vad-dw(a5jHT8$AmP3x{5{)S4>(y^cNV@Sv!u%k!;XMJRzDl(RMb zQ@AZHEsfWE!GXcRz<^fF6X|oX)djujxZHbLR$kt8xi^Y{h^RM5*k!cE!y&CI!^ZW9 z+VyyUeY)0)G&?&Rfsnj7rs-&b^mL;G0|zH37Gk#1A)>gL?a)^O z7aJ=lH}@+=5cJ*3r(DsBcQ4%ADVq1m zmzk53*y@w-X?$aMH`?6NvO$<*NsK{6kvTLGb~`yYS2a&EK<%aGZADd8w$;^DXdt)- zc_>_qPr3q0OreQoWp|RZvz31T`D5`RJR%|mYH)mdTH)>6x8LK-$(|$8yu7^TH%)*2 zIsR*toSrVPq^wLq&&|onc5yTkpkQQ_tKuKC0|UaH`Bs{eqQAd{qPn`(Ep1NrXZi63 zO--3EU%nh%y)P@9_^adMJY>afl2vh=?(gNxmqUk6q;)Ix!?Lq!XeE60CN!Jbpc<+h z8zb7=&+*f2zLJVqkF(Z`$>*~^mv zu&_&%ocf_3J}4nN&(BV3%mzqkMcre?f6TRbC~X?lKcm1@CN3Tx407y%qoF6?@0}bU zqZyILXUBhGI59q~&G3i0s;=awy!~_Epy))mY4DD|o|Hh~#ox`xH z`s02$@r}VmCYiyW2vS803%01pNXGQ^^q0-e*+}#tRM-2?ARI+sUoo$f1I~A#$44g% z7hEMprKORW0TCJ={?;qno$Gcvx0qNCiby7&PV{DD=No_vqPO0EpYc8&Wn5ldlxnd3 zivIokcWU}3k;t>c_WRdedn2#1ii$p0_3`vf1gfdEw!otk^F#@I@3TLrjOpv`?hfwl z?M0#qYU=CRB1q^o6_qV5Z`M>-8&5;@~i{W^H5B)8CILCnv`kD#cFz zR{7ztKR?G@rU`9r6%$ZrPAVuUK!o6v;`N}a z8yYM}9XQgG6UyfT3JpXP`G&n4fP*G6<4PFOb6!JOX z$dmB<5bw~!C*EB^K|vuDa4vRwc4qP0=id%-kW|5M^V>ic295S|uuf%VWz(eD^|rbO zHKvyY?7v0A_$Yey3a`RLzzJ5c|4978SZRQy&8;mMr0SjFgm=bSERDqPhpmr{&FsL0p;tVcq}rVkRiE z_+vn7e349E-`$htFiFA=9sU5L_!PyEWIi7Wy45HWo~HnP_e0kYSowvq5Sa^87e^FI ze9t5mU)-zRrQzA=>$!`FO{W|tRkQFucR%L}jF%QA5T{>51q$Fiq|tI(n4rv1)s}Vg(x+xl}u6RH*SF_qmGnm+}qa zQPI+Dh3sl1Q8qd4v+=d15hJeB2x;Q7n?$5BjA5q(0$6mnyOz1ACVL9-bV7;+-#elg zr$0+YVbRJ|UHeg`GgS-k<6p+cikuZLx*F>KXG4m(3=fw8m)!jq=g(kc9)iM@v4l{X zeU?Ywah_P!c#J00krZcGiGe{=;};<%;j8Wj-ov^JuKcoB)?}kYIs>TIuuz@U2*ysC ztdx3V5<2iwDfnv~@8hjx^6S2ulj_ivPb~yyLDmYIc21(Sw@LMo!En zwR7GeLI4)I@K+X#q6yvw9PXNAEx2d!vBMEWJvlofkHqmSMI{9;WM+SvW#LP$T?w2$ zC3F-NY*f>gDXdG(%d0}=$4lSN38zWzwl0Miue6Bt0iyvyL3Z2ux;=#ERDUrI-^>&zwZ?`Sa&Y0XrJ+zZ-r1H-J;1-5(el#)7i+ zEG#hi9q&J&-aM=0Z9^m`B?aA2pf3c7I5;@S)PY;I)c6u~&adLH~xmjdu zp@RX?NxsAX40-Ju4h$&pjf1^IA3mUsjObvXeVdz0`#eQo_EUqcf!Rp6%23+c`u6hj za$-(SEEW!)aaZsq#?VEeDbLeG9*{ejA+2o}|3)8-ZEpSiIlbe?UL>#j#F&#C@NXJmqPG}(QE3<)k%!CE%N&TmXQ4d*Gn!IKVuI)E`pC#SB}p$w<<(AF&Za!ont?e1n67fh{d93eK6hJ z+-!WUtgB1a=KVJq_%ob@ju7DqERdX>Txwl3B61J2yEd-jY_OG_)v8fZx+N9gKogI!2&E**SiG>=*TV5);rL_>oB z9w~k7__$_qP1-v6#xUq6;M~=!!iowaIIZ1-19?M3S`fYmnwr>!8j%!tAF|u#Q>wbV zyYn73H#f6$aXr-6^{Fe7`RZ0jltI3(Df{TrbttsBIO6Am=7UIuVogw*kdYrai2=D& za&{r0J~AAXnA`pP_)>pb{`sZGy`H}X4#H(^SlY>n2Z}WUmI~3ZnXf0w6FHKY!o$Y$FyT6bT;uE@wu1 z`c1wAn_No5u)+85gVNI}!3x||$qWQ_&I;SdAQbUFd^0&YImRa{ncbbRF);~(mSdEZ zWFR3Sp%!sv-`d`Opsn5OZU!CV=;G1?NSTzJJZ|}KUSu9j8)KRh7J`k9jh&rc<8{@+ zQ}u|qP*d31#Pi2-@L^bde0+u-{<$AxVq!wTv5bqhiIn=`PmPbGH8hY1zZMd{e>cA; zAYckWsWenCn8YI>(BBtB<+L@;lbM~p{BI#3B0oQWSafcDob0)PU2shekCKuS5{c}b zcbkc+RN+n-kkQklj;9xoe)*C$Gc$7$%6IqoZ_{7%QZE0RfrP1PXg&;oUWgc2VY+vZ zJc5)#-rSruHa1p@pzE#0kaktM_{?}A2bfd44eacJZL3c?T>!Qw78YTbu234kPi7Nx z{fQi(m|#j%0vH4yCk{8!9zW(8lp`S~&K*JxuanN%-=d6x;tB>|jehck!OP35y0$h1 z792(=Cd$gPuYU0Y8xpjw!(V6j5ZXFAg=J-gP@7w1WC+{2W(t3Qe@8brIhcFH!^7so zz@VS2ALEG%sJDEhIL4mc=$CiD41nF#ZP5cf>! zmSoD1JNg|jUDaoJpGI&@YKhP%DTK;IklYqq`~E$2eWJvphWXd>gr{-ahhQ!_J*y!O`oSFZobS`(Zto`~sozm{Rm@so;2wRoTmclx}~Plf#t zm+(D(e9WNO>DV6Ffl-J6cLqMmT0gpfu|hiF;>-j5+~UXQf?#vgMCoB7o#!Ve27-gP zoo(1I+JK!8Zfq2!m+*~z=klYhPGLURYj+U~HfL#d^^%p9)l(an&v@T>OF`QJL~Vx0 zitd|zNWGn_Zv{#N{dkHY(5j18i*~8u0nO8o6o>)dkMkQB-0>qBNeAMPk6%#){ z#ZWq@42Y}a_6$G3^A!xwgLWYq7!n}sVHOgiZfIy292x?XBJxW0IUYdu;n5M+)5j_a zQBl&iwj9_vI6NlZxG>^|-1aiKpV&7_6nG_AL4&p*Z`^(NV^`|W^Da<+kQsR{Yht2Si{Xhs0Zl%uxaTec(_eOWoEZOLF_dls7hv>xo0W~N>&q7^sXw3S zp(4MpuD&)rhlM))o}!NO+%=}Ard|ZS#z!3RDS~y+DT!F>i7=a~vvzhm zKG=?dna;w;r&W0zxF-5CBO?Rt(mt}-6>=4c3|~Y7M=1$ZLL# z+}zx0LmmP&f~BzYVq#*8OG{nx(%_xLuia8JhUK6Zv^Ok?ivumhM7Egt$_s`$m|tz{ z6Z#$$AVC)-uU{!}UTa4~cXv)sk`wh{9wA@cdbRkOR@fOAl0>wE0)h9xojBMoQxHW6 zTSv#olV?K{asc@&>D|LUGxs5V85x`wpSBk-&}%E#r2bS@y?x7@rGAaQT%7`}>jMpq zKy}G8atP7%s*SO3eZ1_rNHRkSP$MfP6{yd1=gu9>W`yNetEj1k!{T|9F?(FRFGR&;-&N&OFl+jB1)3V6N21+rG z){#e(ohP + + + diff --git a/doxygen/classdr_1_1sp_1_1device__vector__inherit__graph.md5 b/doxygen/classdr_1_1sp_1_1device__vector__inherit__graph.md5 new file mode 100644 index 0000000000..d360019607 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1device__vector__inherit__graph.md5 @@ -0,0 +1 @@ +47e38a81836ea07904d6a2a85bf6ea85 \ No newline at end of file diff --git a/doxygen/classdr_1_1sp_1_1device__vector__inherit__graph.png b/doxygen/classdr_1_1sp_1_1device__vector__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..03b37cb788b5b571bb79cef800d3141aa57c9cce GIT binary patch literal 6779 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 + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::sp::distributed_dense_matrix< T > Member List
    +
    +
    + +

    This is the complete list of members for dr::sp::distributed_dense_matrix< T >, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    begin() (defined in dr::sp::distributed_dense_matrix< T >)dr::sp::distributed_dense_matrix< T >inline
    const_reference typedef (defined in dr::sp::distributed_dense_matrix< T >)dr::sp::distributed_dense_matrix< T >
    const_scalar_reference typedef (defined in dr::sp::distributed_dense_matrix< T >)dr::sp::distributed_dense_matrix< T >
    difference_type typedef (defined in dr::sp::distributed_dense_matrix< T >)dr::sp::distributed_dense_matrix< T >
    distributed_dense_matrix(key_type shape) (defined in dr::sp::distributed_dense_matrix< T >)dr::sp::distributed_dense_matrix< T >inline
    distributed_dense_matrix(key_type shape, const matrix_partition &partition) (defined in dr::sp::distributed_dense_matrix< T >)dr::sp::distributed_dense_matrix< T >inline
    end() (defined in dr::sp::distributed_dense_matrix< T >)dr::sp::distributed_dense_matrix< T >inline
    get_tile(key_type tile_index, const Allocator &alloc=Allocator{}) (defined in dr::sp::distributed_dense_matrix< T >)dr::sp::distributed_dense_matrix< T >inline
    get_tile_async(key_type tile_index, const Allocator &alloc=Allocator{}) (defined in dr::sp::distributed_dense_matrix< T >)dr::sp::distributed_dense_matrix< T >inline
    grid_shape() const noexcept (defined in dr::sp::distributed_dense_matrix< T >)dr::sp::distributed_dense_matrix< T >inline
    iterator typedef (defined in dr::sp::distributed_dense_matrix< T >)dr::sp::distributed_dense_matrix< T >
    key_type typedef (defined in dr::sp::distributed_dense_matrix< T >)dr::sp::distributed_dense_matrix< T >
    operator[](key_type index) (defined in dr::sp::distributed_dense_matrix< T >)dr::sp::distributed_dense_matrix< T >inline
    operator[](key_type index) const (defined in dr::sp::distributed_dense_matrix< T >)dr::sp::distributed_dense_matrix< T >inline
    reference typedef (defined in dr::sp::distributed_dense_matrix< T >)dr::sp::distributed_dense_matrix< T >
    scalar_reference typedef (defined in dr::sp::distributed_dense_matrix< T >)dr::sp::distributed_dense_matrix< T >
    segments() (defined in dr::sp::distributed_dense_matrix< T >)dr::sp::distributed_dense_matrix< T >inline
    shape() const noexcept (defined in dr::sp::distributed_dense_matrix< T >)dr::sp::distributed_dense_matrix< T >inline
    size() const noexcept (defined in dr::sp::distributed_dense_matrix< T >)dr::sp::distributed_dense_matrix< T >inline
    size_type typedef (defined in dr::sp::distributed_dense_matrix< T >)dr::sp::distributed_dense_matrix< T >
    tile(key_type tile_index) (defined in dr::sp::distributed_dense_matrix< T >)dr::sp::distributed_dense_matrix< T >inline
    tile_shape() const noexcept (defined in dr::sp::distributed_dense_matrix< T >)dr::sp::distributed_dense_matrix< T >inline
    tiles() (defined in dr::sp::distributed_dense_matrix< T >)dr::sp::distributed_dense_matrix< T >inline
    value_type typedef (defined in dr::sp::distributed_dense_matrix< T >)dr::sp::distributed_dense_matrix< T >
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1distributed__dense__matrix.html b/doxygen/classdr_1_1sp_1_1distributed__dense__matrix.html new file mode 100644 index 0000000000..673291d651 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1distributed__dense__matrix.html @@ -0,0 +1,173 @@ + + + + + + + +Distributed Ranges: dr::sp::distributed_dense_matrix< T > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::sp::distributed_dense_matrix< T > Class Template Reference
    +
    +
    + + + + + + + + + + + + + + + + + + + + +

    +Public Types

    +using size_type = std::size_t
     
    +using difference_type = std::ptrdiff_t
     
    +using value_type = dr::sp::matrix_entry< T >
     
    +using scalar_reference = rng::range_reference_t< dr::sp::device_vector< T, dr::sp::device_allocator< T > > >
     
    +using const_scalar_reference = rng::range_reference_t< const dr::sp::device_vector< T, dr::sp::device_allocator< T > > >
     
    +using reference = dr::sp::matrix_ref< T, scalar_reference >
     
    +using const_reference = dr::sp::matrix_ref< const T, const_scalar_reference >
     
    +using key_type = dr::index<>
     
    +using iterator = distributed_dense_matrix_iterator< T, dr::sp::device_vector< T, dr::sp::device_allocator< T > > >
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    distributed_dense_matrix (key_type shape)
     
    distributed_dense_matrix (key_type shape, const matrix_partition &partition)
     
    +size_type size () const noexcept
     
    +key_type shape () const noexcept
     
    +scalar_reference operator[] (key_type index)
     
    +const_scalar_reference operator[] (key_type index) const
     
    +iterator begin ()
     
    +iterator end ()
     
    +key_type tile_shape () const noexcept
     
    +key_type grid_shape () const noexcept
     
    +auto tile (key_type tile_index)
     
    +std::vector< dense_matrix_view< T, rng::iterator_t< dr::sp::device_vector< T, dr::sp::device_allocator< T > > > > > tiles ()
     
    +template<typename Allocator = std::allocator<T>>
    auto get_tile (key_type tile_index, const Allocator &alloc=Allocator{})
     
    +template<typename Allocator = std::allocator<T>>
    auto get_tile_async (key_type tile_index, const Allocator &alloc=Allocator{})
     
    +auto segments ()
     
    +
    The documentation for this class was generated from the following file: +
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1distributed__dense__matrix__accessor-members.html b/doxygen/classdr_1_1sp_1_1distributed__dense__matrix__accessor-members.html new file mode 100644 index 0000000000..87c50a9a57 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1distributed__dense__matrix__accessor-members.html @@ -0,0 +1,110 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::sp::distributed_dense_matrix_accessor< T, L > Member List
    +
    +
    + +

    This is the complete list of members for dr::sp::distributed_dense_matrix_accessor< T, L >, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + + +
    const_iterator_accessor typedef (defined in dr::sp::distributed_dense_matrix_accessor< T, L >)dr::sp::distributed_dense_matrix_accessor< T, L >
    difference_type typedef (defined in dr::sp::distributed_dense_matrix_accessor< T, L >)dr::sp::distributed_dense_matrix_accessor< T, L >
    distributed_dense_matrix_accessor() noexcept=default (defined in dr::sp::distributed_dense_matrix_accessor< T, L >)dr::sp::distributed_dense_matrix_accessor< T, L >
    distributed_dense_matrix_accessor(const distributed_dense_matrix_accessor &) noexcept=default (defined in dr::sp::distributed_dense_matrix_accessor< T, L >)dr::sp::distributed_dense_matrix_accessor< T, L >
    distributed_dense_matrix_accessor(std::span< tile_type > tiles, key_type grid_idx, key_type tile_idx, key_type grid_shape, key_type tile_shape, key_type matrix_shape) noexcept (defined in dr::sp::distributed_dense_matrix_accessor< T, L >)dr::sp::distributed_dense_matrix_accessor< T, L >inline
    iterator_accessor typedef (defined in dr::sp::distributed_dense_matrix_accessor< T, L >)dr::sp::distributed_dense_matrix_accessor< T, L >
    iterator_category typedef (defined in dr::sp::distributed_dense_matrix_accessor< T, L >)dr::sp::distributed_dense_matrix_accessor< T, L >
    key_type typedef (defined in dr::sp::distributed_dense_matrix_accessor< T, L >)dr::sp::distributed_dense_matrix_accessor< T, L >
    nonconst_iterator_accessor typedef (defined in dr::sp::distributed_dense_matrix_accessor< T, L >)dr::sp::distributed_dense_matrix_accessor< T, L >
    operator*() const noexcept (defined in dr::sp::distributed_dense_matrix_accessor< T, L >)dr::sp::distributed_dense_matrix_accessor< T, L >inline
    operator+=(difference_type offset) noexcept (defined in dr::sp::distributed_dense_matrix_accessor< T, L >)dr::sp::distributed_dense_matrix_accessor< T, L >inline
    operator-(const iterator_accessor &other) const noexcept (defined in dr::sp::distributed_dense_matrix_accessor< T, L >)dr::sp::distributed_dense_matrix_accessor< T, L >inline
    operator<(const iterator_accessor &other) const noexcept (defined in dr::sp::distributed_dense_matrix_accessor< T, L >)dr::sp::distributed_dense_matrix_accessor< T, L >inline
    operator=(const distributed_dense_matrix_accessor &) noexcept=default (defined in dr::sp::distributed_dense_matrix_accessor< T, L >)dr::sp::distributed_dense_matrix_accessor< T, L >
    operator==(const iterator_accessor &other) const noexcept (defined in dr::sp::distributed_dense_matrix_accessor< T, L >)dr::sp::distributed_dense_matrix_accessor< T, L >inline
    reference typedef (defined in dr::sp::distributed_dense_matrix_accessor< T, L >)dr::sp::distributed_dense_matrix_accessor< T, L >
    scalar_reference typedef (defined in dr::sp::distributed_dense_matrix_accessor< T, L >)dr::sp::distributed_dense_matrix_accessor< T, L >
    scalar_value_type typedef (defined in dr::sp::distributed_dense_matrix_accessor< T, L >)dr::sp::distributed_dense_matrix_accessor< T, L >
    size_type typedef (defined in dr::sp::distributed_dense_matrix_accessor< T, L >)dr::sp::distributed_dense_matrix_accessor< T, L >
    tile_type typedef (defined in dr::sp::distributed_dense_matrix_accessor< T, L >)dr::sp::distributed_dense_matrix_accessor< T, L >
    value_type typedef (defined in dr::sp::distributed_dense_matrix_accessor< T, L >)dr::sp::distributed_dense_matrix_accessor< T, L >
    ~distributed_dense_matrix_accessor() noexcept=default (defined in dr::sp::distributed_dense_matrix_accessor< T, L >)dr::sp::distributed_dense_matrix_accessor< T, L >
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1distributed__dense__matrix__accessor.html b/doxygen/classdr_1_1sp_1_1distributed__dense__matrix__accessor.html new file mode 100644 index 0000000000..aafe6db2a7 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1distributed__dense__matrix__accessor.html @@ -0,0 +1,159 @@ + + + + + + + +Distributed Ranges: dr::sp::distributed_dense_matrix_accessor< T, L > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::sp::distributed_dense_matrix_accessor< T, L > Class Template Reference
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Types

    +using size_type = std::size_t
     
    +using difference_type = std::ptrdiff_t
     
    +using scalar_value_type = rng::range_value_t< L >
     
    +using scalar_reference = rng::range_reference_t< L >
     
    +using value_type = dr::sp::matrix_entry< scalar_value_type, std::size_t >
     
    +using reference = dr::sp::matrix_ref< T, std::size_t, scalar_reference >
     
    +using iterator_category = std::random_access_iterator_tag
     
    +using iterator_accessor = distributed_dense_matrix_accessor
     
    +using const_iterator_accessor = iterator_accessor
     
    +using nonconst_iterator_accessor = iterator_accessor
     
    +using tile_type = L
     
    +using key_type = dr::index<>
     
    + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    +constexpr distributed_dense_matrix_accessor (const distributed_dense_matrix_accessor &) noexcept=default
     
    +constexpr distributed_dense_matrix_accessoroperator= (const distributed_dense_matrix_accessor &) noexcept=default
     
    +constexpr distributed_dense_matrix_accessor (std::span< tile_type > tiles, key_type grid_idx, key_type tile_idx, key_type grid_shape, key_type tile_shape, key_type matrix_shape) noexcept
     
    +constexpr distributed_dense_matrix_accessoroperator+= (difference_type offset) noexcept
     
    +constexpr bool operator== (const iterator_accessor &other) const noexcept
     
    +constexpr difference_type operator- (const iterator_accessor &other) const noexcept
     
    +constexpr bool operator< (const iterator_accessor &other) const noexcept
     
    +constexpr reference operator* () const noexcept
     
    +
    The documentation for this class was generated from the following file: +
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1distributed__range__accessor-members.html b/doxygen/classdr_1_1sp_1_1distributed__range__accessor-members.html new file mode 100644 index 0000000000..36d5869f9c --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1distributed__range__accessor-members.html @@ -0,0 +1,107 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::sp::distributed_range_accessor< Segments > Member List
    +
    +
    + +

    This is the complete list of members for dr::sp::distributed_range_accessor< Segments >, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + +
    const_iterator_accessor typedef (defined in dr::sp::distributed_range_accessor< Segments >)dr::sp::distributed_range_accessor< Segments >
    difference_type typedef (defined in dr::sp::distributed_range_accessor< Segments >)dr::sp::distributed_range_accessor< Segments >
    distributed_range_accessor() noexcept=default (defined in dr::sp::distributed_range_accessor< Segments >)dr::sp::distributed_range_accessor< Segments >
    distributed_range_accessor(const distributed_range_accessor &) noexcept=default (defined in dr::sp::distributed_range_accessor< Segments >)dr::sp::distributed_range_accessor< Segments >
    distributed_range_accessor(Segments segments, size_type segment_id, size_type idx) noexcept (defined in dr::sp::distributed_range_accessor< Segments >)dr::sp::distributed_range_accessor< Segments >inline
    iterator_accessor typedef (defined in dr::sp::distributed_range_accessor< Segments >)dr::sp::distributed_range_accessor< Segments >
    iterator_category typedef (defined in dr::sp::distributed_range_accessor< Segments >)dr::sp::distributed_range_accessor< Segments >
    nonconst_iterator_accessor typedef (defined in dr::sp::distributed_range_accessor< Segments >)dr::sp::distributed_range_accessor< Segments >
    operator*() const noexcept (defined in dr::sp::distributed_range_accessor< Segments >)dr::sp::distributed_range_accessor< Segments >inline
    operator+=(difference_type offset) noexcept (defined in dr::sp::distributed_range_accessor< Segments >)dr::sp::distributed_range_accessor< Segments >inline
    operator-(const iterator_accessor &other) const noexcept (defined in dr::sp::distributed_range_accessor< Segments >)dr::sp::distributed_range_accessor< Segments >inline
    operator<(const iterator_accessor &other) const noexcept (defined in dr::sp::distributed_range_accessor< Segments >)dr::sp::distributed_range_accessor< Segments >inline
    operator=(const distributed_range_accessor &) noexcept=default (defined in dr::sp::distributed_range_accessor< Segments >)dr::sp::distributed_range_accessor< Segments >
    operator==(const iterator_accessor &other) const noexcept (defined in dr::sp::distributed_range_accessor< Segments >)dr::sp::distributed_range_accessor< Segments >inline
    reference typedef (defined in dr::sp::distributed_range_accessor< Segments >)dr::sp::distributed_range_accessor< Segments >
    segment_type typedef (defined in dr::sp::distributed_range_accessor< Segments >)dr::sp::distributed_range_accessor< Segments >
    size_type typedef (defined in dr::sp::distributed_range_accessor< Segments >)dr::sp::distributed_range_accessor< Segments >
    value_type typedef (defined in dr::sp::distributed_range_accessor< Segments >)dr::sp::distributed_range_accessor< Segments >
    ~distributed_range_accessor() noexcept=default (defined in dr::sp::distributed_range_accessor< Segments >)dr::sp::distributed_range_accessor< Segments >
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1distributed__range__accessor.html b/doxygen/classdr_1_1sp_1_1distributed__range__accessor.html new file mode 100644 index 0000000000..1dfc8f4308 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1distributed__range__accessor.html @@ -0,0 +1,150 @@ + + + + + + + +Distributed Ranges: dr::sp::distributed_range_accessor< Segments > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::sp::distributed_range_accessor< Segments > Class Template Reference
    +
    +
    + + + + + + + + + + + + + + + + + + + + +

    +Public Types

    +using segment_type = rng::range_value_t< Segments >
     
    +using value_type = rng::range_value_t< segment_type >
     
    +using size_type = rng::range_size_t< segment_type >
     
    +using difference_type = rng::range_difference_t< segment_type >
     
    +using reference = rng::range_reference_t< segment_type >
     
    +using iterator_category = std::random_access_iterator_tag
     
    +using iterator_accessor = distributed_range_accessor
     
    +using const_iterator_accessor = iterator_accessor
     
    +using nonconst_iterator_accessor = iterator_accessor
     
    + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    +constexpr distributed_range_accessor (const distributed_range_accessor &) noexcept=default
     
    +constexpr distributed_range_accessoroperator= (const distributed_range_accessor &) noexcept=default
     
    +constexpr distributed_range_accessor (Segments segments, size_type segment_id, size_type idx) noexcept
     
    +constexpr distributed_range_accessoroperator+= (difference_type offset) noexcept
     
    +constexpr bool operator== (const iterator_accessor &other) const noexcept
     
    +constexpr difference_type operator- (const iterator_accessor &other) const noexcept
     
    +constexpr bool operator< (const iterator_accessor &other) const noexcept
     
    +constexpr reference operator* () const noexcept
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/containers/sparse_matrix.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1distributed__span-members.html b/doxygen/classdr_1_1sp_1_1distributed__span-members.html new file mode 100644 index 0000000000..61e7b50005 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1distributed__span-members.html @@ -0,0 +1,113 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::sp::distributed_span< T, L > Member List
    +
    +
    + +

    This is the complete list of members for dr::sp::distributed_span< T, L >, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    back() (defined in dr::sp::distributed_span< T, L >)dr::sp::distributed_span< T, L >inline
    begin() (defined in dr::sp::distributed_span< T, L >)dr::sp::distributed_span< T, L >inline
    difference_type typedef (defined in dr::sp::distributed_span< T, L >)dr::sp::distributed_span< T, L >
    distributed_span() noexcept=default (defined in dr::sp::distributed_span< T, L >)dr::sp::distributed_span< T, L >
    distributed_span(const distributed_span &) noexcept=default (defined in dr::sp::distributed_span< T, L >)dr::sp::distributed_span< T, L >
    distributed_span(R &&segments) (defined in dr::sp::distributed_span< T, L >)dr::sp::distributed_span< T, L >inline
    distributed_span(R &&r) (defined in dr::sp::distributed_span< T, L >)dr::sp::distributed_span< T, L >inline
    element_type typedef (defined in dr::sp::distributed_span< T, L >)dr::sp::distributed_span< T, L >
    empty() const noexcept (defined in dr::sp::distributed_span< T, L >)dr::sp::distributed_span< T, L >inline
    end() (defined in dr::sp::distributed_span< T, L >)dr::sp::distributed_span< T, L >inline
    first(size_type Count) const (defined in dr::sp::distributed_span< T, L >)dr::sp::distributed_span< T, L >inline
    front() (defined in dr::sp::distributed_span< T, L >)dr::sp::distributed_span< T, L >inline
    iterator typedef (defined in dr::sp::distributed_span< T, L >)dr::sp::distributed_span< T, L >
    last(size_type Count) const (defined in dr::sp::distributed_span< T, L >)dr::sp::distributed_span< T, L >inline
    operator=(const distributed_span &) noexcept=default (defined in dr::sp::distributed_span< T, L >)dr::sp::distributed_span< T, L >
    operator[](size_type idx) const (defined in dr::sp::distributed_span< T, L >)dr::sp::distributed_span< T, L >inline
    reference typedef (defined in dr::sp::distributed_span< T, L >)dr::sp::distributed_span< T, L >
    segment_type typedef (defined in dr::sp::distributed_span< T, L >)dr::sp::distributed_span< T, L >
    segments() (defined in dr::sp::distributed_span< T, L >)dr::sp::distributed_span< T, L >inline
    segments() const (defined in dr::sp::distributed_span< T, L >)dr::sp::distributed_span< T, L >inline
    size() const noexcept (defined in dr::sp::distributed_span< T, L >)dr::sp::distributed_span< T, L >inline
    size_bytes() const noexcept (defined in dr::sp::distributed_span< T, L >)dr::sp::distributed_span< T, L >inline
    size_type typedef (defined in dr::sp::distributed_span< T, L >)dr::sp::distributed_span< T, L >
    subspan(size_type Offset, size_type Count=std::dynamic_extent) const (defined in dr::sp::distributed_span< T, L >)dr::sp::distributed_span< T, L >inline
    value_type typedef (defined in dr::sp::distributed_span< T, L >)dr::sp::distributed_span< T, L >
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1distributed__span.html b/doxygen/classdr_1_1sp_1_1distributed__span.html new file mode 100644 index 0000000000..6d24b3e2d2 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1distributed__span.html @@ -0,0 +1,192 @@ + + + + + + + +Distributed Ranges: dr::sp::distributed_span< T, L > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::sp::distributed_span< T, L > Class Template Reference
    +
    +
    +
    +Inheritance diagram for dr::sp::distributed_span< T, L >:
    +
    +
    Inheritance graph
    + + + + +
    [legend]
    +
    +Collaboration diagram for dr::sp::distributed_span< T, L >:
    +
    +
    Collaboration graph
    + + + + +
    [legend]
    + + + + + + + + + + + + + + + + +

    +Public Types

    +using element_type = T
     
    +using value_type = std::remove_cv_t< T >
     
    +using segment_type = dr::sp::device_span< T, L >
     
    +using size_type = rng::range_size_t< segment_type >
     
    +using difference_type = rng::range_difference_t< segment_type >
     
    +using reference = rng::range_reference_t< segment_type >
     
    +using iterator = distributed_span_iterator< T, segment_type >
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    +constexpr distributed_span (const distributed_span &) noexcept=default
     
    +constexpr distributed_spanoperator= (const distributed_span &) noexcept=default
     
    +template<rng::input_range R>
    +requires (dr::remote_range<rng::range_reference_t<R>>)
    constexpr distributed_span (R &&segments)
     
    +template<dr::distributed_range R>
    constexpr distributed_span (R &&r)
     
    +constexpr size_type size () const noexcept
     
    +constexpr size_type size_bytes () const noexcept
     
    +constexpr reference operator[] (size_type idx) const
     
    +constexpr bool empty () const noexcept
     
    +constexpr distributed_span subspan (size_type Offset, size_type Count=std::dynamic_extent) const
     
    +constexpr distributed_span first (size_type Count) const
     
    +constexpr distributed_span last (size_type Count) const
     
    +iterator begin ()
     
    +iterator end ()
     
    +constexpr reference front ()
     
    +constexpr reference back ()
     
    +std::span< segment_typesegments ()
     
    +std::span< const segment_typesegments () const
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/distributed_span.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1distributed__span__accessor-members.html b/doxygen/classdr_1_1sp_1_1distributed__span__accessor-members.html new file mode 100644 index 0000000000..f10a473301 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1distributed__span__accessor-members.html @@ -0,0 +1,109 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::sp::distributed_span_accessor< T, L > Member List
    +
    +
    + +

    This is the complete list of members for dr::sp::distributed_span_accessor< T, L >, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + +
    const_iterator_accessor typedef (defined in dr::sp::distributed_span_accessor< T, L >)dr::sp::distributed_span_accessor< T, L >
    difference_type typedef (defined in dr::sp::distributed_span_accessor< T, L >)dr::sp::distributed_span_accessor< T, L >
    distributed_span_accessor() noexcept=default (defined in dr::sp::distributed_span_accessor< T, L >)dr::sp::distributed_span_accessor< T, L >
    distributed_span_accessor(const distributed_span_accessor &) noexcept=default (defined in dr::sp::distributed_span_accessor< T, L >)dr::sp::distributed_span_accessor< T, L >
    distributed_span_accessor(std::span< segment_type > segments, size_type segment_id, size_type idx) noexcept (defined in dr::sp::distributed_span_accessor< T, L >)dr::sp::distributed_span_accessor< T, L >inline
    element_type typedef (defined in dr::sp::distributed_span_accessor< T, L >)dr::sp::distributed_span_accessor< T, L >
    iterator_accessor typedef (defined in dr::sp::distributed_span_accessor< T, L >)dr::sp::distributed_span_accessor< T, L >
    iterator_category typedef (defined in dr::sp::distributed_span_accessor< T, L >)dr::sp::distributed_span_accessor< T, L >
    nonconst_iterator_accessor typedef (defined in dr::sp::distributed_span_accessor< T, L >)dr::sp::distributed_span_accessor< T, L >
    operator*() const noexcept (defined in dr::sp::distributed_span_accessor< T, L >)dr::sp::distributed_span_accessor< T, L >inline
    operator+=(difference_type offset) noexcept (defined in dr::sp::distributed_span_accessor< T, L >)dr::sp::distributed_span_accessor< T, L >inline
    operator-(const iterator_accessor &other) const noexcept (defined in dr::sp::distributed_span_accessor< T, L >)dr::sp::distributed_span_accessor< T, L >inline
    operator<(const iterator_accessor &other) const noexcept (defined in dr::sp::distributed_span_accessor< T, L >)dr::sp::distributed_span_accessor< T, L >inline
    operator=(const distributed_span_accessor &) noexcept=default (defined in dr::sp::distributed_span_accessor< T, L >)dr::sp::distributed_span_accessor< T, L >
    operator==(const iterator_accessor &other) const noexcept (defined in dr::sp::distributed_span_accessor< T, L >)dr::sp::distributed_span_accessor< T, L >inline
    reference typedef (defined in dr::sp::distributed_span_accessor< T, L >)dr::sp::distributed_span_accessor< T, L >
    segment_type typedef (defined in dr::sp::distributed_span_accessor< T, L >)dr::sp::distributed_span_accessor< T, L >
    segments() const noexcept (defined in dr::sp::distributed_span_accessor< T, L >)dr::sp::distributed_span_accessor< T, L >inline
    size_type typedef (defined in dr::sp::distributed_span_accessor< T, L >)dr::sp::distributed_span_accessor< T, L >
    value_type typedef (defined in dr::sp::distributed_span_accessor< T, L >)dr::sp::distributed_span_accessor< T, L >
    ~distributed_span_accessor() noexcept=default (defined in dr::sp::distributed_span_accessor< T, L >)dr::sp::distributed_span_accessor< T, L >
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1distributed__span__accessor.html b/doxygen/classdr_1_1sp_1_1distributed__span__accessor.html new file mode 100644 index 0000000000..60288ac004 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1distributed__span__accessor.html @@ -0,0 +1,156 @@ + + + + + + + +Distributed Ranges: dr::sp::distributed_span_accessor< T, L > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::sp::distributed_span_accessor< T, L > Class Template Reference
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + +

    +Public Types

    +using element_type = T
     
    +using value_type = std::remove_cv_t< T >
     
    +using segment_type = L
     
    +using size_type = rng::range_size_t< segment_type >
     
    +using difference_type = rng::range_difference_t< segment_type >
     
    +using reference = rng::range_reference_t< segment_type >
     
    +using iterator_category = std::random_access_iterator_tag
     
    +using iterator_accessor = distributed_span_accessor
     
    +using const_iterator_accessor = iterator_accessor
     
    +using nonconst_iterator_accessor = iterator_accessor
     
    + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    +constexpr distributed_span_accessor (const distributed_span_accessor &) noexcept=default
     
    +constexpr distributed_span_accessoroperator= (const distributed_span_accessor &) noexcept=default
     
    +constexpr distributed_span_accessor (std::span< segment_type > segments, size_type segment_id, size_type idx) noexcept
     
    +constexpr distributed_span_accessoroperator+= (difference_type offset) noexcept
     
    +constexpr bool operator== (const iterator_accessor &other) const noexcept
     
    +constexpr difference_type operator- (const iterator_accessor &other) const noexcept
     
    +constexpr bool operator< (const iterator_accessor &other) const noexcept
     
    +constexpr reference operator* () const noexcept
     
    +auto segments () const noexcept
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/distributed_span.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1distributed__span__coll__graph.map b/doxygen/classdr_1_1sp_1_1distributed__span__coll__graph.map new file mode 100644 index 0000000000..7098bc72ed --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1distributed__span__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/classdr_1_1sp_1_1distributed__span__coll__graph.md5 b/doxygen/classdr_1_1sp_1_1distributed__span__coll__graph.md5 new file mode 100644 index 0000000000..e4ab789c51 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1distributed__span__coll__graph.md5 @@ -0,0 +1 @@ +61598c1a1bea9a2346a803da620153f9 \ No newline at end of file diff --git a/doxygen/classdr_1_1sp_1_1distributed__span__coll__graph.png b/doxygen/classdr_1_1sp_1_1distributed__span__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..4fdb76734c3396d3e29347d5c601d916c9e190f6 GIT binary patch literal 7300 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 + + + diff --git a/doxygen/classdr_1_1sp_1_1distributed__span__inherit__graph.md5 b/doxygen/classdr_1_1sp_1_1distributed__span__inherit__graph.md5 new file mode 100644 index 0000000000..e4ab789c51 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1distributed__span__inherit__graph.md5 @@ -0,0 +1 @@ +61598c1a1bea9a2346a803da620153f9 \ No newline at end of file diff --git a/doxygen/classdr_1_1sp_1_1distributed__span__inherit__graph.png b/doxygen/classdr_1_1sp_1_1distributed__span__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..4fdb76734c3396d3e29347d5c601d916c9e190f6 GIT binary patch literal 7300 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 + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::sp::distributed_vector_accessor< T, L > Member List
    +
    +
    + +

    This is the complete list of members for dr::sp::distributed_vector_accessor< T, L >, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + + + +
    const_iterator_accessor typedef (defined in dr::sp::distributed_vector_accessor< T, L >)dr::sp::distributed_vector_accessor< T, L >
    const_segment_type typedef (defined in dr::sp::distributed_vector_accessor< T, L >)dr::sp::distributed_vector_accessor< T, L >
    difference_type typedef (defined in dr::sp::distributed_vector_accessor< T, L >)dr::sp::distributed_vector_accessor< T, L >
    distributed_vector_accessor() noexcept=default (defined in dr::sp::distributed_vector_accessor< T, L >)dr::sp::distributed_vector_accessor< T, L >
    distributed_vector_accessor(const distributed_vector_accessor &) noexcept=default (defined in dr::sp::distributed_vector_accessor< T, L >)dr::sp::distributed_vector_accessor< T, L >
    distributed_vector_accessor(std::span< segment_type > segments, size_type segment_id, size_type idx, size_type segment_size) noexcept (defined in dr::sp::distributed_vector_accessor< T, L >)dr::sp::distributed_vector_accessor< T, L >inline
    element_type typedef (defined in dr::sp::distributed_vector_accessor< T, L >)dr::sp::distributed_vector_accessor< T, L >
    iterator_accessor typedef (defined in dr::sp::distributed_vector_accessor< T, L >)dr::sp::distributed_vector_accessor< T, L >
    iterator_category typedef (defined in dr::sp::distributed_vector_accessor< T, L >)dr::sp::distributed_vector_accessor< T, L >
    nonconst_iterator_accessor typedef (defined in dr::sp::distributed_vector_accessor< T, L >)dr::sp::distributed_vector_accessor< T, L >
    nonconst_segment_type typedef (defined in dr::sp::distributed_vector_accessor< T, L >)dr::sp::distributed_vector_accessor< T, L >
    operator*() const noexcept (defined in dr::sp::distributed_vector_accessor< T, L >)dr::sp::distributed_vector_accessor< T, L >inline
    operator+=(difference_type offset) noexcept (defined in dr::sp::distributed_vector_accessor< T, L >)dr::sp::distributed_vector_accessor< T, L >inline
    operator-(const iterator_accessor &other) const noexcept (defined in dr::sp::distributed_vector_accessor< T, L >)dr::sp::distributed_vector_accessor< T, L >inline
    operator<(const iterator_accessor &other) const noexcept (defined in dr::sp::distributed_vector_accessor< T, L >)dr::sp::distributed_vector_accessor< T, L >inline
    operator=(const distributed_vector_accessor &) noexcept=default (defined in dr::sp::distributed_vector_accessor< T, L >)dr::sp::distributed_vector_accessor< T, L >
    operator==(const iterator_accessor &other) const noexcept (defined in dr::sp::distributed_vector_accessor< T, L >)dr::sp::distributed_vector_accessor< T, L >inline
    reference typedef (defined in dr::sp::distributed_vector_accessor< T, L >)dr::sp::distributed_vector_accessor< T, L >
    segment_type typedef (defined in dr::sp::distributed_vector_accessor< T, L >)dr::sp::distributed_vector_accessor< T, L >
    segments() const noexcept (defined in dr::sp::distributed_vector_accessor< T, L >)dr::sp::distributed_vector_accessor< T, L >inline
    size_type typedef (defined in dr::sp::distributed_vector_accessor< T, L >)dr::sp::distributed_vector_accessor< T, L >
    value_type typedef (defined in dr::sp::distributed_vector_accessor< T, L >)dr::sp::distributed_vector_accessor< T, L >
    ~distributed_vector_accessor() noexcept=default (defined in dr::sp::distributed_vector_accessor< T, L >)dr::sp::distributed_vector_accessor< T, L >
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1distributed__vector__accessor.html b/doxygen/classdr_1_1sp_1_1distributed__vector__accessor.html new file mode 100644 index 0000000000..cd1d1bf952 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1distributed__vector__accessor.html @@ -0,0 +1,162 @@ + + + + + + + +Distributed Ranges: dr::sp::distributed_vector_accessor< T, L > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::sp::distributed_vector_accessor< T, L > Class Template Reference
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Types

    +using element_type = T
     
    +using value_type = std::remove_cv_t< T >
     
    +using segment_type = L
     
    +using const_segment_type = std::add_const_t< L >
     
    +using nonconst_segment_type = std::remove_const_t< L >
     
    +using size_type = std::size_t
     
    +using difference_type = std::ptrdiff_t
     
    +using reference = rng::range_reference_t< segment_type >
     
    +using iterator_category = std::random_access_iterator_tag
     
    +using iterator_accessor = distributed_vector_accessor
     
    +using const_iterator_accessor = iterator_accessor
     
    +using nonconst_iterator_accessor = iterator_accessor
     
    + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    +constexpr distributed_vector_accessor (const distributed_vector_accessor &) noexcept=default
     
    +constexpr distributed_vector_accessoroperator= (const distributed_vector_accessor &) noexcept=default
     
    +constexpr distributed_vector_accessor (std::span< segment_type > segments, size_type segment_id, size_type idx, size_type segment_size) noexcept
     
    +constexpr distributed_vector_accessoroperator+= (difference_type offset) noexcept
     
    +constexpr bool operator== (const iterator_accessor &other) const noexcept
     
    +constexpr difference_type operator- (const iterator_accessor &other) const noexcept
     
    +constexpr bool operator< (const iterator_accessor &other) const noexcept
     
    +constexpr reference operator* () const noexcept
     
    +auto segments () const noexcept
     
    +
    The documentation for this class was generated from the following file: +
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1duplicated__vector-members.html b/doxygen/classdr_1_1sp_1_1duplicated__vector-members.html new file mode 100644 index 0000000000..50a793092b --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1duplicated__vector-members.html @@ -0,0 +1,97 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::sp::duplicated_vector< T, Allocator > Member List
    +
    + + + + + diff --git a/doxygen/classdr_1_1sp_1_1duplicated__vector.html b/doxygen/classdr_1_1sp_1_1duplicated__vector.html new file mode 100644 index 0000000000..328054570c --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1duplicated__vector.html @@ -0,0 +1,126 @@ + + + + + + + +Distributed Ranges: dr::sp::duplicated_vector< T, Allocator > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::sp::duplicated_vector< T, Allocator > Class Template Reference
    +
    +
    + + + + + + + + + + + + +

    +Public Types

    +using segment_type = dr::sp::device_vector< T, Allocator >
     
    +using value_type = T
     
    +using size_type = std::size_t
     
    +using difference_type = std::ptrdiff_t
     
    +using allocator_type = Allocator
     
    + + + + + + + + + +

    +Public Member Functions

    duplicated_vector (std::size_t count=0)
     
    +size_type size () const noexcept
     
    +segment_typelocal_vector (std::size_t rank)
     
    +const segment_typelocal_vector (std::size_t rank) const
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/containers/duplicated_vector.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1future-members.html b/doxygen/classdr_1_1sp_1_1future-members.html new file mode 100644 index 0000000000..cb14e5776d --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1future-members.html @@ -0,0 +1,100 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::sp::future< T, Event > Member List
    +
    +
    + +

    This is the complete list of members for dr::sp::future< T, Event >, including all inherited members.

    + + + + + + + + + + + + + +
    event_type typedef (defined in dr::sp::future< T, Event >)dr::sp::future< T, Event >
    events() const (defined in dr::sp::future< T, Event >)dr::sp::future< T, Event >inline
    future(std::unique_ptr< T > &&value, const std::vector< Event > &events) (defined in dr::sp::future< T, Event >)dr::sp::future< T, Event >inline
    future(T &&value, const std::vector< Event > &events) (defined in dr::sp::future< T, Event >)dr::sp::future< T, Event >inline
    future(future &&)=default (defined in dr::sp::future< T, Event >)dr::sp::future< T, Event >
    future(const future &)=delete (defined in dr::sp::future< T, Event >)dr::sp::future< T, Event >
    get() (defined in dr::sp::future< T, Event >)dr::sp::future< T, Event >inline
    operator=(future &&)=default (defined in dr::sp::future< T, Event >)dr::sp::future< T, Event >
    operator=(const future &)=delete (defined in dr::sp::future< T, Event >)dr::sp::future< T, Event >
    update(const Event &event) (defined in dr::sp::future< T, Event >)dr::sp::future< T, Event >inline
    value() const (defined in dr::sp::future< T, Event >)dr::sp::future< T, Event >inline
    wait() (defined in dr::sp::future< T, Event >)dr::sp::future< T, Event >inline
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1future.html b/doxygen/classdr_1_1sp_1_1future.html new file mode 100644 index 0000000000..e10198468a --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1future.html @@ -0,0 +1,135 @@ + + + + + + + +Distributed Ranges: dr::sp::future< T, Event > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::sp::future< T, Event > Class Template Reference
    +
    +
    + + + + +

    +Public Types

    +using event_type = Event
     
    + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    future (std::unique_ptr< T > &&value, const std::vector< Event > &events)
     
    future (T &&value, const std::vector< Event > &events)
     
    +void update (const Event &event)
     
    future (future &&)=default
     
    +futureoperator= (future &&)=default
     
    future (const future &)=delete
     
    +futureoperator= (const future &)=delete
     
    +T get ()
     
    +std::vector< Event > events () const
     
    +T & value () const
     
    +void wait ()
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/future.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1id-members.html b/doxygen/classdr_1_1sp_1_1id-members.html new file mode 100644 index 0000000000..f7c23b983e --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1id-members.html @@ -0,0 +1,94 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::sp::id< dimensions > Member List
    +
    +
    + +

    This is the complete list of members for dr::sp::id< dimensions >, including all inherited members.

    + + + + + + + +
    get(int dimension) const (defined in dr::sp::id< dimensions >)dr::sp::id< dimensions >inline
    id() noexcept=default (defined in dr::sp::id< dimensions >)dr::sp::id< dimensions >
    id(std::size_t segment_id, std::size_t local_id, std::size_t global_id) (defined in dr::sp::id< dimensions >)dr::sp::id< dimensions >inline
    local_id() const (defined in dr::sp::id< dimensions >)dr::sp::id< dimensions >inline
    operator std::size_t() const (defined in dr::sp::id< dimensions >)dr::sp::id< dimensions >inline
    segment() const (defined in dr::sp::id< dimensions >)dr::sp::id< dimensions >inline
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1id.html b/doxygen/classdr_1_1sp_1_1id.html new file mode 100644 index 0000000000..f021775930 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1id.html @@ -0,0 +1,110 @@ + + + + + + + +Distributed Ranges: dr::sp::id< dimensions > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::sp::id< dimensions > Class Template Reference
    +
    +
    + + + + + + + + + + + + +

    +Public Member Functions

    id (std::size_t segment_id, std::size_t local_id, std::size_t global_id)
     
    +std::size_t get (int dimension) const
     
    operator std::size_t () const
     
    +std::size_t segment () const
     
    +std::size_t local_id () const
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/range.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1matrix__entry-members.html b/doxygen/classdr_1_1sp_1_1matrix__entry-members.html new file mode 100644 index 0000000000..65668b6ad0 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1matrix__entry-members.html @@ -0,0 +1,107 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::sp::matrix_entry< T, I > Member List
    +
    +
    + +

    This is the complete list of members for dr::sp::matrix_entry< T, I >, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + +
    get() const noexcept (defined in dr::sp::matrix_entry< T, I >)dr::sp::matrix_entry< T, I >inline
    index() const noexcept (defined in dr::sp::matrix_entry< T, I >)dr::sp::matrix_entry< T, I >inline
    index_type typedef (defined in dr::sp::matrix_entry< T, I >)dr::sp::matrix_entry< T, I >
    map_type typedef (defined in dr::sp::matrix_entry< T, I >)dr::sp::matrix_entry< T, I >
    matrix_entry(dr::index< I > index, const map_type &value) (defined in dr::sp::matrix_entry< T, I >)dr::sp::matrix_entry< T, I >inline
    matrix_entry(dr::index< I > index, map_type &&value) (defined in dr::sp::matrix_entry< T, I >)dr::sp::matrix_entry< T, I >inline
    matrix_entry(dr::index< I > index, U &&value) (defined in dr::sp::matrix_entry< T, I >)dr::sp::matrix_entry< T, I >inline
    matrix_entry(Entry &&entry) (defined in dr::sp::matrix_entry< T, I >)dr::sp::matrix_entry< T, I >inline
    matrix_entry()=default (defined in dr::sp::matrix_entry< T, I >)dr::sp::matrix_entry< T, I >
    matrix_entry(const matrix_entry &)=default (defined in dr::sp::matrix_entry< T, I >)dr::sp::matrix_entry< T, I >
    matrix_entry(matrix_entry &&)=default (defined in dr::sp::matrix_entry< T, I >)dr::sp::matrix_entry< T, I >
    operator matrix_entry< std::add_const_t< T >, U >() const noexcept (defined in dr::sp::matrix_entry< T, I >)dr::sp::matrix_entry< T, I >inline
    operator matrix_entry< T, U >() const noexcept (defined in dr::sp::matrix_entry< T, I >)dr::sp::matrix_entry< T, I >inline
    operator std::pair< std::pair< I, I >, T >() const noexcept (defined in dr::sp::matrix_entry< T, I >)dr::sp::matrix_entry< T, I >inline
    operator<(const matrix_entry &other) const noexcept (defined in dr::sp::matrix_entry< T, I >)dr::sp::matrix_entry< T, I >inline
    operator=(const matrix_entry &)=default (defined in dr::sp::matrix_entry< T, I >)dr::sp::matrix_entry< T, I >
    operator=(matrix_entry &&)=default (defined in dr::sp::matrix_entry< T, I >)dr::sp::matrix_entry< T, I >
    value() const noexcept (defined in dr::sp::matrix_entry< T, I >)dr::sp::matrix_entry< T, I >inline
    ~matrix_entry()=default (defined in dr::sp::matrix_entry< T, I >)dr::sp::matrix_entry< T, I >
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1matrix__entry.html b/doxygen/classdr_1_1sp_1_1matrix__entry.html new file mode 100644 index 0000000000..598571397b --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1matrix__entry.html @@ -0,0 +1,158 @@ + + + + + + + +Distributed Ranges: dr::sp::matrix_entry< T, I > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::sp::matrix_entry< T, I > Class Template Reference
    +
    +
    + + + + + + +

    +Public Types

    +using index_type = I
     
    +using map_type = T
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    matrix_entry (dr::index< I > index, const map_type &value)
     
    matrix_entry (dr::index< I > index, map_type &&value)
     
    +template<typename U >
    +requires (std::is_constructible_v<T, U>)
     matrix_entry (dr::index< I > index, U &&value)
     
    +template<typename Entry >
     matrix_entry (Entry &&entry)
     
    +template<std::size_t Index>
    auto get () const noexcept
     
    operator std::pair< std::pair< I, I >, T > () const noexcept
     
    +dr::index< I > index () const noexcept
     
    +map_type value () const noexcept
     
    +template<std::integral U>
    +requires (!std::is_same_v<I, U> && std::numeric_limits<U>::max() >= std::numeric_limits<I>::max())
     operator matrix_entry< T, U > () const noexcept
     
    +template<std::integral U>
    +requires (!std::is_const_v<T> && !std::is_same_v<I, U> && std::numeric_limits<U>::max() >= std::numeric_limits<I>::max())
     operator matrix_entry< std::add_const_t< T >, U > () const noexcept
     
    +bool operator< (const matrix_entry &other) const noexcept
     
    matrix_entry (const matrix_entry &)=default
     
    matrix_entry (matrix_entry &&)=default
     
    +matrix_entryoperator= (const matrix_entry &)=default
     
    +matrix_entryoperator= (matrix_entry &&)=default
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/containers/matrix_entry.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1matrix__partition-members.html b/doxygen/classdr_1_1sp_1_1matrix__partition-members.html new file mode 100644 index 0000000000..6c48a4aa65 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1matrix__partition-members.html @@ -0,0 +1,93 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::sp::matrix_partition Member List
    +
    +
    + +

    This is the complete list of members for dr::sp::matrix_partition, including all inherited members.

    + + + + + + +
    clone() const =0 (defined in dr::sp::matrix_partition)dr::sp::matrix_partitionpure virtual
    grid_shape(dr::index<> matrix_shape) const =0 (defined in dr::sp::matrix_partition)dr::sp::matrix_partitionpure virtual
    tile_rank(dr::index<> matrix_shape, dr::index<> tile_id) const =0 (defined in dr::sp::matrix_partition)dr::sp::matrix_partitionpure virtual
    tile_shape(dr::index<> matrix_shape) const =0 (defined in dr::sp::matrix_partition)dr::sp::matrix_partitionpure virtual
    ~matrix_partition() (defined in dr::sp::matrix_partition)dr::sp::matrix_partitioninlinevirtual
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1matrix__partition.html b/doxygen/classdr_1_1sp_1_1matrix__partition.html new file mode 100644 index 0000000000..6ae6309d2e --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1matrix__partition.html @@ -0,0 +1,116 @@ + + + + + + + +Distributed Ranges: dr::sp::matrix_partition Class Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::sp::matrix_partition Class Referenceabstract
    +
    +
    +
    +Inheritance diagram for dr::sp::matrix_partition:
    +
    +
    Inheritance graph
    + + + + +
    [legend]
    + + + + + + + + + + +

    +Public Member Functions

    +virtual std::size_t tile_rank (dr::index<> matrix_shape, dr::index<> tile_id) const =0
     
    +virtual dr::index grid_shape (dr::index<> matrix_shape) const =0
     
    +virtual dr::index tile_shape (dr::index<> matrix_shape) const =0
     
    +virtual std::unique_ptr< matrix_partitionclone () const =0
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/containers/matrix_partition.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1matrix__partition__inherit__graph.map b/doxygen/classdr_1_1sp_1_1matrix__partition__inherit__graph.map new file mode 100644 index 0000000000..f5ad551712 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1matrix__partition__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/classdr_1_1sp_1_1matrix__partition__inherit__graph.md5 b/doxygen/classdr_1_1sp_1_1matrix__partition__inherit__graph.md5 new file mode 100644 index 0000000000..4ee6067725 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1matrix__partition__inherit__graph.md5 @@ -0,0 +1 @@ +080af13c76fb02ce13ea398b15c7fa50 \ No newline at end of file diff --git a/doxygen/classdr_1_1sp_1_1matrix__partition__inherit__graph.png b/doxygen/classdr_1_1sp_1_1matrix__partition__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..d4e3ee195c4b061493d7bcc641d1e53a5050bc53 GIT binary patch literal 4490 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 literal 0 HcmV?d00001 diff --git a/doxygen/classdr_1_1sp_1_1matrix__ref-members.html b/doxygen/classdr_1_1sp_1_1matrix__ref-members.html new file mode 100644 index 0000000000..2acbc5b6ac --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1matrix__ref-members.html @@ -0,0 +1,109 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::sp::matrix_ref< T, I, TRef > Member List
    +
    +
    + +

    This is the complete list of members for dr::sp::matrix_ref< T, I, TRef >, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + +
    get() const noexcept (defined in dr::sp::matrix_ref< T, I, TRef >)dr::sp::matrix_ref< T, I, TRef >inline
    index() const noexcept (defined in dr::sp::matrix_ref< T, I, TRef >)dr::sp::matrix_ref< T, I, TRef >inline
    index_type typedef (defined in dr::sp::matrix_ref< T, I, TRef >)dr::sp::matrix_ref< T, I, TRef >
    key_type typedef (defined in dr::sp::matrix_ref< T, I, TRef >)dr::sp::matrix_ref< T, I, TRef >
    map_type typedef (defined in dr::sp::matrix_ref< T, I, TRef >)dr::sp::matrix_ref< T, I, TRef >
    matrix_ref(dr::index< I > index, scalar_reference value) (defined in dr::sp::matrix_ref< T, I, TRef >)dr::sp::matrix_ref< T, I, TRef >inline
    matrix_ref()=delete (defined in dr::sp::matrix_ref< T, I, TRef >)dr::sp::matrix_ref< T, I, TRef >
    matrix_ref(const matrix_ref &)=default (defined in dr::sp::matrix_ref< T, I, TRef >)dr::sp::matrix_ref< T, I, TRef >
    matrix_ref(matrix_ref &&)=default (defined in dr::sp::matrix_ref< T, I, TRef >)dr::sp::matrix_ref< T, I, TRef >
    operator matrix_ref< std::add_const_t< T >, U, TRef >() const noexcept (defined in dr::sp::matrix_ref< T, I, TRef >)dr::sp::matrix_ref< T, I, TRef >inline
    operator matrix_ref< T, U, TRef >() const noexcept (defined in dr::sp::matrix_ref< T, I, TRef >)dr::sp::matrix_ref< T, I, TRef >inline
    operator std::pair< std::pair< I, I >, T >() const noexcept (defined in dr::sp::matrix_ref< T, I, TRef >)dr::sp::matrix_ref< T, I, TRef >inline
    operator value_type() const noexcept (defined in dr::sp::matrix_ref< T, I, TRef >)dr::sp::matrix_ref< T, I, TRef >inline
    operator<(matrix_entry< T, I > other) const noexcept (defined in dr::sp::matrix_ref< T, I, TRef >)dr::sp::matrix_ref< T, I, TRef >inline
    operator=(const matrix_ref &)=delete (defined in dr::sp::matrix_ref< T, I, TRef >)dr::sp::matrix_ref< T, I, TRef >
    operator=(matrix_ref &&)=default (defined in dr::sp::matrix_ref< T, I, TRef >)dr::sp::matrix_ref< T, I, TRef >
    scalar_reference typedef (defined in dr::sp::matrix_ref< T, I, TRef >)dr::sp::matrix_ref< T, I, TRef >
    scalar_type typedef (defined in dr::sp::matrix_ref< T, I, TRef >)dr::sp::matrix_ref< T, I, TRef >
    value() const noexcept (defined in dr::sp::matrix_ref< T, I, TRef >)dr::sp::matrix_ref< T, I, TRef >inline
    value_type typedef (defined in dr::sp::matrix_ref< T, I, TRef >)dr::sp::matrix_ref< T, I, TRef >
    ~matrix_ref()=default (defined in dr::sp::matrix_ref< T, I, TRef >)dr::sp::matrix_ref< T, I, TRef >
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1matrix__ref.html b/doxygen/classdr_1_1sp_1_1matrix__ref.html new file mode 100644 index 0000000000..64caf90595 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1matrix__ref.html @@ -0,0 +1,162 @@ + + + + + + + +Distributed Ranges: dr::sp::matrix_ref< T, I, TRef > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::sp::matrix_ref< T, I, TRef > Class Template Reference
    +
    +
    + + + + + + + + + + + + + + +

    +Public Types

    +using scalar_type = T
     
    +using index_type = I
     
    +using key_type = dr::index< I >
     
    +using map_type = T
     
    +using scalar_reference = TRef
     
    +using value_type = dr::sp::matrix_entry< T, I >
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    matrix_ref (dr::index< I > index, scalar_reference value)
     
    operator value_type () const noexcept
     
    operator std::pair< std::pair< I, I >, T > () const noexcept
     
    +template<std::size_t Index>
    +requires (Index <= 1)
    decltype(auto) get () const noexcept
     
    +dr::index< I > index () const noexcept
     
    +scalar_reference value () const noexcept
     
    +template<std::integral U>
    +requires (!std::is_same_v<I, U> && std::numeric_limits<U>::max() >= std::numeric_limits<I>::max())
     operator matrix_ref< T, U, TRef > () const noexcept
     
    +template<std::integral U>
    +requires (!std::is_const_v<T> && !std::is_same_v<I, U> && std::numeric_limits<U>::max() >= std::numeric_limits<I>::max())
     operator matrix_ref< std::add_const_t< T >, U, TRef > () const noexcept
     
    +bool operator< (matrix_entry< T, I > other) const noexcept
     
    matrix_ref (const matrix_ref &)=default
     
    +matrix_refoperator= (const matrix_ref &)=delete
     
    matrix_ref (matrix_ref &&)=default
     
    +matrix_refoperator= (matrix_ref &&)=default
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/containers/matrix_entry.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1segment__range-members.html b/doxygen/classdr_1_1sp_1_1segment__range-members.html new file mode 100644 index 0000000000..a2cf3bdd2b --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1segment__range-members.html @@ -0,0 +1,99 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::sp::segment_range< dimensions > Member List
    +
    +
    + +

    This is the complete list of members for dr::sp::segment_range< dimensions >, including all inherited members.

    + + + + + + + + + + + + +
    begin() const (defined in dr::sp::segment_range< dimensions >)dr::sp::segment_range< dimensions >inline
    different_type typedef (defined in dr::sp::segment_range< dimensions >)dr::sp::segment_range< dimensions >
    end() const (defined in dr::sp::segment_range< dimensions >)dr::sp::segment_range< dimensions >inline
    iterator typedef (defined in dr::sp::segment_range< dimensions >)dr::sp::segment_range< dimensions >
    operator[](std::size_t idx) (defined in dr::sp::segment_range< dimensions >)dr::sp::segment_range< dimensions >inline
    rank() const noexcept (defined in dr::sp::segment_range< dimensions >)dr::sp::segment_range< dimensions >inline
    reference typedef (defined in dr::sp::segment_range< dimensions >)dr::sp::segment_range< dimensions >
    segment_range(std::size_t segment_id, std::size_t segment_size, std::size_t global_offset) (defined in dr::sp::segment_range< dimensions >)dr::sp::segment_range< dimensions >inline
    size() const noexcept (defined in dr::sp::segment_range< dimensions >)dr::sp::segment_range< dimensions >inline
    size_type typedef (defined in dr::sp::segment_range< dimensions >)dr::sp::segment_range< dimensions >
    value_type typedef (defined in dr::sp::segment_range< dimensions >)dr::sp::segment_range< dimensions >
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1segment__range.html b/doxygen/classdr_1_1sp_1_1segment__range.html new file mode 100644 index 0000000000..83f9e960fb --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1segment__range.html @@ -0,0 +1,132 @@ + + + + + + + +Distributed Ranges: dr::sp::segment_range< dimensions > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::sp::segment_range< dimensions > Class Template Reference
    +
    +
    + + + + + + + + + + + + +

    +Public Types

    +using value_type = id< dimensions >
     
    +using size_type = std::size_t
     
    +using different_type = std::ptrdiff_t
     
    +using reference = value_type
     
    +using iterator = segment_range_iterator
     
    + + + + + + + + + + + + + +

    +Public Member Functions

    segment_range (std::size_t segment_id, std::size_t segment_size, std::size_t global_offset)
     
    +iterator begin () const
     
    +iterator end () const
     
    +size_type size () const noexcept
     
    +value_type operator[] (std::size_t idx)
     
    +size_type rank () const noexcept
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/range.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1segment__range__accessor-members.html b/doxygen/classdr_1_1sp_1_1segment__range__accessor-members.html new file mode 100644 index 0000000000..858bd34eef --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1segment__range__accessor-members.html @@ -0,0 +1,107 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::sp::segment_range_accessor Member List
    +
    +
    + +

    This is the complete list of members for dr::sp::segment_range_accessor, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + +
    const_iterator_accessor typedef (defined in dr::sp::segment_range_accessor)dr::sp::segment_range_accessor
    difference_type typedef (defined in dr::sp::segment_range_accessor)dr::sp::segment_range_accessor
    element_type typedef (defined in dr::sp::segment_range_accessor)dr::sp::segment_range_accessor
    iterator_accessor typedef (defined in dr::sp::segment_range_accessor)dr::sp::segment_range_accessor
    iterator_category typedef (defined in dr::sp::segment_range_accessor)dr::sp::segment_range_accessor
    nonconst_iterator_accessor typedef (defined in dr::sp::segment_range_accessor)dr::sp::segment_range_accessor
    operator*() const noexcept (defined in dr::sp::segment_range_accessor)dr::sp::segment_range_accessorinline
    operator+=(difference_type offset) noexcept (defined in dr::sp::segment_range_accessor)dr::sp::segment_range_accessorinline
    operator-(const iterator_accessor &other) const noexcept (defined in dr::sp::segment_range_accessor)dr::sp::segment_range_accessorinline
    operator<(const iterator_accessor &other) const noexcept (defined in dr::sp::segment_range_accessor)dr::sp::segment_range_accessorinline
    operator=(const segment_range_accessor &) noexcept=default (defined in dr::sp::segment_range_accessor)dr::sp::segment_range_accessor
    operator==(const iterator_accessor &other) const noexcept (defined in dr::sp::segment_range_accessor)dr::sp::segment_range_accessorinline
    reference typedef (defined in dr::sp::segment_range_accessor)dr::sp::segment_range_accessor
    segment_range_accessor() noexcept=default (defined in dr::sp::segment_range_accessor)dr::sp::segment_range_accessor
    segment_range_accessor(const segment_range_accessor &) noexcept=default (defined in dr::sp::segment_range_accessor)dr::sp::segment_range_accessor
    segment_range_accessor(size_type segment_id, size_type idx, size_type global_offset) noexcept (defined in dr::sp::segment_range_accessor)dr::sp::segment_range_accessorinline
    size_type typedef (defined in dr::sp::segment_range_accessor)dr::sp::segment_range_accessor
    value_type typedef (defined in dr::sp::segment_range_accessor)dr::sp::segment_range_accessor
    ~segment_range_accessor() noexcept=default (defined in dr::sp::segment_range_accessor)dr::sp::segment_range_accessor
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1segment__range__accessor.html b/doxygen/classdr_1_1sp_1_1segment__range__accessor.html new file mode 100644 index 0000000000..862646c47b --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1segment__range__accessor.html @@ -0,0 +1,150 @@ + + + + + + + +Distributed Ranges: dr::sp::segment_range_accessor Class Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::sp::segment_range_accessor Class Reference
    +
    +
    + + + + + + + + + + + + + + + + + + + + +

    +Public Types

    +using element_type = id< 1 >
     
    +using value_type = element_type
     
    +using size_type = std::size_t
     
    +using difference_type = std::ptrdiff_t
     
    +using reference = value_type
     
    +using iterator_category = std::random_access_iterator_tag
     
    +using iterator_accessor = segment_range_accessor
     
    +using const_iterator_accessor = iterator_accessor
     
    +using nonconst_iterator_accessor = iterator_accessor
     
    + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    +constexpr segment_range_accessor (const segment_range_accessor &) noexcept=default
     
    +constexpr segment_range_accessoroperator= (const segment_range_accessor &) noexcept=default
     
    +constexpr segment_range_accessor (size_type segment_id, size_type idx, size_type global_offset) noexcept
     
    +constexpr segment_range_accessoroperator+= (difference_type offset) noexcept
     
    +constexpr bool operator== (const iterator_accessor &other) const noexcept
     
    +constexpr difference_type operator- (const iterator_accessor &other) const noexcept
     
    +constexpr bool operator< (const iterator_accessor &other) const noexcept
     
    +reference operator* () const noexcept
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/range.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1span-members.html b/doxygen/classdr_1_1sp_1_1span-members.html new file mode 100644 index 0000000000..bc829a3930 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1span-members.html @@ -0,0 +1,107 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::sp::span< T, Iter > Member List
    +
    +
    + +

    This is the complete list of members for dr::sp::span< T, Iter >, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + +
    begin() const noexcept (defined in dr::sp::span< T, Iter >)dr::sp::span< T, Iter >inline
    difference_type typedef (defined in dr::sp::span< T, Iter >)dr::sp::span< T, Iter >
    empty() const noexcept (defined in dr::sp::span< T, Iter >)dr::sp::span< T, Iter >inline
    end() const noexcept (defined in dr::sp::span< T, Iter >)dr::sp::span< T, Iter >inline
    first(size_type n) const (defined in dr::sp::span< T, Iter >)dr::sp::span< T, Iter >inline
    iterator typedef (defined in dr::sp::span< T, Iter >)dr::sp::span< T, Iter >
    last(size_type n) const (defined in dr::sp::span< T, Iter >)dr::sp::span< T, Iter >inline
    operator=(const span &) noexcept=default (defined in dr::sp::span< T, Iter >)dr::sp::span< T, Iter >
    operator[](size_type index) const (defined in dr::sp::span< T, Iter >)dr::sp::span< T, Iter >inline
    reference typedef (defined in dr::sp::span< T, Iter >)dr::sp::span< T, Iter >
    size() const noexcept (defined in dr::sp::span< T, Iter >)dr::sp::span< T, Iter >inline
    size_type typedef (defined in dr::sp::span< T, Iter >)dr::sp::span< T, Iter >
    span(R &&r) (defined in dr::sp::span< T, Iter >)dr::sp::span< T, Iter >inline
    span(Iter first, Iter last) (defined in dr::sp::span< T, Iter >)dr::sp::span< T, Iter >inline
    span(Iter first, std::size_t count) (defined in dr::sp::span< T, Iter >)dr::sp::span< T, Iter >inline
    span()=default (defined in dr::sp::span< T, Iter >)dr::sp::span< T, Iter >
    span(const span &) noexcept=default (defined in dr::sp::span< T, Iter >)dr::sp::span< T, Iter >
    subspan(std::size_t offset, std::size_t count) const (defined in dr::sp::span< T, Iter >)dr::sp::span< T, Iter >inline
    value_type typedef (defined in dr::sp::span< T, Iter >)dr::sp::span< T, Iter >
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1span.html b/doxygen/classdr_1_1sp_1_1span.html new file mode 100644 index 0000000000..65a8f21035 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1span.html @@ -0,0 +1,173 @@ + + + + + + + +Distributed Ranges: dr::sp::span< T, Iter > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::sp::span< T, Iter > Class Template Reference
    +
    +
    +
    +Inheritance diagram for dr::sp::span< T, Iter >:
    +
    +
    Inheritance graph
    + + + + + +
    [legend]
    +
    +Collaboration diagram for dr::sp::span< T, Iter >:
    +
    +
    Collaboration graph
    + + + + +
    [legend]
    + + + + + + + + + + + + +

    +Public Types

    +using value_type = std::iter_value_t< Iter >
     
    +using size_type = std::size_t
     
    +using difference_type = std::iter_difference_t< Iter >
     
    +using reference = std::iter_reference_t< Iter >
     
    +using iterator = Iter
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    +template<rng::random_access_range R>
     span (R &&r)
     
    span (Iter first, Iter last)
     
    span (Iter first, std::size_t count)
     
    span (const span &) noexcept=default
     
    +spanoperator= (const span &) noexcept=default
     
    +std::size_t size () const noexcept
     
    +bool empty () const noexcept
     
    +Iter begin () const noexcept
     
    +Iter end () const noexcept
     
    +reference operator[] (size_type index) const
     
    +span first (size_type n) const
     
    +span last (size_type n) const
     
    +span subspan (std::size_t offset, std::size_t count) const
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/span.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1span__coll__graph.map b/doxygen/classdr_1_1sp_1_1span__coll__graph.map new file mode 100644 index 0000000000..d90885f0b3 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1span__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/classdr_1_1sp_1_1span__coll__graph.md5 b/doxygen/classdr_1_1sp_1_1span__coll__graph.md5 new file mode 100644 index 0000000000..efe1bf6d6c --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1span__coll__graph.md5 @@ -0,0 +1 @@ +4574556b396bd81b17bcc1b14e5f7bad \ No newline at end of file diff --git a/doxygen/classdr_1_1sp_1_1span__coll__graph.png b/doxygen/classdr_1_1sp_1_1span__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..44b5ca280365a389e0fd997518e58b050ac4ddd7 GIT binary patch literal 6355 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 YOnTCa*#$K;{7QjPlzoIOkTLQ7AK=%6wg3PC literal 0 HcmV?d00001 diff --git a/doxygen/classdr_1_1sp_1_1span__inherit__graph.map b/doxygen/classdr_1_1sp_1_1span__inherit__graph.map new file mode 100644 index 0000000000..499bfbd328 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1span__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/doxygen/classdr_1_1sp_1_1span__inherit__graph.md5 b/doxygen/classdr_1_1sp_1_1span__inherit__graph.md5 new file mode 100644 index 0000000000..eafe33d643 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1span__inherit__graph.md5 @@ -0,0 +1 @@ +f98117b75add6b37e32e4c21f585d518 \ No newline at end of file diff --git a/doxygen/classdr_1_1sp_1_1span__inherit__graph.png b/doxygen/classdr_1_1sp_1_1span__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..bf294f0797397e4276a9b29cefe2c2e33ac31402 GIT binary patch literal 9712 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 + + + + + + +Distributed Ranges: Member List + + + + + + + + + +

    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::sp::sparse_matrix< T, I > Member List
    +
    +
    + +

    This is the complete list of members for dr::sp::sparse_matrix< T, I >, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    begin() (defined in dr::sp::sparse_matrix< T, I >)dr::sp::sparse_matrix< T, I >inline
    const_reference typedef (defined in dr::sp::sparse_matrix< T, I >)dr::sp::sparse_matrix< T, I >
    const_scalar_reference typedef (defined in dr::sp::sparse_matrix< T, I >)dr::sp::sparse_matrix< T, I >
    copy_tile(key_type tile_index, csr_matrix_view< T, I, Args... > tile_view) (defined in dr::sp::sparse_matrix< T, I >)dr::sp::sparse_matrix< T, I >inline
    copy_tile_async(key_type tile_index, csr_matrix_view< T, I, Args... > tile_view) (defined in dr::sp::sparse_matrix< T, I >)dr::sp::sparse_matrix< T, I >inline
    difference_type typedef (defined in dr::sp::sparse_matrix< T, I >)dr::sp::sparse_matrix< T, I >
    end() (defined in dr::sp::sparse_matrix< T, I >)dr::sp::sparse_matrix< T, I >inline
    grid_shape() const noexcept (defined in dr::sp::sparse_matrix< T, I >)dr::sp::sparse_matrix< T, I >inline
    iterator typedef (defined in dr::sp::sparse_matrix< T, I >)dr::sp::sparse_matrix< T, I >
    key_type typedef (defined in dr::sp::sparse_matrix< T, I >)dr::sp::sparse_matrix< T, I >
    reference typedef (defined in dr::sp::sparse_matrix< T, I >)dr::sp::sparse_matrix< T, I >
    scalar_reference typedef (defined in dr::sp::sparse_matrix< T, I >)dr::sp::sparse_matrix< T, I >
    segment_type typedef (defined in dr::sp::sparse_matrix< T, I >)dr::sp::sparse_matrix< T, I >
    segments() (defined in dr::sp::sparse_matrix< T, I >)dr::sp::sparse_matrix< T, I >inline
    shape() const noexcept (defined in dr::sp::sparse_matrix< T, I >)dr::sp::sparse_matrix< T, I >inline
    size() const noexcept (defined in dr::sp::sparse_matrix< T, I >)dr::sp::sparse_matrix< T, I >inline
    size_type typedef (defined in dr::sp::sparse_matrix< T, I >)dr::sp::sparse_matrix< T, I >
    sparse_matrix(key_type shape) (defined in dr::sp::sparse_matrix< T, I >)dr::sp::sparse_matrix< T, I >inline
    sparse_matrix(key_type shape, double density) (defined in dr::sp::sparse_matrix< T, I >)dr::sp::sparse_matrix< T, I >inline
    sparse_matrix(key_type shape, double density, const matrix_partition &partition) (defined in dr::sp::sparse_matrix< T, I >)dr::sp::sparse_matrix< T, I >inline
    sparse_matrix(key_type shape, const matrix_partition &partition) (defined in dr::sp::sparse_matrix< T, I >)dr::sp::sparse_matrix< T, I >inline
    tile(key_type tile_index) (defined in dr::sp::sparse_matrix< T, I >)dr::sp::sparse_matrix< T, I >inline
    tile_shape() const noexcept (defined in dr::sp::sparse_matrix< T, I >)dr::sp::sparse_matrix< T, I >inline
    tiles() (defined in dr::sp::sparse_matrix< T, I >)dr::sp::sparse_matrix< T, I >inline
    value_type typedef (defined in dr::sp::sparse_matrix< T, I >)dr::sp::sparse_matrix< T, I >
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1sparse__matrix.html b/doxygen/classdr_1_1sp_1_1sparse__matrix.html new file mode 100644 index 0000000000..3eaf9f28f5 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1sparse__matrix.html @@ -0,0 +1,176 @@ + + + + + + + +Distributed Ranges: dr::sp::sparse_matrix< T, I > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::sp::sparse_matrix< T, I > Class Template Reference
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + +

    +Public Types

    +using size_type = std::size_t
     
    +using difference_type = std::ptrdiff_t
     
    +using value_type = dr::sp::matrix_entry< T >
     
    +using scalar_reference = rng::range_reference_t< dr::sp::device_vector< T, dr::sp::device_allocator< T > > >
     
    +using const_scalar_reference = rng::range_reference_t< const dr::sp::device_vector< T, dr::sp::device_allocator< T > > >
     
    +using reference = dr::sp::matrix_ref< T, scalar_reference >
     
    +using const_reference = dr::sp::matrix_ref< const T, const_scalar_reference >
     
    +using key_type = dr::index< I >
     
    +using segment_type = dr::sp::csr_matrix_view< T, I, rng::iterator_t< dr::sp::device_vector< T, dr::sp::device_allocator< T > > >, rng::iterator_t< dr::sp::device_vector< I, dr::sp::device_allocator< I > > > >
     
    +using iterator = distributed_sparse_matrix_iterator< std::span< segment_type > && >
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    sparse_matrix (key_type shape)
     
    sparse_matrix (key_type shape, double density)
     
    sparse_matrix (key_type shape, double density, const matrix_partition &partition)
     
    sparse_matrix (key_type shape, const matrix_partition &partition)
     
    +size_type size () const noexcept
     
    +key_type shape () const noexcept
     
    +iterator begin ()
     
    +iterator end ()
     
    +segment_type tile (key_type tile_index)
     
    +template<typename... Args>
    auto copy_tile_async (key_type tile_index, csr_matrix_view< T, I, Args... > tile_view)
     
    +template<typename... Args>
    void copy_tile (key_type tile_index, csr_matrix_view< T, I, Args... > tile_view)
     
    +key_type tile_shape () const noexcept
     
    +key_type grid_shape () const noexcept
     
    +std::span< segment_typetiles ()
     
    +std::span< segment_typesegments ()
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/containers/sparse_matrix.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1vector-members.html b/doxygen/classdr_1_1sp_1_1vector-members.html new file mode 100644 index 0000000000..7f6d61c0e9 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1vector-members.html @@ -0,0 +1,129 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::sp::vector< T, Allocator > Member List
    +
    +
    + +

    This is the complete list of members for dr::sp::vector< T, Allocator >, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    allocator_type typedef (defined in dr::sp::vector< T, Allocator >)dr::sp::vector< T, Allocator >
    assign(Iter first, Iter last) (defined in dr::sp::vector< T, Allocator >)dr::sp::vector< T, Allocator >inline
    begin() noexcept (defined in dr::sp::vector< T, Allocator >)dr::sp::vector< T, Allocator >inline
    begin() const noexcept (defined in dr::sp::vector< T, Allocator >)dr::sp::vector< T, Allocator >inline
    capacity() const noexcept (defined in dr::sp::vector< T, Allocator >)dr::sp::vector< T, Allocator >inline
    const_iterator typedef (defined in dr::sp::vector< T, Allocator >)dr::sp::vector< T, Allocator >
    const_pointer typedef (defined in dr::sp::vector< T, Allocator >)dr::sp::vector< T, Allocator >
    const_reference typedef (defined in dr::sp::vector< T, Allocator >)dr::sp::vector< T, Allocator >
    data() noexcept (defined in dr::sp::vector< T, Allocator >)dr::sp::vector< T, Allocator >inline
    data() const noexcept (defined in dr::sp::vector< T, Allocator >)dr::sp::vector< T, Allocator >inline
    difference_type typedef (defined in dr::sp::vector< T, Allocator >)dr::sp::vector< T, Allocator >
    empty() const noexcept (defined in dr::sp::vector< T, Allocator >)dr::sp::vector< T, Allocator >inline
    end() noexcept (defined in dr::sp::vector< T, Allocator >)dr::sp::vector< T, Allocator >inline
    end() const noexcept (defined in dr::sp::vector< T, Allocator >)dr::sp::vector< T, Allocator >inline
    get_allocator() const noexcept (defined in dr::sp::vector< T, Allocator >)dr::sp::vector< T, Allocator >inline
    iterator typedef (defined in dr::sp::vector< T, Allocator >)dr::sp::vector< T, Allocator >
    operator=(const vector &other) (defined in dr::sp::vector< T, Allocator >)dr::sp::vector< T, Allocator >inline
    operator[](size_type pos) (defined in dr::sp::vector< T, Allocator >)dr::sp::vector< T, Allocator >inline
    operator[](size_type pos) const (defined in dr::sp::vector< T, Allocator >)dr::sp::vector< T, Allocator >inline
    pointer typedef (defined in dr::sp::vector< T, Allocator >)dr::sp::vector< T, Allocator >
    push_back(const T &value) (defined in dr::sp::vector< T, Allocator >)dr::sp::vector< T, Allocator >inline
    push_back(T &&value) (defined in dr::sp::vector< T, Allocator >)dr::sp::vector< T, Allocator >inline
    reference typedef (defined in dr::sp::vector< T, Allocator >)dr::sp::vector< T, Allocator >
    reserve(size_type new_cap) (defined in dr::sp::vector< T, Allocator >)dr::sp::vector< T, Allocator >inline
    resize(size_type count) (defined in dr::sp::vector< T, Allocator >)dr::sp::vector< T, Allocator >inline
    resize(size_type count, const value_type &value) (defined in dr::sp::vector< T, Allocator >)dr::sp::vector< T, Allocator >inline
    size() const noexcept (defined in dr::sp::vector< T, Allocator >)dr::sp::vector< T, Allocator >inline
    size_type typedef (defined in dr::sp::vector< T, Allocator >)dr::sp::vector< T, Allocator >
    try_push_back(const T &value) (defined in dr::sp::vector< T, Allocator >)dr::sp::vector< T, Allocator >inline
    value_type typedef (defined in dr::sp::vector< T, Allocator >)dr::sp::vector< T, Allocator >
    vector() noexcept (defined in dr::sp::vector< T, Allocator >)dr::sp::vector< T, Allocator >inline
    vector(const Allocator &allocator) noexcept (defined in dr::sp::vector< T, Allocator >)dr::sp::vector< T, Allocator >inlineexplicit
    vector(size_type count, const T &value, const Allocator &alloc=Allocator()) (defined in dr::sp::vector< T, Allocator >)dr::sp::vector< T, Allocator >inlineexplicit
    vector(size_type count, const Allocator &alloc=Allocator()) (defined in dr::sp::vector< T, Allocator >)dr::sp::vector< T, Allocator >inlineexplicit
    vector(Iter first, Iter last, const Allocator &alloc=Allocator()) (defined in dr::sp::vector< T, Allocator >)dr::sp::vector< T, Allocator >inline
    vector(const vector &other) (defined in dr::sp::vector< T, Allocator >)dr::sp::vector< T, Allocator >inline
    vector(const vector &other, const Allocator &alloc) (defined in dr::sp::vector< T, Allocator >)dr::sp::vector< T, Allocator >inline
    vector(vector &&other) noexcept (defined in dr::sp::vector< T, Allocator >)dr::sp::vector< T, Allocator >inline
    vector(vector &&other, const Allocator &alloc) noexcept (defined in dr::sp::vector< T, Allocator >)dr::sp::vector< T, Allocator >inline
    vector(std::initializer_list< T > init, const Allocator &alloc=Allocator()) (defined in dr::sp::vector< T, Allocator >)dr::sp::vector< T, Allocator >inline
    ~vector() noexcept (defined in dr::sp::vector< T, Allocator >)dr::sp::vector< T, Allocator >inline
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1vector.html b/doxygen/classdr_1_1sp_1_1vector.html new file mode 100644 index 0000000000..a96b04fd9e --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1vector.html @@ -0,0 +1,218 @@ + + + + + + + +Distributed Ranges: dr::sp::vector< T, Allocator > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::sp::vector< T, Allocator > Class Template Reference
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + +

    +Public Types

    +using value_type = T
     
    +using allocator_type = Allocator
     
    +using size_type = std::size_t
     
    +using difference_type = std::ptrdiff_t
     
    +using pointer = typename std::allocator_traits< allocator_type >::pointer
     
    +using const_pointer = typename std::allocator_traits< allocator_type >::const_pointer
     
    +using reference = decltype(*std::declval< pointer >())
     
    +using const_reference = decltype(*std::declval< const_pointer >())
     
    +using iterator = pointer
     
    +using const_iterator = const_pointer
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    vector (const Allocator &allocator) noexcept
     
    vector (size_type count, const T &value, const Allocator &alloc=Allocator())
     
    vector (size_type count, const Allocator &alloc=Allocator())
     
    +template<std::forward_iterator Iter>
    constexpr vector (Iter first, Iter last, const Allocator &alloc=Allocator())
     
    vector (const vector &other)
     
    vector (const vector &other, const Allocator &alloc)
     
    vector (vector &&other) noexcept
     
    vector (vector &&other, const Allocator &alloc) noexcept
     
    vector (std::initializer_list< T > init, const Allocator &alloc=Allocator())
     
    +vectoroperator= (const vector &other)
     
    +template<std::forward_iterator Iter>
    void assign (Iter first, Iter last)
     
    +size_type size () const noexcept
     
    +bool empty () const noexcept
     
    +size_type capacity () const noexcept
     
    +pointer data () noexcept
     
    +const_pointer data () const noexcept
     
    +allocator_type get_allocator () const noexcept
     
    +iterator begin () noexcept
     
    +iterator end () noexcept
     
    +const_iterator begin () const noexcept
     
    +const_iterator end () const noexcept
     
    +reference operator[] (size_type pos)
     
    +const_reference operator[] (size_type pos) const
     
    +void reserve (size_type new_cap)
     
    +void push_back (const T &value)
     
    +void push_back (T &&value)
     
    +bool try_push_back (const T &value)
     
    +void resize (size_type count)
     
    +void resize (size_type count, const value_type &value)
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/vector.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1views_1_1enumerate__adapter__closure-members.html b/doxygen/classdr_1_1sp_1_1views_1_1enumerate__adapter__closure-members.html new file mode 100644 index 0000000000..61dfe06bcf --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1views_1_1enumerate__adapter__closure-members.html @@ -0,0 +1,90 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::sp::views::enumerate_adapter_closure Member List
    +
    +
    + +

    This is the complete list of members for dr::sp::views::enumerate_adapter_closure, including all inherited members.

    + + + +
    operator()(R &&r) const (defined in dr::sp::views::enumerate_adapter_closure)dr::sp::views::enumerate_adapter_closureinline
    operator| (defined in dr::sp::views::enumerate_adapter_closure)dr::sp::views::enumerate_adapter_closurefriend
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1views_1_1enumerate__adapter__closure.html b/doxygen/classdr_1_1sp_1_1views_1_1enumerate__adapter__closure.html new file mode 100644 index 0000000000..3f5a6c4013 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1views_1_1enumerate__adapter__closure.html @@ -0,0 +1,108 @@ + + + + + + + +Distributed Ranges: dr::sp::views::enumerate_adapter_closure Class Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::sp::views::enumerate_adapter_closure Class Reference
    +
    +
    + + + + + +

    +Public Member Functions

    +template<rng::viewable_range R>
    +requires (rng::sized_range<R>)
    auto operator() (R &&r) const
     
    + + + + +

    +Friends

    +template<rng::viewable_range R>
    auto operator| (R &&r, const enumerate_adapter_closure &closure)
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/views/enumerate.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1views_1_1enumerate__fn__-members.html b/doxygen/classdr_1_1sp_1_1views_1_1enumerate__fn__-members.html new file mode 100644 index 0000000000..dfcc70f582 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1views_1_1enumerate__fn__-members.html @@ -0,0 +1,90 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::sp::views::enumerate_fn_ Member List
    +
    +
    + +

    This is the complete list of members for dr::sp::views::enumerate_fn_, including all inherited members.

    + + + +
    enumerate() const (defined in dr::sp::views::enumerate_fn_)dr::sp::views::enumerate_fn_inline
    operator()(R &&r) const (defined in dr::sp::views::enumerate_fn_)dr::sp::views::enumerate_fn_inline
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1views_1_1enumerate__fn__.html b/doxygen/classdr_1_1sp_1_1views_1_1enumerate__fn__.html new file mode 100644 index 0000000000..e86738129b --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1views_1_1enumerate__fn__.html @@ -0,0 +1,102 @@ + + + + + + + +Distributed Ranges: dr::sp::views::enumerate_fn_ Class Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::sp::views::enumerate_fn_ Class Reference
    +
    +
    + + + + + + + +

    +Public Member Functions

    +template<rng::viewable_range R>
    constexpr auto operator() (R &&r) const
     
    +auto enumerate () const
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/views/enumerate.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1views_1_1slice__adaptor__closure-members.html b/doxygen/classdr_1_1sp_1_1views_1_1slice__adaptor__closure-members.html new file mode 100644 index 0000000000..ae3dd2134c --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1views_1_1slice__adaptor__closure-members.html @@ -0,0 +1,91 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::sp::views::slice_adaptor_closure Member List
    +
    +
    + +

    This is the complete list of members for dr::sp::views::slice_adaptor_closure, including all inherited members.

    + + + + +
    operator()(R &&r) const (defined in dr::sp::views::slice_adaptor_closure)dr::sp::views::slice_adaptor_closureinline
    operator| (defined in dr::sp::views::slice_adaptor_closure)dr::sp::views::slice_adaptor_closurefriend
    slice_adaptor_closure(dr::index<> slice_indices) (defined in dr::sp::views::slice_adaptor_closure)dr::sp::views::slice_adaptor_closureinline
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1views_1_1slice__adaptor__closure.html b/doxygen/classdr_1_1sp_1_1views_1_1slice__adaptor__closure.html new file mode 100644 index 0000000000..d35ce0f20b --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1views_1_1slice__adaptor__closure.html @@ -0,0 +1,110 @@ + + + + + + + +Distributed Ranges: dr::sp::views::slice_adaptor_closure Class Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::sp::views::slice_adaptor_closure Class Reference
    +
    +
    + + + + + + + +

    +Public Member Functions

    slice_adaptor_closure (dr::index<> slice_indices)
     
    +template<rng::random_access_range R>
    auto operator() (R &&r) const
     
    + + + + +

    +Friends

    +template<rng::random_access_range R>
    auto operator| (R &&r, const slice_adaptor_closure &closure)
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/views/standard_views.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1zip__accessor-members.html b/doxygen/classdr_1_1sp_1_1zip__accessor-members.html new file mode 100644 index 0000000000..c54e0218af --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1zip__accessor-members.html @@ -0,0 +1,107 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::sp::zip_accessor< Iters > Member List
    +
    +
    + +

    This is the complete list of members for dr::sp::zip_accessor< Iters >, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + +
    const_iterator_accessor typedef (defined in dr::sp::zip_accessor< Iters >)dr::sp::zip_accessor< Iters >
    difference_type typedef (defined in dr::sp::zip_accessor< Iters >)dr::sp::zip_accessor< Iters >
    element_type typedef (defined in dr::sp::zip_accessor< Iters >)dr::sp::zip_accessor< Iters >
    iterator_accessor typedef (defined in dr::sp::zip_accessor< Iters >)dr::sp::zip_accessor< Iters >
    iterator_category typedef (defined in dr::sp::zip_accessor< Iters >)dr::sp::zip_accessor< Iters >
    nonconst_iterator_accessor typedef (defined in dr::sp::zip_accessor< Iters >)dr::sp::zip_accessor< Iters >
    operator*() const noexcept (defined in dr::sp::zip_accessor< Iters >)dr::sp::zip_accessor< Iters >inline
    operator+=(difference_type offset) (defined in dr::sp::zip_accessor< Iters >)dr::sp::zip_accessor< Iters >inline
    operator-(const iterator_accessor &other) const noexcept (defined in dr::sp::zip_accessor< Iters >)dr::sp::zip_accessor< Iters >inline
    operator<(const iterator_accessor &other) const noexcept (defined in dr::sp::zip_accessor< Iters >)dr::sp::zip_accessor< Iters >inline
    operator=(const zip_accessor &) noexcept=default (defined in dr::sp::zip_accessor< Iters >)dr::sp::zip_accessor< Iters >
    operator==(const iterator_accessor &other) const noexcept (defined in dr::sp::zip_accessor< Iters >)dr::sp::zip_accessor< Iters >inline
    reference typedef (defined in dr::sp::zip_accessor< Iters >)dr::sp::zip_accessor< Iters >
    size_type typedef (defined in dr::sp::zip_accessor< Iters >)dr::sp::zip_accessor< Iters >
    value_type typedef (defined in dr::sp::zip_accessor< Iters >)dr::sp::zip_accessor< Iters >
    zip_accessor() noexcept=default (defined in dr::sp::zip_accessor< Iters >)dr::sp::zip_accessor< Iters >
    zip_accessor(const zip_accessor &) noexcept=default (defined in dr::sp::zip_accessor< Iters >)dr::sp::zip_accessor< Iters >
    zip_accessor(Iters... iters) (defined in dr::sp::zip_accessor< Iters >)dr::sp::zip_accessor< Iters >inline
    ~zip_accessor() noexcept=default (defined in dr::sp::zip_accessor< Iters >)dr::sp::zip_accessor< Iters >
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1zip__accessor.html b/doxygen/classdr_1_1sp_1_1zip__accessor.html new file mode 100644 index 0000000000..ea67934acc --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1zip__accessor.html @@ -0,0 +1,150 @@ + + + + + + + +Distributed Ranges: dr::sp::zip_accessor< Iters > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::sp::zip_accessor< Iters > Class Template Reference
    +
    +
    + + + + + + + + + + + + + + + + + + + + +

    +Public Types

    +using element_type = __detail::tuple_or_pair_t< std::iter_value_t< Iters >... >
     
    +using value_type = element_type
     
    +using size_type = std::size_t
     
    +using difference_type = std::ptrdiff_t
     
    +using reference = __detail::tuple_or_pair_t< std::iter_reference_t< Iters >... >
     
    +using iterator_category = std::random_access_iterator_tag
     
    +using iterator_accessor = zip_accessor
     
    +using const_iterator_accessor = iterator_accessor
     
    +using nonconst_iterator_accessor = iterator_accessor
     
    + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    +constexpr zip_accessor (const zip_accessor &) noexcept=default
     
    +constexpr zip_accessoroperator= (const zip_accessor &) noexcept=default
     
    +constexpr zip_accessor (Iters... iters)
     
    +zip_accessoroperator+= (difference_type offset)
     
    +constexpr bool operator== (const iterator_accessor &other) const noexcept
     
    +constexpr difference_type operator- (const iterator_accessor &other) const noexcept
     
    +constexpr bool operator< (const iterator_accessor &other) const noexcept
     
    +constexpr reference operator* () const noexcept
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/zip_view.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1zip__view-members.html b/doxygen/classdr_1_1sp_1_1zip__view-members.html new file mode 100644 index 0000000000..d1df74ae74 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1zip__view-members.html @@ -0,0 +1,101 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::sp::zip_view< Rs > Member List
    +
    +
    + +

    This is the complete list of members for dr::sp::zip_view< Rs >, including all inherited members.

    + + + + + + + + + + + + + + +
    begin() const (defined in dr::sp::zip_view< Rs >)dr::sp::zip_view< Rs >inline
    difference_type typedef (defined in dr::sp::zip_view< Rs >)dr::sp::zip_view< Rs >
    end() const (defined in dr::sp::zip_view< Rs >)dr::sp::zip_view< Rs >inline
    get_view() const (defined in dr::sp::zip_view< Rs >)dr::sp::zip_view< Rs >inline
    local() const noexcept (defined in dr::sp::zip_view< Rs >)dr::sp::zip_view< Rs >inline
    num_views (defined in dr::sp::zip_view< Rs >)dr::sp::zip_view< Rs >static
    operator[](std::size_t idx) const (defined in dr::sp::zip_view< Rs >)dr::sp::zip_view< Rs >inline
    rank() const (defined in dr::sp::zip_view< Rs >)dr::sp::zip_view< Rs >inline
    segments() const (defined in dr::sp::zip_view< Rs >)dr::sp::zip_view< Rs >inline
    size() const noexcept (defined in dr::sp::zip_view< Rs >)dr::sp::zip_view< Rs >inline
    size_type typedef (defined in dr::sp::zip_view< Rs >)dr::sp::zip_view< Rs >
    zip_view(Rs... rs) (defined in dr::sp::zip_view< Rs >)dr::sp::zip_view< Rs >inline
    zipped_segments() const (defined in dr::sp::zip_view< Rs >)dr::sp::zip_view< Rs >inline
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1zip__view.html b/doxygen/classdr_1_1sp_1_1zip__view.html new file mode 100644 index 0000000000..bf2b5a4dcc --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1zip__view.html @@ -0,0 +1,169 @@ + + + + + + + +Distributed Ranges: dr::sp::zip_view< Rs > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::sp::zip_view< Rs > Class Template Reference
    +
    +
    + +

    zip + More...

    + +

    #include <zip_view.hpp>

    +
    +Inheritance diagram for dr::sp::zip_view< Rs >:
    +
    +
    Inheritance graph
    + + + + +
    [legend]
    +
    +Collaboration diagram for dr::sp::zip_view< Rs >:
    +
    +
    Collaboration graph
    + + + + +
    [legend]
    + + + + + + +

    +Public Types

    +using size_type = std::size_t
     
    +using difference_type = std::ptrdiff_t
     
    + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    zip_view (Rs... rs)
     
    +std::size_t size () const noexcept
     
    +auto begin () const
     
    +auto end () const
     
    +auto operator[] (std::size_t idx) const
     
    +template<std::size_t I>
    decltype(auto) get_view () const
     
    +auto segments () const
     
    +auto zipped_segments () const
     
    +auto local () const noexcept
     
    +std::size_t rank () const
     
    + + + +

    +Static Public Attributes

    +static constexpr bool num_views = sizeof...(Rs)
     
    +

    Detailed Description

    +
    template<rng::random_access_range... Rs>
    +class dr::sp::zip_view< Rs >

    zip

    +

    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/zip_view.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1sp_1_1zip__view__coll__graph.map b/doxygen/classdr_1_1sp_1_1zip__view__coll__graph.map new file mode 100644 index 0000000000..3ea2945c51 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1zip__view__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/classdr_1_1sp_1_1zip__view__coll__graph.md5 b/doxygen/classdr_1_1sp_1_1zip__view__coll__graph.md5 new file mode 100644 index 0000000000..45c3a9debc --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1zip__view__coll__graph.md5 @@ -0,0 +1 @@ +10112d5bff88d99c157b9ad1ed59b028 \ No newline at end of file diff --git a/doxygen/classdr_1_1sp_1_1zip__view__coll__graph.png b/doxygen/classdr_1_1sp_1_1zip__view__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..1fe8f4e997e5f3cd7a461079711ef1144c12c1d8 GIT binary patch literal 6808 zcmch6WmMFC80CP7qzEtFAPOQ~0xCJuDIwh;(%mH;3ZkHdbdH2{N~eS%CDI`sf^_f0 z?ta)kXFu=Zz#QN|zr4?V?!6PCq9l!vLy3bxAn;{nkk8?@625(~FySX>#qKD)V4BEF zBN12EU+E2b9}oyiMOmb{y2t0O6i;<^>C?-!NyXmAaF*o!bekR)6JkRCx8gy#k=E3v z>SCc7%%%$A@^73~vMd!$Tuh>)ja?MpL^x7Z2h&HXBAbKQIIvg)GXq#2caL3MUhZ^V z3=LAr1-Y#|E2T+J>&)a8q!t&~>AT#(!whOM;v&bxTzob+VIU(Tvnr1?t&_wH`l*V6 z-r`%T<%2rlPpJwCx5Vpm6m?Hw!(2RJ$h?bKu4)|nF~T0+VWPNU%w-V1@#||=MMcH5 ztN0^JV=g`%UVh09qg)G1n!XXd%JFJ@y7P+*LUQu)>F4UL3K!JDAtCd9iM;+vH4zaJ zT9sBLA35|ROG-*OVrEr|XD*CbEY^l{N~)^-))qrULrs?Z5_k6YyfbQccXty69T_e9 z5_ToFTuAyx2407Sbv-0}#LkXyU|_&Wef0eUGnasX-@IF0q>{EDn|>WJv(jfVBogC# z0d#aR{MKV)Y^0{G!Pr=Mc9E0d!_p8uExY{moDhV$<7@eve#7Gc(cuyRRVT=O=Mmi;g|HC0%aHrc5$7DgptBc`NuyUOM_dZ`v$xsA%0y=~Xf@bG`q z(bO%lT?W!9LK2dj2-dFZdrC$|^cFupM@WX7ZXFAoSmt`{$UhCLKO9^vgk!zVNubmU&Z<^ z=f{qx8-`bM%*v_i@|$)pU_X(W z$w-8S;j-9?FLITa=C`od+tVY%M6`S38B$$URs5;fe)_j>PkOq$>F?gX`=y{@anIVy z>bMCP2Zu#SNZZ&8R$bw_XCd;`>5t6mLKNq*i?uUqNCL^{FefJLwn@$}An+cAdSE+M z6DuJh5gu*{xUcZL@XGOJ<}Cgq!o*0)ZGy2iSsgR*Lb~8vsa};0MM!8U>*$!5Pudet z31MO3eE?f`9IB{D1GdD%e~luxnivG3sbeuSOf&0W>Hq@`2_52Y^m}O2mRQVGHiUx z%ge=)Fx5wtsgY4YU!OuH-#4rj3oDwGE9)=0xtOM%Z(1Jz{T4Jhs6tLbG5_cLhZ+~z zWiArI;%NqPL;#%R`o_l3!9j$+zCL0A^NXuUm!npL7ythLzS(+RZ7mu?^#Psarh{&J>CJlozcj<_0^l^6BsIXNZ+i(bmRx zcHUbV+F`W(BXV$YcBE=x5Dl0lzP!97=eHsr8X6iY{tM$Z`kpNqUY(L5t`BJAYt!;x zN=gd1$Bt2UZtlXtFT*e`w$AZV)7ZpBY&A7Cy;`T6+}zxEB9P>O4+%-h*p!t1CaySJ zVzlPL!8^_?KRVoJeZ%Pdj?u)$#c?XX451@{hnfLNjyrSWa5LzL8IMK$Ywj{B)yj!T zC4*6cA6#V$g!3s4nVFgKXrGX8j1>hT8PRrZ4wV!YxA^dT2E$R;%Yxz*6cTFb?Zs76 zQsUy`QmJp0VQPgf+@YX|V2})LZfQX~I5FT+%`q*{7^_MJRYpJH}vrIG(JDx1yroerv9C-4~vT<7BQIQLttQHnp|C8&@(C|@;uAX z)X)id$@^<(zD@P{^VV6Dy@P{}l*jHKAFKm!;*!!cGNPMyML*NhO3=|66(2pu36VJ8 zA66FhzkIT}xyj{o?9i7cO4s0hw9SW4v*0NZ31y#qT^YXscMl#sh+t)9&Ck!5v2Y%& zibgVK0J$Xg1CnTRa&lB19l3!*V^dRUWtoT)$)ROr^?u@11Lm(k4hac~d;h-G{!Dtf4Tr>69JzJHHB`%L`SJ}ULG`?iXvCMo};N7V&i3!6s7e@c~32eJXn z(_VMyBhU5rcBG)7U~^|D=G(V#JvNG}2S-MNhx3%(3phG^+pa{FecQXbq#OK+R_zoN z6uA7(Jra_VGD}MC2nYxWx@~H?_YRSFbaW($`ZrEJ5fv3JG-#-cB5A1mR*_39?80I< z+c-VVQ-}BP;lt05-HYqZEpKkd(MoQ3+*1Jdv-CNdcGn?`%AhcqSdzAW|KUR=kES$q z?zX>8SGN&^zkYS4iwBihjj|@5ZM=DD>680WE+;%Hs_p$f`4ZO+O~o+prB#_LHp510 zWH9vEyG%?NQKamxmDa!NkSo%3zQG_7+|qEY>$dmOxz!At{AdbZe3b%7l)9`vAD@^o znfd1F)GH+|9kf{E7BfDsh1mLpvAw;03>?m7Hzk;mkkH)Lc7u%5KpnM~Y~R=d;4v?r zZty0P$ap8JIU%5_sEGfO(=ht-;;gN&4-dMfq_{X5Vs7%1gE}Ak{{!&>^Mkc+dM{c6b95*o`VK7TNCay|XQ&Xz0t}ZS$^@riv zis+Rr)cD-6t!e*fp%3?!Qx!ZtJ=L|fW$AqP3GwMfJ~I(v$H&LViqWSB2BI@EQa<(K z6A~64N`2}b9==*WAd&@D>MnQn?PNLme64n3LT94ZnR#t>RmIMZgOG6P&!2ZPOql>T zuhabp`gJZ5t!-@@Rg+y1aeDFyRL^k&ZVPFNF@kUWDenORxMsj8~-L33hc1VK^( zm(jQ#wLbtCE{iypj-h?Jy1zE;<7Z$%OF>EbudXg|Xz2OBqa$WSh1=EyN5Nzuqni8r zKT{yQ(SdHU8(lUII^0Q^MYdZ0tG};h=XJ zs}(>iU#}8oY(v6dR7J03fd00Ce6p9*kj6H4iLrqsC_kPNcz^$@V&b` zd}?}n?fhiVs;jrZ{~m(Rtoxmtr>!Zp4^bkiNgOeD`kuL zp6*aJ^1l3W2O$h{G3->F;-3PvBSlhD(hBb*J1a}ebXemM5Uh-$VOl6Yl@u`ON^fI6 z%23LnR?Vx&!QEXNMknRa0~ba<9iFM?^|ih051y3tAgkKS%1ZCWov=kgHtn+P`X%nV z@D~f4(z-l6Jbw)6xQqfOs=LT1qBQ$Q@GzSd`UfQvP!u}1cwNa z=Rb6{eA+~uU=*s)?}arkRaI_jY5C4uKLceyRg=NZ?Jtm&9#q)L&6V$m=PfSl-uu&w z*q@LpYZ&YF?MDadL&BXi|MMEMGadg>x$&gBhjS(G1n)@i=o8B~)agc7wJ8)CqxgGC+NZlQDvVH@mB*#s1S1Om5NeEEzJYjD2#BYjeEqE3(l zIvcw9$RQ8mCDHLi{B2TIe{^`TeW?7890pl!B6U(Q^~l*WrBs-4?ieu<8wULq87DR) z(cIG2(&-Cg3oAvj_Mhdh&XYOP1w5-{#FAfKQ}RU#`bH?}Stzs6_BC|ECI4gYFszsQ znT88b(~I@~)#GFFkzx2F_>G28+y+lL@x?!XVneTN7DQOpY;QeIGdAK88iHC3gE;z` zJz{f}c5(EsU=j;U(l|{FM?k{?cg1ZBtI)9)xFO;HbwmG$4KE5xOv-TOQse#q^pNEC zr{b{CP%qh>=k>*;S^Y9-SpPUZLV|-`s)>tC{?0UnO&WZ#wnC|&GITjQ^Kq^X1np?C zAbb$fXX*8omK5uWl!(5*J}y9ee~&R&>W8v2o~Z`!7k0F||JNS)EY_1B*)KF*U3|?= zddWqc$*uO{#f!V5qK0by)^9+X`IJ{JeS zpp_vIz#ikjf46jXt>lbMkXGf|-RN?3aB>QiVH*0PRrG+9Q`*Ia4+j^Q%rWK zX5Um+Mg*<_5dh1%ehS=#ZC*}eBkhY~J#olAz$V>z^ytwWN`5(%9~Bi9SOGK-0bTpq zMj8;e5XEQ;i~Iw95B@4pg(WyIk69{)7GGXoK4&-WlM;6&lCh=Ac5*OJneGkEW74C) zvt6K(jqU7ytgI|AGqSSc`1$$4ngWW8IcT4FG!xuMB)UMyzfB_?Eabf0+}(}!$Zkpu z_T=O1dvXYUHVUPd*ZTcCcAj#Yl&UHrDW}0yaZ%MPfJEZ$x6#p3px_0gZxAv(dPD{i znP(!t<9Tp=Jc-}cg*%1X)ovFZ7ccJzs;KZ1I7CE1Obh`f6_w+kZo-j~5hHLVTs%DB z&Cz{)eBhvC6B4i(7v8#^{4)m~uv?n_{6SfHdFM-^r&U`@gYDTHa&C0dt8?Ce z|NhO*%>~re317n-)Pqy6VZ9qZ0i6gE5}dE2ploju(6(QP0ANe01sxETm6a?U98yr% zaC_04n>KH#g@~X7pR?UYKz&}{#rgU99YVquWuA2>$coxKIx@h;ySln!VPmfi9#@1c z3f9!rGePa`YOIAt|4l(pQxj8>S@8ICD`cCATOC%~PDhkZwt?Llr$IMJ)3TkW9 zY(VB$U@VqCa1_lMiNLOE$_!MOC~5cm{&$tRvb(S#DQK%+eMoCuB*gq8yg#0 z#l=d?6JX>f-QItXk6YHtCe)b8%?=GGA0rA}C%gqqra`v(W3R$$=h zZr!GCp1rzsuN2<*G<{3Ki&^is)v9aX5R#qEl$ax<3lADwSYZ15U%7b#1vHoEsJXcb z05NgfPVglpCoe*L7X$?YCu)A5)ZX6S!`nLx*8ctb_wgowQGmSETgscjgW$hdN9{~a zZ@hf@Qtx_|#mq5J--Do|0kVqRX}^_1Xl92^~A*VjJ=c$%$ub#(03 zuhrBDCL|`dfI%^z1SlUvmRM@}lQEG(i=xNmK^r(NDJdyI=Vd&g?vs0Oo=ilPCy8>}lc4LQ;f8;tK8=Dl^3PneP%A^FpiHZ0PVn}1CI$pJx4m8LB57u9{CaNA z2uv28mzNjhL;1zUQjm%ocK-fN0Z!@K(*CLj_||yrGV1B+sarX^xCCcq-CZ6?8<-8# zycNC31t9Q&7%YMB)q9=A;UuuKU-TASNu9`EFfcGQ?Qi~eR+5fM9UB{4*j?-@DJzpO zHN6W#b|Bgf%4}>z&($UETkAp~Uh%eGAMc1ve zc^w^n8@ih@)I>SA`q&`^zK~ZAD>cEI0$v_jZf$Kb5Jikc=0pN95tEW;y8oS7{aw!N zpAv3nQVE2ts-qKmJ+iLuo_q``pv1_`EEuFS!ozL07CxVl+%VUes&mDK_407Gk~YBW zb&C=d(HHOiIqZLRHoKMTkmr{Py0zPXA-kZUw~6N_I+}k|IsX>{XX>u+QN=r+p zD8#fUAu^GhjLXx|X44=iC-1f`UuyeQ1uZ$}$YFBk9;_>`FDi%E((`q7Zjpg&XWnBY zx(`i=UtbMDNL2jKbfxkyCYSK17egbMn3&^W>#MscdCahQx8<=OpSAqIB%I{@bWCI< zPIgX?YYr)9mfAaOtJh*X@#?G>IRzcpALIP*Pjj-)PW-du0}2k%(Qx6TCWP!WC1kOL HQQ-doy2VK& literal 0 HcmV?d00001 diff --git a/doxygen/classdr_1_1sp_1_1zip__view__inherit__graph.map b/doxygen/classdr_1_1sp_1_1zip__view__inherit__graph.map new file mode 100644 index 0000000000..3ea2945c51 --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1zip__view__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/classdr_1_1sp_1_1zip__view__inherit__graph.md5 b/doxygen/classdr_1_1sp_1_1zip__view__inherit__graph.md5 new file mode 100644 index 0000000000..45c3a9debc --- /dev/null +++ b/doxygen/classdr_1_1sp_1_1zip__view__inherit__graph.md5 @@ -0,0 +1 @@ +10112d5bff88d99c157b9ad1ed59b028 \ No newline at end of file diff --git a/doxygen/classdr_1_1sp_1_1zip__view__inherit__graph.png b/doxygen/classdr_1_1sp_1_1zip__view__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..1fe8f4e997e5f3cd7a461079711ef1144c12c1d8 GIT binary patch literal 6808 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 HQQ-doy2VK& literal 0 HcmV?d00001 diff --git a/doxygen/classdr_1_1timer-members.html b/doxygen/classdr_1_1timer-members.html new file mode 100644 index 0000000000..88e88fcf34 --- /dev/null +++ b/doxygen/classdr_1_1timer-members.html @@ -0,0 +1,90 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::timer Member List
    +
    +
    + +

    This is the complete list of members for dr::timer, including all inherited members.

    + + + +
    elapsed() (defined in dr::timer)dr::timerinline
    timer() (defined in dr::timer)dr::timerinline
    + + + + diff --git a/doxygen/classdr_1_1timer.html b/doxygen/classdr_1_1timer.html new file mode 100644 index 0000000000..40037d80ed --- /dev/null +++ b/doxygen/classdr_1_1timer.html @@ -0,0 +1,98 @@ + + + + + + + +Distributed Ranges: dr::timer Class Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::timer Class Reference
    +
    +
    + + + + +

    +Public Member Functions

    +auto elapsed ()
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/detail/logger.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1transform__iterator-members.html b/doxygen/classdr_1_1transform__iterator-members.html new file mode 100644 index 0000000000..7c8f0363db --- /dev/null +++ b/doxygen/classdr_1_1transform__iterator-members.html @@ -0,0 +1,118 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::transform_iterator< Iter, F > Member List
    +
    +
    + +

    This is the complete list of members for dr::transform_iterator< Iter, F >, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    difference_type typedef (defined in dr::transform_iterator< Iter, F >)dr::transform_iterator< Iter, F >
    iterator typedef (defined in dr::transform_iterator< Iter, F >)dr::transform_iterator< Iter, F >
    iterator_category typedef (defined in dr::transform_iterator< Iter, F >)dr::transform_iterator< Iter, F >
    local() const (defined in dr::transform_iterator< Iter, F >)dr::transform_iterator< Iter, F >inline
    operator!=(const transform_iterator &other) const noexcept (defined in dr::transform_iterator< Iter, F >)dr::transform_iterator< Iter, F >inline
    operator*() const noexcept (defined in dr::transform_iterator< Iter, F >)dr::transform_iterator< Iter, F >inline
    operator+(difference_type offset) const noexcept (defined in dr::transform_iterator< Iter, F >)dr::transform_iterator< Iter, F >inline
    operator+ (defined in dr::transform_iterator< Iter, F >)dr::transform_iterator< Iter, F >friend
    operator++() noexcept (defined in dr::transform_iterator< Iter, F >)dr::transform_iterator< Iter, F >inline
    operator++(int) noexcept (defined in dr::transform_iterator< Iter, F >)dr::transform_iterator< Iter, F >inline
    operator+=(difference_type offset) noexcept (defined in dr::transform_iterator< Iter, F >)dr::transform_iterator< Iter, F >inline
    operator-(difference_type offset) const noexcept (defined in dr::transform_iterator< Iter, F >)dr::transform_iterator< Iter, F >inline
    operator-(iterator other) const noexcept (defined in dr::transform_iterator< Iter, F >)dr::transform_iterator< Iter, F >inline
    operator--() noexcept (defined in dr::transform_iterator< Iter, F >)dr::transform_iterator< Iter, F >inline
    operator--(int) noexcept (defined in dr::transform_iterator< Iter, F >)dr::transform_iterator< Iter, F >inline
    operator-=(difference_type offset) noexcept (defined in dr::transform_iterator< Iter, F >)dr::transform_iterator< Iter, F >inline
    operator<(iterator other) const noexcept (defined in dr::transform_iterator< Iter, F >)dr::transform_iterator< Iter, F >inline
    operator<=(iterator other) const noexcept (defined in dr::transform_iterator< Iter, F >)dr::transform_iterator< Iter, F >inline
    operator=(const transform_iterator &) noexcept=default (defined in dr::transform_iterator< Iter, F >)dr::transform_iterator< Iter, F >
    operator==(const transform_iterator &other) const noexcept (defined in dr::transform_iterator< Iter, F >)dr::transform_iterator< Iter, F >inline
    operator>(iterator other) const noexcept (defined in dr::transform_iterator< Iter, F >)dr::transform_iterator< Iter, F >inline
    operator>=(iterator other) const noexcept (defined in dr::transform_iterator< Iter, F >)dr::transform_iterator< Iter, F >inline
    operator[](difference_type offset) const noexcept (defined in dr::transform_iterator< Iter, F >)dr::transform_iterator< Iter, F >inline
    pointer typedef (defined in dr::transform_iterator< Iter, F >)dr::transform_iterator< Iter, F >
    reference typedef (defined in dr::transform_iterator< Iter, F >)dr::transform_iterator< Iter, F >
    transform_iterator(Iter iter, F fn) noexcept (defined in dr::transform_iterator< Iter, F >)dr::transform_iterator< Iter, F >inline
    transform_iterator() noexcept=default (defined in dr::transform_iterator< Iter, F >)dr::transform_iterator< Iter, F >
    transform_iterator(const transform_iterator &) noexcept=default (defined in dr::transform_iterator< Iter, F >)dr::transform_iterator< Iter, F >
    value_type typedef (defined in dr::transform_iterator< Iter, F >)dr::transform_iterator< Iter, F >
    ~transform_iterator() noexcept=default (defined in dr::transform_iterator< Iter, F >)dr::transform_iterator< Iter, F >
    + + + + diff --git a/doxygen/classdr_1_1transform__iterator.html b/doxygen/classdr_1_1transform__iterator.html new file mode 100644 index 0000000000..fe83f8da50 --- /dev/null +++ b/doxygen/classdr_1_1transform__iterator.html @@ -0,0 +1,187 @@ + + + + + + + +Distributed Ranges: dr::transform_iterator< Iter, F > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::transform_iterator< Iter, F > Class Template Reference
    +
    +
    + + + + + + + + + + + + + + +

    +Public Types

    +using value_type = std::invoke_result_t< F, std::iter_value_t< Iter > >
     
    +using difference_type = std::iter_difference_t< Iter >
     
    +using iterator = transform_iterator< Iter, F >
     
    +using reference = value_type
     
    +using pointer = iterator
     
    +using iterator_category = std::random_access_iterator_tag
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    transform_iterator (Iter iter, F fn) noexcept
     
    transform_iterator (const transform_iterator &) noexcept=default
     
    +transform_iteratoroperator= (const transform_iterator &) noexcept=default
     
    +bool operator== (const transform_iterator &other) const noexcept
     
    +bool operator!= (const transform_iterator &other) const noexcept
     
    +iterator operator+ (difference_type offset) const noexcept
     
    +iterator operator- (difference_type offset) const noexcept
     
    +difference_type operator- (iterator other) const noexcept
     
    +bool operator< (iterator other) const noexcept
     
    +bool operator> (iterator other) const noexcept
     
    +bool operator<= (iterator other) const noexcept
     
    +bool operator>= (iterator other) const noexcept
     
    +iteratoroperator++ () noexcept
     
    +iterator operator++ (int) noexcept
     
    +iteratoroperator-- () noexcept
     
    +iterator operator-- (int) noexcept
     
    +iteratoroperator+= (difference_type offset) noexcept
     
    +iteratoroperator-= (difference_type offset) noexcept
     
    +reference operator* () const noexcept
     
    +reference operator[] (difference_type offset) const noexcept
     
    +auto local () const
     
    + + + +

    +Friends

    +iterator operator+ (difference_type n, iterator iter)
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/views/transform.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1transform__view-members.html b/doxygen/classdr_1_1transform__view-members.html new file mode 100644 index 0000000000..ff51b2da72 --- /dev/null +++ b/doxygen/classdr_1_1transform__view-members.html @@ -0,0 +1,95 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::transform_view< V, F > Member List
    +
    +
    + +

    This is the complete list of members for dr::transform_view< V, F >, including all inherited members.

    + + + + + + + + +
    base() const (defined in dr::transform_view< V, F >)dr::transform_view< V, F >inline
    begin() const (defined in dr::transform_view< V, F >)dr::transform_view< V, F >inline
    end() const (defined in dr::transform_view< V, F >)dr::transform_view< V, F >inline
    rank() const (defined in dr::transform_view< V, F >)dr::transform_view< V, F >inline
    segments() const (defined in dr::transform_view< V, F >)dr::transform_view< V, F >inline
    size() const (defined in dr::transform_view< V, F >)dr::transform_view< V, F >inline
    transform_view(R &&r, F fn) (defined in dr::transform_view< V, F >)dr::transform_view< V, F >inline
    + + + + diff --git a/doxygen/classdr_1_1transform__view.html b/doxygen/classdr_1_1transform__view.html new file mode 100644 index 0000000000..ce0523740d --- /dev/null +++ b/doxygen/classdr_1_1transform__view.html @@ -0,0 +1,135 @@ + + + + + + + +Distributed Ranges: dr::transform_view< V, F > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::transform_view< V, F > Class Template Reference
    +
    +
    +
    +Inheritance diagram for dr::transform_view< V, F >:
    +
    +
    Inheritance graph
    + + + + +
    [legend]
    +
    +Collaboration diagram for dr::transform_view< V, F >:
    +
    +
    Collaboration graph
    + + + + +
    [legend]
    + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    +template<rng::viewable_range R>
     transform_view (R &&r, F fn)
     
    +auto begin () const
     
    +auto end () const
     
    +auto size () const
     
    +auto segments () const
     
    +auto rank () const
     
    +V base () const
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/views/transform.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1transform__view__coll__graph.map b/doxygen/classdr_1_1transform__view__coll__graph.map new file mode 100644 index 0000000000..e3502e0949 --- /dev/null +++ b/doxygen/classdr_1_1transform__view__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/classdr_1_1transform__view__coll__graph.md5 b/doxygen/classdr_1_1transform__view__coll__graph.md5 new file mode 100644 index 0000000000..e4824fd23c --- /dev/null +++ b/doxygen/classdr_1_1transform__view__coll__graph.md5 @@ -0,0 +1 @@ +69fdf31c5b75e1d33329c73c77e5c73c \ No newline at end of file diff --git a/doxygen/classdr_1_1transform__view__coll__graph.png b/doxygen/classdr_1_1transform__view__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..a8907d9b7b6f2d16776a964a6f01af2894a5c40e GIT binary patch literal 8030 zcmc(EWmMEryYCRvARr1-5=u#TNQ!ibq;yD$q?ELDBLae`D2+fhbESHa`(Z)Vyd;Mcfsi4YbqQR{zyHC!2SQ+V{~H5b{jJrh;P-ydvRbIb%;6;7QG3I{w z58gmWP85|woIwj;EOl9^l}@?yjFh~B0uu*^3Nmx=DJLqUrQEt_t5;;^%=+Nn`}eUz z4#N!M;?zBFxU^3%PRVn<*l#XmWoKJhTMx}2(pL}q4o70)uVlq zTT-#Jv*wdcfwvG34GbcquCZp7m6c8HPP#QYerS!O5nRSwC?$?`ChY{!Y}M5WtV$;lMo_-$-#Dy@5NoGiX` zwi~as7qt9|7w|$yhvJ2|_rUgi2fLJ11}z;OKH~i1^q;(Zr9~@_o10r!ztm~0#z!f2 zn2w;sFeek!mx2NYNlD4*n3(K;ji>R#j^pyXi@ozT4faSDH&0JJQIm%cW#lqnb$53k zE!+w`<0GaKj{SJBy`3rPd$5IcY;#-cqa!B>+gth=NKU5Z?Jatfh6V`}h>Em>DGPe8 z8>I9-?>VpbAaS0omF4EBXNf!NU>ZdeEs@08y}ymUd^4!?v%R|## zxTl^M zA0HQd{w(|8!Go`a7n%1Xc1qOM)iDHxX1aTNGPAR>L_|aajw|}5dYbxrdmr4tkEK^+ zc&A1(e*RTzYD8%%Z~ad9T`Hlc6ldq>WK>jzUsreN>M|@^k8QJvo^hSG5 zZ29v7ySE%=m^&Vym3;RdEG;oV>qM`vK21wYyQfR!uUm63;w~3g+sD9*D37&aMt**B zcw=XG_oHw1@7~cob9CHBMcl$fJmJ4N9eC*<@a^l@yWzw%;jytq*jKJFii%QUU|`hx z>~qL7kwG!U-U>LvFf=sW+S!oD`mb6)dE)+Wz}}2L8^zqusB5CW2b?&>)Y#6>&IX2tbA2BqND0D9%gbAEZ}}mNjEn%> zao|i18hnIi{&KLh%li0;H#NOMBG4#)etH-ZNlHeRDL8y!iIILW@9X0;2kSd?Jb{%= zHu}HQY~JK`p1${Nv=lZ8!=U=vTa~geSq&%G3Bp8u_Sm>h>my}DaDE_>*MJOuG{3~E z;|!OYw|7c^Vq^0N-5Tu)&u70DTtE#F>PDy!i{rYwE zOT@*+Z>Oj%9B4gyB=`31+uMmsh8slkxvlswYi3XfbRmJ>VhhMwJ>U|Hn@36A=d^oMP1XP2@O-@bC z-%3j!a(;fV#(5^sVWe2g%F62Nj^l@tX^k=UBt1$*R8&+2nzL87UAnruT-@A(tEz

    WHhPtw@a8VIYW! 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 literal 0 HcmV?d00001 diff --git a/doxygen/classdr_1_1transform__view__inherit__graph.map b/doxygen/classdr_1_1transform__view__inherit__graph.map new file mode 100644 index 0000000000..e3502e0949 --- /dev/null +++ b/doxygen/classdr_1_1transform__view__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/classdr_1_1transform__view__inherit__graph.md5 b/doxygen/classdr_1_1transform__view__inherit__graph.md5 new file mode 100644 index 0000000000..e4824fd23c --- /dev/null +++ b/doxygen/classdr_1_1transform__view__inherit__graph.md5 @@ -0,0 +1 @@ +69fdf31c5b75e1d33329c73c77e5c73c \ No newline at end of file diff --git a/doxygen/classdr_1_1transform__view__inherit__graph.png b/doxygen/classdr_1_1transform__view__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..a8907d9b7b6f2d16776a964a6f01af2894a5c40e GIT binary patch literal 8030 zcmc(EWmMEryYCRvARr1-5=u#TNQ!ibq;yD$q?ELDBLae`D2+fhbESHa`(Z)Vyd;Mcfsi4YbqQR{zyHC!2SQ+V{~H5b{jJrh;P-ydvRbIb%;6;7QG3I{w z58gmWP85|woIwj;EOl9^l}@?yjFh~B0uu*^3Nmx=DJLqUrQEt_t5;;^%=+Nn`}eUz z4#N!M;?zBFxU^3%PRVn<*l#XmWoKJhTMx}2(pL}q4o70)uVlq zTT-#Jv*wdcfwvG34GbcquCZp7m6c8HPP#QYerS!O5nRSwC?$?`ChY{!Y}M5WtV$;lMo_-$-#Dy@5NoGiX` zwi~as7qt9|7w|$yhvJ2|_rUgi2fLJ11}z;OKH~i1^q;(Zr9~@_o10r!ztm~0#z!f2 zn2w;sFeek!mx2NYNlD4*n3(K;ji>R#j^pyXi@ozT4faSDH&0JJQIm%cW#lqnb$53k zE!+w`<0GaKj{SJBy`3rPd$5IcY;#-cqa!B>+gth=NKU5Z?Jatfh6V`}h>Em>DGPe8 z8>I9-?>VpbAaS0omF4EBXNf!NU>ZdeEs@08y}ymUd^4!?v%R|## zxTl^M zA0HQd{w(|8!Go`a7n%1Xc1qOM)iDHxX1aTNGPAR>L_|aajw|}5dYbxrdmr4tkEK^+ zc&A1(e*RTzYD8%%Z~ad9T`Hlc6ldq>WK>jzUsreN>M|@^k8QJvo^hSG5 zZ29v7ySE%=m^&Vym3;RdEG;oV>qM`vK21wYyQfR!uUm63;w~3g+sD9*D37&aMt**B zcw=XG_oHw1@7~cob9CHBMcl$fJmJ4N9eC*<@a^l@yWzw%;jytq*jKJFii%QUU|`hx z>~qL7kwG!U-U>LvFf=sW+S!oD`mb6)dE)+Wz}}2L8^zqusB5CW2b?&>)Y#6>&IX2tbA2BqND0D9%gbAEZ}}mNjEn%> zao|i18hnIi{&KLh%li0;H#NOMBG4#)etH-ZNlHeRDL8y!iIILW@9X0;2kSd?Jb{%= zHu}HQY~JK`p1${Nv=lZ8!=U=vTa~geSq&%G3Bp8u_Sm>h>my}DaDE_>*MJOuG{3~E z;|!OYw|7c^Vq^0N-5Tu)&u70DTtE#F>PDy!i{rYwE zOT@*+Z>Oj%9B4gyB=`31+uMmsh8slkxvlswYi3XfbRmJ>VhhMwJ>U|Hn@36A=d^oMP1XP2@O-@bC z-%3j!a(;fV#(5^sVWe2g%F62Nj^l@tX^k=UBt1$*R8&+2nzL87UAnruT-@A(tEz

    WHhPtw@a8VIYW! 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 literal 0 HcmV?d00001 diff --git a/doxygen/classdr_1_1views_1_1transform__adapter__closure-members.html b/doxygen/classdr_1_1views_1_1transform__adapter__closure-members.html new file mode 100644 index 0000000000..8405549ed6 --- /dev/null +++ b/doxygen/classdr_1_1views_1_1transform__adapter__closure-members.html @@ -0,0 +1,91 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +

    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::views::transform_adapter_closure< F > Member List
    +
    +
    + +

    This is the complete list of members for dr::views::transform_adapter_closure< F >, including all inherited members.

    + + + + +
    operator()(R &&r) const (defined in dr::views::transform_adapter_closure< F >)dr::views::transform_adapter_closure< F >inline
    operator| (defined in dr::views::transform_adapter_closure< F >)dr::views::transform_adapter_closure< F >friend
    transform_adapter_closure(F fn) (defined in dr::views::transform_adapter_closure< F >)dr::views::transform_adapter_closure< F >inline
    + + + + diff --git a/doxygen/classdr_1_1views_1_1transform__adapter__closure.html b/doxygen/classdr_1_1views_1_1transform__adapter__closure.html new file mode 100644 index 0000000000..99de9c6b9e --- /dev/null +++ b/doxygen/classdr_1_1views_1_1transform__adapter__closure.html @@ -0,0 +1,110 @@ + + + + + + + +Distributed Ranges: dr::views::transform_adapter_closure< F > Class Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::views::transform_adapter_closure< F > Class Template Reference
    +
    +
    + + + + + + + +

    +Public Member Functions

    transform_adapter_closure (F fn)
     
    +template<rng::viewable_range R>
    auto operator() (R &&r) const
     
    + + + + +

    +Friends

    +template<rng::viewable_range R>
    auto operator| (R &&r, const transform_adapter_closure &closure)
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/views/transform.hpp
    • +
    +
    + + + + diff --git a/doxygen/classdr_1_1views_1_1transform__fn__-members.html b/doxygen/classdr_1_1views_1_1transform__fn__-members.html new file mode 100644 index 0000000000..89cfac799b --- /dev/null +++ b/doxygen/classdr_1_1views_1_1transform__fn__-members.html @@ -0,0 +1,90 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::views::transform_fn_ Member List
    +
    +
    + +

    This is the complete list of members for dr::views::transform_fn_, including all inherited members.

    + + + +
    operator()(R &&r, F &&f) const (defined in dr::views::transform_fn_)dr::views::transform_fn_inline
    operator()(F &&fn) const (defined in dr::views::transform_fn_)dr::views::transform_fn_inline
    + + + + diff --git a/doxygen/classdr_1_1views_1_1transform__fn__.html b/doxygen/classdr_1_1views_1_1transform__fn__.html new file mode 100644 index 0000000000..fc14f17cf9 --- /dev/null +++ b/doxygen/classdr_1_1views_1_1transform__fn__.html @@ -0,0 +1,103 @@ + + + + + + + +Distributed Ranges: dr::views::transform_fn_ Class Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::views::transform_fn_ Class Reference
    +
    +
    + + + + + + + + +

    +Public Member Functions

    +template<rng::viewable_range R, std::copy_constructible F>
    auto operator() (R &&r, F &&f) const
     
    +template<std::copy_constructible F>
    auto operator() (F &&fn) const
     
    +
    The documentation for this class was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/views/transform.hpp
    • +
    +
    + + + + diff --git a/doxygen/classes.html b/doxygen/classes.html new file mode 100644 index 0000000000..a3b55f40e3 --- /dev/null +++ b/doxygen/classes.html @@ -0,0 +1,144 @@ + + + + + + + +Distributed Ranges: Class Index + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Class Index
    +
    +
    +
    A | B | C | D | E | F | G | H | I | L | M | N | O | P | R | S | T | U | V | Z
    +
    +
    +
    A
    +
    allocator (dr::mp::__detail)
    any (dr::mp::__detail)
    +
    +
    B
    +
    block_cyclic (dr::sp)
    buffer (dr::mp::__detail)
    buffered_allocator (dr::sp)
    +
    +
    C
    +
    communicator (dr)
    coo_matrix (dr::sp::__detail)
    count_fn_ (dr::mp)
    count_if_fn_ (dr::mp)
    csr_matrix_view (dr::sp)
    csr_matrix_view_accessor (dr::sp)
    +
    +
    D
    +
    default_memory (dr)
    dense_matrix (dr::sp)
    dense_matrix_accessor (dr::sp)
    dense_matrix_column_accessor (dr::sp)
    dense_matrix_column_view (dr::sp)
    dense_matrix_row_accessor (dr::sp)
    dense_matrix_row_view (dr::sp)
    dense_matrix_view (dr::sp)
    device_allocator (dr::sp)
    device_policy (dr::mp)
    device_policy (dr::sp)
    device_ptr (dr::sp)
    device_ref (dr::sp)
    device_span (dr::sp)
    device_vector (dr::sp)
    direct_iterator (dr::__detail)
    distributed_dense_matrix (dr::sp)
    distributed_dense_matrix_accessor (dr::sp)
    distributed_mdarray (dr::mp)
    distributed_range_accessor (dr::sp)
    distributed_span (dr::sp)
    distributed_span_accessor (dr::sp)
    distributed_vector (dr::mp)
    distributed_vector (dr::sp)
    distributed_vector_accessor (dr::sp)
    distribution (dr::mp)
    duplicated_vector (dr::sp)
    dv_segment (dr::mp)
    dv_segment_iterator (dr::mp)
    dv_segment_reference (dr::mp)
    +
    +
    E
    +
    enumerate_adapter_closure (dr::__detail)
    enumerate_adapter_closure (dr::mp::views)
    enumerate_adapter_closure (dr::sp::views)
    enumerate_fn_ (dr::__detail)
    enumerate_fn_ (dr::mp::views)
    enumerate_fn_ (dr::sp::views)
    event (dr::__detail)
    +
    +
    F
    +
    formatter< Mdspan, char > (fmt)
    future (dr::sp)
    +
    +
    G
    +
    global_context (dr::mp::__detail)
    +
    +
    H
    +
    halo_bounds (dr::mp)
    halo_impl (dr::mp)
    +
    +
    I
    +
    id (dr::sp)
    index (dr)
    index_group (dr::mp)
    iota_fn_ (dr::views)
    is_drop_view (dr)
    is_drop_view< rng::drop_view< T > > (dr)
    is_iota_view (dr)
    is_iota_view< rng::iota_view< W > > (dr)
    is_owning_view (dr)
    is_ref_view (dr)
    is_ref_view< rng::ref_view< R > > (dr)
    is_sliding_view (dr)
    is_sliding_view< rng::sliding_view< T > > (dr)
    is_subrange_view (dr)
    is_subrange_view< rng::subrange< T > > (dr)
    is_take_view (dr)
    is_take_view< rng::take_view< T > > (dr)
    is_zip_view (dr)
    is_zip_view< rng::zip_view< Views... > > (dr)
    distributed_vector::iterator (dr::mp)
    iterator_adaptor (dr)
    +
    +
    L
    +
    local_fn_ (dr::ranges::__detail)
    logger (dr)
    +
    +
    M
    +
    matrix_entry (dr::sp)
    matrix_partition (dr::sp)
    matrix_ref (dr::sp)
    halo_impl::max_op (dr::mp)
    md_segment (dr::mp::__detail)
    mdspan_adapter_closure (dr::mp::views)
    mdspan_fn_ (dr::mp::views)
    mdspan_iter_accessor (dr::__detail)
    mdspan_view (dr::mp)
    mdsub_segment (dr::mp::__detail)
    mdtranspose (dr::__detail)
    halo_impl::min_op (dr::mp)
    MpiBackend (dr::mp)
    halo_impl::multiplies_op (dr::mp)
    +
    +
    N
    +
    normal_distributed_iterator_accessor (dr)
    +
    +
    O
    +
    owning_view (dr::__detail)
    +
    +
    P
    +
    halo_impl::plus_op (dr::mp)
    +
    +
    R
    +
    range_size (dr::mp::views::__detail)
    range_size< R > (dr::mp::views::__detail)
    device_allocator::rebind (dr::sp)
    remote_subrange (dr)
    rma_window (dr)
    +
    +
    S
    +
    halo_impl::second_op (dr::mp)
    segment_range (dr::sp)
    segment_range_accessor (dr::sp)
    segmented_view (dr::mp)
    segmented_view_iterator (dr::mp)
    slice_adaptor_closure (dr::sp::views)
    sliding_fn (dr::mp::views::__detail)
    source_location (nostd)
    span (dr::sp)
    span_group (dr::mp)
    span_halo (dr::mp)
    sparse_matrix (dr::sp)
    submdspan_adapter_closure (dr::mp::views)
    submdspan_fn_ (dr::mp::views)
    submdspan_view (dr::mp)
    subrange (dr::mp)
    subrange_iterator (dr::mp)
    +
    +
    T
    +
    timer (dr)
    tmp_buffer (dr::mp::__detail)
    transform_adapter_closure (dr::views)
    transform_fn_ (dr::views)
    transform_iterator (dr)
    transform_view (dr)
    tuple_element< Index, dr::index< I > > (std)
    tuple_element< Index, dr::sp::matrix_entry< T, I > > (std)
    tuple_element< Index, dr::sp::matrix_ref< T, I, TRef > > (std)
    tuple_or_pair (dr::sp::__detail)
    tuple_or_pair< T, U > (dr::sp::__detail)
    tuple_size< dr::index< I > > (std)
    tuple_size< dr::sp::matrix_entry< T, I > > (std)
    tuple_size< dr::sp::matrix_ref< T, I, TRef > > (std)
    +
    +
    U
    +
    unstructured_halo (dr::mp)
    +
    +
    V
    +
    vector (dr::sp)
    +
    +
    Z
    +
    zip_accessor (dr::sp)
    zip_iterator (dr::mp)
    zip_view (dr::mp)
    zip_view (dr::sp)
    +
    +
    + + + + diff --git a/doxygen/closed.png b/doxygen/closed.png new file mode 100644 index 0000000000000000000000000000000000000000..98cc2c909da37a6df914fbf67780eebd99c597f5 GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{V-kvUwAr*{o@8{^CZMh(5KoB^r_<4^zF@3)Cp&&t3hdujKf f*?bjBoY!V+E))@{xMcbjXe@)LtDnm{r-UW|*e5JT literal 0 HcmV?d00001 diff --git a/doxygen/common__support_8hpp_source.html b/doxygen/common__support_8hpp_source.html new file mode 100644 index 0000000000..d9c1079099 --- /dev/null +++ b/doxygen/common__support_8hpp_source.html @@ -0,0 +1,104 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/common_support.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    common_support.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7// file for helper functions implemented for both SYCL and non-SYCL compilations
    +
    8
    +
    9namespace dr::mp::__detail {
    +
    10
    +
    11template <typename T> void copy(const T *src, T *dst, std::size_t sz) {
    +
    12 if (mp::use_sycl()) {
    +
    13 sycl_copy<T>(src, dst, sz);
    +
    14 } else {
    +
    15 memcpy(dst, src, sz * sizeof(T));
    +
    16 }
    +
    17}
    +
    18
    +
    19} // namespace dr::mp::__detail
    +
    + + + + diff --git a/doxygen/communicator_8hpp_source.html b/doxygen/communicator_8hpp_source.html new file mode 100644 index 0000000000..0a6c4fe4e0 --- /dev/null +++ b/doxygen/communicator_8hpp_source.html @@ -0,0 +1,412 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/detail/communicator.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    communicator.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#define MPI_SUPPORTS_RGET_C \
    +
    8 (MPI_VERSION >= 4) || \
    +
    9 (defined(I_MPI_NUMVERSION) && (I_MPI_NUMVERSION > 20211200000))
    +
    10
    +
    11namespace dr {
    +
    12
    + +
    14public:
    +
    15 communicator(MPI_Comm comm = MPI_COMM_WORLD) : mpi_comm_(comm) {
    +
    16 int rank, size;
    +
    17 MPI_Comm_rank(comm, &rank);
    +
    18 MPI_Comm_size(comm, &size);
    +
    19 rank_ = rank;
    +
    20 size_ = size;
    +
    21 }
    +
    22
    +
    23 auto size() const { return size_; }
    +
    24 auto rank() const { return rank_; }
    +
    25 auto prev() const { return (rank() + size() - 1) % size(); }
    +
    26 auto next() const { return (rank() + 1) % size(); }
    +
    27 auto first() const { return rank() == 0; }
    +
    28 auto last() const { return rank() == size() - 1; }
    +
    29
    +
    30 MPI_Comm mpi_comm() const { return mpi_comm_; }
    +
    31
    +
    32 void barrier() const {
    +
    33#ifdef DRISHMEM
    +
    34 DRLOG("calling COMM barrier (by calling fence) in ISHMEM");
    +
    35 ishmem_fence();
    +
    36#endif
    +
    37 DRLOG("calling COMM barrier in MPI");
    +
    38 MPI_Barrier(mpi_comm_);
    +
    39 DRLOG("COMM barrier finished");
    +
    40 }
    +
    41
    +
    42 void bcast(void *src, std::size_t count, std::size_t root) const {
    +
    43 MPI_Bcast(src, count, MPI_BYTE, root, mpi_comm_);
    +
    44 }
    +
    45
    +
    46 void scatter(const void *src, void *dst, std::size_t count,
    +
    47 std::size_t root) const {
    +
    48 MPI_Scatter(src, count, MPI_BYTE, dst, count, MPI_BYTE, root, mpi_comm_);
    +
    49 }
    +
    50
    +
    51 template <typename T>
    +
    52 void scatter(const std::span<T> src, T &dst, std::size_t root) const {
    +
    53 assert(rng::size(src) >= size_);
    +
    54 scatter(rng::data(src), &dst, sizeof(T), root);
    +
    55 }
    +
    56
    +
    57 void scatterv(const void *src, int *counts, int *offsets, void *dst,
    +
    58 int dst_count, std::size_t root) const {
    +
    59 assert(counts == nullptr || counts[rank()] == dst_count);
    +
    60 MPI_Scatterv(src, counts, offsets, MPI_BYTE, dst, dst_count, MPI_BYTE, root,
    +
    61 mpi_comm_);
    +
    62 }
    +
    63
    +
    64 void gather(const void *src, void *dst, std::size_t count,
    +
    65 std::size_t root) const {
    +
    66 MPI_Gather_c(src, count, MPI_BYTE, dst, count, MPI_BYTE, root, mpi_comm_);
    +
    67 }
    +
    68
    +
    69 template <typename T>
    +
    70 void gather(const T &src, std::span<T> dst, std::size_t root) const {
    +
    71 assert(rng::size(dst) >= size_);
    +
    72 gather(&src, rng::data(dst), sizeof(T), root);
    +
    73 }
    +
    74
    +
    75 template <typename T>
    +
    76 void all_gather(const T *src, T *dst, std::size_t count) const {
    +
    77 // Gather size elements from each rank
    +
    78 MPI_Allgather_c(src, count * sizeof(T), MPI_BYTE, dst, count * sizeof(T),
    +
    79 MPI_BYTE, mpi_comm_);
    +
    80 }
    +
    81
    +
    82 template <typename T>
    +
    83 void all_gather(const T &src, std::vector<T> &dst) const {
    +
    84 assert(rng::size(dst) >= size_);
    +
    85 all_gather(&src, rng::data(dst), 1);
    +
    86 }
    +
    87
    +
    88 template <rng::contiguous_range R>
    +
    89 void all_gather(const R &src, R &dst) const {
    +
    90 assert(rng::size(dst) >= size_ * rng::size(src));
    +
    91 all_gather(rng::data(src), rng::data(dst), rng::size(src));
    +
    92 }
    +
    93
    +
    94 template <typename T>
    +
    95 void i_all_gather(const T *src, T *dst, std::size_t count,
    +
    96 MPI_Request *req) const {
    +
    97 // Gather size elements from each rank
    +
    98 MPI_Iallgather_c(src, count * sizeof(T), MPI_BYTE, dst, count * sizeof(T),
    +
    99 MPI_BYTE, mpi_comm_, req);
    +
    100 }
    +
    101
    +
    102 template <typename T>
    +
    103 void i_all_gather(const T &src, std::vector<T> &dst, MPI_Request *req) const {
    +
    104 assert(rng::size(dst) >= size_);
    +
    105 i_all_gather(&src, rng::data(dst), 1, req);
    +
    106 }
    +
    107
    +
    108 void gatherv(const void *src, int *counts, int *offsets, void *dst,
    +
    109 std::size_t root) const {
    +
    110 MPI_Gatherv(src, counts[rank()], MPI_BYTE, dst, counts, offsets, MPI_BYTE,
    +
    111 root, mpi_comm_);
    +
    112 }
    +
    113
    +
    114 // pointer with explicit tag
    +
    115 template <typename T>
    +
    116 void isend(const T *data, std::size_t count, std::size_t dst_rank, auto tag,
    +
    117 MPI_Request *request) const {
    +
    118 MPI_Isend_c(data, count * sizeof(T), MPI_BYTE, dst_rank, int(tag),
    +
    119 mpi_comm_, request);
    +
    120 }
    +
    121
    +
    122 // pointer, no tag
    +
    123 template <typename T>
    +
    124 void isend(const T *data, std::size_t count, std::size_t dst_rank,
    +
    125 MPI_Request *request) const {
    +
    126 isend(data, count, dst_rank, 0, request);
    +
    127 }
    +
    128
    +
    129 // range and tag
    +
    130 template <rng::contiguous_range R>
    +
    131 void isend(const R &data, std::size_t dst_rank, auto tag,
    +
    132 MPI_Request *request) const {
    +
    133 isend(rng::data(data), rng::size(data), dst_rank, tag, request);
    +
    134 }
    +
    135
    +
    136 // range, no tag
    +
    137 template <rng::contiguous_range R>
    +
    138 void isend(const R &data, std::size_t dst_rank, MPI_Request *request) const {
    +
    139 isend(data, dst_rank, 0, request);
    +
    140 }
    +
    141
    +
    142 // pointer and tag
    +
    143 template <typename T>
    +
    144 void irecv(T *data, std::size_t size, std::size_t src_rank, auto tag,
    +
    145 MPI_Request *request) const {
    +
    146 MPI_Irecv_c(data, size * sizeof(T), MPI_BYTE, src_rank, int(tag), mpi_comm_,
    +
    147 request);
    +
    148 }
    +
    149
    +
    150 // pointer, no tag
    +
    151 template <typename T>
    +
    152 void irecv(T *data, std::size_t size, std::size_t src_rank,
    +
    153 MPI_Request *request) const {
    +
    154 irecv(data, size, src_rank, 0, request);
    +
    155 }
    +
    156
    +
    157 // range and tag
    +
    158 template <rng::contiguous_range R>
    +
    159 void irecv(R &data, std::size_t src_rank, int tag,
    +
    160 MPI_Request *request) const {
    +
    161 irecv(rng::data(data), rng::size(data), src_rank, tag, request);
    +
    162 }
    +
    163
    +
    164 // range, no tag
    +
    165 template <rng::contiguous_range R>
    +
    166 void irecv(R &data, std::size_t src_rank, MPI_Request *request) const {
    +
    167 irecv(data, src_rank, 0, request);
    +
    168 }
    +
    169
    +
    170 template <rng::contiguous_range R>
    +
    171 void alltoall(const R &sendr, R &recvr, std::size_t count) {
    +
    172 alltoall(rng::data(sendr), rng::data(recvr), count);
    +
    173 }
    +
    174
    +
    175 template <typename T>
    +
    176 void alltoall(const T *send, T *receive, std::size_t count) {
    +
    177 std::size_t bytes = count * sizeof(T);
    +
    178
    +
    179 timer time;
    +
    180 MPI_Alltoall_c(send, bytes, MPI_BYTE, receive, bytes, MPI_BYTE, mpi_comm_);
    +
    181 dr::drlog.debug(dr::logger::mpi, "alltoall bytes: {} elapsed: {}\n", bytes,
    +
    182 time.elapsed());
    +
    183 }
    +
    184
    +
    185 template <rng::contiguous_range SendR, rng::contiguous_range RecvR>
    +
    186 void alltoallv(const SendR &sendbuf, const std::vector<std::size_t> &sendcnt,
    +
    187 const std::vector<std::size_t> &senddsp, RecvR &recvbuf,
    +
    188 const std::vector<std::size_t> &recvcnt,
    +
    189 const std::vector<std::size_t> &recvdsp) {
    +
    190 using valT = typename RecvR::value_type;
    +
    191
    +
    192 static_assert(std::is_same_v<std::ranges::range_value_t<SendR>,
    +
    193 std::ranges::range_value_t<RecvR>>);
    +
    194
    +
    195 assert(rng::size(sendcnt) == size_);
    +
    196 assert(rng::size(senddsp) == size_);
    +
    197 assert(rng::size(recvcnt) == size_);
    +
    198 assert(rng::size(recvdsp) == size_);
    +
    199
    +
    200 std::vector<MPI_Count> _sendcnt(size_);
    +
    201 std::vector<MPI_Aint> _senddsp(size_);
    +
    202 std::vector<MPI_Count> _recvcnt(size_);
    +
    203 std::vector<MPI_Aint> _recvdsp(size_);
    +
    204
    +
    205 rng::transform(sendcnt, _sendcnt.begin(),
    +
    206 [](auto e) { return e * sizeof(valT); });
    +
    207 rng::transform(senddsp, _senddsp.begin(),
    +
    208 [](auto e) { return e * sizeof(valT); });
    +
    209 rng::transform(recvcnt, _recvcnt.begin(),
    +
    210 [](auto e) { return e * sizeof(valT); });
    +
    211 rng::transform(recvdsp, _recvdsp.begin(),
    +
    212 [](auto e) { return e * sizeof(valT); });
    +
    213
    +
    214 MPI_Alltoallv_c(rng::data(sendbuf), rng::data(_sendcnt),
    +
    215 rng::data(_senddsp), MPI_BYTE, rng::data(recvbuf),
    +
    216 rng::data(_recvcnt), rng::data(_recvdsp), MPI_BYTE,
    +
    217 mpi_comm_);
    +
    218 }
    +
    219
    +
    220 bool operator==(const communicator &other) const {
    +
    221 return mpi_comm_ == other.mpi_comm_;
    +
    222 }
    +
    223
    +
    224private:
    +
    225 MPI_Comm mpi_comm_;
    +
    226 std::size_t rank_;
    +
    227 std::size_t size_;
    +
    228};
    +
    229
    + +
    231public:
    +
    232 void create(communicator comm, void *data, std::size_t size) {
    +
    233 local_data_ = data;
    +
    234 communicator_ = comm;
    +
    235 DRLOG("win create:: size: {} data:{}", size, data);
    +
    236 MPI_Win_create(data, size, 1, MPI_INFO_NULL, comm.mpi_comm(), &win_);
    +
    237 }
    +
    238
    +
    239 template <typename T> auto local_data() {
    +
    240 return static_cast<T *>(local_data_);
    +
    241 }
    +
    242
    +
    243 void free() { MPI_Win_free(&win_); }
    +
    244
    +
    245 bool operator==(const rma_window other) const noexcept {
    +
    246 return this->win_ == other.win_;
    +
    247 }
    +
    248
    +
    249 void set_null() { win_ = MPI_WIN_NULL; }
    +
    250 bool null() const noexcept { return win_ == MPI_WIN_NULL; }
    +
    251
    +
    252 template <typename T> T get(std::size_t rank, std::size_t disp) const {
    +
    253 T dst;
    +
    254 get(&dst, sizeof(T), rank, disp * sizeof(T));
    +
    255 return dst;
    +
    256 }
    +
    257
    +
    258 void get(void *dst, std::size_t size, std::size_t rank,
    +
    259 std::size_t disp) const {
    +
    260 DRLOG("MPI comm get:: ({}:{}:{})", rank, disp, size);
    +
    261 MPI_Request request;
    +
    262#if (MPI_VERSION >= 4) || \
    +
    263 (defined(I_MPI_NUMVERSION) && (I_MPI_NUMVERSION > 20211200000))
    +
    264 MPI_Rget_c(dst, size, MPI_BYTE, rank, disp, size, MPI_BYTE, win_, &request);
    +
    265#else
    +
    266 assert(
    +
    267 size <= (std::size_t)INT_MAX &&
    +
    268 "MPI API requires origin_count to be positive signed 32-bit integer");
    +
    269 MPI_Rget(dst, size, MPI_BYTE, rank, disp, size, MPI_BYTE, win_, &request);
    +
    270#endif
    +
    271 MPI_Wait(&request, MPI_STATUS_IGNORE);
    +
    272 }
    +
    273
    +
    274 void put(const auto &src, std::size_t rank, std::size_t disp) const {
    +
    275 put(&src, sizeof(src), rank, disp * sizeof(src));
    +
    276 }
    +
    277
    +
    278 void put(const void *src, std::size_t size, std::size_t rank,
    +
    279 std::size_t disp) const {
    +
    280 DRLOG("MPI comm put:: ({}:{}:{})", rank, disp, size);
    +
    281 MPI_Request request;
    +
    282
    +
    283#if (MPI_VERSION >= 4) || \
    +
    284 (defined(I_MPI_NUMVERSION) && (I_MPI_NUMVERSION > 20211200000))
    +
    285 MPI_Rput_c(src, size, MPI_BYTE, rank, disp, size, MPI_BYTE, win_, &request);
    +
    286#else
    +
    287 // MPI_Rput origin_count is 32-bit signed int - check range
    +
    288 assert(
    +
    289 size <= (std::size_t)INT_MAX &&
    +
    290 "MPI API requires origin_count to be positive signed 32-bit integer");
    +
    291 MPI_Rput(src, size, MPI_BYTE, rank, disp, size, MPI_BYTE, win_, &request);
    +
    292#endif
    +
    293
    +
    294 DRLOG("MPI comm wait:: ({}:{}:{})", rank, disp, size);
    +
    295 MPI_Wait(&request, MPI_STATUS_IGNORE);
    +
    296 DRLOG("MPI comm wait finished:: ({}:{}:{})", rank, disp, size);
    +
    297 }
    +
    298
    +
    299 void fence() const {
    +
    300 if (win_ != MPI_WIN_NULL) {
    +
    301 DRLOG("MPI comm fence:: win:{}", win_);
    +
    302 MPI_Win_fence(0, win_);
    +
    303 DRLOG("MPI comm fence finished:: win:{}", win_);
    +
    304 } else {
    +
    305 DRLOG("MPI comm fence skipped because win is NULL");
    +
    306 }
    +
    307 }
    +
    308
    +
    309 void flush(std::size_t rank) const {
    +
    310 DRLOG("MPI comm flush:: rank:{} win:{}", rank, win_);
    +
    311 MPI_Win_flush(rank, win_);
    +
    312 DRLOG("MPI comm flush finished:: rank:{} win:{}", rank, win_);
    +
    313 }
    +
    314
    +
    315 const auto &communicator() const { return communicator_; }
    +
    316 auto mpi_win() { return win_; }
    +
    317
    +
    318private:
    +
    319 dr::communicator communicator_;
    +
    320 MPI_Win win_ = MPI_WIN_NULL;
    +
    321 void *local_data_ = nullptr;
    +
    322};
    +
    323
    +
    324} // namespace dr
    +
    Definition: communicator.hpp:13
    +
    Definition: communicator.hpp:230
    +
    Definition: logger.hpp:18
    +
    + + + + diff --git a/doxygen/conceptdr_1_1TupleLike.html b/doxygen/conceptdr_1_1TupleLike.html new file mode 100644 index 0000000000..61c17b32d5 --- /dev/null +++ b/doxygen/conceptdr_1_1TupleLike.html @@ -0,0 +1,99 @@ + + + + + + + +Distributed Ranges: dr::TupleLike Concept Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::TupleLike Concept Reference
    +
    +
    +

    Concept definition

    +
    template<typename T, typename... Args>
    +
    concept dr::TupleLike =
    +
    requires {
    +
    typename std::tuple_size<std::remove_cvref_t<T>>::type;
    +
    requires std::same_as<
    +
    std::remove_cvref_t<
    +
    decltype(std::tuple_size_v<std::remove_cvref_t<T>>)>,
    +
    std::size_t>;
    +
    } && sizeof...(Args) == std::tuple_size_v<std::remove_cvref_t<T>> &&
    +
    []<std::size_t... I>(std::index_sequence<I...>) {
    +
    return (TupleElementGettable<T, I, Args> && ...);
    +
    }(std::make_index_sequence<std::tuple_size_v<std::remove_cvref_t<T>>>())
    +
    Definition: index.hpp:22
    +
    + + + + diff --git a/doxygen/conceptdr_1_1_0d4_1_1TupleElementGettable.html b/doxygen/conceptdr_1_1_0d4_1_1TupleElementGettable.html new file mode 100644 index 0000000000..67e59e4cb5 --- /dev/null +++ b/doxygen/conceptdr_1_1_0d4_1_1TupleElementGettable.html @@ -0,0 +1,91 @@ + + + + + + + +Distributed Ranges: dr::@4::TupleElementGettable Concept Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::@4::TupleElementGettable Concept Reference
    +
    +
    +

    Concept definition

    +
    template<typename T, std::size_t I, typename U std::any>
    +
    concept dr::@4::TupleElementGettable = requires(T tuple) {
    +
    { std::get<I>(tuple) } -> std::convertible_to<U>;
    +
    }
    +
    Definition: index.hpp:16
    +
    + + + + diff --git a/doxygen/conceptdr_1_1_0d5_1_1has__segments__method.html b/doxygen/conceptdr_1_1_0d5_1_1has__segments__method.html new file mode 100644 index 0000000000..427afbd46f --- /dev/null +++ b/doxygen/conceptdr_1_1_0d5_1_1has__segments__method.html @@ -0,0 +1,91 @@ + + + + + + + +Distributed Ranges: dr::@5::has_segments_method Concept Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::@5::has_segments_method Concept Reference
    +
    +
    +

    Concept definition

    +
    template<typename R>
    +
    concept dr::@5::has_segments_method = requires(R r) {
    +
    { r.segments() };
    +
    }
    +
    Definition: iterator_adaptor.hpp:17
    +
    + + + + diff --git a/doxygen/conceptdr_1_1____detail_1_1mdarray__like.html b/doxygen/conceptdr_1_1____detail_1_1mdarray__like.html new file mode 100644 index 0000000000..2ae3cb87a9 --- /dev/null +++ b/doxygen/conceptdr_1_1____detail_1_1mdarray__like.html @@ -0,0 +1,89 @@ + + + + + + + +Distributed Ranges: dr::__detail::mdarray_like Concept Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::__detail::mdarray_like Concept Reference
    +
    +
    +

    Concept definition

    +
    template<typename Mdarray>
    +
    concept dr::__detail::mdarray_like = requires(Mdarray &mdarray) { mdarray.to_mdspan(); }
    +
    Definition: mdspan_utils.hpp:52
    +
    + + + + diff --git a/doxygen/conceptdr_1_1____detail_1_1mdspan__like.html b/doxygen/conceptdr_1_1____detail_1_1mdspan__like.html new file mode 100644 index 0000000000..90239a2efe --- /dev/null +++ b/doxygen/conceptdr_1_1____detail_1_1mdspan__like.html @@ -0,0 +1,92 @@ + + + + + + + +Distributed Ranges: dr::__detail::mdspan_like Concept Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::__detail::mdspan_like Concept Reference
    +
    +
    +

    Concept definition

    +
    template<typename Mdspan>
    +
    concept dr::__detail::mdspan_like = requires(Mdspan &mdspan) {
    +
    mdspan.rank();
    +
    mdspan.extents();
    +
    }
    +
    Definition: mdspan_utils.hpp:46
    +
    + + + + diff --git a/doxygen/conceptdr_1_1distributed__contiguous__iterator.html b/doxygen/conceptdr_1_1distributed__contiguous__iterator.html new file mode 100644 index 0000000000..e58f11fd75 --- /dev/null +++ b/doxygen/conceptdr_1_1distributed__contiguous__iterator.html @@ -0,0 +1,96 @@ + + + + + + + +Distributed Ranges: dr::distributed_contiguous_iterator Concept Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::distributed_contiguous_iterator Concept Reference
    +
    +
    +

    Concept definition

    +
    template<typename Iter>
    + +
    distributed_iterator<Iter> && rng::random_access_iterator<Iter> &&
    +
    requires(Iter &iter) {
    +
    { dr::ranges::segments(iter) } -> rng::random_access_range;
    +
    } &&
    +
    remote_contiguous_range<rng::range_value_t<decltype(dr::ranges::segments(
    +
    std::declval<Iter>()))>>
    +
    Definition: concepts.hpp:51
    +
    Definition: concepts.hpp:31
    +
    + + + + diff --git a/doxygen/conceptdr_1_1distributed__contiguous__range.html b/doxygen/conceptdr_1_1distributed__contiguous__range.html new file mode 100644 index 0000000000..92efb0904b --- /dev/null +++ b/doxygen/conceptdr_1_1distributed__contiguous__range.html @@ -0,0 +1,96 @@ + + + + + + + +Distributed Ranges: dr::distributed_contiguous_range Concept Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::distributed_contiguous_range Concept Reference
    +
    +
    +

    Concept definition

    +
    template<typename R>
    + +
    distributed_range<R> && rng::random_access_range<R> &&
    +
    requires(R &r) {
    +
    { dr::ranges::segments(r) } -> rng::random_access_range;
    +
    } &&
    +
    remote_contiguous_range<
    +
    rng::range_value_t<decltype(dr::ranges::segments(std::declval<R>()))>>
    +
    Definition: concepts.hpp:42
    +
    Definition: concepts.hpp:20
    +
    + + + + diff --git a/doxygen/conceptdr_1_1distributed__iterator.html b/doxygen/conceptdr_1_1distributed__iterator.html new file mode 100644 index 0000000000..c2e2066a7f --- /dev/null +++ b/doxygen/conceptdr_1_1distributed__iterator.html @@ -0,0 +1,91 @@ + + + + + + + +Distributed Ranges: dr::distributed_iterator Concept Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::distributed_iterator Concept Reference
    +
    +
    +

    Concept definition

    +
    template<typename I>
    +
    concept dr::distributed_iterator = std::forward_iterator<I> && requires(I &iter) {
    +
    dr::ranges::segments(iter);
    +
    }
    +
    Definition: concepts.hpp:31
    +
    + + + + diff --git a/doxygen/conceptdr_1_1distributed__mdspan__range.html b/doxygen/conceptdr_1_1distributed__mdspan__range.html new file mode 100644 index 0000000000..d2cc2e3634 --- /dev/null +++ b/doxygen/conceptdr_1_1distributed__mdspan__range.html @@ -0,0 +1,91 @@ + + + + + + + +Distributed Ranges: dr::distributed_mdspan_range Concept Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::distributed_mdspan_range Concept Reference
    +
    +
    +

    Concept definition

    +
    template<typename R>
    + +
    distributed_range<R> && requires(R &r) { r.mdspan(); }
    +
    Definition: mdspan_utils.hpp:332
    +
    Definition: concepts.hpp:20
    +
    + + + + diff --git a/doxygen/conceptdr_1_1distributed__range.html b/doxygen/conceptdr_1_1distributed__range.html new file mode 100644 index 0000000000..ccd64645a1 --- /dev/null +++ b/doxygen/conceptdr_1_1distributed__range.html @@ -0,0 +1,90 @@ + + + + + + + +Distributed Ranges: dr::distributed_range Concept Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::distributed_range Concept Reference
    +
    +
    +

    Concept definition

    +
    template<typename R>
    + +
    rng::forward_range<R> && requires(R &r) { dr::ranges::segments(r); }
    +
    Definition: concepts.hpp:20
    +
    + + + + diff --git a/doxygen/conceptdr_1_1mp_1_1____detail_1_1is__distributed.html b/doxygen/conceptdr_1_1mp_1_1____detail_1_1is__distributed.html new file mode 100644 index 0000000000..fe564c6fd3 --- /dev/null +++ b/doxygen/conceptdr_1_1mp_1_1____detail_1_1is__distributed.html @@ -0,0 +1,92 @@ + + + + + + + +Distributed Ranges: dr::mp::__detail::is_distributed Concept Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::mp::__detail::is_distributed Concept Reference
    +
    +
    +

    Concept definition

    +
    + + + + diff --git a/doxygen/conceptdr_1_1mp_1_1____detail_1_1one__argument.html b/doxygen/conceptdr_1_1mp_1_1____detail_1_1one__argument.html new file mode 100644 index 0000000000..b45cf3e949 --- /dev/null +++ b/doxygen/conceptdr_1_1mp_1_1____detail_1_1one__argument.html @@ -0,0 +1,91 @@ + + + + + + + +Distributed Ranges: dr::mp::__detail::one_argument Concept Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::mp::__detail::one_argument Concept Reference
    +
    +
    +

    Concept definition

    +
    template<typename F, typename Arg1>
    +
    concept dr::mp::__detail::one_argument = requires(F &f) {
    +
    { f(Arg1{}) };
    +
    }
    +
    Definition: md_for_each.hpp:28
    +
    + + + + diff --git a/doxygen/conceptdr_1_1mp_1_1____detail_1_1two__arguments.html b/doxygen/conceptdr_1_1mp_1_1____detail_1_1two__arguments.html new file mode 100644 index 0000000000..c0452486a2 --- /dev/null +++ b/doxygen/conceptdr_1_1mp_1_1____detail_1_1two__arguments.html @@ -0,0 +1,91 @@ + + + + + + + +Distributed Ranges: dr::mp::__detail::two_arguments Concept Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::mp::__detail::two_arguments Concept Reference
    +
    +
    +

    Concept definition

    +
    template<typename F, typename Arg1, typename Arg2>
    +
    concept dr::mp::__detail::two_arguments = requires(F &f) {
    +
    { f(Arg1{}, Arg2{}) };
    +
    }
    +
    Definition: md_for_each.hpp:33
    +
    + + + + diff --git a/doxygen/conceptdr_1_1mp_1_1____detail_1_1zipable.html b/doxygen/conceptdr_1_1mp_1_1____detail_1_1zipable.html new file mode 100644 index 0000000000..f02886b391 --- /dev/null +++ b/doxygen/conceptdr_1_1mp_1_1____detail_1_1zipable.html @@ -0,0 +1,89 @@ + + + + + + + +Distributed Ranges: dr::mp::__detail::zipable Concept Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::mp::__detail::zipable Concept Reference
    +
    +
    +

    Concept definition

    +
    template<typename R>
    +
    concept dr::mp::__detail::zipable = rng::random_access_range<R> && rng::common_range<R>
    +
    Definition: zip.hpp:20
    +
    + + + + diff --git a/doxygen/conceptdr_1_1mp_1_1has__halo__method.html b/doxygen/conceptdr_1_1mp_1_1has__halo__method.html new file mode 100644 index 0000000000..79429912bf --- /dev/null +++ b/doxygen/conceptdr_1_1mp_1_1has__halo__method.html @@ -0,0 +1,92 @@ + + + + + + + +Distributed Ranges: dr::mp::has_halo_method Concept Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::mp::has_halo_method Concept Reference
    +
    +
    +

    Concept definition

    +
    template<typename DR>
    +
    concept dr::mp::has_halo_method = dr::distributed_range<DR> && requires(DR &&dr) {
    +
    { rng::begin(dr::ranges::segments(dr)[0]).halo() };
    +
    }
    +
    Definition: concepts.hpp:20
    +
    Definition: segment.hpp:255
    +
    + + + + diff --git a/doxygen/conceptdr_1_1mp_1_1has__segments.html b/doxygen/conceptdr_1_1mp_1_1has__segments.html new file mode 100644 index 0000000000..bd45d44b42 --- /dev/null +++ b/doxygen/conceptdr_1_1mp_1_1has__segments.html @@ -0,0 +1,89 @@ + + + + + + + +Distributed Ranges: dr::mp::has_segments Concept Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::mp::has_segments Concept Reference
    +
    +
    +

    Concept definition

    +
    template<typename T>
    +
    concept dr::mp::has_segments = requires(T &t) { dr::ranges::segments(t); }
    +
    Definition: alignment.hpp:14
    +
    + + + + diff --git a/doxygen/conceptdr_1_1mp_1_1is__mdspan__view.html b/doxygen/conceptdr_1_1mp_1_1is__mdspan__view.html new file mode 100644 index 0000000000..707394dbc7 --- /dev/null +++ b/doxygen/conceptdr_1_1mp_1_1is__mdspan__view.html @@ -0,0 +1,91 @@ + + + + + + + +Distributed Ranges: dr::mp::is_mdspan_view Concept Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::mp::is_mdspan_view Concept Reference
    +
    +
    +

    Concept definition

    +
    template<typename R>
    + +
    dr::distributed_range<R> && requires(R &r) { r.mdspan(); }
    +
    Definition: concepts.hpp:20
    +
    Definition: mdspan_view.hpp:206
    +
    + + + + diff --git a/doxygen/conceptdr_1_1mp_1_1no__segments.html b/doxygen/conceptdr_1_1mp_1_1no__segments.html new file mode 100644 index 0000000000..0026ffbea5 --- /dev/null +++ b/doxygen/conceptdr_1_1mp_1_1no__segments.html @@ -0,0 +1,90 @@ + + + + + + + +Distributed Ranges: dr::mp::no_segments Concept Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::mp::no_segments Concept Reference
    +
    +
    +

    Concept definition

    +
    template<typename T>
    + +
    Definition: alignment.hpp:14
    +
    Definition: alignment.hpp:17
    +
    + + + + diff --git a/doxygen/conceptdr_1_1ranges_1_1_0d14_1_1has__local__adl.html b/doxygen/conceptdr_1_1ranges_1_1_0d14_1_1has__local__adl.html new file mode 100644 index 0000000000..f01e53099a --- /dev/null +++ b/doxygen/conceptdr_1_1ranges_1_1_0d14_1_1has__local__adl.html @@ -0,0 +1,91 @@ + + + + + + + +Distributed Ranges: dr::ranges::@14::has_local_adl Concept Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::ranges::@14::has_local_adl Concept Reference
    +
    +
    +

    Concept definition

    +
    template<typename Iter>
    +
    concept dr::ranges::@14::has_local_adl = requires(Iter &iter) {
    +
    { local_(iter) } -> std::forward_iterator;
    +
    }
    +
    Definition: ranges.hpp:128
    +
    + + + + diff --git a/doxygen/conceptdr_1_1ranges_1_1_0d14_1_1has__rank__adl.html b/doxygen/conceptdr_1_1ranges_1_1_0d14_1_1has__rank__adl.html new file mode 100644 index 0000000000..4a9c2567cf --- /dev/null +++ b/doxygen/conceptdr_1_1ranges_1_1_0d14_1_1has__rank__adl.html @@ -0,0 +1,91 @@ + + + + + + + +Distributed Ranges: dr::ranges::@14::has_rank_adl Concept Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::ranges::@14::has_rank_adl Concept Reference
    +
    +
    +

    Concept definition

    +
    template<typename R>
    +
    concept dr::ranges::@14::has_rank_adl = requires(R &r) {
    +
    { rank_(r) } -> std::weakly_incrementable;
    +
    }
    +
    Definition: ranges.hpp:27
    +
    + + + + diff --git a/doxygen/conceptdr_1_1ranges_1_1_0d14_1_1has__rank__method.html b/doxygen/conceptdr_1_1ranges_1_1_0d14_1_1has__rank__method.html new file mode 100644 index 0000000000..3914ad9a3b --- /dev/null +++ b/doxygen/conceptdr_1_1ranges_1_1_0d14_1_1has__rank__method.html @@ -0,0 +1,91 @@ + + + + + + + +Distributed Ranges: dr::ranges::@14::has_rank_method Concept Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::ranges::@14::has_rank_method Concept Reference
    +
    +
    +

    Concept definition

    +
    template<typename T>
    +
    concept dr::ranges::@14::has_rank_method = requires(T t) {
    +
    { t.rank() } -> std::weakly_incrementable;
    +
    }
    +
    Definition: ranges.hpp:22
    +
    + + + + diff --git a/doxygen/conceptdr_1_1ranges_1_1_0d14_1_1has__segments__adl.html b/doxygen/conceptdr_1_1ranges_1_1_0d14_1_1has__segments__adl.html new file mode 100644 index 0000000000..a50eb959af --- /dev/null +++ b/doxygen/conceptdr_1_1ranges_1_1_0d14_1_1has__segments__adl.html @@ -0,0 +1,92 @@ + + + + + + + +Distributed Ranges: dr::ranges::@14::has_segments_adl Concept Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::ranges::@14::has_segments_adl Concept Reference
    +
    +
    +

    Concept definition

    +
    template<typename R>
    +
    concept dr::ranges::@14::has_segments_adl = requires(R &r) {
    +
    { segments_(r) } -> segments_range;
    +
    }
    +
    Definition: ranges.hpp:95
    +
    Definition: ranges.hpp:86
    +
    + + + + diff --git a/doxygen/conceptdr_1_1ranges_1_1_0d14_1_1has__segments__method.html b/doxygen/conceptdr_1_1ranges_1_1_0d14_1_1has__segments__method.html new file mode 100644 index 0000000000..599f9b36c5 --- /dev/null +++ b/doxygen/conceptdr_1_1ranges_1_1_0d14_1_1has__segments__method.html @@ -0,0 +1,92 @@ + + + + + + + +Distributed Ranges: dr::ranges::@14::has_segments_method Concept Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::ranges::@14::has_segments_method Concept Reference
    +
    +
    +

    Concept definition

    +
    template<typename R>
    +
    concept dr::ranges::@14::has_segments_method = requires(R r) {
    +
    { r.segments() } -> segments_range;
    +
    }
    +
    Definition: ranges.hpp:90
    +
    Definition: ranges.hpp:86
    +
    + + + + diff --git a/doxygen/conceptdr_1_1ranges_1_1_0d14_1_1is__localizable.html b/doxygen/conceptdr_1_1ranges_1_1_0d14_1_1is__localizable.html new file mode 100644 index 0000000000..d502cc83db --- /dev/null +++ b/doxygen/conceptdr_1_1ranges_1_1_0d14_1_1is__localizable.html @@ -0,0 +1,89 @@ + + + + + + + +Distributed Ranges: dr::ranges::@14::is_localizable Concept Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::ranges::@14::is_localizable Concept Reference
    +
    +
    +

    Concept definition

    +
    template<typename T>
    +
    concept dr::ranges::@14::is_localizable = is_localizable_helper<T>::value
    +
    Definition: ranges.hpp:155
    +
    + + + + diff --git a/doxygen/conceptdr_1_1ranges_1_1_0d14_1_1is__remote__iterator__shadow__impl__.html b/doxygen/conceptdr_1_1ranges_1_1_0d14_1_1is__remote__iterator__shadow__impl__.html new file mode 100644 index 0000000000..38476907de --- /dev/null +++ b/doxygen/conceptdr_1_1ranges_1_1_0d14_1_1is__remote__iterator__shadow__impl__.html @@ -0,0 +1,92 @@ + + + + + + + +Distributed Ranges: dr::ranges::@14::is_remote_iterator_shadow_impl_ Concept Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::ranges::@14::is_remote_iterator_shadow_impl_ Concept Reference
    +
    +
    +

    Concept definition

    +
    template<typename Iter>
    +
    concept dr::ranges::@14::is_remote_iterator_shadow_impl_ =
    +
    std::forward_iterator<Iter> && has_rank_method<Iter> &&
    +
    !disable_rank<std::remove_cv_t<Iter>>
    +
    Definition: ranges.hpp:22
    + +
    + + + + diff --git a/doxygen/conceptdr_1_1ranges_1_1_0d14_1_1iter__has__local__method.html b/doxygen/conceptdr_1_1ranges_1_1_0d14_1_1iter__has__local__method.html new file mode 100644 index 0000000000..f38262ed31 --- /dev/null +++ b/doxygen/conceptdr_1_1ranges_1_1_0d14_1_1iter__has__local__method.html @@ -0,0 +1,92 @@ + + + + + + + +Distributed Ranges: dr::ranges::@14::iter_has_local_method Concept Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::ranges::@14::iter_has_local_method Concept Reference
    +
    +
    +

    Concept definition

    +
    template<typename Iter>
    +
    concept dr::ranges::@14::iter_has_local_method =
    +
    std::forward_iterator<Iter> && requires(Iter iter) {
    +
    { iter.local() } -> std::forward_iterator;
    +
    }
    +
    Definition: ranges.hpp:133
    +
    + + + + diff --git a/doxygen/conceptdr_1_1ranges_1_1_0d14_1_1remote__range__shadow__impl__.html b/doxygen/conceptdr_1_1ranges_1_1_0d14_1_1remote__range__shadow__impl__.html new file mode 100644 index 0000000000..e0c44376e0 --- /dev/null +++ b/doxygen/conceptdr_1_1ranges_1_1_0d14_1_1remote__range__shadow__impl__.html @@ -0,0 +1,90 @@ + + + + + + + +Distributed Ranges: dr::ranges::@14::remote_range_shadow_impl_ Concept Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::ranges::@14::remote_range_shadow_impl_ Concept Reference
    +
    +
    +

    Concept definition

    +
    template<typename R>
    +
    concept dr::ranges::@14::remote_range_shadow_impl_ =
    +
    rng::forward_range<R> && requires(R &r) { dr::ranges::rank(r); }
    + +
    + + + + diff --git a/doxygen/conceptdr_1_1ranges_1_1_0d14_1_1segment__has__local__method.html b/doxygen/conceptdr_1_1ranges_1_1_0d14_1_1segment__has__local__method.html new file mode 100644 index 0000000000..f82bd05a8a --- /dev/null +++ b/doxygen/conceptdr_1_1ranges_1_1_0d14_1_1segment__has__local__method.html @@ -0,0 +1,92 @@ + + + + + + + +Distributed Ranges: dr::ranges::@14::segment_has_local_method Concept Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::ranges::@14::segment_has_local_method Concept Reference
    +
    +
    +

    Concept definition

    +
    template<typename Segment>
    +
    concept dr::ranges::@14::segment_has_local_method =
    +
    rng::forward_range<Segment> && requires(Segment segment) {
    +
    { segment.local() } -> rng::forward_range;
    +
    }
    + +
    + + + + diff --git a/doxygen/conceptdr_1_1ranges_1_1_0d14_1_1segments__range.html b/doxygen/conceptdr_1_1ranges_1_1_0d14_1_1segments__range.html new file mode 100644 index 0000000000..ab08e725bf --- /dev/null +++ b/doxygen/conceptdr_1_1ranges_1_1_0d14_1_1segments__range.html @@ -0,0 +1,91 @@ + + + + + + + +Distributed Ranges: dr::ranges::@14::segments_range Concept Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::ranges::@14::segments_range Concept Reference
    +
    +
    +

    Concept definition

    +
    template<typename R>
    +
    concept dr::ranges::@14::segments_range =
    + + +
    Definition: ranges.hpp:86
    +
    + + + + diff --git a/doxygen/conceptdr_1_1ranges_1_1____detail_1_1has__local.html b/doxygen/conceptdr_1_1ranges_1_1____detail_1_1has__local.html new file mode 100644 index 0000000000..2338729a39 --- /dev/null +++ b/doxygen/conceptdr_1_1ranges_1_1____detail_1_1has__local.html @@ -0,0 +1,91 @@ + + + + + + + +Distributed Ranges: dr::ranges::__detail::has_local Concept Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::ranges::__detail::has_local Concept Reference
    +
    +
    +

    Concept definition

    +
    template<typename T>
    +
    concept dr::ranges::__detail::has_local = requires(T &t) {
    +
    { dr::ranges::local(t) } -> std::convertible_to<std::any>;
    +
    }
    +
    Definition: ranges.hpp:242
    +
    + + + + diff --git a/doxygen/conceptdr_1_1remote__contiguous__iterator.html b/doxygen/conceptdr_1_1remote__contiguous__iterator.html new file mode 100644 index 0000000000..1df08f1d5b --- /dev/null +++ b/doxygen/conceptdr_1_1remote__contiguous__iterator.html @@ -0,0 +1,93 @@ + + + + + + + +Distributed Ranges: dr::remote_contiguous_iterator Concept Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::remote_contiguous_iterator Concept Reference
    +
    +
    +

    Concept definition

    +
    template<typename I>
    + +
    std::random_access_iterator<I> && requires(I &iter) {
    +
    dr::ranges::rank(iter);
    +
    { dr::ranges::local(iter) } -> std::contiguous_iterator;
    +
    }
    +
    Definition: concepts.hpp:24
    +
    + + + + diff --git a/doxygen/conceptdr_1_1remote__contiguous__range.html b/doxygen/conceptdr_1_1remote__contiguous__range.html new file mode 100644 index 0000000000..af9ebcb366 --- /dev/null +++ b/doxygen/conceptdr_1_1remote__contiguous__range.html @@ -0,0 +1,93 @@ + + + + + + + +Distributed Ranges: dr::remote_contiguous_range Concept Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::remote_contiguous_range Concept Reference
    +
    +
    +

    Concept definition

    +
    template<typename R>
    + +
    remote_range<R> && rng::random_access_range<R> && requires(R &r) {
    +
    { dr::ranges::local(r) } -> rng::contiguous_range;
    +
    }
    +
    Definition: concepts.hpp:36
    +
    Definition: concepts.hpp:16
    +
    + + + + diff --git a/doxygen/conceptdr_1_1remote__iterator.html b/doxygen/conceptdr_1_1remote__iterator.html new file mode 100644 index 0000000000..0f041999a8 --- /dev/null +++ b/doxygen/conceptdr_1_1remote__iterator.html @@ -0,0 +1,90 @@ + + + + + + + +Distributed Ranges: dr::remote_iterator Concept Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::remote_iterator Concept Reference
    +
    +
    +

    Concept definition

    +
    template<typename I>
    + +
    std::forward_iterator<I> && requires(I &iter) { dr::ranges::rank(iter); }
    +
    Definition: concepts.hpp:12
    +
    + + + + diff --git a/doxygen/conceptdr_1_1remote__range.html b/doxygen/conceptdr_1_1remote__range.html new file mode 100644 index 0000000000..29233c5e1f --- /dev/null +++ b/doxygen/conceptdr_1_1remote__range.html @@ -0,0 +1,90 @@ + + + + + + + +Distributed Ranges: dr::remote_range Concept Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::remote_range Concept Reference
    +
    +
    +

    Concept definition

    +
    template<typename R>
    +
    concept dr::remote_range =
    +
    rng::forward_range<R> && requires(R &r) { dr::ranges::rank(r); }
    +
    Definition: concepts.hpp:16
    +
    + + + + diff --git a/doxygen/conceptdr_1_1sp_1_1____detail_1_1is__syclmemcopyable.html b/doxygen/conceptdr_1_1sp_1_1____detail_1_1is__syclmemcopyable.html new file mode 100644 index 0000000000..1a68ef41bd --- /dev/null +++ b/doxygen/conceptdr_1_1sp_1_1____detail_1_1is__syclmemcopyable.html @@ -0,0 +1,90 @@ + + + + + + + +Distributed Ranges: dr::sp::__detail::is_syclmemcopyable Concept Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::sp::__detail::is_syclmemcopyable Concept Reference
    +
    +
    +

    Concept definition

    +
    template<typename Src, typename Dest>
    +
    concept dr::sp::__detail::is_syclmemcopyable = std::is_same_v<std::remove_const_t<Src>, Dest> &&
    +
    std::is_trivially_copyable_v<Dest>
    +
    Definition: detail.hpp:21
    +
    + + + + diff --git a/doxygen/conceptdr_1_1sp_1_1____detail_1_1sycl__device__selector.html b/doxygen/conceptdr_1_1sp_1_1____detail_1_1sycl__device__selector.html new file mode 100644 index 0000000000..6fc78ea436 --- /dev/null +++ b/doxygen/conceptdr_1_1sp_1_1____detail_1_1sycl__device__selector.html @@ -0,0 +1,91 @@ + + + + + + + +Distributed Ranges: dr::sp::__detail::sycl_device_selector Concept Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::sp::__detail::sycl_device_selector Concept Reference
    +
    +
    +

    Concept definition

    +
    template<typename T>
    +
    concept dr::sp::__detail::sycl_device_selector = requires(T &t, const sycl::device &device) {
    +
    { t(device) } -> std::convertible_to<int>;
    +
    }
    + +
    + + + + diff --git a/doxygen/concepts.html b/doxygen/concepts.html new file mode 100644 index 0000000000..b73c9af540 --- /dev/null +++ b/doxygen/concepts.html @@ -0,0 +1,116 @@ + + + + + + + +Distributed Ranges: Concepts + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Concepts
    +
    +
    +
    Here is a list of all documented concepts with brief descriptions:
    +
    + + + + diff --git a/doxygen/concepts_8hpp_source.html b/doxygen/concepts_8hpp_source.html new file mode 100644 index 0000000000..a4428f0249 --- /dev/null +++ b/doxygen/concepts_8hpp_source.html @@ -0,0 +1,152 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/concepts/concepts.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    concepts.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <dr/detail/ranges.hpp>
    +
    8
    +
    9namespace dr {
    +
    10
    +
    11template <typename I>
    + +
    13 std::forward_iterator<I> && requires(I &iter) { dr::ranges::rank(iter); };
    +
    14
    +
    15template <typename R>
    +
    16concept remote_range =
    +
    17 rng::forward_range<R> && requires(R &r) { dr::ranges::rank(r); };
    +
    18
    +
    19template <typename R>
    + +
    21 rng::forward_range<R> && requires(R &r) { dr::ranges::segments(r); };
    +
    22
    +
    23template <typename I>
    + +
    25 std::random_access_iterator<I> && requires(I &iter) {
    +
    26 dr::ranges::rank(iter);
    +
    27 { dr::ranges::local(iter) } -> std::contiguous_iterator;
    +
    28 };
    +
    29
    +
    30template <typename I>
    +
    31concept distributed_iterator = std::forward_iterator<I> && requires(I &iter) {
    +
    32 dr::ranges::segments(iter);
    +
    33};
    +
    34
    +
    35template <typename R>
    + +
    37 remote_range<R> && rng::random_access_range<R> && requires(R &r) {
    +
    38 { dr::ranges::local(r) } -> rng::contiguous_range;
    +
    39 };
    +
    40
    +
    41template <typename R>
    + +
    43 distributed_range<R> && rng::random_access_range<R> &&
    +
    44 requires(R &r) {
    +
    45 { dr::ranges::segments(r) } -> rng::random_access_range;
    +
    46 } &&
    + +
    48 rng::range_value_t<decltype(dr::ranges::segments(std::declval<R>()))>>;
    +
    49
    +
    50template <typename Iter>
    + +
    52 distributed_iterator<Iter> && rng::random_access_iterator<Iter> &&
    +
    53 requires(Iter &iter) {
    +
    54 { dr::ranges::segments(iter) } -> rng::random_access_range;
    +
    55 } &&
    +
    56 remote_contiguous_range<rng::range_value_t<decltype(dr::ranges::segments(
    +
    57 std::declval<Iter>()))>>;
    +
    58
    +
    59} // namespace dr
    +
    Definition: concepts.hpp:51
    +
    Definition: concepts.hpp:42
    +
    Definition: concepts.hpp:31
    +
    Definition: concepts.hpp:20
    +
    Definition: concepts.hpp:24
    +
    Definition: concepts.hpp:36
    +
    Definition: concepts.hpp:12
    +
    Definition: concepts.hpp:16
    +
    + + + + diff --git a/doxygen/containers_2detail_8hpp_source.html b/doxygen/containers_2detail_8hpp_source.html new file mode 100644 index 0000000000..53db167faa --- /dev/null +++ b/doxygen/containers_2detail_8hpp_source.html @@ -0,0 +1,113 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/containers/detail.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    detail.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <cmath>
    +
    8
    +
    9namespace dr::sp {
    +
    10
    +
    11namespace detail {
    +
    12
    +
    13// Factor n into 2 roughly equal factors
    +
    14// n = pq, p >= q
    +
    15inline std::tuple<std::size_t, std::size_t> factor(std::size_t n) {
    +
    16 std::size_t q = std::sqrt(n);
    +
    17
    +
    18 while (q > 1 && n / q != static_cast<double>(n) / q) {
    +
    19 q--;
    +
    20 }
    +
    21 std::size_t p = n / q;
    +
    22
    +
    23 return {p, q};
    +
    24}
    +
    25
    +
    26} // namespace detail
    +
    27
    +
    28} // namespace dr::sp
    +
    + + + + diff --git a/doxygen/coo__matrix_8hpp_source.html b/doxygen/coo__matrix_8hpp_source.html new file mode 100644 index 0000000000..dc51cf5cdc --- /dev/null +++ b/doxygen/coo__matrix_8hpp_source.html @@ -0,0 +1,259 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/util/coo_matrix.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    coo_matrix.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <dr/sp/containers/matrix_entry.hpp>
    +
    8#include <memory>
    +
    9#include <vector>
    +
    10
    +
    11namespace dr::sp {
    +
    12
    +
    13namespace __detail {
    +
    14
    +
    15template <typename T, typename I, typename Allocator = std::allocator<T>>
    + +
    17public:
    + +
    19 using scalar_type = T;
    +
    20 using index_type = I;
    +
    21 using size_type = std::size_t;
    +
    22 using difference_type = std::ptrdiff_t;
    +
    23
    +
    24 using allocator_type = Allocator;
    +
    25
    +
    26 using key_type = dr::index<I>;
    +
    27 using map_type = T;
    +
    28
    +
    29 using backend_allocator_type = typename std::allocator_traits<
    +
    30 allocator_type>::template rebind_alloc<value_type>;
    +
    31 using backend_type = std::vector<value_type, backend_allocator_type>;
    +
    32
    +
    33 using iterator = typename backend_type::iterator;
    +
    34 using const_iterator = typename backend_type::const_iterator;
    +
    35
    + + +
    38
    +
    39 using scalar_reference = T &;
    +
    40
    +
    41 coo_matrix(dr::index<I> shape) : shape_(shape) {}
    +
    42
    +
    43 dr::index<I> shape() const noexcept { return shape_; }
    +
    44
    +
    45 size_type size() const noexcept { return tuples_.size(); }
    +
    46
    +
    47 void reserve(size_type new_cap) { tuples_.reserve(new_cap); }
    +
    48
    +
    49 iterator begin() noexcept { return tuples_.begin(); }
    +
    50
    +
    51 const_iterator begin() const noexcept { return tuples_.begin(); }
    +
    52
    +
    53 iterator end() noexcept { return tuples_.end(); }
    +
    54
    +
    55 const_iterator end() const noexcept { return tuples_.end(); }
    +
    56
    +
    57 template <typename InputIt> void insert(InputIt first, InputIt last) {
    +
    58 for (auto iter = first; iter != last; ++iter) {
    +
    59 insert(*iter);
    +
    60 }
    +
    61 }
    +
    62
    +
    63 template <typename InputIt> void push_back(InputIt first, InputIt last) {
    +
    64 for (auto iter = first; iter != last; ++iter) {
    +
    65 push_back(*iter);
    +
    66 }
    +
    67 }
    +
    68
    +
    69 void push_back(const value_type &value) { tuples_.push_back(value); }
    +
    70
    +
    71 template <typename InputIt> void assign_tuples(InputIt first, InputIt last) {
    +
    72 tuples_.assign(first, last);
    +
    73 }
    +
    74
    +
    75 std::pair<iterator, bool> insert(value_type &&value) {
    +
    76 auto &&[insert_index, insert_value] = value;
    +
    77 for (auto iter = begin(); iter != end(); ++iter) {
    +
    78 auto &&[index, v] = *iter;
    +
    79 if (index == insert_index) {
    +
    80 return {iter, false};
    +
    81 }
    +
    82 }
    +
    83 tuples_.push_back(value);
    +
    84 return {--tuples_.end(), true};
    +
    85 }
    +
    86
    +
    87 std::pair<iterator, bool> insert(const value_type &value) {
    +
    88 auto &&[insert_index, insert_value] = value;
    +
    89 for (auto iter = begin(); iter != end(); ++iter) {
    +
    90 auto &&[index, v] = *iter;
    +
    91 if (index == insert_index) {
    +
    92 return {iter, false};
    +
    93 }
    +
    94 }
    +
    95 tuples_.push_back(value);
    +
    96 return {--tuples_.end(), true};
    +
    97 }
    +
    98
    +
    99 template <class M>
    +
    100 std::pair<iterator, bool> insert_or_assign(key_type k, M &&obj) {
    +
    101 for (auto iter = begin(); iter != end(); ++iter) {
    +
    102 auto &&[index, v] = *iter;
    +
    103 if (index == k) {
    +
    104 v = std::forward<M>(obj);
    +
    105 return {iter, false};
    +
    106 }
    +
    107 }
    +
    108 tuples_.push_back({k, std::forward<M>(obj)});
    +
    109 return {--tuples_.end(), true};
    +
    110 }
    +
    111
    +
    112 iterator find(key_type key) noexcept {
    +
    113 return std::find_if(begin(), end(), [&](auto &&v) {
    +
    114 auto &&[i, v_] = v;
    +
    115 return i == key;
    +
    116 });
    +
    117 }
    +
    118
    +
    119 const_iterator find(key_type key) const noexcept {
    +
    120 return std::find_if(begin(), end(), [&](auto &&v) {
    +
    121 auto &&[i, v_] = v;
    +
    122 return i == key;
    +
    123 });
    +
    124 }
    +
    125
    +
    126 void reshape(dr::index<I> shape) {
    +
    127 bool all_inside = true;
    +
    128 for (auto &&[index, v] : *this) {
    +
    129 auto &&[i, j] = index;
    +
    130 if (!(i < shape[0] && j < shape[1])) {
    +
    131 all_inside = false;
    +
    132 break;
    +
    133 }
    +
    134 }
    +
    135
    +
    136 if (all_inside) {
    +
    137 shape_ = shape;
    +
    138 return;
    +
    139 } else {
    +
    140 coo_matrix<T, I> new_tuples(shape);
    +
    141 for (auto &&[index, v] : *this) {
    +
    142 auto &&[i, j] = index;
    +
    143 if (i < shape[0] && j < shape[1]) {
    +
    144 new_tuples.insert({index, v});
    +
    145 }
    +
    146 }
    +
    147 shape_ = shape;
    +
    148 assign_tuples(new_tuples.begin(), new_tuples.end());
    +
    149 }
    +
    150 }
    +
    151
    +
    152 coo_matrix() = default;
    +
    153 ~coo_matrix() = default;
    +
    154 coo_matrix(const coo_matrix &) = default;
    +
    155 coo_matrix(coo_matrix &&) = default;
    +
    156 coo_matrix &operator=(const coo_matrix &) = default;
    +
    157 coo_matrix &operator=(coo_matrix &&) = default;
    +
    158
    +
    159 std::size_t nbytes() const noexcept {
    +
    160 return tuples_.size() * sizeof(value_type);
    +
    161 }
    +
    162
    +
    163private:
    +
    164 dr::index<I> shape_;
    +
    165 backend_type tuples_;
    +
    166};
    +
    167
    +
    168} // namespace __detail
    +
    169
    +
    170} // namespace dr::sp
    + +
    Definition: coo_matrix.hpp:16
    +
    Definition: matrix_entry.hpp:15
    +
    Definition: matrix_entry.hpp:112
    +
    + + + + diff --git a/doxygen/count_8hpp_source.html b/doxygen/count_8hpp_source.html new file mode 100644 index 0000000000..0a5e477e5c --- /dev/null +++ b/doxygen/count_8hpp_source.html @@ -0,0 +1,214 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/algorithms/count.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    count.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7namespace dr::mp::__detail {
    +
    8
    +
    9inline auto add_counts(rng::forward_range auto &&r) {
    +
    10 rng::range_difference_t<decltype(r)> zero{};
    +
    11
    +
    12 return std::accumulate(rng::begin(r), rng::end(r), zero);
    +
    13}
    +
    14
    +
    15inline auto count_if_local(rng::forward_range auto &&r, auto &&pred) {
    +
    16 if (mp::use_sycl()) {
    +
    17 dr::drlog.debug(" with DPL\n");
    +
    18#ifdef SYCL_LANGUAGE_VERSION
    +
    19 return std::count_if(mp::dpl_policy(),
    +
    20 dr::__detail::direct_iterator(rng::begin(r)),
    +
    21 dr::__detail::direct_iterator(rng::end(r)), pred);
    +
    22#else
    +
    23 assert(false);
    +
    24#endif
    +
    25 } else {
    +
    26 dr::drlog.debug(" with CPU\n");
    +
    27 return std::count_if(std::execution::par_unseq,
    +
    28 dr::__detail::direct_iterator(rng::begin(r)),
    +
    29 dr::__detail::direct_iterator(rng::end(r)), pred);
    +
    30 }
    +
    31}
    +
    32
    +
    33template <dr::distributed_range DR>
    +
    34auto count_if(std::size_t root, bool root_provided, DR &&dr, auto &&pred) {
    +
    35 using count_type = rng::range_difference_t<decltype(dr)>;
    +
    36 auto comm = mp::default_comm();
    +
    37
    +
    38 if (rng::empty(dr)) {
    +
    39 return count_type{};
    +
    40 }
    +
    41
    +
    42 dr::drlog.debug("Parallel count\n");
    +
    43
    +
    44 // Count within the local segments
    +
    45 auto count = [=](auto &&r) {
    +
    46 assert(rng::size(r) > 0);
    +
    47 return count_if_local(r, pred);
    +
    48 };
    +
    49 auto locals = rng::views::transform(local_segments(dr), count);
    +
    50 auto local = add_counts(locals);
    +
    51
    +
    52 std::vector<count_type> all(comm.size());
    +
    53 if (root_provided) {
    +
    54 // Everyone gathers to root, only root adds up the counts
    +
    55 comm.gather(local, std::span{all}, root);
    +
    56 if (root == comm.rank()) {
    +
    57 return add_counts(all);
    +
    58 } else {
    +
    59 return count_type{};
    +
    60 }
    +
    61 } else {
    +
    62 // Everyone gathers and everyone adds up the counts
    +
    63 comm.all_gather(local, all);
    +
    64 return add_counts(all);
    +
    65 }
    +
    66}
    +
    67
    +
    68} // namespace dr::mp::__detail
    +
    69
    +
    70namespace dr::mp {
    +
    71
    +
    72class count_fn_ {
    +
    73public:
    +
    74 template <typename T, dr::distributed_range DR>
    +
    75 auto operator()(std::size_t root, DR &&dr, const T &value) const {
    +
    76 auto pred = [=](auto &&v) { return v == value; };
    +
    77 return __detail::count_if(root, true, dr, pred);
    +
    78 }
    +
    79
    +
    80 template <typename T, dr::distributed_range DR>
    +
    81 auto operator()(DR &&dr, const T &value) const {
    +
    82 auto pred = [=](auto &&v) { return v == value; };
    +
    83 return __detail::count_if(0, false, dr, pred);
    +
    84 }
    +
    85
    +
    86 template <typename T, dr::distributed_iterator DI>
    +
    87 auto operator()(std::size_t root, DI first, DI last, const T &value) const {
    +
    88 auto pred = [=](auto &&v) { return v == value; };
    +
    89 return __detail::count_if(root, true, rng::subrange(first, last), pred);
    +
    90 }
    +
    91
    +
    92 template <typename T, dr::distributed_iterator DI>
    +
    93 auto operator()(DI first, DI last, const T &value) const {
    +
    94 auto pred = [=](auto &&v) { return v == value; };
    +
    95 return __detail::count_if(0, false, rng::subrange(first, last), pred);
    +
    96 }
    +
    97};
    +
    98
    +
    99inline constexpr count_fn_ count;
    +
    100
    + +
    102public:
    +
    103 template <dr::distributed_range DR>
    +
    104 auto operator()(std::size_t root, DR &&dr, auto &&pred) const {
    +
    105 return __detail::count_if(root, true, dr, pred);
    +
    106 }
    +
    107
    +
    108 template <dr::distributed_range DR>
    +
    109 auto operator()(DR &&dr, auto &&pred) const {
    +
    110 return __detail::count_if(0, false, dr, pred);
    +
    111 }
    +
    112
    +
    113 template <dr::distributed_iterator DI>
    +
    114 auto operator()(std::size_t root, DI first, DI last, auto &&pred) const {
    +
    115 return __detail::count_if(root, true, rng::subrange(first, last), pred);
    +
    116 }
    +
    117
    +
    118 template <dr::distributed_iterator DI>
    +
    119 auto operator()(DI first, DI last, auto &&pred) const {
    +
    120 return __detail::count_if(0, false, rng::subrange(first, last), pred);
    +
    121 }
    +
    122};
    +
    123
    +
    124inline constexpr count_if_fn_ count_if;
    +
    125
    +
    126}; // namespace dr::mp
    +
    Definition: onedpl_direct_iterator.hpp:15
    +
    Definition: count.hpp:72
    +
    Definition: count.hpp:101
    +
    + + + + diff --git a/doxygen/csr__matrix__view_8hpp_source.html b/doxygen/csr__matrix__view_8hpp_source.html new file mode 100644 index 0000000000..c8f8f773bc --- /dev/null +++ b/doxygen/csr__matrix__view_8hpp_source.html @@ -0,0 +1,316 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/views/csr_matrix_view.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    csr_matrix_view.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <dr/detail/index.hpp>
    +
    8#include <dr/sp/containers/matrix_entry.hpp>
    +
    9#include <iterator>
    +
    10
    +
    11namespace dr::sp {
    +
    12
    +
    13template <typename T, typename I, typename TIter, typename IIter>
    + +
    15public:
    +
    16 using size_type = std::size_t;
    +
    17 using difference_type = std::ptrdiff_t;
    +
    18
    +
    19 using scalar_type = std::iter_value_t<TIter>;
    +
    20 using scalar_reference = std::iter_reference_t<TIter>;
    +
    21
    +
    22 using index_type = I;
    +
    23
    + +
    25
    + +
    27
    +
    28 using iterator_category = std::random_access_iterator_tag;
    +
    29
    + + + +
    33
    +
    34 using key_type = dr::index<I>;
    +
    35
    +
    36 constexpr csr_matrix_view_accessor() noexcept = default;
    +
    37 constexpr ~csr_matrix_view_accessor() noexcept = default;
    + +
    39 const csr_matrix_view_accessor &) noexcept = default;
    +
    40 constexpr csr_matrix_view_accessor &
    +
    41 operator=(const csr_matrix_view_accessor &) noexcept = default;
    +
    42
    +
    43 constexpr csr_matrix_view_accessor(TIter values, IIter rowptr, IIter colind,
    +
    44 size_type idx, index_type row,
    +
    45 size_type row_dim) noexcept
    +
    46 : values_(values), rowptr_(rowptr), colind_(colind), idx_(idx), row_(row),
    +
    47 row_dim_(row_dim), idx_offset_(key_type{0, 0}) {
    +
    48 fast_forward_row();
    +
    49 }
    +
    50
    +
    51 constexpr csr_matrix_view_accessor(TIter values, IIter rowptr, IIter colind,
    +
    52 size_type idx, index_type row,
    +
    53 size_type row_dim,
    +
    54 key_type idx_offset) noexcept
    +
    55 : values_(values), rowptr_(rowptr), colind_(colind), idx_(idx), row_(row),
    +
    56 row_dim_(row_dim), idx_offset_(idx_offset) {
    +
    57 fast_forward_row();
    +
    58 }
    +
    59
    +
    60 // Given that `idx_` has just been advanced to an element
    +
    61 // possibly in a new row, advance `row_` to find the new row.
    +
    62 // That is:
    +
    63 // Advance `row_` until idx_ >= rowptr_[row_] && idx_ < rowptr_[row_+1]
    +
    64 void fast_forward_row() noexcept {
    +
    65 while (row_ < row_dim_ - 1 && idx_ >= rowptr_[row_ + 1]) {
    +
    66 row_++;
    +
    67 }
    +
    68 }
    +
    69
    +
    70 // Given that `idx_` has just been retreated to an element
    +
    71 // possibly in a previous row, retreat `row_` to find the new row.
    +
    72 // That is:
    +
    73 // Retreat `row_` until idx_ >= rowptr_[row_] && idx_ < rowptr_[row_+1]
    +
    74 void fast_backward_row() noexcept {
    +
    75 while (idx_ < rowptr_[row_]) {
    +
    76 row_--;
    +
    77 }
    +
    78 }
    +
    79
    +
    80 constexpr csr_matrix_view_accessor &
    +
    81 operator+=(difference_type offset) noexcept {
    +
    82 idx_ += offset;
    +
    83 if (offset < 0) {
    +
    84 fast_backward_row();
    +
    85 } else {
    +
    86 fast_forward_row();
    +
    87 }
    +
    88 return *this;
    +
    89 }
    +
    90
    +
    91 constexpr bool operator==(const iterator_accessor &other) const noexcept {
    +
    92 return idx_ == other.idx_;
    +
    93 }
    +
    94
    +
    95 constexpr difference_type
    +
    96 operator-(const iterator_accessor &other) const noexcept {
    +
    97 return difference_type(idx_) - difference_type(other.idx_);
    +
    98 }
    +
    99
    +
    100 constexpr bool operator<(const iterator_accessor &other) const noexcept {
    +
    101 return idx_ < other.idx_;
    +
    102 }
    +
    103
    +
    104 constexpr reference operator*() const noexcept {
    +
    105 return reference(
    +
    106 key_type(row_ + idx_offset_[0], colind_[idx_] + idx_offset_[1]),
    +
    107 values_[idx_]);
    +
    108 }
    +
    109
    +
    110private:
    +
    111 TIter values_;
    +
    112 IIter rowptr_;
    +
    113 IIter colind_;
    +
    114 size_type idx_;
    +
    115 index_type row_;
    +
    116 size_type row_dim_;
    +
    117 key_type idx_offset_;
    +
    118};
    +
    119
    +
    120template <typename T, typename I, typename TIter, typename IIter>
    + + +
    123
    +
    124template <typename T, typename I, typename TIter = T *, typename IIter = I *>
    + +
    126 : public rng::view_interface<csr_matrix_view<T, I, TIter, IIter>> {
    +
    127public:
    +
    128 using size_type = std::size_t;
    +
    129 using difference_type = std::ptrdiff_t;
    +
    130
    +
    131 using scalar_reference = std::iter_reference_t<TIter>;
    + +
    133
    +
    134 using scalar_type = T;
    +
    135 using index_type = I;
    +
    136
    +
    137 using key_type = dr::index<I>;
    +
    138 using map_type = T;
    +
    139
    + +
    141
    +
    142 csr_matrix_view(TIter values, IIter rowptr, IIter colind, key_type shape,
    +
    143 size_type nnz, size_type rank)
    +
    144 : values_(values), rowptr_(rowptr), colind_(colind), shape_(shape),
    +
    145 nnz_(nnz), rank_(rank), idx_offset_(key_type{0, 0}) {}
    +
    146
    +
    147 csr_matrix_view(TIter values, IIter rowptr, IIter colind, key_type shape,
    +
    148 size_type nnz, size_type rank, key_type idx_offset)
    +
    149 : values_(values), rowptr_(rowptr), colind_(colind), shape_(shape),
    +
    150 nnz_(nnz), rank_(rank), idx_offset_(idx_offset) {}
    +
    151
    +
    152 key_type shape() const noexcept { return shape_; }
    +
    153
    +
    154 size_type size() const noexcept { return nnz_; }
    +
    155
    +
    156 std::size_t rank() const { return rank_; }
    +
    157
    +
    158 iterator begin() const {
    +
    159 return iterator(values_, rowptr_, colind_, 0, 0, shape()[0], idx_offset_);
    +
    160 }
    +
    161
    +
    162 iterator end() const {
    +
    163 return iterator(values_, rowptr_, colind_, nnz_, shape()[0], shape()[0],
    +
    164 idx_offset_);
    +
    165 }
    +
    166
    +
    167 auto row(I row_index) const {
    +
    168 I first = rowptr_[row_index];
    +
    169 I last = rowptr_[row_index + 1];
    +
    170
    +
    171 TIter values = values_;
    +
    172 IIter colind = colind_;
    +
    173
    +
    174 auto row_elements = rng::views::iota(first, last);
    +
    175
    +
    176 return row_elements | rng::views::transform([=](auto idx) {
    +
    177 return reference(key_type(row_index, colind[idx]), values[idx]);
    +
    178 });
    +
    179 }
    +
    180
    +
    181 auto submatrix(key_type rows, key_type columns) const {
    +
    182 return rng::views::iota(rows[0], rows[1]) |
    +
    183 rng::views::transform([=, *this](auto &&row_index) {
    +
    184 return row(row_index) | rng::views::drop_while([=](auto &&e) {
    +
    185 auto &&[index, v] = e;
    +
    186 return index[1] < columns[0];
    +
    187 }) |
    +
    188 rng::views::take_while([=](auto &&e) {
    +
    189 auto &&[index, v] = e;
    +
    190 return index[1] < columns[1];
    +
    191 }) |
    +
    192 rng::views::transform([=](auto &&elem) {
    +
    193 auto &&[index, v] = elem;
    +
    194 auto &&[i, j] = index;
    +
    195 return reference(key_type(i - rows[0], j - columns[0]),
    +
    196 v);
    +
    197 });
    +
    198 }) |
    +
    199 rng::views::join;
    +
    200 }
    +
    201
    +
    202 auto values_data() const { return values_; }
    +
    203
    +
    204 auto rowptr_data() const { return rowptr_; }
    +
    205
    +
    206 auto colind_data() const { return colind_; }
    +
    207
    +
    208private:
    +
    209 TIter values_;
    +
    210 IIter rowptr_;
    +
    211 IIter colind_;
    +
    212
    +
    213 key_type shape_;
    +
    214 size_type nnz_;
    +
    215
    +
    216 size_type rank_;
    +
    217 key_type idx_offset_;
    +
    218};
    +
    219
    +
    220template <typename TIter, typename IIter, typename... Args>
    +
    221csr_matrix_view(TIter, IIter, IIter, Args &&...)
    +
    222 -> csr_matrix_view<std::iter_value_t<TIter>, std::iter_value_t<IIter>,
    +
    223 TIter, IIter>;
    +
    224
    +
    225} // namespace dr::sp
    + +
    Definition: iterator_adaptor.hpp:23
    +
    Definition: csr_matrix_view.hpp:14
    +
    Definition: csr_matrix_view.hpp:126
    +
    Definition: matrix_entry.hpp:15
    +
    Definition: matrix_entry.hpp:112
    +
    + + + + diff --git a/doxygen/dense__column__view_8hpp_source.html b/doxygen/dense__column__view_8hpp_source.html new file mode 100644 index 0000000000..589d9bed95 --- /dev/null +++ b/doxygen/dense__column__view_8hpp_source.html @@ -0,0 +1,202 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/views/dense_column_view.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dense_column_view.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <dr/detail/index.hpp>
    +
    8#include <dr/sp/containers/matrix_entry.hpp>
    +
    9#include <iterator>
    +
    10
    +
    11namespace dr::sp {
    +
    12template <typename T, typename Iter> class dense_matrix_column_accessor {
    +
    13public:
    +
    14 using size_type = std::size_t;
    +
    15 using difference_type = std::ptrdiff_t;
    +
    16
    +
    17 using scalar_value_type = std::iter_value_t<Iter>;
    +
    18 using scalar_reference = std::iter_reference_t<Iter>;
    +
    19
    + +
    21
    + +
    23
    +
    24 using iterator_category = std::random_access_iterator_tag;
    +
    25
    + + + +
    29
    +
    30 using key_type = dr::index<>;
    +
    31
    +
    32 constexpr dense_matrix_column_accessor() noexcept = default;
    +
    33 constexpr ~dense_matrix_column_accessor() noexcept = default;
    + +
    35 const dense_matrix_column_accessor &) noexcept = default;
    + +
    37 operator=(const dense_matrix_column_accessor &) noexcept = default;
    +
    38
    +
    39 constexpr dense_matrix_column_accessor(Iter data, std::size_t i,
    +
    40 std::size_t j, std::size_t ld) noexcept
    +
    41 : data_(data), i_(i), j_(j), ld_(ld) {}
    +
    42
    + +
    44 operator+=(difference_type offset) noexcept {
    +
    45 i_ += offset;
    +
    46 return *this;
    +
    47 }
    +
    48
    +
    49 constexpr bool operator==(const iterator_accessor &other) const noexcept {
    +
    50 return i_ == other.i_;
    +
    51 }
    +
    52
    +
    53 constexpr difference_type
    +
    54 operator-(const iterator_accessor &other) const noexcept {
    +
    55 return difference_type(i_) - difference_type(other.i_);
    +
    56 }
    +
    57
    +
    58 constexpr bool operator<(const iterator_accessor &other) const noexcept {
    +
    59 return i_ < other.i_;
    +
    60 }
    +
    61
    +
    62 constexpr reference operator*() const noexcept {
    +
    63 return reference(key_type({i_, j_}), data_[i_ * ld_]);
    +
    64 }
    +
    65
    +
    66private:
    +
    67 size_type i_, j_;
    +
    68 size_type ld_;
    +
    69
    +
    70 Iter data_;
    +
    71};
    +
    72
    +
    73template <typename T, typename Iter>
    + + +
    76
    +
    77template <typename T, typename Iter> class dense_matrix_column_view {
    +
    78public:
    +
    79 using size_type = std::size_t;
    +
    80 using difference_type = std::ptrdiff_t;
    +
    81
    +
    82 using scalar_reference = std::iter_reference_t<Iter>;
    +
    83
    +
    84 using key_type = dr::index<>;
    +
    85 using map_type = T;
    +
    86
    + +
    88
    +
    89 dense_matrix_column_view(Iter data, size_type column_idx, size_type size,
    +
    90 size_type ld)
    +
    91 : data_(data), column_idx_(column_idx), size_(size), ld_(ld) {}
    +
    92
    +
    93 scalar_reference operator[](size_type idx) { return data_[idx * ld_]; }
    +
    94
    +
    95 iterator begin() const { return iterator(data_, 0, column_idx_, ld_); }
    +
    96
    +
    97 iterator end() const { return iterator(data_, size_, column_idx_, ld_); }
    +
    98
    +
    99 size_type size() const noexcept { return size_; }
    +
    100
    +
    101 Iter data_;
    +
    102 size_type column_idx_;
    +
    103 size_type size_;
    +
    104 size_type ld_;
    +
    105};
    +
    106
    +
    107template <std::random_access_iterator Iter>
    +
    108dense_matrix_column_view(Iter, std::size_t, std::size_t, std::size_t)
    + +
    110
    +
    111} // namespace dr::sp
    +
    Definition: index.hpp:34
    +
    Definition: iterator_adaptor.hpp:23
    +
    Definition: dense_column_view.hpp:12
    +
    Definition: dense_column_view.hpp:77
    +
    Definition: matrix_entry.hpp:15
    +
    Definition: matrix_entry.hpp:112
    +
    + + + + diff --git a/doxygen/dense__matrix_8hpp_source.html b/doxygen/dense__matrix_8hpp_source.html new file mode 100644 index 0000000000..a8f13eb09d --- /dev/null +++ b/doxygen/dense__matrix_8hpp_source.html @@ -0,0 +1,232 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/containers/sequential/dense_matrix.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dense_matrix.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <iterator>
    +
    8
    +
    9#include <dr/detail/index.hpp>
    +
    10#include <dr/detail/iterator_adaptor.hpp>
    +
    11#include <dr/sp/containers/matrix_entry.hpp>
    +
    12#include <dr/sp/views/dense_column_view.hpp>
    +
    13#include <dr/sp/views/dense_matrix_iterator.hpp>
    +
    14#include <dr/sp/views/dense_row_view.hpp>
    +
    15
    +
    16namespace dr::sp {
    +
    17
    +
    18template <typename T, typename Allocator = std::allocator<T>>
    + +
    20public:
    +
    21 using size_type = std::size_t;
    +
    22 using difference_type = std::ptrdiff_t;
    +
    23
    +
    24 using allocator_type = Allocator;
    +
    25
    +
    26 using scalar_pointer = typename std::allocator_traits<Allocator>::pointer;
    +
    27
    +
    28 using scalar_reference = std::iter_reference_t<scalar_pointer>;
    + +
    30
    +
    31 using key_type = dr::index<>;
    +
    32 using map_type = T;
    +
    33
    + +
    35
    + +
    37 : allocator_(Allocator()), shape_(shape), ld_(shape[1]) {
    +
    38 data_ = allocator_.allocate(shape_[0] * shape_[1]);
    +
    39 }
    +
    40
    +
    41 dense_matrix(key_type shape, std::size_t ld)
    +
    42 requires(std::is_default_constructible_v<Allocator>)
    +
    43 : allocator_(Allocator()), shape_(shape), ld_(ld) {
    +
    44 data_ = allocator_.allocate(shape_[0] * ld_);
    +
    45 }
    +
    46
    +
    47 dense_matrix(key_type shape, std::size_t ld, const Allocator &alloc)
    +
    48 : allocator_(alloc), shape_(shape), ld_(ld) {
    +
    49 data_ = allocator_.allocate(shape_[0] * ld_);
    +
    50 }
    +
    51
    + +
    53 : allocator_(other.allocator_), data_(other.data_), shape_(other.shape_),
    +
    54 ld_(other.ld_) {
    +
    55 other.null_data_();
    +
    56 }
    +
    57
    +
    58 dense_matrix &operator=(dense_matrix &&other) {
    +
    59 deallocate_storage_();
    +
    60 allocator_ = other.allocator_;
    +
    61 data_ = other.data_;
    +
    62 shape_ = other.shape_;
    +
    63 ld_ = other.ld_;
    +
    64
    +
    65 other.null_data_();
    +
    66 }
    +
    67
    +
    68 dense_matrix(const dense_matrix &other) = delete;
    +
    69 dense_matrix &operator=(const dense_matrix &other) = delete;
    +
    70
    +
    71 ~dense_matrix() { deallocate_storage_(); }
    +
    72
    +
    73 key_type shape() const noexcept { return shape_; }
    +
    74
    +
    75 size_type size() const noexcept { return shape()[0] * shape()[1]; }
    +
    76
    +
    77 scalar_reference operator[](key_type idx) const {
    +
    78 return data_[idx[0] * ld_ + idx[1]];
    +
    79 }
    +
    80
    +
    81 iterator begin() const {
    +
    82 return iterator(data_, key_type{0, 0}, shape_, ld_);
    +
    83 }
    +
    84
    +
    85 iterator end() const {
    +
    86 return iterator(data_, key_type{shape_[0], 0}, shape_, ld_);
    +
    87 }
    +
    88
    +
    89 auto row(size_type row_index) const {
    +
    90 // return dense_matrix_row_view(data_ + row_index * ld_, row_index,
    +
    91 // shape()[1]);
    +
    92 auto row_elements = rng::views::iota(size_type(0), size_type(shape()[1]));
    +
    93 scalar_pointer data = data_ + row_index * ld_;
    +
    94
    +
    95 return row_elements | rng::views::transform([=](auto column_index) {
    +
    96 return reference(key_type(row_index, column_index),
    +
    97 data[column_index]);
    +
    98 });
    +
    99 }
    +
    100
    +
    101 auto column(size_type column_index) const {
    +
    102 // return dense_matrix_column_view(data_ + column_index, column_index,
    +
    103 // shape()[0], ld_);
    +
    104 auto column_elements =
    +
    105 rng::views::iota(size_type(0), size_type(shape()[0]));
    +
    106 scalar_pointer data = data_ + column_index;
    +
    107 size_type ld = ld_;
    +
    108
    +
    109 return column_elements | rng::views::transform([=](auto row_index) {
    +
    110 return reference(key_type(row_index, column_index),
    +
    111 data[row_index * ld]);
    +
    112 });
    +
    113 }
    +
    114
    +
    115 scalar_pointer data() const { return data_; }
    +
    116
    +
    117 size_type ld() const { return ld_; }
    +
    118
    +
    119 /*
    +
    120 auto local() const {
    +
    121 }
    +
    122 */
    +
    123
    +
    124private:
    +
    125 void deallocate_storage_() {
    +
    126 if (data_ != nullptr) {
    +
    127 allocator_.deallocate(data_, shape_[0] * ld_);
    +
    128 }
    +
    129 }
    +
    130
    +
    131 void null_data_() {
    +
    132 data_ = nullptr;
    +
    133 shape_ = {0, 0};
    +
    134 ld_ = 0;
    +
    135 }
    +
    136
    +
    137 allocator_type allocator_;
    +
    138 scalar_pointer data_;
    +
    139 key_type shape_;
    +
    140 size_type ld_;
    +
    141};
    +
    142
    +
    143} // namespace dr::sp
    +
    Definition: index.hpp:34
    +
    Definition: iterator_adaptor.hpp:23
    +
    Definition: dense_matrix.hpp:19
    +
    Definition: matrix_entry.hpp:112
    +
    + + + + diff --git a/doxygen/dense__matrix__iterator_8hpp_source.html b/doxygen/dense__matrix__iterator_8hpp_source.html new file mode 100644 index 0000000000..2de9689f66 --- /dev/null +++ b/doxygen/dense__matrix__iterator_8hpp_source.html @@ -0,0 +1,199 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/views/dense_matrix_iterator.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dense_matrix_iterator.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <iterator>
    +
    8
    +
    9#include <dr/detail/index.hpp>
    +
    10#include <dr/detail/iterator_adaptor.hpp>
    +
    11#include <dr/sp/containers/matrix_entry.hpp>
    +
    12#include <dr/sp/views/dense_column_view.hpp>
    +
    13#include <dr/sp/views/dense_row_view.hpp>
    +
    14
    +
    15namespace dr::sp {
    +
    16
    +
    17template <typename T, typename Iter> class dense_matrix_accessor {
    +
    18public:
    +
    19 using size_type = std::size_t;
    +
    20 using difference_type = std::ptrdiff_t;
    +
    21
    +
    22 using scalar_type = std::iter_value_t<Iter>;
    +
    23 using scalar_reference = std::iter_reference_t<Iter>;
    +
    24
    + +
    26
    + +
    28
    +
    29 using iterator_category = std::random_access_iterator_tag;
    +
    30
    + + + +
    34
    +
    35 using key_type = dr::index<>;
    +
    36
    +
    37 constexpr dense_matrix_accessor() noexcept = default;
    +
    38 constexpr ~dense_matrix_accessor() noexcept = default;
    +
    39 constexpr dense_matrix_accessor(const dense_matrix_accessor &) noexcept =
    +
    40 default;
    +
    41 constexpr dense_matrix_accessor &
    +
    42 operator=(const dense_matrix_accessor &) noexcept = default;
    +
    43
    +
    44 constexpr dense_matrix_accessor(Iter data, key_type idx,
    +
    45 key_type matrix_shape, size_type ld) noexcept
    +
    46 : data_(data), idx_(idx), matrix_shape_(matrix_shape), ld_(ld),
    +
    47 idx_offset_({0, 0}) {}
    +
    48
    +
    49 constexpr dense_matrix_accessor(Iter data, key_type idx, key_type idx_offset,
    +
    50 key_type matrix_shape, size_type ld) noexcept
    +
    51 : data_(data), idx_(idx), matrix_shape_(matrix_shape), ld_(ld),
    +
    52 idx_offset_(idx_offset) {}
    +
    53
    +
    54 constexpr dense_matrix_accessor &operator+=(difference_type offset) noexcept {
    +
    55 size_type new_idx = get_global_idx() + offset;
    +
    56 idx_ = {new_idx / matrix_shape_[1], new_idx % matrix_shape_[1]};
    +
    57
    +
    58 return *this;
    +
    59 }
    +
    60
    +
    61 constexpr bool operator==(const iterator_accessor &other) const noexcept {
    +
    62 return idx_ == other.idx_;
    +
    63 }
    +
    64
    +
    65 constexpr difference_type
    +
    66 operator-(const iterator_accessor &other) const noexcept {
    +
    67 return difference_type(get_global_idx()) - other.get_global_idx();
    +
    68 }
    +
    69
    +
    70 constexpr bool operator<(const iterator_accessor &other) const noexcept {
    +
    71 if (idx_[0] < other.idx_[0]) {
    +
    72 return true;
    +
    73 } else if (idx_[0] == other.idx_[0]) {
    +
    74 return idx_[1] < other.idx_[1];
    +
    75 } else {
    +
    76 return false;
    +
    77 }
    +
    78 }
    +
    79
    +
    80 constexpr reference operator*() const noexcept {
    +
    81 return reference(
    +
    82 key_type(idx_[0] + idx_offset_[0], idx_[1] + idx_offset_[1]),
    +
    83 data_[idx_[0] * ld_ + idx_[1]]);
    +
    84 }
    +
    85
    +
    86 Iter data() const noexcept { return data_; }
    +
    87
    +
    88private:
    +
    89 size_type get_global_idx() const noexcept {
    +
    90 return idx_[0] * matrix_shape_[1] + idx_[1];
    +
    91 }
    +
    92
    +
    93private:
    +
    94 Iter data_;
    +
    95 key_type idx_;
    +
    96 key_type matrix_shape_;
    +
    97 size_type ld_;
    +
    98
    +
    99 key_type idx_offset_;
    +
    100};
    +
    101
    +
    102template <typename T, typename Iter>
    + + +
    105
    +
    106template <typename T, typename Iter>
    + +
    108
    +
    109} // namespace dr::sp
    +
    Definition: index.hpp:34
    +
    Definition: iterator_adaptor.hpp:23
    +
    Definition: dense_matrix_iterator.hpp:17
    +
    Definition: matrix_entry.hpp:15
    +
    Definition: matrix_entry.hpp:112
    +
    + + + + diff --git a/doxygen/dense__matrix__view_8hpp_source.html b/doxygen/dense__matrix__view_8hpp_source.html new file mode 100644 index 0000000000..03c4455741 --- /dev/null +++ b/doxygen/dense__matrix__view_8hpp_source.html @@ -0,0 +1,214 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/views/dense_matrix_view.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dense_matrix_view.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <iterator>
    +
    8
    +
    9#include <dr/detail/index.hpp>
    +
    10#include <dr/detail/iterator_adaptor.hpp>
    +
    11#include <dr/sp/containers/matrix_entry.hpp>
    +
    12#include <dr/sp/containers/sequential/dense_matrix.hpp>
    +
    13#include <dr/sp/views/dense_column_view.hpp>
    +
    14#include <dr/sp/views/dense_matrix_iterator.hpp>
    +
    15#include <dr/sp/views/dense_row_view.hpp>
    +
    16
    +
    17namespace dr::sp {
    +
    18
    +
    19template <typename T, typename Iter = T *>
    + +
    21 : public rng::view_interface<dense_matrix_view<T, Iter>> {
    +
    22public:
    +
    23 using size_type = std::size_t;
    +
    24 using difference_type = std::ptrdiff_t;
    +
    25
    +
    26 using scalar_reference = std::iter_reference_t<Iter>;
    + +
    28
    +
    29 using key_type = dr::index<>;
    +
    30 using map_type = T;
    +
    31
    + +
    33
    +
    34 dense_matrix_view(Iter data, key_type shape, size_type ld, size_type rank)
    +
    35 : data_(data), shape_(shape), idx_offset_(key_type{0, 0}), ld_(ld),
    +
    36 rank_(rank) {}
    +
    37
    +
    38 dense_matrix_view(Iter data, key_type shape, key_type idx_offset,
    +
    39 size_type ld, size_type rank)
    +
    40 : data_(data), shape_(shape), idx_offset_(idx_offset), ld_(ld),
    +
    41 rank_(rank) {}
    +
    42
    +
    43 template <typename Allocator>
    +
    44 requires(std::is_same_v<typename std::allocator_traits<Allocator>::pointer,
    +
    45 Iter>)
    + +
    47 : data_(m.data()), shape_(m.shape()), idx_offset_(key_type{0, 0}),
    +
    48 ld_(m.ld()), rank_(0) {}
    +
    49
    +
    50 key_type shape() const noexcept { return shape_; }
    +
    51
    +
    52 size_type size() const noexcept { return shape()[0] * shape()[1]; }
    +
    53
    +
    54 scalar_reference operator[](key_type idx) const {
    +
    55 return data_[idx[0] * ld_ + idx[1]];
    +
    56 }
    +
    57
    +
    58 iterator begin() const {
    +
    59 return iterator(data_, key_type{0, 0}, idx_offset_, shape_, ld_);
    +
    60 }
    +
    61
    +
    62 iterator end() const {
    +
    63 return iterator(data_, key_type{shape_[0], 0}, idx_offset_, shape_, ld_);
    +
    64 }
    +
    65
    +
    66 auto row(size_type row_index) const {
    +
    67 // return dense_matrix_row_view(data_ + row_index * ld_, row_index,
    +
    68 // shape()[1]);
    +
    69 auto row_elements = rng::views::iota(size_type(0), size_type(shape()[1]));
    +
    70 Iter data = data_ + row_index * ld_;
    +
    71
    +
    72 return row_elements | rng::views::transform([=](auto column_index) {
    +
    73 return reference(key_type(row_index, column_index),
    +
    74 data[column_index]);
    +
    75 });
    +
    76 }
    +
    77
    +
    78 auto column(size_type column_index) const {
    +
    79 // return dense_matrix_column_view(data_ + column_index, column_index,
    +
    80 // shape()[0], ld_);
    +
    81 auto column_elements =
    +
    82 rng::views::iota(size_type(0), size_type(shape()[0]));
    +
    83 Iter data = data_ + column_index;
    +
    84 size_type ld = ld_;
    +
    85
    +
    86 return column_elements | rng::views::transform([=](auto row_index) {
    +
    87 return reference(key_type(row_index, column_index),
    +
    88 data[row_index * ld]);
    +
    89 });
    +
    90 }
    +
    91
    +
    92 Iter data() const { return data_; }
    +
    93
    +
    94 std::size_t rank() const { return rank_; }
    +
    95
    +
    96 size_type ld() const { return ld_; }
    +
    97
    +
    98 auto local() const {
    +
    99 auto local_data = __detail::local(data_);
    + +
    101 local_data, shape_, idx_offset_, ld(), rank());
    +
    102 }
    +
    103
    +
    104private:
    +
    105 Iter data_;
    +
    106 key_type shape_;
    +
    107 key_type idx_offset_;
    +
    108 size_type ld_;
    +
    109 size_type rank_;
    +
    110};
    +
    111
    +
    112template <std::random_access_iterator Iter>
    +
    113dense_matrix_view(Iter, dr::index<>, std::size_t)
    + +
    115
    +
    116template <std::random_access_iterator Iter>
    + + +
    119
    +
    120template <typename T, typename Allocator>
    + + +
    123
    +
    124} // namespace dr::sp
    +
    Definition: index.hpp:34
    +
    Definition: iterator_adaptor.hpp:23
    +
    Definition: dense_matrix_view.hpp:21
    +
    Definition: dense_matrix.hpp:19
    +
    Definition: matrix_entry.hpp:112
    +
    + + + + diff --git a/doxygen/dense__row__view_8hpp_source.html b/doxygen/dense__row__view_8hpp_source.html new file mode 100644 index 0000000000..1ca2a39125 --- /dev/null +++ b/doxygen/dense__row__view_8hpp_source.html @@ -0,0 +1,200 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/views/dense_row_view.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dense_row_view.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <dr/detail/index.hpp>
    +
    8#include <dr/detail/iterator_adaptor.hpp>
    +
    9#include <dr/sp/containers/matrix_entry.hpp>
    +
    10#include <iterator>
    +
    11
    +
    12namespace dr::sp {
    +
    13template <typename T, typename Iter> class dense_matrix_row_accessor {
    +
    14public:
    +
    15 using size_type = std::size_t;
    +
    16 using difference_type = std::ptrdiff_t;
    +
    17
    +
    18 using scalar_value_type = std::iter_value_t<Iter>;
    +
    19 using scalar_reference = std::iter_reference_t<Iter>;
    +
    20
    + +
    22
    + +
    24
    +
    25 using iterator_category = std::random_access_iterator_tag;
    +
    26
    + + + +
    30
    +
    31 using key_type = dr::index<>;
    +
    32
    +
    33 constexpr dense_matrix_row_accessor() noexcept = default;
    +
    34 constexpr ~dense_matrix_row_accessor() noexcept = default;
    + +
    36 const dense_matrix_row_accessor &) noexcept = default;
    + +
    38 operator=(const dense_matrix_row_accessor &) noexcept = default;
    +
    39
    +
    40 constexpr dense_matrix_row_accessor(Iter data, std::size_t i,
    +
    41 std::size_t j) noexcept
    +
    42 : data_(data), i_(i), j_(j) {}
    +
    43
    + +
    45 operator+=(difference_type offset) noexcept {
    +
    46 j_ += offset;
    +
    47 return *this;
    +
    48 }
    +
    49
    +
    50 constexpr bool operator==(const iterator_accessor &other) const noexcept {
    +
    51 return j_ == other.j_;
    +
    52 }
    +
    53
    +
    54 constexpr difference_type
    +
    55 operator-(const iterator_accessor &other) const noexcept {
    +
    56 return difference_type(j_) - difference_type(other.j_);
    +
    57 }
    +
    58
    +
    59 constexpr bool operator<(const iterator_accessor &other) const noexcept {
    +
    60 return j_ < other.j_;
    +
    61 }
    +
    62
    +
    63 constexpr reference operator*() const noexcept {
    +
    64 return reference(key_type({i_, j_}), data_[j_]);
    +
    65 }
    +
    66
    +
    67private:
    +
    68 size_type i_, j_;
    +
    69
    +
    70 Iter data_;
    +
    71};
    +
    72
    +
    73template <typename T, typename Iter>
    + + +
    76
    +
    77template <typename T, typename Iter> class dense_matrix_row_view {
    +
    78public:
    +
    79 using size_type = std::size_t;
    +
    80 using difference_type = std::ptrdiff_t;
    +
    81
    +
    82 using scalar_reference = std::iter_reference_t<Iter>;
    +
    83
    +
    84 using key_type = dr::index<>;
    +
    85 using map_type = T;
    +
    86
    + +
    88
    +
    89 dense_matrix_row_view(Iter data, size_type row_idx, size_type size)
    +
    90 : data_(data), row_idx_(row_idx), size_(size) {}
    +
    91
    +
    92 scalar_reference operator[](size_type idx) { return data_[idx]; }
    +
    93
    +
    94 iterator begin() const { return iterator(data_, row_idx_, 0); }
    +
    95
    +
    96 iterator end() const { return iterator(data_, row_idx_, size_); }
    +
    97
    +
    98 size_type size() const noexcept { return size_; }
    +
    99
    +
    100 Iter data_;
    +
    101 size_type row_idx_;
    +
    102 size_type size_;
    +
    103};
    +
    104
    +
    105template <std::random_access_iterator Iter>
    +
    106dense_matrix_row_view(Iter, std::size_t, std::size_t)
    + +
    108
    +
    109} // namespace dr::sp
    +
    Definition: index.hpp:34
    +
    Definition: iterator_adaptor.hpp:23
    +
    Definition: dense_row_view.hpp:13
    +
    Definition: dense_row_view.hpp:77
    +
    Definition: matrix_entry.hpp:15
    +
    Definition: matrix_entry.hpp:112
    +
    + + + + diff --git a/doxygen/detail_2enumerate_8hpp_source.html b/doxygen/detail_2enumerate_8hpp_source.html new file mode 100644 index 0000000000..22bedec798 --- /dev/null +++ b/doxygen/detail_2enumerate_8hpp_source.html @@ -0,0 +1,149 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/detail/enumerate.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    enumerate.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <dr/detail/ranges_shim.hpp>
    +
    8
    +
    9namespace dr {
    +
    10
    +
    11namespace __detail {
    +
    12
    +
    13namespace {
    +
    14
    +
    15template <rng::range R> struct range_size {
    +
    16 using type = std::size_t;
    +
    17};
    +
    18
    +
    19template <rng::sized_range R> struct range_size<R> {
    +
    20 using type = rng::range_size_t<R>;
    +
    21};
    +
    22
    +
    23template <rng::range R> using range_size_t = typename range_size<R>::type;
    +
    24
    +
    25} // namespace
    +
    26
    + +
    28public:
    +
    29 template <rng::viewable_range R> auto operator()(R &&r) const {
    +
    30 using S = range_size_t<R>;
    +
    31 // NOTE: This line only necessary due to bug in range-v3 where views
    +
    32 // have non-weakly-incrementable size types. (Standard mandates
    +
    33 // size type must be weakly incrementable.)
    +
    34 using W = std::conditional_t<std::weakly_incrementable<S>, S, std::size_t>;
    +
    35 if constexpr (rng::sized_range<R>) {
    +
    36 return rng::views::zip(rng::views::iota(W{0}, W{rng::size(r)}),
    +
    37 std::forward<R>(r));
    +
    38 } else {
    +
    39 return rng::views::zip(rng::views::iota(W{0}), std::forward<R>(r));
    +
    40 }
    +
    41 }
    +
    42
    +
    43 template <rng::viewable_range R>
    +
    44 friend auto operator|(R &&r, const enumerate_adapter_closure &closure) {
    +
    45 return closure(std::forward<R>(r));
    +
    46 }
    +
    47};
    +
    48
    + +
    50public:
    +
    51 template <rng::viewable_range R> constexpr auto operator()(R &&r) const {
    +
    52 return enumerate_adapter_closure{}(std::forward<R>(r));
    +
    53 }
    +
    54
    +
    55 inline auto enumerate() const { return enumerate_adapter_closure{}; }
    +
    56};
    +
    57
    +
    58inline constexpr auto enumerate = enumerate_fn_{};
    +
    59
    +
    60} // namespace __detail
    +
    61
    +
    62} // namespace dr
    +
    Definition: enumerate.hpp:27
    +
    Definition: enumerate.hpp:49
    +
    + + + + diff --git a/doxygen/detail_8hpp_source.html b/doxygen/detail_8hpp_source.html new file mode 100644 index 0000000000..c942aa7dfb --- /dev/null +++ b/doxygen/detail_8hpp_source.html @@ -0,0 +1,176 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/detail.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    detail.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <dr/detail/ranges.hpp>
    +
    8#include <dr/detail/sycl_utils.hpp>
    +
    9#include <dr/sp/device_ptr.hpp>
    +
    10#include <dr/sp/init.hpp>
    +
    11#include <iterator>
    +
    12#include <sycl/sycl.hpp>
    +
    13
    +
    14namespace dr::sp {
    +
    15
    +
    16namespace __detail {
    +
    17
    +
    18inline constexpr auto local = dr::ranges::__detail::local;
    +
    19
    +
    20template <typename Src, typename Dest>
    +
    21concept is_syclmemcopyable = std::is_same_v<std::remove_const_t<Src>, Dest> &&
    +
    22 std::is_trivially_copyable_v<Dest>;
    +
    23
    +
    24template <std::contiguous_iterator Iter>
    +
    25sycl::usm::alloc get_pointer_type(Iter iter) {
    +
    26 return sycl::get_pointer_type(std::to_address(iter), sp::context());
    +
    27}
    +
    28
    +
    29template <typename T> sycl::usm::alloc get_pointer_type(sp::device_ptr<T> ptr) {
    +
    30 return sycl::get_pointer_type(ptr.get_raw_pointer(), sp::context());
    +
    31}
    +
    32
    +
    33template <std::contiguous_iterator Iter>
    +
    34sycl::device get_pointer_device(Iter iter) {
    +
    35 return sycl::get_pointer_device(std::to_address(iter), sp::context());
    +
    36}
    +
    37
    +
    38template <typename T> sycl::device get_pointer_device(sp::device_ptr<T> ptr) {
    +
    39 return sycl::get_pointer_device(ptr.get_raw_pointer(), sp::context());
    +
    40}
    +
    41
    +
    42template <typename InputIt> sycl::queue &get_queue_for_pointer(InputIt iter) {
    +
    43 if (get_pointer_type(iter) == sycl::usm::alloc::device) {
    +
    44 auto device = get_pointer_device(iter);
    +
    45 return __detail::queue(device);
    +
    46 } else {
    +
    47 return default_queue();
    +
    48 }
    +
    49}
    +
    50
    +
    51template <typename InputIt, typename OutputIt>
    +
    52sycl::queue &get_queue_for_pointers(InputIt iter, OutputIt iter2) {
    +
    53 if (get_pointer_type(iter) == sycl::usm::alloc::device) {
    +
    54 auto device = get_pointer_device(iter);
    +
    55 return __detail::queue(device);
    +
    56 } else if (get_pointer_type(iter2) == sycl::usm::alloc::device) {
    +
    57 auto device = get_pointer_device(iter2);
    +
    58 return __detail::queue(device);
    +
    59 } else {
    +
    60 return default_queue();
    +
    61 }
    +
    62}
    +
    63
    +
    64inline sycl::event combine_events(sycl::queue &q,
    +
    65 const std::vector<sycl::event> &events) {
    +
    66 auto e = q.submit([&](auto &&h) {
    +
    67 h.depends_on(events);
    +
    68 h.host_task([] {});
    +
    69 });
    +
    70
    +
    71 return e;
    +
    72}
    +
    73
    +
    74inline sycl::event combine_events(const std::vector<sycl::event> &events) {
    +
    75 auto &&q = __detail::queue(0);
    +
    76 return combine_events(q, events);
    +
    77}
    +
    78
    +
    79inline void wait(sycl::event &event) { event.wait(); }
    +
    80
    +
    81inline void wait(sycl::event &&event) { event.wait(); }
    +
    82
    +
    83inline void wait(const std::vector<sycl::event> &events) {
    +
    84 sycl::event::wait(events);
    +
    85}
    +
    86
    +
    87} // namespace __detail
    +
    88
    +
    89} // namespace dr::sp
    +
    Definition: device_ptr.hpp:17
    +
    Definition: detail.hpp:21
    +
    + + + + diff --git a/doxygen/device__ptr_8hpp_source.html b/doxygen/device__ptr_8hpp_source.html new file mode 100644 index 0000000000..02c1eb161c --- /dev/null +++ b/doxygen/device__ptr_8hpp_source.html @@ -0,0 +1,231 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/device_ptr.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    device_ptr.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <type_traits>
    +
    8
    +
    9#include <sycl/sycl.hpp>
    +
    10
    +
    11#include <dr/sp/device_ref.hpp>
    +
    12
    +
    13namespace dr::sp {
    +
    14
    +
    15template <typename T>
    +
    16 requires(std::is_trivially_copyable_v<T> || std::is_void_v<T>)
    + +
    18public:
    +
    19 using value_type = T;
    +
    20 using difference_type = std::ptrdiff_t;
    +
    21 using pointer = device_ptr<T>;
    + + +
    24 using iterator_category = std::random_access_iterator_tag;
    + +
    26
    +
    27 device_ptr(T *pointer) noexcept : pointer_(pointer) {}
    +
    28 device_ptr() noexcept = default;
    +
    29 ~device_ptr() noexcept = default;
    +
    30 device_ptr(const device_ptr &) noexcept = default;
    +
    31 device_ptr &operator=(const device_ptr &) noexcept = default;
    +
    32
    +
    33 device_ptr(std::nullptr_t) noexcept : pointer_(nullptr) {}
    +
    34
    +
    35 device_ptr &operator=(std::nullptr_t) noexcept {
    +
    36 pointer_ = nullptr;
    +
    37 return *this;
    +
    38 }
    +
    39
    +
    40 operator device_ptr<void>() const noexcept
    +
    41 requires(!std::is_void_v<T>)
    +
    42 {
    +
    43 return device_ptr<void>(reinterpret_cast<void *>(pointer_));
    +
    44 }
    +
    45
    +
    46 operator device_ptr<const void>() const noexcept
    +
    47 requires(!std::is_void_v<T>)
    +
    48 {
    +
    49 return device_ptr<const void>(reinterpret_cast<const void *>(pointer_));
    +
    50 }
    +
    51
    +
    52 operator const_pointer() const noexcept
    +
    53 requires(!std::is_const_v<T>)
    +
    54 {
    +
    55 return const_pointer(pointer_);
    +
    56 }
    +
    57
    +
    58 bool operator==(std::nullptr_t) const noexcept { return pointer_ == nullptr; }
    +
    59 bool operator!=(std::nullptr_t) const noexcept { return pointer_ != nullptr; }
    +
    60
    +
    61 bool operator==(const device_ptr &) const noexcept = default;
    +
    62 bool operator!=(const device_ptr &) const noexcept = default;
    +
    63
    +
    64 pointer operator+(difference_type offset) const noexcept {
    +
    65 return pointer(pointer_ + offset);
    +
    66 }
    +
    67 pointer operator-(difference_type offset) const noexcept {
    +
    68 return pointer(pointer_ - offset);
    +
    69 }
    +
    70
    +
    71 difference_type operator-(const_pointer other) const noexcept
    +
    72 requires(!std::is_const_v<T>)
    +
    73 {
    +
    74 return pointer_ - other.pointer_;
    +
    75 }
    +
    76 difference_type operator-(pointer other) const noexcept {
    +
    77 return pointer_ - other.pointer_;
    +
    78 }
    +
    79
    +
    80 bool operator<(const_pointer other) const noexcept {
    +
    81 return pointer_ < other.pointer_;
    +
    82 }
    +
    83 bool operator>(const_pointer other) const noexcept {
    +
    84 return pointer_ > other.pointer_;
    +
    85 }
    +
    86 bool operator<=(const_pointer other) const noexcept {
    +
    87 return pointer_ <= other.pointer_;
    +
    88 }
    +
    89 bool operator>=(const_pointer other) const noexcept {
    +
    90 return pointer_ >= other.pointer_;
    +
    91 }
    +
    92
    +
    93 pointer &operator++() noexcept {
    +
    94 ++pointer_;
    +
    95 return *this;
    +
    96 }
    +
    97
    +
    98 pointer operator++(int) noexcept {
    +
    99 pointer other = *this;
    +
    100 ++(*this);
    +
    101 return other;
    +
    102 }
    +
    103
    +
    104 pointer &operator--() noexcept {
    +
    105 --pointer_;
    +
    106 return *this;
    +
    107 }
    +
    108
    +
    109 pointer operator--(int) noexcept {
    +
    110 pointer other = *this;
    +
    111 --(*this);
    +
    112 return other;
    +
    113 }
    +
    114
    +
    115 pointer &operator+=(difference_type offset) noexcept {
    +
    116 pointer_ += offset;
    +
    117 return *this;
    +
    118 }
    +
    119
    +
    120 pointer &operator-=(difference_type offset) noexcept {
    +
    121 pointer_ -= offset;
    +
    122 return *this;
    +
    123 }
    +
    124
    +
    125 reference operator*() const noexcept { return reference(pointer_); }
    +
    126
    +
    127 reference operator[](difference_type offset) const noexcept {
    +
    128 return reference(*(*this + offset));
    +
    129 }
    +
    130
    +
    131 T *get_raw_pointer() const noexcept { return pointer_; }
    +
    132
    +
    133 friend pointer operator+(difference_type n, pointer iter) { return iter + n; }
    +
    134
    +
    135 T *local() const noexcept { return pointer_; }
    +
    136
    +
    137 friend const_pointer;
    +
    138 friend nonconst_pointer;
    +
    139
    +
    140private:
    +
    141 T *pointer_;
    +
    142};
    +
    143
    +
    144} // namespace dr::sp
    +
    Definition: device_ptr.hpp:17
    +
    Definition: device_ref.hpp:15
    +
    + + + + diff --git a/doxygen/device__ref_8hpp_source.html b/doxygen/device__ref_8hpp_source.html new file mode 100644 index 0000000000..1980d94d36 --- /dev/null +++ b/doxygen/device__ref_8hpp_source.html @@ -0,0 +1,146 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/device_ref.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    device_ref.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <dr/sp/init.hpp>
    +
    8#include <sycl/sycl.hpp>
    +
    9#include <type_traits>
    +
    10
    +
    11namespace dr::sp {
    +
    12
    +
    13template <typename T>
    +
    14 requires(std::is_trivially_copyable_v<T> || std::is_void_v<T>)
    + +
    16public:
    +
    17 device_ref() = delete;
    +
    18 ~device_ref() = default;
    +
    19 device_ref(const device_ref &) = default;
    +
    20
    +
    21 device_ref(T *pointer) : pointer_(pointer) {}
    +
    22
    +
    23 operator T() const {
    +
    24#ifdef __SYCL_DEVICE_ONLY__
    +
    25 return *pointer_;
    +
    26#else
    +
    27 auto &&q = dr::sp::__detail::default_queue();
    +
    28 char buffer[sizeof(T)] __attribute__((aligned(sizeof(T))));
    +
    29 q.memcpy(reinterpret_cast<T *>(buffer), pointer_, sizeof(T)).wait();
    +
    30 return *reinterpret_cast<T *>(buffer);
    +
    31#endif
    +
    32 }
    +
    33
    +
    34 device_ref operator=(const T &value) const
    +
    35 requires(!std::is_const_v<T>)
    +
    36 {
    +
    37#ifdef __SYCL_DEVICE_ONLY__
    +
    38 *pointer_ = value;
    +
    39#else
    +
    40 auto &&q = dr::sp::__detail::default_queue();
    +
    41 q.memcpy(pointer_, &value, sizeof(T)).wait();
    +
    42#endif
    +
    43 return *this;
    +
    44 }
    +
    45
    +
    46 device_ref operator=(const device_ref &other) const {
    +
    47#ifdef __SYCL_DEVICE_ONLY__
    +
    48 *pointer_ = *other.pointer_;
    +
    49#else
    +
    50 T value = other;
    +
    51 *this = value;
    +
    52#endif
    +
    53 return *this;
    +
    54 }
    +
    55
    +
    56private:
    +
    57 T *pointer_;
    +
    58};
    +
    59
    +
    60} // namespace dr::sp
    +
    Definition: device_ref.hpp:15
    +
    + + + + diff --git a/doxygen/device__span_8hpp_source.html b/doxygen/device__span_8hpp_source.html new file mode 100644 index 0000000000..36d86dffc0 --- /dev/null +++ b/doxygen/device__span_8hpp_source.html @@ -0,0 +1,185 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/device_span.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    device_span.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <dr/concepts/concepts.hpp>
    +
    8#include <dr/sp/span.hpp>
    +
    9#include <span>
    +
    10
    +
    11namespace dr::sp {
    +
    12
    +
    13// A `device_span` is simply a normal `std::span` that's
    +
    14// been decorated with an extra `rank()` function, showing
    +
    15// which rank its memory is located on.
    +
    16// (Thus fulfilling the `remote_range` concept.)
    +
    17/*
    +
    18template <class T,
    +
    19 std::size_t Extent = std::dynamic_extent>
    +
    20class device_span : public std::span<T, Extent> {
    +
    21public:
    +
    22 constexpr device_span() noexcept {}
    +
    23
    +
    24 template< class It >
    +
    25 explicit(Extent != std::dynamic_extent)
    +
    26 constexpr device_span(It first, std::size_t count, std::size_t rank)
    +
    27 : rank_(rank), std::span<T, Extent>(first, count) {}
    +
    28
    +
    29 template< class It, class End >
    +
    30 explicit(Extent != std::dynamic_extent)
    +
    31 constexpr device_span(It first, End last, std::size_t rank)
    +
    32 : rank_(rank), std::span<T, Extent>(first, last) {}
    +
    33
    +
    34 constexpr std::size_t rank() const noexcept {
    +
    35 return rank_;
    +
    36 }
    +
    37
    +
    38private:
    +
    39 std::size_t rank_;
    +
    40};
    +
    41*/
    +
    42
    +
    43template <typename T, typename Iter = T *>
    +
    44class device_span : public dr::sp::span<T, Iter> {
    +
    45public:
    +
    46 constexpr device_span() noexcept {}
    +
    47
    +
    48 using value_type = T;
    +
    49 using size_type = std::size_t;
    +
    50 using difference_type = std::size_t;
    +
    51 using reference = std::iter_reference_t<Iter>;
    +
    52
    +
    53 template <rng::random_access_range R>
    +
    54 requires(dr::remote_range<R>)
    +
    55 device_span(R &&r)
    +
    56 : dr::sp::span<T, Iter>(rng::begin(r), rng::size(r)),
    +
    57 rank_(dr::ranges::rank(r)) {}
    +
    58
    +
    59 template <rng::random_access_range R>
    +
    60 device_span(R &&r, std::size_t rank)
    +
    61 : dr::sp::span<T, Iter>(rng::begin(r), rng::size(r)), rank_(rank) {}
    +
    62
    +
    63 template <class It>
    +
    64 constexpr device_span(It first, std::size_t count, std::size_t rank)
    +
    65 : dr::sp::span<T, Iter>(first, count), rank_(rank) {}
    +
    66
    +
    67 template <class It, class End>
    +
    68 constexpr device_span(It first, End last, std::size_t rank)
    +
    69 : dr::sp::span<T, Iter>(first, last), rank_(rank) {}
    +
    70
    +
    71 constexpr std::size_t rank() const noexcept { return rank_; }
    +
    72
    +
    73 device_span first(std::size_t n) const {
    +
    74 return device_span(this->begin(), this->begin() + n, rank_);
    +
    75 }
    +
    76
    +
    77 device_span last(std::size_t n) const {
    +
    78 return device_span(this->end() - n, this->end(), rank_);
    +
    79 }
    +
    80
    +
    81 device_span subspan(std::size_t offset, std::size_t count) const {
    +
    82 return device_span(this->begin() + offset, this->begin() + offset + count,
    +
    83 rank_);
    +
    84 }
    +
    85
    +
    86private:
    +
    87 std::size_t rank_;
    +
    88};
    +
    89
    +
    90template <rng::random_access_range R>
    +
    91device_span(R &&) -> device_span<rng::range_value_t<R>, rng::iterator_t<R>>;
    +
    92
    +
    93template <rng::random_access_range R>
    +
    94device_span(R &&, std::size_t)
    +
    95 -> device_span<rng::range_value_t<R>, rng::iterator_t<R>>;
    +
    96
    +
    97} // namespace dr::sp
    +
    Definition: device_span.hpp:44
    +
    Definition: span.hpp:14
    +
    Definition: concepts.hpp:16
    +
    + + + + diff --git a/doxygen/device__vector_8hpp_source.html b/doxygen/device__vector_8hpp_source.html new file mode 100644 index 0000000000..a1d1b8c7f5 --- /dev/null +++ b/doxygen/device__vector_8hpp_source.html @@ -0,0 +1,124 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/device_vector.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    device_vector.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <dr/sp/allocators.hpp>
    +
    8#include <dr/sp/vector.hpp>
    +
    9
    +
    10namespace dr::sp {
    +
    11
    +
    12template <typename T, typename Allocator>
    +
    13class device_vector : public dr::sp::vector<T, Allocator> {
    +
    14public:
    +
    15 constexpr device_vector() noexcept {}
    +
    16
    + +
    18
    +
    19 using value_type = T;
    +
    20 using size_type = std::size_t;
    +
    21 using difference_type = std::size_t;
    +
    22
    +
    23 constexpr device_vector(size_type count, const Allocator &alloc,
    +
    24 size_type rank)
    +
    25 : base(count, alloc), rank_(rank) {}
    +
    26
    +
    27 constexpr std::size_t rank() const noexcept { return rank_; }
    +
    28
    +
    29private:
    +
    30 std::size_t rank_ = 0;
    +
    31};
    +
    32
    +
    33template <class Alloc>
    +
    34device_vector(std::size_t, const Alloc, std::size_t)
    + +
    36
    +
    37} // namespace dr::sp
    +
    Definition: device_vector.hpp:13
    +
    Definition: vector.hpp:14
    +
    + + + + diff --git a/doxygen/dir_323acea4eb551240b18003d2e88b28b7.html b/doxygen/dir_323acea4eb551240b18003d2e88b28b7.html new file mode 100644 index 0000000000..afffce1b99 --- /dev/null +++ b/doxygen/dir_323acea4eb551240b18003d2e88b28b7.html @@ -0,0 +1,104 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/views Directory Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    views Directory Reference
    +
    +
    +
    +Directory dependency graph for views:
    +
    +
    /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/views
    + + + + +
    + + + + + + + + +

    +Files

    file  iota.hpp [code]
     
    file  transform.hpp [code]
     
    file  views.hpp [code]
     
    +
    + + + + diff --git a/doxygen/dir_323acea4eb551240b18003d2e88b28b7_dep.map b/doxygen/dir_323acea4eb551240b18003d2e88b28b7_dep.map new file mode 100644 index 0000000000..8b476ba17a --- /dev/null +++ b/doxygen/dir_323acea4eb551240b18003d2e88b28b7_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/dir_323acea4eb551240b18003d2e88b28b7_dep.md5 b/doxygen/dir_323acea4eb551240b18003d2e88b28b7_dep.md5 new file mode 100644 index 0000000000..75d551edb1 --- /dev/null +++ b/doxygen/dir_323acea4eb551240b18003d2e88b28b7_dep.md5 @@ -0,0 +1 @@ +50763f347614f3c0d87ff0069e0d3ad5 \ No newline at end of file diff --git a/doxygen/dir_323acea4eb551240b18003d2e88b28b7_dep.png b/doxygen/dir_323acea4eb551240b18003d2e88b28b7_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..8c503fde4e3c88d77a1282fdb72660813b298fe2 GIT binary patch literal 1807 zcmV+q2k`ibP)NYn|R=H0dSj!0v`dUu2SAjFp(gv@xRL5*wn)#7W2^MVp#SYitw*5xJPO6DP1( z;%(`h%1Bu-`YgMThyUl@?sLxboM(P>4$tm?&j3OQA%qY@2qACBVArhuSln?XOiZaqt?g;cS zuBoDIXG%dq!F(;}P(I9?MO*9Xs1YMZL~A*RgsBispEI3KXWq3wX9@pNZe||-+k0eX zq+p4f$YNVI$B%!~d#t0QgK$$QFFaRFdg>e^CyeD^pM4g<(fXEBVV*sEmX&!+`R1}b zjvi~^R|QVCKmTmMcCS{Hv7@AvPygM?#E6IhjC5!y73LfJDv5}k#JYzbCM;|$X=&*^ z@cp&@+7&u}O>FGc0E}>GDHUdWTU)=7rcRCP*Dfkr(?g?fDHZ1ADN|@}KGo;FQ>U8x zwKEtreI-34GOam(1rBOChf-lK&b@~-?d?3X`L}d+xjA&G*6ZI)J(@K;xz*utv}!qr zQem3SW_FkEp}ce#GZNz{au#s^18V|3EWeQwm~Kc3Ok736REUJB5D8Nu5~fZ_JyRi4 z&lG(~JyRhvGZi9XDn!Cmh=i#S2~#J0QP0#|rIn{yUy-VbxQeDQ?RIaG0{pDn#m; z3Xz$qkefQpyY9?j$4f5;dKkLl_Xi+f+W+=}Ko3DzZt9sS`qFKf&u`m`HGN*6_nMne zF~K~V)2Ew({>$vSb6q_8%SV`XTLM#KB3ZR^87(cR0eHRg&&*Ap+1qyG6HdZSp}qSz zKY0HzvC$D+x^xMEZN*!dJu``@N#W$$7INete;?BOReFEs@)fJ7udn0dkB{`ex2t3a zX$vxliLrR?^TV~@<78t4mHYN{^ZEXRd+Eqo|wCPm4 zs(N3iEyy4^IGDzU6BHIaO7XTAX>4l4S+t3Y@>hoRewE&zX)>8uw0H?6J6{5zr>BSA zB`=fzo$q>W-`?KFzP*+FZu3?wmRQ2V#^QKxpQ5-fA~Ezt=RxrEU`Sd{ZH5n9wXbD%1?j1mZL|Hc)hNk==y0kEBj82#t`a}fjbPPd3LDV(0U^bh*w#l?+^Mf__V;X11nzfLL5fMa2PNw(| z&oFMBxlgIeX3NE9%f;jIP+s;5OBUsDtiFlR(60^2z50S~msx zZNMcKASx;v+oD{4@}o60Hk_cl`#*g2;RoE8zk>7U&jTo4FGG_Lfr07tXGAZ znwHKjx0uLVzLYr2B(`qZ%=SO-Wc27ULwBP-pzCE8Aa2@pKL4WI>#_g;(qPP(Fq}o3 z27Oqm*t56K>zuo6{mwsX)F>WYw}A)OZMeZv2Zruv=5QhVGZiBHGesX#&s2!aOod38 z3Xw1s;`h&)2Wx9MSi8vImmL;lX6l45>Y095fe*td3dd + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/vendor Directory Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    vendor Directory Reference
    +
    +
    +
    +Directory dependency graph for vendor:
    +
    +
    /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/vendor
    + + + + + +
    + + + + +

    +Directories

    directory  source_location
     
    +
    + + + + diff --git a/doxygen/dir_3e0780f9fd691ce6aa718969242efd7f_dep.map b/doxygen/dir_3e0780f9fd691ce6aa718969242efd7f_dep.map new file mode 100644 index 0000000000..be2c8c6913 --- /dev/null +++ b/doxygen/dir_3e0780f9fd691ce6aa718969242efd7f_dep.map @@ -0,0 +1,5 @@ + + + + + diff --git a/doxygen/dir_3e0780f9fd691ce6aa718969242efd7f_dep.md5 b/doxygen/dir_3e0780f9fd691ce6aa718969242efd7f_dep.md5 new file mode 100644 index 0000000000..7684441e9f --- /dev/null +++ b/doxygen/dir_3e0780f9fd691ce6aa718969242efd7f_dep.md5 @@ -0,0 +1 @@ +c3c586f85eda8097b6c88278176d8c36 \ No newline at end of file diff --git a/doxygen/dir_3e0780f9fd691ce6aa718969242efd7f_dep.png b/doxygen/dir_3e0780f9fd691ce6aa718969242efd7f_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..796f71a51cae68cca177fa863d66cd805efbd6ae GIT binary patch literal 4390 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 + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr Directory Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr Directory Reference
    +
    +
    +
    +Directory dependency graph for dr:
    +
    +
    /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr
    + + + + + + + + + +
    + + + + + + + + + + + + +

    +Directories

    directory  concepts
     
    directory  detail
     
    directory  mp
     
    directory  sp
     
    directory  views
     
    + + + + + +

    +Files

    file  mp.hpp [code]
     
    file  sp.hpp [code]
     
    +
    + + + + diff --git a/doxygen/dir_4c0da47f5488ee935cb4372f760579e2_dep.map b/doxygen/dir_4c0da47f5488ee935cb4372f760579e2_dep.map new file mode 100644 index 0000000000..5dd769d5be --- /dev/null +++ b/doxygen/dir_4c0da47f5488ee935cb4372f760579e2_dep.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/doxygen/dir_4c0da47f5488ee935cb4372f760579e2_dep.md5 b/doxygen/dir_4c0da47f5488ee935cb4372f760579e2_dep.md5 new file mode 100644 index 0000000000..a3b83fdbf0 --- /dev/null +++ b/doxygen/dir_4c0da47f5488ee935cb4372f760579e2_dep.md5 @@ -0,0 +1 @@ +718c391d081d0360f300a7fa27c0653e \ No newline at end of file diff --git a/doxygen/dir_4c0da47f5488ee935cb4372f760579e2_dep.png b/doxygen/dir_4c0da47f5488ee935cb4372f760579e2_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..d56f78b27615f420938e2256d4a098bddaa394e4 GIT binary patch literal 6049 zcmbt&by!qw*Y75jh5p(G_m8bnIErMpW-1SO<~WpK6PGjm;g_ROsN-uGJTx9S(Isjf&uc!v-G01{;-xE26lDSd=y-qJne~y@(VfTJ-$O3P@MmYkvazx6*JC>- zB|f`wDdGd*6RAu*A}cHgdIpC!f&m6oy~z}xy&E< z>2T%;Odp=k%!{s(o*D(X4P^LY!Tvv9wAk{xE4#b9*ll%l5x5~qZEbDFan=&cv;*F# zhb9LH@nz#Q4YxwJo3#jluBe>Fz(enrt;wm$&f(ssIak!f%!9wu^VMe=({(U$@vWzt znuABL^k0T`P+)`S(n`GkedW8U>pk3OG20Mwa&lW%R$Mq7-W3)U6&1CjiZ3A{p@(~x zrKw{Yr6iBKvZf4>Kz`{tpe4K8Ht`KIIXOwVO+{Yx#)u#o4s)TBpML@h7GfR#xy6?A zu6L~eE_N^zJX6e_a+DUPRsL{|yQql>KBDUL%Exj}wA|j+`-(!)}x=@dS@~4&CYH#0CjvLfj&YRTJ zxXYYN3LZdUjMVEW*BV%G?uU8X0R|lua>!1Dj81nY* zb9qNeat_*C*f5e4v_>S-7JVDu&1ybYD(Y>ySdye3;% zWj-7F%3AXflS2Keq9Sn+sYEa7N*_svVb^Z8S@dJ+>TbuJKCGvr4VCnNxj*!gwy?bX zoiAOqlAt#UR`N~5`gJv8dI1_>e={U}qS5N%(C{$R?O2!1fqCaE1>Dk7Uo5~RQ}~Or z0}CrF6Uz!eys`(9{$AR~B1G*&U7PPAE+A-qD*)5SnEaDqeQJ~#K>ofWGoKwM{`u3( z%xRAu6G4$Y#0O;>GL!ujeN^))7z@ZQt){fyupJy5i^xx@nQ_P~m{a^9LRiYxu0YOCce%<<&eTyErz>gsBy7!{ed{tT*mDtO*wS7SK{C8hf) zYE1o!KNNOjW3B}cB_)OB#AOgg^F)A<@X%!;(qF`XGf`}OZ@fZ^lu;t+^3pFakHr#Q z;FWKsr#D8kx)d{7@(#+$Nu;bC?Tu+6;dgk1>3}ykoC$Vyf6b|`#x)m~<@4$%ew&)g z>2DZaxEdWv#uz&Dyty!`F#P;{+8^oV+*QqyNh6ZY;}{WXzEb$pqr7ROrR-Zze?(}8 zpx+DCc9wx2{$KNZQc+7w7R0Vqkpn+C-V53%sQ%WU_e%tw$!j_FeB!98O}r%4^5kQ~ z;P|-y)Cu`dW-`XCZB7jaze_%H^5lr+<;3WyC?zO}W)RaLv|um`S!pnyk{&|$_xGP3 ztUT(w7C?VXfhe(1=s!7PkUtIwBQ3q{zp)}>1un>2lxS%tr=h7=$rSs)HZ%LX1p0h4K@D@@} z!pNcV2Hd19WIh35Iu0tVFUKAEZTK#N7_@-EM?|VHHV%$gk2c=F45x|@{)hkX>meI% zfXN%g{XAxHuRKZD*+?dK_Vr@^-HK+n3%xL--ztm8Le}Mu%t+VcrpHB14S|`hC1V^r ze<=02@k%aN?;hIpT?FTFxP3`K59DFbpBsax1!j%0D^QYnd3mK~XJ?nFmC4;3;I|>v zcH1loUG8?zZZw7$M>F{>z*{l%;K~ zAALz*?{BFDrUmLhaLrp2Q3Ff@9fn0F@5&dFKyxw+MalBe+o5Or%74qE=3 zk_HwK1(PH9xVU4H+oAcMr^%`2Xrra$lAh(Od`?dD$%&O!-jbuAPFYo8x1mQ3&FPzE z&}au~TioAzWx(e?jv?AAZ7Q$)_~A|P$5MfnwHMIM6G70q&BM1 zftO*(FQG`6HFF(39kb~vpNWH64tKuK05EeV4!LNZ2ue_p)p?sLGv5a39ovgQst6mk z9IFCC0cfr>RrJxiF`#ydMia1IU)p*BndrPcMs=AJe%G>Fok+02#{ma@w=ohYz# zaC9x{ikmwOYj9rHw4Jb>82!Qt4`2&)z2hZ86EVPS4o#GRL4;qhyHp4Qsi!g8U>8Obq2uVL$S z)$OcbvdqjT^zK*=<%=&_I)1WbgKBA0@LJ9h#+{~@td=DYOwN-ouK5S>ZkdN)&OA7( zb$iX>WJ8~Ej3Eb{&sVV4H#a*+{b8zEd%;1u^VvDg^t!rK^{JGxe7F30(Nv~DVmYn1 zUui9F{yq7Li^*5;Fk=~Nbmq5#zK)Q5#_ahv@^1sZsNKYO%sVF7abjsqoXk`_TvLGX zsWM=PGPE#aiHRl5MmPn<9Z?=_Y{mVeJCSCB2t4Νn`msJ)vkT#=(PepgAOg{Xp- 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 W>0CpY+@S|KcR*QQ9bPVL7V + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/algorithms Directory Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    algorithms Directory Reference
    +
    +
    +
    +Directory dependency graph for algorithms:
    +
    +
    /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/algorithms
    + + + + + +
    + + + + +

    +Directories

    directory  matrix
     
    + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Files

    file  algorithms.hpp [code]
     
    file  copy.hpp [code]
     
    file  equal.hpp [code]
     
    file  exclusive_scan.hpp [code]
     
    file  execution_policy.hpp [code]
     
    file  fill.hpp [code]
     
    file  for_each.hpp [code]
     
    file  inclusive_scan.hpp [code]
     
    file  iota.hpp [code]
     
    file  reduce.hpp [code]
     
    file  sort.hpp [code]
     
    file  transform.hpp [code]
     
    +
    + + + + diff --git a/doxygen/dir_67824480cd2296306bea79e091fd0853_dep.map b/doxygen/dir_67824480cd2296306bea79e091fd0853_dep.map new file mode 100644 index 0000000000..a37c70549d --- /dev/null +++ b/doxygen/dir_67824480cd2296306bea79e091fd0853_dep.map @@ -0,0 +1,5 @@ + + + + + diff --git a/doxygen/dir_67824480cd2296306bea79e091fd0853_dep.md5 b/doxygen/dir_67824480cd2296306bea79e091fd0853_dep.md5 new file mode 100644 index 0000000000..e85fcf5175 --- /dev/null +++ b/doxygen/dir_67824480cd2296306bea79e091fd0853_dep.md5 @@ -0,0 +1 @@ +4ebe4402274498ed5025a34da2df361a \ No newline at end of file diff --git a/doxygen/dir_67824480cd2296306bea79e091fd0853_dep.png b/doxygen/dir_67824480cd2296306bea79e091fd0853_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..d8e966b9cbd91f36c4597e7cfe84e7e55a2e1cd2 GIT binary patch literal 3833 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 + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/detail Directory Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    detail Directory Reference
    +
    +
    +
    +Directory dependency graph for detail:
    +
    +
    /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/detail
    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Files

    file  communicator.hpp [code]
     
    file  enumerate.hpp [code]
     
    file  format_shim.hpp [code]
     
    file  index.hpp [code]
     
    file  iterator_adaptor.hpp [code]
     
    file  logger.hpp [code]
     
    file  mdarray_shim.hpp [code]
     
    file  mdspan_shim.hpp [code]
     
    file  mdspan_utils.hpp [code]
     
    file  memory.hpp [code]
     
    file  normal_distributed_iterator.hpp [code]
     
    file  onedpl_direct_iterator.hpp [code]
     
    file  owning_view.hpp [code]
     
    file  ranges.hpp [code]
     
    file  ranges_shim.hpp [code]
     
    file  ranges_utils.hpp [code]
     
    file  remote_subrange.hpp [code]
     
    file  segments_tools.hpp [code]
     
    file  sycl_utils.hpp [code]
     
    file  tuple_utils.hpp [code]
     
    file  utils.hpp [code]
     
    file  view_detectors.hpp [code]
     
    +
    + + + + diff --git a/doxygen/dir_73601acfd5a2822dd473820b789b56e4_dep.map b/doxygen/dir_73601acfd5a2822dd473820b789b56e4_dep.map new file mode 100644 index 0000000000..4bd1d26b75 --- /dev/null +++ b/doxygen/dir_73601acfd5a2822dd473820b789b56e4_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/dir_73601acfd5a2822dd473820b789b56e4_dep.md5 b/doxygen/dir_73601acfd5a2822dd473820b789b56e4_dep.md5 new file mode 100644 index 0000000000..18da7fe4ec --- /dev/null +++ b/doxygen/dir_73601acfd5a2822dd473820b789b56e4_dep.md5 @@ -0,0 +1 @@ +2ceba209da8dc3e514d57db855e9b6d3 \ No newline at end of file diff --git a/doxygen/dir_73601acfd5a2822dd473820b789b56e4_dep.png b/doxygen/dir_73601acfd5a2822dd473820b789b56e4_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..52829297f8b45dec71c0120d801e6ee5b216655f GIT binary patch literal 1462 zcmV;n1xfmeP)nb|XE7a)WXLI@#*5JCtcgb+dqA!J3IIh6%L$Pomg z+Ef{y=bKHvuG8rf?72S2alKOiLsOnvYefJMMKSnX<9Ts!bli$%I@()IZbNUF6-~Xa z_WB1>lTE$>q?ok_@;u+{=N}MnDnMeIn~T=04AxnyBSaY#Amb=N#;H2Mok6dl^@{0} z2-c}OKzl#|GR~|3bvj)FT|%r~M|+Fpg}xNCF63>={QNxl(n4Hnz6gy*i=>nTSX^8* zzFwH0hq1A{aCCG;SJ%&oj(!_eUz}F3$Cja*L+FXha&-Oj6I!qSi0+;~jE{}s@8O{( zW!hRVV|V0RxY0kLitqpx1$g1RbI30!L15r^xVpNcyy65LHJT-5!guY)dxQr+UnwwXEsi`UKi`rv63*EBS zPw8%19Ze@GjHZ+990kZY3XpLWAmb=N#!-NbqW~Fa_Ge2{_eGMGb+or&==Q+(Qa1;i zLVF4^$Y<2iiGVZmAd?xP=D~?#t1X&2V@3z_x%u ztG6RdfNiZm;P-1iax`T#LPEoEG_TO=?a(2VakAf)Cda!{NmZ3)vbHCCfFYq_ayKcf zs!Dm=qeCd;Xnml9EU`Y2sXb8cHSfoSVq_jlldZkAU@AasV_SG4RC&b9tHWi*tXRNFTdoE^0H$~*1U_Nh_Ak^NAS)a@bz{_ zWJCzA{r_ptH(xiPw&oNrUTB1yixzG!T0EMYL(S=v#>WBvFW|$>4`47DjN4@K5Nfjl zO09WssINm^%_-E>p2gtsD6)?nMM`2k?%lhKwD;4Ib@&JplTx8K%tCLNg`-A;!ykWQ zeBAYGFQyFtLdO>=I7;)`Y=Ba0-p|(8p`eJz>u&@>t93$b+8z`AwIhnAV1hF5pIhU?wTYpeiVv_*^(rexiWoAJq6r=BY zFXrZEF+6k|I=%=!zjXrup7Yv>p`k&{%uE~WOiw?Avy(HP-LL_7?u>#jDUf?u7H6{o z=H?Y3EIb1HqV^y>GzcD^o=eueXJlsKqpWP?=48Wfvky{|6X53Vfj5Ig0RRc_CSkq9 zdiZbgHJ*i5pR7Ss(|Nq;>xuYxVz4VBQmNrtj4b!WR8^K4Cv-1e?lh-Ko3}qU3c%_o zbm^WLJ4XRBjsj#H%?B#T?&br@augurC_u)^KB4>MI*C{Y?SYJwWe*Gp+%88mHbt&6 z%MxI8Oe~^fV&!Pc?$G)`h0$lBc8&sM90kZY3XpLWAmb=N###M3Q0iy6r7l6#Uf*11 z1;}w+uhj3LOU-vl-506$`hp;sth575JCtcgb+dqA%qY@2qA0qAL@<#35>_m QWB>pF07*qoM6N<$f(PrgCjbBd literal 0 HcmV?d00001 diff --git a/doxygen/dir_807b56d834975cdfd9fb3d45ae6a652f.html b/doxygen/dir_807b56d834975cdfd9fb3d45ae6a652f.html new file mode 100644 index 0000000000..9f5b67893d --- /dev/null +++ b/doxygen/dir_807b56d834975cdfd9fb3d45ae6a652f.html @@ -0,0 +1,108 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/algorithms/matrix Directory Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    matrix Directory Reference
    +
    +
    +
    +Directory dependency graph for matrix:
    +
    +
    /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/algorithms/matrix
    + + + + +
    + + + + + + + + + + + + +

    +Files

    file  gemm.hpp [code]
     
    file  gemv.hpp [code]
     
    file  local_gemm.hpp [code]
     
    file  local_gemv.hpp [code]
     
    file  matrix_algorithms.hpp [code]
     
    +
    + + + + diff --git a/doxygen/dir_807b56d834975cdfd9fb3d45ae6a652f_dep.map b/doxygen/dir_807b56d834975cdfd9fb3d45ae6a652f_dep.map new file mode 100644 index 0000000000..155c5e975a --- /dev/null +++ b/doxygen/dir_807b56d834975cdfd9fb3d45ae6a652f_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/dir_807b56d834975cdfd9fb3d45ae6a652f_dep.md5 b/doxygen/dir_807b56d834975cdfd9fb3d45ae6a652f_dep.md5 new file mode 100644 index 0000000000..c75931b0f9 --- /dev/null +++ b/doxygen/dir_807b56d834975cdfd9fb3d45ae6a652f_dep.md5 @@ -0,0 +1 @@ +39bafce4407bead712fb1663f8ab6029 \ No newline at end of file diff --git a/doxygen/dir_807b56d834975cdfd9fb3d45ae6a652f_dep.png b/doxygen/dir_807b56d834975cdfd9fb3d45ae6a652f_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..1b4c04da25fbf0ef035ab821a5d1018a6679a4aa GIT binary patch literal 2545 zcmV)c(cWTUc0})wRyGv3l8t0KgdY-M(WN3kV!tZ=KAH16r3MSE!h_a%%si zeR)|as;lp7U7jv_CHzHb`!G=ZhPBVkIDlI>bM;zY6TMm!vqK5znMU8G6T=Az91XEZ zsP!aI7n9n;AJo)9EE3{&ex6a|xO?|5#3CU|OG}IzM`JLlgmb}EK2*lSyM)^a1duCK z@bGL008lEcAr=WyR8(l>$he``F+46VE>zcbBrz?VZ{e;I2Z%*NI62y*uWt`zWggO6 z|L1dO(ZAo@aC2z||6v30al8zDdUaQq=VV{R$Pq)~=F$q?-sp(Lgw?36tp)JpSiB|W z-{{x7C!8GZai^$AW0&5&>+1l3u3dZ}774LZwoJY3BUy*h*S7~;B@PJmAB=*6+ZxMV zmz;<`y}HBMsU=2_3P4d&AtL9`hDTc`_;hf?*3`}FWj%cO5Q`ShgLivZc)B@Z`qW9N zs;o4~I^~pHp<*xdQ~JAt?bx-K+1lE%3pv;Sey#iu27vu~{xXv*RP07xF|)I?XYs4n zu)^XBmXURgiN#{(8pyD&RDdzQTZb5>MR$#$pjXV%u%?8^0gCReCfQu0RD-m3#UpM8xL7FV#XX}j5{ zN$VTD-t^6v(T?FZHa74N2!db#0r=tAch9YpdH5ilon0_{&V1O~+QHYi4)@bA6>iSagIygG2e-{V@s8Ojj%N-olzuVXd;Nak>Q7#Y&P*YO_ z00x}b z_y+``_OHL5TfdD&g2I9Vjn^I@M*+au#RWx$1z_ySp6+&j9-LiVG}=70&;)rZrBj|mxvUcSBI*Y|Ds zc)8BTA9L7&4PoQ(h z_Lw?lA|_3az?``Y8Wfi_E*>$_k#KC;Oyexwkix>kk$v$3`t|LJe|7RgetsU-ZP?T( zeQBfD4G>bPbYFWf@3Hz00XBqeMJ)32Zejb*y`1%FD*hQB{YuwO6WW;kf7+6h67cIU z|AkUnjiX00u{CuILdL#p?6Az1$&Z!|96S`UA4VZN`ywRH&R8M)2*IO6j2)KQGWmpe z>GB3LvW^)$j8}%qC!9R-%8iGU#zzU~8A>?M=ye?q=)SL-7?xNh)GKGSh4Tz0oM$NE zJVOaLBW5=qPK=Kd&NGy7p3y7eQmJ&GuIHbLX`wBgXE+@#yODbxRaItq^L-=n_UQ<* z*gdaGv(^3VP2UY~ueSKTyqw#Wq6d>tH~@TiGz()x$0Pgl4a6>$ zB6`sRtW8S5j$M0k<$69WEG&?)W|g}By!i_uSEwLYsBq%sS=>|HMVxdg03c%O49uMu ziSc3K>N++80f4_JEEq6wFtRV@B5~~ojTkH~Es?S%4M&e=B7M(J>TTm%o#b`Xg~7!wkT?CcBAZ7Y#DBX+qI zSy>r6`+3K20Nx!x5dwkmx#g{$oRG448$O7BAK??nVeY(0`1K#C*L&ldS&WB2J(r55 zr6sJatTg6Rv9S@LMpdK!`_iQxgp3YEdk+c3A|c-C^Okz%1#Mhhbk7CTx1S$8JUmcd zR)#tA8aDBODKLvIyrE{zh`^g&yW!j~IjE3VRd0n*41@l>MybpubU6;y=3QV6i8LQVMqGQL`;o#_ql+D|)$?5!YcI*5MO_j zrBByp>&)p>NKE+qisEH%fS_l~NP|$qd4>|sGc+E~Gqi>C3?-arDB(O~v>PBog8hxv zwb^<+9{x(twMq<&(=FWFrxTamnY?GeL4gaLCOj}G7=b~-Ty{yGVHV@z#Bk^s&NGy7 zo}q;E3@;x-tFLfX8z9{3`00000NkvXX Hu0mjfQ`6zS literal 0 HcmV?d00001 diff --git a/doxygen/dir_85ef099189e791ae40d4c24671336591.html b/doxygen/dir_85ef099189e791ae40d4c24671336591.html new file mode 100644 index 0000000000..2ed70bc7f9 --- /dev/null +++ b/doxygen/dir_85ef099189e791ae40d4c24671336591.html @@ -0,0 +1,122 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp Directory Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    mp Directory Reference
    +
    +
    +
    +Directory dependency graph for mp:
    +
    +
    /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp
    + + + + + + + +
    + + + + + + + + +

    +Directories

    directory  algorithms
     
    directory  containers
     
    directory  views
     
    + + + + + + + + + + + + + +

    +Files

    file  alignment.hpp [code]
     
    file  allocator.hpp [code]
     
    file  common_support.hpp [code]
     
    file  global.hpp [code]
     
    file  halo.hpp [code]
     
    file  sycl_support.hpp [code]
     
    +
    + + + + diff --git a/doxygen/dir_85ef099189e791ae40d4c24671336591_dep.map b/doxygen/dir_85ef099189e791ae40d4c24671336591_dep.map new file mode 100644 index 0000000000..da4be2d42e --- /dev/null +++ b/doxygen/dir_85ef099189e791ae40d4c24671336591_dep.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/doxygen/dir_85ef099189e791ae40d4c24671336591_dep.md5 b/doxygen/dir_85ef099189e791ae40d4c24671336591_dep.md5 new file mode 100644 index 0000000000..b673125850 --- /dev/null +++ b/doxygen/dir_85ef099189e791ae40d4c24671336591_dep.md5 @@ -0,0 +1 @@ +012f4c9f89b317749bd776dd14c794a6 \ No newline at end of file diff --git a/doxygen/dir_85ef099189e791ae40d4c24671336591_dep.png b/doxygen/dir_85ef099189e791ae40d4c24671336591_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..2f5c737d2adbf37df7765708b14910fa2a0a48b7 GIT binary patch literal 5460 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 + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/containers Directory Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    containers Directory Reference
    +
    +
    +
    +Directory dependency graph for containers:
    +
    +
    /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/containers
    + + + + +
    + + + + + + + + + + + + +

    +Files

    file  distributed_mdarray.hpp [code]
     
    file  distributed_vector.hpp [code]
     
    file  distribution.hpp [code]
     
    file  segment.hpp [code]
     
    file  subrange.hpp [code]
     
    +
    + + + + diff --git a/doxygen/dir_8fe29de6e48ccf860dd86ed0735e8a6b_dep.map b/doxygen/dir_8fe29de6e48ccf860dd86ed0735e8a6b_dep.map new file mode 100644 index 0000000000..c021f05fdc --- /dev/null +++ b/doxygen/dir_8fe29de6e48ccf860dd86ed0735e8a6b_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/dir_8fe29de6e48ccf860dd86ed0735e8a6b_dep.md5 b/doxygen/dir_8fe29de6e48ccf860dd86ed0735e8a6b_dep.md5 new file mode 100644 index 0000000000..cdbb3551b3 --- /dev/null +++ b/doxygen/dir_8fe29de6e48ccf860dd86ed0735e8a6b_dep.md5 @@ -0,0 +1 @@ +79a6d814016b2a8fd318b8ba5c9c0923 \ No newline at end of file diff --git a/doxygen/dir_8fe29de6e48ccf860dd86ed0735e8a6b_dep.png b/doxygen/dir_8fe29de6e48ccf860dd86ed0735e8a6b_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..a125cded133a8626fe13260ce27528835139ec44 GIT binary patch literal 2156 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 PeE^L0%`i23PBDK0M~L)U literal 0 HcmV?d00001 diff --git a/doxygen/dir_93ccc0855ae179af1c425ecfb8e8a806.html b/doxygen/dir_93ccc0855ae179af1c425ecfb8e8a806.html new file mode 100644 index 0000000000..40bfa21767 --- /dev/null +++ b/doxygen/dir_93ccc0855ae179af1c425ecfb8e8a806.html @@ -0,0 +1,104 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/util Directory Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    util Directory Reference
    +
    +
    +
    +Directory dependency graph for util:
    +
    +
    /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/util
    + + + + +
    + + + + + + + + +

    +Files

    file  coo_matrix.hpp [code]
     
    file  generate_random.hpp [code]
     
    file  matrix_io.hpp [code]
     
    +
    + + + + diff --git a/doxygen/dir_93ccc0855ae179af1c425ecfb8e8a806_dep.map b/doxygen/dir_93ccc0855ae179af1c425ecfb8e8a806_dep.map new file mode 100644 index 0000000000..0e87f5f980 --- /dev/null +++ b/doxygen/dir_93ccc0855ae179af1c425ecfb8e8a806_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/dir_93ccc0855ae179af1c425ecfb8e8a806_dep.md5 b/doxygen/dir_93ccc0855ae179af1c425ecfb8e8a806_dep.md5 new file mode 100644 index 0000000000..13ca63892e --- /dev/null +++ b/doxygen/dir_93ccc0855ae179af1c425ecfb8e8a806_dep.md5 @@ -0,0 +1 @@ +81fab989c8c54d73170939f34da7aa38 \ No newline at end of file diff --git a/doxygen/dir_93ccc0855ae179af1c425ecfb8e8a806_dep.png b/doxygen/dir_93ccc0855ae179af1c425ecfb8e8a806_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..606a4b7887f8acff07861946bcee15232fe8bba7 GIT binary patch literal 1272 zcmV2*v;eV*r9N0Ks%k!~pH{=tLIq`!I0z z@+qy!Tr8#-0dKzEj`F8!eHtE;X+TWbp%>Q^Is>Fs#1_C8$vwpU

    zQ?ZNbpB zK}=6iBOLw2*v;e z<9dJ&3uZkakudm7_-&PF9RXHrDyBjq^>!o@K`Z&VHS6zr^|>0^>(AuJ?1+en ih=_=Yh=_=Y1p6E75ooZ#?J3Xz0000 + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/views Directory Reference + + + + + + + + + +

    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    views Directory Reference
    +
    +
    +
    +Directory dependency graph for views:
    +
    +
    /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/views
    + + + + +
    + + + + + + + + + + + + + + + + +

    +Files

    file  enumerate.hpp [code]
     
    file  mdspan_view.hpp [code]
     
    file  segmented.hpp [code]
     
    file  sliding.hpp [code]
     
    file  submdspan_view.hpp [code]
     
    file  views.hpp [code]
     
    file  zip.hpp [code]
     
    +
    + + + + diff --git a/doxygen/dir_99158c7dd822eb1a3c9b7f71ffee20be_dep.map b/doxygen/dir_99158c7dd822eb1a3c9b7f71ffee20be_dep.map new file mode 100644 index 0000000000..d439af1b00 --- /dev/null +++ b/doxygen/dir_99158c7dd822eb1a3c9b7f71ffee20be_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/dir_99158c7dd822eb1a3c9b7f71ffee20be_dep.md5 b/doxygen/dir_99158c7dd822eb1a3c9b7f71ffee20be_dep.md5 new file mode 100644 index 0000000000..0c2fea8be6 --- /dev/null +++ b/doxygen/dir_99158c7dd822eb1a3c9b7f71ffee20be_dep.md5 @@ -0,0 +1 @@ +898144a2124b4a914b1c69c711a83d97 \ No newline at end of file diff --git a/doxygen/dir_99158c7dd822eb1a3c9b7f71ffee20be_dep.png b/doxygen/dir_99158c7dd822eb1a3c9b7f71ffee20be_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..4b6ed5260b04c2a99d4b1b4ee0446a3197168c53 GIT binary patch literal 1909 zcmV-*2a5QKP)K2ngPm zzNw5`E*f^(eR%kPUM;)lJkNRNH|Mas|2?}Pgb+dqA%qY@2qAXzPfyRhz55D#7H2FUu+3i&zBlMGu6)zgGuY#! zr@u>yUZ=GwSes_1$z&>?8aZvnU}1{;WqX*e_8N+CJ_%DrBuo{NFcsoJ@&38l+1c}K zIfjI(5SN-8gT{;*6Ku;dBuo{t>2;>rY+iY<*IB}GM)b^VYimQVb7#kIx05h;7E=Pe zS-xyBjg1YgfBGrHLIQ}6GVsQp*ZTA+$lt}hIWZW5{CF&LIjyZNPP`KP7|~(g@o{AZ z#eXj4#Fyvz&y_1INQfhLb{wbA)$;1jd^WxG9G5S*TJuE0K25vGriPw#DwMvIS+uhrvPt(NZYZmau3L&JJ+`}+AYe!K@Q zEtiIOpu3$5ivE=Y2%q06Wg4UJipnNV~pCFnYn5;YaV-)Sr1O9qoad8Zx%XxNH!aF zC9t-(Ho^@7oH|?U)Md3VDS?T*NSG=z>Yf03d3kZ=n=WS$V_3+{R1pbNA*7zEB2v#3 zR-~S(A~G{oM8Z@N2~$NROcjwZ6~Z3%Oq;4EaPM7E;(kfhMBK%uFij>?@xAsR3dfO| zsUi+5fgP=?bkwO7#mC2&sAf5eFcj}pWd3m1<^_&h5Q?K_SJ|WT3r**jP+rC}Kq#4?$5z^vo326dUGi1-mgO&at|$q2VIF z-X1hIHUNE>+0M=mHvRH>WgQzHN$l>UXd*crWTxBSYCUgyrmi}e5; z|NI!C!T#L3bqj!k{9VM%h$d*Vo+W7uIr-(khV^>wQO{Itm@6_@Q&UsTsZ%F=?<*?Y zOTzpGgoGIS?eo-=KjA`MEv1JJbMj0Lk&#iX%gV%Jv5>gHNd1L6nwy&ds3BpC(K`fo0}VTwdcvn-b8-E9_s2ZVb0sifs%KI^?GN<#5U*V=BjglrcS3LeQ^eb z``-efr>BRv3-^)rgCF+WzNO_7hYpsqW9M!RhEO~`Cz88)3-$H&eD&2?bUGa~Wwh3=T!1;KP=a34~ku80bE^O zS+zQgg8W^4Q2PFWODsT8P%vrfOZdglo}jMwJY8MaIPt}C)@EgL{rYtP=FE+!{c1b! zzFkPt|CZDwV=_Bm{Y~$z1StRLL-ID~P=BG0n>TM_vD~J+y9pqt!5d`U3zM zlNZw7eih?gVa6vU;^n1d<%(s58z!@R*G^u4V?Q1q6Nc|X?Lg7XEI@d~)B!ig{{Nc> z6DD|K&f7ZZla&MS9klv8bx~TMPvxVX5)5A^tG?SK3B v?WTeH2qA + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/vendor/source_location Directory Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    source_location Directory Reference
    +
    +
    +
    +Directory dependency graph for source_location:
    +
    +
    /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/vendor/source_location
    + + + + +
    + + + + +

    +Files

    file  source_location.hpp [code]
     
    +
    + + + + diff --git a/doxygen/dir_a385eca21dc3d8045dcdc4e17916b108_dep.map b/doxygen/dir_a385eca21dc3d8045dcdc4e17916b108_dep.map new file mode 100644 index 0000000000..771f343e44 --- /dev/null +++ b/doxygen/dir_a385eca21dc3d8045dcdc4e17916b108_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/dir_a385eca21dc3d8045dcdc4e17916b108_dep.md5 b/doxygen/dir_a385eca21dc3d8045dcdc4e17916b108_dep.md5 new file mode 100644 index 0000000000..a9cedfe195 --- /dev/null +++ b/doxygen/dir_a385eca21dc3d8045dcdc4e17916b108_dep.md5 @@ -0,0 +1 @@ +40c4bd592a0462b6364399762012246b \ No newline at end of file diff --git a/doxygen/dir_a385eca21dc3d8045dcdc4e17916b108_dep.png b/doxygen/dir_a385eca21dc3d8045dcdc4e17916b108_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..13357934996b3f7ed86cdb8451aa8d673148b4a1 GIT binary patch literal 2824 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 Bcntsm literal 0 HcmV?d00001 diff --git a/doxygen/dir_b5fcc441902e4a79b0db31964533269a.html b/doxygen/dir_b5fcc441902e4a79b0db31964533269a.html new file mode 100644 index 0000000000..bd4384f6f0 --- /dev/null +++ b/doxygen/dir_b5fcc441902e4a79b0db31964533269a.html @@ -0,0 +1,126 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/algorithms Directory Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    algorithms Directory Reference
    +
    +
    +
    +Directory dependency graph for algorithms:
    +
    +
    /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/algorithms
    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Files

    file  copy.hpp [code]
     
    file  count.hpp [code]
     
    file  equal.hpp [code]
     
    file  exclusive_scan.hpp [code]
     
    file  fill.hpp [code]
     
    file  for_each.hpp [code]
     
    file  inclusive_exclusive_scan_impl.hpp [code]
     
    file  inclusive_scan.hpp [code]
     
    file  iota.hpp [code]
     
    file  md_for_each.hpp [code]
     
    file  reduce.hpp [code]
     
    file  sort.hpp [code]
     
    file  transform.hpp [code]
     
    file  transpose.hpp [code]
     
    +
    + + + + diff --git a/doxygen/dir_b5fcc441902e4a79b0db31964533269a_dep.map b/doxygen/dir_b5fcc441902e4a79b0db31964533269a_dep.map new file mode 100644 index 0000000000..138c006c71 --- /dev/null +++ b/doxygen/dir_b5fcc441902e4a79b0db31964533269a_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/dir_b5fcc441902e4a79b0db31964533269a_dep.md5 b/doxygen/dir_b5fcc441902e4a79b0db31964533269a_dep.md5 new file mode 100644 index 0000000000..f434ab1315 --- /dev/null +++ b/doxygen/dir_b5fcc441902e4a79b0db31964533269a_dep.md5 @@ -0,0 +1 @@ +2f49817f9043bab8eda0f3457b0286a7 \ No newline at end of file diff --git a/doxygen/dir_b5fcc441902e4a79b0db31964533269a_dep.png b/doxygen/dir_b5fcc441902e4a79b0db31964533269a_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..53c7f48ed9ee23fd3d17816e8dcea1df34cb7d73 GIT binary patch literal 2276 zcmZ9Oc{Cf$7QkbTEfnz@`&zU<#8R{>wh)O_X`Rv(wJQaC67-+>PmIM@Jty;I_8XMQGBTP;giO zc7a(Q(ME~yi9$)q+=A`7%Cel|;u~1s=P#kLY1+M+6ag=)ic@+lU-o!quk#16{;hAB z_O@nU!u32PtP(=tW2TfF@3|j0Qe~G853miiovA}SZGS3C^1+Uf8T=pOeM--gw`^o} zbR>XbT)}WCalBDcucoGUWg(m{JNqwJkmS_xFt|lI+KHa^^Oxq{!7`JEnMP1Gao4aL zGQs7)e51S##A0K7zGNT^ulg`n)^#;TWQ0J@H*U?F7y5B&Y;{=!TEeI$ZO-w#5u-l_jqQAYp z8#6U1yk;2KnYcxK+fZ!(Znj+?iUus*ZQKmq-xMQ%4~yIoOXOxS7?G1x(EV7isC^i^LnEZircsPEeQ1zL@`4&Kakcw|Hocc@iU zq;m1an>q(}J}+eue=|KD5?U*cgVDhFvv_AN zBaz#yPAvVXMY-o9_`GuFWXELhsCut1Cd;7m7OvdVK~FK?!@0$~(Sg`KDZ}6MGvfuU zm8K9GxO@PJah`}&3wNfy`+A#Lzn^6-l7?1A*xb&l5t&>Gbea9gq^@R9$g0l#uz{Y$ zM);{gC(m2fEXw;jT(~*mB2sH?Nsws?l=t~a# z!{ORBuDQ(6^aVeb1T5NRo<0iFrsbsM7zVHQB#7{LPD)8I!RN(-2E)jGgG0?!Dlvx` z;zygy$XrzXQ1h7`WvEwjl9saXy1KgSx+vs}{4IIP$mCYicm5|*j7u&Oce#NFi@POh zHV1g|yyzam%}QbCIy{Gzv~=hRV;VpK9DvAzfdv= zllnnTp$jrI5BEJ76QJMu)nE>eM_EuU0jtNEcT`wlVcEg1M_jiSlB1(I0NqxPZBQ=p z!YdFar|qeBfHMZ87_{f&INOl_sW{-Mg=brOPNbv`=vidfHQgNQT<^EV8rHxliTdB(N_xI<~&?uQPsMyO4)yqKLyWfH{c1-LSl@yI}Iz3=z-f<8{?axB* zQ3#96uXX&s3H=eVqv_J*60@4KUmZY=)YsR)RNK~xeAIkzjX*;H@bz`@{fY5$9uNqm zu5pO`w1Gm_R9@~aXP|y)xjqe{Sf?aeT;GE&$z4pU&KG?mXTpiuFnKG}OhOx=Cn7c3 zta;#YAi?AyqtL&(VW^0VbtyzTEBG)i05{Az1 zi|?ae=4VhwvP`hNQ?45|3l-e(zf$}|2h{vmiYqF*+c}O;8An|5?77ShAguZ3V>3~O ze1ae|?{FwsfXATd!O;7NW8C~2nQFr4hqy^<`w<5glZtmE1wvQ4A>rp9CU%_ZVUJA)sQ6zIrOo`SnT(hF*Jb zYi6t|g=Hu%xRz}Ly)uF$e(r`ob3Z9HU*+3(c8Ch5!F4qvw$|+$;v7HSXAOI4l*F#y zPqX3-@rA=54P&Q|QA>Xo;iFXph_wF}V(za0ofqnY1Dt7aPTj=F_oWnpqrD9d)-vb( zFlDsv^#Kj(c)jk33F%EXZY2o`q-AH1*EBU5tDie^2tNESuT7#)+zmq_k;wxC0~VNo r + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/views Directory Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    views Directory Reference
    +
    +
    +
    +Directory dependency graph for views:
    +
    +
    /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/views
    + + + + +
    + + + + + + + + + + + + + + + + + + +

    +Files

    file  csr_matrix_view.hpp [code]
     
    file  dense_column_view.hpp [code]
     
    file  dense_matrix_iterator.hpp [code]
     
    file  dense_matrix_view.hpp [code]
     
    file  dense_row_view.hpp [code]
     
    file  enumerate.hpp [code]
     
    file  standard_views.hpp [code]
     
    file  views.hpp [code]
     
    +
    + + + + diff --git a/doxygen/dir_cdec69c82820bd8c004958f42c86ecba_dep.map b/doxygen/dir_cdec69c82820bd8c004958f42c86ecba_dep.map new file mode 100644 index 0000000000..24ac837bde --- /dev/null +++ b/doxygen/dir_cdec69c82820bd8c004958f42c86ecba_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/dir_cdec69c82820bd8c004958f42c86ecba_dep.md5 b/doxygen/dir_cdec69c82820bd8c004958f42c86ecba_dep.md5 new file mode 100644 index 0000000000..c25e641c79 --- /dev/null +++ b/doxygen/dir_cdec69c82820bd8c004958f42c86ecba_dep.md5 @@ -0,0 +1 @@ +50de447871315c6b97543925bbba9324 \ No newline at end of file diff --git a/doxygen/dir_cdec69c82820bd8c004958f42c86ecba_dep.png b/doxygen/dir_cdec69c82820bd8c004958f42c86ecba_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..235fddd867d882f327b257eaf02b9275df157fb2 GIT binary patch literal 1947 zcmV;M2W0q(P)h5}T1?m8;5vVlg1LsbG*u z(m2N6qSYjAbPBsG6YVrj+SFRSG-_f*30Uj36RWsDG^Qrepw)mPAeZz_W}=99cl)B1 zaVwzlz}e&B|9Q9jJm;L}%x|8D-Tj|u03n1BLI@#*5JCtcgb+dqA#}w<$-!2ub&1t# zeY2xJ7K^2*qjsCkmM+J4j-E;mb~>Fgo8K#NKAHN1cKhtxv!laveD(EJXGiVb=Xj4| zf0I#Bu!?4;#bPNM89I7aM`4Nwr94c}&KinvKM7MuBupKVFg0R((U$0(oSYaX=a4Wp zqOsw^&>lT{1S&a)gsCHnzGvEOw)Fdb&l2j<&CDz-Jw(FfXod{*BPJ?>;-bRVwq>ur z!jGPv!~A*Kj2u3gap8}%al?8yj<##)Cd?l%c%JmxbEvLuq+n|?2M>JU(!Oiw4q{>_ za^hqqzx~}G$o=(F4wW2m(`dVfZo)JgjQINcVlWsP9x{UbwHsX8Cqzc^{JaX%>D}#M|ce}I)2M>3BJv@Y_#zr-V*yR*` z0Me4MuraJ%zX^a-rz%KGnMOh3Ux|*61)#33)}?=4Z4HBm3{iQM?Ta@j9W5(8a74*D zbTKopTxsFC>`XpCah&VduHkSvaX6e@X=!Qg^Usfu^3JBWX=%Ak$-#fHZR-}E&V0s= zqjnV@F}}fSwKga@hc0GjpFZBCXJqoyk{3C1`ZNIn0W4g!gv2RHt$k*seV_6&J9)Mo ze0+SdE`QCXT@Mt6X|Y&}_U+k$7D`|#scEF7rnTGNx37t}R^_WWBK7HFnHB#fVd{u3 z{$}3Kir>8M?jfi`W~Povm>MDVOdXMWrf?zkOdXM#sUs4mj!2j~B4O%?gsBnn=A@&5 zqI#yHjYDw%T~Ojd$;KgZ7e!&-sb>mpkeR6?s+GWw94=SuQkv4ge*mLKhpBQc)xvz^ z^%ZJeN>gIvCh^iM%T&3REVDYI`jZBu!yYGfhWj4?>uTS0CAw43%*)IB=wYv^dYJzH z{fUj6r1oW1_r^DTQsu6C=0k@m%dCz_JySRa@vkaE zLr0OFm4U?`qOIlyYO`J^6o;|5Pcb43orL0-Ek?NX8 zYDbH9JdZ?9bF}m?o2n=})Fou;pCJ`&+qj;|Aqrb}nAL$c(g^ZT7vh&HdY9 zA^4lT@Hcr8;O9+q^QG2h*=$av)Lz1e<)uuBj3Oy1nes9_EiIS%!EF;kz%Zoo-z^PLeZC+PPH2rBdA#o}OgOU9o{GGjfcJkB@(=i&o+Uy$`I1Eou zPb$yVeDd29i8Ig`fX)KGo;W za`oyJj(_$kbF(tIe*HQCQPHt9Uux$4Z3V>tZ%K_eC$Q>|zi*wD0QN%%$y=UF&G~9> z-n@y!ahq$`uHtYwy7q<@(sY;rSy|Z}K3q;vP%z`ZJHErd`D@=MG;|ahvt}}C#4vvK z%f-yenv20;0Ki}{5FHbX!DwL2m?r=*CrqKa`4Z;4!imM z(-yqFeY);OJAtN`S%8ocBl+s + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/containers/sequential Directory Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    sequential Directory Reference
    +
    +
    +
    +Directory dependency graph for sequential:
    +
    +
    /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/containers/sequential
    + + + + +
    + + + + +

    +Files

    file  dense_matrix.hpp [code]
     
    +
    + + + + diff --git a/doxygen/dir_d05a7e68d09c14ebc0e6d03c0cf9ec09_dep.map b/doxygen/dir_d05a7e68d09c14ebc0e6d03c0cf9ec09_dep.map new file mode 100644 index 0000000000..bc65b15e75 --- /dev/null +++ b/doxygen/dir_d05a7e68d09c14ebc0e6d03c0cf9ec09_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/dir_d05a7e68d09c14ebc0e6d03c0cf9ec09_dep.md5 b/doxygen/dir_d05a7e68d09c14ebc0e6d03c0cf9ec09_dep.md5 new file mode 100644 index 0000000000..3fcf5ed205 --- /dev/null +++ b/doxygen/dir_d05a7e68d09c14ebc0e6d03c0cf9ec09_dep.md5 @@ -0,0 +1 @@ +d128cf281f07f1d1b0c0d071f9e69dd0 \ No newline at end of file diff --git a/doxygen/dir_d05a7e68d09c14ebc0e6d03c0cf9ec09_dep.png b/doxygen/dir_d05a7e68d09c14ebc0e6d03c0cf9ec09_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..ed275aa79dda998b835fd4b40a96cc9ba6d721c0 GIT binary patch literal 2353 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 literal 0 HcmV?d00001 diff --git a/doxygen/dir_d44c64559bbebec7f509842c48db8b23.html b/doxygen/dir_d44c64559bbebec7f509842c48db8b23.html new file mode 100644 index 0000000000..656c0efefc --- /dev/null +++ b/doxygen/dir_d44c64559bbebec7f509842c48db8b23.html @@ -0,0 +1,91 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include Directory Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    include Directory Reference
    +
    +
    + + + + +

    +Directories

    directory  dr
     
    +
    + + + + diff --git a/doxygen/dir_d7c528dc6ed0943eef8ba09c0b02746e.html b/doxygen/dir_d7c528dc6ed0943eef8ba09c0b02746e.html new file mode 100644 index 0000000000..7050fe83ca --- /dev/null +++ b/doxygen/dir_d7c528dc6ed0943eef8ba09c0b02746e.html @@ -0,0 +1,100 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/concepts Directory Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    concepts Directory Reference
    +
    +
    +
    +Directory dependency graph for concepts:
    +
    +
    /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/concepts
    + + + + +
    + + + + +

    +Files

    file  concepts.hpp [code]
     
    +
    + + + + diff --git a/doxygen/dir_d7c528dc6ed0943eef8ba09c0b02746e_dep.map b/doxygen/dir_d7c528dc6ed0943eef8ba09c0b02746e_dep.map new file mode 100644 index 0000000000..b18eb879cc --- /dev/null +++ b/doxygen/dir_d7c528dc6ed0943eef8ba09c0b02746e_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/dir_d7c528dc6ed0943eef8ba09c0b02746e_dep.md5 b/doxygen/dir_d7c528dc6ed0943eef8ba09c0b02746e_dep.md5 new file mode 100644 index 0000000000..a111bc261c --- /dev/null +++ b/doxygen/dir_d7c528dc6ed0943eef8ba09c0b02746e_dep.md5 @@ -0,0 +1 @@ +686b09cdacdba75d2971014aeb1bef38 \ No newline at end of file diff --git a/doxygen/dir_d7c528dc6ed0943eef8ba09c0b02746e_dep.png b/doxygen/dir_d7c528dc6ed0943eef8ba09c0b02746e_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..5709858814467e30e990f1bcf0db5f7bd53907c6 GIT binary patch literal 2041 zcmV9g^&6svC6x^ZgZj(NO@^0WjjXrK{_I^Q+bF+XZ7_9Q z>NljmVT8AryU8$_V$n#U(P*}{@6hpeQ=t&{U|A@ft=Sb}f0dOL9QyWawIyvxD4LmT zr8>@^Kl7d?ZAd7Df`kJ2&y5>+d%00wUT*KMI0OlWP>@gv1&ih>v|4SHx%b(k>3J+i ziW}Fj6EkucPpkffIy8j6Sr1MS_3s6yY#eQT zeE8?7pQ)&<;H~)4iZWkiZeYX4E%fNw3l|p`JM^+)JUl#U-TH}KOWLq#Mib0W(>j{M z!e8ha@@MidmC(k=2Y{TThlzacWeTob#oODP{(VDvEn*l+(?76tZyQQxG#^Q6sSbDd zR>nX81O^2w%BfTVw(OQedF(>r=jTsVm7cPjH;u0q7ZoZCI$1o3Hd&8dD1w553GJ=s z{p5EkD=VX@sF1nZRC{;Jp*(h>09d;|6TMzfk7v6OGjbTw(XsaKl0%VSoi|JJped|O zLeb2~dJ3T+>nTK|kWdH(358IQPzVKCPaza!q!0=cie^UEQ;2%VG`Fxa358IQPzVJH zg;2046dH|Yo4NfHMAIW9g;21`-+dJ1=TTO6(|kc;R#>0sO&+hTtl;E{AJjmD-;&xS z6nnFFa{R|*wm4O@7uM&1$>aB}r$}n(Ipp>s6m0%ygVT~{+WM4DUiRKy*Q7ZEwAD`w$AUoB9*tZdHg6ehi$V7K%8`uX!_{CJc5 zrJEz65DE?(in_Ww)@H0Btao?X`ui|E@>Pn9ivYNL_bwkTm`h04P6P%#NyN}0T)gd+7Z{MrycAdDaHn~j~BlFZmQ zN0Bh@4cZ6!(Y;$|*00L|VEwubR;^slmd%-Xd%5B5<;JfyHRK#U%nSW`Xz&nDpUY=W`a0&%okL#U1+#5uq_1Z6%H^zF^*IGsN|-Wr8nMx@ zQ(CGsww<+S7wWLSoIaP&qEG(DoY^xteCRvI#wRf8ovB2}#8G~`n)2J#v~+bPaY8&% zBS&$iNXMql+xh;xgEqX9kIrF3k&(Wdl$ohK-){h|T6r+wg%_DJ^|$H#O_>{+{{9TQ zcI`&%)~%V7HXnn*z&8iKHr5|Fa4->(!*O?SMgIZebnMufb7#+*ZTs`|)y$Zsp-0bN zxVgC#5jh-nSReN7-D7OK*K?u7j~kDNhbIGH8qCP(QEcAyWxd~vYfD!=Jw0jJ(v_g# zc6^q;t}!l|)i~sO3WLGG)vN!eeTQd$_t>>-r33}HGrrcMMGM-teHxwas`0h^_p}0V zb#tYrrrK=VB_+j7NEl-r{=L22_~zgNN=k~26ilg3_y5fqZQ8nnAC4U* zyuX^!u_M^OZ?E}_U`Gx)QaCv|p;85K`BK5}9`p6}dtjfc+S*!5N{aFKS6SS)N)^Dy z%&o@Z|K7*E4?i}RyZ8KI{JN+RKYxD!oSl`Iv{R=pq-T7=;hbDPm@%7oCMJ-Zd)#ba z?ZqKO0WdBhk%bH9aV+NudVM8Fj~wFD<-fhtiisV~;zb{E{`^_)+_{5RGYf!0ga2Z2 z+v5`_p-r33Pq`#9062Pq}RPVl8@oC5OKMmMxpVB044xfG3~w z0BUNgDZPG+ zs1Y$tOPb8Z3m5S5@nOo;Bx8ANv&MP~o9ubDWbp#yBAXq%O)nC0bTdjYAHsel6hgsapD7&Gf`yCi-GxRc>nVhS+&+YYgrb>| z^%O$E8tW-+{-8NLVu-CzDISrG6hgr!BSptfU2Jh0VI{KXRkLKrJ+EYcisnh4DTIQA zqM4EZ_aPMI|9yx?A)yco5(=SUwaKe%r8-Xi>twyhef?B~bnhkg8@YaEWktPZ9+t)H zDeirqnwqM1c6P3JvFN3OyyFAI`z@>QxYTdl`a%dHgb+dqA%qY@2qA + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp Directory Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    sp Directory Reference
    +
    +
    +
    +Directory dependency graph for sp:
    +
    +
    /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp
    + + + + + + + + +
    + + + + + + + + + + +

    +Directories

    directory  algorithms
     
    directory  containers
     
    directory  util
     
    directory  views
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Files

    file  allocators.hpp [code]
     
    file  detail.hpp [code]
     
    file  device_ptr.hpp [code]
     
    file  device_ref.hpp [code]
     
    file  device_span.hpp [code]
     
    file  device_vector.hpp [code]
     
    file  distributed_span.hpp [code]
     
    file  distributed_vector.hpp [code]
     
    file  future.hpp [code]
     
    file  init.hpp [code]
     
    file  range.hpp [code]
     
    file  range_adaptors.hpp [code]
     
    file  span.hpp [code]
     
    file  util.hpp [code]
     
    file  vector.hpp [code]
     
    file  zip_view.hpp [code]
     
    +
    + + + + diff --git a/doxygen/dir_d7eb10406d49beed6cff678e21fddf87_dep.map b/doxygen/dir_d7eb10406d49beed6cff678e21fddf87_dep.map new file mode 100644 index 0000000000..ab8db9f4f4 --- /dev/null +++ b/doxygen/dir_d7eb10406d49beed6cff678e21fddf87_dep.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/doxygen/dir_d7eb10406d49beed6cff678e21fddf87_dep.md5 b/doxygen/dir_d7eb10406d49beed6cff678e21fddf87_dep.md5 new file mode 100644 index 0000000000..1ba8d07b25 --- /dev/null +++ b/doxygen/dir_d7eb10406d49beed6cff678e21fddf87_dep.md5 @@ -0,0 +1 @@ +5ed311d2582ff8fdd3b7b5a223e89bfd \ No newline at end of file diff --git a/doxygen/dir_d7eb10406d49beed6cff678e21fddf87_dep.png b/doxygen/dir_d7eb10406d49beed6cff678e21fddf87_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..973e221fdd07e277d5a7ba359d627ea1c71e3315 GIT binary patch literal 5993 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 GME(zUuvWbQ literal 0 HcmV?d00001 diff --git a/doxygen/dir_fe6a317965919c4163a6bbac6fc7f579.html b/doxygen/dir_fe6a317965919c4163a6bbac6fc7f579.html new file mode 100644 index 0000000000..ae17f1ef44 --- /dev/null +++ b/doxygen/dir_fe6a317965919c4163a6bbac6fc7f579.html @@ -0,0 +1,116 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/containers Directory Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    containers Directory Reference
    +
    +
    +
    +Directory dependency graph for containers:
    +
    +
    /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/containers
    + + + + + +
    + + + + +

    +Directories

    directory  sequential
     
    + + + + + + + + + + + + + +

    +Files

    file  detail.hpp [code]
     
    file  distributed_dense_matrix.hpp [code]
     
    file  duplicated_vector.hpp [code]
     
    file  matrix_entry.hpp [code]
     
    file  matrix_partition.hpp [code]
     
    file  sparse_matrix.hpp [code]
     
    +
    + + + + diff --git a/doxygen/dir_fe6a317965919c4163a6bbac6fc7f579_dep.map b/doxygen/dir_fe6a317965919c4163a6bbac6fc7f579_dep.map new file mode 100644 index 0000000000..91b3a8ce0c --- /dev/null +++ b/doxygen/dir_fe6a317965919c4163a6bbac6fc7f579_dep.map @@ -0,0 +1,5 @@ + + + + + diff --git a/doxygen/dir_fe6a317965919c4163a6bbac6fc7f579_dep.md5 b/doxygen/dir_fe6a317965919c4163a6bbac6fc7f579_dep.md5 new file mode 100644 index 0000000000..d8d10e63b8 --- /dev/null +++ b/doxygen/dir_fe6a317965919c4163a6bbac6fc7f579_dep.md5 @@ -0,0 +1 @@ +fc0e6b9eb7a91526a26d40bb4c0c89f8 \ No newline at end of file diff --git a/doxygen/dir_fe6a317965919c4163a6bbac6fc7f579_dep.png b/doxygen/dir_fe6a317965919c4163a6bbac6fc7f579_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..defd83b05892a2c9750f30d4f35b7bbb355fa928 GIT binary patch literal 4150 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 JuF{5v{RhU=>PG+o literal 0 HcmV?d00001 diff --git a/doxygen/distributed__dense__matrix_8hpp_source.html b/doxygen/distributed__dense__matrix_8hpp_source.html new file mode 100644 index 0000000000..0c6688fc8e --- /dev/null +++ b/doxygen/distributed__dense__matrix_8hpp_source.html @@ -0,0 +1,433 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/containers/distributed_dense_matrix.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    distributed_dense_matrix.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <memory>
    +
    8
    +
    9#include <dr/detail/index.hpp>
    +
    10#include <dr/detail/owning_view.hpp>
    +
    11#include <dr/sp/containers/matrix_entry.hpp>
    +
    12#include <dr/sp/containers/matrix_partition.hpp>
    +
    13#include <dr/sp/containers/sequential/dense_matrix.hpp>
    +
    14#include <dr/sp/device_vector.hpp>
    +
    15#include <dr/sp/future.hpp>
    +
    16#include <dr/sp/views/dense_matrix_view.hpp>
    +
    17
    +
    18namespace dr::sp {
    +
    19
    +
    20template <typename T, typename L> class distributed_dense_matrix_accessor {
    +
    21public:
    +
    22 using size_type = std::size_t;
    +
    23 using difference_type = std::ptrdiff_t;
    +
    24
    +
    25 using scalar_value_type = rng::range_value_t<L>;
    +
    26 using scalar_reference = rng::range_reference_t<L>;
    +
    27
    + +
    29
    + +
    31
    +
    32 using iterator_category = std::random_access_iterator_tag;
    +
    33
    + + + +
    37
    +
    38 using tile_type = L;
    +
    39
    +
    40 using key_type = dr::index<>;
    +
    41
    +
    42 constexpr distributed_dense_matrix_accessor() noexcept = default;
    +
    43 constexpr ~distributed_dense_matrix_accessor() noexcept = default;
    + +
    45 const distributed_dense_matrix_accessor &) noexcept = default;
    + +
    47 operator=(const distributed_dense_matrix_accessor &) noexcept = default;
    +
    48
    + +
    50 std::span<tile_type> tiles, key_type grid_idx, key_type tile_idx,
    +
    51 key_type grid_shape, key_type tile_shape, key_type matrix_shape) noexcept
    +
    52 : grid_idx_(grid_idx), tile_idx_(tile_idx), grid_shape_(grid_shape),
    +
    53 tile_shape_(tile_shape), matrix_shape_(matrix_shape), tiles_(tiles) {}
    +
    54
    + +
    56 operator+=(difference_type offset) noexcept {
    +
    57 std::size_t new_global_idx_ = get_global_idx_() + offset;
    +
    58 key_type new_global_idx = {new_global_idx_ / matrix_shape_[1],
    +
    59 new_global_idx_ % matrix_shape_[1]};
    +
    60 key_type new_grid_idx = {new_global_idx[0] / tile_shape_[0],
    +
    61 new_global_idx[1] / tile_shape_[1]};
    +
    62
    +
    63 key_type new_tile_idx = {new_global_idx[0] % tile_shape_[0],
    +
    64 new_global_idx[1] % tile_shape_[1]};
    +
    65
    +
    66 grid_idx_ = new_grid_idx;
    +
    67 tile_idx_ = new_tile_idx;
    +
    68 return *this;
    +
    69 }
    +
    70
    +
    71 constexpr bool operator==(const iterator_accessor &other) const noexcept {
    +
    72 return grid_idx_ == other.grid_idx_ && tile_idx_ == other.tile_idx_;
    +
    73 }
    +
    74
    +
    75 constexpr difference_type
    +
    76 operator-(const iterator_accessor &other) const noexcept {
    +
    77 return difference_type(get_global_idx_()) - other.get_global_idx_();
    +
    78 }
    +
    79
    +
    80 constexpr bool operator<(const iterator_accessor &other) const noexcept {
    +
    81 if (get_grid_idx() < other.get_grid_idx()) {
    +
    82 return true;
    +
    83 } else if (get_grid_idx() == other.get_grid_idx()) {
    +
    84 return get_local_idx() < other.get_local_idx();
    +
    85 } else {
    +
    86 return false;
    +
    87 }
    +
    88 }
    +
    89
    +
    90 constexpr reference operator*() const noexcept {
    +
    91 auto &&tile = tiles_[get_grid_idx()];
    +
    92 auto &&value = tile[get_local_idx()];
    +
    93 key_type idx = {tile_idx_[0] + grid_idx_[0] * tile_shape_[0],
    +
    94 tile_idx_[1] + grid_idx_[1] * tile_shape_[1]};
    +
    95 return reference(idx, value);
    +
    96 }
    +
    97
    +
    98private:
    +
    99 size_type get_global_idx_() const noexcept {
    +
    100 auto gidx = get_global_idx();
    +
    101 return gidx[0] * matrix_shape_[1] + gidx[1];
    +
    102 }
    +
    103
    +
    104 key_type get_global_idx() const noexcept {
    +
    105 return {grid_idx_[0] * tile_shape_[0] + tile_idx_[0],
    +
    106 grid_idx_[1] * tile_shape_[1] + tile_idx_[1]};
    +
    107 }
    +
    108
    +
    109 size_type get_grid_idx() const noexcept {
    +
    110 return grid_idx_[0] * grid_shape_[1] + grid_idx_[1];
    +
    111 }
    +
    112
    +
    113 size_type get_local_idx() const noexcept {
    +
    114 return tile_idx_[0] * tile_shape_[1] + tile_idx_[1];
    +
    115 }
    +
    116
    +
    117 size_type get_tile_size() const noexcept {
    +
    118 return tile_shape_[0] * tile_shape_[1];
    +
    119 }
    +
    120
    +
    121private:
    +
    122 key_type grid_idx_;
    +
    123 key_type tile_idx_;
    +
    124
    +
    125 key_type grid_shape_;
    +
    126 key_type tile_shape_;
    +
    127 key_type matrix_shape_;
    +
    128
    +
    129 std::span<tile_type> tiles_;
    +
    130};
    +
    131
    +
    132template <typename T, typename L>
    + + +
    135
    +
    136template <typename T> class distributed_dense_matrix {
    +
    137public:
    +
    138 using size_type = std::size_t;
    +
    139 using difference_type = std::ptrdiff_t;
    +
    140
    + +
    142
    +
    143 using scalar_reference = rng::range_reference_t<
    + +
    145 using const_scalar_reference = rng::range_reference_t<
    + +
    147
    + + +
    150
    +
    151 using key_type = dr::index<>;
    +
    152
    + + +
    155
    + +
    157 : shape_(shape), partition_(new dr::sp::block_cyclic()) {
    +
    158 init_();
    +
    159 }
    +
    160
    +
    161 distributed_dense_matrix(key_type shape, const matrix_partition &partition)
    +
    162 : shape_(shape), partition_(partition.clone()) {
    +
    163 init_();
    +
    164 }
    +
    165
    +
    166 size_type size() const noexcept { return shape()[0] * shape()[1]; }
    +
    167
    +
    168 key_type shape() const noexcept { return shape_; }
    +
    169
    +
    170 scalar_reference operator[](key_type index) {
    +
    171 std::size_t tile_i = index[0] / tile_shape_[0];
    +
    172 std::size_t tile_j = index[1] / tile_shape_[1];
    +
    173
    +
    174 std::size_t local_i = index[0] % tile_shape_[0];
    +
    175 std::size_t local_j = index[1] % tile_shape_[1];
    +
    176
    +
    177 auto &&tile = tiles_[tile_i * grid_shape_[1] + tile_j];
    +
    178
    +
    179 return tile[local_i * tile_shape_[1] + local_j];
    +
    180 }
    +
    181
    +
    182 const_scalar_reference operator[](key_type index) const {
    +
    183 std::size_t tile_i = index[0] / tile_shape_[0];
    +
    184 std::size_t tile_j = index[1] / tile_shape_[1];
    +
    185
    +
    186 std::size_t local_i = index[0] % tile_shape_[0];
    +
    187 std::size_t local_j = index[1] % tile_shape_[1];
    +
    188
    +
    189 auto &&tile = tiles_[tile_i * grid_shape_[1] + tile_j];
    +
    190
    +
    191 return tile[local_i * tile_shape_[1] + local_j];
    +
    192 }
    +
    193
    +
    194 iterator begin() {
    +
    195 return iterator(tiles_, key_type({0, 0}), key_type({0, 0}), grid_shape_,
    +
    196 tile_shape_, shape_);
    +
    197 }
    +
    198
    +
    199 iterator end() { return begin() + shape()[0] * shape()[1]; }
    +
    200
    +
    201 key_type tile_shape() const noexcept { return tile_shape_; }
    +
    202
    +
    203 key_type grid_shape() const noexcept { return grid_shape_; }
    +
    204
    +
    205 auto tile(key_type tile_index) {
    +
    206 auto &&[i, j] = tile_index;
    +
    207 auto iter = tiles_[i * grid_shape()[1] + j].begin();
    +
    208
    +
    209 std::size_t tm =
    +
    210 std::min(tile_shape()[0], shape()[0] - i * tile_shape()[0]);
    +
    211 std::size_t tn =
    +
    212 std::min(tile_shape()[1], shape()[1] - j * tile_shape()[1]);
    +
    213
    +
    214 return dense_matrix_view<
    +
    215 T,
    +
    216 rng::iterator_t<dr::sp::device_vector<T, dr::sp::device_allocator<T>>>>(
    +
    217 iter, key_type{tm, tn}, tile_shape()[1],
    +
    218 tiles_[i * grid_shape()[1] + j].rank());
    +
    219 }
    +
    220
    +
    221 std::vector<dense_matrix_view<T, rng::iterator_t<dr::sp::device_vector<
    + +
    223 tiles() {
    +
    224 std::vector<dense_matrix_view<T, rng::iterator_t<dr::sp::device_vector<
    + +
    226 views_;
    +
    227
    +
    228 for (std::size_t i = 0; i < grid_shape_[0]; i++) {
    +
    229 for (std::size_t j = 0; j < grid_shape_[1]; j++) {
    +
    230 auto iter = tiles_[i * grid_shape_[1] + j].begin();
    +
    231
    +
    232 std::size_t tm =
    +
    233 std::min(tile_shape_[0], shape()[0] - i * tile_shape_[0]);
    +
    234 std::size_t tn =
    +
    235 std::min(tile_shape_[1], shape()[1] - j * tile_shape_[1]);
    +
    236
    +
    237 views_.emplace_back(iter, key_type{tm, tn}, tile_shape_[1],
    +
    238 tiles_[i * grid_shape_[1] + j].rank());
    +
    239 }
    +
    240 }
    +
    241 return views_;
    +
    242 }
    +
    243
    +
    244 template <typename Allocator = std::allocator<T>>
    +
    245 auto get_tile(key_type tile_index, const Allocator &alloc = Allocator{}) {
    +
    246 std::size_t nrows = get_tile_shape_(tile_index)[0];
    +
    247 std::size_t ld = tile_shape_[1];
    +
    248 std::size_t tile_size = nrows * ld;
    +
    249 dense_matrix<T, Allocator> local_tile(get_tile_shape_(tile_index), ld,
    +
    250 alloc);
    +
    251 auto remote_tile = tile(tile_index);
    +
    252 sp::copy(remote_tile.data(), remote_tile.data() + tile_size,
    +
    253 local_tile.data());
    +
    254 return local_tile;
    +
    255 }
    +
    256
    +
    257 template <typename Allocator = std::allocator<T>>
    +
    258 auto get_tile_async(key_type tile_index,
    +
    259 const Allocator &alloc = Allocator{}) {
    +
    260 std::size_t nrows = get_tile_shape_(tile_index)[0];
    +
    261 std::size_t ld = tile_shape_[1];
    +
    262 std::size_t tile_size = nrows * ld;
    +
    263 dense_matrix<T, Allocator> local_tile(get_tile_shape_(tile_index), ld,
    +
    264 alloc);
    +
    265 auto remote_tile = tile(tile_index);
    +
    266 auto event = sp::copy_async(
    +
    267 remote_tile.data(), remote_tile.data() + tile_size, local_tile.data());
    +
    268 // TODO: use/enhance the existing future in parallel_backend_sycl_utils.h
    +
    269 return future(std::move(local_tile), {event});
    +
    270 }
    +
    271
    +
    272 auto segments() {
    +
    273 std::vector<dense_matrix_view<T, rng::iterator_t<dr::sp::device_vector<
    + +
    275 views_;
    +
    276
    +
    277 for (std::size_t i = 0; i < grid_shape_[0]; i++) {
    +
    278 for (std::size_t j = 0; j < grid_shape_[1]; j++) {
    +
    279 auto iter = tiles_[i * grid_shape_[1] + j].begin();
    +
    280
    +
    281 std::size_t tm =
    +
    282 std::min(tile_shape_[0], shape()[0] - i * tile_shape_[0]);
    +
    283 std::size_t tn =
    +
    284 std::min(tile_shape_[1], shape()[1] - j * tile_shape_[1]);
    +
    285
    +
    286 std::size_t m_offset = i * tile_shape_[0];
    +
    287 std::size_t n_offset = j * tile_shape_[1];
    +
    288
    +
    289 views_.emplace_back(iter, key_type{tm, tn},
    +
    290 key_type{m_offset, n_offset}, tile_shape_[1],
    +
    291 tiles_[i * grid_shape_[1] + j].rank());
    +
    292 }
    +
    293 }
    +
    294 return dr::__detail::owning_view(std::move(views_));
    +
    295 }
    +
    296
    +
    297private:
    +
    298 void init_() {
    +
    299 grid_shape_ = partition_->grid_shape(shape());
    +
    300 tile_shape_ = partition_->tile_shape(shape());
    +
    301
    +
    302 tiles_.reserve(grid_shape_[0] * grid_shape_[1]);
    +
    303
    +
    304 for (std::size_t i = 0; i < grid_shape_[0]; i++) {
    +
    305 for (std::size_t j = 0; j < grid_shape_[1]; j++) {
    +
    306 std::size_t rank = partition_->tile_rank(shape(), {i, j});
    +
    307
    +
    308 auto device = dr::sp::devices()[rank];
    +
    309 dr::sp::device_allocator<T> alloc(dr::sp::context(), device);
    +
    310
    +
    311 std::size_t tile_size = tile_shape_[0] * tile_shape_[1];
    +
    312
    +
    313 tiles_.emplace_back(tile_size, alloc, rank);
    +
    314 }
    +
    315 }
    +
    316 }
    +
    317
    +
    318 key_type get_tile_shape_(key_type tile_index) {
    +
    319 auto &&[i, j] = tile_index;
    +
    320 std::size_t tm = std::min(tile_shape_[0], shape()[0] - i * tile_shape_[0]);
    +
    321 std::size_t tn = std::min(tile_shape_[1], shape()[1] - j * tile_shape_[1]);
    +
    322 return key_type{tm, tn};
    +
    323 }
    +
    324
    +
    325private:
    +
    326 key_type shape_;
    +
    327 key_type grid_shape_;
    +
    328 key_type tile_shape_;
    +
    329 std::unique_ptr<dr::sp::matrix_partition> partition_;
    +
    330
    +
    331 std::vector<dr::sp::device_vector<T, dr::sp::device_allocator<T>>> tiles_;
    +
    332};
    +
    333
    +
    334} // namespace dr::sp
    +
    Definition: owning_view.hpp:18
    +
    Definition: index.hpp:34
    +
    Definition: iterator_adaptor.hpp:23
    +
    Definition: matrix_partition.hpp:34
    +
    Definition: dense_matrix_view.hpp:21
    +
    Definition: dense_matrix.hpp:19
    +
    Definition: allocators.hpp:20
    +
    Definition: device_vector.hpp:13
    +
    Definition: distributed_dense_matrix.hpp:20
    +
    Definition: distributed_dense_matrix.hpp:136
    +
    Definition: future.hpp:14
    +
    Definition: matrix_entry.hpp:15
    +
    Definition: matrix_partition.hpp:23
    +
    Definition: matrix_entry.hpp:112
    +
    + + + + diff --git a/doxygen/distributed__mdarray_8hpp_source.html b/doxygen/distributed__mdarray_8hpp_source.html new file mode 100644 index 0000000000..723c8f5fb0 --- /dev/null +++ b/doxygen/distributed__mdarray_8hpp_source.html @@ -0,0 +1,185 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/containers/distributed_mdarray.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    distributed_mdarray.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <dr/detail/ranges_shim.hpp>
    +
    8#include <dr/mp/views/mdspan_view.hpp>
    +
    9
    +
    10namespace dr::mp {
    +
    11
    +
    12template <typename T, std::size_t Rank> class distributed_mdarray {
    +
    13public:
    +
    14 using shape_type = dr::__detail::dr_extents<Rank>;
    +
    15 static constexpr auto rank() { return Rank; }
    +
    16
    +
    17 distributed_mdarray(dr::__detail::dr_extents<Rank> shape,
    + +
    19 : tile_shape_(tile_shape(shape)), dv_(dv_size(), dv_dist(dist, shape)),
    +
    20 md_view_(make_md_view(dv_, shape, tile_shape_)) {}
    +
    21
    +
    22 auto begin() const { return rng::begin(md_view_); }
    +
    23 auto end() const { return rng::end(md_view_); }
    +
    24 auto size() const { return rng::size(md_view_); }
    +
    25 auto operator[](auto n) { return md_view_[n]; }
    +
    26
    +
    27 auto segments() { return dr::ranges::segments(md_view_); }
    +
    28 auto &halo() const { return dr::mp::halo(dv_); }
    +
    29
    +
    30 auto mdspan() const { return md_view_.mdspan(); }
    +
    31 auto extent(std::size_t r) const { return mdspan().extent(r); }
    +
    32 auto grid() { return md_view_.grid(); }
    +
    33 auto view() const { return md_view_; }
    +
    34
    +
    35 auto operator==(const distributed_mdarray &other) const {
    +
    36 return std::equal(begin(), end(), other.begin());
    +
    37 }
    +
    38
    +
    39private:
    + +
    41
    +
    42 static auto tile_shape(auto shape) {
    +
    43 std::size_t n = default_comm().size(); // dr-style ignore
    +
    44 shape[0] = dr::__detail::partition_up(shape[0], n);
    +
    45 return shape;
    +
    46 }
    +
    47
    +
    48 static auto md_size(auto shape) {
    +
    49 std::size_t size = 1;
    +
    50 for (auto extent : shape) {
    +
    51 size *= extent;
    +
    52 }
    +
    53 return size;
    +
    54 }
    +
    55
    +
    56 auto dv_size() {
    +
    57 return default_comm().size() * md_size(tile_shape_); // dr-style ignore
    +
    58 }
    +
    59
    +
    60 static auto dv_dist(distribution incoming_dist, auto shape) {
    +
    61 // Decomp is 1 "row" in decomp dimension
    +
    62 // TODO: only supports dist on leading dimension
    +
    63 shape[0] = 1;
    +
    64 std::size_t row_size = md_size(shape);
    +
    65 auto incoming_halo = incoming_dist.halo();
    +
    66 return distribution().halo(incoming_halo.prev * row_size,
    +
    67 incoming_halo.next * row_size);
    +
    68 }
    +
    69
    +
    70 // This wrapper seems to avoid an issue with template argument
    +
    71 // deduction for mdspan_view
    +
    72 static auto make_md_view(const DV &dv, shape_type shape,
    +
    73 shape_type tile_shape) {
    +
    74 return views::mdspan(dv, shape, tile_shape);
    +
    75 }
    +
    76
    +
    77 shape_type tile_shape_;
    +
    78 DV dv_;
    +
    79 using mdspan_type =
    +
    80 decltype(make_md_view(std::declval<DV>(), std::declval<shape_type>(),
    +
    81 std::declval<shape_type>()));
    +
    82 mdspan_type md_view_;
    +
    83};
    +
    84
    +
    85template <typename T, std::size_t Rank>
    +
    86auto &halo(const distributed_mdarray<T, Rank> &mdarray) {
    +
    87 return mdarray.halo();
    +
    88}
    +
    89
    +
    90template <typename T, std::size_t Rank>
    +
    91std::ostream &operator<<(std::ostream &os,
    +
    92 const distributed_mdarray<T, Rank> &mdarray) {
    +
    93 os << fmt::format("\n{}", mdarray.mdspan());
    +
    94 return os;
    +
    95}
    +
    96
    +
    97} // namespace dr::mp
    +
    Definition: distributed_mdarray.hpp:12
    +
    distributed vector
    Definition: distributed_vector.hpp:138
    +
    Definition: distribution.hpp:11
    +
    + + + + diff --git a/doxygen/distributed__span_8hpp_source.html b/doxygen/distributed__span_8hpp_source.html new file mode 100644 index 0000000000..e041bdecb2 --- /dev/null +++ b/doxygen/distributed__span_8hpp_source.html @@ -0,0 +1,347 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/distributed_span.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    distributed_span.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <vector>
    +
    8
    +
    9#include <dr/concepts/concepts.hpp>
    +
    10#include <dr/detail/iterator_adaptor.hpp>
    +
    11#include <dr/detail/ranges.hpp>
    +
    12#include <dr/detail/segments_tools.hpp>
    +
    13#include <dr/sp/device_span.hpp>
    +
    14
    +
    15namespace dr::sp {
    +
    16
    +
    17template <typename T, typename L> class distributed_span_accessor {
    +
    18public:
    +
    19 using element_type = T;
    +
    20 using value_type = std::remove_cv_t<T>;
    +
    21
    +
    22 using segment_type = L;
    +
    23
    +
    24 using size_type = rng::range_size_t<segment_type>;
    +
    25 using difference_type = rng::range_difference_t<segment_type>;
    +
    26
    +
    27 // using pointer = typename segment_type::pointer;
    +
    28 using reference = rng::range_reference_t<segment_type>;
    +
    29
    +
    30 using iterator_category = std::random_access_iterator_tag;
    +
    31
    + + + +
    35
    +
    36 constexpr distributed_span_accessor() noexcept = default;
    +
    37 constexpr ~distributed_span_accessor() noexcept = default;
    + +
    39 const distributed_span_accessor &) noexcept = default;
    + +
    41 operator=(const distributed_span_accessor &) noexcept = default;
    +
    42
    +
    43 constexpr distributed_span_accessor(std::span<segment_type> segments,
    +
    44 size_type segment_id,
    +
    45 size_type idx) noexcept
    +
    46 : segments_(segments), segment_id_(segment_id), idx_(idx) {}
    +
    47
    + +
    49 operator+=(difference_type offset) noexcept {
    +
    50
    +
    51 while (offset > 0) {
    +
    52 difference_type current_offset =
    +
    53 std::min(offset, difference_type(segments_[segment_id_].size()) -
    +
    54 difference_type(idx_));
    +
    55 idx_ += current_offset;
    +
    56 offset -= current_offset;
    +
    57
    +
    58 if (idx_ >= segments_[segment_id_].size()) {
    +
    59 segment_id_++;
    +
    60 idx_ = 0;
    +
    61 }
    +
    62 }
    +
    63
    +
    64 while (offset < 0) {
    +
    65 difference_type current_offset =
    +
    66 std::min(-offset, difference_type(idx_) + 1);
    +
    67
    +
    68 difference_type new_idx = difference_type(idx_) - current_offset;
    +
    69
    +
    70 if (new_idx < 0) {
    +
    71 segment_id_--;
    +
    72 new_idx = segments_[segment_id_].size() - 1;
    +
    73 }
    +
    74
    +
    75 idx_ = new_idx;
    +
    76 }
    +
    77
    +
    78 return *this;
    +
    79 }
    +
    80
    +
    81 constexpr bool operator==(const iterator_accessor &other) const noexcept {
    +
    82 return segment_id_ == other.segment_id_ && idx_ == other.idx_;
    +
    83 }
    +
    84
    +
    85 constexpr difference_type
    +
    86 operator-(const iterator_accessor &other) const noexcept {
    +
    87 return difference_type(get_global_idx()) - other.get_global_idx();
    +
    88 }
    +
    89
    +
    90 constexpr bool operator<(const iterator_accessor &other) const noexcept {
    +
    91 if (segment_id_ < other.segment_id_) {
    +
    92 return true;
    +
    93 } else if (segment_id_ == other.segment_id_) {
    +
    94 return idx_ < other.idx_;
    +
    95 } else {
    +
    96 return false;
    +
    97 }
    +
    98 }
    +
    99
    +
    100 constexpr reference operator*() const noexcept {
    +
    101 return segments_[segment_id_][idx_];
    +
    102 }
    +
    103
    +
    104 auto segments() const noexcept {
    +
    105 return dr::__detail::drop_segments(segments_, segment_id_, idx_);
    +
    106 }
    +
    107
    +
    108private:
    +
    109 size_type get_global_idx() const noexcept {
    +
    110 size_type cumulative_size = 0;
    +
    111 for (std::size_t i = 0; i < segment_id_; i++) {
    +
    112 cumulative_size += segments_[i].size();
    +
    113 }
    +
    114 return cumulative_size + idx_;
    +
    115 }
    +
    116
    +
    117 std::span<segment_type> segments_;
    +
    118 size_type segment_id_ = 0;
    +
    119 size_type idx_ = 0;
    +
    120};
    +
    121
    +
    122template <typename T, typename L>
    + + +
    125
    +
    126template <typename T, typename L>
    +
    127class distributed_span : public rng::view_interface<distributed_span<T, L>> {
    +
    128public:
    +
    129 using element_type = T;
    +
    130 using value_type = std::remove_cv_t<T>;
    +
    131
    + +
    133
    +
    134 using size_type = rng::range_size_t<segment_type>;
    +
    135 using difference_type = rng::range_difference_t<segment_type>;
    +
    136
    +
    137 // using pointer = typename segment_type::pointer;
    +
    138 using reference = rng::range_reference_t<segment_type>;
    +
    139
    +
    140 // Note: creating the "global view" will be trivial once #44178 is resolved.
    +
    141 // (https://github.com/llvm/llvm-project/issues/44178)
    +
    142 // The "global view" is simply all of the segmented views joined together.
    +
    143 // However, this code does not currently compile due to a bug in Clang,
    +
    144 // so I am currently implementing my own global iterator manually.
    +
    145 // using joined_view_type =
    +
    146 // rng::join_view<rng::ref_view<std::vector<segment_type>>>;
    +
    147 // using iterator = rng::iterator_t<joined_view_type>;
    +
    148
    + +
    150
    +
    151 constexpr distributed_span() noexcept = default;
    +
    152 constexpr distributed_span(const distributed_span &) noexcept = default;
    +
    153 constexpr distributed_span &
    +
    154 operator=(const distributed_span &) noexcept = default;
    +
    155
    +
    156 template <rng::input_range R>
    + +
    158 constexpr distributed_span(R &&segments) {
    +
    159 for (auto &&segment : segments) {
    +
    160 std::size_t size = rng::size(segment);
    +
    161 segments_.push_back(
    +
    162 segment_type(rng::begin(segment), size, dr::ranges::rank(segment)));
    +
    163 size_ += size;
    +
    164 }
    +
    165 }
    +
    166
    +
    167 template <dr::distributed_range R> constexpr distributed_span(R &&r) {
    +
    168 for (auto &&segment : dr::ranges::segments(std::forward<R>(r))) {
    +
    169 std::size_t size = rng::size(segment);
    +
    170 segments_.push_back(
    +
    171 segment_type(rng::begin(segment), size, dr::ranges::rank(segment)));
    +
    172 size_ += size;
    +
    173 }
    +
    174 }
    +
    175
    +
    176 constexpr size_type size() const noexcept { return size_; }
    +
    177
    +
    178 constexpr size_type size_bytes() const noexcept {
    +
    179 return size() * sizeof(element_type);
    +
    180 }
    +
    181
    +
    182 constexpr reference operator[](size_type idx) const {
    +
    183 // TODO: optimize this
    +
    184 std::size_t span_id = 0;
    +
    185 for (std::size_t span_id = 0; idx >= segments()[span_id].size();
    +
    186 span_id++) {
    +
    187 idx -= segments()[span_id].size();
    +
    188 }
    +
    189 return segments()[span_id][idx];
    +
    190 }
    +
    191
    +
    192 [[nodiscard]] constexpr bool empty() const noexcept { return size() == 0; }
    +
    193
    +
    194 constexpr distributed_span
    +
    195 subspan(size_type Offset, size_type Count = std::dynamic_extent) const {
    +
    196 Count = std::min(Count, size() - Offset);
    +
    197
    +
    198 std::vector<segment_type> new_segments;
    +
    199
    +
    200 // Forward to segment_id that contains global index `Offset`.
    +
    201 std::size_t segment_id = 0;
    +
    202 for (segment_id = 0; Offset >= segments()[segment_id].size();
    +
    203 segment_id++) {
    +
    204 Offset -= segments()[segment_id].size();
    +
    205 }
    +
    206
    +
    207 // Our Offset begins at `segment_id, Offset`
    +
    208
    +
    209 while (Count > 0) {
    +
    210 std::size_t local_count =
    +
    211 std::min(Count, segments()[segment_id].size() - Offset);
    +
    212 auto new_segment = segments()[segment_id].subspan(Offset, local_count);
    +
    213 new_segments.push_back(new_segment);
    +
    214 Count -= local_count;
    +
    215 Offset = 0;
    +
    216 segment_id++;
    +
    217 }
    +
    218
    +
    219 return distributed_span(new_segments);
    +
    220 }
    +
    221
    +
    222 constexpr distributed_span first(size_type Count) const {
    +
    223 return subspan(0, Count);
    +
    224 }
    +
    225
    +
    226 constexpr distributed_span last(size_type Count) const {
    +
    227 return subspan(size() - Count, Count);
    +
    228 }
    +
    229
    +
    230 iterator begin() { return iterator(segments(), 0, 0); }
    +
    231
    +
    232 iterator end() { return iterator(segments(), segments().size(), 0); }
    +
    233
    +
    234 constexpr reference front() { return segments().front().front(); }
    +
    235
    +
    236 constexpr reference back() { return segments().back().back(); }
    +
    237
    +
    238 std::span<segment_type> segments() { return segments_; }
    +
    239
    +
    240 std::span<const segment_type> segments() const { return segments_; }
    +
    241
    +
    242private:
    +
    243 std::size_t size_ = 0;
    +
    244 std::vector<segment_type> segments_;
    +
    245};
    +
    246
    +
    247template <rng::input_range R>
    +
    248distributed_span(R &&segments)
    + +
    250 rng::iterator_t<rng::range_value_t<R>>>;
    +
    251
    +
    252template <dr::distributed_contiguous_range R>
    + +
    254 rng::range_value_t<R>,
    +
    255 rng::iterator_t<rng::range_value_t<decltype(dr::ranges::segments(r))>>>;
    +
    256
    +
    257} // namespace dr::sp
    +
    Definition: iterator_adaptor.hpp:23
    +
    Definition: device_span.hpp:44
    +
    Definition: distributed_span.hpp:17
    +
    Definition: distributed_span.hpp:127
    +
    Definition: concepts.hpp:16
    +
    + + + + diff --git a/doxygen/distribution_8hpp_source.html b/doxygen/distribution_8hpp_source.html new file mode 100644 index 0000000000..c508154667 --- /dev/null +++ b/doxygen/distribution_8hpp_source.html @@ -0,0 +1,133 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/containers/distribution.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    distribution.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <dr/mp/halo.hpp>
    +
    8
    +
    9namespace dr::mp {
    +
    10
    + +
    12public:
    +
    13 distribution &halo(std::size_t radius) {
    +
    14 halo_bounds_.prev = radius;
    +
    15 halo_bounds_.next = radius;
    +
    16 return *this;
    +
    17 }
    +
    18
    +
    19 distribution &halo(std::size_t prev, std::size_t next) {
    +
    20 halo_bounds_.prev = prev;
    +
    21 halo_bounds_.next = next;
    +
    22 return *this;
    +
    23 }
    +
    24
    +
    25 auto halo() const { return halo_bounds_; }
    +
    26
    +
    27 distribution &periodic(bool periodic) {
    +
    28 halo_bounds_.periodic = periodic;
    +
    29 return *this;
    +
    30 }
    +
    31
    +
    32 auto periodic() const { return halo_bounds_.periodic; }
    +
    33
    +
    34 distribution &granularity(std::size_t size) {
    +
    35 granularity_ = size;
    +
    36 return *this;
    +
    37 }
    +
    38
    +
    39 auto granularity() const { return granularity_; }
    +
    40
    +
    41private:
    +
    42 halo_bounds halo_bounds_;
    +
    43 std::size_t granularity_ = 1;
    +
    44};
    +
    45
    +
    46} // namespace dr::mp
    +
    Definition: distribution.hpp:11
    +
    Definition: halo.hpp:362
    +
    + + + + diff --git a/doxygen/doc.png b/doxygen/doc.png new file mode 100644 index 0000000000000000000000000000000000000000..17edabff95f7b8da13c9516a04efe05493c29501 GIT binary patch literal 746 zcmV7=@pnbNXRFEm&G8P!&WHG=d)>K?YZ1bzou)2{$)) zumDct!>4SyxL;zgaG>wy`^Hv*+}0kUfCrz~BCOViSb$_*&;{TGGn2^x9K*!Sf0=lV zpP=7O;GA0*Jm*tTYj$IoXvimpnV4S1Z5f$p*f$Db2iq2zrVGQUz~yq`ahn7ck(|CE z7Gz;%OP~J6)tEZWDzjhL9h2hdfoU2)Nd%T<5Kt;Y0XLt&<@6pQx!nw*5`@bq#?l*?3z{Hlzoc=Pr>oB5(9i6~_&-}A(4{Q$>c>%rV&E|a(r&;?i5cQB=} zYSDU5nXG)NS4HEs0it2AHe2>shCyr7`6@4*6{r@8fXRbTA?=IFVWAQJL&H5H{)DpM#{W(GL+Idzf^)uRV@oB8u$ z8v{MfJbTiiRg4bza<41NAzrl{=3fl_D+$t+^!xlQ8S}{UtY`e z;;&9UhyZqQRN%2pot{*Ei0*4~hSF_3AH2@fKU!$NSflS>{@tZpDT4`M2WRTTVH+D? z)GFlEGGHe?koB}i|1w45!BF}N_q&^HJ&-tyR{(afC6H7|aml|tBBbv}55C5DNP8p3 z)~jLEO4Z&2hZmP^i-e%(@d!(E|KRafiU8Q5u(wU((j8un3OR*Hvj+t literal 0 HcmV?d00001 diff --git a/doxygen/docd.png b/doxygen/docd.png new file mode 100644 index 0000000000000000000000000000000000000000..d7c94fda9bf08ecc02c7190d968452b7a2dbf04b GIT binary patch literal 756 zcmV1wr-rhpn+wxm%q2)IkAYsr{iGq<}_z5JCD4J;FN?6Qh;@TCubdp(_XdD-^ zG_#)IP7_z6hKNdx5^+FGArwLWTWCG!j+oKji?U!hxA#d-ljgkN`+e^@-P+RWG{Bx= z2iQyYTtEf*o~ySWrIVW}HWHi0_hd4~$E6Jx1U`>Owo}EYJ1O>iZvS?!z8}B}QwLMA zC3Keqf1c}K@?C`X>68b(EUzYUYAS&OH^VPteZLPr{S&|nQvp@6W4GH-1U8!u&7l~A zx~RUSNH+>7@q38W6!BzirtjLFCzc|XGx)EF#G%^pWION*k@?vP<2O>|XkCD3ujl%1 z{55JSVkw{~HbX>iEZ2%yJ2eHj5Yh8OTpzs0A2;tZ^x!#5D+y-es{k1&0|Ns9-|+Xt ziGiTsZ8(^nUo#wdTpIDkb-Zp(3|A*FzW}GZ5SQD-r^R`&X@`26E3W|GyrwDIZjtQ& z$g5f8Sv=VgVtDien@J(!^BK+#l;s-LgP--p7C;7;E!ysXcXK6?+9D>_-B(?Wm(U zQbNm-5TyYxIU=rs0+)!ixqzhuxw(AqKc3?KKX32{D~Qibp*r0x&Wux5-9WCMMRi3U zTd6dOCQlj>a;gr;gLwRKulT&(m@^L{&HkSC(qH05HSSf$YEhynGvH zWNez``Z8FJXE+BSg=%ak{OR z+Nylcb{?evLYLuE1_HngYw0g%LC#=$a@?4~Tx>F9295Q>9UJ|_6v-KMw;!YZSgGj@ zR8fRov=hJ#QvsO@xw*{0%zH@OKVEUrsummary { + list-style-type: none; +} + +details > summary::-webkit-details-marker { + display: none; +} + +details>summary::before { + content: "\25ba"; + padding-right:4px; + font-size: 80%; +} + +details[open]>summary::before { + content: "\25bc"; + padding-right:4px; + font-size: 80%; +} + +body { + scrollbar-color: var(--scrollbar-thumb-color) var(--scrollbar-background-color); +} + +::-webkit-scrollbar { + background-color: var(--scrollbar-background-color); + height: 12px; + width: 12px; +} +::-webkit-scrollbar-thumb { + border-radius: 6px; + box-shadow: inset 0 0 12px 12px var(--scrollbar-thumb-color); + border: solid 2px transparent; +} +::-webkit-scrollbar-corner { + background-color: var(--scrollbar-background-color); +} + diff --git a/doxygen/doxygen.svg b/doxygen/doxygen.svg new file mode 100644 index 0000000000..d42dad52d5 --- /dev/null +++ b/doxygen/doxygen.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doxygen/duplicated__vector_8hpp_source.html b/doxygen/duplicated__vector_8hpp_source.html new file mode 100644 index 0000000000..c4ca315c3f --- /dev/null +++ b/doxygen/duplicated__vector_8hpp_source.html @@ -0,0 +1,135 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/containers/duplicated_vector.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    duplicated_vector.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <dr/sp/allocators.hpp>
    +
    8#include <dr/sp/device_vector.hpp>
    +
    9
    +
    10namespace dr::sp {
    +
    11
    +
    12template <typename T, typename Allocator = dr::sp::device_allocator<T>>
    + +
    14public:
    + +
    16
    +
    17 using value_type = T;
    +
    18 using size_type = std::size_t;
    +
    19 using difference_type = std::ptrdiff_t;
    +
    20
    +
    21 using allocator_type = Allocator;
    +
    22
    +
    23 duplicated_vector(std::size_t count = 0) {
    +
    24 size_ = count;
    +
    25 capacity_ = count;
    +
    26
    +
    27 std::size_t rank = 0;
    +
    28 for (auto &&device : dr::sp::devices()) {
    +
    29 segments_.emplace_back(
    +
    30 segment_type(size(), Allocator(dr::sp::context(), device), rank++));
    +
    31 }
    +
    32 }
    +
    33
    +
    34 size_type size() const noexcept { return size_; }
    +
    35
    +
    36 segment_type &local_vector(std::size_t rank) { return segments_[rank]; }
    +
    37
    +
    38 const segment_type &local_vector(std::size_t rank) const {
    +
    39 return segments_[rank];
    +
    40 }
    +
    41
    +
    42private:
    +
    43 std::vector<segment_type> segments_;
    +
    44 std::size_t capacity_ = 0;
    +
    45 std::size_t size_ = 0;
    +
    46};
    +
    47
    +
    48} // namespace dr::sp
    +
    Definition: device_vector.hpp:13
    +
    Definition: duplicated_vector.hpp:13
    +
    + + + + diff --git a/doxygen/dynsections.js b/doxygen/dynsections.js new file mode 100644 index 0000000000..f579fbf3e2 --- /dev/null +++ b/doxygen/dynsections.js @@ -0,0 +1,123 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function toggleVisibility(linkObj) +{ + var base = $(linkObj).attr('id'); + var summary = $('#'+base+'-summary'); + var content = $('#'+base+'-content'); + var trigger = $('#'+base+'-trigger'); + var src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; +} + +function updateStripes() +{ + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); + $('table.directory tr'). + removeClass('odd').filter(':visible:odd').addClass('odd'); +} + +function toggleLevel(level) +{ + $('table.directory tr').each(function() { + var l = this.id.split('_').length-1; + var i = $('#img'+this.id.substring(3)); + var a = $('#arr'+this.id.substring(3)); + if (l + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/algorithms/execution_policy.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    execution_policy.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <span>
    +
    8#include <sycl/sycl.hpp>
    +
    9#include <vector>
    +
    10
    +
    11namespace dr::sp {
    +
    12
    + +
    14 device_policy(sycl::device device) : devices_({device}) {}
    +
    15 device_policy(sycl::queue queue) : devices_({queue.get_device()}) {}
    +
    16
    +
    17 device_policy() : devices_({sycl::queue{}.get_device()}) {}
    +
    18
    +
    19 template <rng::range R>
    +
    20 requires(std::is_same_v<rng::range_value_t<R>, sycl::device>)
    +
    21 device_policy(R &&devices)
    +
    22 : devices_(rng::begin(devices), rng::end(devices)) {}
    +
    23
    +
    24 std::span<sycl::device> get_devices() noexcept { return devices_; }
    +
    25
    +
    26 std::span<const sycl::device> get_devices() const noexcept {
    +
    27 return devices_;
    +
    28 }
    +
    29
    +
    30private:
    +
    31 std::vector<sycl::device> devices_;
    +
    32};
    +
    33
    +
    34} // namespace dr::sp
    +
    Definition: execution_policy.hpp:13
    +
    + + + + diff --git a/doxygen/files.html b/doxygen/files.html new file mode 100644 index 0000000000..1f663d86d2 --- /dev/null +++ b/doxygen/files.html @@ -0,0 +1,215 @@ + + + + + + + +Distributed Ranges: File List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    File List
    +
    +
    +
    Here is a list of all documented files with brief descriptions:
    +
    [detail level 123456]
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      include
      dr
      concepts
     concepts.hpp
      detail
     communicator.hpp
     enumerate.hpp
     format_shim.hpp
     index.hpp
     iterator_adaptor.hpp
     logger.hpp
     mdarray_shim.hpp
     mdspan_shim.hpp
     mdspan_utils.hpp
     memory.hpp
     normal_distributed_iterator.hpp
     onedpl_direct_iterator.hpp
     owning_view.hpp
     ranges.hpp
     ranges_shim.hpp
     ranges_utils.hpp
     remote_subrange.hpp
     segments_tools.hpp
     sycl_utils.hpp
     tuple_utils.hpp
     utils.hpp
     view_detectors.hpp
      mp
      algorithms
      containers
      views
     alignment.hpp
     allocator.hpp
     common_support.hpp
     global.hpp
     halo.hpp
     sycl_support.hpp
      sp
      algorithms
      containers
      util
      views
     allocators.hpp
     detail.hpp
     device_ptr.hpp
     device_ref.hpp
     device_span.hpp
     device_vector.hpp
     distributed_span.hpp
     distributed_vector.hpp
     future.hpp
     init.hpp
     range.hpp
     range_adaptors.hpp
     span.hpp
     util.hpp
     vector.hpp
     zip_view.hpp
      views
     iota.hpp
     transform.hpp
     views.hpp
     mp.hpp
     sp.hpp
      vendor
      source_location
     source_location.hpp
    +
    +
    + + + + diff --git a/doxygen/folderclosed.png b/doxygen/folderclosed.png new file mode 100644 index 0000000000000000000000000000000000000000..bb8ab35edce8e97554e360005ee9fc5bffb36e66 GIT binary patch literal 616 zcmV-u0+;=XP)a9#ETzayK)T~Jw&MMH>OIr#&;dC}is*2Mqdf&akCc=O@`qC+4i z5Iu3w#1M@KqXCz8TIZd1wli&kkl2HVcAiZ8PUn5z_kG@-y;?yK06=cA0U%H0PH+kU zl6dp}OR(|r8-RG+YLu`zbI}5TlOU6ToR41{9=uz^?dGTNL;wIMf|V3`d1Wj3y!#6` zBLZ?xpKR~^2x}?~zA(_NUu3IaDB$tKma*XUdOZN~c=dLt_h_k!dbxm_*ibDM zlFX`g{k$X}yIe%$N)cn1LNu=q9_CS)*>A zsX_mM4L@`(cSNQKMFc$RtYbx{79#j-J7hk*>*+ZZhM4Hw?I?rsXCi#mRWJ=-0LGV5a-WR0Qgt<|Nqf)C-@80`5gIz45^_20000IqP)X=#(TiCT&PiIIVc55T}TU}EUh*{q$|`3@{d>{Tc9Bo>e= zfmF3!f>fbI9#GoEHh0f`i5)wkLpva0ztf%HpZneK?w-7AK@b4Itw{y|Zd3k!fH?q2 zlhckHd_V2M_X7+)U&_Xcfvtw60l;--DgZmLSw-Y?S>)zIqMyJ1#FwLU*%bl38ok+! zh78H87n`ZTS;uhzAR$M`zZ`bVhq=+%u9^$5jDplgxd44}9;IRqUH1YHH|@6oFe%z( zo4)_>E$F&^P-f(#)>(TrnbE>Pefs9~@iN=|)Rz|V`sGfHNrJ)0gJb8xx+SBmRf@1l zvuzt=vGfI)<-F9!o&3l?>9~0QbUDT(wFdnQPv%xdD)m*g%!20>Bc9iYmGAp<9YAa( z0QgYgTWqf1qN++Gqp z8@AYPTB3E|6s=WLG?xw0tm|U!o=&zd+H0oRYE;Dbx+Na9s^STqX|Gnq%H8s(nGDGJ j8vwW|`Ts`)fSK|Kx=IK@RG@g200000NkvXXu0mjfauFEA literal 0 HcmV?d00001 diff --git a/doxygen/format__shim_8hpp_source.html b/doxygen/format__shim_8hpp_source.html new file mode 100644 index 0000000000..552633f4b1 --- /dev/null +++ b/doxygen/format__shim_8hpp_source.html @@ -0,0 +1,98 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/detail/format_shim.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    format_shim.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#ifdef DR_FORMAT
    +
    8#include <fmt/core.h>
    +
    9#include <fmt/ranges.h>
    +
    10#endif
    +
    11
    +
    12// Workaround for doxygen warning about internal inconsistency
    +
    13namespace fmt {}
    +
    + + + + diff --git a/doxygen/functions.html b/doxygen/functions.html new file mode 100644 index 0000000000..cf5b199cb4 --- /dev/null +++ b/doxygen/functions.html @@ -0,0 +1,92 @@ + + + + + + + +Distributed Ranges: Class Members + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all documented class members with links to the class documentation for each member:
    +
    + + + + diff --git a/doxygen/functions_func.html b/doxygen/functions_func.html new file mode 100644 index 0000000000..ea34bdb4d2 --- /dev/null +++ b/doxygen/functions_func.html @@ -0,0 +1,92 @@ + + + + + + + +Distributed Ranges: Class Members - Functions + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + + + + + diff --git a/doxygen/future_8hpp_source.html b/doxygen/future_8hpp_source.html new file mode 100644 index 0000000000..3cd2326250 --- /dev/null +++ b/doxygen/future_8hpp_source.html @@ -0,0 +1,134 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/future.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    future.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <memory>
    +
    8#include <sycl/sycl.hpp>
    +
    9
    +
    10#include <dr/sp/detail.hpp>
    +
    11
    +
    12namespace dr::sp {
    +
    13
    +
    14template <typename T, typename Event = sycl::event> class future {
    +
    15public:
    +
    16 using event_type = Event;
    +
    17
    +
    18 future(std::unique_ptr<T> &&value, const std::vector<Event> &events)
    +
    19 : value_(std::move(value)), events_(events) {}
    +
    20
    +
    21 future(T &&value, const std::vector<Event> &events)
    +
    22 : value_(new T(std::move(value))), events_(events) {}
    +
    23
    +
    24 void update(const Event &event) { events_.push_back(event); }
    +
    25
    +
    26 future(future &&) = default;
    +
    27 future &operator=(future &&) = default;
    +
    28
    +
    29 future(const future &) = delete;
    +
    30 future &operator=(const future &) = delete;
    +
    31
    +
    32 T get() {
    +
    33 wait();
    +
    34 return std::move(*value_);
    +
    35 }
    +
    36
    +
    37 std::vector<Event> events() const { return events_; }
    +
    38
    +
    39 T &value() const { return *value_; }
    +
    40
    +
    41 void wait() { __detail::wait(events_); }
    +
    42
    +
    43private:
    +
    44 std::unique_ptr<T> value_;
    +
    45 std::vector<Event> events_;
    +
    46};
    +
    47
    +
    48} // namespace dr::sp
    +
    Definition: future.hpp:14
    +
    + + + + diff --git a/doxygen/gemm_8hpp_source.html b/doxygen/gemm_8hpp_source.html new file mode 100644 index 0000000000..b92214222a --- /dev/null +++ b/doxygen/gemm_8hpp_source.html @@ -0,0 +1,333 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/algorithms/matrix/gemm.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    gemm.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <dr/sp/algorithms/matrix/local_gemm.hpp>
    +
    8#include <dr/sp/containers/distributed_dense_matrix.hpp>
    +
    9
    +
    10namespace dr::sp {
    +
    11
    +
    12template <typename T>
    +
    13void gemm(distributed_dense_matrix<T> &a, distributed_dense_matrix<T> &b,
    +
    14 distributed_dense_matrix<T> &c) {
    +
    15 gemm_buffered(a, b, c);
    +
    16}
    +
    17
    +
    18template <typename T>
    +
    19void gemm_inplace(distributed_dense_matrix<T> &a,
    +
    20 distributed_dense_matrix<T> &b,
    +
    21 distributed_dense_matrix<T> &c) {
    +
    22 // Matrix dimensions must match (algorithm requirement)
    +
    23 assert(c.shape()[0] == a.shape()[0]);
    +
    24 assert(c.shape()[1] == b.shape()[1]);
    +
    25 assert(a.shape()[1] == b.shape()[0]);
    +
    26
    +
    27 // Tile grid dimensions must match (implementation limitation)
    +
    28
    +
    29 assert(c.grid_shape()[0] == a.grid_shape()[0]);
    +
    30 assert(c.grid_shape()[1] == b.grid_shape()[1]);
    +
    31 assert(a.grid_shape()[1] == b.grid_shape()[0]);
    +
    32
    +
    33 std::vector<sycl::event> events;
    +
    34 events.reserve(c.grid_shape()[0] * c.grid_shape()[1] * a.grid_shape()[1]);
    +
    35
    +
    36 for (std::size_t i = 0; i < c.grid_shape()[0]; i++) {
    +
    37 for (std::size_t j = 0; j < c.grid_shape()[1]; j++) {
    +
    38 // For each tile of the output C matrix
    +
    39 auto &&c_tile = c.tile({i, j});
    +
    40
    +
    41 std::vector<sycl::event> local_events;
    +
    42 local_events.reserve(a.grid_shape()[1]);
    +
    43
    +
    44 std::size_t k_offset = i + j;
    +
    45 for (std::size_t k_ = 0; k_ < a.grid_shape()[1]; k_++) {
    +
    46 std::size_t k = (k_ + k_offset) % a.grid_shape()[1];
    +
    47
    +
    48 auto &&a_tile = a.tile({i, k});
    +
    49 auto &&b_tile = b.tile({k, j});
    +
    50
    +
    51 auto &&q = __detail::queue(dr::ranges::rank(c_tile));
    +
    52
    +
    53 auto e = __detail::local_gemm(q, __detail::local(a_tile),
    +
    54 __detail::local(b_tile),
    +
    55 __detail::local(c_tile), local_events);
    +
    56
    +
    57 local_events.push_back(e);
    +
    58 }
    +
    59
    +
    60 for (auto &&e : local_events) {
    +
    61 events.push_back(e);
    +
    62 }
    +
    63 }
    +
    64 }
    +
    65
    +
    66 __detail::wait(events);
    +
    67}
    +
    68
    +
    69template <typename T>
    +
    70void gemm_buffered(distributed_dense_matrix<T> &a,
    +
    71 distributed_dense_matrix<T> &b,
    +
    72 distributed_dense_matrix<T> &c) {
    +
    73 // Matrix dimensions must match (algorithm requirement)
    +
    74 assert(c.shape()[0] == a.shape()[0]);
    +
    75 assert(c.shape()[1] == b.shape()[1]);
    +
    76 assert(a.shape()[1] == b.shape()[0]);
    +
    77
    +
    78 // Tile grid dimensions must match (implementation limitation)
    +
    79
    +
    80 assert(c.grid_shape()[0] == a.grid_shape()[0]);
    +
    81 assert(c.grid_shape()[1] == b.grid_shape()[1]);
    +
    82 assert(a.grid_shape()[1] == b.grid_shape()[0]);
    +
    83
    +
    84 std::vector<std::thread> threads;
    +
    85
    +
    86 std::atomic<double> communication = 0;
    +
    87 std::atomic<double> compute = 0;
    +
    88
    +
    89 for (std::size_t i = 0; i < c.grid_shape()[0]; i++) {
    +
    90 for (std::size_t j = 0; j < c.grid_shape()[1]; j++) {
    +
    91 auto c_local = c.tile({i, j});
    +
    92
    +
    93 threads.emplace_back([c_local, i, j, &a, &b, &communication, &compute] {
    +
    94 auto &&q = __detail::queue(dr::ranges::rank(c_local));
    +
    95
    +
    96 std::size_t a_elem = a.tile_shape()[0] * a.tile_shape()[1];
    +
    97 std::size_t b_elem = b.tile_shape()[0] * b.tile_shape()[1];
    +
    98 std::size_t buffer_size = std::max(a_elem, b_elem);
    +
    99
    +
    100 dr::sp::device_allocator<T> gpu_allocator(q);
    +
    101 dr::sp::buffered_allocator buffered_allocator(gpu_allocator,
    +
    102 buffer_size, 2);
    +
    103 auto &&allocator = buffered_allocator;
    +
    104
    +
    105 std::size_t k_offset = i + j;
    +
    106
    +
    107 for (std::size_t k_ = 0; k_ < a.grid_shape()[1]; k_++) {
    +
    108 std::size_t k = (k_ + k_offset) % a.grid_shape()[1];
    +
    109
    +
    110 auto begin = std::chrono::high_resolution_clock::now();
    +
    111 auto a_tile = a.get_tile({i, k}, allocator);
    +
    112 auto b_tile = b.get_tile({k, j}, allocator);
    +
    113 auto end = std::chrono::high_resolution_clock::now();
    +
    114 double duration = std::chrono::duration<double>(end - begin).count();
    +
    115 communication += duration;
    +
    116
    +
    117 dr::sp::dense_matrix_view a_local(a_tile);
    +
    118 dr::sp::dense_matrix_view b_local(b_tile);
    +
    119
    +
    120 begin = std::chrono::high_resolution_clock::now();
    +
    121 __detail::local_gemm(q, __detail::local(a_local),
    +
    122 __detail::local(b_local),
    +
    123 __detail::local(c_local))
    +
    124 .wait();
    +
    125 end = std::chrono::high_resolution_clock::now();
    +
    126 duration = std::chrono::duration<double>(end - begin).count();
    +
    127 compute += duration;
    +
    128 }
    +
    129 });
    +
    130 }
    +
    131 }
    +
    132
    +
    133 for (auto &&t : threads) {
    +
    134 t.join();
    +
    135 }
    +
    136
    +
    137 bool debug_print = false;
    +
    138
    +
    139 if (debug_print) {
    +
    140 std::cout << "communication total: " << (double)communication << std::endl;
    +
    141 std::cout << "compute total: " << (double)compute << std::endl;
    +
    142 }
    +
    143}
    +
    144
    +
    145template <typename T>
    +
    146void gemm_buffered_async(distributed_dense_matrix<T> &a,
    +
    147 distributed_dense_matrix<T> &b,
    +
    148 distributed_dense_matrix<T> &c) {
    +
    149 // Matrix dimensions must match (algorithm requirement)
    +
    150 assert(c.shape()[0] == a.shape()[0]);
    +
    151 assert(c.shape()[1] == b.shape()[1]);
    +
    152 assert(a.shape()[1] == b.shape()[0]);
    +
    153
    +
    154 // Tile grid dimensions must match (implementation limitation)
    +
    155
    +
    156 assert(c.grid_shape()[0] == a.grid_shape()[0]);
    +
    157 assert(c.grid_shape()[1] == b.grid_shape()[1]);
    +
    158 assert(a.grid_shape()[1] == b.grid_shape()[0]);
    +
    159
    +
    160 std::vector<std::thread> threads;
    +
    161
    +
    162 std::atomic<double> issue = 0;
    +
    163 std::atomic<double> sync = 0;
    +
    164 std::atomic<double> compute = 0;
    +
    165
    +
    166 for (std::size_t i = 0; i < c.grid_shape()[0]; i++) {
    +
    167 for (std::size_t j = 0; j < c.grid_shape()[1]; j++) {
    +
    168 auto c_local = c.tile({i, j});
    +
    169
    +
    170 threads.emplace_back([c_local, i, j, &a, &b, &issue, &sync, &compute] {
    +
    171 auto &&q = __detail::queue(dr::ranges::rank(c_local));
    +
    172
    +
    173 std::size_t a_elem = a.tile_shape()[0] * a.tile_shape()[1];
    +
    174 std::size_t b_elem = b.tile_shape()[0] * b.tile_shape()[1];
    +
    175 std::size_t buffer_size = std::max(a_elem, b_elem);
    +
    176
    +
    177 dr::sp::device_allocator<T> gpu_allocator(q);
    +
    178 dr::sp::buffered_allocator buffered_allocator(gpu_allocator,
    +
    179 buffer_size, 4);
    +
    180 auto &&allocator = buffered_allocator;
    +
    181
    +
    182 std::size_t k_offset = i + j;
    +
    183
    +
    184 auto begin = std::chrono::high_resolution_clock::now();
    +
    185 auto a_f =
    +
    186 a.get_tile_async({i, k_offset % a.grid_shape()[1]}, allocator);
    +
    187 // a_f.wait();
    +
    188 auto b_f =
    +
    189 b.get_tile_async({k_offset % a.grid_shape()[1], j}, allocator);
    +
    190 // b_f.wait();
    +
    191 auto end = std::chrono::high_resolution_clock::now();
    +
    192 double duration = std::chrono::duration<double>(end - begin).count();
    +
    193 issue += duration;
    +
    194
    +
    195 for (std::size_t k_ = 0; k_ < a.grid_shape()[1]; k_++) {
    +
    196 std::size_t k = (k_ + k_offset) % a.grid_shape()[1];
    +
    197
    +
    198 auto begin = std::chrono::high_resolution_clock::now();
    +
    199 auto a_tile = a_f.get();
    +
    200 auto b_tile = b_f.get();
    +
    201 auto end = std::chrono::high_resolution_clock::now();
    +
    202 double duration = std::chrono::duration<double>(end - begin).count();
    +
    203 sync += duration;
    +
    204
    +
    205 dr::sp::dense_matrix_view a_local(a_tile);
    +
    206 dr::sp::dense_matrix_view b_local(b_tile);
    +
    207
    +
    208 if (k_ + 1 < a.grid_shape()[1]) {
    +
    209 begin = std::chrono::high_resolution_clock::now();
    +
    210 a_f = a.get_tile_async({i, (k + 1) % a.grid_shape()[1]}, allocator);
    +
    211 // a_f.wait();
    +
    212 b_f = b.get_tile_async({(k + 1) % a.grid_shape()[1], j}, allocator);
    +
    213 // b_f.wait();
    +
    214 end = std::chrono::high_resolution_clock::now();
    +
    215 duration = std::chrono::duration<double>(end - begin).count();
    +
    216 issue += duration;
    +
    217 }
    +
    218
    +
    219 begin = std::chrono::high_resolution_clock::now();
    +
    220 __detail::local_gemm(q, __detail::local(a_local),
    +
    221 __detail::local(b_local),
    +
    222 __detail::local(c_local))
    +
    223 .wait();
    +
    224 end = std::chrono::high_resolution_clock::now();
    +
    225 duration = std::chrono::duration<double>(end - begin).count();
    +
    226 compute += duration;
    +
    227 }
    +
    228 });
    +
    229 }
    +
    230 }
    +
    231
    +
    232 for (auto &&t : threads) {
    +
    233 t.join();
    +
    234 }
    +
    235
    +
    236 bool debug_print = false;
    +
    237
    +
    238 if (debug_print) {
    +
    239 std::cout << "sync total: " << (double)sync << std::endl;
    +
    240 std::cout << "issue total: " << (double)issue << std::endl;
    +
    241 std::cout << "compute total: " << (double)compute << std::endl;
    +
    242 }
    +
    243}
    +
    244
    +
    245} // namespace dr::sp
    +
    Definition: allocators.hpp:74
    +
    Definition: dense_matrix_view.hpp:21
    +
    Definition: allocators.hpp:20
    +
    + + + + diff --git a/doxygen/gemv_8hpp_source.html b/doxygen/gemv_8hpp_source.html new file mode 100644 index 0000000000..86a182f3d9 --- /dev/null +++ b/doxygen/gemv_8hpp_source.html @@ -0,0 +1,300 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/algorithms/matrix/gemv.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    gemv.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <dr/detail/index.hpp>
    +
    8#include <dr/detail/ranges_shim.hpp>
    +
    9
    +
    10#include <dr/sp/algorithms/matrix/local_gemv.hpp>
    +
    11#include <dr/sp/containers/duplicated_vector.hpp>
    +
    12#include <dr/sp/containers/sparse_matrix.hpp>
    +
    13#include <dr/sp/device_vector.hpp>
    +
    14#include <dr/sp/distributed_span.hpp>
    +
    15#include <dr/sp/util.hpp>
    +
    16
    +
    17namespace dr::sp {
    +
    18
    +
    19template <dr::distributed_range C, typename T, typename I,
    + +
    21void flat_gemv(C &&c, dr::sp::sparse_matrix<T, I> &a, B &&b) {
    +
    22 assert(a.shape()[0] == c.size());
    +
    23 assert(a.shape()[1] == b.size());
    +
    24 assert(a.grid_shape()[0] == c.segments().size());
    +
    25 assert(a.grid_shape()[1] == 1);
    +
    26
    +
    27 auto &&devices = dr::sp::devices();
    +
    28
    +
    29 using b_scalar_type = rng::range_value_t<B>;
    +
    30
    +
    31 using local_vector_type =
    +
    32 dr::sp::device_vector<b_scalar_type,
    + +
    34
    +
    35 std::vector<local_vector_type> local_b;
    +
    36 std::vector<sycl::event> copy_events;
    +
    37 std::vector<sycl::event> comp_events;
    +
    38
    +
    39 for (std::size_t i = 0; i < devices.size(); i++) {
    +
    40 dr::sp::device_allocator<T> allocator(dr::sp::context(), devices[i]);
    +
    41 local_b.push_back(local_vector_type(b.size(), allocator, i));
    +
    42 }
    +
    43
    +
    44 for (auto &&l_b : local_b) {
    +
    45 auto event =
    +
    46 dr::sp::copy_async(b.begin(), b.end(), dr::ranges::local(l_b.begin()));
    +
    47 copy_events.push_back(event);
    +
    48 }
    +
    49
    +
    50 for (std::size_t i = 0; i < a.grid_shape()[0]; i++) {
    +
    51 auto a_tile = a.tile(dr::index<I>(i, 0));
    +
    52
    +
    53 auto a_iter = a_tile.begin();
    +
    54 auto b_iter = dr::ranges::local(local_b[i].begin());
    +
    55 auto c_iter = dr::ranges::local(c.segments()[i].begin());
    +
    56
    +
    57 auto &&q = __detail::queue(a_tile.rank());
    +
    58
    +
    59 auto event = q.submit([&](auto &&h) {
    +
    60 h.depends_on(copy_events[a_tile.rank()]);
    +
    61 h.parallel_for(a_tile.size(), [=](auto idx) {
    +
    62 auto &&[index, a_v] = *(a_iter + idx);
    +
    63 auto &&[i, k] = index;
    +
    64 auto &&b_v = *(b_iter + k);
    +
    65 auto &&c_v = *(c_iter + i);
    +
    66 sycl::atomic_ref<T, sycl::memory_order::relaxed,
    +
    67 sycl::memory_scope::device>
    +
    68 c_ref(c_v);
    +
    69 c_ref += a_v * b_v;
    +
    70 });
    +
    71 });
    +
    72 comp_events.push_back(event);
    +
    73 }
    +
    74
    +
    75 __detail::wait(comp_events);
    +
    76}
    +
    77
    +
    78template <dr::distributed_range C, typename T, typename I,
    + +
    80void gemv(C &&c, dr::sp::sparse_matrix<T, I> &a, B &&b,
    +
    81 sp::duplicated_vector<rng::range_value_t<B>> &scratch) {
    +
    82 assert(a.shape()[0] == c.size());
    +
    83 assert(a.shape()[1] == b.size());
    +
    84 assert(a.grid_shape()[0] == c.segments().size());
    +
    85 assert(a.grid_shape()[1] == 1);
    +
    86
    +
    87 auto &&b_duplicated = scratch;
    +
    88
    +
    89 std::vector<sycl::event> copy_events;
    +
    90 std::vector<sycl::event> comp_events;
    +
    91 copy_events.reserve(sp::nprocs());
    +
    92 comp_events.reserve(a.grid_shape()[0]);
    +
    93
    +
    94 for (std::size_t i = 0; i < sp::nprocs(); i++) {
    +
    95 auto &&l_b = b_duplicated.local_vector(i);
    +
    96 auto event = dr::sp::copy_async(b.begin(), b.end(), l_b.begin());
    +
    97 copy_events.push_back(event);
    +
    98 }
    +
    99
    +
    100 for (std::size_t i = 0; i < a.grid_shape()[0]; i++) {
    +
    101 auto a_tile = a.tile(dr::index<I>(i, 0));
    +
    102
    +
    103 auto b_iter =
    +
    104 dr::ranges::local(b_duplicated.local_vector(a_tile.rank()).begin());
    +
    105 auto c_iter = dr::ranges::local(c.segments()[i].begin());
    +
    106
    +
    107 assert(c.segments()[i].size() == a_tile.shape()[0]);
    +
    108 auto &&q = __detail::queue(a_tile.rank());
    +
    109
    +
    110 auto event = __detail::local_gemv(q, a_tile, b_iter, c_iter,
    +
    111 {copy_events[a_tile.rank()]});
    +
    112 comp_events.push_back(event);
    +
    113 }
    +
    114
    +
    115 __detail::wait(comp_events);
    +
    116}
    +
    117
    +
    118template <dr::distributed_range C, typename T, typename I,
    + +
    120void gemv(C &&c, dr::sp::sparse_matrix<T, I> &a, B &&b) {
    + +
    122
    +
    123 gemv(c, a, b, b_duplicated);
    +
    124}
    +
    125
    +
    126template <dr::distributed_range C, typename T, typename I,
    + +
    128void gemv_square(C &&c, dr::sp::sparse_matrix<T, I> &a, B &&b) {
    +
    129 assert(a.shape()[0] == c.size());
    +
    130 assert(a.shape()[1] == b.size());
    +
    131 assert(a.grid_shape()[0] == c.segments().size());
    +
    132 assert(a.grid_shape()[1] == b.segments().size());
    +
    133
    +
    134 std::vector<sycl::event> events;
    +
    135
    +
    136 for (std::size_t i = 0; i < a.grid_shape()[0]; i++) {
    +
    137 std::size_t k_offset = i;
    +
    138 for (std::size_t k_ = 0; k_ < a.grid_shape()[1]; k_++) {
    +
    139 std::size_t k = (k_ + k_offset) % a.grid_shape()[1];
    +
    140 auto a_tile = a.tile(dr::index<I>(i, k));
    +
    141 auto b_segment = b.segments()[k];
    +
    142 auto c_segment = c.segments()[i];
    +
    143
    +
    144 auto b_iter = dr::ranges::local(b_segment.begin());
    +
    145 auto c_iter = dr::ranges::local(c_segment.begin());
    +
    146
    +
    147 auto &&q = __detail::queue(a_tile.rank());
    +
    148
    +
    149 auto event = __detail::custom_gemv(q, a_tile, b_iter, c_iter);
    +
    150 events.push_back(event);
    +
    151 }
    +
    152 }
    +
    153
    +
    154 __detail::wait(events);
    +
    155}
    +
    156
    +
    157template <dr::distributed_range C, typename T, typename I,
    + +
    159void gemv_square_copy(C &&c, dr::sp::sparse_matrix<T, I> &a, B &&b) {
    +
    160 assert(a.shape()[0] == c.size());
    +
    161 assert(a.shape()[1] == b.size());
    +
    162 assert(a.grid_shape()[0] == c.segments().size());
    +
    163 assert(a.grid_shape()[1] == b.segments().size());
    +
    164
    +
    165 auto &&devices = dr::sp::devices();
    +
    166
    +
    167 using b_scalar_type = rng::range_value_t<B>;
    +
    168
    +
    169 using local_vector_type =
    +
    170 dr::sp::device_vector<b_scalar_type,
    + +
    172
    +
    173 std::vector<local_vector_type> local_b;
    +
    174 std::vector<sycl::event> events;
    +
    175
    +
    176 local_b.reserve(a.grid_shape()[0]);
    +
    177
    +
    178 for (std::size_t i = 0; i < a.grid_shape()[0]; i++) {
    + +
    180 dr::sp::context(), devices[a.tile(dr::index<I>(i, 0)).rank()]);
    +
    181 local_b.emplace_back(b.size(), allocator,
    +
    182 a.tile(dr::index<I>(i, 0)).rank());
    +
    183 }
    +
    184
    +
    185 for (std::size_t i = 0; i < a.grid_shape()[0]; i++) {
    +
    186 std::size_t k_offset = i;
    +
    187 for (std::size_t k_ = 0; k_ < a.grid_shape()[1]; k_++) {
    +
    188 std::size_t k = (k_ + k_offset) % a.grid_shape()[1];
    +
    189 auto a_tile = a.tile({i, k});
    +
    190 auto b_iter = local_b[i].begin() + (k * a.tile_shape()[1]);
    +
    191 auto c_iter = c.segments()[i].begin();
    +
    192
    +
    193 auto &&b_segment = b.segments()[k];
    +
    194 auto &&q = __detail::queue(a_tile.rank());
    +
    195
    +
    196 auto ce =
    +
    197 dr::sp::copy_async(q, b_segment.begin(), b_segment.end(), b_iter);
    +
    198
    +
    199 auto event = __detail::custom_gemv(q, a_tile, b_iter.local(),
    +
    200 c_iter.local(), {ce});
    +
    201
    +
    202 events.push_back(event);
    +
    203 }
    +
    204 }
    +
    205
    +
    206 __detail::wait(events);
    +
    207}
    +
    208
    +
    209} // namespace dr::sp
    +
    Definition: index.hpp:34
    +
    Definition: allocators.hpp:20
    +
    Definition: device_vector.hpp:13
    +
    Definition: duplicated_vector.hpp:13
    +
    Definition: sparse_matrix.hpp:135
    +
    Definition: concepts.hpp:20
    +
    + + + + diff --git a/doxygen/generate__random_8hpp_source.html b/doxygen/generate__random_8hpp_source.html new file mode 100644 index 0000000000..5c23582aa0 --- /dev/null +++ b/doxygen/generate__random_8hpp_source.html @@ -0,0 +1,178 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/util/generate_random.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    generate_random.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <concepts>
    +
    8#include <dr/sp/views/csr_matrix_view.hpp>
    +
    9#include <map>
    +
    10#include <random>
    +
    11
    +
    12namespace dr::sp {
    +
    13
    +
    14namespace {
    +
    15
    +
    16template <typename T> struct uniform_distribution {
    +
    17 using type = std::uniform_int_distribution<T>;
    +
    18};
    +
    19
    +
    20template <std::floating_point T> struct uniform_distribution<T> {
    +
    21 using type = std::uniform_real_distribution<T>;
    +
    22};
    +
    23
    +
    24template <typename T>
    +
    25using uniform_distribution_t = typename uniform_distribution<T>::type;
    +
    26
    +
    27} // namespace
    +
    28
    +
    29template <typename T = float, std::integral I = std::size_t>
    +
    30auto generate_random_csr(dr::index<I> shape, double density = 0.01,
    +
    31 unsigned int seed = 0) {
    +
    32
    +
    33 assert(density >= 0.0 && density < 1.0);
    +
    34
    +
    35 std::map<std::pair<I, I>, T> tuples;
    +
    36
    +
    37 std::size_t nnz = density * shape[0] * shape[1];
    +
    38
    +
    39 std::mt19937 gen(seed);
    +
    40 std::uniform_int_distribution<I> row(0, shape[0] - 1);
    +
    41 std::uniform_int_distribution<I> column(0, shape[1] - 1);
    +
    42
    +
    43 uniform_distribution_t<T> value_gen(0, 1);
    +
    44
    +
    45 while (tuples.size() < nnz) {
    +
    46 auto i = row(gen);
    +
    47 auto j = column(gen);
    +
    48 if (tuples.find({i, j}) == tuples.end()) {
    +
    49 T value = value_gen(gen);
    +
    50 tuples.insert({{i, j}, value});
    +
    51 }
    +
    52 }
    +
    53
    +
    54 T *values = new T[nnz];
    +
    55 I *rowptr = new I[shape[0] + 1];
    +
    56 I *colind = new I[nnz];
    +
    57
    +
    58 rowptr[0] = 0;
    +
    59
    +
    60 std::size_t r = 0;
    +
    61 std::size_t c = 0;
    +
    62 for (auto iter = tuples.begin(); iter != tuples.end(); ++iter) {
    +
    63 auto &&[index, value] = *iter;
    +
    64 auto &&[i, j] = index;
    +
    65
    +
    66 values[c] = value;
    +
    67 colind[c] = j;
    +
    68
    +
    69 while (r < i) {
    +
    70 if (r + 1 > shape[0]) {
    +
    71 // TODO: exception?
    +
    72 // throw std::runtime_error("csr_matrix_impl_: given invalid matrix");
    +
    73 }
    +
    74 rowptr[r + 1] = c;
    +
    75 r++;
    +
    76 }
    +
    77 c++;
    +
    78
    +
    79 if (c > nnz) {
    +
    80 // TODO: exception?
    +
    81 // throw std::runtime_error("csr_matrix_impl_: given invalid matrix");
    +
    82 }
    +
    83 }
    +
    84
    +
    85 for (; r < shape[0]; r++) {
    +
    86 rowptr[r + 1] = nnz;
    +
    87 }
    +
    88
    +
    89 return csr_matrix_view(values, rowptr, colind, shape, nnz, 0);
    +
    90}
    +
    91
    +
    92} // namespace dr::sp
    +
    Definition: index.hpp:34
    +
    + + + + diff --git a/doxygen/global_8hpp_source.html b/doxygen/global_8hpp_source.html new file mode 100644 index 0000000000..edcbeb5d32 --- /dev/null +++ b/doxygen/global_8hpp_source.html @@ -0,0 +1,306 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/global.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    global.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7// File with initialization/cleanup functions, global objects created during
    +
    8// initialization and helper functions using these objects. For general helper
    +
    9// functions see sycl_support.hpp and common_support.hpp
    +
    10
    +
    11#include <unistd.h>
    +
    12
    +
    13#include <dr/detail/sycl_utils.hpp>
    +
    14#include <dr/mp/sycl_support.hpp>
    +
    15
    +
    16namespace dr::mp {
    +
    17
    +
    18namespace __detail {
    +
    19
    + +
    21 void init() {
    +
    22 void *data = nullptr;
    +
    23 std::size_t size = 0;
    +
    24 if (comm_.rank() == 0) {
    +
    25 root_scratchpad_.resize(scratchpad_size_);
    +
    26 data = root_scratchpad_.data();
    +
    27 size = rng::size(root_scratchpad_) * sizeof(root_scratchpad_[0]);
    +
    28 }
    +
    29 root_win_.create(comm_, data, size);
    +
    30 root_win_.fence();
    +
    31 }
    +
    32
    + +
    34 root_win_.fence();
    +
    35 root_win_.free();
    +
    36 }
    +
    37
    +
    38 global_context() { init(); }
    +
    39#ifdef SYCL_LANGUAGE_VERSION
    +
    40 global_context(sycl::queue q, sycl::usm::alloc kind)
    +
    41 : sycl_queue_(q), sycl_mem_kind_(kind), dpl_policy_(q), use_sycl_(true) {
    +
    42 init();
    +
    43 }
    +
    44
    +
    45 sycl::queue sycl_queue_;
    +
    46 sycl::usm::alloc sycl_mem_kind_;
    +
    47 decltype(oneapi::dpl::execution::make_device_policy(
    +
    48 std::declval<sycl::queue>())) dpl_policy_;
    +
    49#endif
    +
    50
    +
    51 static constexpr std::size_t scratchpad_size_ = 1000000;
    +
    52 bool use_sycl_ = false;
    +
    53 dr::communicator comm_;
    +
    54 // container owns the window, we just track MPI handle
    +
    55 std::set<MPI_Win> wins_;
    +
    56 dr::rma_window root_win_;
    +
    57 std::vector<char> root_scratchpad_;
    +
    58};
    +
    59
    +
    60inline global_context *global_context_ = nullptr;
    +
    61
    +
    62inline bool finalized_ = false;
    +
    63inline bool we_initialized_mpi_ = false;
    +
    64
    +
    65inline auto gcontext() {
    +
    66 assert(global_context_ && "Call mp::init() after MPI_Init()");
    +
    67 return global_context_;
    +
    68}
    +
    69
    +
    70// Initialize MPI if not already initialized.
    +
    71inline void initialize_mpi() {
    +
    72 int initialized;
    +
    73 MPI_Initialized(&initialized);
    +
    74 if (!initialized) {
    +
    75 DRLOG("initializing MPI");
    +
    76 MPI_Init(nullptr, nullptr);
    +
    77 we_initialized_mpi_ = true;
    +
    78 } else {
    +
    79 DRLOG("initializing MPI skipped - already initialized");
    +
    80 }
    +
    81
    +
    82#ifdef DRISHMEM
    +
    83 DRLOG("calling ishmem_init()");
    +
    84 ishmem_init();
    +
    85#endif
    +
    86}
    +
    87
    +
    88// Finalize MPI *if* we initialized it and it has not been finalized.
    +
    89inline void finalize_mpi() {
    +
    90 int finalized;
    +
    91 MPI_Finalized(&finalized);
    +
    92
    +
    93 if (we_initialized_mpi_ && !finalized) {
    +
    94 MPI_Finalize();
    +
    95 }
    +
    96
    +
    97#ifdef DRISHMEM
    +
    98 DRLOG("calling ishmem_finalize()");
    +
    99 ishmem_finalize();
    +
    100#endif
    +
    101}
    +
    102
    +
    103} // namespace __detail
    +
    104
    +
    105inline auto root_win() { return __detail::gcontext()->root_win_; }
    +
    106inline dr::communicator &default_comm() { return __detail::gcontext()->comm_; }
    +
    107
    +
    108inline bool finalized() { return __detail::finalized_; }
    +
    109inline std::size_t rank() { return default_comm().rank(); }
    +
    110inline std::size_t nprocs() { return default_comm().size(); } // dr-style ignore
    +
    111
    +
    112inline std::set<MPI_Win> &active_wins() { return __detail::gcontext()->wins_; }
    +
    113
    +
    114inline void barrier() { __detail::gcontext()->comm_.barrier(); }
    +
    115inline auto use_sycl() { return __detail::gcontext()->use_sycl_; }
    +
    116
    +
    117inline void fence() {
    +
    118#ifdef DRISHMEM
    +
    119 DRLOG("global fence in ISHMEM");
    +
    120 ishmem_fence();
    +
    121 DRLOG("global fence in ISHMEM finished");
    +
    122#endif
    +
    123 for (auto win : __detail::gcontext()->wins_) {
    +
    124 DRLOG("global fence, for window:{}", win);
    +
    125 MPI_Win_fence(0, win);
    +
    126 }
    +
    127 DRLOG("global fence finished");
    +
    128}
    +
    129
    +
    130inline void init() {
    +
    131 __detail::initialize_mpi();
    +
    132 assert(__detail::global_context_ == nullptr &&
    +
    133 "Do not call mp::init() more than once");
    +
    134 __detail::global_context_ = new __detail::global_context;
    +
    135}
    +
    136
    +
    137inline void finalize() {
    +
    138 assert(__detail::global_context_ != nullptr);
    +
    139 delete __detail::global_context_;
    +
    140 __detail::global_context_ = nullptr;
    +
    141 __detail::finalize_mpi();
    +
    142 __detail::finalized_ = true;
    +
    143}
    +
    144
    +
    145inline std::string hostname() {
    +
    146 constexpr std::size_t MH = 2048;
    +
    147 char buf[MH + 1];
    +
    148 gethostname(buf, MH);
    +
    149 return std::string(buf);
    +
    150}
    +
    151
    +
    152#ifdef SYCL_LANGUAGE_VERSION
    +
    153inline sycl::queue &sycl_queue() { return __detail::gcontext()->sycl_queue_; }
    +
    154inline auto sycl_mem_kind() { return __detail::gcontext()->sycl_mem_kind_; }
    +
    155inline auto dpl_policy() { return __detail::gcontext()->dpl_policy_; }
    +
    156
    +
    157inline sycl::queue select_queue(bool check_different_devices = false) {
    +
    158 std::vector<sycl::device> devices;
    +
    159
    +
    160 auto root_devices = sycl::platform().get_devices();
    +
    161
    +
    162 for (auto &&root_device : root_devices) {
    +
    163 dr::drlog.debug("Root device: {}\n",
    +
    164 root_device.get_info<sycl::info::device::name>());
    +
    165 if (dr::__detail::partitionable(root_device)) {
    +
    166 auto subdevices = root_device.create_sub_devices<
    +
    167 sycl::info::partition_property::partition_by_affinity_domain>(
    +
    168 sycl::info::partition_affinity_domain::numa);
    +
    169 assert(rng::size(subdevices) > 0);
    +
    170
    +
    171 for (auto &&subdevice : subdevices) {
    +
    172 dr::drlog.debug(" add subdevice: {}\n",
    +
    173 subdevice.get_info<sycl::info::device::name>());
    +
    174 devices.push_back(subdevice);
    +
    175 }
    +
    176 } else {
    +
    177 dr::drlog.debug(" add root device: {}\n",
    +
    178 root_device.get_info<sycl::info::device::name>());
    +
    179 devices.push_back(root_device);
    +
    180 }
    +
    181 }
    +
    182
    +
    183 assert(rng::size(devices) > 0);
    +
    184 const auto my_rank = dr::communicator(MPI_COMM_WORLD).rank();
    +
    185 assert(!check_different_devices || my_rank < rng::size(devices));
    +
    186
    +
    187 // Round robin assignment of devices to ranks
    +
    188 return sycl::queue(devices[my_rank % rng::size(devices)]);
    +
    189}
    +
    190
    +
    191inline void init(sycl::queue q,
    +
    192 sycl::usm::alloc kind = sycl::usm::alloc::shared) {
    +
    193 __detail::initialize_mpi();
    +
    194 assert(__detail::global_context_ == nullptr &&
    +
    195 "Do not call mp::init() more than once");
    +
    196 __detail::global_context_ = new __detail::global_context(q, kind);
    +
    197}
    +
    198
    +
    199template <typename Selector = decltype(sycl::default_selector_v)>
    +
    200inline void init(Selector &&selector = sycl::default_selector_v) {
    +
    201 __detail::initialize_mpi();
    +
    202 sycl::queue q = mp::select_queue();
    +
    203 init(q);
    +
    204}
    +
    205
    +
    206#else // SYCL_LANGUAGE_VERSION
    +
    207inline auto sycl_queue() {
    +
    208 assert(false);
    +
    209 return 0;
    +
    210}
    +
    211inline const auto &dpl_policy() {
    +
    212 assert(false);
    +
    213 return std::execution::seq;
    +
    214}
    +
    215
    +
    216#endif // SYCL_LANGUAGE_VERSION
    +
    217
    +
    218} // namespace dr::mp
    +
    Definition: communicator.hpp:13
    +
    Definition: communicator.hpp:230
    +
    Definition: global.hpp:20
    +
    + + + + diff --git a/doxygen/graph_legend.html b/doxygen/graph_legend.html new file mode 100644 index 0000000000..e0d50dc038 --- /dev/null +++ b/doxygen/graph_legend.html @@ -0,0 +1,141 @@ + + + + + + + +Distributed Ranges: Graph Legend + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Graph Legend
    +
    +
    +

    This page explains how to interpret the graphs that are generated by doxygen.

    +

    Consider the following example:

    /*! Invisible class because of truncation */
    +
    class Invisible { };
    +
    +
    /*! Truncated class, inheritance relation is hidden */
    +
    class Truncated : public Invisible { };
    +
    +
    /* Class not documented with doxygen comments */
    +
    class Undocumented { };
    +
    +
    /*! Class that is inherited using public inheritance */
    +
    class PublicBase : public Truncated { };
    +
    +
    /*! A template class */
    +
    template<class T> class Templ { };
    +
    +
    /*! Class that is inherited using protected inheritance */
    +
    class ProtectedBase { };
    +
    +
    /*! Class that is inherited using private inheritance */
    +
    class PrivateBase { };
    +
    +
    /*! Class that is used by the Inherited class */
    +
    class Used { };
    +
    +
    /*! Super class that inherits a number of other classes */
    +
    class Inherited : public PublicBase,
    +
    protected ProtectedBase,
    +
    private PrivateBase,
    +
    public Undocumented,
    +
    public Templ<int>
    +
    {
    +
    private:
    +
    Used *m_usedClass;
    +
    };
    +

    This will result in the following graph:

    +

    The boxes in the above graph have the following meaning:

    +
      +
    • +A filled gray box represents the struct or class for which the graph is generated.
    • +
    • +A box with a black border denotes a documented struct or class.
    • +
    • +A box with a gray border denotes an undocumented struct or class.
    • +
    • +A box with a red border denotes a documented struct or class forwhich not all inheritance/containment relations are shown. A graph is truncated if it does not fit within the specified boundaries.
    • +
    +

    The arrows have the following meaning:

    +
      +
    • +A blue arrow is used to visualize a public inheritance relation between two classes.
    • +
    • +A dark green arrow is used for protected inheritance.
    • +
    • +A dark red arrow is used for private inheritance.
    • +
    • +A purple dashed arrow is used if a class is contained or used by another class. The arrow is labelled with the variable(s) through which the pointed class or struct is accessible.
    • +
    • +A yellow dashed arrow denotes a relation between a template instance and the template class it was instantiated from. The arrow is labelled with the template parameters of the instance.
    • +
    +
    + + + + diff --git a/doxygen/graph_legend.md5 b/doxygen/graph_legend.md5 new file mode 100644 index 0000000000..76a6899d6e --- /dev/null +++ b/doxygen/graph_legend.md5 @@ -0,0 +1 @@ +68a0ee42d4e53d2fb70be66ebb5b1abe \ No newline at end of file diff --git a/doxygen/graph_legend.png b/doxygen/graph_legend.png new file mode 100644 index 0000000000000000000000000000000000000000..a235eb6ca74ecfcbd656597c72d38d2018ee5d46 GIT binary patch literal 22495 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 f$$vfcH}1PoCJO$(FUNwS13yz^D%;#5==n>) literal 0 HcmV?d00001 diff --git a/doxygen/halo_8hpp_source.html b/doxygen/halo_8hpp_source.html new file mode 100644 index 0000000000..23ceac04fd --- /dev/null +++ b/doxygen/halo_8hpp_source.html @@ -0,0 +1,528 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/halo.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    halo.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <dr/mp/global.hpp>
    +
    8#include <dr/mp/sycl_support.hpp>
    +
    9
    +
    10namespace dr::mp {
    +
    11
    +
    12enum class halo_tag {
    +
    13 invalid,
    +
    14 forward,
    +
    15 reverse,
    +
    16 index,
    +
    17};
    +
    18
    +
    19template <typename Group> class halo_impl {
    +
    20 using T = typename Group::element_type;
    +
    21 using Memory = typename Group::memory_type;
    +
    22
    +
    23public:
    +
    24 using group_type = Group;
    +
    25
    +
    26 // Destructor frees buffer_, so cannot copy
    +
    27 halo_impl(const halo_impl &) = delete;
    +
    28 halo_impl operator=(const halo_impl &) = delete;
    +
    29
    +
    31 halo_impl(communicator comm, const std::vector<Group> &owned_groups,
    +
    32 const std::vector<Group> &halo_groups,
    +
    33 const Memory &memory = Memory())
    +
    34 : comm_(comm), halo_groups_(halo_groups), owned_groups_(owned_groups),
    +
    35 memory_(memory) {
    +
    36 DRLOG("Halo constructed with {}/{} owned/halo", rng::size(owned_groups),
    +
    37 rng::size(halo_groups));
    +
    38 buffer_size_ = 0;
    +
    39 std::size_t i = 0;
    +
    40 std::vector<std::size_t> buffer_index;
    +
    41 for (auto &g : owned_groups_) {
    +
    42 buffer_index.push_back(buffer_size_);
    +
    43 g.request_index = i++;
    +
    44 buffer_size_ += g.buffer_size();
    +
    45 map_.push_back(&g);
    +
    46 }
    +
    47 for (auto &g : halo_groups_) {
    +
    48 buffer_index.push_back(buffer_size_);
    +
    49 g.request_index = i++;
    +
    50 buffer_size_ += g.buffer_size();
    +
    51 map_.push_back(&g);
    +
    52 }
    +
    53 buffer_ = memory_.allocate(buffer_size_);
    +
    54 assert(buffer_ != nullptr);
    +
    55 i = 0;
    +
    56 for (auto &g : owned_groups_) {
    +
    57 g.buffer = &buffer_[buffer_index[i++]];
    +
    58 }
    +
    59 for (auto &g : halo_groups_) {
    +
    60 g.buffer = &buffer_[buffer_index[i++]];
    +
    61 }
    +
    62 requests_.resize(i);
    +
    63 }
    +
    64
    + +
    67 DRLOG("Halo exchange receiving");
    +
    68 receive(halo_groups_);
    +
    69 DRLOG("Halo exchange sending");
    +
    70 send(owned_groups_);
    +
    71 DRLOG("Halo exchange begin finished");
    +
    72 }
    +
    73
    + +
    76 DRLOG("Halo exchange finalize started");
    + +
    78 DRLOG("Halo exchange finalize finished");
    +
    79 }
    +
    80
    +
    81 void exchange() {
    + + +
    84 }
    +
    85
    +
    87 void reduce_begin() {
    +
    88 receive(owned_groups_);
    +
    89 send(halo_groups_);
    +
    90 }
    +
    91
    +
    93 void reduce_finalize(const auto &op) {
    +
    94 for (int pending = rng::size(requests_); pending > 0; pending--) {
    +
    95 int completed;
    +
    96 MPI_Waitany(rng::size(requests_), requests_.data(), &completed,
    +
    97 MPI_STATUS_IGNORE);
    +
    98 DRLOG("reduce_finalize(op) waitany completed: {}", completed);
    +
    99 auto &g = *map_[completed];
    +
    100 if (g.receive && g.buffered) {
    +
    101 g.unpack(op);
    +
    102 }
    +
    103 }
    +
    104 }
    +
    105
    + +
    108 for (int pending = rng::size(requests_); pending > 0; pending--) {
    +
    109 int completed;
    +
    110 MPI_Waitany(rng::size(requests_), requests_.data(), &completed,
    +
    111 MPI_STATUS_IGNORE);
    +
    112 DRLOG("reduce_finalize() waitany completed: {}", completed);
    +
    113 auto &g = *map_[completed];
    +
    114 if (g.receive && g.buffered) {
    +
    115 g.unpack();
    +
    116 }
    +
    117 }
    +
    118 }
    +
    119
    +
    120 struct second_op {
    +
    121 T operator()(T &a, T &b) const { return b; }
    +
    122 } second;
    +
    123
    +
    124 struct plus_op {
    +
    125 T operator()(T &a, T &b) const { return a + b; }
    +
    126 } plus;
    +
    127
    +
    128 struct max_op {
    +
    129 T operator()(T &a, T &b) const { return std::max(a, b); }
    +
    130 } max;
    +
    131
    +
    132 struct min_op {
    +
    133 T operator()(T &a, T &b) const { return std::min(a, b); }
    +
    134 } min;
    +
    135
    + +
    137 T operator()(T &a, T &b) const { return a * b; }
    +
    138 } multiplies;
    +
    139
    +
    140 ~halo_impl() {
    +
    141 if (buffer_) {
    +
    142 memory_.deallocate(buffer_, buffer_size_);
    +
    143 buffer_ = nullptr;
    +
    144 }
    +
    145 }
    +
    146
    +
    147private:
    +
    148 void send(std::vector<Group> &sends) {
    +
    149 for (auto &g : sends) {
    +
    150 g.pack();
    +
    151 g.receive = false;
    +
    152 DRLOG("sending: {}", g.request_index);
    +
    153 comm_.isend(g.data_pointer(), g.data_size(), g.rank(), g.tag(),
    +
    154 &requests_[g.request_index]);
    +
    155 }
    +
    156 }
    +
    157
    +
    158 void receive(std::vector<Group> &receives) {
    +
    159 for (auto &g : receives) {
    +
    160 g.receive = true;
    +
    161 DRLOG("receiving: {}", g.request_index);
    +
    162 comm_.irecv(g.data_pointer(), g.data_size(), g.rank(), g.tag(),
    +
    163 &requests_[g.request_index]);
    +
    164 }
    +
    165 }
    +
    166
    +
    167 communicator comm_;
    +
    168 std::vector<Group> halo_groups_, owned_groups_;
    +
    169 T *buffer_ = nullptr;
    +
    170 std::size_t buffer_size_;
    +
    171 std::vector<MPI_Request> requests_;
    +
    172 std::vector<Group *> map_;
    +
    173 Memory memory_;
    +
    174};
    +
    175
    +
    176template <typename T, typename Memory = default_memory<T>> class index_group {
    +
    177public:
    +
    178 using element_type = T;
    +
    179 using memory_type = Memory;
    +
    180 T *buffer = nullptr;
    +
    181 std::size_t request_index;
    +
    182 bool receive;
    +
    183 bool buffered;
    +
    184
    +
    186 index_group(T *data, std::size_t rank,
    +
    187 const std::vector<std::size_t> &indices, const Memory &memory)
    +
    188 : memory_(memory), data_(data), rank_(rank) {
    +
    189 buffered = false;
    +
    190 for (std::size_t i = 0; i < rng::size(indices) - 1; i++) {
    +
    191 buffered = buffered || (indices[i + 1] - indices[i] != 1);
    +
    192 }
    +
    193 indices_size_ = rng::size(indices);
    +
    194 indices_ = memory_.template allocate<std::size_t>(indices_size_);
    +
    195 assert(indices_ != nullptr);
    +
    196 memory_.memcpy(indices_, indices.data(),
    +
    197 indices_size_ * sizeof(std::size_t));
    +
    198 }
    +
    199
    +
    200 index_group(const index_group &o)
    +
    201 : buffer(o.buffer), request_index(o.request_index), receive(o.receive),
    +
    202 buffered(o.buffered), memory_(o.memory_), data_(o.data_),
    +
    203 rank_(o.rank_), indices_size_(o.indices_size_), tag_(o.tag_) {
    +
    204 indices_ = memory_.template allocate<std::size_t>(indices_size_);
    +
    205 assert(indices_ != nullptr);
    +
    206 memory_.memcpy(indices_, o.indices_, indices_size_ * sizeof(std::size_t));
    +
    207 }
    +
    208
    +
    209 void unpack(const auto &op) {
    +
    210 T *dpt = data_;
    +
    211 auto n = indices_size_;
    +
    212 auto *ipt = indices_;
    +
    213 auto *b = buffer;
    +
    214 memory_.offload([=]() {
    +
    215 for (std::size_t i = 0; i < n; i++) {
    +
    216 dpt[ipt[i]] = op(dpt[ipt[i]], b[i]);
    +
    217 }
    +
    218 });
    +
    219 }
    +
    220
    +
    221 void pack() {
    +
    222 T *dpt = data_;
    +
    223 auto n = indices_size_;
    +
    224 auto *ipt = indices_;
    +
    225 auto *b = buffer;
    +
    226 memory_.offload([=]() {
    +
    227 for (std::size_t i = 0; i < n; i++) {
    +
    228 b[i] = dpt[ipt[i]];
    +
    229 }
    +
    230 });
    +
    231 }
    +
    232
    +
    233 std::size_t buffer_size() {
    +
    234 if (buffered) {
    +
    235 return indices_size_;
    +
    236 }
    +
    237 return 0;
    +
    238 }
    +
    239
    +
    240 T *data_pointer() {
    +
    241 if (buffered) {
    +
    242 return buffer;
    +
    243 } else {
    +
    244 return &data_[indices_[0]];
    +
    245 }
    +
    246 }
    +
    247
    +
    248 std::size_t data_size() { return indices_size_; }
    +
    249
    +
    250 std::size_t rank() { return rank_; }
    +
    251 auto tag() { return tag_; }
    +
    252
    +
    253 ~index_group() {
    +
    254 if (indices_) {
    +
    255 memory_.template deallocate<std::size_t>(indices_, indices_size_);
    +
    256 indices_ = nullptr;
    +
    257 }
    +
    258 }
    +
    259
    +
    260private:
    +
    261 Memory memory_;
    +
    262 T *data_ = nullptr;
    +
    263 std::size_t rank_;
    +
    264 std::size_t indices_size_;
    +
    265 std::size_t *indices_;
    +
    266 halo_tag tag_ = halo_tag::index;
    +
    267};
    +
    268
    +
    269template <typename T, typename Memory>
    +
    270using unstructured_halo_impl = halo_impl<index_group<T, Memory>>;
    +
    271
    +
    272template <typename T, typename Memory = default_memory<T>>
    +
    273class unstructured_halo : public unstructured_halo_impl<T, Memory> {
    +
    274public:
    + +
    276 using index_map = std::pair<std::size_t, std::vector<std::size_t>>;
    +
    277
    + +
    282 const std::vector<index_map> &owned,
    +
    283 const std::vector<index_map> &halo,
    +
    284 const Memory &memory = Memory())
    +
    285 : unstructured_halo_impl<T, Memory>(
    +
    286 comm, make_groups(comm, data, owned, memory),
    +
    287 make_groups(comm, data, halo, memory), memory) {}
    +
    288
    +
    289private:
    +
    290 static std::vector<group_type> make_groups(communicator comm, T *data,
    +
    291 const std::vector<index_map> &map,
    +
    292 const Memory &memory) {
    +
    293 std::vector<group_type> groups;
    +
    294 for (auto const &[rank, indices] : map) {
    +
    295 groups.emplace_back(data, rank, indices, memory);
    +
    296 }
    +
    297 return groups;
    +
    298 }
    +
    299};
    +
    300
    +
    301template <typename T, typename Memory = default_memory<T>> class span_group {
    +
    302public:
    +
    303 using element_type = T;
    +
    304 using memory_type = Memory;
    +
    305 T *buffer = nullptr;
    +
    306 std::size_t request_index = 0;
    +
    307 bool receive = false;
    +
    308 bool buffered = false;
    +
    309
    +
    310 span_group(std::span<T> data, std::size_t rank, halo_tag tag)
    +
    311 : data_(data), rank_(rank), tag_(tag) {
    +
    312#ifdef SYCL_LANGUAGE_VERSION
    +
    313 if (use_sycl() && sycl_mem_kind() == sycl::usm::alloc::shared) {
    +
    314 buffered = true;
    +
    315 }
    +
    316#endif
    +
    317 }
    +
    318
    +
    319 void unpack() {
    +
    320 if (buffered) {
    +
    321 if (mp::use_sycl()) {
    +
    322 __detail::sycl_copy(buffer, buffer + rng::size(data_), data_.data());
    +
    323 } else {
    +
    324 std::copy(buffer, buffer + rng::size(data_), data_.data());
    +
    325 }
    +
    326 }
    +
    327 }
    +
    328
    +
    329 void pack() {
    +
    330 if (buffered) {
    +
    331 if (mp::use_sycl()) {
    +
    332 __detail::sycl_copy(data_.data(), data_.data() + rng::size(data_),
    +
    333 buffer);
    +
    334 } else {
    +
    335 std::copy(data_.begin(), data_.end(), buffer);
    +
    336 }
    +
    337 }
    +
    338 }
    +
    339 std::size_t buffer_size() { return rng::size(data_); }
    +
    340
    +
    341 std::size_t data_size() { return rng::size(data_); }
    +
    342
    +
    343 T *data_pointer() {
    +
    344 if (buffered) {
    +
    345 return buffer;
    +
    346 } else {
    +
    347 return data_.data();
    +
    348 }
    +
    349 }
    +
    350
    +
    351 std::size_t rank() { return rank_; }
    +
    352
    +
    353 auto tag() { return tag_; }
    +
    354
    +
    355private:
    +
    356 Memory memory_;
    +
    357 std::span<T> data_;
    +
    358 std::size_t rank_;
    +
    359 halo_tag tag_ = halo_tag::invalid;
    +
    360};
    +
    361
    + +
    363 std::size_t prev = 0, next = 0;
    +
    364 bool periodic = false;
    +
    365};
    +
    366
    +
    367template <typename T, typename Memory>
    + +
    369
    +
    370template <typename T, typename Memory = default_memory<T>>
    +
    371class span_halo : public span_halo_impl<T, Memory> {
    +
    372public:
    + +
    374
    + +
    376
    +
    377 span_halo(communicator comm, T *data, std::size_t size, halo_bounds hb)
    +
    378 : span_halo_impl<T, Memory>(comm, owned_groups(comm, {data, size}, hb),
    +
    379 halo_groups(comm, {data, size}, hb)) {
    +
    380 check(size, hb);
    +
    381 }
    +
    382
    +
    383 span_halo(communicator comm, std::span<T> span, halo_bounds hb)
    +
    384 : span_halo_impl<T, Memory>(comm, owned_groups(comm, span, hb),
    +
    385 halo_groups(comm, span, hb)) {}
    +
    386
    +
    387private:
    +
    388 void check(auto size, auto hb) {
    +
    389 assert(size >= hb.prev + hb.next + std::max(hb.prev, hb.next));
    +
    390 }
    +
    391
    +
    392 static std::vector<group_type>
    +
    393 owned_groups(communicator comm, std::span<T> span, halo_bounds hb) {
    +
    394 std::vector<group_type> owned;
    +
    395 DRLOG("owned groups {}/{} first/last", comm.first(), comm.last());
    +
    396 if (hb.next > 0 && (hb.periodic || !comm.first())) {
    +
    397 owned.emplace_back(span.subspan(hb.prev, hb.next), comm.prev(),
    +
    398 halo_tag::reverse);
    +
    399 }
    +
    400 if (hb.prev > 0 && (hb.periodic || !comm.last())) {
    +
    401 owned.emplace_back(
    +
    402 span.subspan(rng::size(span) - (hb.prev + hb.next), hb.prev),
    +
    403 comm.next(), halo_tag::forward);
    +
    404 }
    +
    405 return owned;
    +
    406 }
    +
    407
    +
    408 static std::vector<group_type>
    +
    409 halo_groups(communicator comm, std::span<T> span, halo_bounds hb) {
    +
    410 std::vector<group_type> halo;
    +
    411 if (hb.prev > 0 && (hb.periodic || !comm.first())) {
    +
    412 halo.emplace_back(span.first(hb.prev), comm.prev(), halo_tag::forward);
    +
    413 }
    +
    414 if (hb.next > 0 && (hb.periodic || !comm.last())) {
    +
    415 halo.emplace_back(span.last(hb.next), comm.next(), halo_tag::reverse);
    +
    416 }
    +
    417 return halo;
    +
    418 }
    +
    419};
    +
    420
    +
    421} // namespace dr::mp
    +
    422
    +
    423#ifdef DR_FORMAT
    +
    424
    +
    425template <>
    +
    426struct fmt::formatter<dr::mp::halo_bounds> : formatter<string_view> {
    +
    427 template <typename FmtContext>
    +
    428 auto format(dr::mp::halo_bounds hb, FmtContext &ctx) {
    +
    429 return fmt::format_to(ctx.out(), "prev: {} next: {}", hb.prev, hb.next);
    +
    430 }
    +
    431};
    +
    432
    +
    433#endif
    +
    Definition: communicator.hpp:13
    +
    Definition: halo.hpp:19
    +
    void reduce_finalize(const auto &op)
    Complete a halo reduction.
    Definition: halo.hpp:93
    +
    void reduce_begin()
    Begin a halo reduction.
    Definition: halo.hpp:87
    +
    void reduce_finalize()
    Complete a halo reduction.
    Definition: halo.hpp:107
    +
    void exchange_begin()
    Begin a halo exchange.
    Definition: halo.hpp:66
    +
    halo_impl(communicator comm, const std::vector< Group > &owned_groups, const std::vector< Group > &halo_groups, const Memory &memory=Memory())
    halo constructor
    Definition: halo.hpp:31
    +
    void exchange_finalize()
    Complete a halo exchange.
    Definition: halo.hpp:75
    +
    Definition: halo.hpp:176
    +
    index_group(T *data, std::size_t rank, const std::vector< std::size_t > &indices, const Memory &memory)
    Constructor.
    Definition: halo.hpp:186
    +
    Definition: halo.hpp:301
    +
    Definition: halo.hpp:371
    +
    Definition: halo.hpp:273
    +
    unstructured_halo(communicator comm, T *data, const std::vector< index_map > &owned, const std::vector< index_map > &halo, const Memory &memory=Memory())
    Definition: halo.hpp:281
    +
    Definition: halo.hpp:362
    +
    Definition: halo.hpp:128
    +
    Definition: halo.hpp:132
    +
    Definition: halo.hpp:136
    +
    Definition: halo.hpp:124
    +
    Definition: halo.hpp:120
    +
    + + + + diff --git a/doxygen/hierarchy.html b/doxygen/hierarchy.html new file mode 100644 index 0000000000..3e14b193d4 --- /dev/null +++ b/doxygen/hierarchy.html @@ -0,0 +1,236 @@ + + + + + + + +Distributed Ranges: Class Hierarchy + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Class Hierarchy
    +
    +
    +
    +

    Go to the graphical class hierarchy

    +This inheritance list is sorted roughly, but not completely, alphabetically:
    +
    [detail level 123]
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     Cdr::mp::__detail::allocator< T >
     Cdr::mp::__detail::any
     CBaseSegment
     Cdr::mp::__detail::buffer< T >
     Cdr::sp::buffered_allocator< Allocator >
     Cdr::communicator
     Cdr::sp::__detail::coo_matrix< T, I, Allocator >
     Cdr::mp::count_fn_
     Cdr::mp::count_if_fn_
     Cdr::sp::csr_matrix_view_accessor< T, I, TIter, IIter >
     Cdr::default_memory< T >
     Cdr::sp::dense_matrix< T, Allocator >
     Cdr::sp::dense_matrix_accessor< T, Iter >
     Cdr::sp::dense_matrix_column_accessor< T, Iter >
     Cdr::sp::dense_matrix_column_view< T, Iter >
     Cdr::sp::dense_matrix_row_accessor< T, Iter >
     Cdr::sp::dense_matrix_row_view< T, Iter >
     Cdr::sp::device_allocator< T, Alignment >
     Cdr::mp::device_policy
     Cdr::sp::device_policy
     Cdr::sp::device_ptr< T >
     Cdr::sp::device_ref< T >
     Cdr::__detail::direct_iterator< Iter >
     Cdr::sp::distributed_dense_matrix< T >
     Cdr::sp::distributed_dense_matrix_accessor< T, L >
     Cdr::mp::distributed_mdarray< T, Rank >
     Cdr::sp::distributed_range_accessor< Segments >
     Cdr::sp::distributed_span_accessor< T, L >
     Cdr::mp::distributed_vector< T, BackendT >Distributed vector
     Cdr::sp::distributed_vector< T, Allocator >Distributed vector
     Cdr::sp::distributed_vector_accessor< T, L >
     Cdr::mp::distribution
     Cdr::sp::duplicated_vector< T, Allocator >
     Cdr::mp::dv_segment< DV >
     Cdr::mp::dv_segment_iterator< DV >
     Cdr::mp::dv_segment_reference< DV >
     Cdr::__detail::enumerate_adapter_closure
     Cdr::mp::views::enumerate_adapter_closure
     Cdr::sp::views::enumerate_adapter_closure
     Cdr::__detail::enumerate_fn_
     Cdr::mp::views::enumerate_fn_
     Cdr::sp::views::enumerate_fn_
     Cdr::__detail::event
     Cstd::false_type
     Cformatter
     Cdr::sp::future< T, Event >
     Cdr::mp::__detail::global_context
     Cdr::mp::halo_bounds
     Cdr::mp::halo_impl< Group >
     Cdr::sp::id< dimensions >
     Cdr::index< T >
     Cdr::index< I >
     Cdr::index< std::int64_t >
     Cdr::index< std::size_t >
     Cdr::mp::index_group< T, Memory >
     Cintegral_constant
     Cdr::views::iota_fn_
     Cdr::mp::distributed_vector< T, BackendT >::iterator
     Cdr::iterator_adaptor< Accessor >
     Cdr::ranges::__detail::local_fn_
     Cdr::logger
     Cdr::sp::matrix_entry< T, I >
     Cdr::sp::matrix_partition
     Cdr::sp::matrix_ref< T, I, TRef >
     Cdr::mp::halo_impl< Group >::max_op
     CMdspan
     Cdr::mp::views::mdspan_adapter_closure< Rank >
     Cdr::mp::views::mdspan_fn_
     Cdr::__detail::mdspan_iter_accessor< Iter >
     Cdr::mp::halo_impl< Group >::min_op
     Cdr::mp::MpiBackend
     Cdr::mp::halo_impl< Group >::multiplies_op
     Cdr::normal_distributed_iterator_accessor< V >
     Cdr::mp::halo_impl< Group >::plus_op
     Cdr::mp::views::__detail::range_size< R >
     Cdr::mp::views::__detail::range_size< R >
     Cdr::sp::device_allocator< T, Alignment >::rebind< U >
     Cdr::rma_window
     Cdr::mp::halo_impl< Group >::second_op
     Cdr::sp::segment_range< dimensions >
     Cdr::sp::segment_range_accessor
     Cdr::mp::segmented_view_iterator< BaseIter, SegTplIter, SegTplSentinel >
     Cdr::sp::views::slice_adaptor_closure
     Cdr::mp::views::__detail::sliding_fn
     Cnostd::source_location
     Cdr::mp::span_group< T, Memory >
     Cdr::sp::sparse_matrix< T, I >
     Cdr::mp::views::submdspan_adapter_closure< Extents >
     Cdr::mp::views::submdspan_fn_
     Cranges::subrange
     Cdr::mp::subrange_iterator< DM >
     Cdr::timer
     Cdr::mp::__detail::tmp_buffer< T >
     Cdr::views::transform_adapter_closure< F >
     Cdr::views::transform_fn_
     Cdr::transform_iterator< Iter, F >
     Cstd::true_type
     Ctuple_element
     Cdr::sp::__detail::tuple_or_pair< Args >
     Cdr::sp::__detail::tuple_or_pair< T, U >
     Cdr::sp::vector< T, Allocator >
     Cdr::sp::vector< T, Allocator >
     Cranges::view_interface
     Cdr::sp::zip_accessor< Iters >
     Cdr::mp::zip_iterator< RngIter, BaseIters >
    +
    +
    + + + + diff --git a/doxygen/inclusive__exclusive__scan__impl_8hpp_source.html b/doxygen/inclusive__exclusive__scan__impl_8hpp_source.html new file mode 100644 index 0000000000..6591f3639d --- /dev/null +++ b/doxygen/inclusive__exclusive__scan__impl_8hpp_source.html @@ -0,0 +1,314 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/algorithms/inclusive_exclusive_scan_impl.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    inclusive_exclusive_scan_impl.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#ifdef SYCL_LANGUAGE_VERSION
    +
    8#include <oneapi/dpl/async>
    +
    9#endif
    +
    10
    +
    11#include <dr/detail/sycl_utils.hpp>
    +
    12
    +
    13namespace dr::mp::__detail {
    +
    14
    +
    15namespace detail = dr::__detail;
    +
    16
    +
    17}
    +
    18
    +
    19namespace dr::mp::__detail {
    +
    20
    +
    21void local_inclusive_scan(auto policy, auto in, auto out, auto binary_op,
    +
    22 auto init, std::size_t seg_index) {
    +
    23 auto in_begin_direct = detail::direct_iterator(in.begin());
    +
    24 auto in_end_direct = detail::direct_iterator(in.end());
    +
    25 auto out_begin_direct = detail::direct_iterator(out.begin());
    +
    26 if (init && seg_index == 0) {
    +
    27 std::inclusive_scan(policy, in_begin_direct, in_end_direct,
    +
    28 out_begin_direct, binary_op, init.value());
    +
    29 } else {
    +
    30 std::inclusive_scan(policy, in_begin_direct, in_end_direct,
    +
    31 out_begin_direct, binary_op);
    +
    32 }
    +
    33}
    +
    34
    +
    35void local_exclusive_scan(auto policy, auto in, auto out, auto binary_op,
    +
    36 auto init, std::size_t seg_index) {
    +
    37 auto in_begin_direct = detail::direct_iterator(in.begin());
    +
    38 auto in_end_direct = detail::direct_iterator(in.end());
    +
    39 auto out_begin_direct = detail::direct_iterator(out.begin());
    +
    40
    +
    41 if (seg_index != 0) {
    +
    42 assert(rng::size(in) > 1);
    +
    43 assert(rng::size(out) > 1);
    +
    44 --in_end_direct;
    +
    45 ++out_begin_direct;
    +
    46 std::inclusive_scan(policy, in_begin_direct, in_end_direct,
    +
    47 out_begin_direct, binary_op);
    +
    48 } else {
    +
    49 assert(init.has_value());
    +
    50 std::exclusive_scan(policy, in_begin_direct, in_end_direct,
    +
    51 out_begin_direct, init.value(), binary_op);
    +
    52 }
    +
    53}
    +
    54
    +
    55template <bool is_exclusive, dr::distributed_contiguous_range R,
    +
    56 dr::distributed_iterator O, typename BinaryOp,
    +
    57 typename U = rng::range_value_t<R>>
    +
    58auto inclusive_exclusive_scan_impl_(R &&r, O &&d_first, BinaryOp &&binary_op,
    +
    59 std::optional<U> init = {}) {
    +
    60 using value_type = U;
    +
    61 assert(aligned(r, d_first));
    +
    62
    +
    63 bool use_sycl = mp::use_sycl();
    +
    64 auto comm = default_comm();
    +
    65
    +
    66 // for input vector, which may have segment of size 1, do sequential scan
    +
    67 if (rng::size(r) <= comm.size() * (comm.size() - 1) + 1) {
    +
    68 std::vector<value_type> vec_in(rng::size(r));
    +
    69 std::vector<value_type> vec_out(rng::size(r));
    +
    70 mp::copy(0, r, vec_in.begin());
    +
    71
    +
    72 if (comm.rank() == 0) {
    +
    73 if constexpr (is_exclusive) {
    +
    74 assert(init.has_value());
    +
    75 std::exclusive_scan(detail::direct_iterator(vec_in.begin()),
    +
    76 detail::direct_iterator(vec_in.end()),
    +
    77 detail::direct_iterator(vec_out.begin()),
    +
    78 init.value(), binary_op);
    +
    79 } else {
    +
    80 if (init.has_value()) {
    +
    81 std::inclusive_scan(detail::direct_iterator(vec_in.begin()),
    +
    82 detail::direct_iterator(vec_in.end()),
    +
    83 detail::direct_iterator(vec_out.begin()),
    +
    84 binary_op, init.value());
    +
    85 } else {
    +
    86 std::inclusive_scan(detail::direct_iterator(vec_in.begin()),
    +
    87 detail::direct_iterator(vec_in.end()),
    +
    88 detail::direct_iterator(vec_out.begin()),
    +
    89 binary_op);
    +
    90 }
    +
    91 }
    +
    92 }
    +
    93 mp::copy(0, vec_out, d_first);
    +
    94 return d_first + rng::size(r);
    +
    95 }
    +
    96
    +
    97 auto rank = comm.rank();
    +
    98 auto local_segs = rng::views::zip(local_segments(r), local_segments(d_first));
    +
    99 auto global_segs =
    +
    100 rng::views::zip(dr::ranges::segments(r), dr::ranges::segments(d_first));
    +
    101 std::size_t num_segs = std::size_t(rng::size(dr::ranges::segments(r)));
    +
    102
    +
    103 // Pass 1 local inclusive scan
    +
    104 std::size_t seg_index = 0;
    +
    105 for (auto global_seg : global_segs) {
    +
    106 auto [global_in, global_out] = global_seg;
    +
    107
    +
    108 if (dr::ranges::rank(global_in) == rank) {
    +
    109 auto local_in = dr::ranges::__detail::local(global_in);
    +
    110 auto local_out = dr::ranges::__detail::local(global_out);
    +
    111 if (use_sycl) {
    +
    112#ifdef SYCL_LANGUAGE_VERSION
    +
    113 if constexpr (is_exclusive) {
    +
    114 local_exclusive_scan(dpl_policy(), local_in, local_out, binary_op,
    +
    115 init, seg_index);
    +
    116 } else {
    +
    117 local_inclusive_scan(dpl_policy(), local_in, local_out, binary_op,
    +
    118 init, seg_index);
    +
    119 }
    +
    120#else
    +
    121 assert(false);
    +
    122#endif
    +
    123 } else {
    +
    124 if constexpr (is_exclusive) {
    +
    125 local_exclusive_scan(std::execution::par_unseq, local_in, local_out,
    +
    126 binary_op, init, seg_index);
    +
    127 } else {
    +
    128 local_inclusive_scan(std::execution::par_unseq, local_in, local_out,
    +
    129 binary_op, init, seg_index);
    +
    130 }
    +
    131 }
    +
    132 }
    +
    133
    +
    134 seg_index++;
    +
    135 }
    +
    136 // Pass 2 put partial sums on root
    +
    137 seg_index = 0;
    +
    138 auto win = root_win();
    +
    139 for (auto global_seg : global_segs) {
    +
    140 // Do not need last segment
    +
    141 if (seg_index == num_segs - 1) {
    +
    142 break;
    +
    143 }
    +
    144
    +
    145 auto [global_in, global_out] = global_seg;
    +
    146 if (dr::ranges::rank(global_in) == rank) {
    +
    147 auto local_out = dr::ranges::__detail::local(global_out);
    +
    148 auto local_in = dr::ranges::__detail::local(global_in);
    +
    149 rng::range_value_t<R> back;
    +
    150 if constexpr (is_exclusive) {
    +
    151 if (use_sycl) {
    +
    152 auto ret = sycl_get(local_out.back(), local_in.back());
    +
    153 back = binary_op(ret.first, ret.second);
    +
    154 } else {
    +
    155 back = binary_op(local_out.back(), local_in.back());
    +
    156 }
    +
    157 } else {
    +
    158 back = use_sycl ? sycl_get(local_out.back()) : local_out.back();
    +
    159 }
    +
    160
    +
    161 win.put(back, 0, seg_index);
    +
    162 }
    +
    163
    +
    164 seg_index++;
    +
    165 }
    +
    166 win.fence();
    +
    167
    +
    168 // Pass 3: scan of partial sums on root
    +
    169 if (rank == 0) {
    +
    170 value_type *partials = win.local_data<value_type>();
    +
    171 std::inclusive_scan(partials, partials + num_segs, partials, binary_op);
    +
    172 }
    +
    173 barrier();
    +
    174
    +
    175 // Pass 4: rebase
    +
    176 seg_index = 0;
    +
    177 for (auto global_seg : global_segs) {
    +
    178 if (seg_index > 0) {
    +
    179 auto [global_in, global_out] = global_seg;
    +
    180
    +
    181 auto offset = win.get<value_type>(0, seg_index - 1);
    +
    182 auto rebase = [offset, binary_op](auto &v) { v = binary_op(v, offset); };
    +
    183 if (dr::ranges::rank(global_in) == rank) {
    +
    184 auto local_in = dr::ranges::__detail::local(global_in);
    +
    185 auto local_out = rng::views::take(
    +
    186 dr::ranges::__detail::local(global_out), rng::size(local_in));
    +
    187 auto local_out_adj = [use_sycl](auto local_out, auto offset) {
    +
    188 bool _use_sycl = use_sycl;
    +
    189 if constexpr (is_exclusive) {
    +
    190 auto local_out_begin_direct =
    +
    191 detail::direct_iterator(local_out.begin());
    +
    192 if (_use_sycl) {
    +
    193 sycl_copy(&offset, &(*local_out_begin_direct));
    +
    194 } else {
    +
    195 *local_out_begin_direct = offset;
    +
    196 }
    +
    197 return local_out | rng::views::drop(1);
    +
    198 } else {
    +
    199 return local_out;
    +
    200 }
    +
    201 }(local_out, offset);
    +
    202 if (use_sycl) {
    +
    203#ifdef SYCL_LANGUAGE_VERSION
    +
    204 auto wrap_rebase = [rebase, base = rng::begin(local_out_adj)](
    +
    205 auto idx) { rebase(base[idx]); };
    +
    206 detail::parallel_for(dr::mp::sycl_queue(),
    +
    207 sycl::range<>(rng::distance(local_out_adj)),
    +
    208 wrap_rebase)
    +
    209 .wait();
    +
    210#else
    +
    211 assert(false);
    +
    212#endif
    +
    213 } else {
    +
    214 std::for_each(std::execution::par_unseq, local_out_adj.begin(),
    +
    215 local_out_adj.end(), rebase);
    +
    216 }
    +
    217 // dr::drlog.debug("rebase after: {}\n", local_out_adj);
    +
    218 }
    +
    219 }
    +
    220 seg_index++;
    +
    221 }
    +
    222
    +
    223 barrier();
    +
    224 return d_first + rng::size(r);
    +
    225}
    +
    226} // namespace dr::mp::__detail
    +
    Definition: onedpl_direct_iterator.hpp:15
    +
    Definition: concepts.hpp:42
    +
    Definition: concepts.hpp:31
    +
    + + + + diff --git a/doxygen/index.html b/doxygen/index.html new file mode 100644 index 0000000000..31021a1728 --- /dev/null +++ b/doxygen/index.html @@ -0,0 +1,81 @@ + + + + + + + +Distributed Ranges: Main Page + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Distributed Ranges Documentation
    +
    +
    +
    + + + + diff --git a/doxygen/index_8hpp_source.html b/doxygen/index_8hpp_source.html new file mode 100644 index 0000000000..70c3fd2117 --- /dev/null +++ b/doxygen/index_8hpp_source.html @@ -0,0 +1,221 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/detail/index.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    index.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <any>
    +
    8#include <concepts>
    +
    9#include <limits>
    +
    10#include <tuple>
    +
    11
    +
    12namespace dr {
    +
    13
    +
    14namespace {
    +
    15template <typename T, std::size_t I, typename U = std::any>
    +
    16concept TupleElementGettable = requires(T tuple) {
    +
    17 { std::get<I>(tuple) } -> std::convertible_to<U>;
    +
    18};
    +
    19} // namespace
    +
    20
    +
    21template <typename T, typename... Args>
    +
    22concept TupleLike =
    +
    23 requires {
    +
    24 typename std::tuple_size<std::remove_cvref_t<T>>::type;
    +
    25 requires std::same_as<
    +
    26 std::remove_cvref_t<
    +
    27 decltype(std::tuple_size_v<std::remove_cvref_t<T>>)>,
    +
    28 std::size_t>;
    +
    29 } && sizeof...(Args) == std::tuple_size_v<std::remove_cvref_t<T>> &&
    +
    30 []<std::size_t... I>(std::index_sequence<I...>) {
    +
    31 return (TupleElementGettable<T, I, Args> && ...);
    +
    32 }(std::make_index_sequence<std::tuple_size_v<std::remove_cvref_t<T>>>());
    +
    33
    +
    34template <std::integral T = std::size_t> class index {
    +
    35public:
    +
    36 using index_type = T;
    +
    37
    +
    38 using first_type = T;
    +
    39 using second_type = T;
    +
    40
    +
    41 constexpr index_type operator[](index_type dim) const noexcept {
    +
    42 if (dim == 0) {
    +
    43 return first;
    +
    44 } else {
    +
    45 return second;
    +
    46 }
    +
    47 }
    +
    48
    +
    49 template <std::integral U>
    +
    50 requires(std::numeric_limits<U>::max() >= std::numeric_limits<T>::max())
    +
    51 constexpr operator index<U>() const noexcept {
    +
    52 return index<U>(first, second);
    +
    53 }
    +
    54
    +
    55 template <std::integral U>
    +
    56 requires(std::numeric_limits<U>::max() < std::numeric_limits<T>::max())
    +
    57 constexpr explicit operator index<U>() const noexcept {
    +
    58 return index<U>(first, second);
    +
    59 }
    +
    60
    +
    61 constexpr index(index_type first, index_type second)
    +
    62 : first(first), second(second) {}
    +
    63
    +
    64 template <TupleLike<T, T> Tuple>
    +
    65 constexpr index(Tuple tuple)
    +
    66 : first(std::get<0>(tuple)), second(std::get<1>(tuple)) {}
    +
    67
    +
    68 template <std::integral U> constexpr index(std::initializer_list<U> tuple) {
    +
    69 assert(tuple.size() == 2);
    +
    70 first = *tuple.begin();
    +
    71 second = *(tuple.begin() + 1);
    +
    72 }
    +
    73
    +
    74 constexpr bool operator==(const index &) const noexcept = default;
    +
    75 constexpr bool operator<(const index &other) const noexcept
    +
    76 requires(std::totally_ordered<T>)
    +
    77 {
    +
    78 if (first < other.first) {
    +
    79 return true;
    +
    80 }
    +
    81 if (first == other.first && second < other.second) {
    +
    82 return true;
    +
    83 }
    +
    84 return false;
    +
    85 }
    +
    86
    +
    87 template <std::size_t Index>
    +
    88 constexpr T get() const noexcept
    +
    89 requires(Index <= 1)
    +
    90 {
    +
    91 if constexpr (Index == 0) {
    +
    92 return first;
    +
    93 }
    +
    94 if constexpr (Index == 1) {
    +
    95 return second;
    +
    96 }
    +
    97 }
    +
    98
    +
    99 index() = default;
    +
    100 ~index() = default;
    +
    101 index(const index &) = default;
    +
    102 index &operator=(const index &) = default;
    +
    103 index(index &&) = default;
    +
    104 index &operator=(index &&) = default;
    +
    105
    +
    106 index_type first;
    +
    107 index_type second;
    +
    108};
    +
    109
    +
    110} // namespace dr
    +
    111
    +
    112namespace std {
    +
    113
    +
    114template <std::size_t Index, std::integral I>
    +
    115struct tuple_element<Index, dr::index<I>>
    +
    116 : tuple_element<Index, std::tuple<I, I>> {};
    +
    117
    +
    118template <std::integral I>
    +
    119struct tuple_size<dr::index<I>> : integral_constant<std::size_t, 2> {};
    +
    120
    +
    121template <std::size_t Index, std::integral I>
    +
    122inline constexpr I get(dr::index<I> index)
    +
    123 requires(Index <= 1)
    +
    124{
    +
    125 if constexpr (Index == 0) {
    +
    126 return index.first;
    +
    127 }
    +
    128 if constexpr (Index == 1) {
    +
    129 return index.second;
    +
    130 }
    +
    131}
    +
    132
    +
    133} // namespace std
    +
    Definition: index.hpp:34
    +
    Definition: index.hpp:22
    +
    Definition: index.hpp:16
    +
    + + + + diff --git a/doxygen/inherit_graph_0.map b/doxygen/inherit_graph_0.map new file mode 100644 index 0000000000..5861583b51 --- /dev/null +++ b/doxygen/inherit_graph_0.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/inherit_graph_0.md5 b/doxygen/inherit_graph_0.md5 new file mode 100644 index 0000000000..7ef7bb2fef --- /dev/null +++ b/doxygen/inherit_graph_0.md5 @@ -0,0 +1 @@ +d42c5f8fff58582b792bb372d859605b \ No newline at end of file diff --git a/doxygen/inherit_graph_0.png b/doxygen/inherit_graph_0.png new file mode 100644 index 0000000000000000000000000000000000000000..406734ee0fe0cad09a580f358f4086e6ce87e280 GIT binary patch literal 7335 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 + + diff --git a/doxygen/inherit_graph_1.md5 b/doxygen/inherit_graph_1.md5 new file mode 100644 index 0000000000..4d75664209 --- /dev/null +++ b/doxygen/inherit_graph_1.md5 @@ -0,0 +1 @@ +1df1fe8a6ef63b686cc776d2264b0f7e \ No newline at end of file diff --git a/doxygen/inherit_graph_1.png b/doxygen/inherit_graph_1.png new file mode 100644 index 0000000000000000000000000000000000000000..adbe828f15480e42560721ef71b9e2080442e761 GIT binary patch literal 2646 zcmV-c3aRypP)G&3_wD#Kw^7HEs=i*z9+ zO%b{fg$5ck`Xf!cAdzBG7TM)%X<-%x-N-Jkbuq%!)M{NOmd;$ZvhDf((a(L|+)cNs zeK{}KALo3|d7kHeJ`bM9&p7~t!C){L3Sf;R}oLC!^JB%K@zF-!~ws`Y0|gc6dOHKbzv>V#s8&0sT%R5DVi! z4ofPA-C;?^usaS(s*a8hh(scEb#*zy{HTv5BO?P>u3Q=N{L!?2L%|_Q_4DUX+_`fH zy}iATFhA;IF-)Q-PoCh@r%yw+XBe}sNjluH?azR;v@~41c5P5|Qc_Y785!xIh#YT! zD4NZ|lF9&?Oa_HQF{n9_k&*EC_jgc4j<-J)&E~L6QfV|A6ciL7At3=785wA9Zq|FA zl9GZ;mo7mfksv-k9yf2^L|IuG)~s2h8)MjZR4f2cQBi^Q>(@gp7Nek`K)228-n|`-hV=Aw)YQ~KB9WlGyBllQuGM?~`0-<0ym%4Yw{OSRty>Wm z7KYl|T0DC6NH^x)yLWnRN5ztxn~RetPa-=z8)L_g#eo9{AeBmS?%X-7T)7gbPoIWZ zEJj>h9K5}~0RXF4ug2oVi=okIP*+!ngoFfKy?PaM=F9=`yM{8iJsD~xl3UYFCq8Be-==#da z$_N0px3?1!(e&xlY0H)^dh_1CeM=7?J~Y`L3YKE&=;$Ca&oe+9TgQtB_$;$+vc=dvwnv54A;|=t}kD{kc*28-MMo| zPsg`!->lYbjH03H4Cgq6UnMh=|Z@2L=WrFfh<$ z+Yzz6di4suy}j7BZJXXaj^ohK(14(zAft908yitnRD{OHMyOOOC=`l8)i~y~TDyLR z^j}X)y1cx+Ktz}~Z=T+BPft&)H4Fxulgh`(2Wqt%YPA|39v%PyrBXT2k&9h+TAO0= z@$mu2amdQb(mn5^@1=5_{>2TIN`<*|=VINubx2D~1CPhU<;$1x;DO%3yu)HPMgR4* zq^rHX9U6@WU0q%9_4OTK%TTke*j%VjnKA_efdGdN9RdJowOSlJc+lcJM-=LoVwpU7 zGD1T`QCnM!n3x!dL?T2-N8|bP=kW3I0r2|;b#!#-=E&u8bar+kJ3AZk@$r~Fd$!R- zRCAcqI@I;+k0o6~p%9^=p~%U}fkvYN0MyslqqerzsAgNSIjLM-T~S(EihcX`Vd~VW z2o4U$uV23`&a+g!IwBTlXJ?d`m!qnx3Ic%uvuDo+pU=meH*etV>#mMno#D8!sOb08E72fb~W(>m1k>yIT}&d$y_d-g2u-n|QfK!6!DW*{*! z5q^GtMm5`=!4~R$^z`(QOeUkYwl@0l;|JZkb&G!f{7FPaQmK>_3WeTyM-=MT#L~yR zckf6lmD1O*UkA+p@Zkg9yLV5o@U5?}r~CKslTxXqPoF;NJ(I~~^zq|IlWl9Xnv2=c zp0V|`MwdpTq2}ghs;jG`U%!4?)NBb;h5CTaG&ME#Z;s>6vHMgEOZ@*nRe4ECiFKFs zMhb;OfyBf_qt7BDBJk|lGo#Pq;^L5%mF39L7*;asl8Vpg_BOM0A2H4pj!|n`w zQmNHya2$u%uU`+hYsN4!>`CR};Q=DTq)C$i{QkJeaU9;fdE-#O!{x^k9v&X3tgIYW zG1(io{n?40o*tByl_4%JZdBBS3l}a#Zf-7GT3UwP_lR$QeSfinf`W8M4FJ&6(gLwq z3_m|Vj2kx&n>KAiPfrhk-^Umn$Kmkd!w3%#hnt%l6bc1+JRUfXgPWThrcIlMOP4O` z{F?If5dm}hF7<=~Y(S3C`<);s=R*RcAZz3rv34A^u2M->^(xpo=bLLE| z*213J4cW0{2O1h05FQ?m=;&w^7Z+P~{NoUY`tj3RzJLEt0H~>{iHL~0ySoVhwYIkE z#;8;(3JeUStgI~h^5qN3<#LLRjit?-Hxm(2XJ;n?py=pmYHn^G;6treQ)Oi(d3ky1 z>>Bg)`SWM;_4TEkoE%armGtP*BMJxzp#1!NvwmK_d`X#^nG_HZKociUq+PpqQA0z6 zRr=lC-KnCY!eQDC>F(~P($Z2|v}h4|dV11|6)UK+vU0%3;GtmZ&HVxVyW9<2Y1QRN(#l_a^gsB2*|G)u_wR>LD1<~JK~qzct+D|OO}jZ%DiuzhI)%8nILw# zg?cZ4IJ6t%`t|Ervt|wWd_IbbiXaw?@&5gLT)1!nVzC&muC7+aI21-asXRSB;qC2> zr%#{iUanXyhEl0Sc6K(}+S<_7)rIQnYNVy5nY5!)so>(`0v{hAXti3Dm6f5oy4tLt zWy_YKv$GSsckf15R~MvGDf062uwlant73O@a>9ZI3s72Ging{kY~H*XRaI41UyZSs zc4Oq{=i{%x{z6?{9cpT7ke;57F=NII%7)z-?wX2-=*W>HWJvyxujjiYFfK?EqQr)5s$~Cl`B_LLPCPho+&?4 zsg&l=pHDmkc@x}`AU+aKe + + diff --git a/doxygen/inherit_graph_10.md5 b/doxygen/inherit_graph_10.md5 new file mode 100644 index 0000000000..49fa64ec4c --- /dev/null +++ b/doxygen/inherit_graph_10.md5 @@ -0,0 +1 @@ +0a66abc111349754d2a41894abfbd82f \ No newline at end of file diff --git a/doxygen/inherit_graph_10.png b/doxygen/inherit_graph_10.png new file mode 100644 index 0000000000000000000000000000000000000000..92d1cc6d00becacec1f2c59a5e21b85c479f59ab GIT binary patch literal 2151 zcmV-t2$=VYP)6^L~E6!xMdeP|e2&N!u`S3gq_kNjE zE6yKWu=Dl!AAb+Hu5-HtC=?2XLZMJ76v}GCvg{Cx#ojCy>+jVNL!m4cH#fI8RaI3_ z7xw*SIf=z${mo*r{#`j)6pHJZpP#=8;GczkRz?1Us;a7G7et}BlB%jIXti3aez#T7 zLZPfEw8$xcJhaFue>}@la{coeeRs2c0tOmVll$P!d6?xvLlsB(bCegV)0hW*Oku85x;Da zhlPc~%gbxEWjN*Y=g+uy?HU>y8h&cMR;z_hr*p9?`>d3&O!87Hm1t;afYE4NRxK_m z^0~P=l$V!7AP_(%lVNah&}>{R7URyHJ5VSTNK8z`!-o%1Utf>Z)Kt?P%eLihRV)_c z?%lg6DJg+KAb?aV#pviLV+{b%*w~2l^mGV?LX?-6n{NN(XD2c;GT`Ci0l8d`;NW14j*ddDR-5Knw!6Bz zFg`wRw#SJRC&1xwkd>8%_wV0BAP_LtaOTVz6ciMI&*vjEGZW3t&89hCUS5cgkH^uY zM=>=uh0e}S$mMd#WHPYXY||dy-QCE~&&RfH+aQpK71gA5E2p+Lh|zR%+|er{hGA5x7%$;Mn)2) zQfX?3goKcyq9Rj!Y;4RF!B|~Wa<+Nh2-GDgT&9z zk5p7tnCX?v7FJIL9D_5=%iA3@r z%bK?Pvp!Q^y?O->hlAkYU{haYWTe%+(9lq`wy&=*e0_cGwrvp<6lD6mY11YEz~tm4 zbUK|w4KH52!0hZS^7He}_G7VF7#J9UpPwH9pt`ym-rnBWvu6+T^772)3WY)p4Gp2O zu@O^KQxJ(n5C{ZVvu2G$%^@Kn$j;72SXdbL?c0Z#m>47_CE1E!5T3L9JFJIXT(x-EpxjxyZR(E{sMaj7B3k91ej0 z6`oa~zm^;dESA+vlZ-TQxm>VVEEEL{|xP19CBoYY@A3h9`NQAh!IJmjle)_w3@gmNhJBR1bpQEOx24!Vs=gwvy+}w4>$HU0T2-s{k zMn*<({P=Oy*4Dz`-ygZTx!ApXH`3G79mWj|48+;9XE8iHjGUYtn{&Lpyii$L32$$2 zL`6j*CME_21qG(Zt(24$C=?1rM@K^@lQHtsk$2AGEu^-#7Ehl(MSFX@)we6oJadL+ zUbZMLEk%ESKZ=TqoIa|$l*JxAe=t2gO|)7qnV6U$-@bh#DwT@N%*+r%2+?RXM5oi4 z&3AV2)M~Zl-Me?Dw&fmkb8|$cQkfmF9BKH$=;$cXXf(uNFqrxV2M38-tu~uyFc^qR zr6OOyeqFQ|wip{5BWktUba-6I+qZAY^%UavP> zW6Lup*ve};v3KyadT^3RBu7~+*1z<9a?0<<|KBISsZ=VN{nG@6Vh^28hvejBn`80u z@hB`TTwz6yp+!zvG#fT-fI^|LImYAhR#prHXpvJE4Tr-4pU+=y8I1X5U(ljZTm>z1 z${!Cca>^eMEpo~qkKKc(R4QFb9Tdv4VO8XWkS73+t%4Q`Wy!d?xxHC!4HOE6LZMJ7 d6bi+h{{k^kBzw&-4W$48002ovPDHLkV1hOA503x< literal 0 HcmV?d00001 diff --git a/doxygen/inherit_graph_100.map b/doxygen/inherit_graph_100.map new file mode 100644 index 0000000000..1f19bf00ce --- /dev/null +++ b/doxygen/inherit_graph_100.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/inherit_graph_100.md5 b/doxygen/inherit_graph_100.md5 new file mode 100644 index 0000000000..409e4966fd --- /dev/null +++ b/doxygen/inherit_graph_100.md5 @@ -0,0 +1 @@ +956d176d21d07f335e35030bbc90364f \ No newline at end of file diff --git a/doxygen/inherit_graph_100.png b/doxygen/inherit_graph_100.png new file mode 100644 index 0000000000000000000000000000000000000000..414a96360d6dd522df003a8e94e25fafbd62efeb GIT binary patch literal 4627 zcmY*dbzGC(`yL|oO8bg*NOwuMqR2o(a5RXNbdHozQ9#lWf}}K#(J+vf9_2&^N{cue z>4x9g@B7#L*|TT+<2>g%_kFJWx~}`g80cwH{lokZ1OlPbexUgX0wIb3|9Qws!97A{ zV;B68KGo6Egj^Cnd95YM5C~nrwx))0VAjS=i0Qu*GacJoB2^LpxGdh-qOHAiFUX7J zdjyZhI|0LjaWAZZfPgiE6IK^$u6t*%dK-1$7b{SlTGIRAB~C5|k=F9;`;!#J;{rw^ z;z;Dvcg-Cmr)0MF?=s(t_3j?Kj;v?R%w0GhWM%liA-bwT``_zG2JxZd=x-Md8Ky>g zma&sOJJ-5$)VjugK+vwwTl~)5yL~JBCmOv8cWL7^(w35&{WmbqEhBXq@x6mJEtd~JlWEx^ILW`*LH!^vImr_Ru|$4VGOjqUvmKXu{$3{~M?tn0IHS-?3BccUf$EN*}Wl!$JcF165X085kXv^A|`g8c62f z9hRG8RHDQZk+X>lL182usVXnqQUbo;@TNMNQ)F~lZ;YH;U0rGMJE~P(8Fnt4Zr#cp zF?V@!2yH4-gu!4fr<=`L^4?dZrKKH*KlGHF)l#ZDouBNp%6mn`#ZmSqa_HOJ^AINR z_VzY4HKnDadjUf}{v|9b>ahD~xUjJBE7C-qLBup7DvAt3L_`E>+54sg2F`D7=|6Zt zE+Zo&+KWvKJw2e~;Lv~gkZN{z7U1xfHoe;AnKT%Gb~<<2+ueONqO$Ge?fL0pEy!sgfp zlQN{8q+GrWz{*WEe0-!pS|DyeYF;ldKbxMOPM3C~28GsgvWiqcPuSnxwOjuBQN*+= zLd@#(-zc>+ji9aRY0F1OMwz1M$8x;9uMr6PB1se}DfIZ2rCU zj0`$<_KKES34b<5#^~ha>uWevfd$%Q*-!D?w{IyM%D`c(u!z++2=P zwM%6r4E5_3jjBZHbq0nvnVBrR_)({+2KUC#pAkt(9r^cS8I=Piz?P?^r3u0LbkjS^ zj7rF5h($ypI0bLSPk^6dlOQHmI@jzt+~){Wa4rtSE)&M-sxY@{Yc~D3EV4 z%f=3y%M+8li^$TIA8r~NM4%=m0~3#T@r�x=)^Ph8(PO@$eLmD_2^e6G}@3U?}s~ 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 + + + + + + + + + + + + + + + + + diff --git a/doxygen/inherit_graph_101.md5 b/doxygen/inherit_graph_101.md5 new file mode 100644 index 0000000000..d8dcea4723 --- /dev/null +++ b/doxygen/inherit_graph_101.md5 @@ -0,0 +1 @@ +dbee14c46b06cae5c82598a08b6174a4 \ No newline at end of file diff --git a/doxygen/inherit_graph_101.png b/doxygen/inherit_graph_101.png new file mode 100644 index 0000000000000000000000000000000000000000..35384e80937f1a9266fcb4deac0e61fcc6be19ef GIT binary patch literal 89921 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 + + + + + + + + + + diff --git a/doxygen/inherit_graph_102.md5 b/doxygen/inherit_graph_102.md5 new file mode 100644 index 0000000000..5821a86cf6 --- /dev/null +++ b/doxygen/inherit_graph_102.md5 @@ -0,0 +1 @@ +fbd92c813463d156b599b4d3b90c94d1 \ No newline at end of file diff --git a/doxygen/inherit_graph_102.png b/doxygen/inherit_graph_102.png new file mode 100644 index 0000000000000000000000000000000000000000..792e8f3a56a6af7cb3625aec76893b43298256fc GIT binary patch literal 34218 zcmZ_01yohtyDv;AB7%Z|AP5LZcSx6nNT+nCh;$3m(jZEAgGfn(G}0}gNOw0#*M0W? z`_4G`j&tvLUkAqCd#yF+Gw1x(vx61oC9yDwFp!Xtu%upzDkz8E$cCo?Km^)&=`|>(zL# zp1DqS{v706y*d-v`yhOhe8@{S#3?uOfBfJ7FuD?TsKR${byZ!P?kKu)aj2q@5Hnz; z+^qln_ZQO%jWSj_hQerN1-hJA4gULby&>HuTKE4|nc4;V<`k%xEG#UvR$7h~lJw|eIJ`@AT3af%sEz*e zr8SmG`<0wr!!G;FaH96}qfI8l*Jv_rv1tdJ^_5%ezt|Jiye}^=zba(~RQ{y3{kUDP zqO80&QE6E<8UB)znA@7MIfzjKF2*2Iq*YnwjIL%Fekd<3ZPXruAI+?rh>VJ6GGS(H zEM{Pk?sk^qGL!LcysZ9wqX3CE=IAix#fukzCnrbB%@w3$853+uwSBE)e^tE8&dcNY zaPIj2c&i((%;UVJk-P2b=~<{*9?;w@^8VjiORij!M#UQ(Jw3gZ4?8-I`Vt(**kCBk4wkzAZH-6mFLpYd9V|aF z)`Sl-?g;CyU?wL=R##Vtu__a=@qS&P#`f+n>-(dP_J8Xm{c_SuN=m2a=ZPoUHMZo; z%*;Bq_P4zkJ3oz7TB;8Z50}+5&(F_e5^-Z8EYrrmieBt!~#Px|4X zQb*Whu>^KgLSB25#&)i^qqIWjYm|rwDIXM)ftfgyKT0zWxK9%D>rLC>;3vdGlp0Ga zD=Y6jmYJ-wI$KGy;c-7Mbempi4-NkGDNjCy&n1PsIhsx-p4AWqp8fRn^t*X6cEL$6uqPH;J(_FiNN> zC@9aWnRRNOqWQfz-kG-4tA6u~0(ogTM}~r8xZcg-F~9S>+(r3R0XleuUguifI_HOY zc+V&(>RfhX%S?NF!il;2CQJ02QdvsdJ3B*L47%`SR8^z@{{8z(RMhv3P+wpF@OWv- zBp-^MQLmn-Gd|Vx+`{eV>ZHF{L15osHcd#d_ptH((YL=76VkG>VQ%j5zQ5z+-SB)8 z;@O^8=VkWG(o#}VIPUK5Zo3U9ZL_ob;^Oa5c9>LhW!cF1t*3a9+j@ItoVWgdHZIg$ zhZ)Ru7-Wj-ex_aZ4o5*j0hv9;!MZ=0SLO2RDo*p6o#J_+AmAIIPjJg7(T_TKzYLQJ$& z*M+->KaRI2qhez_eq~8oO#gTuX-9DV018U0;!R72SfG7acV}my#Ypb{`DTg3Tr)Ca zN?@IrPn`^9h-K&IvU^^h%5KIeU+#C3jTUJWaC38KW@diXsbz<8&9#|rbljaGiRu=2 zbmYXPmSrUyD^O>NAQK*d%CB+WCi1)UAlG~_HJbi4eP<1sxRDVBgIb|Mi|_4svyCY} zsCTsfskizKck7On8Q9ni!t+1@<<>54rJ4CoPS0@K3L{GR`eOFx;9|E4_u<3VJ7gZs zGY#%+MB$IZi$p(SWas4AU7b7i#IZbRPV>69m^uE$-z)X%Rab=||JB8bd0#x+hkl2ofpX*z1TL`U_!C1HIHYisLzD16moodjmxA4AzvxUi@-%1rKBSXd-9 z`X{HP*f~3|94z;GoJ_lToUiAdUR;diDUiWB4J#;MK=U)zN>@=)xqI)PF+5cvlv$P4 zB)dr$wpxjvT&?{wqjF%*8kdV)ujpb&xSgZpQYcF!QnLyB{@H5Us;iDX$+zmz@Ng=2 z_J`Wq+FI4t{XsaCJg$2NvBBprj4emM;y7*oSzi1k%vEx+_w#|pR1F*a#q*LR4)ciG zYkkkNk0kugLpd^W?rEHgxw4PXPj(e-ZCUR*X^}N6`H#dh3Y3*+* zrTg(#%ghWZ66_ffq=G%IAMe>YIH0CGtPaSg3Optth+}M0El|yGUHg?a-uQu^-+3z? zYU1?lY=5V2cZJZ)I{XRmmtb6);Y^8p_ell1R{E3n_xI@>gGn6i$0``dCnnf!W(0(; zPmM|4x7ap*7sM^Eh4C+sX1uQ>dj58=oj_l)&e>|B+GdbrP~fNkU0kT8vUcP0%1Toh zz`i8zPjDpduVsBIv!3RA#HbOuUR-6j*nxPEKSkP$D=Qs=WS(8dp9EtU-B4lc=WyB4 z5%=Gjt~0Mo`}M{Iw)R5p>id$Ck`q-{p|I21+1ah=Gr|s&Y1$jx*4a7I_`&_@qV@IP zQsWg9FP3nk=SCZ&`N=$XzOX`8>942axvYrpJRn^P=bq`Rs)bV(C3@`sZ?CBuJ24|8 zqh~@wdS9ZVOb=K3zkK;ZK|uin6nT$;*5|E?mM>Xd?7nDht&4{T>VrD#GL zM2&x2U7SJW?1bwsNnpwv8(m~Jbhj4Vt1A$-HK?#4IAXFDFT?zN97QfE# zQlxl@6?MJ7-gj$3Zpc%f8{cv}p0kK{s9TpIx}NLR*+Vol6x5i#-<8j(nTgY{s}S!~ zMT`#L_2=PM6C*lB(lyd4xsTfX)N%}O|Ml`!h_=({1SHB{VkQ%y7KsWt8jV$4Wb95= ziWz^Q)Ze?Znkcw{AHf;?agRs6rCG^BT3sD(>VZnQ|5!%sd^S z54ZBBmC#Q4`@EkW3a_w(MHB@SEfbrINX3o*uWrhBXW2wGowdOD3KVWLzvvpnr|5+K zM#@2TiPnh6sQG2JqvbjqgmpX$$7?U9{l6uo}FzUQlw<4|R1 z1Hz)I_!{)B0d3*|cmWo-;1n(*@jZ^5tg)l)j3DW)K5()hJBYEV!DPSdfb)nqwvENs zTe{p?7RhR&qSP6ELX4T3np(eitXsF2+jIWlOY@ER{_C&&i;B{PBvHA7jQ@CCnDkEr zdc}QMe8$A4e`~;K6d9~96>G)@9o&l>^u9qsCMVsXv+blsQz8>7( zqY)_avw-qf2HDD(nEQ$?e*u%s?_b-fdhNR&Oo2;Nb6qf8fL_EYQjjS|Kfwo6RYPoxl^#~fxFImtMb zFInIJdlT@0%=+`WgHirr9|O*OPYi=9K;4n^iV98?RMh_7i<8~Xj*bA>*pUr5iNesMNLaD#i_J|kt++FcSja4c>^X08@TPr3EsUA~N|u(E>eRc!{s%}HcHUHA z9@x0JKifkIc>gyftk#cDqmXI>Q>D}7DL7_l`dVH~i|Ee%Cv$Txe%U!!{0IMy zo#_W)(!V*FD%cC>On>j{Knf)vA5m2IEfITr_Fun#W#^d-_utI_3`~Ge0u;MgP}2Cr zvMwcs1paa5Q+YW@YHI4ra^XY%=FO5O`H@_?1UO{!6w(?yU;nBwO21JqJ-i!N**O1Y z4wp{CXs)KI>BigJ8>u_ANV{4Z&aP~!DC&i!rDuLX{ZMm(XTpa2m65P-z`-_k7A z0yQ~4mmS8j68*u_o#oy*nf}D*R7_0$^*eF;o}ZO-q@_efMPv6#cx*)yxowy~2^<7f zyc<`B8K?gI`7;Ft;(qhhiW1{xsc~@J)^p-+MW*n(gap0P(1;)X_Ik6J2l1HtAC6)w zEXU-bqG-ed@5gj?b;;V9<^k+n*xXE7^z82LE_;9Uc73cQ4QQtppVP*(jEsyg@$vDC zrQ->_4!MBVSb9sEoIb1;Pse$u7-=^O^x_F%Ibv;pbJpU|y^Ksu>;a(bwj86*V>^dL zBcCjiUq_=N=yvc7Q9qqzUTwdBv!o$sYURVL{X@eOIiiqIiPLNIF3SV1$<9WF+2@Ck6 zGJS8|4FA#EFF&9lo~QG74u8}-tPTUh+}hsWotQOYXS1CXN&RrFDWA;q0yrPAK%=fm za)2X#aP~(=N4M=Z-P{*ZRmB5hB`zV65H~$F)wgUlUiMM1;r)IWsS1$WjqPcfK>M#UeE$M;F^R2uB@<&f)$`8tt*x!Sg99UgR7jUsC$o&2Ww&f>b{S8E?U&G-Zm#(igw7B| ziky!x5d)uo?_}1i++|l!I-2$c>x2sag7e*9Y~YHrvY0@uZy_~ZpEJNf2%N8FApy5G+lUl+|Bn_i>4pO1!|rhq$UbV%CqB18=%;anY62x8ct@i z0Cv~bzdxx0N}nsA(gPeHb{8^$`-=(Ysolpq_fTPErf`&war`sa{DMg{rb#30wtg3= zo1gB@3*1~D)*lY=!&$@Tv@!bRlQxJE_%we5k(!tQZu`-FrF)PAc*5Z?At24nBY#1d2}-PA{8=qem=Fmu0nB^@cwKfWC%ElDhdroz5>U!9t>n z=XIb~5In+z6Vl`AXbeV{b?oRp)XaKb+Cu^YNn6|F!6GQd;Od$8p{auI2NRYhN+usi)Xq5uR( z2$qK#Yyk-A4`vwUF^4ShV!;tMUZ<~BZ-4iA5NvF1^}(e@fwVHH7iYt>Ucy^f4tAH1 z?U5SKR)|4U)2OwllBR>5bX&HcA9gz-n4{&N4}`O!(1G9k1qGouUY}b6@qSsLRus=> z+#yKzuQnKntLegON(NTDVNm-SQ-oYIl|*h(TI zNbv0KzkcC#t<_9dSl~9epA5VfSni4Gt(v}(|0H-!2+OVCt|^m8!g2meE(4#a5r-Xl zp3-MNgLFgNvh(oiwVP%qJbNKY$Z=%SbIV6;Y;5PIB#BO^AG_~Sc+j@`4_Qm_ml8bZ zwwW=3vqRI`!PYh%xNZ9n&+Qh#v!=Z)qB;`sS$Jvwu3r_3NCtmW!%;nwbx?h{x5w(z z{AldF@=jJ%T`W}-x&>3~Tc4PSrpy}xZ6Bby05l$0T>*uAz-HmHAN=J#MIo-CxK zwP~q}BNd_&+`Vrei$|yIG0mB9&a;i^P778S7W5?GFO6Zudxw( zlS-RvquOJ!>4-|X`!{yk?edarht{6g#)`{)_B1#SdL>fieuJ zmqDxy*-1a#nJ0}HpX$8L{)vQ#iZg+%?h}J9^Drt%k4wb#riV<9Vd-DWh1iywy|&+8 zl(CdvxwF7+a#lsmywtYWbST3g^_sE#ca`eXT*HG*QB^}KjYm0UhFo?Y9}$k0_UTPc6hy#OZdDI656u;dxmd=}tbr@cF=%;j_#z9DgLN zVXSuU(mPvtlmBG?Nw5vyQefa=z<#ILch_0{Y%(dwLM=DyLadAB3->Lwr>=e5-y$^l zNo9y@<>_<(&ZT)K{Gxq}VkthK;28dDI-*#R(XqTwtb<1M2c02FYkZ{j+knc&(rg6h z>F?^5-n%WE8E?$KKR#tmKQK{hq4i><`-=SGo*z$69&VO@(46(#@9=uOSzC*H^>+nA zu>%*pzR12=bD-~rS0`4knI#0a#bYTilsLu`)l-$LBX-u*Z=j9jEal%|lOK?{D% zf8yqeh?`yv_{{6vwvkYvzrFFew$c@q7~y8#_l^hdtwp9q-|3^+B&P#Wji z(aA;9Z{E2$bxrI~vFu_EtJ38@{de0r%ayrJx9C5_m2iDYuMbO~rUqoZT`Ec4!qlx(F^I_;J)O!QTJ8wgw=)scUHby0*>`6kBsymzk=KicU_+} zYSI%b$NL8VqHP_K6)4EV7~TV$1zZWHh;)yaixRWWb3Ak-PG;)>++BOL`aQO+cbUI_2EwqS$nvn+9{z~@$C;$c+d-Ngr9e6MM zcQTk))jxm@@Lugzkp>4LX4*jF^UblTos!+DP*(m^^skw+j`Xs@(=@U~(~68}r1PYS7a7J&L>X;r|Gj~})mUC6+#%f&~7&m#ZHEpt0+4=dz0 z%yDguG2J>bb2)w=N@GoIP^XT9Q%fS7;8*Zh$~|gdvlQfNhRN?p1npDLBBA-0{t2U; zyJN@xtQ_A}&%cqJ^sTaCT6W=6*+kA@zf{|Zrd4&$y`x{dwtkzx%1~f`5=Z$-$%MwFM+eAC{XYPC$|C1Q-TBy zexSX=Y%KvY<(QPjZGB`1-@1IPKS7A?wh`xm^t&3JT5jANUCQ6eOzYXk4+sna>c3g- z2RH|V&?#C00!sk_?eC@dVrryc@5=V!;@A|Jbau9eO>;avmB=?HGSnXCe!eK*v%=5z zd1)q8tpyaPcj_3LYEwq#EZdAgIH3z8;g1E12~@dl(xxfA+l1YQjNAGN!U))#Yf&xH zOF`IdR+Cj3(F=VEVVxKV6H(I;qE%Wfc{-i|y)s?P})Z<73C2 zsRXzsWZSa?)3BG60INC1GNS*(Nx*?nYV>debH`BV6BwVY0L8wk6-k4#e0sY0so!b( zv4i{tP)H6CN)DaeH;by@{QYhi@c|#a%bx(kWa5|;#)8oiLOvbLvZpCf;R%X z=E@OQy&JdJADee3VAh!fD=!NyN`b3?BY}PyiDSNRhGe@g+dGIGqn9L;4Gr0zm!>>*)!d8JMZP zfB&8_Ge?{qt{!#}+kE%Bxqi3VG}Low$tNmInLvto2D;;BM@GU0K31yT?Wb+wYvEqMhMK|hs&-!)Y$kBCkC7P z{f;cHr2onSpuxyK<>843t8CTve(meZx3BfQuAJbHlEACMUCGsN@&t$-c{1bv371A* zqma2Mh^YL9G-!Irv*@KgqctG=RVdW7T?F)6&mJ8FJvZtq0s&{d)HrZS4YU|j0KqHE zn`0$1@Egf5H0!nj6w5E^8=GsO!Ik-45a zSXT&d&O(@mChyKSa~QFAGxZ6eMUK?D*r=5ZxQWW*%ma@{aK#lTsG!k&l|b;}P#+6l za9dAxf%Vso&|N00S@0RuOhBrG%9~$ViOuf=CTgn1{Q4W7*Ugnn6`M(QQ;_ZTrQ61z zBFh=IACBvF#oEq#uJgA+x{(Ea1$^8>jZzdcvb1+4VmdlcK*piX=}SA>9K!{3465n! zaIoBVUKCh#m)G?n+4;ZqpCR}RujJ(iUT>XP!j-y58=#UJy zbLF37yiBdOkI<|i5jWYMz4T8&-wkkFJ{uPt4fp-l^prLS*0EV`S|>aj z`1{wzSEOy=cy)kT7Yt@0D=Rjr6rNy4J~1wMUGS*$)6JxMN@}V++-^if1d_mE9|vM{ zC}}(o$xHJjA|@t==WK=L2Fve4w|iPST6y%V5@qLRYzinQLtxpi45akJ_6J&EPZh5? z-N&dXT%copqds&Lh;=10Q!JLRoI}X@1{>D>6Mp9~C^B}Z4b>-4p6s2Rtd8kB2$HEs zfMnN(FlZ6uqNA%@>v_cot9TLU`buN8Z#ry7c!acQS)VmUwkpLBX8yXTA^ZuI?m}Eb zdeK<`xNi*;t%kn@U=hDGFnEeE;h;Lgh`A$@xOb-|lT`vYwy)1OS)lkNK|=r<)n>wO z$ewTtC2b#O1^l}n7ARCnpuhhuYWZYz@4P&k$j@I9W+NiYaksC(KOFJ~$souLrN8hK z&<(9eQIUHs$5wuh`5DY@8 z+u2Qf=9ZV+yFOEnLzV(0gT=}*y`R(5f}O^*?>Cu-M@HOsYFBICAJKy^LC((p1#HEn zll9@8dk7gi`%k_KjrCN`XRFoh9E3=LxByHeLI8jf56H@*bar;G79Pl@A>S!OC|$2ak5~6Zv8Fw1DQyh zKiSB#EeI#5>kuMBG7j!x*0FRZ&x|`d@2ykCt6?9V1qRpAdfvL97ng3VB)g^6!t1z( zP3EzO45tnp=o|=h{=1|YG%{j>l%FjA1Tq+EPW535N9L9_n=$|GF)PCw@(4GNh_FBu$o$PjaX4B0`GD0%8q$=tLt%-R0~KJM1=$SFp)MjF#8sR$ zozI|;1mH{+&(V2e=1&-xNS85*Ju0*Bzm}gVDHz&bP+r`ok_gKV@nH|}IMe%6agiHU zhd&-??ki$SdB&kocY*slVg0Nc?fSFJEBr1Lc*(Y{|*wYffQ<`!%4%gfcJG&)p2DwRryykjMSk*`A#b*&3g>Y)EBsU#Vr(=egNKzF= z`SzlG6=boGy11P0pwX*De6-La&qy-GNDMl_T9w4hCnx3cjxBIw#TWBX3B(!B>H*uL! z#WlV@<*8xFvSmp<{4R`+02*a2)6f1PO(_xLZK;W3qx}hRq^hbJ&@U16_?P02jG@7h zGh)RXM8VjmtGV^t&C~F}m$niAlwwqDxwk7Rvxi?ti*7Avj(5)PDe~W^-#a>9`8V>9 zg)n?r)$<;Hmyq2&^Ju0@HK7q_fl?HkRd7^Hu0pj|;`N+aDenhdbG!!cRBv2cA`Qwt zFRs^rzvw>*wa_xm+?~4DRh025P^lhwp*UANQ+Ag1vCjhWT!ZiXQb|KN0s>UFT`^Fv zV)g_SNqCS7@eOsq-Vxqhd9-bq1@8?CXWB(3kjXpDq3SsdjYPs}R0`>C+1Y4{r7eF2 z?)tnVYqR%A$Th|jY-iN8V60xzY1J0t;%^oogBl%JkPv5V*h^<*F)@MB%sWhj+@b;G z{uK4N!*bJtrOs?CWXzv}hxGCMe9oJZsTes3Ppzx!_)NA>Ig7r7`g6Pa%@UAC;M+FnU~4WLI{Jdn?x?MXP<+^dAqF zD%9i>$q&9hC*m79|f9^KsAKi;@MJw4?#?(mNdqR;Pn*P=6_ z#uP^p=82szTi3;y2s^;ADHaKZ*LSv;^l&YB0>7-)O` zHh&Nd-XNo6lBNEGDjdhf_Vp{Z^DdV1>&JV-SS<8k!@o;4Gthnh{lh_Z@aogqxME*Bw^vE3F-X2LXyB^TUJ8MJoEm< zBg+?~py__h&f~aS6B*x@JVlC&c=vJw%h1fN6j6cS^B$P{jaajcR9M}ZJXlfQ9T;38 zndYz5|KK0x66B1kAc7bXV(vWgvboD9mlORie6`xmAPm{~s2{Mm?f#4M!1$*eV!m2a z@E7q(nEEXDxzO~YOd{Ov!bLQMvxbh>m>p0 zatMar8(G+Y%zkob3zwNiy2D)+Ra9^^#N$5OSUqKS%8PjMjylN)!Pt?}Z4_6{pL6j+ z@)3TT6+5F2j6M zA;eMie33q+Sg!%W^fb!Nut1vlbAPoF!Fz!W160Ic>Fajd%v1|nU%Ez;b*>NCi<6@- zcbMRQDoT`hk3q>}wBdB4N2>zt^I4~T#cRX72@Y`2Au zd$U&l7v{p-5kxA4*5Uc?l2);0-QA}sxZZD@A7*7%d*(aNLjqnB1d>AK69`1F0YV)V zJV}=5DPO5Ip`xPtSgc!TRyX~I6QBcX19G|IaQBtacNSW^49o_(_U%D9U-V<~* zZB#+Cm3d?u8FUSX*Rot;@&kke8lrd^C?ilhBex$1I@=%u>RQw4#X1?li5@Ww60Lp# z(;O%pt?my_R5Z-4ihjtZK*0R)fPc4M47j=5(QkERMf%NzK?n(buddERBv=_W*=LOg zS9s!?ZtbCFMM6TuDa-=tJSbuGMng!SI5{`xX+0=MMTFWHU>M6IX z=W~tTby7EWGV)?wUtfnnaSAwc>@c(dzhf=x($dH*{}hsgJw+<`9+9L5-02?|7w4A7 z9|xm^$mjR>LYlA>vf$v~QY)m&8X4{6()WC`{vUDmS0zo?e7$ijtB{xN1TQ!;(*4st zL}vbfMBU@uf0N;{IimAEzD&t@!lpmxUupkHz2`YrlLLsr5Aeb_> zYj|o#w~kA_y{lvM%1j`Vy1TDtY(H<3jbtstXVn*DZGB|^^Kdh_&I)08G71{9O)l-m zEf*D^_sKs@>rWR#{R0BnArgy7$ASRGVKrOpKr=Hl0}*UCh*kqh=>V|(xAAJ$I-Ebw z*w~oYOUQU7`1I5jIH=pdUy@)DW199v8$wjNHiW6*N1kj#D+Et%?d)10{0z)K$(R(L z5M;p|xg;*oQ5H5f-VYvthStkH>+y5E{6?O<0tBRm#YMQ#fbJ^FRQWYTW>_KU`tadH z@35st^Fh+XIAvE?9t0`vSebnpFkR=u;d$wb@WCN`fv~DU?pp*me}L_}ehqXANOUj2 zA9Fz|13kwd1RgfG1C#q?%+U{`ENhnu$elj?l<@dznq=eu4+9fVtoeb_E-|y$xkOhI z5?Cyg{5m`5BpU?e$c^(x2f^4Sbuv};h+$;WSvd=k`DRn|`4tlk=EE=m{ZTjJu`5a$O)>aT2Pih!FkSgEnw_Hc*KK#UR> zhX@oCs2MR3zlyI0DNIm(e_HbdyzBNqf7Bop+qVhB&^9n256N$43JMS)zl0I8QK&D6 z1|fvXgX@dkq_{LlqbCS`cptm^CFvZLFcuIPqG7Kot*(v(+O7b12x)qk-5H>{c!#B+ z$>NIC*ViLrU9}Ns&Y-^H>+8=7keRb5n1HIVu)a3lcJZ-zFr0T*f?^v?{tPww9LsqoP!* zdaEsG>Un_}XTwTxTpRK+Pjw4`4AnAU$K<9EP*V`d!pMY$Muep4Kx%scnp4uI{muO1 z;?D|;5m)f-c_DNJ!)&xYQ7AdIlI!{3S&sipy#A8ErVtV`PlP>_;d+q$dyeQ90mTXE zxoYYlCCfuxT+LFW+mQY?fMUaZ!ZVcF^zZ<1+R4+GPgs#L{2pSrQ=+v<`8Qcvvop(m zwnk#ROC=Zb+7pMJ7r#|PBNOk?clywVv5q&N!DC3Op&7b#91d6HtY_*ic1$kvq~@Kg zxhbbUeG)nky171Sx`c`K_xA^Hfb2U&Zo*y~M|95URW~#U{#V3)Zd+f`?N^hR7lCrO&;IUU$Ri0BTO7>gSlAuR?8e^y3ERa;wIHNG1lLt*8?LPo48s88(*RKBJ) zt`m1QC0)9{Zsohu?8Tao@oebhDSX3Ga&A#k&s4JQ^I|JaMi3k-L&7tR^dY&a{e+Ec z{OJDOD9xAcI5}&Xcr3iJ>4x9y5{q!%uPq^h4w!4JZ=um4AA-)Flt&aMxdn;^*EeGpm(+eH|uVB+>NYk}TH}kNDYZpn z<}4o;tBHR0RLxD z;1CnqKGN-%d)y+%;Jo%Yvj@>O5VRzigm#d|;GEF8!sv>quI7do0}1i9nT8A0-}(>_ zMVJL19s=8w=3)A_4i1Z;E&b0x{_F|wv;_#=PXt^exo2D{C#fr188?wri4a>L>PIrs z89r+KeCZnI5IsOgn+?uK_o7;;QD^C2AWJ!02-sgF#h1PDJQLw=(ujaf0x4(oOTGLV zq&&SGAan+!C-)Hp|8zM{e{CoOwW_LWYpNDkQnFK44*$OrO~+^dIa8oJ=w)u8*8pTd zVdnA?VgDuCO@~= z5dU`hI^)+ZZk1E^YD<(a#Qi4sxe4cLkfJc)6&HElIb7xxJVy0&@jj=&C^xIbgqCI&t%5{-zVM?_u4`5_smw$VQ_Tf z`nouS#O=>dit7v*T3ORr&sZyx&KFw-SLUDFr>M$S=A_1d4a`iXeM|q@m-oOBFTU8ukBQK zSAJo@=ktq;2TzmE>Yo?U)@_zRALlr#xJmGHUpiUl7)w!|oco+Lgi;@y6p;7a`&Zds z5jmB-%aQHLdD6>DM|}Nt<%M#0n0g$YRGx{}!yM(CZ1Iif(z&`>Ch#Li_b0Vrr}}p- zf91DsA|lO#o#Qh^xo6BnpTmxCo`b&T;@RdfxFol-6mCnz^U22nz0*cvMoOL6O_*fp zCd{FFiPu8QS-kChaSFnVde}z>gJKYuh&|4>Oo zbG)ReUnyn@M$E`0v5*{{+@)WV})DI#xnQnZ)46fnN(-`9He~%$y zuOKH!MNJ*RWi_#MPIU(yc|_kJkbIq^2hgqb3DB?-@Uc5s)m=Z{d>u$lWKN06B(t}q zUrb)<@(C*yL^}^~{aUDBon@hwp+cLgDEI1>!CbRXt>;g7=pEeI*+C=+z%5?gh=*Wf z@8$4x;IEHK&N{5Bl8P_cQ>&hTVMC$ntg}+emVU_*20=CP#@X84={f?~g20r2TgpCG zq%8@-f-~r5V^qt{S?WB~@)hgGBUQLa+1TIz%&&d+fL(Xq4u_8()e3v!-e^;$B?iXi zWXBRJdMo9hAnlQgi>Tf1E9ee002klweT$7e7zYw5d`^sNsZ`7GaT8ly^!P!wN675C zl222drGMSe@Ix=M=`V^x`}@r+stNAOyZy@r93u!+16YdIw8uoi#U8+Bv3}D)sd4Au zDl1~Z+s~USsd#x40AEfWRXy^C^V4pBLE=z*%0?dnE;~Pwb(*l3T1|4nuzrLiH}F0Q z1@toewIG_ZzrJQzt)4Q)KNJ@C=P)0Dptv}g-*k{xk61Q!YJ^-PB`@z;arG1emT+26 z#e-RN2&7S^+)NHIMmyxP`)p3!hFlLQDhl}S6#h8MxKU=Ch+AaC6bK%=|1m{^VU&|e zU(nVbD5*KviHMF)@KS7#w>0%W9KA-vBy0xbq{ek0OlzFBjt)e;8Ih=k6mkbNLB0Ye z3B(8ulEC7*>|=$RKV4=&bV49?M@tWc4G5^dSh^Xn+ui#ba<#v>JI?8g9jTWc@(M>n zBn0Cbb{BP!x3aj17}woL*zF8o+5z$2AcMsy??|A<@^<=tF`5H|mL|dqzW}Qf;jZWze3?>j2!&CL>M4 zb9HlPX8;;OdH@g=afd?lsw+6Qh@MI$4zs>=Xyx6Ss0@W6vWKn|v%YvkUDs2!MY>>1 zll3S=t;8V0nlj2_otNjRkHSb<9nNl^TqI=MWt@k>p}X8b2KApsxeH z^6l@kSV1UAVy<`TFbIf3fFeGCe$^2WaHf327#+fKeksB6XcZ z-f1||npPN|8Uw| zfEEh*fmxLRK#c)mVVKZy`=+70#{FbR$LW!?*mGgXEF-cd@MQwO&m)Hst+9Y@^|#_D zD=h0OY9^3=2Vg~97^kiU`kIO=sr|_y906t=?2iq1={9rtjBG?BI zl>|N~`ZyMSvz@8h+6~67fVZAgQ&YCkMGX^@4tI{|$A%^je>f!Y_|2eG7twFg)Fce; zMF^UNfcmic8FD4r+0%OzgmvJ5_MrGv9?ayG+d=XGzO$H-u;A30%1rTKV+0rS~BghsP>k=t<5k-;^j*;;j4ctjTgXEx>8(LZm?HD@HvHPS%=(8YMV7nR&21CE;rwj zh>L$Hte$sKuq&UxFb`zP^z2f}m6_eNPos%UT7Gfi#x$#Ilu z7c<-CS!huqlD>$jl}#hvwS7{RS#dHfv!Vc1lkrTREF$}2vw~wCeN~Lf!y43dTXx!r z7*mhL+!*GRse-%Qo$r2_+{jKJYL9Kd<#W!X)k99E>zVaV$G)~=?|tR}jLlZIMahq% z+h|_ntCBA5A?^@ok%psviCJ>F3WsR@YsERD1amu+GFm+}ovvx7s6fKMA&O+Sl5g&E zmg#K%U`wFF=Rvz97yZ)G%!U(@aZ1_Q%C;JiT*HN%lWVaoPIL11?Jq^A`{+ajRAj$d z_ZasSa%}OtS8YT;Jlwm)YBzSM_m4<0E!Zl1R+@er(2vmUh1EV4biC*ofvqHUVNzlR>e zMWJrVl|V%@zjWlJiM2G79eHWLM#Jo?W_Qm zh?9fV?|Fhw_qCKt{7%c>@EymEmn1UuR`wAF-y8T+e%svNu1VjpBeocgO zX@6UteQqU#&J^*59k+Mx5$7sxMEBMm%qO)m$3pJnx=XndFRV=( z&IfauhGgjywfw8lB(!}3akS`a!r#5>VZPj$r3?KzHerkagrxQ(6+QGkJg2d}D^fd; zLaDk9SQ&+(r6<_;+ZOwilF^!>!W+u{Zzl=zc} zd|p7@gH(EH-Adj9dCr4%rynnq_^;)c#sVWld9>I$p4bl$zg^1Ca|y8@(Eko}`2x)RljrJvUdLwHLV z3&Ln+7h)cuq4I9ePL;@4w&r|Fs>g(;}q*G)=&4~~=vOp^;eLP<9L7Sp}bh%yVt<6`Z1hM*23g)y*msg2uSX_vSci(ZET3R`49s?q-Tmmtz86LnC@gE1!1p$R2Tyf2la#(U1360~2*n`_K#WN#%hl57f*l1+ppGO|-4%3djwEo3~e>wEux&v88WANPIS zC7yQ|YZEbPTnu@3X+sl{G z)1ynkN@uq8d|n;dQ>x}!r@Pmz{3bNUC@lAsZQJXSdG{mb?U|lt zYmPk}oN(Q+dTI8M{P$n+mR?`3g>z%qV_Zf}Bh$5iWLnPaa!?N_GYPV@N!Wx$+TW!= zA3mvWot&a01~VMLSJHBD;i2WQagc{!oe$h(Lb?i!!lV)oBiqngya2@Ybpt&I3b144 z&9Grd;?yk(j;!j;^qq%e;oJU z(bpq?*n&1*>yb4FL-5c}wpo#ueNlRRA0EHg4z4#F?l$%vhc+;H%;(1t^ml9$_I|&A z+d*~P0Bl$J;ze#azESh|N%gKeix9$O$of!DY31~U=pU;RqdlFU6j9}qEGa2T7)Do* zz4P%NTv`JaA>sLY_Fya)&>Td8`@mqOr#R{)L1CA&L^tT#oTO76kP~v1zsL|ON$^C+ zuC91`q@$p5*j!&dZ~o@pS@mkJf!dD!F` znI!cs@9ph+#A5L4u9?Iq)*h>n*tX}ad-ceHV#EU-JxGaI@xSXA8JrCzb9I)Q8}G%R8G$1|v#E_*y@~y$8?a!2RA+w=CE@a;ru`4^1IQgU0M-Kk|6CVMnZXq6u*S)sz@vna?;(|R7+#D}LTk<}wgqp9f%n@cs zJO?One)W}$AW!Llvhs3*paJptA1)Oeyw6EHOeJ}nep#pY2K#|OPrnErqhqEWBbmb65QCYu$yUGS;7Gr3pGcLCc6 zwZ0&@0JS>N*u!e6q@*+i&F2X0t6ayAGZML8UbE-S%+39?HX~7RvI#;0KB0_g? zv%N}hxq!l%YZD(N$RYt2TJETqN`?J4OI9$~G;gXoRD-FocAM8JvK z`W7`=@XhZaFo_~?LynGlJB1Bk61j9{LzGf>^VbA?6B+Ohz~#+w@L>Bv-}Q44gswop zP74X}wY;%SGz zu~G`w@V+(GQ?F1W(wUh|b}HD6UATqg&f(3^yDX;s`KI|8IUsQ84j5N?DW#lkRB5(x zs}*4qiQ5mj`MD0b2SGwT`$bhqZ?~adH2xzIB5hOh$T z4FU72gv>o$H&C&{>K<%Z?a(z)(a;pVgTgyYo3<>mPyELBIyBfys;cSWR*By9pw9}& zCC7sxsC?JwwjWjqGl7Pku-jwPD8MG@)ho0E*%UvbF3CKF@_`7=LpA~Q0V~)ynseIL zp%+bZ-i)_x`K(v==EKj^I}=2;LWD>d15Hd7f;FTCX@pX_8KgNBLY69oa25!BoO`O^ z%+so>=4_uTJsZxm85vbOg9TZBc-n}DP{P~$2i%DcM*mC}b^#r{dURoq9R9|%-aA;sB+{6gg zqImT!40swM4Mx#Co8eF>oxMLc1GfIdb1b`}3Bw!80{fmlAQhs_i!99(tU3OTH|dI+m7Z1M?10(9l2U=*{2T&TBdiK^ zl;og?f83#$DUghwUfa?6?Aeh&Wup(Idc~U?8;Ks95JJPnMx3P}a&r0)Qj~W&a!Kab z5aJW;Zcn4rpvomA?qIt(kLD18UNFp{4g7%KR{Lim5i^0+AdY=F!6ShlLfnAH^T*Sm z12rbXLx28Ul#{z#l3m-;5e3r|5kW>)(Le&oLID^@JdOfTToYKaV{1VswMaLZotxv} zoY{2C^A>M7asAVwcUzmDEXS@k;@BpRxfHK?YI>$R!E&#yPe4H3!_FWM6}NNMyL)n(7G6Ek+l6zo z<#cip3o9!RDJiK(^PpyIWTgMASFe^-Hc)&O-x^HD>G3H`oBy=p6=$3&zhd`Hfvsa% zRcz7KkmK3@rYG^_=QH{rLd~dWH8VB7-MFWy72Ox%ALn<}k5&aaZFPNI$yq~3W%v@B zqxsCak`%ybi83wU@=%Uv!&Xb4gfE~D~jYHS=LA{y}W_yeciz!GyGNi_FpxffvF~)Jqy?NH4ACMg4j}nao%p zJ+(34?C;7y-}z4aGXPi#XTBK^A$)^j_(ERG%2A-iV8=N`;ADsx9i5qJN2H}+v-5$j z`|liuNViz`^46U2|5qE<{Nv5tO{-PiA;}E4BXz1bcp_M77p^|;Y;GM>W_(WS%G<*e za!Ix_dYWS|^JU97j@_aLDvslMLFZ%7Hk!PnaN%EZ)p$^4&M!pHFCV;UAmq|6vmkxh zCOA(2cI_hNRnPgQqg$-ho%Hh7`s1+XDf4h~z9kK#3Xa`w$9{n6nLtyM6os7*OB#9W zm-63til^5WDLE8QHm3c|9ZIFza%db9kJ7W+mKRC6{6M3lcm$@@yESjST&rDZ*Ry#V zjFYGxnPydY+AW60Rv#p-x{y8yXSivwqqMJ(5D^SWg>VYLpvZBP1C z{doe^=>%=&iNouQARYOpddQAXLm)ROzxHQk)LF!CQD3DN;WO80S^1!B7(^#VR^sINbH9w-IJ={|KYrXbH1O;l ze`-#PklFA%BONB`Yh43{hI{ZB;zevbnIH08TL)Wv=V;$_Tf0Cqjacf>gOeGXS2`Wr z>y*+jm`0t8ls5;oB}o)cVaB1+X4jfNW1K{%Cfes zHxc$KM*PgdP=kv{|7u#CXyLBjWplaSgYw%Ml|KyRgXGtakhd3@W~C*`ewC4Z8Pi!eo#0;R3|~h_9!zod-+xFP#mOy3W{od3YQB zl`Cag)Axb`UidYTDEjYE(H;5pP+R*~TxOSdA?zJF)5t?^JtSg*$1uDhF1rOtbKdiT%xRCd8ct8j>@iApX zpU+)#8-(MMLjx;wncwibIr+{&fVt=TR-#87jlW z#r3i!amZ9vjrMSsYCzSoYJn&6tXv@uXHO4h^1Q1(Z=qZzbuyO^?>E~@!nh2@>1bh& zIsRZ2Iy%?2ofxm4@Q~KcebdoY`8d9H z7Y&_DOL`3@Za4lO&v8a$pRMZ_~W2p z#CsYY{Pva^-hFR6FnQLx%aA#tRrAsiBSi$+9TIVql(W&h(xS9h zWKgjdJH;ouv_MHt9;KJ&{{h>wdSaC2DmFM-$|*mW=78g!iW`^pov&CDK>76dMU45cC`nHG_d7084=@eeu|!qy71ihPmNCa z6`7VJzjcB#s3Jmy#aaz=1=`lKcMnRu9FD%Y#YQfpB1|^z-%`D$ZYNANbtioC%ITn& z*6yg-kNRY1ymmCL3Yfv0{q0Mh@Bc~&5tB43Qquvxx5d4g54^gScW)>6)}W*C@>?Uj z7Ht+4(9?S1>#zFvB_YVRJbfa;l8oUdgU5Ey?CFdFzuU*>LR=&V@9(ruWfC`yp!^}(rdYN}(QRyARh z>{`W-_tg7du(JME6L^h(>P-%OlBT%k<(=tNl;2O2K~D4CxP#3d1`w9 zUIyq9CsC2j(M|(FCUTkT_-Ax!ALQ>F=#^wxCvM;=C6%z46B^1FD9flX4&}2e(7(k% zN%r@v@NA`Tbe~4-v~{8taulzSgx<^IS8+RF`Zh&Rs--B`D$E`;-gkp2bBek<*V z$;l5iLu7*%ugA})omntQkMg7_>QUvoKYNeIh(F@bBYXOo10(gjtE*x-dxR8Z_Lf{= zYkt$;oPz>6mp9rr*0 z)1O%vMh4hlQQ_`?d0Pu9TlN5tMi4Ls)wb}yaP&k55fu*qejE#EZM^_!Ob+RWW#E0? zNA4e$aQYF}Rz}0`8qTM5EuLFwgg9W{;ynODHEIl~p)~kR2 z%L~NwX5CZ30m9xKK-krCGf(*@Ks)n*0meOU0Y2+Ev#1Iwd1!O7pGa|+UbS|Ff-AKK^6A?iV4SK2jPWdGy-=W3*kMlm@vtmlL zC3s_0ayR!APjBEpZL*q%>Y&}`&*a@p_K&2$ek3bI!q#J>FGL@6rPp#8!EU%+!d9)U zfWAHw85Q`G1-8FS-NvtMy7*3rz#aWex$rv`J^eMbNd$m~L`uRsg2mFX8o#*+XY~T= zeIkDon*6=e9=D%P#3Uw$1V8*AnOYAyz68+3yb}Zyi)Rc0Y6OjlhIev01t2sbnbx`_ zO&~ySxT(5j_D@Ut5IYF~G!>skK*s=wk$Bf)n_p?QAcf%t1ZJS8=bP`tdf>o={Cpvm z@r^l~Y(c11(7lrYQ{^K<&>-x95R?QEo0D@AMDcNG9%GO($H>a6g!C}%2S=d0*kk18 zkGtP16_mCQF^R-8jAwuojt!&@d;*b6P~Y&XJ9$&;GoQ3cC`)X0{KRy4s=49@il1JK z*e>o@7V&8rHBvkGF)%QcgMH@Bdian5QJUs?f03`ji|9TU#zVt5?U>^e@ZX;bp(}j|8~eI}i`sQ|CsYt) z3;T|n-6bBv^2t7gP&jV^7$WjNIXQQ+vDt0(<^Aif+O+f*;^aIJdwh!R7NCL*5X@p{ zLV+w1ne#|NI4>uMT!$mDemMT_InLPhFQL~4J=NwefGDeoP$Pg(LWj>CrHq#KCoyiX zfz}JT@5HNx%S??ngCNTNo|c%+;$PV>5WGN!PD-S|-c0V8_^=$oCRqbK-l_kx*O34A zGW%gNNZSIFgAlw1`7;4=S9fJEBhdy)gPUjcZJ%ua8fjxGme?w<2SIr_Y0>_|EA+Wp@rMItqm*4ugGWfd(Wa&d3Z(a64H4p_7NsqiI)+lXK;ow1;#d+3ND>pxaI4Ee=Ef)#uPKNY6g# zW`xLiK}6397{7ZA_J@O$Zoinol`0=o=#`CrUi$`+0Q#AMtKxg}t3tly5|*%5D-qw# z)uXDh0;VH%_bCn-M85{Oo!jJ%panM%k0Q9509Ud~2>*S11~M@-0M>*wP(ZhU0IdnG z0 z-3O*o9-gZ0@^R~a%(m;Og7Pmz{pdnG1x~nwGAl#mm~pWJ8f{_PsY(yhj$2}$%XWxD zmV|U$Pft%*fCXtkH(qP#mO~oy1<4pc+Ed!$rz7BaprB1!4S4E5B6;v5M0-TWFR}rj z9Gfq!31b>?E_$eC%RowiNj|1r~)6@(~((1d5nq`Tu(tmyMBn48w}!+M+d) zWC4mKM5?J5TcaAD7SKBct729ceBQjUD;D7uR<9E9q&Pt5)B*JzVSs|3iI(m8bzxSB zvkzfokR*`Wz&%DLcomVNkRF`!=mrsy=-ThR2QMO#qC>=i^dUSkLuV@-VuvBnu9lXE zNKBul=p86kqOiu`tK=p)rB_nu&_!eH9s}lqoP5cr>L5}|ZP3MQh9YhSF41%DH zh(toFP4!rl{FYV%s2ikP5P?*9kD1)AYJ8vUctOt+N&)a}N+=!?k&%xdUwwA`CuAfR zNX^CE9DtWbV@?H-&&5JwFV!Dtd9HoJNO>iJ>w>@dC&|vtV?BrO0U9{6WW_yu%cR_b zfkEs-%)l+3{U8L0xgs(}ju%!9mehcy;!O#U;a}o=u#D7UC3}1OcMIiH{C`zyxRT;X zX?tFHQXb+_(gX3j6+J|~sCDefnqo`ka)=_oF%b)5P;m1ow%ZTl{g9Ks_d^|o5EqqeqontebJ z12G6_7YjNY;k$kZhAN@f8SI4FcQ%sO`=?atpm(8uonrd4**bgDi^>`8B%p*UMX_wSo`P$FSR6&fmur!N(dq zDrZ*h@yn*-*>h`4wWEJktRN+jrwb$R+vwJMBYWniMnRl@Qk3j9e{&XEYM}fW#Cdh(IPi78H*Yt=eiK**)p?`*voSsxLCeRRMsm)A*XznS;Vpo#yxzzLO-!}J;SquCw zcs!~-wDs-u^C{x9s=B@yme2Cm*l2|bJi2Yf8-9Ea%n;}C8q)#nq~ zj~%;{_njoa(II&IANt|m)6bKncOMQfy1QC!&bh5S^L@*Lbo4Z}uBcjtC4QQ;`_aTP zrX&JAe4+At>_fI2X_at#$SYU$+eE7?zmiZd`<{}KJJ3B_-LpZ9VbJ+Y-FyGQ>ciFR zw`sR>f~&+tbBoZ~)69j&y2gyib1l-$>3IHTzhnwQ1c}!(roAktHt`zXwlj#$C$Iw= zYDhxN_u6TyAC*kl4hmYdH{HG27xxZb?w$VR%=rR z7t+DI`?{Q#AH3jMZ~Jn^g!Gd>^{XwF;U_qlI|dxA^(~)Ac`}b(i)~;QxKb0vF)+!G z%Vp9^tK(|J&SONiq`CFV^=hJy9`Vf#Q>0HQmQ|f_c3#Pgt6&rGqG6TSy(ug# zP2fO!h#9?#Z7J=4t^R8=JzyJbK&z+OwH&Y}TJIaqdTIzXHVzwmTn>NE{3O}nc}NKG zO2@mVXKjNn1WdDEatPe3ZAZK3&y^5f6;^}V>KVX7>}XqlvnM^*rd(^T451B#YULGN9 z{ql`W#Lq!xE?alS_o+hc)RBB^U);JxH<#SLkwL(b@z2}?A}TH>jBG%wQPOi)9k=^wWih;G8AM9@Kf}^LzVKT z)8u}#yJj|W7xS&w%`6`8;@p-@C6Z-{+b6n;)uyYl;EMNS)3|FO;B__O!>X;mH6D$9 z=;URD&kYR=r+>dOgfE z!t%3Ile%-w!10(s;twTTMp@%SKJD+>ApoE$6hM=tXTu9?OSEk^%@(m9)jEg1afJF1 zZ7-HZKrJlNXeYy=8lF_jf)A-wxBi5c^YvZ*TAYMuBz#rArC(+4a7fRm_hB!0%2K2E zy(fE0HilE(R|VT-aoheBLy-gYM8n@X+Ls~8l`Y0rv& z+Qq>r|4dVEvZ=Ya8AH)_XoanC+$9;64WCrSQ#t@<#6CxyoGFY{fn>=!t())klfIKA z>uvLe)gsLSiop@zZD!n>Ymi*MrYjK363Bj-^5}Ni3B{R0(efAKC5cjpD1*LRJX=3D z;k%Vm8?n$f&YZ1N2~}v^T7gBwmpt|C$A5a7Ta+uU`6+cMZ$2~%rF?0QFJG)D5NoaS zGBS`o{m6bFJ^$f2W)pkAd+ZNSzZvAMd7|?2KJkmD5ds_&4*9~If#B$llRajI1z*K4 zt_6B#sxCjsE=EFNI2@AwX1{_|PO_+}qBoH!v$Goex=?PbV_JJzWhWiu(>z(q!Ek-< zyk%r}7NfbZh;1+1jpBOLfQJkjmVsblT$#5_D-CUk^ z4DuuO-<=QVJ7*#x{Gm9x6wjM{A(HyJFXlY{tBo8w2Uph#1Z*wul;_`$YTn`bJ#h3r@7rbkM&;IF*o)P*zdlG$OZpX(H;$lQvXVNbl$AcA0kn*p=|-QWp*L zkBoQ13F9tzFR2}O8;T7u5FlCZXd<#K9J=dD}9*_+z;! z*O4Q_-X8B&_hI(b6Eyt=Y=`;0aW!Ir`?{pGii^nt)T|_NV6B-Z8(0Xl+Pk_6IY>h# zWcR)J{^H`|qwU%sRHhz>PN9boFnq%VO$LbVcUS+R!&6jOf9UK9V+WGQ6Hq&l+9LyU z!e9a#DZ&K*AJH4)&9CCxa$SCxjm4XQe82JMtiP_|p=p6Fg&6BV7&>6M7(+e%)w}y& z0U`V!4&1|vz7a8l1lJDQwb!FB9I7S_FGLLxc23OEC_qyvXV*T6Olk=dVsuwue?Kv! zjs$9OtfUB3HxNqKK-{2V!j4vpDC^#CEO#03p@by@AmC7(BNF3LCbRq!NrcP=vk=M$ zdXZBGlK-sSy!1rP_qCxr^zo-%^PK-dqhbnO_19^%u)+Ysyv$Lla)3i8+87K;f{tol ztrNH#62|)1AXXE&nQlg1eGz6ADEu$w`7VmzG!S5c zEL;u&=p=|lFa;h0-Sp_hL<63IX81DfL|&s8C-oyD)*!@3i$O}*sHtgaMo@fz`20B% z$qEqCJbJNCj5I)vym#+j6h`cf?^{|zQF1*%RSrd0EkX=i11MjhT3SqofPvHX+nWaR9xKD;dTDlMq4cP*t>i*SUCcCrWcL=%0zaP$45Q<>rKi z0mIEwpBeq}g5)YAQU#vhvHaYg*C~d-vb%>J_k1WHUJ$s1Bihr>#&g&}<$64td5!?tZ zMkroDLt+ZR>PV;%JTgjf23P|+tnw}m_mkjah60A8SRTG|Xb6=x3{%GjhUynFmBAyRU8X{8`3Inj~+hJ$_*r9y{Ts4S*R^`Lxv zTrKC$H^J7z@O4G;{uS-V%0-Z$TzwPm>G33~ba?XmLj!F+V-V9cbvNvz$F^WLHLN?C;w)v=|mxy70gvp}JBMRBoTnHRr0z?1msqx1j0j61($^)^i*~qj5}{8V7i_%goa$A zqL&FsAgQ4@t-`XHh8H{(Tge55igHG42D1xRd)aI*QxjDHkuw1p0wYhA5hEapIY`)B zMj*HgjO~R{%C*ly(Z5&R=6f+OUOc2VO5#>KLixnmUw2tW@0P*(8W=ph*uIP&@r4^@~48* zh*)4E5BX)+3v1@@(L4@tS)h2NCCKi|QC=m7{J#9tzMF54aC57usDwP0@z%%5Bqw)- zpI;Sgctl!Sx_d6LU%joVDG~_4Rq@?|ETP0?JeNOxys#l1)3Jkr?jcsb3AhN-Nl=&+ zAvpn0Tr_q8ys9bA#y)e&5)S8aF64@bzbY!S!2Kxl{Cl&hwN*ezV2_YdG=8&GmBsw& ziL~M+Ok>o~UzV4{DML&H1m9IS!WRO4a0_?_l}aOn=K1DIvxu5*z8wTF_wc=AYE^YG zdc6|Y3*xj?RKbWe{?}-b(r(zH(!I3W2l4LZ$#Pwk6d9a-vKia!n`WQUvGD1FPQDcA z_VU(m_A8c_VoAhg(fR(rkfFz3ms7KRAkTjalSnjok3B77ockL(%vrO?$EsYqHPg=Z zkgYpw_y?LOQGQJU{m;l(EcucVeRpry89!gXl~#+`b)i*I_F5>JEIB(ft?mmW9lBj$ zAs|3*E7w|I^2^px@rm6(a%(igG)+_{)#OaldVKaNbQEho#S#A;k|RF+cISC7L~b1aGN`AUW>VQCAcSJ>?Yzw(^c)t2x|}W9(rT}c zdXMMDoME&KF+DZ=fQsY6j)b?FL41|eXE6d9L+B1_6^ET?+-c|V(W>=YL}n;a0%y^n zz^|bBuV>OB)nlQpW%-v``QP7=N$V@T$|fj!^2KuwA5Ba`jfM||$B*EagYw{bQO3odIa3%(xVt+{Z=?D@FV z>GiaX2m&<;xqwfL2{Fzo=1N+np(I!J--Es<;J?38z#*b}LcWDZqgBgULBjiga?I{{&`P&(IcOSV z5Wf*)5Mzd~v0S<{a+vW{a6ymRaQH08WHdfY)RVY+O&Hpa^Rn*_5%<$4bE>Q9tCyL~ zsWk5>o_~gCh>IdGGV$BRx0yp+soWvX81>UlQmHK{KOpRX^*V|Q7@+UD;WiI5bIHTCUp)>dH<$S(WVWS<1iz*q#MNxE+ z2o2GN)Q_AEK46-z%|-m1uUfXx%AphWzvj<^FuDRB$-piY8P5rM#v|g2zrqwjVR<(3 z_POti^7~vrn6@0Xx2md??a1O`+`F5N?QKp@uYJ&J0wNfT;{1CO#wVd1{lGHicdNswEWp zO2AwlZs$C<*2E5^e_T(1g;4J!4-Vc5&sH4W zxhYNf-ozj0wg382x3d7lVu=C_7Sl%5l{9w79mO;}!oupWK`zNVg9a!^X_0|cZAVmA z!4(x1qA>pgkCvCSzzWWTkyVD9`x*4k^Ei;2adh(dfrPvtJoYUaN$EH+KYsrJJL6Hf zogbmcPywWmAns3ASJ7a6sq)>rDuimu9a%;TH%2`kV@;!=o4ucultdT|9>v6HUq4N- zb7*ggBWI}+vk`GzJOCU$)~n;_SOkx%3K+zrgh-UA4+eav~~$>0sDy#*(k1cleJZMXu0qTWXq(y_FLZ}hh!)yPn2v8fesTs;oqRhrZeGhB-_D!-oCKG%#`>ER| zSZ#_}!Uc~ngD2w-3dAD!1uIMoq`C0|9Tob$-3Jcb^uC446+8h$JKLnOTq^}Wz=4wAu zHp%&|-inHc&o?C=jLwK~TUg4eD})zq=kL@OU{_fzc%2r@z+!PpM>ZognQlfxy_ST8 zLP%Ne+~u@4osFr#InB5E3x6XM+;rCvzV=#5LwTR_)3PK^3sE|oa}?as|BNr!j@SM; zv+-}y+kel*Z`Y51E69ENd?p&^1P??6p%NlG?aXc)o}!|ng5K$EWTf!sw?Z<`hRkyOR=cI7Z* zq6u7?AEyO0LN}wulyS+A80C^b+4=SBqsYkj80q>pG(G*!xC zD&I@)?ve`WjOm{nk=Sm1{rV8PyTdw85=v#XjEChlkn;Zn8`7{hcGSZRRCFF!i}z<$ zE-fySsO#!Bq67qMKMW?lufkQx#`ngJ8)H9yXc`)->Feuv&IuX4rRpZXe)FaktT!4F zq3A|YXI|FP8M%E5Y+HZ+_WY#`9vb`#CMG7i3;R!siV~p{BzU_&+muAd#@@TrXI41m zSU$Vz72ozF*lF_iDYPD{1_t{NL~PI1X~D)vTp(&}jeil^wzm8Py~N9Ve{IdZQEbm`Z!qR8>_kbicQHh2Q~e8=DcZn0Fpj-u|_#yu93NZISxUd%wY%7ez&nii%Fa z+7_yiPKa5`uI9~NCWI~6XMQfNk-o?$f%5?q|L{|P2CFXF+S*>&Xc(ytqSwvUxq7TS zRXR+2*Prur=ZuUFfHuv@$_jyh?_l-$Tk}GOZ=%8M2b-t$s~f^SL`_Xi0&kL* zv2i;HxLJ=%bT-=~8g?h|Kd2qY0Obm>yVu>He_53A8J zo2`xQBp-{6A8u0Lj)w1MXdC!$qxFGEx?P?ZQ5`twvAcNzZge+Bnf ZP0CQI$e-MoK!X1$%U_hsJ8u&3e*lG2oD2W} literal 0 HcmV?d00001 diff --git a/doxygen/inherit_graph_103.map b/doxygen/inherit_graph_103.map new file mode 100644 index 0000000000..155289a779 --- /dev/null +++ b/doxygen/inherit_graph_103.map @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/doxygen/inherit_graph_103.md5 b/doxygen/inherit_graph_103.md5 new file mode 100644 index 0000000000..c98c444558 --- /dev/null +++ b/doxygen/inherit_graph_103.md5 @@ -0,0 +1 @@ +570484ee268fed1ef427dab3ae9ceed5 \ No newline at end of file diff --git a/doxygen/inherit_graph_103.png b/doxygen/inherit_graph_103.png new file mode 100644 index 0000000000000000000000000000000000000000..3dd013d137701c916ced0a2555416bdb87063d06 GIT binary patch literal 41611 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 qMEmgJ-`o93b&b?Cr literal 0 HcmV?d00001 diff --git a/doxygen/inherit_graph_104.map b/doxygen/inherit_graph_104.map new file mode 100644 index 0000000000..6178d7f8db --- /dev/null +++ b/doxygen/inherit_graph_104.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/doxygen/inherit_graph_104.md5 b/doxygen/inherit_graph_104.md5 new file mode 100644 index 0000000000..8b815fb4ff --- /dev/null +++ b/doxygen/inherit_graph_104.md5 @@ -0,0 +1 @@ +827a3801aa848ac55a7eb3f7e8fec910 \ No newline at end of file diff --git a/doxygen/inherit_graph_104.png b/doxygen/inherit_graph_104.png new file mode 100644 index 0000000000000000000000000000000000000000..39c332042de7c06c6cc3d6776ef9625fe07bb310 GIT binary patch literal 16325 zcmZvD1z1&E+wG#e1!)A4kPrj}X#u4q1W7?+6Vf0h3Ift0B`pXj$f3KH4h1n#0qKyC zknXzgI^X}_|K9st&p95R&E9LTHRl`S9b?Q0ZB1n|Vn$*FLC929lyndT%MO12Mu-o8 zlP4+8!2j?q)s>ZyGxVSA_xUdnzMo-}98`N=A;$u2bcHY4o8lnR9Z{nvnmgb#tdil>RGDVapfk>P|J z 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 Fe*uZ2Yt{e& literal 0 HcmV?d00001 diff --git a/doxygen/inherit_graph_11.map b/doxygen/inherit_graph_11.map new file mode 100644 index 0000000000..ff25c6d07a --- /dev/null +++ b/doxygen/inherit_graph_11.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_11.md5 b/doxygen/inherit_graph_11.md5 new file mode 100644 index 0000000000..74a5210c95 --- /dev/null +++ b/doxygen/inherit_graph_11.md5 @@ -0,0 +1 @@ +27559c7f6d62fbe4061030ba991c97fa \ No newline at end of file diff --git a/doxygen/inherit_graph_11.png b/doxygen/inherit_graph_11.png new file mode 100644 index 0000000000000000000000000000000000000000..fe3af1c3ae2d8916c37935a20ac84bdd4332081d GIT binary patch literal 1635 zcmV-p2AuhcP)Vz|ArPsD#9kcrrG|mwnyVy1D>NID>jm2uiEYj6`S3j6IJY&; zsnyO82D{F=&N=_x_n)2XzIP8`Fc=I5gOQAIa~t$}eLBZ+yH-LBV`(9xC)ciB8=Kvh zGB=6ixLq8_-CRCdjAf)0z(2DaA`CFYl`B`4Tn%ISFdB_f+Xc(4gYlce43Ok710*?1 zVt|Q>2`H6H_#6V{iK zl7fbY20lJ><_y-XS%VWNP5=NnF5*5M0KjUsLM#?TrBXp85-pi_AVFI|C=`OlVu4Df zg2`mU@bGY0zh1A$ojZ5X(9nSW`}gC~qep0OZ%0{K8J{yZp1TF;^?KaBdl!w3jZmpn zFdB_;yWR8F005nxozUrYP^;CjSST0yMwnD4bV*B>(&}y||{e69XICA6&($dmkHk*-~n+vzw4Tro%-z-F`YIWn0Hd-m*s zMx%kx=R;p#AIxSmOePbALLooLix)3YS67FP8#lsiHe>VV%@`OMKu=E(ii(O7aVP-* zB_$>hA8Qy?gf(0J2yt3!bB@s)`H-gJ$meUUUuc=FJ<3L?Yzo=JIWY zg@qA$`T6-_ab{*FGBYz{#?i>h$>HCxU%wsz;Prap@pyi!VQ6Rw!C(+|b#-C$aU6$N zuU;W5D+>T{_3Blmr>A4*&Yh^OtqsdntJN4889`@fCwx91v|24xDiv0(TJ=-Si^cEv zqobn(ZEbCEI2<^5@L)o}Z5C|+u~>|$sVPiNP4NYb*Xxa3C}r{WW~`zqo(8d4436V) z>eQ)-qH4BjE?l^PO`A5MzrP<2ha=2H3WWj+g#w>Hf5wd)H*o3FB^V3_95`?QTCEmE zMMV$@5_44@3lqLefu`nu3ejuHD*|};+&iuWMpLE^5x3_ zfa&RJG&eWL9T%?%Or(bF>}+h=vIS3{K7~S|fKsW%?%li5-`@|hSPTHTckdorT3XQ6 z)rIrt&!e=o6koo4iC9Y_k)Wog1`dYFLnx^=NEt{3Y$tIC}IbPM$o8{QP_j z4i3U@x1*w>BH?AS5v*s%jTo$jaWW@l&P+_`gj z`}QqrYHEH-do-GwnlLyxi2C~axZ7gFS!fYB!{p>7xm+&#@Zke}|Nfoqb~^#?RNV1?c0KnMJxse254w#C}Hz0gjhvj#HMO67&IKm-DJ-L{9PE0Mi5b{)oKlU zAcXxInB*`6Bst6gNe(kWlEVy; + + diff --git a/doxygen/inherit_graph_12.md5 b/doxygen/inherit_graph_12.md5 new file mode 100644 index 0000000000..8f35efcff4 --- /dev/null +++ b/doxygen/inherit_graph_12.md5 @@ -0,0 +1 @@ +d580d680ffa76c492b545ca4c5e06323 \ No newline at end of file diff --git a/doxygen/inherit_graph_12.png b/doxygen/inherit_graph_12.png new file mode 100644 index 0000000000000000000000000000000000000000..cf572141f6a8716d3b0772c219e499428b82f57b GIT binary patch literal 2935 zcmX|@2{e@78^?!AS!)my(%6Q^F0zNQN0Q_>g-qGku^YQl27}5^WS1qS!6amxR2a%O zgzO|5hHNt!>;HAm@BGhu-uIsOzRSJ$x!>pWeG;uKjXBu_*+3u=r>P0t8fXiEQ~3-F za7}C<3j!Jzq`5I1baZ?aw!BUUf!JZDa6OyQ+?CwO8-pX;r0D`kw?HW-zm3I~fy`2v+nHL$hiV_{(_L++kVT}1RryA#ReTl+h6Y1IgP zh?cRF(`Cy%ji9r|jnNJKbPl7qt%rAutVCsHQ!+EmB#3)|o20j?^189&cK#e=3+CqL z27!Sp@}9K_fs~H_KM4#k@KwU4q|DBx>2}=IJ&4cB68Qb+k0#|j+bREm0My?Jb+=lC z*LWSLQ8D>gwuHD0D4rdSm|khCl%Bcp`UZ6aLN0>g-dz)!W@Io?&JPhYJe}|C^h8Lo?)W$-;umfJZGHZewk& z&&tXgNa??<5w;=j?CeZ#45IF+-)DIH`o0F<^6>I1+1T*sW_$c&Y;1|#_d@m_R8jGn zhldBHqKXJfgzIYtFRxKZJo(7A()_7qXQc~0FO?If!u|*!{}BIA&65&q=@cApN0x+A z5#;oqYJOQ(!oV4cv7Th!-R#q45XQz3uNTG}gDNnSrRJHG5y$ADE7MaEaQNclqK&e->DhHrKP()ff)zO~J?^KH*MD7JApi<`w2N%y>y0kjr>*^{cbL9$obd)u@ zow=Aysjka40s2ldGv!BYm_~W6|7x!u^`a~->7&t&=DPW7yvMsNk$}T-9IjSZE5HyR z&hX1S(C(!Y{YHAEc-c^!3l6!XdB=$ z-3cxq@-Qj27MGAHA`(T6Q-xx$D=;?x3l7uAp*Cr0X_K2bje~<#&CJaSz+6844kb-= z`D9|Z_-BP(xM1x5$eTMAyuFw@%l`4Ef6w(ioY z>#LuR&_hhEK$H6J9V|W}LG1Enrqz~hk&ccI&;(k%10|$$K)YR1RtAB=y64rK)utnO z09?O$^XBRI`SQ1K{TWzg3M(y=2!wa6Awa6Vt<4IFgshC#Bm`>Y-K;AvF6I>$wm`S! zW3lgRY8HPI9yUk$`8`DGl4v_LZK8VKcX-k zEGJ|giMdHhNmwi}SQ5ZE080HcGor%U=zn$gmX)g-sUualA3YLpIoKLM-u30t8eSeA zgT1X4F~}<*bC|FDH{>=pHMK10s;Iy{YO`%C@0-@R^t`I|92rRDkrMK;+{@Wpk__dn(MX6J*6f&zDGi>Bk# zSN>MybaQfYT2%}|<>g7SCr&>tC`jAikLb=(>#Oj-bLV_^cD9hEx1Z4I7KgN*olx4= z7DQUQYre+urUuZ{+iUrHP!yz~q7t9!fM!+mnYixYaJ*~Pfs5A5KM5yp-MS?b#DZZ0 zY=>)8QbGbKGp_Bd(aT@9BR{Xtk#60-jVXveya0%LX9jb&+G|v)VEMqJAJ4G1wzfhb zk^o;VdjFmq-6G=d?%vtm-3F{jQAOqVKxIV*J796u<13<&Lm-H9QFCB^{)Ea(xhRVu z&HO+DfnZ``5tJ3Of7P{D2r%m70zg()*3H8s4j3EY45+o(62@mxHG-iW$#dA-+n-Br z=Q^~%dax1!IBRELUjm?bXJ?6xjSau~Z|8+HgE_*&!uChl;!+AdiKt@(h}v}rK$CSt zlK1?105ntc>z8MSjpkmu=A(9v@rYWs1TNvYA&>bg9YaGy1;Lb$!7GAwzSCUkUBBFw|#(*IXE~9i;9@cO1VK+wze!8W~b7-PF4)DHBE9QxBt3R@6sbk+unY-I@NMq zh8Pv=0k~E5nYi`_u`*tNc5|V}AUs?%iZRdcHTwP(7z|FA4Vz)5Wv^Na001j5haP6_ zto-y+O~T!r-2oY3& + + diff --git a/doxygen/inherit_graph_13.md5 b/doxygen/inherit_graph_13.md5 new file mode 100644 index 0000000000..ed2d2ee5cf --- /dev/null +++ b/doxygen/inherit_graph_13.md5 @@ -0,0 +1 @@ +a8476a03c3fbf9fb6cae7ddd3fc18c5a \ No newline at end of file diff --git a/doxygen/inherit_graph_13.png b/doxygen/inherit_graph_13.png new file mode 100644 index 0000000000000000000000000000000000000000..bac86b416207d1bedca33da2bb5015eb373edfc3 GIT binary patch literal 1230 zcmV;<1Tp)GP)9{nYH`wvKTR+yWjKu{bs(;w`rbf z00{{R35lNq<6Nk$tPEoq=C>GTzB4+V?tkZ+zjJ|MnBNS;{P#JQeiWX=f1Ql}d%1o0~UZL#x$da&qz=U41=1Bz&9A zhS}L!*zNW=Ut@K36&Dv5@9665A-#4)L<(O--X;8phX-_ab|ODNA6l&z2L}fNy|S_r zS6*QTo;eC1ujuc@g)e}6wpN=lHNoQ#r^5`n(5vV!vR zas&hfpsubC@$vCEIXS`N;v&DtdF_l=t3`WzJJf15a&vRh+}w=D#ztP(Xf)94^(ZYZ zMM_Evii(N^bH|h3($a#4h6boqDpXWdU~+O&(1)uY-kqwdssfEhL*8OE8i{3DT3=u1 zYePdr1b{9tFNugKF)@*9YikAPj*pLNVPV1TIz2s|bUGao5t&RTVp&$8PfbmczrR13 z&1Sl|xFD8gX=`hX*N2CPc@LiStE(&GIF1Yk1FxISW(o)hpu@vMw>@~n^71liG#YZ1 zwcFnd-mR)YMeImXVPGhr@yW z{e9fu-$N#oAtok<*Priw^5{jMbNF((92ScO z7K;TknG676Hk)7G$p7uP3JD2;!{NZ)-5r91g8=~7*VnwpaU3ib3#?Wv0s{kIczE*o zFP&i+G&MExJv{OJq4K2%SNQzSkB*K;cz8IvySo7ZkB^V&>gw`%?ll8fsZ>ItP@tou zgRix8VZF1F)=X+3kyR}PmfCvo^+*BiP+d!EG;b|J3AXHl?s`enOIv}gIq3u zMH;We=kPg>!{Fc`IyyQK7Z-=f$VfOG4v*(vGjKVMgI=%4;NT#XN+qJAqA)Qr0li)i zmSw?l90mpk(AwI{d$3q60RBF$o^(GyKa7lwU}9nd;o;#(OG`s&Xef@3j^O9#=W9gX z^V)&?#Qps}84Lz8nM`E0T4`oxhHN$)KXi;nqhPh{(Z$B04!aq2=Xey1l&>)Lr%94gVUr?-st;%+1Zw+1VKp z5m~KPQmfUJlau4M{!x7B*UncVI5-$tSy_)@xl1zD@YR-{F~%knm>xvypzRiHH=wh)Cg!h!nnvxE;9F)zzQr s<45u$d?K0$P$+^I2?+@a35jpZAAqL}L2t<|ZU6uP07*qoM6N<$f<5;^FaQ7m literal 0 HcmV?d00001 diff --git a/doxygen/inherit_graph_14.map b/doxygen/inherit_graph_14.map new file mode 100644 index 0000000000..bb5965626e --- /dev/null +++ b/doxygen/inherit_graph_14.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_14.md5 b/doxygen/inherit_graph_14.md5 new file mode 100644 index 0000000000..482794b2cb --- /dev/null +++ b/doxygen/inherit_graph_14.md5 @@ -0,0 +1 @@ +a5dbbe54524537099812f0dc62e4a125 \ No newline at end of file diff --git a/doxygen/inherit_graph_14.png b/doxygen/inherit_graph_14.png new file mode 100644 index 0000000000000000000000000000000000000000..63b8dd48ba1f4967487f06beda437f761a02c8a3 GIT binary patch literal 2539 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 literal 0 HcmV?d00001 diff --git a/doxygen/inherit_graph_15.map b/doxygen/inherit_graph_15.map new file mode 100644 index 0000000000..fed6b248e1 --- /dev/null +++ b/doxygen/inherit_graph_15.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_15.md5 b/doxygen/inherit_graph_15.md5 new file mode 100644 index 0000000000..fc9f9bfccc --- /dev/null +++ b/doxygen/inherit_graph_15.md5 @@ -0,0 +1 @@ +ccd10865df3e9da39f9242271913143f \ No newline at end of file diff --git a/doxygen/inherit_graph_15.png b/doxygen/inherit_graph_15.png new file mode 100644 index 0000000000000000000000000000000000000000..425b7cb5f9138ecff1c091cf0ddcf16c40211d08 GIT binary patch literal 1881 zcmV-f2d4OmP)fW$b zET6SCfN)TtOCrQMb?}qX@FZR_4|pdXY|&oR!OT%@Wa>JNL!Kr@N{9 zlben@pI6WCob&s4{K|6<&j1RALZMJ76bfZ_Fx~?!%PwaaCVM`Lq5OI9c)VVt(fIWL zV+*_&F$|NaQ#Aq~zy&%e;jnQa?#bTK<&YOo?C={Pi zQBoofDoRSk5f)K891bWH3JeVmg(G~#Gavoy^?EclHO*PRa1s_#x?C95OsBR z*tTsOx5nFMSr#{L+(2bzCGzw0q1Wrt-`@|D$pn>3g^e3GqOPuPN}h&>22@s7La9`u zw6qih0|PVW@V3L%KLFI%*JJ0-ohU3UM0IsF_iC@IszPUHCr+F=0fj;Vy`{^GMNi^j%AR8>_$sZ>I%)xu`80RXOFzmC0o_j;^% zI2_2y$w5y~Pas?7laPo~r_KQ4#X<^HEY#f+tU&c=+ttu>(<2 zQD9jX-QC@g%jIynT+`<8w!_u`v17+@;J^VW6bkIxwF^y6P28Hzn>SeWyxm3aE}=hrxYXGnj&`ipNin^96yf|!^X=yW>t_xD4o zR006xayc$sxZv^6clq*V3=R%r#flZbvW33UXf%KA-o2XyirsD}JRXm{dGm%FtE;Oc z0LYgwUkD+Dh{a;EZ{I!-zn-2R^6c5O8EvsxOe!iWIQ#D1y95B~?d|2pii(QJ(W6H_ zd`e16ID2etj3g!|l55wl1(fqw@Ylb?;ULk`(Zpi0aPv;5lkoX`(%s!n2q8o&m6F=p zTAz6g1_M#6)tsG`l|?RIyf~vBY_Hz&#bPlza^whSfB5jh<8QiY(!JC?z8lur?{_)n}jGq|;rK_t8F)=a7$jIQvva+(KtdmG29(HnaGLn;%XS4wz zH8qucj*pK=Y-}u+FJJC4=5#ted}J~i_sr+>A(2SX(a{lb&S3G^e@90L#>dA|T3YJi z$1n^!J3En*k}_>vtJR8{ni^QGRtygh!)~_+b%ylUYasDOA`$nzWXTc$fYa&3(xpqG z*XvPST#Vz#kE6A<6*ikKBu6121fmoO1Q;D1#pviLVq#(dV2V%xV8MdmQ!xzV)1D6R z+)k$xadB}$=MEHq{R;#FFbspTvNCRdl1U+Z_cc5`jO^@eY~Q{eTCEm~7A-18Uld;z<*u z=;&x%xpD=kPoGA5dOB9FT!|k)e)#nZ*QG-w5+N-u4N|ET>(;Hq$&)9Mo}M1Ioc{Wc zii*O`n>TUi&K)ErB|#>WAt50F@87>iR8$mzpO+4~Tn@cn51~+q4I4HfH8mA$)~rEl zYARx5V}q*8SFfRn4*+Vl8dj?nt5&UoTrLmVKVX8r=u9#)GD0jC3;F!{GZ`BjBhAgt z#N~1kLI`PZZzp!U-DADKgSfZP(9jTRX=(9@(b3UCy1KeJTPzlnt5>g*@87=@v)N1r z1_px4IU9WSKZ(s|Bkk?&3u~^8b zPoHMA1L@UQeDD3An3y2V&CO(FWP}@YyWJ!uC54F)6T75zaC{}W#KF>V#&+PLt9%L z%FD~Kc=6(p#{R8DIg@z&k&uvpM~@zbwwT|X2M->EEjIo3O^G + + diff --git a/doxygen/inherit_graph_16.md5 b/doxygen/inherit_graph_16.md5 new file mode 100644 index 0000000000..7157c546f0 --- /dev/null +++ b/doxygen/inherit_graph_16.md5 @@ -0,0 +1 @@ +ddb5109d72a10a2c7f9a575daed2cf76 \ No newline at end of file diff --git a/doxygen/inherit_graph_16.png b/doxygen/inherit_graph_16.png new file mode 100644 index 0000000000000000000000000000000000000000..d9cd05ebdd2d880fec1e93d3027cce4f86864539 GIT binary patch literal 2494 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 literal 0 HcmV?d00001 diff --git a/doxygen/inherit_graph_17.map b/doxygen/inherit_graph_17.map new file mode 100644 index 0000000000..2e784d051b --- /dev/null +++ b/doxygen/inherit_graph_17.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_17.md5 b/doxygen/inherit_graph_17.md5 new file mode 100644 index 0000000000..80b89c020e --- /dev/null +++ b/doxygen/inherit_graph_17.md5 @@ -0,0 +1 @@ +780d48b23764f65650f907dc3068a3f0 \ No newline at end of file diff --git a/doxygen/inherit_graph_17.png b/doxygen/inherit_graph_17.png new file mode 100644 index 0000000000000000000000000000000000000000..64e7d4d8e96c582dc30a56ca60f391176b61ffbe GIT binary patch literal 2937 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 XvN-9u6w>z=oTY)A`lje=T@3C&B43W- literal 0 HcmV?d00001 diff --git a/doxygen/inherit_graph_18.map b/doxygen/inherit_graph_18.map new file mode 100644 index 0000000000..94ab7cb5b2 --- /dev/null +++ b/doxygen/inherit_graph_18.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_18.md5 b/doxygen/inherit_graph_18.md5 new file mode 100644 index 0000000000..d94f4ab42c --- /dev/null +++ b/doxygen/inherit_graph_18.md5 @@ -0,0 +1 @@ +4a8bb5b2a3c8702fc7ab20d6c6f9ecb1 \ No newline at end of file diff --git a/doxygen/inherit_graph_18.png b/doxygen/inherit_graph_18.png new file mode 100644 index 0000000000000000000000000000000000000000..ea16c3be267f2bd3e7422ea3014c7bd40d710d4f GIT binary patch literal 2722 zcmV;T3SISyP)!PutFoEn__mED1m>eX1hcrl8KirB}0K|ujtzI=&YyLLe+6hb1A001^` z-VC8oh}pAeBRM%4m6eq`?HOBh4iu{)pInT&rC3Fv85tQUDJelhLIQ$=gOQMspp#!y zQ-kE>WH>oFVZ(+E2nYy3b8|BuJb1vC(YI@AYOrR_8hChkAR{9Kj~_qAoH=ulot=%i zxHv>bMIkjc6?gC6)v1%1mb@l5*-{va*ZQHhC)22-j3WZ2X zNkMseIa_Aw(xn(bemoX0UX1+we27FM0KkeBE0CX`kKEi`Oq(_hF)=Z?ckdqCrm;2W zK(QL~$;FskowT&HW$EeZ#8lL3HF0ooAWxq@Wz%Fb838~(e*8!XAtW#`kgQ+7UZ-AD zQxmy=|Gq&xFffqh<>j&V)vH$t0MgRZ!luQ=#gVOBx9ZeMO-*I(&dyFUZrnI>=FAzB zeEtr`;@4<2#L>}_C=?1dU#ry;CnqPOR4NG}gaii%ljFya59lX9Kc6HgC$n~FXecQz zE;eWzi?u(WT#UJ?q^GBow6wHk`g$~Y)oCgX4GnN{aX~;p0Gk#X8rr9vKp@buy}iBR z?d@&Q1^{1QU-s`&qej8i)fHY|UOH)7tyZT_NJt3#x090-1Ofr->gr7PX)ea%udAy= zcXv0kva)pQF${y3FJEHPq)Gj@TVG!fsZ@&k`g*jtw?nN~o3-Zr-B_(X=9XfyK;7Nl z(b3U?j*bqvxVQj7p8x=0*f8^5F$^=H-5>hCwOTDaJUqb@;x(wBpC2Ynn1F)^4*~#s zdU|l+zyYK6xZ1EBKYpAYu!GGz*;PMwN}4d;O_1Y;FpLs8Vy^grKJU*K7B%7ULK;OqY)Ak0);|hR=(cmV#tAqo!~ymQPCsPM$)cAn)G2GiaLy{_r%!NpcGj^S9UV=& zNimn6o*vx1c@s%VNhmBV?33@};sQbl`&+VP2~ty2S=-P#^Tv%EA(2R|dgC|5u;OXg!Wy_2o{h3NiN(!8voe>uohsl#CqoAMwN~O|j?GFWZB~YnUitXFC zL#0w-`SRshxNsppe*9>(URhZg)~;O(u~^K`QgXQ*&d$ytgg~YG^|6b@#6&bSG~mvi zJ7{ihhM%7wVq;^`)6>JYRZ>!dojZ3ztJNYtJ|3;DtvGPt0D^*oFmvWiXti3%WHKm~ zO6=IN!{Eyzzk|QOKlbn650y%VLx&FG)vH$!2n2|Th`^B}NBVt7!q%}Xfo5c6KqwT# z&CLzj+1c>)^h9ZCsa4umsZ=N}EydBJM=@#AB)GY`VfXIcc>Ve{o;`cUmRq-O9m2xG z*lWz}>}+IaW+E^!5KT=@kV>V9h=|~1>Cg+0$HTmN^KkOyNhp;{j2blxVzC%SMMa$X zrcIprR1;rRajJDd06!w0k4_VMw7gM$Ow+S+tBFoY09M@O^e^k>E~W5yseGZT*=KSo7G z1>D@+5FZ~8KA(@gygVIoTgvn2&ykgt1uriztX;bnd_EtwwY8|Ks)AT7=Jd5guCObC zN~Ka%R8-*W*RLolDuPO-LTqd-fL|M!-q*sKnwpTEoo!az-rnAbiHSi{QWEOx>+$W| zH^}93#Ky*=v$NBrHUa_yP*_-q=H_M;7Z;Dt{Vwb)c4>o{rqyTs(R51poZ=56a8SF?#f90KXo!Nl8iY^z;Ou&xb@J(b?6T z!pV~-QBY8T1q&9SwY3!i0Rh;&d9%*(lqonkI3O}I(&}fdd-v|OYJ0XopOt!ATG}#( zVb0O7+ffFSe@{@B7Z(@ne16fc9`O|W + + diff --git a/doxygen/inherit_graph_19.md5 b/doxygen/inherit_graph_19.md5 new file mode 100644 index 0000000000..dd3166c5fc --- /dev/null +++ b/doxygen/inherit_graph_19.md5 @@ -0,0 +1 @@ +fc4bb74c3281c7898888ececc11fd417 \ No newline at end of file diff --git a/doxygen/inherit_graph_19.png b/doxygen/inherit_graph_19.png new file mode 100644 index 0000000000000000000000000000000000000000..bf8d87ab337b909d3aff2c8c4182910bb8b920c4 GIT binary patch literal 1782 zcmV`p2(1oE%U~xqOqyUCeH@HJ=wME>FIl6I z&1Ul;3Brm-!=tPY>LglHqYq}UMVV3rg==M2x>59jUm2tY)A=zmWt-cs_n^0jo=uxJ z*X-r~9X;1|-`9QppPRpX?mZJ=Fc=I5gTY`3f)g5zW~D$N*cb~jjD?R-DC{>HjW2%A ziGn8y1cHqMf#9D%CyVhn5eNis1K9O*F2qDXFdB_f7sU9xFdB`p+wCEFVGOh|{%0@~ zF(QVUh!HVSG117#2xKxD#>U2?u{`5HOePZw3JOqKS{hRwGajrX!Rz(HYPDi&YAPDb zGXS)-w4kc03bnPhNJ~qLsTTG)TOeq)T0DICaMtsio12lJpO3=ALgeP=Mp0RKn28n$ zcDo%8hhx_Bhlhu;Xwjl5Dw;j>Vj{oakF#gbLZMJVr_-Ugx0g4r(P(h*-aQx$1{4$& zpt-pjX0sW4_wME91jibU2KDvz(ChV(%jMANbQl~QL~Cm+R4Nq;3kzX3n?w3EG&Df3 z*F&LD;PBzY7#bRyu}5$W0C(@+MQLd%wr}5#y1F_pPeizM=@NGD-iIV`C$#tE-_Pg-WHMa7d^v27XfiJ*Dlad`l`B`EQmK%WlLM7X#T&QTY$z=)MM6RX zDl03Im6e6QzCOHq^@^Jl9NTO*96WdsDJdx^FE7XI*RQd4>sC}%RiU`J7;?EBYPA~A zpFii-?Ax~wadC0bXf*ir=@T|@-VCqTJ8h5PSg+TkqM`!1xw+WCe?OXVFfAeYNwFc@&;$Pupg#fujh9UbLjkH-V6)e4`_$7xfm)ksWCM0t5R1_uYB zP$&QZJ9q9xT3Q;4ii%(`7@*N;e!1UDr4o60d04k@9SjBowrtrFw#Of(tgLMJfddC< zwm2LP5(m`5E^N=?;b9VqL}ayEc{(R1CTL(_fP_LJ zulDid$0QPo$mMbo5z&ejE9lXqN8EUSe?I}B(a}*(+wtSax$!SwzVP-aCntwYCKJt; zii!%-YPGyvxE_&m@!~})D=WJd?3su^iF$f^keHZ=tgI|9w|@Qlka^kJ*}Qnws#Uys z!7%`2WMpvHix)3OQc@CDu3X8>xm+$@Of zaJ$`HZaUE-(cIrA2n2#(#?ukp+vRd0B_$-C~%-1?|Az~9rBod^jr{nzj^8kQAAb@k{&V{X;%^~-9 zFqur8ky=|@(ca#U{QUf|Ju@;gkeQhYy{}&z^DPwY9Z#(w&@~jFFL%-?-!06YyA~HNT!?rtV#Zt#)<2k>oFu#5P6Go2m?$h_V#vi zI2^qB;SScpHDhCA^z`Xd-Wr{qoz&CQ!^Kjml&)XDPUGX_WV6|5XlQ6oJ&B0?en0j0 z_R`z8Z^`HL@y5JfFTH>No<4l|KvPpwA$#C*xu~tJjhs#=x!rEESS;MU;QR6W{baFN zXmWCr%YFU&m0DU_$ZofXtQ|~ucQR|lEgqVnkS^?~dffmMJfKVvxkF^E{gTY`h7>tF; YzZ@;$;^Fh8LjV8(07*qoM6N<$f>ldlUjP6A literal 0 HcmV?d00001 diff --git a/doxygen/inherit_graph_2.map b/doxygen/inherit_graph_2.map new file mode 100644 index 0000000000..35492d6f7f --- /dev/null +++ b/doxygen/inherit_graph_2.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_2.md5 b/doxygen/inherit_graph_2.md5 new file mode 100644 index 0000000000..6d138cbfaa --- /dev/null +++ b/doxygen/inherit_graph_2.md5 @@ -0,0 +1 @@ +b27ebe6cc0fc18459866e0967e18077b \ No newline at end of file diff --git a/doxygen/inherit_graph_2.png b/doxygen/inherit_graph_2.png new file mode 100644 index 0000000000000000000000000000000000000000..360ad0ede6322761c716518bae442eb72c9098df GIT binary patch literal 3144 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 + + diff --git a/doxygen/inherit_graph_20.md5 b/doxygen/inherit_graph_20.md5 new file mode 100644 index 0000000000..731b237493 --- /dev/null +++ b/doxygen/inherit_graph_20.md5 @@ -0,0 +1 @@ +621dd578b4c0828446089cf69b0397bf \ No newline at end of file diff --git a/doxygen/inherit_graph_20.png b/doxygen/inherit_graph_20.png new file mode 100644 index 0000000000000000000000000000000000000000..7d3712c3afa2742eac1dc9d4dcdc4ad6880bf9cb GIT binary patch literal 1875 zcmV-Z2dwysP)`p2v;4HmVqZWOj0tHJ`P492+ld}OKcS4 zY&H*)AgpLKJj&{zP9hsM`e622lqq&nXe+Z)SJ4N4WsvqUogWiZbZ)!egXp1Wb8cp9 zzOVQ1=((=@y6*e`Jo|6Y?q>rS3FKYvdaV=>`!xo!j4^=r<dQtPHpy#^R!~vJz&q*&{Cuf))mY z2Qwif=r9v9f=)n8I6OQIsZ@&5(a}Im&+vl5U_e$@777Xq0#Y9+ylzb9gWYb2$z;Ox z^mHJmX8_P>G|0@%L}q3t0HCR<31wwv(ChVxj*j-(KiB#|5)czI=8jseMovx+GBPs! zs#mF0h>D8h;)aF>q^GANJ3HI2{<+o%684>NfnYY9VX;{JuHUd>1J8s*Lqk}yWQpJX zbFB{~f5e1NrxRz-o`qa4heo48PfrhTT%}Us-o1O!>2%1-%0fd!1B^x^_U_%w)wsth zl?v6>)zE6SkjZ4wXfzlY7(jD#Gn7gtva_>cG#WkDsi~=fR;z_vF2~`+hcP%f=yeVE z7y$0xy^Df^0_5c6psK2h%M%eUUAlzbyLV&Ho;@%a47|QwyLR!Ofmy9qNTpJI|NfoR zR$E((^73-X<#MRiYV`K@0szX(%hB1{iBqReK`NC(qtW=h<{FI#_4V}tfMdsw;r8v@ zsI9GqR4T>g%a>>E^;SQd#z68%Ojul8j4M~JK&ezBIXM|hrII(^*4BoCf&zqvg`u>x z6bT6l=Bf|QgL?BBm1b#-;9tE&U><3&Gx z`ZN>@1!OWAbUGc5967@EK6~~IBO@bRJT)~1lgR{!!@+4QEG$HLcsPoSi!m@T0J&Ta z0NA;6C!(XHp-?EG)9Ij6seE4ZmoH!9+qZ83fc*S?q^71~2%n(ZQHE9-s)%5 z_*W?^D%ySEzyb0Xi^W1hp^)Cbeaq#HMk4_rtJO+GM2U%sbm-6_Uf-urpXmAX=U(H) z#6&uA;sh7pzki%IBIxLqjAIiO6I! z@pO)lk5hktKM93GUhl()4@o2vks zf974IC;x%j5@ao)S0Eml=fU}&7T2_qvTF*!Mj$;nABHT3WDn?OMdf#^TJGGhA;)MFk`h31VYo0RXYFv3T<22{*3S>*u69GBOgw!^6LE z#{Yfh{hTl~G!$2_Ud4_bJ8!OfdDk)NNBn3x!>Sg`^wmkTvDH3$t2#f=*`ke8Q->gsAZoldx1F5J3x z3qs+K_pw&1g+ie~eSJN~#>PBu>%Pd(&qrx#Dem04gZ1mzhJHTsi`SyY-}XE-A+VAt*xzOu~>NZzBVTAJ)@(e^!V{(-W(kr9n{_3&Bcj{ ziFEz?bs8HRqqep-8XO#))0#v?PN$Q4dV1*1n>XZeICx`ryPe*>dq?lzzo+TxX^(4Q zv)QPnrG>0kD@{&LQe$HySLc2{PN$O^8yjh2VuH(k`SOLDnwrRLHhawNj@fLcuV24% zaaUItb#`|8?3=CLAC2?D+s5RNnQ$TS(}awLi8m9npY0YP7K;UWd3iIAWn^UF=+UDA z?GN;P?)R>ElJWNPL%>ecUK?`FMAQTGwf~|qUU@#aA27|Hi_!lE5%M$E7?j8UD N002ovPDHLkV1i|vlbrwn literal 0 HcmV?d00001 diff --git a/doxygen/inherit_graph_21.map b/doxygen/inherit_graph_21.map new file mode 100644 index 0000000000..11299fb56a --- /dev/null +++ b/doxygen/inherit_graph_21.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_21.md5 b/doxygen/inherit_graph_21.md5 new file mode 100644 index 0000000000..b08155bbb9 --- /dev/null +++ b/doxygen/inherit_graph_21.md5 @@ -0,0 +1 @@ +9927e55ebac4ae9c102406d564c837b0 \ No newline at end of file diff --git a/doxygen/inherit_graph_21.png b/doxygen/inherit_graph_21.png new file mode 100644 index 0000000000000000000000000000000000000000..56b26f2241531592d80b00ca630d6b73d0133a4a GIT binary patch literal 2046 zcmV89U^1xtmBN`e#1GFc`l>M4Fp}H7sL6 z!5WsapqQ109UL4)SXdZ_hK6Qi`8ng?vX7~vP$*DcT|M72CS_I{R;SaUwzd|dqocF2 z{G9Qp_whG3!tXqO{1_iUe&p=GNw>*w2^fDKxm*rcSJ(NLF=hTH-K=5fkd-S}&bNeV z@i*!IBS!**!GMB-0z^kgL!nThqoad2E|<%3^X5(DtK7INGjYfmS#6)b~ycsH$YC@ihiV7%|N<>FTBP%Nl{r&wW za~Rt~`v3s7T8*TnB*etTprD|DJ1(eHDr9D6@?y1GEyBaY(bd%jVDgVvwOWnj(;F(E-p5^o~634UcHJvd-m|+1_uWb9v+VF?rw{; z3-L!9HX|bgmo8mGVqzkKf`X8kn8+J%YHC7qax!deY_MbMIkjc6%QXi3FLA)Iy*Zd zlgXgd=_bu#Yzyt<`0?Y|zkff%!orY}l7i~$YAz-uBn0QrpU3<6@45K$@^bX`^w^ zdY0;z$z&)jEad&5mz0!XU|;}CmoBwP`;hm&Ycs~Y)pE3I;EwhZ87f88J}U>+uLDlYYTsW zf6f;g8ag2^Fffp3dw6)j!^6X*4FKNW-rQ>^Cnwn1*}=`tjpx&9wY)hYAtBsr8yg!0 z1_q+7txYhe&_3GQ+Aumgima?GUOtgXgx9ZM!_(6fDJdy9b?OujA3ltiFJGdirG}Y;9zci)v8s{>-Bj1_AP>fg3PXK zPB-xD>Ah{+Hk>$d0uLTMKu=E(@7Og{X56q24h|R|9>(zSFl=pY0boKC0f3d&)KiH> zBD3~n80Xe%wQzKF6r3lt4+jSah(sb}XJ>Qc9g7w%0swsZ@&y1as*^e001y!o z0VgLX+_-TAYPA~i@$nX|Ybi56!}|F6z}?*)XV0Dm0E~@|;mnycg7btfK+~nTxR`sh zG#U*W8ygWB87Y`kXdhCk6u!Q`XlQ7_+O=yD78VAXOorChRya5~008Xm?GYazkD{U? zl$DhsB_+kAPH%5-`1<-nsZ_#XFaY@V^lE5muqfAb>mZd%;pyp#{QP__Ha9mHK0ZDc zJ-N;427WzMGBPrdmzRf%iVCEqrCFrcQfAz+*4EZ2EiFZUem?yC{IGoaa_IGX!FfU# zpy}e{;{#t`UjzjOVcoiQ$j!}#pP!##PN98BBobV|ejQa+Rd9EAM@UErTwGkx)zt-w zM8d@-Cnuw%qy$8S4I4I?)G3ijaOKJs)Ya9&-Q684R;)lmLIM^qUTkr$>D0m6+8SkL zWhgBzg;XkqmzNi+s;W>{RtB+HxE;*t{=Eio-n@aAmltF*nMHc1%~UU4H{{8!;)9HwasIjq;dV70$@j{m_<2ge^LsVB+$6KSVt&Q5-+c`TRAb>7k zzD(b~eWRwPChG6+pHfbteT>u7(?gAojr8^F*GX$pQ&Ypcyp7Y`+)N)neBk*E1_O0; zbkNhMPf4%WPnaW=YchoDKt!a|>FD|M=k(&m3mP3AHLG)~y2r-G$kWr4PMkX6;)7#@y1|+lz#Rgh|KNuV0Vs?Cd#K z#3wQ`67}`*xCr_Ttw}e^8#l;0RH8o~q=CclW?%bKx_1W*kG8Po9 zVHpbw*078P1#4Kwf`TzehyVZp07*qoM6N<$f=N^1eE + + diff --git a/doxygen/inherit_graph_22.md5 b/doxygen/inherit_graph_22.md5 new file mode 100644 index 0000000000..18884d74ce --- /dev/null +++ b/doxygen/inherit_graph_22.md5 @@ -0,0 +1 @@ +eacf0ff2d0325a3722ac0adbd9b4f2eb \ No newline at end of file diff --git a/doxygen/inherit_graph_22.png b/doxygen/inherit_graph_22.png new file mode 100644 index 0000000000000000000000000000000000000000..a70e55384a0460c8c3c4cbacdb81e4cbcca7896c GIT binary patch literal 3361 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 I+PCBW2T(F_tpET3 literal 0 HcmV?d00001 diff --git a/doxygen/inherit_graph_23.map b/doxygen/inherit_graph_23.map new file mode 100644 index 0000000000..4e1dfba6c4 --- /dev/null +++ b/doxygen/inherit_graph_23.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_23.md5 b/doxygen/inherit_graph_23.md5 new file mode 100644 index 0000000000..f6b827866d --- /dev/null +++ b/doxygen/inherit_graph_23.md5 @@ -0,0 +1 @@ +2af723132aad24aed97bac00115e7e69 \ No newline at end of file diff --git a/doxygen/inherit_graph_23.png b/doxygen/inherit_graph_23.png new file mode 100644 index 0000000000000000000000000000000000000000..b8c6d66a5229c3f7441e657cee4b1cafe410b377 GIT binary patch literal 3756 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 Rf!9w+^Olb4TV?C8{{gh2BW3^q literal 0 HcmV?d00001 diff --git a/doxygen/inherit_graph_24.map b/doxygen/inherit_graph_24.map new file mode 100644 index 0000000000..5ea8fd24d6 --- /dev/null +++ b/doxygen/inherit_graph_24.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_24.md5 b/doxygen/inherit_graph_24.md5 new file mode 100644 index 0000000000..3ef5318724 --- /dev/null +++ b/doxygen/inherit_graph_24.md5 @@ -0,0 +1 @@ +15ed9023d9cd896fe718be0d8c6bd669 \ No newline at end of file diff --git a/doxygen/inherit_graph_24.png b/doxygen/inherit_graph_24.png new file mode 100644 index 0000000000000000000000000000000000000000..67fcc187cc4d508d1a8959c559f6127527632a34 GIT binary patch literal 4637 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 literal 0 HcmV?d00001 diff --git a/doxygen/inherit_graph_25.map b/doxygen/inherit_graph_25.map new file mode 100644 index 0000000000..1ac117af22 --- /dev/null +++ b/doxygen/inherit_graph_25.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_25.md5 b/doxygen/inherit_graph_25.md5 new file mode 100644 index 0000000000..4a93033dd0 --- /dev/null +++ b/doxygen/inherit_graph_25.md5 @@ -0,0 +1 @@ +fa61c4fbf2ba702c22fece3defbfb27d \ No newline at end of file diff --git a/doxygen/inherit_graph_25.png b/doxygen/inherit_graph_25.png new file mode 100644 index 0000000000000000000000000000000000000000..5cddaf0fdee0d2ce949d1e98550442a471af1fce GIT binary patch literal 1837 zcmV+|2h#Y7P)BtbM9UZr-CbdwnkNsPDmy{M>&jKuz!%gv%cWLZIKv z_4@ukSLgSf=lA=rX}Y1IA!xN)jEsyd#_~}k7I|C-`H(;??P*6|+v)PRP{(iK!wxXn@1bg@H zMPp;*44s=dZ^B}+K&R8;#EBCa92^wY2p)&ZBY2y#+wCYVEyeELyJ4|d@bl+S06;}W z1wMTEfOF^0L95lmY&MJ5VYaPrY-~(4hkg6@3BG*|3=BZ4)nasXR8%)ugNShX@@4Gb zzaIw<9DvPcn^DKxw{N4Oq5?Xd4hDk(-QC@Y6cK4UqtS?~SFfU^qy!p`1|=mWg8L4K z1Er;MHE@#DvlnVE_1?rzxacHSp=>~J_>GMSK=mv;Pd%r)d(Jk%A=#B13!NJ006jLE^Obv z9cgK4IC}IbR;*Y7lgR`CC@wC>+O=y@SXc+2(_R7!8&yy0z)jg16=1_lO*h)AVU(XnI41oOUr{Yq_ZZK7k9 zN=0YRoZ-j!?%g8*)YH?$+lq>c=4a=AzAJeQ z5Fa0p%*;&QmXnh+!%wYN3&yFbsYp#t6&(Y>#*G{K>s6~(VfpgqNKQ@`*xYWnV9u5; zTlnj^xHzcQYIJsXhSUrVe{OePcB+S-tvosB>s z@Y`6!sl)GbkjZ55`~CdAv9U3MZ>Sn2CMLq~_hWQ)l($W7*VF41POaz5f}2jMR3arM z1vND_0D#HKNnE&aA>_PJFZJ`qX0!1Rt+llk?d|Q@wQE;M&AH~$(b0hi4<0}+mqVk` zz+f=o{rmU4c0xh|hK7bBo`XW6z>_CWc;C9ZI>Fpfy6NfZP$(3ruCC^7m6erHDwR+u z6!VIAt}M9e+4ZnU5$*446I+jUhtPFMyQwi`Jz-Rv1!vLXfzt^+_@8#m6gcI z$Ox%9*F2Jvl2B7qgXH97!iVv6zcadJAH z-AD|b2IsTJ|ZG&Z*Ql*zCM9}sDniCoRN_cdi?mYV2#esPU`CF;>RkLimqL| zM!$ajB8S64gM))}(hQY{)9Iw|-@gm|dwYAyZnw|+lKt)5H+uT?DLI`^(K-aLIprgk z0}+wi?WPwmUeLh60C_wfYHn_(iHQkO-Pz*y`F!;D?OS^H?ww%nY;gtx0cvh;795(w zLF^zAv8MYIm})x4pMhA@v7f;hQD;g040h$p6{Mu3#5xQ{2$odSWoKu{Is`@-ui7 literal 0 HcmV?d00001 diff --git a/doxygen/inherit_graph_26.map b/doxygen/inherit_graph_26.map new file mode 100644 index 0000000000..432435a27f --- /dev/null +++ b/doxygen/inherit_graph_26.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_26.md5 b/doxygen/inherit_graph_26.md5 new file mode 100644 index 0000000000..08ab7a637e --- /dev/null +++ b/doxygen/inherit_graph_26.md5 @@ -0,0 +1 @@ +f365a5829700c77c0f60506f77ae7c43 \ No newline at end of file diff --git a/doxygen/inherit_graph_26.png b/doxygen/inherit_graph_26.png new file mode 100644 index 0000000000000000000000000000000000000000..40dccfa279e24e15af1ac17f026dfa4254febbac GIT binary patch literal 2761 zcmXw5c{r5o8y?9_B#a{4p^zxqL*&@TmdRRUpBP0%)>It(H1@HD^*ZE!F^?mOj-}k-m^E~%+-_IRqVPhz~I=hM>EoTfb zPkk8>G#qzYoNFjtvau}9x?Hf#B)J?TUQk+^dg&2X=@7Cw`VIy#`RDv2C9IlRA0c6URom@YCaS>T+AXFWP-wupPr42m8A)H9nlF6$*u8g>kK` z&u-!ZToi(z#HG?z6cm-7;dJ4y*48JVUOShk6{0GzJR#6lgeSBX#8x*p{$W#z?&!&q zhqdhsyOO>t-f+G}NeoMU`V_l1*Vl~7M;)Vf6dbbiqp~?R)>tkpy{=B}&h6V@icGU!5(tq> z%E}%epUO0Fj}jf_N~&GSX{fTI8uz||ke`i41OnlOh4lRT0_6o|!C01`k|eBF?q!%H zWZ*#bBDA*Z#U~{dm0FirIXE~ZD|(HFQY~$4jFy*|Z!2Xpw?j6U2q`H%EgOnCy^^WM z^Ep0Eg#7S>?B7RjEK>I#1qW-eL7@ZmwwThYsuX~5h2y(4F>_<%f~qQok3Btw`Y~Mn z-@DW6D=G``ojYX>f=^E7zH{eJzq$54;zCCJcmFGJ__xN8tf;7{`2_iS84d~FV=7K;t&qhinU@^Oy#_09_0^5iXkC4M$!2+1WdtaB8h@$no&SNtX4*4F+C?d|PFAijS6iV#ojT0HUAR`xrcuFEZYwV=d2KkauQ zHa2V1C1$yc#3p=shQ%kj{9B6p_GrTi{xPGn^?E|BkIywE(j#1Rp z*WYfs5-=N>qvqPlS+?08cT&-BsvSKF;W>4xy?JwU6NeCwY;JD8ncsn_ev=J|a!6}y zV^wzhq;vgxk~1=7(HMzDxVcF+?X8;Lu(6rmWQ?kZYj7?YLRp^|7Al7AJ<^?kq~zu%B_?v-K%u6-5cG$eLN#B# zdUYn_T8p2Em9_OY$q9?YO(km|=-j(^kw&9UE-Z|=q9a^ESQJsQ&4$x>rAbz#udjj> z^6vK|_XlT~=EqZS5=QCwWiGUL({(IL$n=es^{`PbIBhkvVj3msu) zU0I}F)UDsy2^L7|M33&DQ&$%_d-m)xZf_c^Y8HT&n3)xId;&s;`&O))vz~U`qVXex$~|ZD{B;x7eT9 z`g%=-INaagKP5Z6dyYz@aTJ74s6vjq(%KfOWvO|2Tu=1qjwK%A&oeXm0hvm0I4Dq> zLO?A~AD=n33b&dO&!#UdorAMr*FXmC@>0Y@kuG5A*WuxL z3nW3~J;{G2o~lbmBc)CP2|VC&HVqBc%E-(d0A;IBdN6ZGHK+8&3oK~#2Z4b+mWPAa zq>C&1@OZ8Za&klstk&aI?ENtk{c4Ga`*YL8wxl0Jm6Y`J=CSh=7morJ01b0EUA{vu z$SW3%81d?Sb+as3Bq2Ut&(m`;VlP=#O9&Jux#q+2b>(MJDMK9PL;GDArdmLR967C?C~}3@#l;1X zq6K`*vbQ@n?cme+q%DT~VU73w`v=5Jr#65p5UhYuG)zs89{4U^prkqp!uV23PON|W;3J;eZPn|mTflP*h!2*FK z8L}4k$G&=Xp=?_tmn$wVjwcSGwX?go)@SM9kgz~0(I;3qA0F&$jV}kVIT|KXsZ`_Z z*9~-ZASyy9jvP5+0cLTIn$Hx)T)X3?WueIG9Eg)dQa{DV#{wA--E#ViNsmG0?@Y3eN!C?grOfUsyT%IyA~D}5f8^7!~FdGq-A9T8TnT^XA;Ik;XFJ#d3kxY zu4JyorKP~GK?)_E6RKYqmTP7tVVF2M`tIGk?+nKE!@V^iL*8SgRDOB%lJDy}p9!gK zq#mA07yUscvFo6143JP+FNL15lnkUYpgGN(Yw3`CxCG^`oCOT?xa<&aR6>@r!B& zV?%d0>ELhjr)*_K_s=3rI;UB(DQL(I?dM&Ov# zgO&tZTU!fmTwr5>rm?WIivzN!qNpuc?`3n6lAZW&VQliac zenZ36&Tb^ + + diff --git a/doxygen/inherit_graph_27.md5 b/doxygen/inherit_graph_27.md5 new file mode 100644 index 0000000000..8586bfa98f --- /dev/null +++ b/doxygen/inherit_graph_27.md5 @@ -0,0 +1 @@ +79b50f1309bbb434f97b2eb087c2d9a9 \ No newline at end of file diff --git a/doxygen/inherit_graph_27.png b/doxygen/inherit_graph_27.png new file mode 100644 index 0000000000000000000000000000000000000000..ac64b7593995ad7d1072d52cc13f270382aec9d0 GIT binary patch literal 3372 zcmY*cXIN9&7QHZlNC#0mGKh#smoA1LdX-V>)kHdk(4C(tGH=7(gUQF+<0U z6p<=rU_b~>+B^Js-}l}v=YIG6xO<^vFj>2GmhrxJFd)CXDdX$e$Co(@-HqnC8ggs>to<=hU>ch`Krn0YSmS%1XV;XhdL#e6NEf3k%C6iIs*jA~Mo@ zb(kl|M<7F&`TBLt=%{gVaq;|Ek(SFAOB}_`;2kmzer6O3HTj0hC|60<&rkNBOf%s> zED45)8nkm?Z|^*AyG#AW3&ozE9ws)nn3fhq~QnKsjaPYloS-k&dzsNR#uqvM#>18;+0ADO-;p} zL5HS+feM(In288V+VT${!u08fb_2YnWn^B}*Gu}M(RF7Z&VRY??(U8&D5Ki5DagsT zW?EB1j~1?c{_C$|QOlOPEi4whys@Es$1pp8cNaxNLsK~PPOfpw#KdHIX-OS9oL#Wg zpOT)CKqx=XS+iOnX9d|Kky_^F=A^U3@9EkC`~}9^8X9sQvwZ&k{<^xlg`Yp`R$#GX z3Ri9oI7!7PC6zeqz}u}1;c&Q_t?dXg?$e@4dUMdBN3*y8_FPHjlUf&1T8!FsBa+dw zro5aFnw*;(CUzdq1vU9^+cZngw0a^5XJ=>2^YbcqjB+QjSR?LxkE`;ck;v+2ke9zdGOV?}K3s+GWl>R)MUGm5F;}D0Aj^UOqeqWK zESjk4>FE_^_Tz3TDssMk`}T-5VdTB{!(fs~Tm&^Pa`>Vl#JY%QRPJ5;lu#dhjG~~T za+oMJfL=yNQvq)AOG=u!)8QqaySYWRw<{b4!;~IAoRSR-yD;Ir_V%82mYA3r1Tiu) zwzw0k%%NN{1CSfKPl=;6JCR5v8e`4CHNSTZNeHV#-MvnWrgZp3OI}(7cZ^!N++2YA zs(i>|Y;3HGni_dUMFrn0Z6;36_^C$ZKTY(|)YKH%F%@fTp5&X#$!8~rMO|II;H!4* zRD*+qRsT}Y&CRuiUBJwQum3tZu}2_eOKrP*f9PhG!emK-qJp1a%SrI^@_M0AJq7A9 z5QN9$5g{&10;aqkJgkPtN)85s~BWjl9w zdLttvc|}EjIk_j5w%0U4LQgF%i*UFg-O%S!D^ANl1B8Tydopc9<1n;rJzu_D2gDy! zsHv`|H^rK{1~vo)1auP!w4tG)Pdi`8G&D5Sc`c}c4Ertxq^C!XiJ4e!S(a(Uz`!7n zUSs0s;i-3jIAa9)8ZDkuog%F6oMU@TO;xahF4wN)1g6Tj3Q{c@>N4GNx*oumHfGvPk=CS3=0+tRH6#QOM zRb@64^$q8rB4*p=CXaJgcM#yPl?grBl6&vJ&CC3-Q=N|`PDomsL>VNbQ0gl;L^iO3 z>bN*RacsdvMe!*p1nM4CS5+~wvs1gex}wo&J0R%tK?j?!-8lJc&7^ETgq~s6re|iB z#!K`j5a0j)o2}LJd#>zBH2I-h7T!*x&B+XFX2<@cIpEH`asPbUtC7{nSc$OnVCbbO zmI5#Ff(QO5&Ha)hTENk0`)&z35fPF3rKQN;UJa#y9jJTa{u|HE{Tqha@{%r9rr4;A zjO#$85Yt<$5g%_aRqEQ>-UOXOO-&75BYvCZYAkh5PR;;Ha?fUc}94% zusPLO*Vw48t4jm%$;#d^#j*krxt#6o?lST4(DSCqm3A7zjwzCol6Lm@HC0rgWZs90 zKZ-OX7c{>kgHMkn$?QBw4-O7kAQyM{XD31#x+p)t(&c5RUx0Jvot-(LmpcDlW38b< z+F4L1R{?~ZoSjwDRWC6$F*oNhx3FmN>mOg=*x2;cA-@IAPxLAU`E;B2t&EI}r1$O0JRN3oo%=d{0QV?=|0i5`(gz1X4~;$7 zOGA!qCw+>h=UUrYz+3pjhZz_c85@1u+uN&JWOLemR@2_T<=~O`QgN?>J=g2&=unc9 zl(Z+58RZFbadEu>yTQ!7HQSy}tg(LZyJ%sV&gS~M4zyO57n-$m6endP#X0-T;--bA zrT0HXQNMx_3A)p>v$1dAlIG@YTD~{-e~P7cc6Rpi@reX+*rUTW_*J#EVjkxl9Qd`p ze_xSf{8l*(2C)C-mosljWqEn`zu$1)^W9`^INU86nd=4y29M&~J3Fnn)`(yc-Ag}r zwpzb0eh<6AJQaakS!LU_yw<%PpOC=J!V)e}pWmY1W5#K%l$hcUq? z2k!C;3fTP#B}3pkFjZ9|vzlP#YCKVMGC~3qWm5=Lv zm3ULW4P-0&(vXKk_V)Hm)9qdhU=olH*MQ#)o7CKnv z?Cf|c1s^f3udf4R8m=#>{`m2Y7SHcBncKi>JZ*Nl9v>fn`5DkY7EX`%%7G_w4F)W% zvFVIY;*tYSkrq_PWvjlvz74fPBPAsTC{n%0Y6R@xT&&W13H3`tt(oQ!yU&CN9^#@Jsz#3W9J5ZWGeLC6^xF;kdlRnB7`pD}vkC%Ky@7azrZ(h0t>Jqa}7l zodN>`i%=u;;uGApjQ4XBK_D00JTi=imKHh9!|%lYA(-g@#?)2H<>Zi>`~QyGhZk3 + + diff --git a/doxygen/inherit_graph_28.md5 b/doxygen/inherit_graph_28.md5 new file mode 100644 index 0000000000..9561b92e2c --- /dev/null +++ b/doxygen/inherit_graph_28.md5 @@ -0,0 +1 @@ +9157672289a12c573691fb7f28818c25 \ No newline at end of file diff --git a/doxygen/inherit_graph_28.png b/doxygen/inherit_graph_28.png new file mode 100644 index 0000000000000000000000000000000000000000..1484430351100eea4a80aa447c304058db7b2392 GIT binary patch literal 3298 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 + + diff --git a/doxygen/inherit_graph_29.md5 b/doxygen/inherit_graph_29.md5 new file mode 100644 index 0000000000..434e219704 --- /dev/null +++ b/doxygen/inherit_graph_29.md5 @@ -0,0 +1 @@ +453114b03cefd852e21b7376a913e7e3 \ No newline at end of file diff --git a/doxygen/inherit_graph_29.png b/doxygen/inherit_graph_29.png new file mode 100644 index 0000000000000000000000000000000000000000..c4e1fd8b1fc072a1fa00b6369f8e1a2348e6880a GIT binary patch literal 1912 zcmV-;2Z#8HP)ka#O-Opd_}l-W0z1gaG@6>5NpH%mAQ!ng$(d8Px$XKLgwMaty*$3} z|Lgu7J=b;L_w{n$7ki#-&jTu2bN%Mc5L z5foOGjIe_hB_r%ul%o9k^Cz;hvM@S2x)|mc4Y^#7=H})(uUDy5XliN-i&z$#r99I` zDN3i)iPqLuOifKKhWSN9r_;e~HqUu|cXu}i2M5CRvHKbB0&YwSz;o;$cK73^Wn4Fx% z)vH$_l}e#dC@?TEz>QtLd>L6;S;)@LhD;_yTU%SueIX*;x^)Xjj~>ObW5-ZmU(aJV z|Ht_Fc)(mj**)oT3u z^=nqS1!F;qvb3}mw{PD@QBe_6Q&Uk?ROB_T)9E0S$q*G4g>&c5Avrl20|Nu-?Cj*` z_{ut+4oamGF)=YHEiJ{{w{Nj`?_ONIco78!1<1|KMR9R4UcY|rwdUl>lUT801>|x$ zzJC3R-Me?g>2&(_;VT0`d3iaaqoYw;T8g2eAxNcCZtVE+9e0T^$h-naySr z3WZ+wpFe+25fKq&wOak!`;%a~@Ugvd<3?(3Zsx{~Mk4{Bk&%&*xrRE^o}M0By?QlG zOiXa&Hk&PEPQKLC)KE!D$wS{74EUOnFa7=fh>ng%a&j`KOHWUqF)t-0#Y>Klk4Job zd_Wlh5)%`->$PjwV&%$}h>eZ)(pjxmuQh3DY20;GR1{KDQqb4e$J?h^EatA)ty>2G zuv)EHzkWRo1_NqpYG5!JV6)j^GMOL}iDu*q00x5rLZJ{lckbkLyLRn@%jLr7&!3T+ zn(B8QpIl;NW9MxBoZiZ`_%-QEOHk%C@85tlVC=?1*R#qY>CkK<0 zlYZyN#Kgema&gaa0Jz&J-*^J$!pC+*Lx;k&(D_=MD}X zI)uA-?_zv>92ps*KgZeI_L(AtxsXiHV6w zOiaYUzyP*x-O4o{zC=bw;{N^nC@d^QV`C%SZZ|w04<0^z2%(VQZ$YqJLfKZU)yU7! zM^jT1#>U2wnVHGU=XC7B&Qv54L9JHf)TvX5i;KgjPoHq%!UgUTV8NMfqchFK#02T} zdNP~MNOIE9u1_uX8uh(;9dcB^0{P^MJ)9G~5 zhYug<-;huOQ2l%*tS}&^ybYQvREu+x7(?urG=ZvC)Z$SO7y!q>g? + + diff --git a/doxygen/inherit_graph_3.md5 b/doxygen/inherit_graph_3.md5 new file mode 100644 index 0000000000..226160964e --- /dev/null +++ b/doxygen/inherit_graph_3.md5 @@ -0,0 +1 @@ +6e2e767c5c479bbb9177af957ef24ea3 \ No newline at end of file diff --git a/doxygen/inherit_graph_3.png b/doxygen/inherit_graph_3.png new file mode 100644 index 0000000000000000000000000000000000000000..cff637dae126bb6af1e40b228dbb48d2005fd799 GIT binary patch literal 1893 zcmV-r2b%baP)(_A{SGpKt7>qv!i^XzN z+?FhE;5e?7+NrmFVi~3Yah4JCdBWhSCK5_RnUsp|PJ%O%8P zV`JcX9+Q)k!uXpvZ=#{00eklBfzfEh=;$b%PA3i>I)w7_a#*ca**?w9Dc(~lpF(*X zE>9@x>gv$i+6tS^2A=0}?bQ!35emw!8 zv9U2CB2uf>l$Mr8r%s)sj*bo*85yC|r%zLEZmuwgIF6QZT1+Mr<>chh_3PKEt*woC zo~Me63L+wU^X3hyR4S^esUf@FPA->=h=_W7d&zFMQ%6S!oj-q`lu9KzolYTVNl6J= zES8XQxV1`Yn)5F`J)O>;JxlHF?WEJ`NUc^2{cG2*r3Vil2=UO+5CNd^@o{1Ns#UAV zY&O%KJ9lX7)~!@fP(T`uhHl-uMNLgjq);fx;c!HxNxY|0K85l&T%J($_V$uarz5Ra zOLn`R-oJk@%d1%F>FJ^B>S{_zF?l>5TDEK%y?*^#XtP?a^NQ)%v10+_K7Ra2PoF*w z8An4nEncseQc_ZcjU*!S`Fyl|`Ep@1HgDcc&CSh{c}yk~RaRCCakyfVTB{sQYPFh9 zoH!x$fBN((z+XAVR9{~&^xwO8j{wln(2&r!ckf<0dGcgLn#6k=&L^?Aa`H%V^ypDC z7z_bz;k=3!sbUKGIgwlj1_q!|C{R#PAheZ~l+3%Xu&^*7&dSO{R#sNXI1yU<`ugDa z`*HmE@qlq0$DzN!AKBU2LFaY5-MD=DGTd%ACMPH1@pvM7N0M5rTuu4;`9k07)vEyj zKA#Wi>FKgGs8lN9@3gcuq^71~-MV!FZ9bnbB2D5wjnt=T_ahv!dKE1(7n4${#Pswu zrl+T&P$&RE*pz@o$uXyjS&LGs1jlixt*sUM=a?%%jtl&desXdWrKP1feE2X71_M^C zSOJ^Oh9^&+#7%QJO~G{im*nJR{QUV-h`)dTKJOawc&Yj1YWnY<%JE5@Q*NF}ky=|K ziTMB`KR+LtnVGnF@ge}=*RNl=aN$DOafvv92&W}4FAp0xZbWx?H@0uz4xZXC zDwPVUsi_g^l3J@AP2p&0XuzdQmrz((h}_&4qarl+ULZnu-)?+-eDVq${2y1D{#^!4@8z`#J%n&y!5i72?YQhB6syWP~^-!G{v zm{+kNbpSE%;j*f#s)FOV7WR8424g;Rzh`P{YMNI&i9Z#H5Rb=${rmR^?JF!S#LJg2 zgZAy(wF|YiwTYC*SU{xigJ||T-tz@x$rV#ZMg|@}e7M*$7>i82?}LT7uh_SF3`U$_ z#l&F5306!DMx0>9#9+h;R!j^=oCtZEXD}ERQU` + + + + diff --git a/doxygen/inherit_graph_30.md5 b/doxygen/inherit_graph_30.md5 new file mode 100644 index 0000000000..55ea10edee --- /dev/null +++ b/doxygen/inherit_graph_30.md5 @@ -0,0 +1 @@ +6cf2aa4d3fd5d3c5f3ec3617e9b8ec6e \ No newline at end of file diff --git a/doxygen/inherit_graph_30.png b/doxygen/inherit_graph_30.png new file mode 100644 index 0000000000000000000000000000000000000000..0228b1dc7b7d7b3015d680caa9fd8417d1d01719 GIT binary patch literal 10606 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 a!k{T<%sM)eWq<>eh{unVWs0N>{r?|~tFg-f literal 0 HcmV?d00001 diff --git a/doxygen/inherit_graph_31.map b/doxygen/inherit_graph_31.map new file mode 100644 index 0000000000..b715b03a36 --- /dev/null +++ b/doxygen/inherit_graph_31.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_31.md5 b/doxygen/inherit_graph_31.md5 new file mode 100644 index 0000000000..39a64ce253 --- /dev/null +++ b/doxygen/inherit_graph_31.md5 @@ -0,0 +1 @@ +bd707c3cbb45c7d1521975293d994afd \ No newline at end of file diff --git a/doxygen/inherit_graph_31.png b/doxygen/inherit_graph_31.png new file mode 100644 index 0000000000000000000000000000000000000000..32a2bab7f98259f5b7fc3dfade7aa32728350d9b GIT binary patch literal 3236 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 z + + diff --git a/doxygen/inherit_graph_32.md5 b/doxygen/inherit_graph_32.md5 new file mode 100644 index 0000000000..afdb99f4bd --- /dev/null +++ b/doxygen/inherit_graph_32.md5 @@ -0,0 +1 @@ +60e1f7de7c7392440a8a8c5061799573 \ No newline at end of file diff --git a/doxygen/inherit_graph_32.png b/doxygen/inherit_graph_32.png new file mode 100644 index 0000000000000000000000000000000000000000..2979663064c696adf4ef3a257016fc38a74bcd35 GIT binary patch literal 3060 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 + + diff --git a/doxygen/inherit_graph_33.md5 b/doxygen/inherit_graph_33.md5 new file mode 100644 index 0000000000..d910ce50da --- /dev/null +++ b/doxygen/inherit_graph_33.md5 @@ -0,0 +1 @@ +a6fa23978d157a36c492840d5718a151 \ No newline at end of file diff --git a/doxygen/inherit_graph_33.png b/doxygen/inherit_graph_33.png new file mode 100644 index 0000000000000000000000000000000000000000..ac0759fcb3af9cb01f469b7b8fcb0cb01c2cf95a GIT binary patch literal 3424 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 literal 0 HcmV?d00001 diff --git a/doxygen/inherit_graph_34.map b/doxygen/inherit_graph_34.map new file mode 100644 index 0000000000..4c0273053c --- /dev/null +++ b/doxygen/inherit_graph_34.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_34.md5 b/doxygen/inherit_graph_34.md5 new file mode 100644 index 0000000000..a30b48b7b9 --- /dev/null +++ b/doxygen/inherit_graph_34.md5 @@ -0,0 +1 @@ +0d6336d78781b31fa5c002456414fd15 \ No newline at end of file diff --git a/doxygen/inherit_graph_34.png b/doxygen/inherit_graph_34.png new file mode 100644 index 0000000000000000000000000000000000000000..027812489185c8b33acb839c744bb605cfac401e GIT binary patch literal 3002 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 + + diff --git a/doxygen/inherit_graph_35.md5 b/doxygen/inherit_graph_35.md5 new file mode 100644 index 0000000000..215dd643a5 --- /dev/null +++ b/doxygen/inherit_graph_35.md5 @@ -0,0 +1 @@ +0f7631315b1322f805cdda3b34257d8f \ No newline at end of file diff --git a/doxygen/inherit_graph_35.png b/doxygen/inherit_graph_35.png new file mode 100644 index 0000000000000000000000000000000000000000..c17a3a77e8150f4ee84d9b29ddcbc4f59e3b4af4 GIT binary patch literal 3465 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 literal 0 HcmV?d00001 diff --git a/doxygen/inherit_graph_36.map b/doxygen/inherit_graph_36.map new file mode 100644 index 0000000000..6deee9a724 --- /dev/null +++ b/doxygen/inherit_graph_36.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_36.md5 b/doxygen/inherit_graph_36.md5 new file mode 100644 index 0000000000..78cee3d8ae --- /dev/null +++ b/doxygen/inherit_graph_36.md5 @@ -0,0 +1 @@ +dd4bbb2f8552ce489836951794dd2f54 \ No newline at end of file diff --git a/doxygen/inherit_graph_36.png b/doxygen/inherit_graph_36.png new file mode 100644 index 0000000000000000000000000000000000000000..d42d16e3145969d5010fd54763394c53991dd488 GIT binary patch literal 3373 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 + + diff --git a/doxygen/inherit_graph_37.md5 b/doxygen/inherit_graph_37.md5 new file mode 100644 index 0000000000..9301bdfef3 --- /dev/null +++ b/doxygen/inherit_graph_37.md5 @@ -0,0 +1 @@ +f63905b8650347d2a70968ffdbac8736 \ No newline at end of file diff --git a/doxygen/inherit_graph_37.png b/doxygen/inherit_graph_37.png new file mode 100644 index 0000000000000000000000000000000000000000..c39506df8cb92ae01bb23aa78ae582f6a7c89995 GIT binary patch literal 2236 zcmZXWXH*kg8-+*ZLZp`fk!B1C2q+-Ex6q3aia@~^OR>o}10?Ysau$h`5QQ%Aj zZ!riXSeIm+=fR25-P{-noc_6r+bVJZ01{}5)UylEr{bL~Z0GqXr}vl<=P|4{2u}JL z2&Z0haV$|%3i%?X`6dH21`)?_UcN+M^mkc|Y8!;R0`_*qTu7IuR~vJm_df4vpIG0W zyPUOfxb2&*F1Ga`=PbS48)_XDTd((=PuupK)egUlM92L%JcwPkN{|HoV3Ewm$J*ju z^z~9Aag2b+?_*jm%|kgeDd>?E`pHS?#ImD_B(~oLI2G`>m3}9GT|pu0AYPS^50A%Z zy}#=nmi`dO!oAz@KC(>- z2oHz#^z^_kTmV<21l`@;t*xzT13P7?E9&a%kCUfd)^Hjbl)x{2T(o^mQjdFHTWRUJ z!oortosPHBBw8nZczN?>&-%}O+K(UlCMFOOoyVFI!KVfI9a%zxiM>6qw~tTY+Texo zh=}XERaG*RQ&T04jsF*Vt9CXx_f)wLqeeC<>j>9T_ZQQOAWp=*Cl*@3*&Pn zi26j`hzNCtvu8kIqobpp-}spmnxam%Q7F{s_4OwbHwxhz8iIOydV{bJ4c3y~)Van> z+{vFeH&byqSV&lyJ|Y{gstTKH^fwL*Yak4_Mef15li{3@tgNi)>gsA!CA&GGCUWnA z=A#4X(9qD}Y+YR)9LoG*N(;Myq|`PytNj$SFf)6X$R{R0bW14w`Zq85%D2W2GVN?1}aD3bAor)o@w4_DJ()=T_74dO`MS9&s-(pGgySM((TK65BaE4u+4131 zvvN@7lj`bgB_$=JGc)I7bUSx$U{};GBM{4rOzc9%8{-QLRssS7I|sjfdh-ejEP<~R z6*rK`FJHf!JYg4h-&aymnMmcA75CFnS4RZ}U7xrnBO?Y(&d&Bv9~~cWbSLx36wzn_ zBrQcnq^GB6ZcdKE)gdyv5i}2X+ryuUc`{D=U0q#Ys8maE&!nRxjB{(aybqi0MsrIG z%E5t8`lRmOKwno^+^0{U`lhFGyWeLFKxBEgu5#I!nK36MCUSF)t&bF$nwzJlq^3G~ z92_3v_gz}Uvm5;8jKDrje*9>RM1la8k;#_V@oDtzfz`6oQiJsL^t5gI3I%_{aZy`N zE#E4m!obLg(GZC|GJd`G_;*1~d%H+WOG`jNz#U)Errs<0`T351=H}*(&dye|jDU}i z&)VMYsN=u1w6t)~pV#{aHRrD?oFtcna7su>OioT(pm~7rRH~bYN8G>vD&}IbOTz^k zl2THHfaAr9=Si=9J|dKr`OM0>EiElgEG-Q^J;j%omjNI&G_fV1FzB8LpG0SkXWoE@*0McCP>YgK2-i84L!qP@~MO zg|{39aDgGZa`0=@#N0fttxe0J$}whaZ0yQ0DcBUp*3i%Zz8?pMMr&(pz`@Sn({pnp zj<#sDAV#}LEzh%5g{!%_84N8NjTVi?@-nlq;LWqr)7dZ>%pE_!^w79c&@^ z$;^v7b<3$e?%b(8b}lX!{)_G9+1Xr5 + + diff --git a/doxygen/inherit_graph_38.md5 b/doxygen/inherit_graph_38.md5 new file mode 100644 index 0000000000..796075d0d0 --- /dev/null +++ b/doxygen/inherit_graph_38.md5 @@ -0,0 +1 @@ +a4cfe925bce9fee023437f5b406e4160 \ No newline at end of file diff --git a/doxygen/inherit_graph_38.png b/doxygen/inherit_graph_38.png new file mode 100644 index 0000000000000000000000000000000000000000..10ef8d83ac6351cca0fd807ab84d79b59d0cbfe5 GIT binary patch literal 5866 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 + + diff --git a/doxygen/inherit_graph_39.md5 b/doxygen/inherit_graph_39.md5 new file mode 100644 index 0000000000..066a2d47bf --- /dev/null +++ b/doxygen/inherit_graph_39.md5 @@ -0,0 +1 @@ +a0c1bc546a46a57312f25c2a1cff87dd \ No newline at end of file diff --git a/doxygen/inherit_graph_39.png b/doxygen/inherit_graph_39.png new file mode 100644 index 0000000000000000000000000000000000000000..525680831a841e00388decb6ece8b8251dc17c94 GIT binary patch literal 3311 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 literal 0 HcmV?d00001 diff --git a/doxygen/inherit_graph_4.map b/doxygen/inherit_graph_4.map new file mode 100644 index 0000000000..a1a4b5b71f --- /dev/null +++ b/doxygen/inherit_graph_4.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_4.md5 b/doxygen/inherit_graph_4.md5 new file mode 100644 index 0000000000..a5acc3e0cf --- /dev/null +++ b/doxygen/inherit_graph_4.md5 @@ -0,0 +1 @@ +6219a897663b9273d263b29e039ecc9d \ No newline at end of file diff --git a/doxygen/inherit_graph_4.png b/doxygen/inherit_graph_4.png new file mode 100644 index 0000000000000000000000000000000000000000..75a4f338f01135eef6a5b053ef9ab84c41d79bb1 GIT binary patch literal 1570 zcmV+-2Hp9IP)zr@J7=^2X=$K@fzfdBY-TVf^K= zqGBW+R#c3nqf1eRLLu-xk8j_;>2dibuf^?lqr1ENkL|bA(50v*Cns_D?p;hxP3dv@ zC8s5_h@L)uijk2K-S%7Ru;VWRm&=9Qw{ORl<8U}oR8*vsBK=v2XC+usMIZLk1>(;H)Ns<06#Iq7fDXQt|X?VR}SS%K}-EO>l_f8gfI2^cf;|4q)4=O7wap%q* z`2BtyJa|xA6FJsP3jlO>cH;2i!>FpNg4gSnj>g8uM)ddhL0elJs;jF}TwILm>S|g1$&)9r*=$HlOT+Qw$C00(k6K>UAu!^V_;waV`F0wMKP`(O3AAhO?JB-XV0ER zeSJM%y?TXb&z|At&6{y~%FD}>VyjoL1~7Y!u3582vk$E#TvR5L2@?|&n3$M=(P#uP zD>iDQ6$x*Zuojca1diiSS63&+=a?%*j+6hmF*Y`ava&K9I&=swmka6X>FDa}k{y4E zYF5)^wOUbITZ=#-fX>cN?AfyiYuB#ToIjth-%*M!goJylyu3VQW@h5z#ft!dnVA_} zxNt!=Pme}jO-pWWE;eu8jK_~3W5h$s;ss156M)%=6bgl;oS~s1eEs?r zr%#_oWo0GIX7jusQI$~gszuYPRjXjNTG86timO+z!fv<6CvdGX-P>*K}SaiZr!?t%*;%f&1Pg|WMFV`5Gg4s0Dd*) z<>lpYyWPmm&Bd-=yO5KUgVNGcBo;B)YH>LlarG~MAX;UN1`ao*6Y!zYtb@CFc_r1zCQZ? z{d-jY@bEC*zkgrW{JwtungW3Ug~MSQ85xnq1VNxrpFYJLYxSz6iHNATw^#NOqBTGA z{!dR&Q%_G1jgOBjdR8M=qaJmbI-Sma9LHT}|5Gv4`2T;Zj+T}dZ9nNP7NRI(|Ni~+ z#tI7y@%;Jod1E_w?nGT(ou1Md8d-8hm64Hw-rnBDmcd8>_U(_6bXZX_k`5~>M$%zL z#Yj4=s2E8n=G&jk<@%F47=IB_MMXpb0RJq47REBfU@#0Vwgv`+!C){LjK7ip00E^l UNScudxc~qF07*qoM6N<$f}wu|`Tzg` literal 0 HcmV?d00001 diff --git a/doxygen/inherit_graph_40.map b/doxygen/inherit_graph_40.map new file mode 100644 index 0000000000..74337fac35 --- /dev/null +++ b/doxygen/inherit_graph_40.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_40.md5 b/doxygen/inherit_graph_40.md5 new file mode 100644 index 0000000000..4fdc4c64e9 --- /dev/null +++ b/doxygen/inherit_graph_40.md5 @@ -0,0 +1 @@ +39ffca0cdf8fa6a94afce2a48d253707 \ No newline at end of file diff --git a/doxygen/inherit_graph_40.png b/doxygen/inherit_graph_40.png new file mode 100644 index 0000000000000000000000000000000000000000..23b62b7cd81bfc08be3abaf21d36bda52e59ee9e GIT binary patch literal 3162 zcmX|Ec{o&W8y+dLuc7RFLkWZWG5u`QAQgs?EgDOawHjlOku5`ZS<-|MS!&QA(_l!l zRJJT*OUziJv4rA#yT0%G&biKc{&~-H&hxzYeLwd}w7g=%!+C-e0)gK|l`vo=@MFWk4X@d}atk8*IT!L6~Lcka!ol*$JI66m&6&VxRPo zzsJDs1k z-{BoyUFhCCZA+D`H+L3zKYaL5>(L`p<=Ds@5)vYGxAo7KBUmA?pm5mA%4(6p_*_Zw z&B@7;hr=Z(6iPyBYS(0QFsX@0TxV^IsHdkVo6$WmGSZc`xxKwKG_1{D6#kO~w1O7S zyc`=JUtCh+-iGZf_y^a~f%yBK1k0x+(&I|$Sk1Wo@k4-t{RPEZz7B>$mjwR*Bf24BpsXs>x_>*4x?Hu`)Dd@$mFaFD+Hf z%Fh0|3;(n6g&4N&r*i64$-SlFwAZg;JiNS&LF|BS<&e9F#{~d90&}6?Iw(lfcZ`_m z)9l_Y*o0k|^J*j#`5_ECUBlFIM8c^VgHL++u%f&?Ve7|~gj!NXJ_9>QRuEJ3$Lye$#08`rd_GhWyL0`>2Kej zzhGiw@dAC6PNxeC2&|K@S#Z`nTs9&+^7io|y=rM`;V`T78Buc~>mU5ih}_@tdfNc{ z_~y;IzWx2Z9~_W+A~C>YX{4qMpn|#Ea>QbW~MUHGz7=eh6ZtxEyMJpM=Xzj78x4<$ z(9qP3>Fh*e!@`yZA9KL2aHg5YMn|)7b92A@{8+7}ua<xD zkX(lz9==xV%7R29K_+%_adC)&g$18onYq{VkH3)PRO%5724iY&&I(D!<7eJQvs!QE zGoA-GxqErt@lSd6O4G*HcJ^f>Ef2-axgJRYJazT-Wb^m;KPk*P@g@+*oS&Y)uWDBv z5Wy$?@9oS6oztgJFVg9TPEHcT)y`bf($an|N0hs&-Mwtao=<>uwZ4$3{{ z(jo?SH!d+T5!7;fjK~3wH6{~>swl{gGVZK;iT3o2LwBY8EdX=^OE1j{*jm0Op@-o% znlawJ;HKMbfk14pP8Nfq!dP5`2NT6y{T6|Y{UuhQP?8D5tL<9B1^der)dv9YmoA~92R&V9cO<{6=DY;3%-_k(Qh z>@0b9!J2-FTCno(`HRWQ)Qq+)RlD++FYyVhKQKU1Q2_yKaFfj`w?0gf7&9J^=Q(uf zkc?pBz}Q%ls0)^5DxBGy`Df5uTgPvr{I%cEi>nEEeBp}afi>LL%*xstHYE$Ufy3bg zqoX(PlEI9hD=Ui3`*UAPX!NTxn=x0mFn65DDd_jytChBZCk8V7(-mb;Vi0na?9+~x zSFe`7o=lTB!Oqv$*Yh7eT-(qPnd_$iskS6n35`boTJMss^BvbIw|QYUzB*RVg@^^6 zFVK&Y0%{7tM5TWz3t0hg4_F+Kb@@s#j-Q^H(eQvvNB!2wyf`0wz2kUidwQEGgTdez z7k>z5zmZxFx;tI*C>Iy3yoN;jr=YMfEj>MEn-<0=9r;T(A)%6wmltVgCki+Mna~#r zobBK^DVzk2@Skdx6cG`zCr6%liQMr}P*QqUQE@927vAP(<_3|Jlsp$O4FSV}pPwHB zw5Fv6uBELl3x(ct=;G1wrzJNu=xAwa1$Y<{_`y*A^|R*;3xq@>t!-}?1z4g){rvoX z{bu%m0$o4T`s)xLk6+u^h$WNtHDR!OPfXB@-|NQG3srC2xbY|>1Lr&5Kmazvc6b|T z2;@HbU_akZNqnSpNKZNtLV*PtmZs+}vE5lP8ZF8X5xM(zdlSPSRIi0hH+s z)aR)6=VS#G9VJKUdwYA=-le0KCrCo2rKK&UsdYpm5dsl8?a-kbwMts34c+ucAd%0= zWNDBJxdY0j0zs<1w`6OoAgD$Hgf5d@%3w3+WX109EUbSrk)8ptq|W!`xS`QF0B|F@ zG#NEDUcgVCv4!=yE?JR>AqU5gn^f35d-@cjhgnu%d;^C#ks~F6#{x?6YZ}KVlV)mZ zZH@c<83iN{m)Z{-{n>qUVseszs(4gTkZhi#CVTd*sItWq#HC9gGb7^T<39}!##U9G zk~kkK42+8I)W-h)J~E2S!^2}{D(c_@FfO)Lu6+0+j#JR*iIyi3uC6kNSXs+%=Vxcf z5s6y%_V(|9Rsm7%03x)`sI2L8fEPt + + diff --git a/doxygen/inherit_graph_41.md5 b/doxygen/inherit_graph_41.md5 new file mode 100644 index 0000000000..8f1f51074c --- /dev/null +++ b/doxygen/inherit_graph_41.md5 @@ -0,0 +1 @@ +7a44e837f0307766d5acc670a677516d \ No newline at end of file diff --git a/doxygen/inherit_graph_41.png b/doxygen/inherit_graph_41.png new file mode 100644 index 0000000000000000000000000000000000000000..a887c456d93249b562cd978ea3dc0341a961947d GIT binary patch literal 3768 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 F`X5K*FhKwS literal 0 HcmV?d00001 diff --git a/doxygen/inherit_graph_42.map b/doxygen/inherit_graph_42.map new file mode 100644 index 0000000000..adf5f1c772 --- /dev/null +++ b/doxygen/inherit_graph_42.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_42.md5 b/doxygen/inherit_graph_42.md5 new file mode 100644 index 0000000000..e8247cf7e1 --- /dev/null +++ b/doxygen/inherit_graph_42.md5 @@ -0,0 +1 @@ +388758842ddd1b9cd08d1f34519e134f \ No newline at end of file diff --git a/doxygen/inherit_graph_42.png b/doxygen/inherit_graph_42.png new file mode 100644 index 0000000000000000000000000000000000000000..a887c456d93249b562cd978ea3dc0341a961947d GIT binary patch literal 3768 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 F`X5K*FhKwS literal 0 HcmV?d00001 diff --git a/doxygen/inherit_graph_43.map b/doxygen/inherit_graph_43.map new file mode 100644 index 0000000000..4ce1bc5f94 --- /dev/null +++ b/doxygen/inherit_graph_43.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_43.md5 b/doxygen/inherit_graph_43.md5 new file mode 100644 index 0000000000..10927dde71 --- /dev/null +++ b/doxygen/inherit_graph_43.md5 @@ -0,0 +1 @@ +05fc186ad03abdbf752b06280ed7a26e \ No newline at end of file diff --git a/doxygen/inherit_graph_43.png b/doxygen/inherit_graph_43.png new file mode 100644 index 0000000000000000000000000000000000000000..9ddb2cd3da09845119dffc6e32a3cdda37d027a9 GIT binary patch literal 3049 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 + + diff --git a/doxygen/inherit_graph_44.md5 b/doxygen/inherit_graph_44.md5 new file mode 100644 index 0000000000..c7913b7a3c --- /dev/null +++ b/doxygen/inherit_graph_44.md5 @@ -0,0 +1 @@ +fb0d562dbd435b80b2d808467a3006a2 \ No newline at end of file diff --git a/doxygen/inherit_graph_44.png b/doxygen/inherit_graph_44.png new file mode 100644 index 0000000000000000000000000000000000000000..b4cb3bf3d013e9cbeab01190221f18ff35175919 GIT binary patch literal 3784 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 + + diff --git a/doxygen/inherit_graph_45.md5 b/doxygen/inherit_graph_45.md5 new file mode 100644 index 0000000000..267a2811a4 --- /dev/null +++ b/doxygen/inherit_graph_45.md5 @@ -0,0 +1 @@ +6c0ab9698441bceb4254fc7a2a225ea8 \ No newline at end of file diff --git a/doxygen/inherit_graph_45.png b/doxygen/inherit_graph_45.png new file mode 100644 index 0000000000000000000000000000000000000000..66f9b22d2855e1e01963e2e5d491f39503f9f001 GIT binary patch literal 2567 zcmV+i3i$PjP)rST=FwAJDi+3 z)@;_Ma3+^jG-Jk)#E{jHavjY{+95eE8Qri{I2Ab*>!#1|59^t8tEZd#{d`}4ozM67 zc|V`;_w$_R`Rp8k!C){L3!NHh5eR{90+g(^Pb^&*Hci7q4^|y?F7L7&&tybG>>wWq11;d9A z@3r-MO0Oj2uV25An3#y5pdcs|3cP*$RPc3INE@&xcehML<9Rlu9MOfB!B>cV{}< z~8zm(rh>wp4$8k_76oUMiBRV=7mo8mGR#p}`jze;CvY=S~Rl>u= zS8Uj@fx3cBCZj1+rchd18l5_IiY88+NC2p|ww8#9BoYaY966F=V`C{hJDaMjt0^un zjvO2u_%#e|i9|x9MvbDx#6-Gw?HbLPF@vT~ok~7FK6Lr=WjcBCBw1NmQC?o2-kjmX zhttlTJ1H|WlY)bT$;ruynwpwS`uNi>D=Q-l3k#~Ms^a^P9Xm!YE-t+7<>f_5NlCmN z6B9#|Cr_r+r%zL6W+rhQM=MsWAR?mj@^Z4Uu%NGBzY-DA!i5WI#E21;o}NxbL`RPv zrP;G*6A_VCt0ik|YudYaFWtIzi{j$qXw|A!W@BS$cch~|E~7_}ri6q9x^d$Mg@lBV zL?Yq)$Bi3DckkZi?aInZ0>EqU&Rz)7WOybD3kyl5Qc-qxHXS^8ki=p!snu#CB6{`e z6*)RO($=k8Nu^SeMxznr#~g))g%lDJLV!V%1X$3JPe$h7Hsw$*9$8 zY0#iS^z!9PzAZI1)hHP^Z{Dmo@BRDt^ytwev$jMcp&dJR@b=A{Hwge$R#x(DOP4OC zojZ5x%~`*GJ#RNPHIbd29bLS5QIOBsvuD%3efxNO`t<3Pn3%}heFaNaG)z!u26GxGl|7w+Oua5g@=a|5z&$*OK8`wT|`9m{P}YlHf$LE z{P~k#tD&JmP^^ULkVqu7ZQC}!zpAQAZ-0a&V^{V|2?9336`&m%{UgtfIb?CtIK+H^Xd-W*R)PyX|eAw%Hi=7!?pVnIIFty_nd zN8|PD*Le2q8LnNsX7aj=i;L0H(t<5pw&=BsL?V=wlwi`NN$~UYLw0sHY;0`c?CgwX z%a&o$qD5$HYeP;>4k9BX0RR$-1RFPQguA;tX3d&~IdkS<`SRt0VkJZe06054^L;ip zHUNG$$7l$Ms_`0?W?EiFYuLj$y0ZHMpZLj81=p2n)X^f(#C zVlf&U8`0R<2rDZq05D1r02n;D>#js1QHQoE41Mc#I*b@GLXf}E&`?A~L_n=pBO@aN z0RaIRGiHp*v0||pB9RDDQBnMLx6^)O^7He<_U+qYV`Bq8tLu+fR z-i>4b{{4uJjYVN$A(E4m5g#9qmoHz!!os3M%|dhl9mj6);KBU6D**iX@xy3LSN1}v zra#X_Lqh{*&YX!gYt}$6mt)wlVaUqL!o!CT&H5DTr>h7#XMI7B3pmcs&KN&_JPsc| z3;<|rYr~;KhdP}nq$trHQc_a*gjB25C@3g^zrVjApF@WZMQCU!PMtc1^XJcF-MV#V z{Wv)}!NtV|j~_qA+_`hXaU6VneDLDM3y8&H0D!NrFW$U)g9{ffz|YSQ05EUfJSde) za2&@U#-~r8;?A8ru(Y&Cc0Q3?2+e06noJ@PY<>2WezT3X`l*|Rus-~e1*T`_s`WWBqr zIVvhDke{D#*6uFO&dzXgae;@22mJi}kdTl7S65fTKBZDA&YU>|BEq6Yi_H45u&}_T zOP6r{`gM#SKOUZ*p0KsGMR|ES|7|vE)F@1wHVxI))$sQA2Jrja^6lHVd~yPSot+&H zA3h9wdwY0$dt=U=If#smy25pY87H)V&LQB1BF7-E7v}t=}tA3i0J3fpQO=fsJgnE znwpwOrBYFIb2IFDv}$5dNeOO1_ zd?9<$RZZ;_6%~j#i}QC zRKPKMI1UdFUm+5S(*76!&* + + diff --git a/doxygen/inherit_graph_46.md5 b/doxygen/inherit_graph_46.md5 new file mode 100644 index 0000000000..4be1216827 --- /dev/null +++ b/doxygen/inherit_graph_46.md5 @@ -0,0 +1 @@ +4e7e8fe4ec5aa4d5ccc99accf1eda6e2 \ No newline at end of file diff --git a/doxygen/inherit_graph_46.png b/doxygen/inherit_graph_46.png new file mode 100644 index 0000000000000000000000000000000000000000..84726cfefe8876eedf0aa4ab8510be04b65ec313 GIT binary patch literal 4244 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 E03-q_X#fBK literal 0 HcmV?d00001 diff --git a/doxygen/inherit_graph_47.map b/doxygen/inherit_graph_47.map new file mode 100644 index 0000000000..58907eafe5 --- /dev/null +++ b/doxygen/inherit_graph_47.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_47.md5 b/doxygen/inherit_graph_47.md5 new file mode 100644 index 0000000000..029118f18d --- /dev/null +++ b/doxygen/inherit_graph_47.md5 @@ -0,0 +1 @@ +514d03087245c8bf305f3f4e7a10f488 \ No newline at end of file diff --git a/doxygen/inherit_graph_47.png b/doxygen/inherit_graph_47.png new file mode 100644 index 0000000000000000000000000000000000000000..843f3d6313e35dcf4e89e4f0d700c4931c607d5e GIT binary patch literal 2308 zcmZXW2{e@N9>-rx*=AzwgsI6=ObJ7!ku^)UiSZ|tvRs4=qfA+v5krXVl^KH?%S~#s zjB$}nDaMu<%8>LA5e8A#{;&VN=iGbFJ@5Peo^zga-sk!Lp5N#9JxVbzB07O}KR_0g&WsVnOi#@L(!vF1` z8dMU1A=|kd-a*xgaY7Xh&)|`qDQJ#wRMfy-3*kE1HwmRnmT~`ltAFT@MWY8fvEsDj zgM!+9;fDey57#UvT=!W>zR){T@x>uy*@Ja+U)R_arFp2zBm^CJOAx|7`tP?!Bs?_P z3c(m(BoqcB6v=B;SQc7CgT6S`!t!&T0B5hG$L4P8BFSrhn91-Mq@gm?%JN0^ey!Z&2rU!$;_^YdACiAC5vi{t5u3^mf<_TY4U)e6Ce-Q9u4>E{mX>Pi+B74cVAsNXQaGr@I@jEoEe)wZgiE3@uhG}D`9 z>~RN7>v}|XiWbieOp*k4NY{=yp@?LxwN!&H!F)IB(euLl^$lV zF3n@%Ma0C!hU-EU5C}vcm%E$gozdEA_G^6|ao~U-5B+oDlZ}OipcMjET3XsSHdY;( zK^sw0Qc6ir$0|FQV9XB6POy_Dfp}h9KwzK_6~8cMqGB8+`mg8(>&Qs`Xo=jy!nE=6 zi}OuCeng213&w7(%K;c4pUk-tre9EyD1gCYg&7`@@bGYTb@k%MkL@2elt0k98e((~ zJ+q{upddmr14=NW43G4{-l98R2%P7drHABj?TU!B}OtsgIS7-bB`iP~a zh0L6ec4hWNK>q{bQZP%a<<+ixWxxh9Z(`iA6@M^v8i9I?y2R7#fj6g+ne`K#?NvO*Vfnjt}T59h|izvqmCWJzsbqY zmQq!Pf}9i=@AD4~#4p5kKQOelx4&gk0`MOawY9bH78Hm8Z#z27eSF}PJ=8QV_Yct| zi>eFF%2`=iM~#fE3514Do`X%brkBCh#R?AI%nb0?SIU5!W~|H(S*lBa{>mvhGbAD+ z!tU#n0`mw83Atsfo?t8>ATYkXhP!r+403=uIB*$F6%`X((?X$gQG@;c7Wm1o5@z_P z$T+aF!o-%?H47`N)z#IgKi|UWv!~)WZNbCT9sy@$;qcx%xM{otF#W#V*_%eA!8J5B zwa?3_sC3nBY;1J!c$6!njr4aEFXk1xYq?Xz+?~D0TtE_r#%hCQ&a)zuQc{eKjct8= zXlLy0SzpAH5+D#rMN3OjO3EKkJWoe2jL}IX0ewBak{m5(7h79V7;NrCO>%a2c1lV` zQxj#fyU?b&xtZr-Vq#*<$!j!pRmf~aXKLhh*dpb1&fok#tXDlcJY4bP`u(oY>|{Ib zJnfZWgQ7AEOUpy*>VMK0E2S$2n6R+J5Ga&!Wz@Jj{C%0@mmWM0hq>(K>Dkub?-H;V zsH&=J7?O}j60@>kNF*|M-TK96o5i)*`8rUXii!%x%?-@a+}!+l+&XGvVuC+Eda@~g zOIZ?rio%a`cXPXh!%3Yzd-lv0T1|3raL|L{y9Ql z2=}zRs|(m{2)Ixi^zN5`$i>Dt?{m3KoTjGc^z5u9NYc=;RZA#v6e{yb+Vr#%!ZRe-2d z%;R|zZrt#l`&g%_tlS2+upSEa=*NC^%qnuM>G~}`A15m>-}d2y5}VCdehuC9tVW&N zA+-|^N;V1~gCG*H+NXVe5!dE@<375lb&Ci%iog;GFgLhB!Mr-C=|-RyfbIdo$F}M{MPd~SdzuYy|hztZD4Ci!Qql{IGn#0o135Sbb|Yd%H8$o z>C?>GS`_7E^qywhG3x!hqEUJGP+d}2aSM@L6d zNy+g9*R<#96-4^X+#DTb{Bl?reS15;v$wY#BpQLxK60ciKVP1{JZPer*<4mrlT&08 zQ--p3bCVn7awEfHVqzL2zU;ml9qnpoCsxN~{_dwd1j)@+duEfDpYP)8`o3YCOy0e- zPIYy4#2alLoyvxWdm+)_AMx?0u0}h9 zD&qeK?dZ?gEjW^VX*=9o0G6d^ literal 0 HcmV?d00001 diff --git a/doxygen/inherit_graph_48.map b/doxygen/inherit_graph_48.map new file mode 100644 index 0000000000..d3cd7a57ca --- /dev/null +++ b/doxygen/inherit_graph_48.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_48.md5 b/doxygen/inherit_graph_48.md5 new file mode 100644 index 0000000000..980e074010 --- /dev/null +++ b/doxygen/inherit_graph_48.md5 @@ -0,0 +1 @@ +acfb2329b831abeae4e9a1e4f378400b \ No newline at end of file diff --git a/doxygen/inherit_graph_48.png b/doxygen/inherit_graph_48.png new file mode 100644 index 0000000000000000000000000000000000000000..752a2ba2a6c20e399e5f85001a17c0465a1caaca GIT binary patch literal 4407 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 + + diff --git a/doxygen/inherit_graph_49.md5 b/doxygen/inherit_graph_49.md5 new file mode 100644 index 0000000000..a692ca5af9 --- /dev/null +++ b/doxygen/inherit_graph_49.md5 @@ -0,0 +1 @@ +41b5ef24301655d4d036b8130c19f329 \ No newline at end of file diff --git a/doxygen/inherit_graph_49.png b/doxygen/inherit_graph_49.png new file mode 100644 index 0000000000000000000000000000000000000000..d5f24c066e445e1e7e0586edffc3e1b55df9179b GIT binary patch literal 2500 zcmV;#2|MQD00006VoOIv0RI60 z0RN!9r;`8x33*9GK~#90?VD>zR9zRx|C1M@3t9##sbuw-Wu&D|SXRTRQI=yjpEpX1 z(aBLmiZIl2a4IM&KNNkau(GH|is)h)lA?B-Qb+9qrB+hf#nIBq%)GDnL$Bv;)R{A0 zChd9l4}@8JpS9Ni?7i3V%t8SMgTY`h7z_r3!C)}VgP{9>OeS*_2m}j;LJWiPZzUxq z<#P8i%kBdLfnb3^Ah`5kj zLoI`2P+n_0Iy#V?oD7LXg6QaIym|9RZ(b&o;l_;{P%4!O3JO9_P7YKm6*g|%$X(Oj zmdRweeEBjI3I$fKT#4xDXw=lyK&@6IG&B^!!NE|eR6X)szkVGGg#r?Z1Uq)@z~|4O z4d(dOR;g5oiHXsRr_<>m7K`!r?OOo7ztb`6_1Z^o)stB{C*)iA4DFbHZ~R_kqBX7VaUkH;O_mezy89xbLXJb z=>YsJ&ZkeGA}1#Y0FarPiRR{JSXx>_tJOj*7Gv79X^4r5!RXPW5fv3>aBY6I`FtNe zdW8D=dd_ZXX~EsQce#fG0PNhk)8Lx*XCI862R^-gd$?i41}K$E?B2Z_vuDqSL?XeX zN00RU!^6Wda^y%vMnP2P%4!Wi^T(qXBM_>+46TpLW6^t5>PDwUumaY-r!UeY9oE z79t{Ay?Qn6*|Ud;h@L!oLSx2^p{AxLE>>e>qe*MU=R0ZAB+AOl;_RxbDgr?D_4OvL zSzq^o?>zA7<!sZ`H@*REZh{r>%Xy|ZYHty{N}TrSre8%R7;C@d_bh=>U4 ztriFTo%7YJR~R{RBxcQ;#f{CMKflLyo}Qk1wzIP{oSmHw+5q6{>dJi{H*Oq8jT!|< zM@PM}uHQ^u2!%rKv$eG~JUu;8T3TvS&akjB95`?Q2?+^!@!|zaN=k6^=FML3yR@_v zZEbDXv15ncxIiF4Sy>reTwLJq?~m;4Y}nb^!OhJLYuBztU|=9RJ3En=mxtKcSO9>B zhXhE> zY(#Z+b&n>Uo0}W=+0M=mz|XHJ6DCaP!>X7so~aD@wbsVQ2F=aQXl`!i#<~{_09ab~ z{W%~I2#ngj(LJ|Lr-QAntx5SpLPGHI<435~YNV#7V#SITm^g7_uh-hx*gzlmbM@NTAx{di-T3YJ8!hZk$y@x;Fn)PKLOgRsH_i9K_V`C#0ELZ>{f?O^~Qc@C@ zFJF!yKYp03uRjcSJX0BPak{y=!O6)9M~@x_0CaYC;>eLByncL5j{cIGn#ygiTCGN5 zVIcwn0!+#|dh}?7goNPKsZ+Rc;R3?K!VKn_K7Bf7&YX#Yf&wgAvIHWL2)@3)c>44y zY;0@*0AjHiuV25$#ful=@9z%)@bmM7LZN_2B;p=e#l^+AbLS4MtgPVW#`IKGRiVDV9*K#G2nq^B zaB*5$S>fEdb2xnXFx=hUF=fgWy(hIH_!>g}#m&tPGiT0(mzNj({rz$9;6b>%yPKR- zDwX2w*|Q)b1O^5g%wu6;fh$+8;MT2MaB^~jP$-1Gy*=K(eG3Z<3jo0Q@#8UP&Kzj9 zTKM?*0QmXa^v#<$T(JUxgM$N(9z6<2M@RVh_+atk#fXiKE`oQC=@t$>=-;f zJu!9aRMgbe^l8od3g3C)(`!u6^y$;FeED*?y1K&0#|N&it{63HRKIlok@U48)J0QM z6BQK|kyfjvmX;RE&CR9O)>iIIZ*_IG-t~OVneIMczka2A_wMP%C@n3eSFc`iwugrY zoj-q`zJ2>f8jXfNfBxL3oL%JQ<>@svx+p3tqK_Xx_870Mtfa!iLTYGe=rQ;5v}XO;2O{I=!I)mYJtX?MrfRjCbUGb<`t(V!Dc4@$vCP8m~A0 zQN{V>$&;a$z!)Ir+CzJLd*tQi4cmCV!Tz6HMaV05ELaT1Xlz<-873xmO6Fc=I5gTY`h7z_sEH}GHI5nmITc6CYs O0000 + + diff --git a/doxygen/inherit_graph_5.md5 b/doxygen/inherit_graph_5.md5 new file mode 100644 index 0000000000..65a67aacd7 --- /dev/null +++ b/doxygen/inherit_graph_5.md5 @@ -0,0 +1 @@ +1fa2988ea38cc7d14cca1e2441170cf1 \ No newline at end of file diff --git a/doxygen/inherit_graph_5.png b/doxygen/inherit_graph_5.png new file mode 100644 index 0000000000000000000000000000000000000000..427f9de7207844c2cbad53cba48443bb8dbd68f8 GIT binary patch literal 3324 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 ekn#V2BN2B3@_KTkNgkW7ibm$ literal 0 HcmV?d00001 diff --git a/doxygen/inherit_graph_50.map b/doxygen/inherit_graph_50.map new file mode 100644 index 0000000000..7631eff2fb --- /dev/null +++ b/doxygen/inherit_graph_50.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_50.md5 b/doxygen/inherit_graph_50.md5 new file mode 100644 index 0000000000..3fbb95c67e --- /dev/null +++ b/doxygen/inherit_graph_50.md5 @@ -0,0 +1 @@ +e97567b8010d30ac64643053ad8cb485 \ No newline at end of file diff --git a/doxygen/inherit_graph_50.png b/doxygen/inherit_graph_50.png new file mode 100644 index 0000000000000000000000000000000000000000..c9202fc94eb4d6c2f1b967e427475699fa95145b GIT binary patch literal 3636 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 DX@C7A literal 0 HcmV?d00001 diff --git a/doxygen/inherit_graph_51.map b/doxygen/inherit_graph_51.map new file mode 100644 index 0000000000..344c908d90 --- /dev/null +++ b/doxygen/inherit_graph_51.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_51.md5 b/doxygen/inherit_graph_51.md5 new file mode 100644 index 0000000000..312658193e --- /dev/null +++ b/doxygen/inherit_graph_51.md5 @@ -0,0 +1 @@ +5f3c346a4a2c9e3595de01096b4352a9 \ No newline at end of file diff --git a/doxygen/inherit_graph_51.png b/doxygen/inherit_graph_51.png new file mode 100644 index 0000000000000000000000000000000000000000..4e9ee189a7ef532081a53f3060f242e257a4e1f1 GIT binary patch literal 3798 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 + + diff --git a/doxygen/inherit_graph_52.md5 b/doxygen/inherit_graph_52.md5 new file mode 100644 index 0000000000..8059afa36f --- /dev/null +++ b/doxygen/inherit_graph_52.md5 @@ -0,0 +1 @@ +ecf7b142f3d4cd8c66eeed52aa34d31c \ No newline at end of file diff --git a/doxygen/inherit_graph_52.png b/doxygen/inherit_graph_52.png new file mode 100644 index 0000000000000000000000000000000000000000..2bebedd58aa357985400e6e2e5698c8a0e5cbb0a GIT binary patch literal 2522 zcmY+Gc{p2HAIDQwlZI4iYD+DlgATPcBT}_D5?d5Q#JFYHVFpb-GYST3b*hG_{-4=b879_uS{+^E~%H=lp)ZbHCruIcc^wL^w=!AT%hBR&6~V2ra(U7;P%7_PIXl_WbR-!AB0qTR(0Sp`@gAe<7ZHEBnK6$uc`b5|P2qdt(&&t4_GMxOn*d3)x1W%{W7S z0|UnGRPC}}B?MF<$Gk0lZDS*;y}dmPNy_Ekwm;2VUl)^;%bJ<-`!nIdgH<*%|B3&3 zVsLoaltPhOnS7AK<3%iww`X({x*OD$F_`0S8j?&Vb9yZ%W@91eG0xG^ad2qJBqjz2 zqADO^T>j{&-OTLls2)m22Kk1VpP!$anQ4Z{3xY`0P+vG44#q;^aCX{pmDRnS==|;3 zrw0;@t}^pT8=GU}6B9WlCBhm786YEwZOOopN8b?UG|S4``pN9m0x?-xxTdBio=AM! zW|XjhQeRFqa{hξE2Tjt9KbHuc60p>3J1yLSuA&POY%sR<8c$zCrhK|Sv4Tiaao zEh@aa!)LO6(AwH!|cZx=%A;iR(4Grq6TXFwp zUiYJhhQ?2ZhQ9}<;}y{a0^xR7S5cFirltyHut3ujicac$@F4H?YlouFrX~&E%+T?C zDpi~3N2Q9%Wvd*I+*q)?uP&YzDC^TwC?zeOqZ>B$^0RK}hl+`v?d{aGw4-8BLHf?4 zN06fP(HdK;oWnsh+9`j3|CxbodHT-ubVdLAmTv9SM!n}rh>x?gX2Zk7$|s42+1=gU zx7*qrsLsEnXJlBoxqTpA$*zlovrdQo-F+m3{dn=OKe&3Ho}S4|`uh5Q!%`!i>G**f7~b29`YA|hg}E^(dh)5~Tjhk8DUI*5Ob_K4CVy6a5Wt%67 zS8KIDPN!i}7cN|ol93U}U<+vNTal##v-lVGq%k-g)X2!_$&)7vX!IdaZf$*iZr2&e zr=#WO^LIRZw8EzJkCcJYNHesO()Hg5!r~8Jt@C){{AK4qW52=*G~7)?Lp6#^O1x>b zhOZxfHgONt8C5SAC9Q+Fv84IsWf50bSEPi50HnXa-`3W)0&6po93364yS=k>d3W=2 zQgU+dzyOi^)X%ZAvoo=eQ&C%MUT34CqSD~f4!c-x$nMWX_0C3czI@4Mv6P$N)BcQE z69BH$($;1c6i5QAyc{35EHRcu9c6Sm)<{d~`g?lH%dU4^DHQ>gD=RB^M$E!A+&Upn zPEI%+&WlcWxKw&iI1GeHN=ovY9nPop#2b*C+|rH+O9WQ8HZ+LLkCfLij=|xFqz(u= zSZsfzYlp47I~-K9xw-jhcoASA_hJPF1r-bo%DR)6e3U9R zIu?IEeDL?rn>#y7=gw{2S+70bHfg>)2h@aDK>TNF%7eG`Rx{#Y|LR$NeQPLs=6!1b zUNL9T?M^7CQT+zO)Wy}+;_6icX(=fMpB9S0*co}He9NJ|oo`f$gC2(EDRFyG&x;gw zi5$!7v%b(|Q{M7>3=c3MdCg2wEGRIrLf4}B#e7(yYDaP43YUv!Fc@dMidC}(n2B-Q z8x}yX4wp_LC5$g$zHEmy+w)DG=PoWTPESumP$-m$sHpG6y-UC+CJe?`2P=&Ee)R7v zd>f-ST)QSfadEj;r5d-l z?U*vmQV|Nd&jn^T@%LAj(~p6eLM1dk^#97;IOeNoF!t(|fSQ_Gk*-oJyq_LB2O@8v za^4T$)S1jvxoB*M1dI9VuKst!T;ZJ}H&6~?OEO6%*vjha4anx1Y- zqpAN_-B}RgIJaqD01U>`~-gRDCS1v6rHHMnFyUR|J zot@KOzO$zUo`}3*T*VUDF7?iz_YMgW zPOtI`2uR`cqpH_NM@Lure1fYhia;c;@n)^=iwb@IozvNJwNC@+ ze9IQb5_#k6*WQT<6krIYGaL<>e#ATs%uE3D;T6SpcXw^w+(f)~*^J=epYFD{w#02k zfNki*!(XF+s=?eUa;&kI+Q_K?MH$2A4{JqwTk8(Jo0u3A%{|y{>F6kz*dzVm|Ge17 z6Z|flrG3`nXS)A8j7W`XFUa=OMPiAwgpXipwqN&pC93XR6n!MfQaf|zuOca-|7(q# Zngs%HNEJ0Mcfer{Vqs>3Z!-0|_7Cq#wA=sy literal 0 HcmV?d00001 diff --git a/doxygen/inherit_graph_53.map b/doxygen/inherit_graph_53.map new file mode 100644 index 0000000000..c9c5f08b59 --- /dev/null +++ b/doxygen/inherit_graph_53.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_53.md5 b/doxygen/inherit_graph_53.md5 new file mode 100644 index 0000000000..8803d20040 --- /dev/null +++ b/doxygen/inherit_graph_53.md5 @@ -0,0 +1 @@ +7f1da4fc5ce43fe3c4a08fc30e05abd9 \ No newline at end of file diff --git a/doxygen/inherit_graph_53.png b/doxygen/inherit_graph_53.png new file mode 100644 index 0000000000000000000000000000000000000000..2c1586f82e60ffe32d3e75bbd2d69ca64fb3874b GIT binary patch literal 1644 zcmV-y29x=TP)>+RV-V04Y~;^om5w47j-AO)!3BHeyy!mtqUgQmerJ6t7b!OOIm_0#l?*9$n(4C=UFHS z{z0hT&lS(}zR%%%p7Z6rFK_?`gTY`h7>xA8%}f{!hJ23W%F`i+k$!ld_u6c>XTRpM zW=`TbuAJkzj^&fZ$Rr|>$ZY`s{F<9(l4)!jYbW2DXOS0TdO-uNUL?_I9XLDt!I=6#($z!w2lz zwF`nE0GPep7z_s7yLS&4E?j^{qk+j}!qCuA(mf+0T)%!Db#-;9udm0=n>QD%ZLutg zNz7(5Zrr#5tyYVYk`idO+Nkl~-d^Z*I;>c+0>_UZM^RA`hK7dl;>8Pb&dfMgO>b{6 zjvhSKdOe;#eJUR3(4j-HTCF&D?i{vk*#eD5 zgJ;j8eszw?#*G_cx7!g21OWWJ5U*dqMrUUy0N~N1M+k*N$jbV8Gk*EZ{CPGhr>Yt=*yQcL_}0vTujG~9gC{_`0*n>fBrmf9IK|dxR@Fm8pQbF!-oWb zyk4)EtF5i2rlzL2daYI~>2$iJ&Takr^>pXX9SVoTl$)DN7cX8UqtQr2MEm#er}O8} zi*w7$%BZ!qHA?H*vuDNl)2B~jPZIUa@AnhW^HKe9I-Qi2l|_L-VBXr2rKP2Xj7H_H?F!Q;n| zapJ^@IqMY)h4?xzFAo3^2n68s`R44I$KwId^VqRthnQ0;l@J600|NsnDJfaBw)wE= z6p`oDxH8nLTEiH}t2Ua{PDk?BA zFo5>H1ZxR$<$= zZSed3P%4!Getv=n2M5Iqvk(&XEIT_JZEbC^+wG9c<=C)c1Mc6ykG8fp@I0SVZAmfT zjq5ZM6BFciyUFkO(~loN$mMcTI2t}M9mjDU?0J&E zkN=-1x!u~@n%qN2e>y&&4+jq(j5)S@_img%eR`P{WiEfMNu*LKtX6BxvDK?rFRz#k z=dU%1L?VGorAoJq-vai~5hEeYB#eYGlQ0s(Ou|S=+>NWrWLi!gj0|R$Nr + + diff --git a/doxygen/inherit_graph_54.md5 b/doxygen/inherit_graph_54.md5 new file mode 100644 index 0000000000..c30030b128 --- /dev/null +++ b/doxygen/inherit_graph_54.md5 @@ -0,0 +1 @@ +726cb3d428a9ffeb270e772cb5373d84 \ No newline at end of file diff --git a/doxygen/inherit_graph_54.png b/doxygen/inherit_graph_54.png new file mode 100644 index 0000000000000000000000000000000000000000..7532d7f55262acf20bcd273bb2032abbdebf1620 GIT binary patch literal 3589 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 IG#w)U3)C9qs{jB1 literal 0 HcmV?d00001 diff --git a/doxygen/inherit_graph_55.map b/doxygen/inherit_graph_55.map new file mode 100644 index 0000000000..4fb6c09141 --- /dev/null +++ b/doxygen/inherit_graph_55.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_55.md5 b/doxygen/inherit_graph_55.md5 new file mode 100644 index 0000000000..6a54f03dec --- /dev/null +++ b/doxygen/inherit_graph_55.md5 @@ -0,0 +1 @@ +965198c728e52247f9b9abc1c7e9b33c \ No newline at end of file diff --git a/doxygen/inherit_graph_55.png b/doxygen/inherit_graph_55.png new file mode 100644 index 0000000000000000000000000000000000000000..074093c7286ef534265782bf42bfd02ddba32220 GIT binary patch literal 3348 zcmYjU2UHW=7L6#N6ltMIH%b$fDm;=%iBTdYbcpoc5d^|Rx>2b?s(?TQloq80ks=@< zYUqfx(4@%&q=_KX`PcW?U+dplb7y8vx%Zy4&)$1t4X|3QO#Dm`2!!<(25kh6WUwoq zW&r()q~xC)3=TS4Xvp!OEw8CK6#`-DxP{g<3CdZ`3DGrPIHpc9o{Ht+TZ8HP&MC0_ zrs>elDR>LQqc}!2=F+_LeJkmA>7Ud(SpQgCS@C*B(E8bj~(8CugNw zPM4<3*VbxpZ-1U67R~!ClvmeEvBeQe4^f;>a<6+f9pMc=l1}{!{bu;?tI3r zgj-nbO*^~k>hDS_b)ux39~|ThjFt*Monl~k-_hZ2fzJ}qzlaf03ylfe-##xc&fxCu z?&j$^;HHnoev0Li5QQ>PJccd}4i4s3S3?Dqz3ldhvLhoS7o?=lNSl|VU0lTX_V=%T zGc_}VDJpWw%gfVhyaj@Tg9AGGZIz$oLJSNI@3X1xKqwRnt=31R0ZM!A%9fR#olGLJ z-q(n%u2zDyWY~tE0q4$L>F2>`UHhI5CAqpC7WbK3!$(SQzt}(;UCFpE%C12+p_4;4 zbLDrfOSE#G`O=fEGWTPq4THgG7#Of~a&jt-2?z)zr=^|p^z;nfTPnsi2Fb$_2t!-j zzU_0C=^akE8n1ImB=W}wRm5>^qMlae93R#Adn!UCJv|)*0u>U1fWcsLNMxy)=kqG^ zL3d{-DmWMp(xH53A_gR(Dr|OcZeuoH7N)GsgUV;`=;(k%{#qWnE(x7|Rq>9Hn=9hr z;NUy+zPXqXH5{=QI#js%{t@%y^0Fh9g_SkGriO=27zwcp3a7s4^GQugNvYayV^hEA zn5#H9+8El)#e{%&ex_$e0GET;2oSTXMwxy*pSRDrk zJw3hQ-MbWo@`8 z#yF0NnORCqY<_1abMT&whs@>6mn$ih*4dBoqi>Uv*vrC?j*j@}A2IVf%)EcZmA)IQ zR^v5FXlc=S7#;1{ks=n8m^i{GA}H7$URzTW)!eLpXQIyj-4&F9Kw!AnA!kel6###`^@ zq7JHSYZ=?*XcR}rakWl2J4K?)m#0Q#G!Do2HDvu-K~WKbIybYB8!=orseWY+PnTH! zaj{GYvNqLRF+`>9Uj4LAou`Zx#PeJx#K$vluTQZ-3|Zh54_Q`hS5U3p8jh$AFFKYwNDuHS+2l z92^`wn|_^J2ac?}h2@f7f=vID?K5t81J_Rv1H$OPq zU-zmnDZ%KJzuOgxmk(FJk|YSbyjs575(&40}q=a_u&B>pc zv4_Dt+}uRTCNKM^GJEvQ&3T7LMqUe48t#Ou30(_LV_;w?p-_?m0E;Ux8lXHX{k$$EdS7kV;015**lWv{)66s_S72jY=(R z@4Q!zh={Oy7kck~O-YI53XRg1R&;l9hRkAQ-Rg82MCf39+(&;n^H|iFWNX|?n)J`S zW|hRRQD}7Ep0B#5rng$^__eR52Lwq-EwIK1x^s_I{b2a2mYEKxQSw5WHhv} zhyx=$@SLfsQI7fO(74%);8L?vx!RQ>t7T@!Gd4b6Y+ZZ4TLF`ul_ko4+RoLL5#&4c z@YhJt&X4nvT2z0Qw&`e*@JK*XrDbKm{?U27eGEV|GdFh^Oc;mw;2st81CLjz*o-VXe}zFu5ar2zMxj?}dL1IL1bhi0WX zP5*zo^XuyVdRbaJ2(Of**Y9aNxE_5r`PD0F@{mVOd0t*5^4hi7#VKYpb92|U#{Q$` zqdjR$i6`1;B6~%H_g8C2nO{m{sLK&cg&A(!E2C){8O8Pu@`8v!;_U1!%@2>iT85*b zx}quY__#P)q@b9hVrrSRl+<~(+zPyf%DJPRIkunM+u{&@a##_{JSl5()drT_($k}N zA%xo2c9Js|{bI^#pnqawg0{Z7&_@LxqJLKalqm1>LoV0dG}3Ug3L{Jl0frjamI zZ`Vp!CMw*pM5(N7am@{jdixd*Ob@Ue4u^Zc;D@UC?@(ng8Uz$Hl!xb!`deFD17K)* zdC8QPmTvV%OUXBgS~mq>-P_x%bnO$KX!x6rm6i3+RDeDU>#X&X5dFi$4E0uz6V>)k zS2S(&gY@T{T$1-3mZ6Q0UoSIz0UXxQ(2()4qrLrom9If3#l*ytI-GXCrRp1)nieY3 zuY*bp+U!wzLr{am`J>rHhIcLVX*66wVBl=S`n$H47RdMS-+iZBPSk|0e{GVybcvuV z-qzlJdeGzQzCclIdr!|t>54`IFmBTz*R;laih_cIMRF$xT68OJ#R@y?H686Of0)}? zoX@Zo&o^jyStOSCUF3{4th%|su&|I?TdOiUHf99!hOj9#GDM;1z$IrQ^~KIkP+V+m zK9R@*`_d$S)vQ@9Dk^GmcOlm`B3(Y6kxlq>**ElZZ4#fNJ2Mm-uz-4arld-oXu(NX;c>CqOIL&0X+4g`PY}l29nd$ z(~wv+ovZ7@Q)Oy_*VH>9;73YIN;2Jzi#{ATn^u$pA)FgZbosksLGGDP^C1tftj$B9 z?LfQ$T)&3>o_wmj9ILph8T_rCBajzyfu?f>iGD%gaCgaLO( r#^~Nb4U#6DE4CIy`~REq^f6?<_ygCxujD-V&4Jvyfkl_2>9j;Q( literal 0 HcmV?d00001 diff --git a/doxygen/inherit_graph_56.map b/doxygen/inherit_graph_56.map new file mode 100644 index 0000000000..00a5e3e6df --- /dev/null +++ b/doxygen/inherit_graph_56.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_56.md5 b/doxygen/inherit_graph_56.md5 new file mode 100644 index 0000000000..ec7d4fff07 --- /dev/null +++ b/doxygen/inherit_graph_56.md5 @@ -0,0 +1 @@ +0fc89b2a271007160d9378a7f6aabbe6 \ No newline at end of file diff --git a/doxygen/inherit_graph_56.png b/doxygen/inherit_graph_56.png new file mode 100644 index 0000000000000000000000000000000000000000..76b50de8943bf8bba3b8a2c5bb6b69363edf2f8b GIT binary patch literal 3003 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 literal 0 HcmV?d00001 diff --git a/doxygen/inherit_graph_57.map b/doxygen/inherit_graph_57.map new file mode 100644 index 0000000000..ee4af8ef68 --- /dev/null +++ b/doxygen/inherit_graph_57.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_57.md5 b/doxygen/inherit_graph_57.md5 new file mode 100644 index 0000000000..56529b3a4a --- /dev/null +++ b/doxygen/inherit_graph_57.md5 @@ -0,0 +1 @@ +4f4d4f639a8732ef3d5eb81ad8bf9462 \ No newline at end of file diff --git a/doxygen/inherit_graph_57.png b/doxygen/inherit_graph_57.png new file mode 100644 index 0000000000000000000000000000000000000000..5aa2bbec58d037e187f7764309f00cc031a1f8fe GIT binary patch literal 3557 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 + + diff --git a/doxygen/inherit_graph_58.md5 b/doxygen/inherit_graph_58.md5 new file mode 100644 index 0000000000..623025f0cc --- /dev/null +++ b/doxygen/inherit_graph_58.md5 @@ -0,0 +1 @@ +787b30086a5ef54a5d84b0dbca83659c \ No newline at end of file diff --git a/doxygen/inherit_graph_58.png b/doxygen/inherit_graph_58.png new file mode 100644 index 0000000000000000000000000000000000000000..aec7a3f97d2afa85bf7b00b6d6b05180803d0d73 GIT binary patch literal 4314 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 + + diff --git a/doxygen/inherit_graph_59.md5 b/doxygen/inherit_graph_59.md5 new file mode 100644 index 0000000000..0cec9ddca7 --- /dev/null +++ b/doxygen/inherit_graph_59.md5 @@ -0,0 +1 @@ +89e48d2812ffb9bc93562ccd187e17f7 \ No newline at end of file diff --git a/doxygen/inherit_graph_59.png b/doxygen/inherit_graph_59.png new file mode 100644 index 0000000000000000000000000000000000000000..82a515ad48f7ee27a4082be80f1a86832c42892b GIT binary patch literal 3308 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 M;FkV7 + + diff --git a/doxygen/inherit_graph_6.md5 b/doxygen/inherit_graph_6.md5 new file mode 100644 index 0000000000..cb834cd101 --- /dev/null +++ b/doxygen/inherit_graph_6.md5 @@ -0,0 +1 @@ +2eed3c5045260177521923355bc7728e \ No newline at end of file diff --git a/doxygen/inherit_graph_6.png b/doxygen/inherit_graph_6.png new file mode 100644 index 0000000000000000000000000000000000000000..c96688e2a9f94883b1075dc053e5f43cbd3de81b GIT binary patch literal 1727 zcmV;w20;0VP)M1di035-EKDlAiv+w=PW2Fpq7>vvREus zQ&U4qrIPPoUS3WnlPRS+4-E~G&1NI3)k^2iouk~`T(aBkL_{<^JWO)AoQ@wqPBxp3 z91cgyb&6k?RB32vAgxwgn{h#TJRTB@#q{#!OWtQTn`a2>$dMz0xOeZ~(bK0-6WU+C zd?ATMLVbOGf|yV!L|(6##A2}^)@rqqL?WR;Aiy8bU@-9Q4<0-q0OWSNdEcHrd#JIo zk+**(CKW-QJb99DfB*iype{cPD%qS9(bUvLYPFiT%gV~AqoaejQ>|0{x}?f%f|~WO zmsA-Y9YuC_HcCoLcwc#W`HX%WH*OTzQmGVDsWhQIGBN@p!nSSO1Ti@|Ie78n1;k=8 zHf`F(`?qf0ifA;7w{PE~tgH+GAeYPe_Po42s(^x};0md#K#pT!h16 zgu`Lpm#F9xN$T3o&(8olKrNrkiprBEnPR8)iu z7cKw*VzC&`pFclmT(V8MTrS7Db?aa>8o_ZKfFEb@;NT$EtXTt@Oop>(&+@S?EiF(e z6p+be=}u=}$Ye4+dGds}O(xSX=Sntbx7!WB-w%VqfU2r0Y~H+Ca5Dh>II+ja$9a3P z>Xf!Tv$C>q_3BmZ-Mbf^ot+4ULa3;i`*kXp%Y|ppo+Y%GELnn^H*cc8z8*zIMOeOk zIbyLG?%utNtgI|tyLJux_wPq{cQ-hWLo61+_`fH8#ZjfrAwFoj5__w zT^g8uXlQ7NqS2_J zEfR^)t5>gRczBqmrltgK@yDB(n4tdtenFqtuV2&X=xACoL_~o=fCdK#$>;M?I2J}1X + + diff --git a/doxygen/inherit_graph_60.md5 b/doxygen/inherit_graph_60.md5 new file mode 100644 index 0000000000..93b283a8f7 --- /dev/null +++ b/doxygen/inherit_graph_60.md5 @@ -0,0 +1 @@ +3207d9a5b588af7c4d0c598ab0630fb7 \ No newline at end of file diff --git a/doxygen/inherit_graph_60.png b/doxygen/inherit_graph_60.png new file mode 100644 index 0000000000000000000000000000000000000000..d6cc443ef92ab4e30d34235c80443cb9fcca4a2b GIT binary patch literal 3463 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 P3UWio5L1r+>(PGzLFALT literal 0 HcmV?d00001 diff --git a/doxygen/inherit_graph_61.map b/doxygen/inherit_graph_61.map new file mode 100644 index 0000000000..e60c6e9ad6 --- /dev/null +++ b/doxygen/inherit_graph_61.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_61.md5 b/doxygen/inherit_graph_61.md5 new file mode 100644 index 0000000000..38a58e2ce0 --- /dev/null +++ b/doxygen/inherit_graph_61.md5 @@ -0,0 +1 @@ +54a725a6665cbfac5d418c7ac34660c3 \ No newline at end of file diff --git a/doxygen/inherit_graph_61.png b/doxygen/inherit_graph_61.png new file mode 100644 index 0000000000000000000000000000000000000000..86e4de0707638edb10ce0ca54b03577d09495161 GIT binary patch literal 4248 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 xO8u{1z3OzVJ*z*uKIH@%{=ZQkG3#3jS( + + diff --git a/doxygen/inherit_graph_62.md5 b/doxygen/inherit_graph_62.md5 new file mode 100644 index 0000000000..55168ae42f --- /dev/null +++ b/doxygen/inherit_graph_62.md5 @@ -0,0 +1 @@ +b8e912b45fab96a388def824778c88fd \ No newline at end of file diff --git a/doxygen/inherit_graph_62.png b/doxygen/inherit_graph_62.png new file mode 100644 index 0000000000000000000000000000000000000000..896def3d460ecbb87e87a279e5da6b82b4306285 GIT binary patch literal 3886 zcmY*cc{r5q+a6+!r7=-<#=aXSVPeQKma-%->a}G}427&?A5+MleaRBCWf{quJ!=$V zvL)-QtceK4@Al7k9N#m?JkR`bKiAyXb)DCFo_Dmdk?wg0E(Qn$a{js=&ICL=!B-vz z1$PvOTReC`?e%qWkkhkIerriG1Oi{Wj?*yp&)Iw)Y-~Dl+V_?51>>`ds|7G(J~dS{ zxBhR$m`=X2UerlcQr}~35>&(fnTd|qSa=YO*O~f)@s;s5mf}0`3#AU?WIRlSfAEvN zbpL$qA}hn{L1Z_tEOQIKCd~7${Lt*~-qr2b2O(RktGOS|!ovUWvJ>oH%M)OUj{R4f z@{^3{?#OqktE($=adEkAGn75v&JxpO@xh*K6qhRveKK0u&~R`i>@*PlFpPCCDJ|`# zrv?*K;dKiOE@75|u%JrxNLPnkm2FO#T~{}Ts+*)MWHd55N)@gi_Tht(VFuFEMxm8S zC`KnIzomtnUDoE^r;?irb|LQqCidcKlai7!ep|D5-jBeByzdiP`S{{@S3g#~5@U(B zb#_)_c&dZ!r5DApMAKZ(G;mT?QBmRG;)*A}7At1@3Qzmz0PJ3JG~0@4H(x z=?Qn;y!My$?j7!xO)HnSws!x(KzLpr(yS!3xvuV_W&r{j@>_s~g(cru{QiE(pB-Ic zVd0KXpIFIc^8JSokz?kkb&{=+#PsyY{Cs}@fB?IXxvF(#&p_NvdFL93KDa-DAc)2C z7#bS7y4-fMpBO;Hf-5HbzX9x;-}6-zc?8Ki~;@$0@shsD}$+n%;IBjjawehm3sHprYMkXdweZ3-1@WR^K+Wfa~QCnMERP|8(im~IB z^t*y66r4I7A|N0Dn!-~Ve@9y9{(bRDH$}wUOT~ z`B#<=@JIg*g{P;pv#_!PEIz^B{aj_OrLWHj=@=P7Jb3Wn$Igz1v$NPcd$hg1J%W>y z-re2(P4DF@dPc_GsT#X;x7afcbO3JkoSZ~b(?OXbi7kHHESj(duO?w-Bda?p0Bqzf|r+9 zFiEe}tI5hp^k%LBC{yW4`|m}@^0!S*nXc6aEz0$&ohx1g_3ksJdmpcz8bARE7c7X2f?b*7y8N5$^zhZjy-*C2`p<&N( zw$kXt1Z}3lOUi89=^xmf4{nk35%qZR9T<#|PVVkiGqVK~Q8T6{ncb_|H`Z`S}oKW##$Z zLl`r&u9?}TP5a@&!53p9A|m2aQV|su6=w*ru(0Twp5_YuvqLu*d|(Zup~fgHFCP6` zpZCB>_7xi(d$_kto0MHV*!t295Ku$-<%+>zm|*-%9++?6zWKY%IDgF5*3p6f+}$PP zKcj;F?DRGIZO`dlN18p^qyZbi5cb4~?c9xuxuzbtK#btkb@>fn# zvA5Rg{rvJWsj(5`I!%Rb�`d>|EVlSX?A7FFQ_7PL|eH-lzuCXq2ZG_vcU0S;BBQ zJVP~55d;~x*pv9AW;G)lQ(P=E`{j$Bon5%o`?SukE@}dSP^TQs=&Y-&ySAAq2^J%G zcw&c!48T5wBqbU4_xE883|u?tSbEtOxviyz?nsRGv+TF5?;O(H8D5W zxyV2((|!sVgrMi?iFQY0Q+&n3I$I=dhoxNngLK_MVJIbB+CJ>ql$O*Yv)a6X3wzjs2w5Fye z0X4OdluL#@HrK_(Wo40gdZ7;+Q?ET2x*n6$&;p#F$y)m9s2)(1J_~4fXpZM5O|^0? zYde>mQNBi%P3w)GrC2&J2TW`+3d?!T+*yFaqN1Y<#z0vyUdvHWO!0iZ^e0*XmWvHv zL$o|RG`l7uM7y-cV9fis-SwrP2o| z0VvxYvOO)BA3JyVxUn&ljV~?iy}i8v(UX8i34wtU++Z0!J-vsoZ*QH;CtDYnXd;n1 zbxGO(2mc&lUB<#DI9L_P+UUp##CG1hw4#D>baYfsL7`{w`=>Lu@9ours6Tjsl9rJv zYX*UA$#=k_b3d@y?Cu37Lcz)3gRfBu36W)G5!dKgm0j&ujU_Yku)eFl5$>-c6NhI6B6p0`E`@LO{8OcC}*A6(YU)iFe zqM~Z_-Q@c4TqW}8i16bu=psA&Imo4_mNqtUpp9jwPs75(?0%&KIZsKs*zb5*+Pe8- zRaI4KS(%2mHZ9PW54ox_v$Iwf*&7>fXJRaxEFdR`0CD+A;+uURKQfz{nbj$o>BjSf ztMhlf4cLXcvvP1mO;1}`HF{717f@4M+m)q&ADNk9bar;0ZT5*dLKW21AQ;(EMLBKY z2X%N@R&8B3bZ16OXFatzJ303 zp#St?R4N%H>{lNe^|kf&vbTeSH>ks=GdGZJct=NE$lqVLC1p}?&_leo=TtTOcb_i@ zAMf8<>FMbq_1KSg)%^YQM=vM{oBE$uljHVWt7&s#VFZL9{He7;yqWd%sCQ#JS zke-p1^=zpx;hz=Rwe3%Y)epSoZ%axd4YC#EOifJ@nlN%hgBT|#XVL4|$sQPKn0M-qNz8~E@Q&e){i=gw5C(- zD{)G5`SDY3ia^!meAY}Y<_dKa?z=NFF_k)4TU$dojGg5G>e`OCRJ{HC3QJ32UQIl6 zb8``t%Ia!52nQ$UEyi2GZ-`%Ha6MWE%-hwa383XLRqOP7K7!fU)Ra_Jg|ce$qD7%l zDXoB)H-Pr9tgL{c(8l3t09U>GNw3INDsK*{^YC*5+sFs{qoJW8r=$eUI@P_OMP!h}zGeKj+ui^{?IvH83&Bty8T4i%Gw$oxbFre zpH4zTBID{K(Yc^q!}6_H|GusX*uCdA_m(sC?=SXvUKQxwyLW+toxLcSbidzaO0Te3 zyFI;J-dsI^0|S|D^gI{IjO>kO70a)#W)2MvO-WDho}CTCc^?#viUEH@kHumUEG)$G za!GGrUqMw>-owK~kZvUKDQbtytiYbTy;VCL9(UMGE94`w!eJCj=B67abMWP$nOW;Yy zUsyjUmums3=2In*00jW+Wq-WCDYOOY5SNZkKwgX2j$yN#C^tLH0VmiQxZO$z!T79Q z1WZcy-?0a518^dsq7tZQIWRB)P7jeuNf$s7p5zc>MS;%;XB|>zCg&!;p|k(PhbO72 zm(KLq);6rPRGfy6&H*qQBuwI;mmQ;{7u*!NW7uSiHEF`mMYs3g$kOEq=0XfA=k=?^aEnO3bIm3ObEQQz#Tn z=*ipZNBg&FMW3cQf$l$0+e=6Q literal 0 HcmV?d00001 diff --git a/doxygen/inherit_graph_63.map b/doxygen/inherit_graph_63.map new file mode 100644 index 0000000000..714dab72c5 --- /dev/null +++ b/doxygen/inherit_graph_63.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_63.md5 b/doxygen/inherit_graph_63.md5 new file mode 100644 index 0000000000..b579d886e9 --- /dev/null +++ b/doxygen/inherit_graph_63.md5 @@ -0,0 +1 @@ +8de5c250761c46fa41cef8a44915e2d3 \ No newline at end of file diff --git a/doxygen/inherit_graph_63.png b/doxygen/inherit_graph_63.png new file mode 100644 index 0000000000000000000000000000000000000000..007fba7fd49e47ebf24d620e6dd9edc5531ff0ab GIT binary patch literal 3774 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 literal 0 HcmV?d00001 diff --git a/doxygen/inherit_graph_64.map b/doxygen/inherit_graph_64.map new file mode 100644 index 0000000000..a9629755a5 --- /dev/null +++ b/doxygen/inherit_graph_64.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_64.md5 b/doxygen/inherit_graph_64.md5 new file mode 100644 index 0000000000..4de7203a62 --- /dev/null +++ b/doxygen/inherit_graph_64.md5 @@ -0,0 +1 @@ +d4cb5e310a0806c8c4a69dcdae2a435d \ No newline at end of file diff --git a/doxygen/inherit_graph_64.png b/doxygen/inherit_graph_64.png new file mode 100644 index 0000000000000000000000000000000000000000..09f4d7373f4a40e43b737436b65b73ffb11ed7ce GIT binary patch literal 3474 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 Z7E$>R*1KXM68vOA3~wUfFLj(A{||&Wr(6I4 literal 0 HcmV?d00001 diff --git a/doxygen/inherit_graph_65.map b/doxygen/inherit_graph_65.map new file mode 100644 index 0000000000..83cee1da2c --- /dev/null +++ b/doxygen/inherit_graph_65.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_65.md5 b/doxygen/inherit_graph_65.md5 new file mode 100644 index 0000000000..a4c547e71d --- /dev/null +++ b/doxygen/inherit_graph_65.md5 @@ -0,0 +1 @@ +5f65d91f6c891661883018f9d826d501 \ No newline at end of file diff --git a/doxygen/inherit_graph_65.png b/doxygen/inherit_graph_65.png new file mode 100644 index 0000000000000000000000000000000000000000..c140e2618dfe0f51701733f6a651afaf77fb4729 GIT binary patch literal 3611 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 f|GP#5kGaW00sM!z?|cELJ&2jHH4 + + diff --git a/doxygen/inherit_graph_66.md5 b/doxygen/inherit_graph_66.md5 new file mode 100644 index 0000000000..f126604918 --- /dev/null +++ b/doxygen/inherit_graph_66.md5 @@ -0,0 +1 @@ +26d15e7d02d1486a3511f47ae72d8a91 \ No newline at end of file diff --git a/doxygen/inherit_graph_66.png b/doxygen/inherit_graph_66.png new file mode 100644 index 0000000000000000000000000000000000000000..8f8771b7fe98437810a90c9e8aad816720f355ad GIT binary patch literal 4107 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 kGX2BJ@IcdoI)f$konrKYP|tzr}QKdi0d?*IS* literal 0 HcmV?d00001 diff --git a/doxygen/inherit_graph_67.map b/doxygen/inherit_graph_67.map new file mode 100644 index 0000000000..52ee3f208d --- /dev/null +++ b/doxygen/inherit_graph_67.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_67.md5 b/doxygen/inherit_graph_67.md5 new file mode 100644 index 0000000000..1453765cd7 --- /dev/null +++ b/doxygen/inherit_graph_67.md5 @@ -0,0 +1 @@ +6603173f3e33bbb4899c6da4817f53b9 \ No newline at end of file diff --git a/doxygen/inherit_graph_67.png b/doxygen/inherit_graph_67.png new file mode 100644 index 0000000000000000000000000000000000000000..a0c69372d35d9b3e712ee64cd9563f1bba2bee30 GIT binary patch literal 2070 zcmV+x2-BKn79iddg`1>QBIPdpTFpWIR0$%^Yfurt4-$l zOQ3~=!z^4;ax6QzqU2b1EJ{%h3=AM7Bm{$lgNxyQ!TGo8T_{pgQczV@wbU|9Sd^mF z>2#>6sloX8_+q$Ua28tca(&s;X>4r7moHzK@p92UYxm9Z>&WGDI5{~jwTwBlTy%3q zxd{0B`YyGEUt+oFUXahX!C*jcZZ0AsB9M}jf{u<3qjkAlj{EoTBQrA-yLRoulP6D5 zT3U+z`}Z?8)5j{63No1t;o;#>C=?hP8Zz=%US1A`LV<{g2&AQ@p|7uRR$tS{YWj^htrKLzsO*OLBYPARr4MkU17l4^RgG!|mGMNlfQBf!>E3+sT z8*F(XA`}!9V9%aC*t>Tx3JVL(`m723U_yR zq^73A*47ru$;n3k4jecDfj|JcT#nApPDrIv=yW<0Uo(x_^qxL_8tLij2nh*6e0)5r zs;U?pe}8{mxpD=cK7C^B%gV~2(P*$?!v+ARcQu7Vfy0Ln!_UtTadB~|sHi|iMFndt zHrVozl9Gb#>}*6vMq=mAoyg40#PQ?DXZ2^PZmCp?f`S60KjxyMBJ}t7WBvN|7HOXo z2?+^%4jno~meSkXOME_`T3cJ0xzf^70zhBCekCFzu~+&kW_@^gnE5Rhi|OFOgUonrY>b?ooT#jwbQIl$)E&i~|A!=-RbwL`2lz-%nOnR#a0{WAyw#e*CZ~ zmO0GjL8H+SpU*eS!{f(~$;!%#v|6o+&bjC&B8rNNq7x@hF!Lgjh%R5g%&K`RSFc{B zgoK3uOs~Ot-znd}e-9fQ8+dzrGjjm}0VZ}nK0ZccS65fKy1LFd7K_D5PELleuP=gv zf)E@WjNQ9;8}0Y^_h)`vTU*1&#|Q20?X14p^tQLRV|;uZX=!Oj@pwEQ-oAYcH#axL z$H(LR`SUn=@+988d4rcPUot1(blTe5Ktu=%3No5sv0??9o10lFF`LBF%?+7p0w@9Y#k- zF*-U58ygz{Kkry3fvn~hDmyzHXV0EROG^uG+_-@Y7cQW+wG{$^V8$3)trqt7_Vd({EgM)Bza4^xr z7K@G9@?dXo54~QG;o)JdTD1xQ@a@|-0I(=e=5zzVwr$(6di84DyLS&tr4rH6(H8l& zgn8d7Jv=<%;^Kn5ygUHF#KZ(HUAn}&&s;Oo*w~1N4CbaXVX zU%!r$k`lzn$Itqln>KBNr>7?r3Iz-X1Aw2WP+eV}MX}hJEe|4*2ySj}$jQlJY_qbm z;Njt6(Ftr$H}LZ`PfAKcc6K((%gd3FkYJHsOPF_23WY)x7Z)QZCkI|$Uf8&CBlLPb z>ppYMh?A2O^78WF?Cgxdz(52C2O~W_9c$LCVeCCTJmBf+35i64?c28_D=Q0LUS6!e z+4Kqo0^GfO7nPNjaB*>gzrQ~m9Ualt)y16B03egeP*hX|BEpUxJ7#@Ofk1%Uw{PRw zvuAK|alz)zn-LQegSBhdS{%z9v*kf36r!Z01jWV05Q#)^cXvl+WhF{VO2Fr{zjkxF zr{>_@yLWJRcZXCewMg$TG1o?Cl97=SQmfUZ(P(IFY>b{heM&l=j);ir>+7kvx7Wzt zTr)Ds$B!RLrBX2s(g(&9vu|^HC+X?wq5ArI8X6j!@tLcu ztBo3_Nz`gJeg6E}XwG0TP)A1xwY0R5UavRV!xn2M*z!O`q|@o>)vH(Z`t@rXA0IcX zbFR84CML+u&5bTzylAoJsm#{sELc(gP9|T*pUzU};lYCkWNT|n{r&yFw13gMZ;r*G zx3?EDF)=f){r&gf$jHd}&5Dc(3k!ovrNXIGr)F$~=EJ|TD4Uv^mRiE1gsB< zHcOd@M~@yYns4s^DLIxMTv2i?JGi3cSaxtl$+7ICjon3(uGb#QPnm=q-u z)dJYN1X?)$K=^$AKTEBFgM)*EgM)*EPx# literal 0 HcmV?d00001 diff --git a/doxygen/inherit_graph_68.map b/doxygen/inherit_graph_68.map new file mode 100644 index 0000000000..83f853cd6d --- /dev/null +++ b/doxygen/inherit_graph_68.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_68.md5 b/doxygen/inherit_graph_68.md5 new file mode 100644 index 0000000000..4fb63128dd --- /dev/null +++ b/doxygen/inherit_graph_68.md5 @@ -0,0 +1 @@ +5b0a6b83cc61ece9abfe03de28c88278 \ No newline at end of file diff --git a/doxygen/inherit_graph_68.png b/doxygen/inherit_graph_68.png new file mode 100644 index 0000000000000000000000000000000000000000..2a378a3ac46c01427ed5849a03539fa5d8ea8ac0 GIT binary patch literal 2219 zcmV;c2vqlpP)K~#90?V5c^(_I_KzjG?4#=?}gQYncv4Q37%Z%v0(NRnu3kNA>k zQ`3}0j4T+LR9Z>oUlHq-M7 z`+PvybzZLP`#b0Iw{sl@C=?2XLZMJ76v|q{S==CzNbETr&R@Sn42ANm$YiqrE^aej z+`!>*{^D>rf3J@u3dLx!C-(w(?%Y{hDHMtkXliPLOeWLWXR^*(D3o=BCO2inLX(@a zVOf*p9vd5jSS-f)`1o45H#&csUW#F?Nph>zYSh-&Vs>_RE!-O&W9v;zOG8yvl~H_A zew}4+ODMmNL?VGeAo$%fkdl&uu&^)$1qB)1w_2^n;lqcQ?dNj2c=hU)(c`WJn%rxE zhlj`SmH+@~Zf=H;kIyg9pPZaTd3iZ3EiG~U_;Ia1Q&Usq=H@c?#fukVZEcOSXU_rv zIGiPa9|Qo%WHRu0JcNXVz{0}fm$ey!QH~`VjRu88% z(b3UmeJ!@x^a6lfE=PQPJVHZ5QCL{W99c?AN|2F}p*2>eQXw!f5Ca1P0CXQqG}X^77Ez+lzvN0*J+8q@|@Xa~AK#KhbD3c=6%|qNAh1=kp|3A;h5PT`5LM z?o+2u;r{*mh>eYfNF+jRY^+v)Q&STX5)xo;ZjQ{%OzhjY4}*h)P$(44n19+MBO?e5 z48-o;yOEKR0V^vjq^727`8#pq1h`x-BoYbw`}^VN=LfY~y~LL;n@#VfOP7$Hoei;A zjKsu5R8>_mW4ye)aQpUc3=Iu2<4a3RF)}iOojZ2|09smF@b&9gre7+R;`Hg$@bvUV ze0)4AD=Sf1S;-oU4Snkn5fOpy+qWY$G!(hHxsXUC%kBjLw6(P%D=P~-cI-fAW+wLT z-HWcSF4Wi8BQP+~AU%c<9v+U?)>hQl*TdG<7IATLaB^~jR4T>$_wS7sM<+>1Nyn3u zlZl}W4-XR)6BE+e*~zq(l#~zv_b;1LW$}t4zPArza^aEM#nNZ*L-#$p|5YeELNTmTuY0g%+Jr0+S*zY92`slXsx3m zD3wZ*oSdxl)xYX9_lFN3U}0gwya52f+uM7|ICpnkeEHa9niySqDjdU{xWv+3>W>A~#mEV8n)wBm6%9Q5|~V%M%+ zNK8ybettgApFfXx@7|%cwUv1jFQ&V@8-x(}`ub|MTUuJ8y}g|^790B3VL2A>MQCU! z`uqDKm&-9eK91PfScHUxVAG~etnpXF#KZ*3%ga$*TnvRmfvBh`qkc=QI=Oi~9;TVOxMn(o28X6#%%MlzLjBVSt>5OM%V*`ywgYofk*x1-C(ZUvs z4SnmdTv4}pF9HGr5D*Z6(a}+qm6hS<&6`L{O2V;Y#}FGEi@?A@n3x#n)_8Vy7SEqQ zM{#j6s;a8s<>iIAxHwc)RABSw%|?l_z^WCyxVXTL`FY&Bb&GYLzM`+C zr3EivzJ!^X8AKuxQc_aT-QBIVkq;g`VC;s51}K$E96EG})i;}7XJ==)y1JsVu@M0Q z0T7GD@bmLSdwV;0JRShR%E}6nk&(E2_b!Tyi;9&~)`7?4VQg&7AU^d~nItT$GiSp{}kD4h|03zkffX zqM~4DXJ>FMedt?<=;&zV=H|lB&yTq+F%)NKXI#E~86Q7>M0$GqistGgKR+Mc-QBow z;eyuDaa~wxLAk)x)D&rMZYComBV=Y~hE!Kq6SZ2+9QucchqcD*EBY4r{P{CcC=^U# zx`0q9B#$3ICXFF`LUpDj= zltxSL^<-gF|LxFqSmWCg%GxkIJdCKQD4l&lK|#pL$ysMbe;$8ia<{d${cZ_s4xi6Q zO-+s7G5>~jSPk_5xhWeKn%tBP3r%jyhJ_|KWy3;~o3de9_O>J?C1pKzP$))cNpcfH t8UXy~H)x?yC=?2XLZMJ76v`jO{{YHcZtcf99fJS>002ovPDHLkV1fjqC + + diff --git a/doxygen/inherit_graph_69.md5 b/doxygen/inherit_graph_69.md5 new file mode 100644 index 0000000000..be8daf8aa5 --- /dev/null +++ b/doxygen/inherit_graph_69.md5 @@ -0,0 +1 @@ +22f0592b903cd51abd0deff955b90730 \ No newline at end of file diff --git a/doxygen/inherit_graph_69.png b/doxygen/inherit_graph_69.png new file mode 100644 index 0000000000000000000000000000000000000000..f57211122781572a8622c851b08648d6d1842ab4 GIT binary patch literal 2216 zcmX|D2{cq~A0P5&64_10*e2n%Rb)xlF*0Z{8n2}xW-KuoJ40k0`^TBAV@pP963UXS zm1Sfbp@xtxONGW(UiHR%o$ou}xzD}NbI*CsJ^$yo{coC`jfDUoln(>~30R_#_Q2c> z+zR01z;m#qIvALa|B8-L;0Pt;nX*_!a2?gUw0~Q(!@+>QNA#a6+PK| z%-piqI;}bArL2s>Mg1ryEH8RbFzJI2r-7~Cw@iM1#sni~el*^>EUFpENo3UM!B}%r z7=H8L8Vu~uIZ9tBL}orvFE&K4B$i#JkUj?eu~N1-|2nZrol?cw7CbihqcgLzYR$_Ar?hZEe@R+|(pKeQ5AO+1mDPed@!w zxn;Gt8zdzsYZ4{0yfh_~5b`|STnZv5m`o;iF)ugQ1WtW5Hz#XpX?Yq3!)da+E?n;b z+2L@Rsi|Nd9v(R@t(-{D{=q>r1R`Nzib@s!`{&P!=4QyNm)U2%yu30NPf!pg29YBB z`}@#kJpEgz2IQQ&x&VbjAs_s6>F;Qx`i2HbFIFXw{Qavq0)cS%@Ze%#`Lwhe%-2Fg zLtm}#(9VT~ggCjlXcA;)Wt+5%i;Cc9&K#4FkVwtUM23ZFgXN*F94p@kEhG1gvn{e^ zzFO-HE?i;b|l;shl9<0{3t9e96vT@pPQdwzw$o} z6cl(2WCVFn!Azo}^rK^9Xime!!ze4OE>`JfYGGk&%&#B!J36GbwY62&{!%@EUI>jw zKVmTAX*9{M?rskv@njk@p|)0|W*MWZskwa>ixnHi#>N_tj*iOv`}+?)18C)ri#|Lk z6+)yoG-$O1E+h;@-ZP4Ub7niPT?PPB1Ss~z;}d9yTc3D$rapY2m0XUH%LJRi+kSglxY@?#0!175j{m|5z7eR@%h=>R!8jUtI+1;H8 zh#vu#2h@smbS%I+I52RB04v%9O(m2)ha7THP>_PYzROt~JRZ(vf-o~n!)f>oSKGL| zmk;bAuK_$)K7O1I=HccxSvK-RXcXi;dZgSG@VolX%E9KsF@Apj`K6^E*v{srQzNUl z*WBwCfpAPpN~($A6d-1Zevdteqm|w=L99XMcQ@xVgFCj*llUF5-c}fCG9vI5?QB_c}>Dcz;?-$_#@M4h{*C z&*>L}!JfRI6R9SVL`6lf+SuTOgYSNj%goGFv#D&W$2JGdF~6@(j809Zudm;lX^#{I zn41r7@e2XA%-6j8067Z*T9-?Pcqwm6eJoPxt{*E-Wl4|M}-AnO@CsaJ&@|AV?$UH8aH_7ULW;o*USfhMl5($Ue; zfSnhXmnr%A5`~3@AP{g&Au+L}6hT?It}X;lz1hDu(-v_K27}2_QRP?_u77@!+#DUN zFtvG3{svlFT0MPzW{Nqcz}E)`_yChS*15R`savO|rI}h;@!@c|ayw-^42Fw}s{GD8 z-uQL~&?BP60mSYwc7L!v``0()j@9oPvG5PuVZw3Yu^76z_$rykG0s<72lnB$$ z{fDA%-@dJPI_PabcmHfPjFfyL;SKG@6>8&ZlW;IBc-H zx3^dQg}8AT=JzVzHJ0y?aJSm%N*p$a($xwRoRf?QA5Vd?etZXU{G) zP2ilJ8TA)RC*Hm_>Ads%aqv|J_U^ZDq_L?fD{mhkNNIPzwRG5Co;mL zQ`6Iy78WV&Pxa0uGe*;jo9)gp8bka!A>!u`)Nw{n&uL?3lx{&SDr#kk|BgI(vjW7* z>}L^n35D{9imIw^Yo;;ucPzp{X;0au&%mz-$kN;fS&MK__!qV@B(DGf literal 0 HcmV?d00001 diff --git a/doxygen/inherit_graph_7.map b/doxygen/inherit_graph_7.map new file mode 100644 index 0000000000..266f84ad22 --- /dev/null +++ b/doxygen/inherit_graph_7.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_7.md5 b/doxygen/inherit_graph_7.md5 new file mode 100644 index 0000000000..493a4bedbf --- /dev/null +++ b/doxygen/inherit_graph_7.md5 @@ -0,0 +1 @@ +b8b5b2fd047f3dd0af6a866e0a19c190 \ No newline at end of file diff --git a/doxygen/inherit_graph_7.png b/doxygen/inherit_graph_7.png new file mode 100644 index 0000000000000000000000000000000000000000..5acbe9fdbc78a7b4086d8f88e8850965fc7807ac GIT binary patch literal 2527 zcmV<52_W`~P)JwyVMxVEE2_{KjPjl zvH39+GIy2bXBabF6D^JJY8Az%xPG)qyEW9RtNBr1+(g}euvB_||M+}6>(uSuTT1x6 zAAj|FpZ9sbU$6K3K2PVo@6H7n3&C{4OY!N~7(K84>pTU3_TiD=RD9yLaywX4IX()*xTL ze8I3`!v=H=tyT*!FRuX|<4>otu@R}Msj#)RMNm)>@0hi4U7au%$5O#KU*u8r< z06-w<_B}QLK&@6oEEZ$=^5w9xu^F)3fqpW`j~_p9^5jW8dh`fRPEJ_2ZXNHqTrP*7 zpC5{filEhMv17*$==FMJWo6;owQB%?AVO!081B1|l*t5*{8N z0DzjB8UzLgA~Q1+c6N5Wv7@7-QC?n-!-o&!%9SgaHfY7|C{7{O~ZhJ%9xVq;?w78ZuUz(9nAgkb*s`8^t{Ur{I&L1AHG)Ene-IZd59 zm2TX)L6bDAoZ ziY85(M3*mLri_dX^6~MZpr9ZkB6{)S1^N5?lb@d-X*3#o{rWZ6uF+^HCntyE7_$1ZgxH(rUG4 z=gG~@jT{^t==kyDbnDhFnmczc&6qKRWHK40rl!)xixCwkVGO8Ra8`PeNLP>K{IF0j1&q* zkQsaQ-XMCto`gany?ptSYfDZ}?q-l}+qUt}d-v`gJ$?GrXlzciwzif;A`$OHX)qXQ z$dDo2f^6Bcg_KIA$=p>c6@`X|a&d1ALPX@@;Xw%r38p8g6K-y96crW4#kX(YCID1b zRmHUh1O(8*g9nL-EUL4&n$^|SBoqpHbDxuwL)O;TWH1;w&93XUa^*_evu6(%OQlje zd-g0BZ{NP10MNR1>!_fhz~VXSOm7X+L3?{UJ$(3(mMvRG0OoI1`m|j%-^SHXYa(~;~+r!q@7EVr1yf%Zu0KoD(d!wn- z=^zveF?;rG?zoqi7uwp|P*G9A-ClNGuki421P2ErCME{Cxw)vUtmNJH`uqFi_3PJ2 zOG`t2eLdE%UytR>mt*MAp?#Yu3u$O*Kx%3#l9G~;pP!GlYu94o!iD{&|I-E$i^XVe zZbox+GxxyMu^7C8tSukPoTgYThCm=dWMpKwhqTV7>P%Bp6XwmEhmepED3was+1cUd z&6{}gvtza9%0 zE`(6nKVQ4GwzlHVojXWMNJTU%?k*1po0IxW$3c6P?GW5>9* zBS(&4%9JTR{^te$G2Nz3n{f2#QKYA*L!nR@?Kg7dNNnA@75Vx3C@3g^lamwVayg=- zqx+PvF*a}BjEIN`xVyWfw6qi&jRqSwY#5MT%bzxgNF>75t5J{^-LP2ydJ zd!n+k68ZW0Mq_iDR#sL>Nl8IwW+uju9}iDYPdGX{;_chFu(Gl;I-XQ2#nPoq;p*xN zFE1~+y1K&F)|S`jz<~oebLI@(-QD5h;(||~KAEf`I5-$8l?pPM4B_G7W^3*(eW}wN zB9RD5NlCbR^(v%NDJD;zjLghTBqb%8y~2lvhC-*)Ve;h3kjZ3b$C65=h>eZKn>TN; zb?eqXXb z3P`Wl^ZJ{5NVi0@gUZTEDkvzRhK2@SyH2Mwx}#BAT1t6&d1Npc=;Oza-FBZ01_M2N z_Ka$3YN)xnnKT*=wYIhr5s_A_r4JuI@cO@h|DJMlb1mA%>N*eg_4V}V(IZ};va&LI z_3Bl(b9<_@ubM3_EmT}wOeG~HTzx%hcF^A5PR`EG6dxaNrqaGqTwF|LWn}}RZH}HE z(!1TPDin$!fk1GBy${0Z%H6wn5fBi7%F0SOI5-S;I{k`LsRR+NQLELKy)eb-9eTYU zYuBzddd%0?7m<;Xzc{1*W%1(0$j{Hm{{8#^I&+wU8Kj?Zbacdn2M-22jR7M&JA1HG z7!=t1APj~Hm_Zl}6EK4?7$#r_VK7X<48mZTpvPUTo_;5Y!T2}P%^*aShkt%yj=}g> p@&C_0gTY`h7z_r3!C(v;{{wN*7klla0}%iK002ovPDHLkV1lMO$Jzh@ literal 0 HcmV?d00001 diff --git a/doxygen/inherit_graph_70.map b/doxygen/inherit_graph_70.map new file mode 100644 index 0000000000..1e31ae8cb1 --- /dev/null +++ b/doxygen/inherit_graph_70.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_70.md5 b/doxygen/inherit_graph_70.md5 new file mode 100644 index 0000000000..6cfc15bef4 --- /dev/null +++ b/doxygen/inherit_graph_70.md5 @@ -0,0 +1 @@ +2052218d74632c13da08a77d2c3f6802 \ No newline at end of file diff --git a/doxygen/inherit_graph_70.png b/doxygen/inherit_graph_70.png new file mode 100644 index 0000000000000000000000000000000000000000..80c638bc908751ccf621616487d53b54e2043ea8 GIT binary patch literal 3279 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 literal 0 HcmV?d00001 diff --git a/doxygen/inherit_graph_71.map b/doxygen/inherit_graph_71.map new file mode 100644 index 0000000000..822ff6b185 --- /dev/null +++ b/doxygen/inherit_graph_71.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_71.md5 b/doxygen/inherit_graph_71.md5 new file mode 100644 index 0000000000..71fbd0e17a --- /dev/null +++ b/doxygen/inherit_graph_71.md5 @@ -0,0 +1 @@ +e50a780dc260ab5d544c52036b807d69 \ No newline at end of file diff --git a/doxygen/inherit_graph_71.png b/doxygen/inherit_graph_71.png new file mode 100644 index 0000000000000000000000000000000000000000..344122662eaf0e8a8e0c44203477997e93461ff5 GIT binary patch literal 3978 zcmX|E2|UyP|6jgx>}!sZJ0y2(B=?njZibSxjS%KYW(kGn{5qE?az)u!l3TgWl(dy_qcZwZ5nLLm?c%nD_O24^pL8*{LM z&%hr&X5e7M+E|)Fe*bxubv_|MAUsA^X2vdr;??3fN0$k)SKZMXZsH@&iDmZTLG z2R|e#+?BUNqu~Nj^X!-rNMN~RiBcfk@gIo?tOAc-Nm)5wyvY8-Gb@EhQnW9wTb(zC zLZRg5<}&+#jrBKbIwbc=S#9hweT(&?xmQ~R;Ld8Um$aoDXHK3XY|=CWgf5pLY*rPJ-7v_Oe0 z`T6;W%Z*0+RUBhTE5_tx+Uj)cX>D!c;CD}ZAL>PG?`&*@iyOs@GnvdnjbOp}{Z%b- zeFATWpbB=nx}dS4fmcv4`M!F9Gy=g5gTcgay~;Xi>gg$-n3TkK@?_?N2corI<3lDf z69tH=rq~~Y@(KzHJ@-^RqzZ=W{b{1L%piBHhL%=vCg$kiXYtLciHV7vp|62KL8DVh z$iczpFb51qE!K&A9=DIDqb(IeeXD%(E>HaH`o1xM$Hc@$iZsXzhxgSlE-XkZD|7k# z`=_R-Cl(cnSzBA@l%Y{}h?Dzb8=781#G;>3wW_XS!}3g2mq%k*NM)a-0a0-^04p?!Y^d-!YH z-M5Xvl$OvZ^t9lDgDEc}7a1cX<<0Z7BCXSMa%|ULh!5RUp$wAbb?P~(c0aRIQ&WG} zy45ExSzoy#%a>;MWqG0|WVSbnofCrg^0MPN)jvD?(9FW(8vP6cAyGUjd-RmeuDn(3i+b+l4qRbO9U`--KdrM9kakaBx_`=3T` z{P@v#SJC;y;$q5;&4mbhsdj|)%@BWoHXa_HnT{LIjMir{?F{n_x$(~vtUg@7u5B*Z zHMO>$*42IBJgmwEg+ec5Fy$9#2FyxH=cRK$j6AX=Y%TGz!9-ah)pd32leuZ}UbyKN zSZVw(#UGoS%){MzU(nmOm~EwgZ2f@Y^7ro;9Bwu&CTgNj)j;zT3q!@bOW4-d77V0! z>OoPF4sK#UA0=~Hm`zMG7Jf`eN2ky*?qyk6+&1)TE=s1l zriNca0k%Pv%C}}NmfmW>kw_$+#eaA8LT9wwUcQvp(-S*7Is)L{*xsh*pSdWNi;6LD z7&u=_>KPvwAd|^^0PSk=2ZVnl3?6I>*^0#q)#35@KZUKVt}>^B>w1TWdDPU@2u!Nb z_LzxX+Y@IhuYBwy0=%Zw)gc!VnTQQ4uaHnmUDq$D zgoH#m9&h35dScOYJD!SF%aSli=a;wd>FqrRj{c30l!)~?gH-A#?_rWt#X2!U2!PM5 z+>y5mZ8bGDh4S~8yK%6mcIr+}aj`i1(xt(x!_mws^GlaR2H(6{j`+B+wr0PxI&CQ` zCT0~HiU5}ynbs=xCYl(p&3D(41Wh;;kx2Q);nD!4wFb3jt+6JvMVRB~Zl9)}UXjbi zizLfziQKnuZAa(ko;A-S0Ebcb_S{zk1D8IMkZX%4aY6$If=zsUe7}8#7dFNY3=>jP z*s)mbl8Rxv_rb1V@5q-gesmj+tu!_2(zngo@`TH~YqR0u;lhC;cNg!-AC;ChG{Cti z;Vm3X8Lh2aAvoN=(+O%}`B3>2UP(#GmATHFWmkk@=QvBG=H}+!w@24qZnr5w)bA%K zB&Wz7qb{it;4UsMQVI$j7cN`?1E6Lb9lfsC($F|{_ALC7MP_1ivqoZKqNAth+bIKm z{Xd<*eH-F-=@Mq9EkZkTfh+j;k0Io#d}~Z-XcpP|i8K=F5HKH0AP}T!hy0nTyZ-S_3yG?+n}v^WF<_b#--X3qKVS5^^~>ID^4(q?01- zK2NM~?O^U}KDK{oJs0y`rNTwY3WGVt+}T-J@dOry;N;?xF*i5=@{y9_H~TWGe{76& z9gl~b9L1?FEG?lL8X8cMk?K|`l$55Xrdbs_H!+a~8x&+sFEw&-_wX2`W(Zl?+Hy^| z=7br}%+98fNc@8|nrvofri`-kKW^^sd8w%!Xb%sY(Ak&f$vl$wS>igQpJ%eNxbq4M zEC>D(G36H5?s*qH9ibb$7yjcvpIf=$HxtzG$tOS!`$tFfJiFr`Rz7|V_wevQJ2{o_ z%WMQfxw+-Ky1KqhH3xqIvMi&hn05drm8jWO|FuY{TxWB4S6i3!#_-y1dnC9fQm>AuTjt-#m$C5F;A|h$v>b>zV!}i|| z{Oei+h{EOI;K0htx>V_da{jNYVl8s?c&S}r$j=4h@CA2wC_g{HwvJAHT&9S6a&uJq z5aC;rG3gI4Xf#?e%?AK&g<0+NND7|j=Er=+A*h9>6}7QUXWl!ITD2*pj;w>y$uK;|%abmR@4 z@5(f|xwDlaCoeA#5F8Xs%Nu??^ggIa$gn6W=`USfT}L#!Z^zZmjRR7g^2p?K6_U-4 zB_JTc_Ws%9>z%t2|JKwvxwzcP6w_+J1K(t2XZQU!TGbZyT@VzLLn0-C+)z6ByOh`>2+u=124RP|Kn(t4a(N`OH+MgqiKA6*Ic_6 zKOFAp?w;P%bnZ_mb8>Rp1J3j7>EOr+pRuvATT6&Y=uBGzh?UYhIwJD+#k@_-OqKbL zjY*4a37CUk&zL?CQVBRhxPT1SRPm8lF%>g)RQp-*3uF-pS87h9U#XP zQE*yQQ*d)}c%4~c7j|xSzFV@c;|Fw(@EHc|Q4|E%vB!4&|GNzbZ4xLA27^i9ETk5Aws}Vr>V>(i0`Fv&;I(2(EM2b7y=$L4A|m21 z6&PfLrZxYeaoEt*+grlZ)03B%_x9bp0_QX}xtp2-SRSzI|Jf)a7vA;)0)>NNn3mvFa&o`` zc__&+%G>+uOrW=?Pn}AbwLWNyIQ$hAGS$S1CJTTI`*&aK1Y)0XZ^y-ybRGf(1N^h1 zqeEOTdab`X_`eSe3v50s>L|+7$7|PC$3ZyMJC#PpF zzalUNk#gNkS@1MKaza8vU`R+mNS#hzUbDfs*tx}fKnQShbS!JO1G#3=o*&ZjYq_Ra z=q9ABrA1IOcH@};aLMfF#uWifAbg9(#>VCjk@#&K58~H~=EpV9u2>OJ@w=G0JDmJE z4_6RWEgY8OGir8(v)1TkcUrGR&- zGT;iojgkK-TJYGhq>q@AZezC?GG)RB=QtJq_tm3qLB+!_(62X4r%UQ2tU#l!U6m%B uh$fhDC$NB8$iThC17ZKayng-m={Na-*t>iw+96o3Ay(%0X3tD6C;lH(#%DYL literal 0 HcmV?d00001 diff --git a/doxygen/inherit_graph_72.map b/doxygen/inherit_graph_72.map new file mode 100644 index 0000000000..5c0d850464 --- /dev/null +++ b/doxygen/inherit_graph_72.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_72.md5 b/doxygen/inherit_graph_72.md5 new file mode 100644 index 0000000000..a50a2a4c6d --- /dev/null +++ b/doxygen/inherit_graph_72.md5 @@ -0,0 +1 @@ +6653674b7aea32eb26343d4b5395921a \ No newline at end of file diff --git a/doxygen/inherit_graph_72.png b/doxygen/inherit_graph_72.png new file mode 100644 index 0000000000000000000000000000000000000000..56f2eedab35e661232f9efc650098fedd43b3fff GIT binary patch literal 3805 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 + + diff --git a/doxygen/inherit_graph_73.md5 b/doxygen/inherit_graph_73.md5 new file mode 100644 index 0000000000..08034f8224 --- /dev/null +++ b/doxygen/inherit_graph_73.md5 @@ -0,0 +1 @@ +c48c0ca7d436250a88bce99d661bd944 \ No newline at end of file diff --git a/doxygen/inherit_graph_73.png b/doxygen/inherit_graph_73.png new file mode 100644 index 0000000000000000000000000000000000000000..4704fd1957cfacc0c3bd9e8a644676ff5d4bd4cc GIT binary patch literal 3269 zcmV;$3_A0PP)?4gE$&6s6t%y_7#%h5`wQ4Ob zi-RMW7K&p+wY1dG1S&11{YQe?>YA@_npAK@7*^5gTY`h7z_r3!FZAosCP)EQa6D>@bW?g!(f;aBD#6z z%$b&%eOBs90)gOVfk1F+{=#A~%*H+d|C`yNQSj5`QmK%cnTfElFvQ2l z8XAW<@^%g2CE4g-8R~IA_35JG-bovE=%a<=BGBOgocI`rDW+rdBVkqyWfJqAe z@ZrPw?z`_05fK4@e}6llGus^<9S9B% zhL4XA-hcmn*xA`3E-sE|@4fflgQcY68Uc8!;tp}dzQv9Ymx4;?y0#?s#2P8JpxR9joi^1NqJswya_#Z)adL5Sp^FzU z8nkUpya53Ll$)DtR4o4f{&eo#IbLqs@||hZm>gVPU8$g;fRi^jHxmHr?d{d-x2LCv ztgWr7va*uv>+9D z3~bo2!JzHg#%m~+0|yQuH8mB1fq}fcCB~pHhm@2QeEaRU5R1iFy?Qk|J3Dz})%{vp zTH@!Qf5z3TSK;pNj?J4lW7VovXlQ7FrKRO#U#CUSY&WgbjEsy>Wo0FGbac@8_&607 z7ShDT1Q8LHmzPs}dpl2G-^Oy9mX;POEiKj9REb0)I)DB=4Gs=cMMVX5cX!X)w!U~P zD=X=rfBrEl79yh7)>bMmF6K6j+VWMmIjy5B2cmyBon>WZ)Ya8RV`F1fSXfAtlao6A zPSe!XMCIk>G%zrrVN+k;iwRwuR*eN{Y;5dafk1HSzkD8EEEYp9m$Tby44ueiG7!;O_3e&|xs1K%U5g-?VAdLWjV3LSai9#*%^+JcGyB z*cb!?fzFSy4-j8}{dFWJCYm|g*~1Eci7_=bh2MYw9Z^wH$jHdhklWhYf{3`!?%lg_ z@ZdqNZH{~QM~@ywe0)4gN=i&_TOG3({5Rix18;9{*xA`(>(;HPs;c5-VzC&6LPF5k*l5&z=#zDJ zcH+Q+18{P3g0r(TA|oStPg=!dF;1K~0f|I{<;$1j#~**><$LGO9V90w!_(6fQmGWK zuCCa-SK~JIf)EoEgQuQ)3U9voCSG{q1)My25(FMO);6R<7ojf~ArIMsL3hkp3s2i|xO z4-YCWEv4b%VMmg6!<afTU$#2xTm)wk%-dL(s<({BO?g_MMXu? z;NYNf6QRa@7W_=Qy1FPdG?W0)i4!MgJziJAn{`R!?d^?=7cb)2v18b@X%k{%VsQKR zZJv%$DAZ`TwEX*XfIt286a4)AU~g{^fk1$Sgal4DjgylT_kG#2WdMND(NTl3>9ak3 z{$%y))f(gU$sRp=1ORY#b>%jBmX?+n7#Ki9LxbM=&?jqdZibbW6}-H>IA1FJ5MxHuFS7xR{G|0Pr^74q}*5g8c?p-_mPo*tY&eHwDP z++;q?zJ?DC4MkpF9?Htf5F8wgpr9a(jEr#d=^~j%p-{lh%?%wL9eDfgxADm*pP;R+ z4O3H7$jZtx$)?GWZ7(k`s8lMgufXY(d3t)n!omXG-QB#69}yumG}PdH=#sg+yF;l| zqN%Bg^Y!4t0|4MXfKxv*?Ck7}4?p}6fBp3rii(Qh;NXD$`}adA6yoELKSo1C!`vp) zMBKf57fDG;aC39Rkt0VS6beyYU5(=6V#s7NqmF$Wi&+c4pr8Q9j~~Z_2M;hgISG|Y zh0)PbOifL3I;T&cMp01_1_uX`nVE@}mKKDEhjV(4j*hUgvB9ldw~&>UWsN7#|FL~mnYnWI>{*PCj^dYJenEYGJwE;PQ;q-pX2X^%E-tdA0HoDwrm-RL?XI; z`7$RLiA0o~oJ?D`Y$1DldlHMqbp85uPJZgtDROppCL0?Ydhx{d|$ z7@DiLwl>s#AXThug(iMZjU@#aA27|$1Fc=I5!;JhNN3?b0eeTL900000NkvXXu0mjf DegJ2z literal 0 HcmV?d00001 diff --git a/doxygen/inherit_graph_74.map b/doxygen/inherit_graph_74.map new file mode 100644 index 0000000000..c1ecf6b9b2 --- /dev/null +++ b/doxygen/inherit_graph_74.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_74.md5 b/doxygen/inherit_graph_74.md5 new file mode 100644 index 0000000000..106e94a095 --- /dev/null +++ b/doxygen/inherit_graph_74.md5 @@ -0,0 +1 @@ +9a53181cf9ba5a01cb246cb748282769 \ No newline at end of file diff --git a/doxygen/inherit_graph_74.png b/doxygen/inherit_graph_74.png new file mode 100644 index 0000000000000000000000000000000000000000..d7164bfb91edbe28148d7665da0a52045f50e405 GIT binary patch literal 3337 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 literal 0 HcmV?d00001 diff --git a/doxygen/inherit_graph_75.map b/doxygen/inherit_graph_75.map new file mode 100644 index 0000000000..8b7e2671aa --- /dev/null +++ b/doxygen/inherit_graph_75.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_75.md5 b/doxygen/inherit_graph_75.md5 new file mode 100644 index 0000000000..eba006ef02 --- /dev/null +++ b/doxygen/inherit_graph_75.md5 @@ -0,0 +1 @@ +26b9ba8c10c6355c3d5507930ed80703 \ No newline at end of file diff --git a/doxygen/inherit_graph_75.png b/doxygen/inherit_graph_75.png new file mode 100644 index 0000000000000000000000000000000000000000..26117f82ba163e16fcee049353746bb8abfbaffd GIT binary patch literal 3301 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 + + diff --git a/doxygen/inherit_graph_76.md5 b/doxygen/inherit_graph_76.md5 new file mode 100644 index 0000000000..5b9774446f --- /dev/null +++ b/doxygen/inherit_graph_76.md5 @@ -0,0 +1 @@ +888ab5bc572d8787bffb439d48dc335e \ No newline at end of file diff --git a/doxygen/inherit_graph_76.png b/doxygen/inherit_graph_76.png new file mode 100644 index 0000000000000000000000000000000000000000..fa03d67df1c98f3c68d9d877afd875c37f6e55e3 GIT binary patch literal 3526 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 literal 0 HcmV?d00001 diff --git a/doxygen/inherit_graph_77.map b/doxygen/inherit_graph_77.map new file mode 100644 index 0000000000..e3b5007e43 --- /dev/null +++ b/doxygen/inherit_graph_77.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_77.md5 b/doxygen/inherit_graph_77.md5 new file mode 100644 index 0000000000..a41966b70a --- /dev/null +++ b/doxygen/inherit_graph_77.md5 @@ -0,0 +1 @@ +345328b923481380e19c2d9d77a04855 \ No newline at end of file diff --git a/doxygen/inherit_graph_77.png b/doxygen/inherit_graph_77.png new file mode 100644 index 0000000000000000000000000000000000000000..3549449157381b55531e1bb45ad8df3f4da798ec GIT binary patch literal 2623 zcmV-F3c&S=P)PI*^2Il#HLIR%FZ=*@!=q!?Km* zNW)-8V;N=&V;FxpG%Paldxw&78mGoM))qxW8#clyr8b*%!1eyo^t_&Sw{5qB>b*ZR z&&=M3>$- zasO}}_iyKf#OOwt7Ecq$jvedRP#E2U?CfkLB_$bbv+Cqn7(ECk9)`s*@h~i=L&Q^2 zQ2~iWf~u;jj&R>DD3wagojVsYne1&J`g+{EcMlB>4ISaW%{+MU09&?f zK~ho@93371b~xRZ4iQgR=kDFR2nh+nym|9lZ4(m{gRrnL%$_~F10%DH`ucjznl;O4 zyGSI$ojZ5hecb;`@qGRI75)47H_Ij`CkIofPVJzGOrz83aPi_r^zGXhixw>swDs!M z3krpTFYnl~19oG!$#rtijv2Zw2jgxg6=~ z=};&Xm^*ha?%utNl#~=KUc8v^)4ZISnF*OphB{P-~{D=T@My1F{t zyLS&ifBr;xcsLv#9U+xUp-?Cwm&;As7@PObojb8<(gsC#vsf&ql`B{B<+{2$a&T~< zbLY;P^i4#xcI{e({SgYio<~IMO>*wR+BPfp?IT9mBjx<;ni^W*IdNn3ZnuKZ7rXese5aHqB z0(*adfBv(LjSYN!d{9tOVA6MI^XI$^3JTEB(15tOI6)tdbx z;Q90CIC0_x5)u;d;>8PyL?VM@Xti1l95~RzSv1Di^m79M-@ktsv>Qq~P1!W{X~N## z9vsJE>(;IOy=tQA%NGICSU`0O0rU-#B>iph>%ylG>+FpW^1to3OUFhOe(LVq#+O>eVZOV3bNF zUw-uH5mYJ_LPA1J`Zk8Et1Ir`zt5MOZwA`i+oPhQ!YrHSczSwb+_-Vb%F04eP!J>% z2?7EFke8PSdwY99-=RZ?V%@rR$jr=yN~MCcvoqv!Id<*Z)#4Z}(VF{U4s8~XwY4=) zpFWL!`}V=x+Z%3fZh~*4F;yd5iVS~fGbz7z{SM{{{H?LF=7PXy?e($Q4Qhg>51LDccZAN2g((Iq^qQ)M9|+3va&L&t*xbuj0|dMXyDsF zefmTX9z4)Xc#YW@ns*b$#l@sjsp#9cZwA}jLVkWe6%-Wc)%*GR(W6I?%<|Pz!rX4+ z=}el$!!VELU(VLhl6bmC=Edj~47~-ng>Jb$k(-yfQg4;G2LD~wzjt5 zI8N_s&2m9osjjXD$8mV~?p=qE)fMUX;sF|WsfkE%nY*Ihk%WYVVCT-A&}cM&JCt^% zM~KH5;o;%fxN)PPPN`JF-Q68Tjc=bCjRsPw6vKuMgQKG()~{cWnwlB_jawcZ$KlA4 zBbYE@0_^PU5EvN9i@?Lf13=?SbJMniAvSN`47FN~i4!LxARqw8jvX_&h11>W(c)RL zVg=5gJu5gbbL!M7EMLAH9LM4N_wSfKeLB3nyr5RAk(HH&moHyp+qP{2KWS-cxN_wR zK79CqfddEfB6;)X4FI61s0c)agoFfxam<=E3n?inC@CpHbaXUQQ&ZvOaHOZF zciH2*X44%O3IC*b@7@GJaCv)s6A{tRpFhdb(UDS9Q;CS^&6_tQ5{am|xR{8Dl9Q8Z z%$P9(e=3!V1`i%gL`0R9l>|VrqMVwVN**2_L`0<1=?DN76&0Bs_p@iu$ji%%00@qC zbTxYXB4P8KCqF+QK;vH0k|j%^R4M^9K6Pfym;o0T7XXb^&`gJs2C#&orWHK2h zOqhVrpFiWwnKMXCOyt`}jT(iC6DJ}sFVCQ@sl24MMYu~&z?Qw6L3T9-Mbf~M~}wy=g;x*;X|xiwW`|-2k0T<2@4C; zTj%+6?L{V&;rjLKh=_(8+ ziHBh^Ogs#WVd7y}3=of!wCi_+2=B%|Un_1BLK27|$1 hFc=I5gTZKl{{pF;zwl{r0@?ro002ovPDHLkV1kf?7F7TM literal 0 HcmV?d00001 diff --git a/doxygen/inherit_graph_78.map b/doxygen/inherit_graph_78.map new file mode 100644 index 0000000000..be911ffbc0 --- /dev/null +++ b/doxygen/inherit_graph_78.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_78.md5 b/doxygen/inherit_graph_78.md5 new file mode 100644 index 0000000000..8076c7f153 --- /dev/null +++ b/doxygen/inherit_graph_78.md5 @@ -0,0 +1 @@ +852887a7563faa1473bf4086460dc2ef \ No newline at end of file diff --git a/doxygen/inherit_graph_78.png b/doxygen/inherit_graph_78.png new file mode 100644 index 0000000000000000000000000000000000000000..adc2a955bfb926ce7d36c38b4ab4256fbbeef34e GIT binary patch literal 2193 zcmV;C2yXX@P)f`#$Ud6bgkxp-?Ck3S~3H(szhNA{Q2m_1Aicp-?Oho6Y`Q zR8;ier9Nx@lUOX)Un~~u?_Vd2Liu%Qwb~~D{9I%?jE;^XJUkp@V`G*GZ*eTC|97v=pNK`8V0LyE4Gj&L zo13#l_%$PyN>Ni&V{qJ(`t@TQ)3V-dbbaQ);M<`;8Iec?4u`YeG5~BWEi19n^_hcB z*#!Rn{$`0YF)@Mi@^aYQ+aoqMc3rhtiuKedm&@Vc-~fR@06RN7i{&xPa%f>;0R;sG z5C{a2N~QSl;e*b&NF+jKWhJt*vT*F!F}!&30%c`oh>MG3&e69O3I*ch;}IDd37JfW z@$qq;cu$``g-j-cKp;R`S{g=1MhwQ%xAh|XJ==~<#ISVIsJ5P z^tFgYB0PTl7&4g*QBhHlN~IVc9!7I>GlW7Rjvqgcva+&ec`7O@aQ^&xL`O%XprAl! zDJK$%P*qih?Cfj^1Og-_C858+-=tdW>m!8V?%lhHjg7^rQ>Rc|T&$yGExGjBxpOCS za&qA8> zFgrWDEY?bPYilb81_n&l4*>1$?MO>Y!=62RkeZr`ef##IqoV^&O-+c1i1_K+=xb4_ zRFFs{aCCG;a&j`-+S+jF&>>`GWFRIc22oK_NK8ybQ&ST&=f;g2NKa2kcz8Gx5)x2T zQ=^kdrBWd=F%folc1TW6#_;ek1OkCcwbs`sl}eG9mxt)+XhcOtAuB5jSFT(!OD=s* zoH&8Dwl*|1HNnZr31`oqg@=a+WHK4LySoj}TQg#@IQHVji^Nn02L}n8%_eW&ykUH0 zWn}~a`S$G_A%qYvmrE{RzN|B^udk1^w6v^fx3{;GZQHhysi`Sud~$M zYQ0q7(9jTJv)MYetgEXd*4EZUqtUE6moc0C@^_0A%xtybBBn< z;(zq-`8DqedU|?bXJ-dLKR?D76cn`VJRXmyW4pPz!OhKWMVrgzLL!mC-`^hx4<1Bl zXedseJgGB3FffogwzahdkHXkd~IF6NANK;oZA;aCdhH0C;&*z&hmpv( z6bc1SpFaJ=C-7=m^K!_+!2#3L)0m!~W_*kPpru$_udd(n^78Qd^=n8Z6123mARr(B z3kwSdb7(XgI66A6QoU*V!@|N)Sy_p`zCIj1dK9;A-NNqOyK&*d1=Q8mL95mNbnKO2 zu~eUTEL^>M6KYtDz8yoQXd?Y0$p|i77=LRY+E@tfJ=4L3BN*pM zoo`C5m*#SJcSnAHKI6;H&4stOH}k|XS1tgMNF>O}$N-PWLuY3v>g(%~kdT1w+qWCd zwHnsk1U5D{C@CpHettfDeSP8K;eq-2d86}ww0Y%lI4CSEgo}#{f`fw*8XAi9^mOLY z3jBM6`S|#N&*$Ut;ls$y&4sV8uhH1%((mQvg_}2T;^W7UNJ&XCYwXovWo3mYPoAK< zx*D#ot_TbagtN0VK7INGD=RCb^G&Js((5TLEk#L53B0_#;OXg!>gsBgmX?CeHhwFu zCKmwYYQ(E^Ge9Sn<|Au!E7QI;c~g;;lqbyVq$`*R4OtuGP0`JYPFht{rc5p{cGh%vGuj+ z*J^BRj5Ibj>cs2n>LNWoJ + + diff --git a/doxygen/inherit_graph_79.md5 b/doxygen/inherit_graph_79.md5 new file mode 100644 index 0000000000..cc9f2124bf --- /dev/null +++ b/doxygen/inherit_graph_79.md5 @@ -0,0 +1 @@ +07e3934aab74b22691b70a5161beda43 \ No newline at end of file diff --git a/doxygen/inherit_graph_79.png b/doxygen/inherit_graph_79.png new file mode 100644 index 0000000000000000000000000000000000000000..0a7583848084749224c2bfc1fce458323b5d6e5e GIT binary patch literal 2740 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 V^62MQd=AD?h`x@Ab``=g>VFQ4HrxOJ literal 0 HcmV?d00001 diff --git a/doxygen/inherit_graph_8.map b/doxygen/inherit_graph_8.map new file mode 100644 index 0000000000..349ca6a86c --- /dev/null +++ b/doxygen/inherit_graph_8.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_8.md5 b/doxygen/inherit_graph_8.md5 new file mode 100644 index 0000000000..6fe03a5c86 --- /dev/null +++ b/doxygen/inherit_graph_8.md5 @@ -0,0 +1 @@ +8918162f5a3836aa5579ebb796bdadc5 \ No newline at end of file diff --git a/doxygen/inherit_graph_8.png b/doxygen/inherit_graph_8.png new file mode 100644 index 0000000000000000000000000000000000000000..a4930cabacdf44b1ab175c19117af6f6b46d957d GIT binary patch literal 1590 zcmV-62Fdw}P)|Hq}QAO^J$i&SuZ&`MBxQHWr}4;560Q7|JX zD?7*8FdPyULQoP(G{T@SwG;x8dPwZWQJ)$HKD6elRbVBW4axO_ZHvUV=JkB&>Cm=( zn_FhPf1h^U=Q`K@Kj(jT-}lZr0~ibjgTY`dM7Y=nK@hSzj@vXJVi?JVi2l8N`SS43 zZHr=)IF8%Iaon}vCyS9n$^rcIb3>frKe%}DV#?JpQisW8`el2@Z`Q$>XPDt>1~WX( zNQvR2qodGjwFm?PsVKi-H2jIA#PCokgzoNcgu~&4YnaVu*zNXt)$lj+#}4U&AYk3P zb@MGFDI7U+1Q#w`m~R;XrubPl-z*ffKY#v=j*bp2S+WFrz5bUuPoF+TC={BshRtS! zLZJZ9^N`EssgepHN#F2DBm%3|3ZCa-Hk&apFc7s}5Cq)3c@rm2oWRbVJ8|#cJ+!yC zqoSfh%889*hjc*@aO>7BG&VMZ=Xsb+CV0Kx8EXK5&dyF4jYjBnI#{h%X}BL58Nrq< zTi|xPrQDX578s32L?V%29`D_|cd>WxUZ_+m*lac^mC6Lp+;^5OTZX2lCa6>@h@y!5 z_wR#<60SEDNin>prUtF8tuPo2SigQf3j(B*zI;HXT^#Y z*tTsO^m;u4fdG1YdttFyU^bf}lgXqSPo6wMeSJMvu3QO=#e&tVSL6Bf=jiF_L0MT@ z!sl=I?%jC&_%V8VdZ1J)QCV3DwOWni$B*OHt5*rvoe`oa>Z_}(X{PvmKFY|*pl8pX zNp0=z?F4{6eE2{_L`6kKR99CQwcndJZ|K2;2b0F7rKM!E*`&CrsE8UG8l-r5cv$LV zIt`&CQ)O{uKoU1=8o`%a;QH{C+=tKHroYUc7jLa5#+m`ueDP z9LM41%a_Q@%L4#hx^xNI+1c2*aU<&L>Y{RWIvoZF2hrKti9jF#gTVlv=dpP4;wd%H zmS8Z5j*bqrwY9tii*F524X$pw()zdGls?JRT?%3IM?E z+qcou(t@t8E}TAn8s+8X`1I*hTwhA161BCpa5|lExm?K3&W0ceXl!guNIL)=Ja`aC zj~+#FaWVS(`rvRlP*qixbhCjZ7@nD#i7QvG;OyD6Si5#D)M_=pefu`;e$y@5lBq!^ zli~XH>*(t0LQYN&N=izgQmHUBGz6JUhM}P$?Ax~wt*xz4tJOGk=nyt+*Z`x^IAy>2 z`T00?>J(nTevR7N+Jv+NKvPo_`uh6N(9kgLw3c*cyJ-8t*w`4k-EMmK?j3#o`js3G z2Zcf*A|i6RT;%ilqVlI(w7K1Gdi(aR6vx(xL?YyHIB0BaY(^S>;PraR<#JIl7?j!u z1_sFKbVlU`gF$jQ9Q5VOmsy{SSUesN_4oJBxz22uY|$1sDT<<~=Q!>fdmg^9F_}yt zqH>$f7WD$eAA4(+ks6rcX$CVq&0vP78O-oBgBhM?FvHV~NpEmZ_Fgk%VH0OK5&etr o|5#uwaQ^p_!C){L48~u;e{WX`=cW#J8UO$Q07*qoM6N<$f^;qpC;$Ke literal 0 HcmV?d00001 diff --git a/doxygen/inherit_graph_80.map b/doxygen/inherit_graph_80.map new file mode 100644 index 0000000000..6686adcca4 --- /dev/null +++ b/doxygen/inherit_graph_80.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/inherit_graph_80.md5 b/doxygen/inherit_graph_80.md5 new file mode 100644 index 0000000000..8344cdf1e0 --- /dev/null +++ b/doxygen/inherit_graph_80.md5 @@ -0,0 +1 @@ +d9e41c66f53910252a6d7b8ca902d2f6 \ No newline at end of file diff --git a/doxygen/inherit_graph_80.png b/doxygen/inherit_graph_80.png new file mode 100644 index 0000000000000000000000000000000000000000..75d12c2d15903f0c59f2c4d22fc5f1749cba9d64 GIT binary patch literal 4046 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 literal 0 HcmV?d00001 diff --git a/doxygen/inherit_graph_81.map b/doxygen/inherit_graph_81.map new file mode 100644 index 0000000000..94a3b599c0 --- /dev/null +++ b/doxygen/inherit_graph_81.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_81.md5 b/doxygen/inherit_graph_81.md5 new file mode 100644 index 0000000000..ff3cfa55d5 --- /dev/null +++ b/doxygen/inherit_graph_81.md5 @@ -0,0 +1 @@ +62da8b2e54224b169c5482b08c577c1c \ No newline at end of file diff --git a/doxygen/inherit_graph_81.png b/doxygen/inherit_graph_81.png new file mode 100644 index 0000000000000000000000000000000000000000..17d0deb78e26f95ab2644f98d8d0a7a1bf5b87cd GIT binary patch literal 2964 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 + + diff --git a/doxygen/inherit_graph_82.md5 b/doxygen/inherit_graph_82.md5 new file mode 100644 index 0000000000..11c83f9377 --- /dev/null +++ b/doxygen/inherit_graph_82.md5 @@ -0,0 +1 @@ +5ed58f496851ccf04f3f24ef75668e03 \ No newline at end of file diff --git a/doxygen/inherit_graph_82.png b/doxygen/inherit_graph_82.png new file mode 100644 index 0000000000000000000000000000000000000000..1317033b7b41b1dd094c2eff3007ef344d8c8c89 GIT binary patch literal 3422 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 O3DUW(kNT)#8}&bw-JMAQ literal 0 HcmV?d00001 diff --git a/doxygen/inherit_graph_83.map b/doxygen/inherit_graph_83.map new file mode 100644 index 0000000000..eb9e5a8b9a --- /dev/null +++ b/doxygen/inherit_graph_83.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_83.md5 b/doxygen/inherit_graph_83.md5 new file mode 100644 index 0000000000..e139964b09 --- /dev/null +++ b/doxygen/inherit_graph_83.md5 @@ -0,0 +1 @@ +6fff2bc84990098b730138ead65ce9e0 \ No newline at end of file diff --git a/doxygen/inherit_graph_83.png b/doxygen/inherit_graph_83.png new file mode 100644 index 0000000000000000000000000000000000000000..5b7555c2c9e61112ce980841c030ff85eb68d826 GIT binary patch literal 3020 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 + + diff --git a/doxygen/inherit_graph_84.md5 b/doxygen/inherit_graph_84.md5 new file mode 100644 index 0000000000..5ba0555cf1 --- /dev/null +++ b/doxygen/inherit_graph_84.md5 @@ -0,0 +1 @@ +cb8347940b7daeb1cc7b6532080f0571 \ No newline at end of file diff --git a/doxygen/inherit_graph_84.png b/doxygen/inherit_graph_84.png new file mode 100644 index 0000000000000000000000000000000000000000..1814b6a38b39eb343563b5ebd602f1952d8bc2da GIT binary patch literal 2567 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 Xo`^@P8(aha>_Fxwe;QXA-U$B>s + + + diff --git a/doxygen/inherit_graph_85.md5 b/doxygen/inherit_graph_85.md5 new file mode 100644 index 0000000000..406e59d523 --- /dev/null +++ b/doxygen/inherit_graph_85.md5 @@ -0,0 +1 @@ +61b2a5b479848a27b9211c18d4896e89 \ No newline at end of file diff --git a/doxygen/inherit_graph_85.png b/doxygen/inherit_graph_85.png new file mode 100644 index 0000000000000000000000000000000000000000..e89358d967c8d9e226ab1ab050c04adad2ac92fb GIT binary patch literal 5586 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 literal 0 HcmV?d00001 diff --git a/doxygen/inherit_graph_86.map b/doxygen/inherit_graph_86.map new file mode 100644 index 0000000000..ebae4c67f8 --- /dev/null +++ b/doxygen/inherit_graph_86.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_86.md5 b/doxygen/inherit_graph_86.md5 new file mode 100644 index 0000000000..90ccadb898 --- /dev/null +++ b/doxygen/inherit_graph_86.md5 @@ -0,0 +1 @@ +fc455e8fd206aa656d2690b45d64bf56 \ No newline at end of file diff --git a/doxygen/inherit_graph_86.png b/doxygen/inherit_graph_86.png new file mode 100644 index 0000000000000000000000000000000000000000..81f423e6d5ae495ba88b4678e88212875af77396 GIT binary patch literal 3141 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 + + diff --git a/doxygen/inherit_graph_87.md5 b/doxygen/inherit_graph_87.md5 new file mode 100644 index 0000000000..85f3bf8375 --- /dev/null +++ b/doxygen/inherit_graph_87.md5 @@ -0,0 +1 @@ +94df3a698bb48f7e8e5dd0cd40904d9e \ No newline at end of file diff --git a/doxygen/inherit_graph_87.png b/doxygen/inherit_graph_87.png new file mode 100644 index 0000000000000000000000000000000000000000..8ae622ef211c558484e913a14d839dd5d0324609 GIT binary patch literal 3801 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 n{7{yI2u+FqHwyXM4k16X@2Ebjbdv^WRfxH + + diff --git a/doxygen/inherit_graph_88.md5 b/doxygen/inherit_graph_88.md5 new file mode 100644 index 0000000000..6d4cb8627a --- /dev/null +++ b/doxygen/inherit_graph_88.md5 @@ -0,0 +1 @@ +a5adaaa9e65217d72c2971e53a81b854 \ No newline at end of file diff --git a/doxygen/inherit_graph_88.png b/doxygen/inherit_graph_88.png new file mode 100644 index 0000000000000000000000000000000000000000..57e06513ba4443b42bd5d157a1a5f5ec2c0d5679 GIT binary patch literal 2592 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 literal 0 HcmV?d00001 diff --git a/doxygen/inherit_graph_89.map b/doxygen/inherit_graph_89.map new file mode 100644 index 0000000000..0a04c021da --- /dev/null +++ b/doxygen/inherit_graph_89.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_89.md5 b/doxygen/inherit_graph_89.md5 new file mode 100644 index 0000000000..5e9c5eefbe --- /dev/null +++ b/doxygen/inherit_graph_89.md5 @@ -0,0 +1 @@ +cb6a36dfc9496b4c4b1243978c2b4449 \ No newline at end of file diff --git a/doxygen/inherit_graph_89.png b/doxygen/inherit_graph_89.png new file mode 100644 index 0000000000000000000000000000000000000000..e5d49f4de34b114ac23c3b4740632ed79f9467af GIT binary patch literal 3283 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 literal 0 HcmV?d00001 diff --git a/doxygen/inherit_graph_9.map b/doxygen/inherit_graph_9.map new file mode 100644 index 0000000000..a3966637dd --- /dev/null +++ b/doxygen/inherit_graph_9.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_9.md5 b/doxygen/inherit_graph_9.md5 new file mode 100644 index 0000000000..c4c505abe4 --- /dev/null +++ b/doxygen/inherit_graph_9.md5 @@ -0,0 +1 @@ +91a2aaa6c2bfa410ce6e09fcc2c3b288 \ No newline at end of file diff --git a/doxygen/inherit_graph_9.png b/doxygen/inherit_graph_9.png new file mode 100644 index 0000000000000000000000000000000000000000..80f193c7fc24a353bbecaca60819bf3e24e772e6 GIT binary patch literal 2415 zcmV-#36S=QP)zRP7eW|Dzdpv5~aUG@}gE5R?%sESkYALbD{TtW?Sw zFC&^mNkv#`&^@A{51Cm(CcU0CGo=gEBDJ4u+|$Z#%&RZL?YPR+mE%30cme<$JMJ> zk)54Ar1@&K8XAqpq?!hsJ3bBd_4N>mM5w8$flMZYhldBGQmNkD2M-<~J3AXiMMe1b z?c0#o>q~liIEXkNbp85u+PZZs=cBJJm&>W3pn$WbQYqcOeVbBKQzHYinMr$A<%FWHCh=>SUzkWTPI(3S=y1IynsG*^OR;^k^<>lqv*h`l#QA9)p z{rdHbH{QE<@6whnTWIRkspRA1Lk}N5G?c0m9AapA%Rii(Q*SKn*iBzJLV3 zVes-Q68^b#+jwRNR=pc11-68XFsRd`P8ISXx>l zHZ~R?KYqlzb?c1QkeZr`q@*NBBoahMMxwB=kQ-xfZ;v%=)?m}7O=xXxMR|ES6bc36 z;^JU#ZqE65_UsvU?b-zg2L~t=3b?ts;l+y=C@Cp{udgp}Zkn2!;Opy)g$oxVAt3?N zrcHxfE(ZXFgoI$uoH+;z3PMUs3S=^wQL&gZcYGSOS}pSP^AQjbfcW@$1OxL6eT4ku(h>Ccz8G#ELea82M*x%>(@rF zHzWpoC(vj#WM*bYRaI47TUJ(<&OeujhX*AlChE+4|NcEadGf@dy=2J}N>5McY!43) z+P{B4XV=%)b88Hwp}D!4EG#TYtyXjWEiElHdGchct*zzSf`Wo*?b@|8fBt+rd-kl3 zUWGzI0BGB`ZB$lPW^{g@J$pver%$IJKYnm+-@bk0etUU&(UmJ#INO+fnlg8M8oqq_ zLIB9l&W=u>K27=g`4ku!NDCG$;I!xE<&j7vqVDc)YHVyY`cA;No-t^(S}H0kqJV$^ z0zjuvpB~hFBExqAgRe~(%bPcEU}LIT^J1aCLR% ze%sjC003HATA(;HqlqpmC)$HNn0l8cbkw}DP%a&oqiWLY62{Aa{ zn0%Ttceb{+dSfjtEC2u-H*Uo4-Maw*etv$KHER~`-Ma^|Sd94icoY;AVA7;vUqS=Y z*4BocoE&6kWAv849;GK6U3_Aj$P>9aXPIPv5!qU({S(YuVb`B0fGIDwPUlWo2-5bc9SM!{Nh+d9_tkRN%pb2e7cPfR~pSVq#)Y zU0uyx*g~NY&CSh5$HJGZ;pC1_0|11Eh9V~?2OS+9005;@35`YrA0Hq1`S~F)FApgx zDM(34K~ho@fZuzW)vH$zX}!M4<#O!ZyBD6Go~W*_hEl0SWMrht3xJoQoDMyH{FrQP zY-rJ< za&T~y=0wSUxKYox}t)`}?Ci?mFCn=Rm?g+B1 ztc)}ojn4RiHg{^Zni?7!IJ>Wpo}M03DwR4L&i*v?Qdd_;Wo2d5*4D + + diff --git a/doxygen/inherit_graph_90.md5 b/doxygen/inherit_graph_90.md5 new file mode 100644 index 0000000000..5aa7eb0192 --- /dev/null +++ b/doxygen/inherit_graph_90.md5 @@ -0,0 +1 @@ +0768ac4da9f1fe1bbae6d585a1ea99ec \ No newline at end of file diff --git a/doxygen/inherit_graph_90.png b/doxygen/inherit_graph_90.png new file mode 100644 index 0000000000000000000000000000000000000000..98a2a35fd0772bb260454ce41a0bd4dc2778bde2 GIT binary patch literal 2958 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 literal 0 HcmV?d00001 diff --git a/doxygen/inherit_graph_91.map b/doxygen/inherit_graph_91.map new file mode 100644 index 0000000000..c8df132997 --- /dev/null +++ b/doxygen/inherit_graph_91.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_91.md5 b/doxygen/inherit_graph_91.md5 new file mode 100644 index 0000000000..980e74c491 --- /dev/null +++ b/doxygen/inherit_graph_91.md5 @@ -0,0 +1 @@ +2fc230d961d0744f3110eb0a02c9d7bf \ No newline at end of file diff --git a/doxygen/inherit_graph_91.png b/doxygen/inherit_graph_91.png new file mode 100644 index 0000000000000000000000000000000000000000..5f0fa7b6f5dbd2d5c6837ced114595b5f6b2ccd7 GIT binary patch literal 1139 zcmV-(1dRKMP)hY{dmakrnl8W#!htCI*yV;u845_dq{4!7BOL{wYiYL`<#oDr#)uOZ!?bbysq~7d_UjM z_r3Sl_p@h!h=_=Y$X9`Ro?uxvnPHfppCRTuAdyIpEf&k){<$B|ix`Ia$uP{H(UbMP z@cDcb0Dkk&1(^JV#bWtzLEjCF#R87w0`ihi(DJ`SG&u^0CP#q}G1={QL#x%o>-By_ z`~MstV)EVH9TpcCaesdw(Y{8b5i>J05$zcbzU+0;*w~1WnVKf>61YQ>`%VK;qC@wCB(P+fQ#RXPZ zSE1ACP*zq3tJNBycXDzPH8nLTFE5ALY!+N=FKG>zh?s0J7%(z20-a6=wOS3GPA6F3 z+S)>GZ7pJAV$jmkg6!;UIGs+cudnkp{&8hxC6bboP+ndRlgR{@WdQ)&+uJxhI}`M6 zYHC7UTpSDr19o;5b5>$zn*&<^szcr91aKMa=G9WFDNJosLRdG6~ro)3M!Q< zXdEhOX=(iH`1p9l#>OH!Ia!eNcsu|Ao6Uy%`+KyuwhDSM3;O6EAa=9D;_%|gu=*RnxVwiwG2t%rSZJ$D+0K+io=;+|JKH>i*d9T*D2>VXX z$jE?Fsl?#mAOOJU^I>3M;LUxn4L;ysL)>n6xbg&~r>7$`GZPyd8z?L+gjTDCMx(** z?k*GxMMTf?Cv1~tG8x9k#?as2kF2aLq^73g;o;%UeXk8Z0H~^}g2`lpMx)_>U4)BN zD#gUa1g58_p;Ri7pP!F}gajNO9zrUWM&yi;c<B%}sK-T!Q+y1|Jd8$;k;VFE8_hisLvsJw4^upZE28y|lEnB + + diff --git a/doxygen/inherit_graph_92.md5 b/doxygen/inherit_graph_92.md5 new file mode 100644 index 0000000000..1bb3343620 --- /dev/null +++ b/doxygen/inherit_graph_92.md5 @@ -0,0 +1 @@ +d88756fb47c7942bd4b7868f0e11dfe2 \ No newline at end of file diff --git a/doxygen/inherit_graph_92.png b/doxygen/inherit_graph_92.png new file mode 100644 index 0000000000000000000000000000000000000000..2bad0777a7b2b362376ab406d86cd76e972c395e GIT binary patch literal 2990 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 literal 0 HcmV?d00001 diff --git a/doxygen/inherit_graph_93.map b/doxygen/inherit_graph_93.map new file mode 100644 index 0000000000..9bfc751359 --- /dev/null +++ b/doxygen/inherit_graph_93.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_93.md5 b/doxygen/inherit_graph_93.md5 new file mode 100644 index 0000000000..6bb8a63976 --- /dev/null +++ b/doxygen/inherit_graph_93.md5 @@ -0,0 +1 @@ +68470a99abca6eb73bc6ca9cc811f059 \ No newline at end of file diff --git a/doxygen/inherit_graph_93.png b/doxygen/inherit_graph_93.png new file mode 100644 index 0000000000000000000000000000000000000000..2f8bc286f06800a7b1ce17419451070bd312660e GIT binary patch literal 2169 zcmV-<2!{8GP)gg^3EKagx_eP&r=Yt2wIC0!+z2$P6g!%b%5a=w4~de7wwUvBF2eLw!X z=bYF3yq@=U&-=d4>+XF478Vv378Vv3mfsC$szV}?tmAMvyOu%>%ij$VRb^&oc1-pe zOdZ7GaCUJxoO{1d7R$egBLM!H?3h+y6WqLcQ|D?}{yj*gQmuZy->ie>{|vUkSab?o zU@SUCCk58q+Y5m}fbZYG>mohNEM#YA!`IgrVzGFsrRb)>hKGmo02g{c)U$lG+ zWl^@s(a}+)rKLe65R+5fTytXJ==GgoJ3sU%q?^u~-Zv zBO{zXeHso94rp(0M|E{IGiI{Q6uXU}H+9D;*`!Q=6;bLURT<#GsxLT3HL z!opx|Y>ddrNPPYJ6(W&n)_gi4JUl!oA|it3N_TfR>FMcFeSJOS%g@gz0QBwKHzFc( zbabRsr%q{H_vzCodj9Pi_I8AL?X+uKWqhK8h2 zD44iPr6MCEBWi7JB_g7Y8#mJZ`}b*hc$m!0%;@69ixeInPDDih{{EDhm`FrKuV23= zQ&UqK92{hF4Gav-S@&dJN~MzY^z=01rKP20U|>Khm5PXnoSmI1J3Cw3(lW^9auSQh zzZ^5c$&)8ZDwS&Z9336${Q2{Y-OZ*V zsR9E75gi?ks;Vj!78b(C#|LZHteH^*hr>Z^Y%HT;f{DWS@bExo=gocLBn9JVY9$U6-!HX9!uy^lX z2m}JSxw)aPt`25qW&i-8P>AN{X5{7N!NbD?0I+Z0J|rY0Kp+q>H$ZJ|EgnC93`0Xh zI6FH-DwU$4p@F$+X45@YmyL}LQd3hI-_@&E!R2ycV`Bqg{O0KG?PcPhKYvDFUmq@9 zxBy>YU+{Q5C=`lW*Yi(h!3Ab$Xo#Gg9HgeEV(Zqe*sx&(a~k^p=gu7v z5xl*(lbAwDKgT1{y4jecDJ3Bk@`Fz;f*T^gUZXxskgUx+Srbc4yvxMp4JG@rdyk?;o)I=`}Qrpd-sk;Mnpwa=O6BF{8V8w$GE + + diff --git a/doxygen/inherit_graph_94.md5 b/doxygen/inherit_graph_94.md5 new file mode 100644 index 0000000000..4e77cf4b89 --- /dev/null +++ b/doxygen/inherit_graph_94.md5 @@ -0,0 +1 @@ +8e48c99624f8c61964b5065e1bdefda9 \ No newline at end of file diff --git a/doxygen/inherit_graph_94.png b/doxygen/inherit_graph_94.png new file mode 100644 index 0000000000000000000000000000000000000000..5233ea3862dc5f525f16b4127f7283a3861eba27 GIT binary patch literal 3900 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 literal 0 HcmV?d00001 diff --git a/doxygen/inherit_graph_95.map b/doxygen/inherit_graph_95.map new file mode 100644 index 0000000000..81042861b1 --- /dev/null +++ b/doxygen/inherit_graph_95.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_95.md5 b/doxygen/inherit_graph_95.md5 new file mode 100644 index 0000000000..5d6b62e3f2 --- /dev/null +++ b/doxygen/inherit_graph_95.md5 @@ -0,0 +1 @@ +46571129c8bd16efbaaee6e76ef08409 \ No newline at end of file diff --git a/doxygen/inherit_graph_95.png b/doxygen/inherit_graph_95.png new file mode 100644 index 0000000000000000000000000000000000000000..80bd94bba91768382c63ce9148e72499b514c88c GIT binary patch literal 2401 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 TI3K6y00000NkvXXu0mjfB_FGH literal 0 HcmV?d00001 diff --git a/doxygen/inherit_graph_96.map b/doxygen/inherit_graph_96.map new file mode 100644 index 0000000000..714b6fee82 --- /dev/null +++ b/doxygen/inherit_graph_96.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/inherit_graph_96.md5 b/doxygen/inherit_graph_96.md5 new file mode 100644 index 0000000000..89517066fb --- /dev/null +++ b/doxygen/inherit_graph_96.md5 @@ -0,0 +1 @@ +c99d8d73ff5766bfadd19cf5d600988d \ No newline at end of file diff --git a/doxygen/inherit_graph_96.png b/doxygen/inherit_graph_96.png new file mode 100644 index 0000000000000000000000000000000000000000..ff8e930d761ff79e9ddd4db301a39dbeb9847e3c GIT binary patch literal 4900 zcmYjVby(Bw_nwM^3Ig)d2q+~buZSQyCMb+lDaVv9X{B3Q1R0E+qog~AfG|ckyn>RW zL%KU0@O${@cYUwb=i2spuJfF8-}kxC6ZS$wiRuQ+4G0861y@#l1%X^r2G@@$u7UUc zkmz9Wam_?kNfB~>@kk@TdoiEu@jwtLe0gx6~woymsnO*wKJ|DaCQ548RiOwOOv zZ2zTiQ|+T<2@IC#Ba7%>;=Do3C8VG||LN}5j(p!2(8Km9dD}ls&51?p7a1&>mZnAC zv+*J9#rCr&e@_FAQRKHIWIxTH$e?2+{`W~xT3Lkzc_Fp6 zV*|P28Gog2!ItcBLL3^Zs(42m4BYT47wL&IT1+3E2|aXS3vgsqyW%>o&v`quPk6Kb z+}ALalY+o2B{gbPz4D;_E=9mr#@*YQoD@&V6$AbugDrhjj(S>hG#yBtDB~gOwD^-y zvQo$Kw$7W`&(E*;P4(~LZ%oNdnY0lbScf{}PBf2Ih5p*w+6J~}Q}4@{FW#s7!{fCc zyzvlz>inSng5q$lq$D=8_7u~6~w@Ys(3h(0;-%vQ&? z^WPRGp79 zTG7ZT&EVWjTl=3FKFx)eFuFer3+Sk*25^h#KMpoyC^pFel`NB^t(l%=>4f)lZ7w4z z-xNYwY`GdXCh*7IhG$K2f_hAkEGW0Pw-dj9b!FN-+MbJh@)e6c-su+U?C6*-@jDeX zFfb^5Q;qAN8vFjPUs+Rg5x-ey3KkWUkjNOc2AeZkAFc2l6PJ)Ex1W$Y+eZ0KPfs@# zBFguMIAlFz)v@C5w`ZT#5(sb=6_bXKmsHkZFc=8+)r%J&3kn2P6CRlNrNQ2&G!LET zs9~P^`pUJVINFDX;?29`XO@;m29_azaGwq1>$4K;Vmt)VwzRdG zn3^i6sZsK2BpEdYT^B;&f})~m0s;a)MMV7R`=$VqIVbIo5Q(&GY!S~h?g|Lp__(w4 zA(CA-f52@OB(%M?H5!e6>gf0{2+K;01&v0>nzBKCld7E-O)M z2N4LeHyI!NS%jWT=4hrafRH?|56}n-3WEK>t*r$h2n2$XT_*8m#`B6XabDgKVPqu@ z149T3g)*=m92|_`fU@i9=`jes{+N};Q&v{yS=O5(%UYqY4l2L+GugB!@u8TwxU0u4 zbBpjg1m(^}+1r>FNGZYinzn`?d*W z!1{6h*?vi0Zf-+kg?H)Uh+)T~=9n&FEl_DD<{wuM(uIelX}dU2Z{vLc!qd>gt%W z*J%9Uz`#};t3y;wOkh=&1jN_Zmy%gD2!|6*N=~L~!vgT0?5|=T+c01-7@6%By0@qK zqhaCUrl7E(G-rD`P+CUDVSDV#igl$e@hJ@Ek4_X85{eaE&d(Rn7N8Gj5Ki|yKO?(# z?Zf)$V}fZ=NJ#oGD+mQ8WlLvg*jv2oL!Xm9jb7t|1Ov~o1VdkDtK}Qcj*ip6vsAlu zavw4a!^FkKUukOxY2?tICIrCj?d`jIp?`@NO7H@$ZiBG1v&(6Bbao!VCtKskb>F{# zC=mCVFV*`M|L*>NR$g8h8hzW_+Z(dAvr{wY9v&V}{Qiy( z4hF&(^DLZUIZhR=`0`~mnscm;m5r?jfNq4~C81aR=B|)X1iw~xU%lVC{jjV_3&r@v z1ftx6sy*_K>2UGewW)eT2W+`zuZg{VF}ITZaq|`7>w@Cq3=R$s7u9R~!rH#u3oUVr zK$fWd*V6+6N-r&?S(=pG+uC~J%l^cXv+wt?UoUS*O^sBF*M{WD;U+34Cr3Fd0EXsv zsTm(UsA_I&3jug3HX!8h1%lGuU)9GXem@u3+1R}>vga+ z!Ok*TZ-=R@JUoWiWtGh} ztDsjwlbHt=pO7&3=Z{&00`mkw^zq4R30?@V*K_*RS3neL05yV~7rg4Pqg#^uJ!%ZK z=wZr&7M8({THi7A!l))ilqrQOgNOeYAO>9O@c3Zb{=Nyocg^shBdR5UcQ3kxHTcNg7kIJC61 zfaJs>^%Pe7`};32%=J8?p|v#_V9T6PR3ywQZhIj66QSP`lErE0F7-9p}LX=2nfW48{X8} z3E!-o{?i!)ly{_J?<#~q9M4D|#c%N;SS(g_ z;#s{KCRKe0=0UwShnl7Z>giJ&QMg@aBiSkB=-h zl=SZ@_*!f-Qch9!u?Uj=TOf0TtyxHC-+fqb9o1pf(UH3uVn|R`RaHxl5t5RUvd+uF z$HTMC;}06f#G1|L37V6EMy-dY+1+FTMAy~b@cRP z0#otzD+`e3cUD%@e>dwlzsrVnfn+^#U1OrBr`Oigo7>nZmZ<7~QJWmio!5U>9UB{a zYccZVGz(8zap^$)}U|wNiOKWS^+X<~4 zjrk0eTzYOU1s@;Zyw^ao(@5pIg@py%6G!>uNx%I;Jrd~jYX{ZKDtPSi5Z}AYmoL}2 zd<3Z~w;6t5hG-)aF@WC}<_1*oXkyb>sowXrZ`m1gVS8w~o`Odo+RM)C7P3e&fb~s{@0B#=tG; z=+LhYmsqZil-+5Q_H-T=87G=EwXU#9EIa~ zagu6(de5`7)?@c65B#Luog>qT5?CW{UfvaTD$(o=CDaNPi;JGKvlvcDv){U+&Bu5H z&7=Cmb)7|BUA^{r0W04fXX@=O)7aS9h@4ys!Rt_frB3QdtgBE#S0p|+orC@7Faaahn1Bz?9(SsS=r=~k=L_xbHpkK z4yT2lU#xH&WOo1Zh3L@nX_#%#wko4rCJA0}W##GV#=tH^SB32ZMYBp$8YN5sLxHeh zyRD8>Tb(aO|MJpWyK~Wtg6#|2@9KPriNywrw7b5hh7m*7`2O0 zcXTWjl{z?@Lz$YGJXKa!RxRb_jbM|+O~mj6F$Om}ou0UikB@hBcdx#zUF=QG0l3Y~ zi#+S+sz<}v zLGS))HDaJRB*qFJi5@>i+@OnEO7@Dj|1F7nrsI+?qHqLXT1R$sgpXkwCKEh)U^PE} zr1dX@HWVw$Cn_RB4I;{jbWMf&r9?zfe)#YqwlS${$`=c;C@_|on7G8FtzceUT%4;d z01)Z%Ct4|X2f*;qD%}pruwv1Mj5X5o44G>-NaCuXY*9PuwGMk=LE9nv?ofrp%&?7< z!Y51b_MZm-D;PN+Dc~r%0b_uIPI|5i8+dO&%cy&24w9RQ!EA50bIi@nH81z)01w}X zom!ZkZDKU^_6I5n>-akiObr?hFEEbMYB=0dP$4&sz5WZD(7LZWEtiUKDiXu zuzX%MYdElpHiv)09RF^(e?|3GM`j;?r;iqf@>cu|CPPA)bteU@MohkH z4zH}NxC8YfmRnK-tO9c3T-Wu1vTX0{nC$%NWRr4M_D~;|-mGnY)GKpE9?%Z>b3h{C zcf%qg%!oMiE>jmkeA0qM{R}YkV3Gkl0yU{II6WsVLgA{arhgCCUn3B-?Cct#TjIkR zzY#z>PUlB^d47&Ox6E8bLnMxpd3&FB~z+kvq^KKr}5pK|u9U{L1lXin&L>BkGVM~HGe zBOOn8K7keK($Ub!%gaL&9=yGG?_R*tl2uoCH(WzQ{JGO6>+FqJG!be0h~-cY-yh9( z`j+|)emUij#l#?6%Q>mD>+4_Q;^@)bv>Y70!8aNA4mLNC<)9Z6f%gH5)(Ct8AZ+=& ze%{-3bY7!{e^Y*dvj;B64=%YlXlxM1ET`SeVK9dHFHRr zj$X;}$#DJIGktxQRPUYZy1KeS!NJj~sUjzwo8a^!z=$j|GLr1-Ra#owM$k@C$;o%5 zUDq1G^a + + + + + diff --git a/doxygen/inherit_graph_97.md5 b/doxygen/inherit_graph_97.md5 new file mode 100644 index 0000000000..6ec386e1dd --- /dev/null +++ b/doxygen/inherit_graph_97.md5 @@ -0,0 +1 @@ +1a784cbfe89b73874362956ea84c7ae3 \ No newline at end of file diff --git a/doxygen/inherit_graph_97.png b/doxygen/inherit_graph_97.png new file mode 100644 index 0000000000000000000000000000000000000000..22ebcee734d6e9676290d600b5b114479559989f GIT binary patch literal 16426 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 literal 0 HcmV?d00001 diff --git a/doxygen/inherit_graph_98.map b/doxygen/inherit_graph_98.map new file mode 100644 index 0000000000..39e19ca85b --- /dev/null +++ b/doxygen/inherit_graph_98.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/inherit_graph_98.md5 b/doxygen/inherit_graph_98.md5 new file mode 100644 index 0000000000..18a7f373ef --- /dev/null +++ b/doxygen/inherit_graph_98.md5 @@ -0,0 +1 @@ +8567a8a338256a3707a79e7509b1b758 \ No newline at end of file diff --git a/doxygen/inherit_graph_98.png b/doxygen/inherit_graph_98.png new file mode 100644 index 0000000000000000000000000000000000000000..4ce179c3530a4ca30ce4a4f1812a6270640b56cb GIT binary patch literal 5191 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 Wsha-~V+wW#A?hmH$`y*Q-u)l!USPZc literal 0 HcmV?d00001 diff --git a/doxygen/inherit_graph_99.map b/doxygen/inherit_graph_99.map new file mode 100644 index 0000000000..a6d23d307d --- /dev/null +++ b/doxygen/inherit_graph_99.map @@ -0,0 +1,3 @@ + + + diff --git a/doxygen/inherit_graph_99.md5 b/doxygen/inherit_graph_99.md5 new file mode 100644 index 0000000000..6a47cd1242 --- /dev/null +++ b/doxygen/inherit_graph_99.md5 @@ -0,0 +1 @@ +eee26040db0a164c303812a7fe4730a0 \ No newline at end of file diff --git a/doxygen/inherit_graph_99.png b/doxygen/inherit_graph_99.png new file mode 100644 index 0000000000000000000000000000000000000000..dabcbf532147fe244d69fec3b071bcecbd43cf5a GIT binary patch literal 2040 zcmVk?xQIw>lrG@yXNm??rj8e;)q)VnP-MXGv-cNJ?`>FHs zcRnz<&$;gVT;E;iyX~BNH^5*p7z_r3!C)|4!7c7kDwW$gj@$1GF${*MR9060XK|l! zaRs3unVGR>U}k2l z8Ph2V&-+@+iqg~5gR!wO zpXFa|AEs4rW|c~X=H_N!%lOyhXdaYGC8DFFeWb{qRc~gUP6va*;A<=`S31t0KM%QFj)MmeLZMKgt*woZIh%*Y z%M5q<-T7q6$A z4TXk=(%rjvslL9RWMp_$_xSjDs;sQ^Si377eSLkT)oQ7wrG>6tyGCNMnA+Rh zUCx8I`Q7=%6S}**DJLg~metG`E?nT-qobp|xyHxGNgxnVM@I)AZ)s^Ep-@Ohqmkac zc|#jEY@pfMSw3zunfT+Fm>8<6s^Z%QgMkDB0lj_umhY>rt+g@p=g*&Q^8ML%mCv14 zBG1fx=FAyB{{8!R5(@kx0awgNVpzG}5|t>*(Xhj}9tr%b#X) zr`?qfM`$z}QYaLBd+|JYn}4A;&V1r2uFUN8?`&@g4-e;$w`|!005BSjFc=IF2n5)- zZyz5|NJxOiV!?+G9}p80gWTL)L`O#>F){Q3X^|x-_!r0Uqaa#*%FS zInM3@JOIGPjT>RHSok$108C9y@i73ndi5&$`udQYn~RQ)4#dXB!fLfT99JwB!)!Lg zY&P?KMx)Uyt|9wYn-naIshnj^mJ@pAU^j z!@ruFn-Lou>(zU5r`?qflgWhr`}c#0pi-%D@#00Kq@>{I&!7A`&gR$C{GN{UPgwT5 z88Vp+5{U$*rKNmdNl6L9!^0twNYK;MgQriQLL?F)CME_dl?r;jo;RpiEXL&IB!6vq zcsPQCgHc{y4gmQ5`!}v%ziyM$)dtX2K6hFHKq8Ug<;$0R+}T4f3rM9>L_|cOu&|K- zfa>*nbaiz>CX*o|A_84qT{v*y0OWExl9H0p+uIAVSnPR`;l9qUbc~FQU}|a#1qB62 zO-)5yT%64&7qFiPZ}YDN%Wh_oNQ9c28dO(TLnf19=gysIY-~hLO$`JB0fK^pP+ne+ z?c28_At3?D$;rse%j187va+(E(P)sAlmxX}4UtHM>gsBgmX>1o?%fCt4Ym2E1c2e; zVRUwOI&8bj=T0jC6c!fZ#*G_@ii$#5SQx&2`{wff`}z6d;lqb$YimPra4`1n-HXi3 zOl;k{6@Gqxc>MS=8XFrC92|_exHtp`2IAAFPw?~eThcna(jk+{kdl%DsZ@%Dgak;X zQhxcdz~XuEHos5!n+;%hcQ+Xf2EJ{zT1l(b+HA7s=H}?#yLZ&z-%s=N^LAs5j*e1i zXQ#u>z?Uyy=+&!NHXEhc*;&%*bTmFbPQQNrBCS?Sb8~Y<Nj`U4jYcDNb#>9i z!~~hmX3}c4{CSIO@n=njhK8uGua7Jii(Pzpc$m7oyJ>oQ+Aih{olZwzzkc;fyDJ@f zy`I|J+sSA&(%9ITO}&Zi=fT_jp7_Kat~P*n3z+Qe> + + + + + + +Distributed Ranges: Class Hierarchy + + + + + + + + + +

    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Class Hierarchy
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + +
    + + + + +
    + + + + + + +
    + + + + +
    + + + +
    + + + + +
    + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + +
    + + + + + + + + + + +
    + + + + + + +
    +
    + + + + diff --git a/doxygen/init_8hpp_source.html b/doxygen/init_8hpp_source.html new file mode 100644 index 0000000000..e676a6470a --- /dev/null +++ b/doxygen/init_8hpp_source.html @@ -0,0 +1,191 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/init.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    init.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <cassert>
    +
    8#include <memory>
    +
    9#include <span>
    +
    10#include <sycl/sycl.hpp>
    +
    11#include <type_traits>
    +
    12#include <vector>
    +
    13
    +
    14#include <dr/sp/algorithms/execution_policy.hpp>
    +
    15#include <dr/sp/util.hpp>
    +
    16#include <oneapi/dpl/execution>
    +
    17
    +
    18namespace dr::sp {
    +
    19
    +
    20namespace __detail {
    +
    21
    +
    22inline sycl::context *global_context_;
    +
    23
    +
    24inline std::vector<sycl::device> devices_;
    +
    25
    +
    26inline std::vector<sycl::queue> queues_;
    +
    27
    +
    28inline std::vector<oneapi::dpl::execution::device_policy<>> dpl_policies_;
    +
    29
    +
    30inline std::size_t ngpus_;
    +
    31
    +
    32inline sycl::context &global_context() { return *global_context_; }
    +
    33
    +
    34inline std::size_t ngpus() { return ngpus_; }
    +
    35
    +
    36inline std::span<sycl::device> global_devices() { return devices_; }
    +
    37
    +
    38} // namespace __detail
    +
    39
    +
    40inline sycl::context &context() { return __detail::global_context(); }
    +
    41
    +
    42inline std::span<sycl::device> devices() { return __detail::global_devices(); }
    +
    43
    +
    44inline std::size_t nprocs() { return __detail::ngpus(); }
    +
    45
    +
    46inline device_policy par_unseq;
    +
    47
    +
    48template <rng::range R>
    +
    49inline void init(R &&devices)
    +
    50 requires(
    +
    51 std::is_same_v<sycl::device, std::remove_cvref_t<rng::range_value_t<R>>>)
    +
    52{
    +
    53 __detail::devices_.assign(rng::begin(devices), rng::end(devices));
    +
    54 __detail::global_context_ = new sycl::context(__detail::devices_);
    +
    55 __detail::ngpus_ = rng::size(__detail::devices_);
    +
    56
    +
    57 for (auto &&device : __detail::devices_) {
    +
    58 sycl::queue q(*__detail::global_context_, device);
    +
    59 __detail::queues_.push_back(q);
    +
    60
    +
    61 __detail::dpl_policies_.emplace_back(__detail::queues_.back());
    +
    62 }
    +
    63
    +
    64 par_unseq = device_policy(__detail::devices_);
    +
    65}
    +
    66
    +
    67template <__detail::sycl_device_selector Selector>
    +
    68inline void init(Selector &&selector) {
    +
    69 auto devices = get_numa_devices(selector);
    +
    70 init(devices);
    +
    71}
    +
    72
    +
    73inline void init() { init(sycl::default_selector_v); }
    +
    74
    +
    75inline void finalize() {
    +
    76 __detail::dpl_policies_.clear();
    +
    77 __detail::queues_.clear();
    +
    78 __detail::devices_.clear();
    +
    79 delete __detail::global_context_;
    +
    80}
    +
    81
    +
    82namespace __detail {
    +
    83
    +
    84inline sycl::queue &queue(std::size_t rank) { return queues_[rank]; }
    +
    85
    +
    86// Retrieve global queues because of CMPLRLLVM-47008
    +
    87inline sycl::queue &queue(const sycl::device &device) {
    +
    88 for (std::size_t rank = 0; rank < sp::nprocs(); rank++) {
    +
    89 if (sp::devices()[rank] == device) {
    +
    90 return queue(rank);
    +
    91 }
    +
    92 }
    +
    93 assert(false);
    +
    94 // Reaches here with -DNDEBUG
    +
    95 return queue(0);
    +
    96}
    +
    97
    +
    98inline sycl::queue &default_queue() { return queue(0); }
    +
    99
    +
    100inline auto &dpl_policy(std::size_t rank) {
    +
    101 return __detail::dpl_policies_[rank];
    +
    102}
    +
    103
    +
    104} // namespace __detail
    +
    105
    +
    106} // namespace dr::sp
    +
    + + + + diff --git a/doxygen/iterator__adaptor_8hpp_source.html b/doxygen/iterator__adaptor_8hpp_source.html new file mode 100644 index 0000000000..de8f713dd1 --- /dev/null +++ b/doxygen/iterator__adaptor_8hpp_source.html @@ -0,0 +1,287 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/detail/iterator_adaptor.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    iterator_adaptor.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <iterator>
    +
    8#include <type_traits>
    +
    9
    +
    10#include <dr/detail/ranges_shim.hpp>
    +
    11
    +
    12namespace dr {
    +
    13
    +
    14namespace {
    +
    15
    +
    16template <typename R>
    +
    17concept has_segments_method = requires(R r) {
    +
    18 { r.segments() };
    +
    19};
    +
    20
    +
    21} // namespace
    +
    22
    +
    23template <typename Accessor> class iterator_adaptor {
    +
    24public:
    +
    25 using accessor_type = Accessor;
    +
    26 using const_accessor_type = typename Accessor::const_iterator_accessor;
    +
    27 using nonconst_accessor_type = typename Accessor::nonconst_iterator_accessor;
    +
    28
    +
    29 using difference_type = typename Accessor::difference_type;
    +
    30 using value_type = typename Accessor::value_type;
    + + +
    33 using reference = typename Accessor::reference;
    +
    34 using iterator_category = typename Accessor::iterator_category;
    +
    35
    + +
    37
    +
    38 static_assert(std::is_same_v<iterator, iterator_adaptor<Accessor>>);
    +
    39
    +
    40 iterator_adaptor() = default;
    +
    41 ~iterator_adaptor() = default;
    +
    42 iterator_adaptor(const iterator_adaptor &) = default;
    +
    43 iterator_adaptor &operator=(const iterator_adaptor &) = default;
    +
    44
    +
    45 template <typename... Args>
    +
    46 requires(
    +
    47 sizeof...(Args) >= 1 &&
    +
    48 !((sizeof...(Args) == 1 &&
    +
    49 (std::is_same_v<nonconst_iterator, std::decay_t<Args>> || ...)) ||
    +
    50 (std::is_same_v<const_iterator, std::decay_t<Args>> || ...) ||
    +
    51 (std::is_same_v<nonconst_accessor_type, std::decay_t<Args>> || ...) ||
    +
    52 (std::is_same_v<const_accessor_type, std::decay_t<Args>> || ...)) &&
    +
    53 std::is_constructible_v<accessor_type, Args...>)
    +
    54 iterator_adaptor(Args &&...args) : accessor_(std::forward<Args>(args)...) {}
    +
    55
    +
    56 iterator_adaptor(const accessor_type &accessor) : accessor_(accessor) {}
    +
    57 iterator_adaptor(const const_accessor_type &accessor)
    +
    58 requires(!std::is_same_v<accessor_type, const_accessor_type>)
    +
    59 : accessor_(accessor) {}
    +
    60
    +
    61 operator const_iterator() const
    +
    62 requires(!std::is_same_v<iterator, const_iterator>)
    +
    63 {
    +
    64 return const_iterator(accessor_);
    +
    65 }
    +
    66
    +
    67 bool operator==(const_iterator other) const {
    +
    68 return accessor_ == other.accessor_;
    +
    69 }
    +
    70
    +
    71 bool operator!=(const_iterator other) const { return !(*this == other); }
    +
    72
    +
    73 bool operator<(const_iterator other) const
    +
    74 requires(std::is_same_v<iterator_category, std::random_access_iterator_tag>)
    +
    75 {
    +
    76 return accessor_ < other.accessor_;
    +
    77 }
    +
    78
    +
    79 bool operator<=(const_iterator other) const
    +
    80 requires(std::is_same_v<iterator_category, std::random_access_iterator_tag>)
    +
    81 {
    +
    82 return *this < other || *this == other;
    +
    83 }
    +
    84
    +
    85 bool operator>(const_iterator other) const
    +
    86 requires(std::is_same_v<iterator_category, std::random_access_iterator_tag>)
    +
    87 {
    +
    88 return !(*this <= other);
    +
    89 }
    +
    90
    +
    91 bool operator>=(const_iterator other) const
    +
    92 requires(std::is_same_v<iterator_category, std::random_access_iterator_tag>)
    +
    93 {
    +
    94 return !(*this < other);
    +
    95 }
    +
    96
    +
    97 reference operator*() const { return *accessor_; }
    +
    98
    +
    99 reference operator[](difference_type offset) const
    +
    100 requires(std::is_same_v<iterator_category, std::random_access_iterator_tag>)
    +
    101 {
    +
    102 return *(*this + offset);
    +
    103 }
    +
    104
    +
    105 iterator &operator+=(difference_type offset) noexcept
    +
    106 requires(std::is_same_v<iterator_category, std::random_access_iterator_tag>)
    +
    107 {
    +
    108 accessor_ += offset;
    +
    109 return *this;
    +
    110 }
    +
    111
    +
    112 iterator &operator-=(difference_type offset) noexcept
    +
    113 requires(std::is_same_v<iterator_category, std::random_access_iterator_tag>)
    +
    114 {
    +
    115 accessor_ += -offset;
    +
    116 return *this;
    +
    117 }
    +
    118
    +
    119 iterator operator+(difference_type offset) const
    +
    120 requires(std::is_same_v<iterator_category, std::random_access_iterator_tag>)
    +
    121 {
    +
    122 iterator other = *this;
    +
    123 other += offset;
    +
    124 return other;
    +
    125 }
    +
    126
    +
    127 iterator operator-(difference_type offset) const
    +
    128 requires(std::is_same_v<iterator_category, std::random_access_iterator_tag>)
    +
    129 {
    +
    130 iterator other = *this;
    +
    131 other += -offset;
    +
    132 return other;
    +
    133 }
    +
    134
    +
    135 difference_type operator-(const_iterator other) const
    +
    136 requires(std::is_same_v<iterator_category, std::random_access_iterator_tag>)
    +
    137 {
    +
    138 return accessor_ - other.accessor_;
    +
    139 }
    +
    140
    +
    141 iterator &operator++() noexcept
    +
    142 requires(std::is_same_v<iterator_category, std::random_access_iterator_tag>)
    +
    143 {
    +
    144 *this += 1;
    +
    145 return *this;
    +
    146 }
    +
    147
    +
    148 iterator &operator++() noexcept
    +
    149 requires(
    +
    150 !std::is_same_v<iterator_category, std::random_access_iterator_tag>)
    +
    151 {
    +
    152 ++accessor_;
    +
    153 return *this;
    +
    154 }
    +
    155
    +
    156 iterator operator++(int) noexcept {
    +
    157 iterator other = *this;
    +
    158 ++(*this);
    +
    159 return other;
    +
    160 }
    +
    161
    +
    162 iterator &operator--() noexcept
    +
    163 requires(
    +
    164 std::is_same_v<iterator_category, std::random_access_iterator_tag> ||
    +
    165 std::is_same_v<iterator_category, std::bidirectional_iterator_tag>)
    +
    166 {
    +
    167 *this += -1;
    +
    168 return *this;
    +
    169 }
    +
    170
    +
    171 iterator operator--(int) noexcept
    +
    172 requires(
    +
    173 std::is_same_v<iterator_category, std::random_access_iterator_tag> ||
    +
    174 std::is_same_v<iterator_category, std::bidirectional_iterator_tag>)
    +
    175 {
    +
    176 iterator other = *this;
    +
    177 --(*this);
    +
    178 return other;
    +
    179 }
    +
    180
    +
    181 auto segments() const noexcept
    +
    182 requires(has_segments_method<accessor_type>)
    +
    183 {
    +
    184 return accessor_.segments();
    +
    185 }
    +
    186
    +
    187 friend iterator operator+(difference_type n, iterator iter)
    +
    188 requires(std::is_same_v<iterator_category, std::random_access_iterator_tag>)
    +
    189 {
    +
    190 return iter + n;
    +
    191 }
    +
    192
    +
    193private:
    +
    194 friend const_iterator;
    +
    195 friend nonconst_iterator;
    +
    196
    +
    197 accessor_type accessor_;
    +
    198};
    +
    199
    +
    200} // namespace dr
    +
    Definition: iterator_adaptor.hpp:23
    +
    Definition: iterator_adaptor.hpp:17
    +
    + + + + diff --git a/doxygen/jquery.js b/doxygen/jquery.js new file mode 100644 index 0000000000..1dffb65b58 --- /dev/null +++ b/doxygen/jquery.js @@ -0,0 +1,34 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
    ",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=y(e||this.defaultElement||this)[0],this.element=y(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=y(),this.hoverable=y(),this.focusable=y(),this.classesElementLookup={},e!==this&&(y.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===e&&this.destroy()}}),this.document=y(e.style?e.ownerDocument:e.document||e),this.window=y(this.document[0].defaultView||this.document[0].parentWindow)),this.options=y.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:y.noop,_create:y.noop,_init:y.noop,destroy:function(){var i=this;this._destroy(),y.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:y.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return y.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t]=y.widget.extend({},this.options[t]),n=0;n
    "),i=e.children()[0];return y("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i},getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.widthx(D(s),D(n))?o.important="horizontal":o.important="vertical",p.using.call(this,t,o)}),h.offset(y.extend(l,{using:t}))})},y.ui.position={fit:{left:function(t,e){var i=e.within,s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,h=s-o,a=o+e.collisionWidth-n-s;e.collisionWidth>n?0n?0=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),y.ui.plugin={add:function(t,e,i){var s,n=y.ui[t].prototype;for(s in i)n.plugins[s]=n.plugins[s]||[],n.plugins[s].push([e,i[s]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;n").css({overflow:"hidden",position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,t={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(t),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(t),this._proportionallyResize()),this._setupHandles(),e.autoHide&&y(this.element).on("mouseenter",function(){e.disabled||(i._removeClass("ui-resizable-autohide"),i._handles.show())}).on("mouseleave",function(){e.disabled||i.resizing||(i._addClass("ui-resizable-autohide"),i._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy(),this._addedHandles.remove();function t(t){y(t).removeData("resizable").removeData("ui-resizable").off(".resizable")}var e;return this.elementIsWrapper&&(t(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),t(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;case"aspectRatio":this._aspectRatio=!!e}},_setupHandles:function(){var t,e,i,s,n,o=this.options,h=this;if(this.handles=o.handles||(y(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=y(),this._addedHandles=y(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),i=this.handles.split(","),this.handles={},e=0;e"),this._addClass(n,"ui-resizable-handle "+s),n.css({zIndex:o.zIndex}),this.handles[t]=".ui-resizable-"+t,this.element.children(this.handles[t]).length||(this.element.append(n),this._addedHandles=this._addedHandles.add(n));this._renderAxis=function(t){var e,i,s;for(e in t=t||this.element,this.handles)this.handles[e].constructor===String?this.handles[e]=this.element.children(this.handles[e]).first().show():(this.handles[e].jquery||this.handles[e].nodeType)&&(this.handles[e]=y(this.handles[e]),this._on(this.handles[e],{mousedown:h._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(i=y(this.handles[e],this.element),s=/sw|ne|nw|se|n|s/.test(e)?i.outerHeight():i.outerWidth(),i=["padding",/ne|nw|n/.test(e)?"Top":/se|sw|s/.test(e)?"Bottom":/^e$/.test(e)?"Right":"Left"].join(""),t.css(i,s),this._proportionallyResize()),this._handles=this._handles.add(this.handles[e])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){h.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),h.axis=n&&n[1]?n[1]:"se")}),o.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._addedHandles.remove()},_mouseCapture:function(t){var e,i,s=!1;for(e in this.handles)(i=y(this.handles[e])[0])!==t.target&&!y.contains(i,t.target)||(s=!0);return!this.options.disabled&&s},_mouseStart:function(t){var e,i,s=this.options,n=this.element;return this.resizing=!0,this._renderProxy(),e=this._num(this.helper.css("left")),i=this._num(this.helper.css("top")),s.containment&&(e+=y(s.containment).scrollLeft()||0,i+=y(s.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:e,top:i},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:n.width(),height:n.height()},this.originalSize=this._helper?{width:n.outerWidth(),height:n.outerHeight()}:{width:n.width(),height:n.height()},this.sizeDiff={width:n.outerWidth()-n.width(),height:n.outerHeight()-n.height()},this.originalPosition={left:e,top:i},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof s.aspectRatio?s.aspectRatio:this.originalSize.width/this.originalSize.height||1,s=y(".ui-resizable-"+this.axis).css("cursor"),y("body").css("cursor","auto"===s?this.axis+"-resize":s),this._addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var e=this.originalMousePosition,i=this.axis,s=t.pageX-e.left||0,e=t.pageY-e.top||0,i=this._change[i];return this._updatePrevProperties(),i&&(e=i.apply(this,[t,s,e]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(e=this._updateRatio(e,t)),e=this._respectSize(e,t),this._updateCache(e),this._propagate("resize",t),e=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),y.isEmptyObject(e)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges())),!1},_mouseStop:function(t){this.resizing=!1;var e,i,s,n=this.options,o=this;return this._helper&&(s=(e=(i=this._proportionallyResizeElements).length&&/textarea/i.test(i[0].nodeName))&&this._hasScroll(i[0],"left")?0:o.sizeDiff.height,i=e?0:o.sizeDiff.width,e={width:o.helper.width()-i,height:o.helper.height()-s},i=parseFloat(o.element.css("left"))+(o.position.left-o.originalPosition.left)||null,s=parseFloat(o.element.css("top"))+(o.position.top-o.originalPosition.top)||null,n.animate||this.element.css(y.extend(e,{top:s,left:i})),o.helper.height(o.size.height),o.helper.width(o.size.width),this._helper&&!n.animate&&this._proportionallyResize()),y("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s=this.options,n={minWidth:this._isNumber(s.minWidth)?s.minWidth:0,maxWidth:this._isNumber(s.maxWidth)?s.maxWidth:1/0,minHeight:this._isNumber(s.minHeight)?s.minHeight:0,maxHeight:this._isNumber(s.maxHeight)?s.maxHeight:1/0};(this._aspectRatio||t)&&(e=n.minHeight*this.aspectRatio,i=n.minWidth/this.aspectRatio,s=n.maxHeight*this.aspectRatio,t=n.maxWidth/this.aspectRatio,e>n.minWidth&&(n.minWidth=e),i>n.minHeight&&(n.minHeight=i),st.width,h=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,a=this.originalPosition.left+this.originalSize.width,r=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),i=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),h&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=a-e.minWidth),s&&l&&(t.left=a-e.maxWidth),h&&i&&(t.top=r-e.minHeight),n&&i&&(t.top=r-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];e<4;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;e").css({overflow:"hidden"}),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++e.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize;return{left:this.originalPosition.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize;return{top:this.originalPosition.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},sw:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,e,i]))},ne:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},nw:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,e,i]))}},_propagate:function(t,e){y.ui.plugin.call(this,t,[e,this.ui()]),"resize"!==t&&this._trigger(t,e,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),y.ui.plugin.add("resizable","animate",{stop:function(e){var i=y(this).resizable("instance"),t=i.options,s=i._proportionallyResizeElements,n=s.length&&/textarea/i.test(s[0].nodeName),o=n&&i._hasScroll(s[0],"left")?0:i.sizeDiff.height,h=n?0:i.sizeDiff.width,n={width:i.size.width-h,height:i.size.height-o},h=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,o=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(y.extend(n,o&&h?{top:o,left:h}:{}),{duration:t.animateDuration,easing:t.animateEasing,step:function(){var t={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};s&&s.length&&y(s[0]).css({width:t.width,height:t.height}),i._updateCache(t),i._propagate("resize",e)}})}}),y.ui.plugin.add("resizable","containment",{start:function(){var i,s,n=y(this).resizable("instance"),t=n.options,e=n.element,o=t.containment,h=o instanceof y?o.get(0):/parent/.test(o)?e.parent().get(0):o;h&&(n.containerElement=y(h),/document/.test(o)||o===document?(n.containerOffset={left:0,top:0},n.containerPosition={left:0,top:0},n.parentData={element:y(document),left:0,top:0,width:y(document).width(),height:y(document).height()||document.body.parentNode.scrollHeight}):(i=y(h),s=[],y(["Top","Right","Left","Bottom"]).each(function(t,e){s[t]=n._num(i.css("padding"+e))}),n.containerOffset=i.offset(),n.containerPosition=i.position(),n.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},t=n.containerOffset,e=n.containerSize.height,o=n.containerSize.width,o=n._hasScroll(h,"left")?h.scrollWidth:o,e=n._hasScroll(h)?h.scrollHeight:e,n.parentData={element:h,left:t.left,top:t.top,width:o,height:e}))},resize:function(t){var e=y(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.position,o=e._aspectRatio||t.shiftKey,h={top:0,left:0},a=e.containerElement,t=!0;a[0]!==document&&/static/.test(a.css("position"))&&(h=s),n.left<(e._helper?s.left:0)&&(e.size.width=e.size.width+(e._helper?e.position.left-s.left:e.position.left-h.left),o&&(e.size.height=e.size.width/e.aspectRatio,t=!1),e.position.left=i.helper?s.left:0),n.top<(e._helper?s.top:0)&&(e.size.height=e.size.height+(e._helper?e.position.top-s.top:e.position.top),o&&(e.size.width=e.size.height*e.aspectRatio,t=!1),e.position.top=e._helper?s.top:0),i=e.containerElement.get(0)===e.element.parent().get(0),n=/relative|absolute/.test(e.containerElement.css("position")),i&&n?(e.offset.left=e.parentData.left+e.position.left,e.offset.top=e.parentData.top+e.position.top):(e.offset.left=e.element.offset().left,e.offset.top=e.element.offset().top),n=Math.abs(e.sizeDiff.width+(e._helper?e.offset.left-h.left:e.offset.left-s.left)),s=Math.abs(e.sizeDiff.height+(e._helper?e.offset.top-h.top:e.offset.top-s.top)),n+e.size.width>=e.parentData.width&&(e.size.width=e.parentData.width-n,o&&(e.size.height=e.size.width/e.aspectRatio,t=!1)),s+e.size.height>=e.parentData.height&&(e.size.height=e.parentData.height-s,o&&(e.size.width=e.size.height*e.aspectRatio,t=!1)),t||(e.position.left=e.prevPosition.left,e.position.top=e.prevPosition.top,e.size.width=e.prevSize.width,e.size.height=e.prevSize.height)},stop:function(){var t=y(this).resizable("instance"),e=t.options,i=t.containerOffset,s=t.containerPosition,n=t.containerElement,o=y(t.helper),h=o.offset(),a=o.outerWidth()-t.sizeDiff.width,o=o.outerHeight()-t.sizeDiff.height;t._helper&&!e.animate&&/relative/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o}),t._helper&&!e.animate&&/static/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o})}}),y.ui.plugin.add("resizable","alsoResize",{start:function(){var t=y(this).resizable("instance").options;y(t.alsoResize).each(function(){var t=y(this);t.data("ui-resizable-alsoresize",{width:parseFloat(t.width()),height:parseFloat(t.height()),left:parseFloat(t.css("left")),top:parseFloat(t.css("top"))})})},resize:function(t,i){var e=y(this).resizable("instance"),s=e.options,n=e.originalSize,o=e.originalPosition,h={height:e.size.height-n.height||0,width:e.size.width-n.width||0,top:e.position.top-o.top||0,left:e.position.left-o.left||0};y(s.alsoResize).each(function(){var t=y(this),s=y(this).data("ui-resizable-alsoresize"),n={},e=t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];y.each(e,function(t,e){var i=(s[e]||0)+(h[e]||0);i&&0<=i&&(n[e]=i||null)}),t.css(n)})},stop:function(){y(this).removeData("ui-resizable-alsoresize")}}),y.ui.plugin.add("resizable","ghost",{start:function(){var t=y(this).resizable("instance"),e=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}),t._addClass(t.ghost,"ui-resizable-ghost"),!1!==y.uiBackCompat&&"string"==typeof t.options.ghost&&t.ghost.addClass(this.options.ghost),t.ghost.appendTo(t.helper)},resize:function(){var t=y(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=y(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),y.ui.plugin.add("resizable","grid",{resize:function(){var t,e=y(this).resizable("instance"),i=e.options,s=e.size,n=e.originalSize,o=e.originalPosition,h=e.axis,a="number"==typeof i.grid?[i.grid,i.grid]:i.grid,r=a[0]||1,l=a[1]||1,u=Math.round((s.width-n.width)/r)*r,p=Math.round((s.height-n.height)/l)*l,d=n.width+u,c=n.height+p,f=i.maxWidth&&i.maxWidthd,s=i.minHeight&&i.minHeight>c;i.grid=a,m&&(d+=r),s&&(c+=l),f&&(d-=r),g&&(c-=l),/^(se|s|e)$/.test(h)?(e.size.width=d,e.size.height=c):/^(ne)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.top=o.top-p):/^(sw)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.left=o.left-u):((c-l<=0||d-r<=0)&&(t=e._getPaddingPlusBorderDimensions(this)),0=f[g]?0:Math.min(f[g],n));!a&&1-1){targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 + * http://www.smartmenus.org/ + * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend($.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
    ').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]")||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2))&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); \ No newline at end of file diff --git a/doxygen/local__gemm_8hpp_source.html b/doxygen/local__gemm_8hpp_source.html new file mode 100644 index 0000000000..7b7f7343b6 --- /dev/null +++ b/doxygen/local__gemm_8hpp_source.html @@ -0,0 +1,169 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/algorithms/matrix/local_gemm.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    local_gemm.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <dr/sp/views/dense_matrix_view.hpp>
    +
    8
    +
    9#ifdef USE_MKL
    +
    10#include <oneapi/mkl.hpp>
    +
    11#endif
    +
    12
    +
    13namespace dr::sp {
    +
    14
    +
    15namespace __detail {
    +
    16
    +
    17template <typename T>
    +
    18auto custom_gemm(sycl::queue &q, sp::dense_matrix_view<T> a,
    +
    19 sp::dense_matrix_view<T> b, sp::dense_matrix_view<T> c,
    +
    20 const std::vector<sycl::event> &dependencies = {}) {
    +
    21 assert(c.shape()[0] == a.shape()[0]);
    +
    22 assert(c.shape()[1] == b.shape()[1]);
    +
    23 assert(a.shape()[1] == b.shape()[0]);
    +
    24
    +
    25 std::size_t M = c.shape()[0];
    +
    26 std::size_t N = c.shape()[1];
    +
    27 std::size_t K = a.shape()[1];
    +
    28
    +
    29 auto a_p = a.data();
    +
    30 auto b_p = b.data();
    +
    31 auto c_p = c.data();
    +
    32
    +
    33 auto e = q.parallel_for(sycl::range<3>{M, K, N}, [=](auto idx) {
    +
    34 auto i = idx[0];
    +
    35 auto k = idx[1];
    +
    36 auto j = idx[2];
    +
    37
    +
    38 sycl::atomic_ref<T, sycl::memory_order::relaxed, sycl::memory_scope::device>
    +
    39 c_ref(c_p[i * N + j]);
    +
    40
    +
    41 c_ref += a_p[i * K + k] * b_p[k * N + j];
    +
    42 });
    +
    43 return e;
    +
    44}
    +
    45
    +
    46#ifdef USE_MKL
    +
    47
    +
    48template <typename T>
    +
    49auto mkl_gemm(sycl::queue &q, sp::dense_matrix_view<T> a,
    +
    50 sp::dense_matrix_view<T> b, sp::dense_matrix_view<T> c,
    +
    51 const std::vector<sycl::event> &dependencies = {}) {
    +
    52 assert(c.shape()[0] == a.shape()[0]);
    +
    53 assert(c.shape()[1] == b.shape()[1]);
    +
    54 assert(a.shape()[1] == b.shape()[0]);
    +
    55
    +
    56 auto event = oneapi::mkl::blas::row_major::gemm(
    +
    57 q, oneapi::mkl::transpose::nontrans, oneapi::mkl::transpose::nontrans,
    +
    58 c.shape()[0], c.shape()[1], a.shape()[1], T(1), a.data(), a.ld(),
    +
    59 b.data(), b.ld(), T(1), c.data(), c.ld(), dependencies);
    +
    60
    +
    61 return event;
    +
    62}
    +
    63
    +
    64template <typename T>
    +
    65auto local_gemm(sycl::queue &q, sp::dense_matrix_view<T> a,
    +
    66 sp::dense_matrix_view<T> b, sp::dense_matrix_view<T> c,
    +
    67 const std::vector<sycl::event> &dependencies = {}) {
    +
    68 return mkl_gemm(q, a, b, c, dependencies);
    +
    69}
    +
    70
    +
    71#else
    +
    72
    +
    73template <typename T>
    +
    74auto local_gemm(sycl::queue &q, sp::dense_matrix_view<T> a,
    +
    75 sp::dense_matrix_view<T> b, sp::dense_matrix_view<T> c,
    +
    76 const std::vector<sycl::event> &dependencies = {}) {
    +
    77 return custom_gemm(q, a, b, c, dependencies);
    +
    78}
    +
    79
    +
    80#endif
    +
    81
    +
    82} // namespace __detail
    +
    83
    +
    84} // namespace dr::sp
    +
    + + + + diff --git a/doxygen/local__gemv_8hpp_source.html b/doxygen/local__gemv_8hpp_source.html new file mode 100644 index 0000000000..e39aafc62c --- /dev/null +++ b/doxygen/local__gemv_8hpp_source.html @@ -0,0 +1,185 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/algorithms/matrix/local_gemv.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    local_gemv.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <dr/detail/ranges_shim.hpp>
    +
    8#include <dr/sp/containers/sparse_matrix.hpp>
    +
    9#include <dr/sp/util.hpp>
    +
    10
    +
    11#ifdef USE_MKL
    +
    12#include <oneapi/mkl.hpp>
    +
    13#endif
    +
    14
    +
    15namespace dr::sp {
    +
    16
    +
    17namespace __detail {
    +
    18
    +
    19template <typename T, typename I, std::random_access_iterator Iter,
    +
    20 typename... Args>
    +
    21 requires(std::is_same_v<std::iter_value_t<Iter>, T>)
    +
    22auto custom_gemv(sycl::queue &q, csr_matrix_view<T, I, Args...> a, Iter b,
    +
    23 Iter c, const std::vector<sycl::event> &dependencies = {}) {
    +
    24 std::size_t wg = 32;
    +
    25
    +
    26 auto event = q.submit([&](auto &&h) {
    +
    27 h.depends_on(dependencies);
    +
    28 h.parallel_for(sycl::nd_range<1>(a.shape()[0] * wg, wg), [=](auto item) {
    +
    29 auto row_index = item.get_group(0);
    +
    30 auto local_id = item.get_local_id();
    +
    31 auto group_size = item.get_local_range(0);
    +
    32
    +
    33 auto row = a.row(row_index);
    +
    34
    +
    35 for (std::size_t idx = local_id; idx < row.size(); idx += group_size) {
    +
    36 auto &&[index, a_v] = row[idx];
    +
    37 auto &&[i, k] = index;
    +
    38
    +
    39 auto &&b_v = *(b + k);
    +
    40 auto &&c_v = *(c + i);
    +
    41
    +
    42 sycl::atomic_ref<T, sycl::memory_order::relaxed,
    +
    43 sycl::memory_scope::device>
    +
    44 c_ref(c_v);
    +
    45
    +
    46 c_ref += a_v * b_v;
    +
    47 }
    +
    48 });
    +
    49 });
    +
    50 return event;
    +
    51}
    +
    52
    +
    53#ifdef USE_MKL
    +
    54
    +
    55template <typename T, typename I, std::random_access_iterator Iter,
    +
    56 typename... Args>
    +
    57 requires(std::is_same_v<std::iter_value_t<Iter>, T>)
    +
    58auto mkl_gemv(sycl::queue &q, csr_matrix_view<T, I, Args...> a, Iter b, Iter c,
    +
    59 const std::vector<sycl::event> &dependencies = {}) {
    +
    60
    +
    61 oneapi::mkl::sparse::matrix_handle_t a_handle;
    +
    62 oneapi::mkl::sparse::init_matrix_handle(&a_handle);
    +
    63
    +
    64 auto rowptr = dr::sp::__detail::local(a.rowptr_data());
    +
    65 auto colind = dr::sp::__detail::local(a.colind_data());
    +
    66 auto values = dr::sp::__detail::local(a.values_data());
    +
    67
    +
    68 oneapi::mkl::sparse::set_csr_data(q, a_handle, a.shape()[0], a.shape()[1],
    +
    69 oneapi::mkl::index_base::zero, rowptr,
    +
    70 colind, values);
    +
    71
    +
    72 auto event =
    +
    73 oneapi::mkl::sparse::gemv(q, oneapi::mkl::transpose::nontrans, T(1),
    +
    74 a_handle, b, T(1), c, dependencies);
    +
    75 return event;
    +
    76}
    +
    77
    +
    78template <typename T, typename I, std::random_access_iterator Iter,
    +
    79 typename... Args>
    +
    80 requires(std::is_same_v<std::iter_value_t<Iter>, T>)
    +
    81auto local_gemv(sycl::queue &q, csr_matrix_view<T, I, Args...> a, Iter b,
    +
    82 Iter c, const std::vector<sycl::event> &dependencies = {}) {
    +
    83 return mkl_gemv(q, a, b, c, dependencies);
    +
    84}
    +
    85
    +
    86#else
    +
    87
    +
    88template <typename T, typename I, std::random_access_iterator Iter,
    +
    89 typename... Args>
    +
    90 requires(std::is_same_v<std::iter_value_t<Iter>, T>)
    +
    91auto local_gemv(sycl::queue &q, csr_matrix_view<T, I, Args...> a, Iter b,
    +
    92 Iter c, const std::vector<sycl::event> &dependencies = {}) {
    +
    93 return custom_gemv(q, a, b, c, dependencies);
    +
    94}
    +
    95
    +
    96#endif
    +
    97
    +
    98} // namespace __detail
    +
    99
    +
    100} // namespace dr::sp
    +
    + + + + diff --git a/doxygen/logger_8hpp_source.html b/doxygen/logger_8hpp_source.html new file mode 100644 index 0000000000..aaf4c3ff8c --- /dev/null +++ b/doxygen/logger_8hpp_source.html @@ -0,0 +1,203 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/detail/logger.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    logger.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <chrono>
    +
    8#include <fstream>
    +
    9#include <iostream>
    +
    10
    +
    11#include <vendor/source_location/source_location.hpp>
    +
    12
    +
    13#include <dr/detail/format_shim.hpp>
    +
    14#include <dr/detail/ranges_shim.hpp>
    +
    15
    +
    16namespace dr {
    +
    17
    +
    18class timer {
    +
    19public:
    +
    20 timer() : begin_(std::chrono::high_resolution_clock::now()) {}
    +
    21
    +
    22 auto elapsed() {
    +
    23 auto end = std::chrono::high_resolution_clock::now();
    +
    24 return std::chrono::duration<double>(end - begin_).count();
    +
    25 }
    +
    26
    +
    27private:
    +
    28 std::chrono::time_point<std::chrono::high_resolution_clock> begin_;
    +
    29};
    +
    30
    +
    31class logger {
    +
    32public:
    +
    33 enum filters { base, for_each, transpose, mdspan_view, mpi, last };
    +
    34
    +
    35 logger() { rng::fill(enabled_, true); }
    +
    36
    +
    37 void set_file(std::ofstream &fout) { fout_ = &fout; }
    +
    38
    +
    39 void filter(const std::vector<std::string> &names) {
    +
    40 if (names.size() == 0) {
    +
    41 return;
    +
    42 }
    +
    43
    +
    44 // Disable everything
    +
    45 rng::fill(enabled_, false);
    +
    46
    +
    47 // Enabled selected filters
    +
    48 for (const auto &name : names) {
    +
    49 std::size_t index = filters::last;
    +
    50 for (std::size_t i = 0; i < filter_names_.size(); i++) {
    +
    51 if (name == filter_names_[i]) {
    +
    52 index = i;
    +
    53 }
    +
    54 }
    +
    55 if (index == filters::last) {
    +
    56 std::cerr << "Ignoring unrecognized filter: " << name << "\n";
    +
    57 } else {
    +
    58 enabled_[index] = true;
    +
    59 }
    +
    60 }
    +
    61 }
    +
    62
    +
    63#ifdef DR_FORMAT
    +
    64
    +
    65 template <typename... Args>
    +
    66 void debug(const nostd::source_location &location,
    +
    67 fmt::format_string<Args...> format, Args &&...args) {
    +
    68 if (fout_ && enabled_[filters::base]) {
    +
    69 *fout_ << fmt::format(format, std::forward<Args>(args)...) << " <"
    +
    70 << location.file_name() << ":" << location.line() << ">\n";
    +
    71 fout_->flush();
    +
    72 }
    +
    73 }
    +
    74
    +
    75 template <typename... Args>
    +
    76 void debug(fmt::format_string<Args...> format, Args &&...args) {
    +
    77 debug(filters::base, format, std::forward<Args>(args)...);
    +
    78 }
    +
    79
    +
    80 template <typename... Args>
    +
    81 void debug(filters filter, fmt::format_string<Args...> format,
    +
    82 Args &&...args) {
    +
    83 if (fout_ && enabled_[filter]) {
    +
    84 *fout_ << fmt::format(format, std::forward<Args>(args)...);
    +
    85 fout_->flush();
    +
    86 }
    +
    87 }
    +
    88
    +
    89#else
    +
    90
    +
    91 template <typename... Args>
    +
    92 void debug(const nostd::source_location &location, std::string format,
    +
    93 Args &&...args) {}
    +
    94
    +
    95 template <typename... Args> void debug(std::string format, Args &&...args) {}
    +
    96
    +
    97 template <typename... Args>
    +
    98 void debug(filters filter, std::string format, Args &&...args) {}
    +
    99
    +
    100#endif
    +
    101
    +
    102private:
    +
    103 std::ofstream *fout_ = nullptr;
    +
    104 std::array<bool, filters::last> enabled_;
    +
    105 std::array<std::string, filters::last> filter_names_ = {
    +
    106 "base", "for_each", "transpose", "mdspan_view", "mpi"};
    +
    107};
    +
    108
    +
    109inline logger drlog;
    +
    110
    +
    111#define DRLOG(...) \
    +
    112 dr::drlog.debug(nostd::source_location::current(), __VA_ARGS__)
    +
    113
    +
    114} // namespace dr
    +
    Definition: index.hpp:34
    +
    Definition: logger.hpp:31
    +
    Definition: logger.hpp:18
    +
    Definition: source_location.hpp:13
    +
    + + + + diff --git a/doxygen/matrix__algorithms_8hpp_source.html b/doxygen/matrix__algorithms_8hpp_source.html new file mode 100644 index 0000000000..4fcca7b03d --- /dev/null +++ b/doxygen/matrix__algorithms_8hpp_source.html @@ -0,0 +1,93 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/algorithms/matrix/matrix_algorithms.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    matrix_algorithms.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <dr/sp/algorithms/matrix/gemm.hpp>
    +
    8#include <dr/sp/algorithms/matrix/gemv.hpp>
    +
    + + + + diff --git a/doxygen/matrix__entry_8hpp_source.html b/doxygen/matrix__entry_8hpp_source.html new file mode 100644 index 0000000000..e6b77e120a --- /dev/null +++ b/doxygen/matrix__entry_8hpp_source.html @@ -0,0 +1,318 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/containers/matrix_entry.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    matrix_entry.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <concepts>
    +
    8#include <limits>
    +
    9#include <type_traits>
    +
    10
    +
    11#include <dr/detail/index.hpp>
    +
    12
    +
    13namespace dr::sp {
    +
    14
    +
    15template <typename T, typename I = std::size_t> class matrix_entry {
    +
    16public:
    +
    17 using index_type = I;
    +
    18 using map_type = T;
    +
    19
    +
    20 matrix_entry(dr::index<I> index, const map_type &value)
    +
    21 : index_(index), value_(value) {}
    +
    22 matrix_entry(dr::index<I> index, map_type &&value)
    +
    23 : index_(index), value_(std::move(value)) {}
    +
    24
    +
    25 template <typename U>
    +
    26 requires(std::is_constructible_v<T, U>)
    + +
    28 : index_(index), value_(std::forward<U>(value)) {}
    +
    29
    +
    30 template <typename Entry>
    +
    31 matrix_entry(Entry &&entry)
    +
    32 : index_(std::get<0>(entry)), value_(std::get<1>(entry)) {}
    +
    33
    +
    34 template <std::size_t Index> auto get() const noexcept {
    +
    35 if constexpr (Index == 0) {
    +
    36 return index();
    +
    37 }
    +
    38 if constexpr (Index == 1) {
    +
    39 return value();
    +
    40 }
    +
    41 }
    +
    42
    +
    43 operator std::pair<std::pair<I, I>, T>() const noexcept {
    +
    44 return {{index_[0], index_[1]}, value_};
    +
    45 }
    +
    46
    +
    47 dr::index<I> index() const noexcept { return index_; }
    +
    48
    +
    49 map_type value() const noexcept { return value_; }
    +
    50
    +
    51 template <std::integral U>
    +
    52 requires(!std::is_same_v<I, U> &&
    +
    53 std::numeric_limits<U>::max() >= std::numeric_limits<I>::max())
    +
    54 operator matrix_entry<T, U>() const noexcept {
    +
    55 return matrix_entry<T, U>(index_, value_);
    +
    56 }
    +
    57
    +
    58 template <std::integral U>
    +
    59 requires(!std::is_const_v<T> && !std::is_same_v<I, U> &&
    +
    60 std::numeric_limits<U>::max() >= std::numeric_limits<I>::max())
    +
    61 operator matrix_entry<std::add_const_t<T>, U>() const noexcept {
    +
    62 return matrix_entry<std::add_const_t<T>, U>(index_, value_);
    +
    63 }
    +
    64
    +
    65 bool operator<(const matrix_entry &other) const noexcept {
    +
    66 if (index()[0] < other.index()[0]) {
    +
    67 return true;
    +
    68 } else if (index()[0] == other.index()[0] &&
    +
    69 index()[1] < other.index()[1]) {
    +
    70 return true;
    +
    71 }
    +
    72 return false;
    +
    73 }
    +
    74
    +
    75 matrix_entry() = default;
    +
    76 ~matrix_entry() = default;
    +
    77
    +
    78 matrix_entry(const matrix_entry &) = default;
    +
    79 matrix_entry(matrix_entry &&) = default;
    +
    80 matrix_entry &operator=(const matrix_entry &) = default;
    +
    81 matrix_entry &operator=(matrix_entry &&) = default;
    +
    82
    +
    83private:
    +
    84 dr::index<I> index_;
    +
    85 map_type value_;
    +
    86};
    +
    87
    +
    88} // namespace dr::sp
    +
    89
    +
    90namespace std {
    +
    91
    +
    92template <typename T, typename I>
    +
    93 requires(!std::is_const_v<T>)
    + + +
    96 a = b;
    +
    97 b = other;
    +
    98}
    +
    99
    +
    100template <std::size_t Index, typename T, typename I>
    +
    101struct tuple_element<Index, dr::sp::matrix_entry<T, I>>
    +
    102 : tuple_element<Index, std::tuple<dr::index<I>, T>> {};
    +
    103
    +
    104template <typename T, typename I>
    +
    105struct tuple_size<dr::sp::matrix_entry<T, I>> : integral_constant<size_t, 2> {};
    +
    106
    +
    107} // namespace std
    +
    108
    +
    109namespace dr::sp {
    +
    110
    +
    111template <typename T, typename I = std::size_t, typename TRef = T &>
    + +
    113public:
    +
    114 using scalar_type = T;
    +
    115 using index_type = I;
    +
    116
    +
    117 using key_type = dr::index<I>;
    +
    118 using map_type = T;
    +
    119
    +
    120 using scalar_reference = TRef;
    +
    121
    + +
    123
    +
    124 matrix_ref(dr::index<I> index, scalar_reference value)
    +
    125 : index_(index), value_(value) {}
    +
    126
    +
    127 operator value_type() const noexcept { return value_type(index_, value_); }
    +
    128
    +
    129 operator std::pair<std::pair<I, I>, T>() const noexcept {
    +
    130 return {{index_[0], index_[1]}, value_};
    +
    131 }
    +
    132
    +
    133 template <std::size_t Index>
    +
    134 decltype(auto) get() const noexcept
    +
    135 requires(Index <= 1)
    +
    136 {
    +
    137 if constexpr (Index == 0) {
    +
    138 return index();
    +
    139 }
    +
    140 if constexpr (Index == 1) {
    +
    141 return value();
    +
    142 }
    +
    143 }
    +
    144
    +
    145 dr::index<I> index() const noexcept { return index_; }
    +
    146
    +
    147 scalar_reference value() const noexcept { return value_; }
    +
    148
    +
    149 template <std::integral U>
    +
    150 requires(!std::is_same_v<I, U> &&
    +
    151 std::numeric_limits<U>::max() >= std::numeric_limits<I>::max())
    +
    152 operator matrix_ref<T, U, TRef>() const noexcept {
    +
    153 return matrix_ref<T, U, TRef>(index_, value_);
    +
    154 }
    +
    155
    +
    156 template <std::integral U>
    +
    157 requires(!std::is_const_v<T> && !std::is_same_v<I, U> &&
    +
    158 std::numeric_limits<U>::max() >= std::numeric_limits<I>::max())
    +
    159 operator matrix_ref<std::add_const_t<T>, U, TRef>() const noexcept {
    +
    160 return matrix_ref<std::add_const_t<T>, U, TRef>(index_, value_);
    +
    161 }
    +
    162
    +
    163 bool operator<(matrix_entry<T, I> other) const noexcept {
    +
    164 if (index()[0] < other.index()[0]) {
    +
    165 return true;
    +
    166 } else if (index()[0] == other.index()[0] &&
    +
    167 index()[1] < other.index()[1]) {
    +
    168 return true;
    +
    169 }
    +
    170 return false;
    +
    171 }
    +
    172
    +
    173 matrix_ref() = delete;
    +
    174 ~matrix_ref() = default;
    +
    175
    +
    176 matrix_ref(const matrix_ref &) = default;
    +
    177 matrix_ref &operator=(const matrix_ref &) = delete;
    +
    178 matrix_ref(matrix_ref &&) = default;
    +
    179 matrix_ref &operator=(matrix_ref &&) = default;
    +
    180
    +
    181private:
    +
    182 dr::index<I> index_;
    +
    183 scalar_reference value_;
    +
    184};
    +
    185
    +
    186} // namespace dr::sp
    +
    187
    +
    188namespace std {
    +
    189
    +
    190template <typename T, typename I, typename TRef>
    +
    191 requires(!std::is_const_v<T>)
    + + +
    194 a = b;
    +
    195 b = other;
    +
    196}
    +
    197
    +
    198template <std::size_t Index, typename T, typename I, typename TRef>
    +
    199struct tuple_element<Index, dr::sp::matrix_ref<T, I, TRef>>
    +
    200 : tuple_element<Index, std::tuple<dr::index<I>, TRef>> {};
    +
    201
    +
    202template <typename T, typename I, typename TRef>
    +
    203struct tuple_size<dr::sp::matrix_ref<T, I, TRef>>
    +
    204 : integral_constant<std::size_t, 2> {};
    +
    205
    +
    206template <std::size_t Index, typename T, typename I, typename TRef>
    +
    207inline decltype(auto) get(dr::sp::matrix_ref<T, I, TRef> ref)
    +
    208 requires(Index <= 1)
    +
    209{
    +
    210 if constexpr (Index == 0) {
    +
    211 return ref.index();
    +
    212 }
    +
    213 if constexpr (Index == 1) {
    +
    214 return ref.value();
    +
    215 }
    +
    216}
    +
    217
    +
    218template <std::size_t Index, typename T, typename I, typename TRef>
    +
    219inline decltype(auto) get(dr::sp::matrix_entry<T, I> entry)
    +
    220 requires(Index <= 1)
    +
    221{
    +
    222 if constexpr (Index == 0) {
    +
    223 return entry.index();
    +
    224 }
    +
    225 if constexpr (Index == 1) {
    +
    226 return entry.value();
    +
    227 }
    +
    228}
    +
    229
    +
    230} // namespace std
    +
    Definition: index.hpp:34
    +
    Definition: matrix_entry.hpp:15
    +
    Definition: matrix_entry.hpp:112
    +
    + + + + diff --git a/doxygen/matrix__io_8hpp_source.html b/doxygen/matrix__io_8hpp_source.html new file mode 100644 index 0000000000..9e2348c1a1 --- /dev/null +++ b/doxygen/matrix__io_8hpp_source.html @@ -0,0 +1,371 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/util/matrix_io.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    matrix_io.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <algorithm>
    +
    8#include <cassert>
    +
    9#include <fstream>
    +
    10#include <sstream>
    +
    11#include <string>
    +
    12#include <tuple>
    +
    13#include <vector>
    +
    14
    +
    15#include <dr/sp/util/coo_matrix.hpp>
    +
    16#include <dr/sp/views/csr_matrix_view.hpp>
    +
    17
    +
    18namespace dr::sp {
    +
    19
    +
    20namespace __detail {
    +
    21
    +
    22// Preconditions:
    +
    23// 1) `tuples` sorted by row, column
    +
    24// 2) `tuples` has shape `shape`
    +
    25// 3) `tuples` has `nnz` elements
    +
    26template <typename Tuples, typename Allocator>
    +
    27auto convert_to_csr(Tuples &&tuples, dr::index<> shape, std::size_t nnz,
    +
    28 Allocator &&allocator) {
    +
    29 auto &&[index, v] = *tuples.begin();
    +
    30 auto &&[i, j] = index;
    +
    31
    +
    32 using T = std::remove_reference_t<decltype(v)>;
    +
    33 using I = std::remove_reference_t<decltype(i)>;
    +
    34
    +
    35 typename std::allocator_traits<Allocator>::template rebind_alloc<I>
    +
    36 i_allocator(allocator);
    +
    37
    +
    38 T *values = allocator.allocate(nnz);
    +
    39 I *rowptr = i_allocator.allocate(shape[0] + 1);
    +
    40 I *colind = i_allocator.allocate(nnz);
    +
    41
    +
    42 rowptr[0] = 0;
    +
    43
    +
    44 std::size_t r = 0;
    +
    45 std::size_t c = 0;
    +
    46 for (auto iter = tuples.begin(); iter != tuples.end(); ++iter) {
    +
    47 auto &&[index, value] = *iter;
    +
    48 auto &&[i, j] = index;
    +
    49
    +
    50 values[c] = value;
    +
    51 colind[c] = j;
    +
    52
    +
    53 while (r < i) {
    +
    54 assert(r + 1 <= shape[0]);
    +
    55 // throw std::runtime_error("csr_matrix_impl_: given invalid matrix");
    +
    56 rowptr[r + 1] = c;
    +
    57 r++;
    +
    58 }
    +
    59 c++;
    +
    60
    +
    61 assert(c <= nnz);
    +
    62 // throw std::runtime_error("csr_matrix_impl_: given invalid matrix");
    +
    63 }
    +
    64
    +
    65 for (; r < shape[0]; r++) {
    +
    66 rowptr[r + 1] = nnz;
    +
    67 }
    +
    68
    +
    69 return csr_matrix_view(values, rowptr, colind,
    +
    70 dr::index<I>(shape[0], shape[1]), nnz, 0);
    +
    71}
    +
    72
    +
    75template <typename T, typename I = std::size_t>
    +
    76inline coo_matrix<T, I> mmread(std::string file_path, bool one_indexed = true) {
    +
    77 using size_type = std::size_t;
    +
    78
    +
    79 std::ifstream f;
    +
    80
    +
    81 f.open(file_path.c_str());
    +
    82
    +
    83 if (!f.is_open()) {
    +
    84 // TODO better choice of exception.
    +
    85 throw std::runtime_error("mmread: cannot open " + file_path);
    +
    86 }
    +
    87
    +
    88 std::string buf;
    +
    89
    +
    90 // Make sure the file is matrix market matrix, coordinate, and check whether
    +
    91 // it is symmetric. If the matrix is symmetric, non-diagonal elements will
    +
    92 // be inserted in both (i, j) and (j, i). Error out if skew-symmetric or
    +
    93 // Hermitian.
    +
    94 std::getline(f, buf);
    +
    95 std::istringstream ss(buf);
    +
    96 std::string item;
    +
    97 ss >> item;
    +
    98 if (item != "%%MatrixMarket") {
    +
    99 throw std::runtime_error(file_path +
    +
    100 " could not be parsed as a Matrix Market file.");
    +
    101 }
    +
    102 ss >> item;
    +
    103 if (item != "matrix") {
    +
    104 throw std::runtime_error(file_path +
    +
    105 " could not be parsed as a Matrix Market file.");
    +
    106 }
    +
    107 ss >> item;
    +
    108 if (item != "coordinate") {
    +
    109 throw std::runtime_error(file_path +
    +
    110 " could not be parsed as a Matrix Market file.");
    +
    111 }
    +
    112 bool pattern;
    +
    113 ss >> item;
    +
    114 if (item == "pattern") {
    +
    115 pattern = true;
    +
    116 } else {
    +
    117 pattern = false;
    +
    118 }
    +
    119 // TODO: do something with real vs. integer vs. pattern?
    +
    120 ss >> item;
    +
    121 bool symmetric;
    +
    122 if (item == "general") {
    +
    123 symmetric = false;
    +
    124 } else if (item == "symmetric") {
    +
    125 symmetric = true;
    +
    126 } else {
    +
    127 throw std::runtime_error(file_path + " has an unsupported matrix type");
    +
    128 }
    +
    129
    +
    130 bool outOfComments = false;
    +
    131 while (!outOfComments) {
    +
    132 std::getline(f, buf);
    +
    133
    +
    134 if (buf[0] != '%') {
    +
    135 outOfComments = true;
    +
    136 }
    +
    137 }
    +
    138
    +
    139 I m, n, nnz;
    +
    140 // std::istringstream ss(buf);
    +
    141 ss.clear();
    +
    142 ss.str(buf);
    +
    143 ss >> m >> n >> nnz;
    +
    144
    +
    145 // NOTE for symmetric matrices: `nnz` holds the number of stored values in
    +
    146 // the matrix market file, while `matrix.nnz_` will hold the total number of
    +
    147 // stored values (including "mirrored" symmetric values).
    +
    148 coo_matrix<T, I> matrix({m, n});
    +
    149 if (symmetric) {
    +
    150 matrix.reserve(2 * nnz);
    +
    151 } else {
    +
    152 matrix.reserve(nnz);
    +
    153 }
    +
    154
    +
    155 size_type c = 0;
    +
    156 while (std::getline(f, buf)) {
    +
    157 I i, j;
    +
    158 T v;
    +
    159 std::istringstream ss(buf);
    +
    160 if (!pattern) {
    +
    161 ss >> i >> j >> v;
    +
    162 } else {
    +
    163 ss >> i >> j;
    +
    164 v = T(1);
    +
    165 }
    +
    166 if (one_indexed) {
    +
    167 i--;
    +
    168 j--;
    +
    169 }
    +
    170
    +
    171 if (i >= m || j >= n) {
    +
    172 throw std::runtime_error(
    +
    173 "read_MatrixMarket: file has nonzero out of bounds.");
    +
    174 }
    +
    175
    +
    176 matrix.push_back({{i, j}, v});
    +
    177
    +
    178 if (symmetric && i != j) {
    +
    179 matrix.push_back({{j, i}, v});
    +
    180 }
    +
    181
    +
    182 c++;
    +
    183 if (c > nnz) {
    +
    184 throw std::runtime_error("read_MatrixMarket: error reading Matrix Market "
    +
    185 "file, file has more nonzeros than reported.");
    +
    186 }
    +
    187 }
    +
    188
    +
    189 auto sort_fn = [](const auto &a, const auto &b) {
    +
    190 auto &&[a_index, a_value] = a;
    +
    191 auto &&[b_index, b_value] = b;
    +
    192 auto &&[a_i, a_j] = a_index;
    +
    193 auto &&[b_i, b_j] = b_index;
    +
    194 if (a_i < b_i) {
    +
    195 return true;
    +
    196 } else if (a_i == b_i) {
    +
    197 if (a_j < b_j) {
    +
    198 return true;
    +
    199 }
    +
    200 }
    +
    201 return false;
    +
    202 };
    +
    203
    +
    204 std::sort(matrix.begin(), matrix.end(), sort_fn);
    +
    205
    +
    206 f.close();
    +
    207
    +
    208 return matrix;
    +
    209}
    +
    210
    +
    211template <typename T, typename I, typename Allocator, typename... Args>
    +
    212void destroy_csr_matrix_view(dr::sp::csr_matrix_view<T, I, Args...> view,
    +
    213 Allocator &&alloc) {
    +
    214 alloc.deallocate(view.values_data(), view.size());
    +
    215 typename std::allocator_traits<Allocator>::template rebind_alloc<I> i_alloc(
    +
    216 alloc);
    +
    217 i_alloc.deallocate(view.colind_data(), view.size());
    +
    218 i_alloc.deallocate(view.rowptr_data(), view.shape()[0] + 1);
    +
    219}
    +
    220
    +
    221} // namespace __detail
    +
    222
    +
    223template <typename T, typename I>
    +
    224auto create_distributed(dr::sp::csr_matrix_view<T, I> local_mat,
    +
    225 const matrix_partition &partition) {
    +
    226 dr::sp::sparse_matrix<T, I> a(local_mat.shape(), partition);
    +
    227
    +
    228 std::vector<dr::sp::csr_matrix_view<T, I>> views;
    +
    229 std::vector<sycl::event> events;
    +
    230 views.reserve(a.grid_shape()[0] * a.grid_shape()[1]);
    +
    231
    +
    232 for (I i = 0; i < a.grid_shape()[0]; i++) {
    +
    233 for (I j = 0; j < a.grid_shape()[1]; j++) {
    +
    234 auto &&tile = a.tile({i, j});
    +
    235 dr::index<I> row_bounds(i * a.tile_shape()[0],
    +
    236 i * a.tile_shape()[0] + tile.shape()[0]);
    +
    237 dr::index<I> column_bounds(j * a.tile_shape()[1],
    +
    238 j * a.tile_shape()[1] + tile.shape()[1]);
    +
    239
    +
    240 auto local_submat = local_mat.submatrix(row_bounds, column_bounds);
    +
    241
    +
    242 auto submatrix_shape = dr::index<I>(row_bounds[1] - row_bounds[0],
    +
    243 column_bounds[1] - column_bounds[0]);
    +
    244
    +
    245 auto copied_submat = __detail::convert_to_csr(
    +
    246 local_submat, submatrix_shape, rng::distance(local_submat),
    +
    247 std::allocator<T>{});
    +
    248
    +
    249 auto e = a.copy_tile_async({i, j}, copied_submat);
    +
    250
    +
    251 views.push_back(copied_submat);
    +
    252 events.push_back(e);
    +
    253 }
    +
    254 }
    +
    255 __detail::wait(events);
    +
    256
    +
    257 for (auto &&view : views) {
    +
    258 __detail::destroy_csr_matrix_view(view, std::allocator<T>{});
    +
    259 }
    +
    260
    +
    261 return a;
    +
    262}
    +
    263
    +
    264template <typename T, typename I = std::size_t>
    +
    265auto mmread(std::string file_path, const matrix_partition &partition,
    +
    266 bool one_indexed = true) {
    +
    267 auto m = __detail::mmread<T, I>(file_path, one_indexed);
    +
    268 auto shape = m.shape();
    +
    269 auto nnz = m.size();
    +
    270
    +
    271 auto local_mat = __detail::convert_to_csr(m, shape, nnz, std::allocator<T>{});
    +
    272
    +
    273 auto a = create_distributed(local_mat, partition);
    +
    274
    +
    275 __detail::destroy_csr_matrix_view(local_mat, std::allocator<T>{});
    +
    276
    +
    277 return a;
    +
    278}
    +
    279
    +
    280template <typename T, typename I = std::size_t>
    +
    281auto mmread(std::string file_path, bool one_indexed = true) {
    +
    282 return mmread<T, I>(file_path, dr::sp::row_cyclic(), one_indexed);
    +
    283}
    +
    284
    +
    285} // namespace dr::sp
    +
    Definition: index.hpp:34
    +
    Definition: csr_matrix_view.hpp:126
    +
    Definition: sparse_matrix.hpp:135
    +
    + + + + diff --git a/doxygen/matrix__partition_8hpp_source.html b/doxygen/matrix__partition_8hpp_source.html new file mode 100644 index 0000000000..413f06e2f4 --- /dev/null +++ b/doxygen/matrix__partition_8hpp_source.html @@ -0,0 +1,207 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/containers/matrix_partition.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    matrix_partition.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <dr/detail/index.hpp>
    +
    8#include <dr/sp/containers/detail.hpp>
    +
    9#include <dr/sp/init.hpp>
    +
    10
    +
    11namespace dr::sp {
    +
    12
    +
    13namespace tile {
    +
    14
    +
    15// Special constant to indicate tile dimensions of
    +
    16// {ceil(m / p_m), ceil(n / p_n)} should be chosen
    +
    17// in order to evenly divide a dimension amongst the
    +
    18// ranks in the processor grid.
    +
    19inline constexpr std::size_t div = std::numeric_limits<std::size_t>::max();
    +
    20
    +
    21} // namespace tile
    +
    22
    + +
    24public:
    +
    25 virtual std::size_t tile_rank(dr::index<> matrix_shape,
    +
    26 dr::index<> tile_id) const = 0;
    +
    27 virtual dr::index<> grid_shape(dr::index<> matrix_shape) const = 0;
    +
    28 virtual dr::index<> tile_shape(dr::index<> matrix_shape) const = 0;
    +
    29
    +
    30 virtual std::unique_ptr<matrix_partition> clone() const = 0;
    +
    31 virtual ~matrix_partition(){};
    +
    32};
    +
    33
    +
    34class block_cyclic final : public matrix_partition {
    +
    35public:
    +
    36 block_cyclic(dr::index<> tile_shape = {dr::sp::tile::div, dr::sp::tile::div},
    +
    37 dr::index<> grid_shape = detail::factor(dr::sp::nprocs()))
    +
    38 : tile_shape_(tile_shape), grid_shape_(grid_shape) {}
    +
    39
    +
    40 block_cyclic(const block_cyclic &) noexcept = default;
    +
    41
    +
    42 dr::index<> tile_shape() const { return tile_shape_; }
    +
    43
    +
    44 std::size_t tile_rank(dr::index<> matrix_shape, dr::index<> tile_id) const {
    +
    45 dr::index<> pgrid_idx = {tile_id[0] % grid_shape_[0],
    +
    46 tile_id[1] % grid_shape_[1]};
    +
    47
    +
    48 auto pgrid = processor_grid_();
    +
    49
    +
    50 return pgrid[pgrid_idx[0] * grid_shape_[1] + pgrid_idx[1]];
    +
    51 }
    +
    52
    +
    53 dr::index<> grid_shape(dr::index<> matrix_shape) const {
    +
    54 auto ts = this->tile_shape(matrix_shape);
    +
    55
    +
    56 return dr::index<>((matrix_shape[0] + ts[0] - 1) / ts[0],
    +
    57 (matrix_shape[1] + ts[1] - 1) / ts[1]);
    +
    58 }
    +
    59
    +
    60 dr::index<> tile_shape(dr::index<> matrix_shape) const {
    +
    61 std::array<std::size_t, 2> tshape = {tile_shape_[0], tile_shape_[1]};
    +
    62
    +
    63 constexpr std::size_t ndims = 2;
    +
    64 for (std::size_t i = 0; i < ndims; i++) {
    +
    65 if (tshape[i] == dr::sp::tile::div) {
    +
    66 tshape[i] = (matrix_shape[i] + grid_shape_[i] - 1) / grid_shape_[i];
    +
    67 }
    +
    68 }
    +
    69
    +
    70 return tshape;
    +
    71 }
    +
    72
    +
    73 std::unique_ptr<matrix_partition> clone() const noexcept {
    +
    74 return std::unique_ptr<matrix_partition>(new block_cyclic(*this));
    +
    75 }
    +
    76
    +
    77private:
    +
    78 std::vector<std::size_t> processor_grid_() const {
    +
    79 std::vector<std::size_t> grid(grid_shape_[0] * grid_shape_[1]);
    +
    80
    +
    81 for (std::size_t i = 0; i < grid.size(); i++) {
    +
    82 grid[i] = i;
    +
    83 }
    +
    84 return grid;
    +
    85 }
    +
    86
    +
    87 dr::index<> tile_shape_;
    +
    88 dr::index<> grid_shape_;
    +
    89};
    +
    90
    +
    91inline auto row_cyclic() {
    +
    92 return block_cyclic({dr::sp::tile::div, dr::sp::tile::div},
    +
    93 {dr::sp::nprocs(), 1});
    +
    94}
    +
    95
    +
    96inline std::vector<block_cyclic> partition_matmul(std::size_t m, std::size_t n,
    +
    97 std::size_t k) {
    +
    98 dr::index<> c_pgrid = detail::factor(sp::nprocs());
    +
    99
    +
    100 block_cyclic c_block({dr::sp::tile::div, dr::sp::tile::div},
    +
    101 {c_pgrid[0], c_pgrid[1]});
    +
    102
    +
    103 std::size_t k_block;
    +
    104
    +
    105 if (m * k >= k * n) {
    +
    106 k_block = (sp::nprocs() + c_pgrid[0] - 1) / c_pgrid[0];
    +
    107 } else {
    +
    108 k_block = (sp::nprocs() + c_pgrid[1] - 1) / c_pgrid[1];
    +
    109 }
    +
    110
    +
    111 block_cyclic a_block({dr::sp::tile::div, dr::sp::tile::div},
    +
    112 {c_pgrid[0], k_block});
    +
    113 block_cyclic b_block({dr::sp::tile::div, dr::sp::tile::div},
    +
    114 {k_block, c_pgrid[1]});
    +
    115
    +
    116 return {a_block, b_block, c_block};
    +
    117}
    +
    118
    +
    119} // namespace dr::sp
    +
    Definition: index.hpp:34
    +
    Definition: matrix_partition.hpp:34
    +
    Definition: matrix_partition.hpp:23
    +
    + + + + diff --git a/doxygen/md__for__each_8hpp_source.html b/doxygen/md__for__each_8hpp_source.html new file mode 100644 index 0000000000..5ccb4852e0 --- /dev/null +++ b/doxygen/md__for__each_8hpp_source.html @@ -0,0 +1,308 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/algorithms/md_for_each.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    md_for_each.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <algorithm>
    +
    8#include <execution>
    +
    9#include <type_traits>
    +
    10#include <utility>
    +
    11
    +
    12#include <dr/concepts/concepts.hpp>
    +
    13#include <dr/detail/logger.hpp>
    +
    14#include <dr/detail/onedpl_direct_iterator.hpp>
    +
    15#include <dr/detail/ranges_shim.hpp>
    +
    16#include <dr/detail/tuple_utils.hpp>
    +
    17#include <dr/mp/global.hpp>
    +
    18
    +
    19namespace dr::mp::__detail {
    +
    20
    +
    21struct any {
    +
    22 template <typename T> operator T() const noexcept {
    +
    23 return std::declval<T>();
    +
    24 }
    +
    25};
    +
    26
    +
    27template <typename F, typename Arg1>
    +
    28concept one_argument = requires(F &f) {
    +
    29 { f(Arg1{}) };
    +
    30};
    +
    31
    +
    32template <typename F, typename Arg1, typename Arg2>
    +
    33concept two_arguments = requires(F &f) {
    +
    34 { f(Arg1{}, Arg2{}) };
    +
    35};
    +
    36
    +
    37}; // namespace dr::mp::__detail
    +
    38
    +
    39namespace dr::mp {
    +
    40
    +
    41namespace detail = dr::__detail;
    +
    42
    +
    44template <typename... Ts>
    +
    45void stencil_for_each(auto op, is_mdspan_view auto &&...drs) {
    +
    46 auto ranges = std::tie(drs...);
    +
    47 auto &&dr0 = std::get<0>(ranges);
    +
    48 if (rng::empty(dr0)) {
    +
    49 return;
    +
    50 }
    +
    51
    +
    52 auto all_segments = rng::views::zip(dr::ranges::segments(drs)...);
    +
    53 for (auto segs : all_segments) {
    +
    54 auto seg0 = std::get<0>(segs);
    +
    55 auto mdspan0 = seg0.mdspan();
    +
    56
    +
    57 // If local
    +
    58 if (dr::ranges::rank(seg0) == default_comm().rank()) {
    +
    59 // Calculate loop invariant info about the operands. Use a tuple
    +
    60 // to hold the info for all operands.
    +
    61 auto operand_infos = detail::tuple_transform(segs, [](auto &&seg) {
    +
    62 // mdspan for tile. This could be a submdspan, so we need the
    +
    63 // extents of the root to get the memory strides
    +
    64 return std::make_pair(seg.mdspan(), seg.root_mdspan().extents());
    +
    65 });
    +
    66
    +
    67 if (mp::use_sycl()) {
    +
    68#ifdef SYCL_LANGUAGE_VERSION
    +
    69 auto do_point = [=](auto index) {
    +
    70 // Transform operand_infos into stencils
    +
    71 auto stencils =
    +
    72 detail::tuple_transform(operand_infos, [=](auto info) {
    +
    73 return md::mdspan(
    +
    74 std::to_address(&info.first(index[0], index[1])),
    +
    75 info.second);
    +
    76 });
    +
    77 op(stencils);
    +
    78 };
    +
    79 // TODO: Extend sycl_utils.hpp to handle ranges > 1D. It uses
    +
    80 // ndrange and handles > 32 bits.
    +
    81 dr::__detail::parallel_for(
    +
    82 mp::sycl_queue(), sycl::range(mdspan0.extent(0), mdspan0.extent(1)),
    +
    83 do_point)
    +
    84 .wait();
    +
    85#else
    +
    86 assert(false);
    +
    87#endif
    +
    88 } else {
    +
    89 // Given an index, invoke op on a tuple of stencils
    +
    90 auto invoke_index = [=](auto index) {
    +
    91 // Transform operand_infos into stencils
    +
    92 auto stencils =
    +
    93 detail::tuple_transform(operand_infos, [=](auto info) {
    +
    94 return md::mdspan(std::to_address(&info.first(index)),
    +
    95 info.second);
    +
    96 });
    +
    97 op(stencils);
    +
    98 };
    +
    99#if 0
    +
    100 // Does not vectorize. Something about loop index being forced into memory
    +
    101 detail::mdspan_foreach<mdspan0.rank(), decltype(invoke_index)>(
    +
    102 mdspan0.extents(), invoke_index);
    +
    103#else
    +
    104 for (std::size_t i = 0; i < mdspan0.extents().extent(0); i++) {
    +
    105 for (std::size_t j = 0; j < mdspan0.extents().extent(1); j++) {
    +
    106 invoke_index(std::array<std::size_t, 2>{i, j});
    +
    107 }
    +
    108 }
    +
    109#endif
    +
    110 }
    +
    111 }
    +
    112 }
    +
    113
    +
    114 barrier();
    +
    115}
    +
    116
    +
    118template <typename F, typename... Ts>
    +
    119void for_each(F op, is_mdspan_view auto &&...drs) {
    +
    120 auto ranges = std::tie(drs...);
    +
    121 auto &&dr0 = std::get<0>(ranges);
    +
    122 if (rng::empty(dr0)) {
    +
    123 return;
    +
    124 }
    +
    125
    +
    126 auto all_segments = rng::views::zip(dr::ranges::segments(drs)...);
    +
    127 for (auto segs : all_segments) {
    +
    128 auto seg0 = std::get<0>(segs);
    +
    129 auto mdspan0 = seg0.mdspan();
    +
    130
    +
    131 // If local
    +
    132 if (dr::ranges::rank(seg0) == default_comm().rank()) {
    +
    133 auto origin = seg0.origin();
    +
    134
    +
    135 // make a tuple of mdspans
    +
    136 auto operand_mdspans = detail::tuple_transform(
    +
    137 segs, [](auto &&seg) { return seg.mdspan(); });
    +
    138
    +
    139 if (mp::use_sycl()) {
    +
    140#ifdef SYCL_LANGUAGE_VERSION
    +
    141 //
    +
    142 auto invoke_index = [=](auto index) {
    +
    143 // Transform mdspans into references
    +
    144 auto references = detail::tie_transform(
    +
    145 operand_mdspans, [mdspan0, index](auto mdspan) -> decltype(auto) {
    +
    146 static_assert(1 <= mdspan0.rank() && mdspan0.rank() <= 3);
    +
    147 if constexpr (mdspan0.rank() == 1) {
    +
    148 return mdspan(index[0]);
    +
    149 } else if constexpr (mdspan0.rank() == 2) {
    +
    150 return mdspan(index[0], index[1]);
    +
    151 } else if constexpr (mdspan0.rank() == 3) {
    +
    152 return mdspan(index[0], index[1], index[2]);
    +
    153 }
    +
    154 });
    +
    155 static_assert(
    +
    156 std::invocable<F, decltype(references)> ||
    +
    157 std::invocable<F, decltype(index), decltype(references)>);
    +
    158 if constexpr (std::invocable<F, decltype(references)>) {
    +
    159 op(references);
    +
    160 } else {
    +
    161 auto global_index = index;
    +
    162 for (std::size_t i = 0; i < rng::size(global_index); i++) {
    +
    163 global_index[i] += origin[i];
    +
    164 }
    +
    165
    +
    166 op(global_index, references);
    +
    167 }
    +
    168 };
    +
    169
    +
    170 if constexpr (mdspan0.rank() == 1) {
    +
    171 auto range = sycl::range(mdspan0.extent(0));
    +
    172 dr::__detail::parallel_for(mp::sycl_queue(), range, invoke_index)
    +
    173 .wait();
    +
    174 } else if constexpr (mdspan0.rank() == 2) {
    +
    175 auto range = sycl::range(mdspan0.extent(0), mdspan0.extent(1));
    +
    176 dr::__detail::parallel_for(mp::sycl_queue(), range, invoke_index)
    +
    177 .wait();
    +
    178 } else if constexpr (mdspan0.rank() == 3) {
    +
    179 auto range = sycl::range(mdspan0.extent(0), mdspan0.extent(1),
    +
    180 mdspan0.extent(2));
    +
    181 dr::__detail::parallel_for(mp::sycl_queue(), range, invoke_index)
    +
    182 .wait();
    +
    183 }
    +
    184#else
    +
    185 assert(false);
    +
    186#endif
    +
    187 } else {
    +
    188 // invoke op on a tuple of references created by using the mdspan's and
    +
    189 // index
    +
    190 auto invoke_index = [=](auto index) {
    +
    191 // Transform operand_infos into references
    +
    192 auto references = detail::tie_transform(
    +
    193 operand_mdspans,
    +
    194 [index](auto mdspan) -> decltype(auto) { return mdspan(index); });
    +
    195 static_assert(
    +
    196 std::invocable<F, decltype(references)> ||
    +
    197 std::invocable<F, decltype(index), decltype(references)>);
    +
    198 if constexpr (std::invocable<F, decltype(references)>) {
    +
    199 op(references);
    +
    200 } else if constexpr (std::invocable<F, decltype(index),
    +
    201 decltype(references)>) {
    +
    202 auto global_index = index;
    +
    203 for (std::size_t i = 0; i < rng::size(global_index); i++) {
    +
    204 global_index[i] += origin[i];
    +
    205 }
    +
    206
    +
    207 op(global_index, references);
    +
    208 } else {
    +
    209 assert(false);
    +
    210 }
    +
    211 };
    +
    212 detail::mdspan_foreach<mdspan0.rank(), decltype(invoke_index)>(
    +
    213 mdspan0.extents(), invoke_index);
    +
    214 }
    +
    215 }
    +
    216 }
    +
    217
    +
    218 barrier();
    +
    219}
    +
    220
    +
    221} // namespace dr::mp
    +
    Definition: md_for_each.hpp:28
    +
    Definition: md_for_each.hpp:33
    +
    Definition: mdspan_view.hpp:206
    +
    Definition: md_for_each.hpp:21
    +
    + + + + diff --git a/doxygen/mdarray__shim_8hpp_source.html b/doxygen/mdarray__shim_8hpp_source.html new file mode 100644 index 0000000000..22ab55f3ac --- /dev/null +++ b/doxygen/mdarray__shim_8hpp_source.html @@ -0,0 +1,92 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/detail/mdarray_shim.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    mdarray_shim.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <experimental/mdarray>
    +
    + + + + diff --git a/doxygen/mdspan__shim_8hpp_source.html b/doxygen/mdspan__shim_8hpp_source.html new file mode 100644 index 0000000000..2acd681b28 --- /dev/null +++ b/doxygen/mdspan__shim_8hpp_source.html @@ -0,0 +1,94 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/detail/mdspan_shim.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    mdspan_shim.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <experimental/mdspan>
    +
    8#define MDSPAN_NAMESPACE std::experimental
    +
    9namespace md = MDSPAN_NAMESPACE;
    +
    + + + + diff --git a/doxygen/mdspan__utils_8hpp_source.html b/doxygen/mdspan__utils_8hpp_source.html new file mode 100644 index 0000000000..e6acb32b79 --- /dev/null +++ b/doxygen/mdspan__utils_8hpp_source.html @@ -0,0 +1,427 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/detail/mdspan_utils.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    mdspan_utils.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <dr/detail/mdspan_shim.hpp>
    +
    8
    +
    9namespace dr::__detail {
    +
    10
    +
    11template <std::size_t Rank> auto dims(md::dextents<std::size_t, Rank> extents) {
    +
    12 if constexpr (Rank == 1) {
    +
    13 return std::tuple(extents.extent(0));
    +
    14 } else if constexpr (Rank == 2) {
    +
    15 return std::tuple(extents.extent(0), extents.extent(1));
    +
    16 } else if constexpr (Rank == 3) {
    +
    17 return std::tuple(extents.extent(0), extents.extent(1), extents.extent(2));
    +
    18 } else {
    +
    19 assert(false);
    +
    20 }
    +
    21}
    +
    22
    +
    23template <typename Index> auto shape_to_strides(const Index &shape) {
    +
    24 const std::size_t rank = rng::size(shape);
    +
    25 Index strides;
    +
    26 strides[rank - 1] = 1;
    +
    27 for (std::size_t i = 1; i < rank; i++) {
    +
    28 strides[rank - i - 1] = strides[rank - i] * shape[rank - i];
    +
    29 }
    +
    30 return strides;
    +
    31}
    +
    32
    +
    33template <typename Index>
    +
    34auto linear_to_index(std::size_t linear, const Index &shape) {
    +
    35 Index index, strides(shape_to_strides(shape));
    +
    36
    +
    37 for (std::size_t i = 0; i < rng::size(shape); i++) {
    +
    38 index[i] = linear / strides[i];
    +
    39 linear = linear % strides[i];
    +
    40 }
    +
    41
    +
    42 return index;
    +
    43}
    +
    44
    +
    45template <typename Mdspan>
    +
    46concept mdspan_like = requires(Mdspan &mdspan) {
    +
    47 mdspan.rank();
    +
    48 mdspan.extents();
    +
    49};
    +
    50
    +
    51template <typename Mdarray>
    +
    52concept mdarray_like = requires(Mdarray &mdarray) { mdarray.to_mdspan(); };
    +
    53
    +
    54template <std::size_t Rank> using dr_extents = std::array<std::size_t, Rank>;
    +
    55template <std::size_t Rank> using md_extents = md::dextents<std::size_t, Rank>;
    +
    56
    +
    57//
    +
    58// Mdspan accessor using an iterator
    +
    59//
    +
    60template <std::random_access_iterator Iter> class mdspan_iter_accessor {
    +
    61public:
    +
    62 using data_handle_type = Iter;
    +
    63 using reference = std::iter_reference_t<Iter>;
    + +
    65
    +
    66 constexpr mdspan_iter_accessor() noexcept = default;
    +
    67 constexpr auto access(Iter iter, std::size_t index) const {
    +
    68 return iter[index];
    +
    69 }
    +
    70
    +
    71 constexpr auto offset(Iter iter, std::size_t index) const noexcept {
    +
    72 return iter + index;
    +
    73 }
    +
    74};
    +
    75
    +
    76template <typename M, std::size_t Rank, std::size_t... indexes>
    +
    77auto make_submdspan_impl(M mdspan, const dr_extents<Rank> &starts,
    +
    78 const dr_extents<Rank> &ends,
    +
    79 std::index_sequence<indexes...>) {
    +
    80 return md::submdspan(mdspan, std::tuple(starts[indexes], ends[indexes])...);
    +
    81}
    +
    82
    +
    83// Mdspan accepts slices, but that is hard to work with because it
    +
    84// requires parameter packs. Work with starts/size vectors internally
    +
    85// and use slices at the interface
    +
    86template <std::size_t Rank>
    +
    87auto make_submdspan(auto mdspan, const std::array<std::size_t, Rank> &starts,
    +
    88 const std::array<std::size_t, Rank> &ends) {
    +
    89 return make_submdspan_impl(mdspan, starts, ends,
    +
    90 std::make_index_sequence<Rank>{});
    +
    91}
    +
    92
    +
    93template <std::size_t Rank, typename Op>
    +
    94void mdspan_foreach(md_extents<Rank> extents, Op op,
    +
    95 dr_extents<Rank> index = dr_extents<Rank>(),
    +
    96 std::size_t rank = 0) {
    +
    97 for (index[rank] = 0; index[rank] < extents.extent(rank); index[rank]++) {
    +
    98 if (rank == Rank - 1) {
    +
    99 op(index);
    +
    100 } else {
    +
    101 mdspan_foreach(extents, op, index, rank + 1);
    +
    102 }
    +
    103 }
    +
    104}
    +
    105
    +
    106// Pack mdspan into contiguous container
    +
    107template <mdspan_like Src>
    +
    108auto mdspan_copy(Src src, std::forward_iterator auto dst) {
    +
    109 __detail::event event;
    +
    110
    +
    111 constexpr std::size_t rank = std::remove_cvref_t<Src>::rank();
    +
    112 if (rank >= 2 && rank <= 3 && mp::use_sycl()) {
    +
    113#ifdef SYCL_LANGUAGE_VERSION
    +
    114 constexpr std::size_t rank = std::remove_cvref_t<Src>::rank();
    +
    115 if constexpr (rank == 2) {
    +
    116 event = dr::__detail::parallel_for(
    +
    117 dr::mp::sycl_queue(), sycl::range(src.extent(0), src.extent(1)),
    +
    118 [src, dst](auto idx) {
    +
    119 dst[idx[0] * src.extent(1) + idx[1]] = src(idx);
    +
    120 });
    +
    121 } else if constexpr (rank == 3) {
    +
    122 event = dr::__detail::parallel_for(
    +
    123 dr::mp::sycl_queue(),
    +
    124 sycl::range(src.extent(0), src.extent(1), src.extent(2)),
    +
    125 [src, dst](auto idx) {
    +
    126 dst[idx[0] * src.extent(1) * src.extent(2) +
    +
    127 idx[1] * src.extent(2) + idx[2]] = src(idx);
    +
    128 });
    +
    129 } else {
    +
    130 assert(false);
    +
    131 }
    +
    132#endif
    +
    133 } else {
    +
    134 auto pack = [src, &dst](auto index) { *dst++ = src(index); };
    +
    135 mdspan_foreach<src.rank(), decltype(pack)>(src.extents(), pack);
    +
    136 }
    +
    137
    +
    138 return event;
    +
    139}
    +
    140
    +
    141// unpack contiguous container into mdspan
    +
    142template <mdspan_like Dst>
    +
    143auto mdspan_copy(std::forward_iterator auto src, Dst dst) {
    +
    144 __detail::event event;
    +
    145
    +
    146 constexpr std::size_t rank = std::remove_cvref_t<Dst>::rank();
    +
    147 if (rank >= 2 && rank <= 3 && mp::use_sycl()) {
    +
    148#ifdef SYCL_LANGUAGE_VERSION
    +
    149 if constexpr (rank == 2) {
    +
    150 event = dr::__detail::parallel_for(
    +
    151 dr::mp::sycl_queue(), sycl::range(dst.extent(0), dst.extent(1)),
    +
    152 [src, dst](auto idx) {
    +
    153 dst(idx) = src[idx[0] * dst.extent(1) + idx[1]];
    +
    154 });
    +
    155 } else if constexpr (rank == 3) {
    +
    156 event = dr::__detail::parallel_for(
    +
    157 dr::mp::sycl_queue(),
    +
    158 sycl::range(dst.extent(0), dst.extent(1), dst.extent(2)),
    +
    159 [src, dst](auto idx) {
    +
    160 dst(idx) = src[idx[0] * dst.extent(1) * dst.extent(2) +
    +
    161 idx[1] * dst.extent(2) + idx[2]];
    +
    162 });
    +
    163 } else {
    +
    164 assert(false);
    +
    165 }
    +
    166#endif
    +
    167 } else {
    +
    168 auto unpack = [&src, dst](auto index) { dst(index) = *src++; };
    +
    169 mdspan_foreach<dst.rank(), decltype(unpack)>(dst.extents(), unpack);
    +
    170 }
    +
    171
    +
    172 return event;
    +
    173}
    +
    174
    +
    175// copy mdspan to mdspan
    +
    176auto mdspan_copy(mdspan_like auto src, mdspan_like auto dst) {
    +
    177 __detail::event event;
    +
    178
    +
    179 assert(src.extents() == dst.extents());
    +
    180
    +
    181 constexpr std::size_t rank = std::remove_cvref_t<decltype(src)>::rank();
    +
    182 if (rank >= 2 && rank <= 3 && mp::use_sycl()) {
    +
    183#ifdef SYCL_LANGUAGE_VERSION
    +
    184 dr::drlog.debug("mdspan_copy using sycl\n");
    +
    185 if constexpr (rank == 2) {
    +
    186 event = dr::__detail::parallel_for(
    +
    187 dr::mp::sycl_queue(), sycl::range(dst.extent(0), dst.extent(1)),
    +
    188 [src, dst](auto idx) { dst(idx) = src(idx); });
    +
    189 } else if constexpr (rank == 3) {
    +
    190 event = dr::__detail::parallel_for(
    +
    191 dr::mp::sycl_queue(),
    +
    192 sycl::range(dst.extent(0), dst.extent(1), dst.extent(2)),
    +
    193 [src, dst](auto idx) { dst(idx) = src(idx); });
    +
    194 } else {
    +
    195 assert(false);
    +
    196 }
    +
    197#endif
    +
    198 } else {
    +
    199
    +
    200 auto copy = [src, dst](auto index) { dst(index) = src(index); };
    +
    201 mdspan_foreach<src.rank(), decltype(copy)>(src.extents(), copy);
    +
    202 }
    +
    203
    +
    204 return event;
    +
    205}
    +
    206
    +
    207// For operator(), rearrange indices according to template arguments.
    +
    208//
    +
    209// For mdtranspose<mdspan3d, 2, 0, 1> a(b);
    +
    210//
    +
    211// a(1, 2, 3) references b(3, 1, 2)
    +
    212//
    +
    213template <typename Mdspan, std::size_t... Is>
    +
    214class mdtranspose : public Mdspan {
    +
    215private:
    +
    216 static constexpr std::size_t rank_ = Mdspan::rank();
    +
    217
    +
    218public:
    +
    219 // Inherit constructors from base class
    +
    220 mdtranspose(Mdspan &mdspan) : Mdspan(mdspan) {}
    +
    221
    +
    222 // rearrange indices according to template arguments
    +
    223 template <std::integral... Indexes>
    +
    224 auto &operator()(Indexes... indexes) const {
    +
    225 std::tuple index(indexes...);
    +
    226 return Mdspan::operator()(std::get<Is>(index)...);
    +
    227 }
    +
    228 auto &operator()(std::array<std::size_t, rank_> index) const {
    +
    229 return Mdspan::operator()(index[Is]...);
    +
    230 }
    +
    231
    +
    232 auto extents() const {
    +
    233 // To get the extents, we must invert the index mapping
    +
    234 std::array<std::size_t, rank_> from_transposed({Is...});
    +
    235 std::array<std::size_t, rank_> extents_t;
    +
    236 for (std::size_t i = 0; i < rank_; i++) {
    +
    237 extents_t[from_transposed[i]] = Mdspan::extent(i);
    +
    238 }
    +
    239
    +
    240 return md_extents<rank_>(extents_t);
    +
    241 }
    +
    242 auto extent(std::size_t d) const { return extents().extent(d); }
    +
    243};
    +
    244
    +
    245} // namespace dr::__detail
    +
    246
    +
    247template <dr::__detail::mdspan_like Mdspan>
    +
    248struct fmt::formatter<Mdspan, char> : public formatter<string_view> {
    +
    249 template <typename FmtContext>
    +
    250 auto format(Mdspan mdspan, FmtContext &ctx) const {
    +
    251 std::array<std::size_t, mdspan.rank()> index;
    +
    252 rng::fill(index, 0);
    +
    253 format_mdspan(ctx, mdspan, index, 0);
    +
    254 return ctx.out();
    +
    255 }
    +
    256
    +
    257 void format_mdspan(auto &ctx, auto mdspan, auto &index,
    +
    258 std::size_t dim) const {
    +
    259 for (std::size_t i = 0; i < mdspan.extent(dim); i++) {
    +
    260 index[dim] = i;
    +
    261 if (dim == mdspan.rank() - 1) {
    +
    262 if (i == 0) {
    +
    263 fmt::format_to(ctx.out(), "{}: ", index);
    +
    264 }
    +
    265 fmt::format_to(ctx.out(), "{:4} ", mdspan(index));
    +
    266 } else {
    +
    267 format_mdspan(ctx, mdspan, index, dim + 1);
    +
    268 }
    +
    269 }
    +
    270 fmt::format_to(ctx.out(), "\n");
    +
    271 }
    +
    272};
    +
    273
    +
    274namespace MDSPAN_NAMESPACE {
    +
    275
    +
    276template <dr::__detail::mdspan_like M1, dr::__detail::mdspan_like M2>
    +
    277bool operator==(const M1 &m1, const M2 &m2) {
    +
    278 constexpr std::size_t rank1 = M1::rank(), rank2 = M2::rank();
    +
    279 static_assert(rank1 == rank2);
    +
    280 if (dr::__detail::dims<rank1>(m1.extents()) !=
    +
    281 dr::__detail::dims<rank1>(m2.extents())) {
    +
    282 return false;
    +
    283 }
    +
    284
    +
    285 // See mdspan_foreach for a way to generalize this to all ranks
    +
    286 if constexpr (M1::rank() == 1) {
    +
    287 for (std::size_t i = 0; i < m1.extent(0); i++) {
    +
    288 if (m1(i) != m2(i)) {
    +
    289 return false;
    +
    290 }
    +
    291 }
    +
    292 } else if constexpr (M1::rank() == 2) {
    +
    293 for (std::size_t i = 0; i < m1.extent(0); i++) {
    +
    294 for (std::size_t j = 0; j < m1.extent(1); j++) {
    +
    295 if (m1(i, j) != m2(i, j)) {
    +
    296 return false;
    +
    297 }
    +
    298 }
    +
    299 }
    +
    300 } else if constexpr (M1::rank() == 3) {
    +
    301 for (std::size_t i = 0; i < m1.extent(0); i++) {
    +
    302 for (std::size_t j = 0; j < m1.extent(1); j++) {
    +
    303 for (std::size_t k = 0; k < m1.extent(2); k++) {
    +
    304 if (m1(i, j, k) != m2(i, j, k)) {
    +
    305 return false;
    +
    306 }
    +
    307 }
    +
    308 }
    +
    309 }
    +
    310 } else {
    +
    311 assert(false);
    +
    312 }
    +
    313
    +
    314 return true;
    +
    315}
    +
    316
    +
    317template <dr::__detail::mdspan_like M>
    +
    318inline std::ostream &operator<<(std::ostream &os, const M &m) {
    +
    319 if constexpr (dr::__detail::mdarray_like<M>) {
    +
    320 os << fmt::format("\n{}", m.to_mdspan());
    +
    321 } else {
    +
    322 os << fmt::format("\n{}", m);
    +
    323 }
    +
    324 return os;
    +
    325}
    +
    326
    +
    327} // namespace MDSPAN_NAMESPACE
    +
    328
    +
    329namespace dr {
    +
    330
    +
    331template <typename R>
    + +
    333 distributed_range<R> && requires(R &r) { r.mdspan(); };
    +
    334
    +
    335} // namespace dr
    +
    Definition: mdspan_utils.hpp:60
    +
    Definition: mdspan_utils.hpp:214
    +
    Definition: index.hpp:34
    +
    Definition: mdspan_utils.hpp:52
    +
    Definition: mdspan_utils.hpp:46
    +
    Definition: mdspan_utils.hpp:332
    +
    Definition: concepts.hpp:20
    +
    + + + + diff --git a/doxygen/mdspan__view_8hpp_source.html b/doxygen/mdspan__view_8hpp_source.html new file mode 100644 index 0000000000..4d10fa9fdf --- /dev/null +++ b/doxygen/mdspan__view_8hpp_source.html @@ -0,0 +1,362 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/views/mdspan_view.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    mdspan_view.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <dr/detail/mdspan_shim.hpp>
    +
    8#include <dr/detail/mdspan_utils.hpp>
    +
    9#include <dr/detail/ranges_shim.hpp>
    +
    10#include <dr/detail/ranges_utils.hpp>
    +
    11#include <dr/mp/containers/distributed_vector.hpp>
    +
    12
    +
    13namespace dr::mp::decomp {
    +
    14
    +
    15inline constexpr std::size_t div = std::numeric_limits<std::size_t>::max();
    +
    16inline constexpr std::size_t all = div - 1;
    +
    17
    +
    18} // namespace dr::mp::decomp
    +
    19
    +
    20namespace dr::mp::__detail {
    +
    21
    +
    22//
    +
    23// Add a local mdspan to the underlying segment
    +
    24//
    +
    25template <typename BaseSegment, std::size_t Rank>
    +
    26class md_segment : public rng::view_interface<md_segment<BaseSegment, Rank>> {
    +
    27private:
    +
    28public:
    +
    29 using index_type = dr::__detail::dr_extents<Rank>;
    +
    30
    +
    31 md_segment() {}
    +
    32 md_segment(index_type origin, BaseSegment segment, index_type tile_shape)
    +
    33 : base_(segment), origin_(origin),
    +
    34 mdspan_(local_tile(segment, tile_shape)) {
    +
    35 dr::drlog.debug(dr::logger::mdspan_view,
    +
    36 "md_segment\n origin: {}\n tile shape: {}\n", origin,
    +
    37 tile_shape);
    +
    38 }
    +
    39
    +
    40 // view_interface uses below to define everything else
    +
    41 auto begin() const { return base_.begin(); }
    +
    42 auto end() const { return base_.end(); }
    +
    43
    +
    44 auto reserved() const { return base_.reserved(); }
    +
    45
    +
    46 auto halo() const { return dr::mp::halo(base_); }
    +
    47
    +
    48 // mdspan-specific methods
    +
    49 auto mdspan() const { return mdspan_; }
    +
    50 auto origin() const { return origin_; }
    +
    51 // for slices, this would be the underlying mdspan
    +
    52 auto root_mdspan() const { return mdspan(); }
    +
    53
    +
    54private:
    +
    55 using T = rng::range_value_t<BaseSegment>;
    +
    56
    +
    57 static auto local_tile(BaseSegment segment, const index_type &tile_shape) {
    +
    58 // Undefined behavior if the segments is not local
    +
    59 T *ptr = dr::ranges::rank(segment) == default_comm().rank()
    +
    60 ? std::to_address(dr::ranges::local(rng::begin(segment)))
    +
    61 : nullptr;
    +
    62 return md::mdspan(ptr, tile_shape);
    +
    63 }
    +
    64
    +
    65 BaseSegment base_;
    +
    66 index_type origin_;
    +
    67 md::mdspan<T, dr::__detail::md_extents<Rank>, md::layout_stride> mdspan_;
    +
    68};
    +
    69
    +
    70} // namespace dr::mp::__detail
    +
    71
    +
    72namespace dr::mp {
    +
    73
    +
    74//
    +
    75// Wrap a distributed range, adding an mdspan and adapting the
    +
    76// segments to also be mdspans for local access
    +
    77//
    +
    78template <distributed_contiguous_range R, std::size_t Rank,
    +
    79 typename Layout = md::layout_right>
    +
    80struct mdspan_view : public rng::view_interface<mdspan_view<R, Rank>> {
    +
    81private:
    +
    82 using base_type = rng::views::all_t<R>;
    +
    83 using iterator_type = rng::iterator_t<base_type>;
    +
    84 using extents_type = md::dextents<std::size_t, Rank>;
    +
    85 using mdspan_type =
    +
    86 md::mdspan<iterator_type, extents_type, Layout,
    + +
    88 using difference_type = rng::iter_difference_t<iterator_type>;
    +
    89 using index_type = dr::__detail::dr_extents<Rank>;
    +
    90
    +
    91 base_type base_;
    +
    92 index_type full_shape_;
    +
    93 index_type tile_shape_;
    +
    94
    +
    95 static auto segment_index_to_global_origin(std::size_t linear,
    +
    96 index_type full_shape,
    +
    97 index_type tile_shape) {
    +
    98 index_type grid_shape;
    +
    99 for (std::size_t i = 0; i < Rank; i++) {
    +
    100 grid_shape[i] = dr::__detail::partition_up(full_shape[i], tile_shape[i]);
    +
    101 }
    +
    102 auto origin = dr::__detail::linear_to_index(linear, grid_shape);
    +
    103 for (std::size_t i = 0; i < Rank; i++) {
    +
    104 origin[i] *= tile_shape[i];
    +
    105 }
    +
    106
    +
    107 return origin;
    +
    108 }
    +
    109
    +
    110 static auto make_segments(auto base, auto full_shape, auto tile_shape) {
    +
    111 auto make_md = [=](auto v) {
    +
    112 auto clipped = tile_shape;
    +
    113 std::size_t segment_index = std::get<0>(v);
    +
    114 std::size_t end = (segment_index + 1) * tile_shape[0];
    +
    115 if (end > full_shape[0]) {
    +
    116 clipped[0] -= std::min(end - full_shape[0], clipped[0]);
    +
    117 }
    + +
    119 segment_index_to_global_origin(segment_index, full_shape, tile_shape),
    +
    120 std::get<1>(v), clipped);
    +
    121 };
    +
    122
    +
    123 dr::drlog.debug(dr::logger::mdspan_view,
    +
    124 "mdspan_view\n full shape: {}\n tile shape: {}\n",
    +
    125 full_shape, tile_shape);
    +
    126 // use bounded_enumerate so we get a std::ranges::common_range
    +
    127 return dr::__detail::bounded_enumerate(dr::ranges::segments(base)) |
    +
    128 rng::views::transform(make_md);
    +
    129 }
    +
    130 using segments_type = decltype(make_segments(std::declval<base_type>(),
    +
    131 full_shape_, tile_shape_));
    +
    132
    +
    133public:
    +
    134 mdspan_view(R r, dr::__detail::dr_extents<Rank> full_shape)
    +
    135 : base_(rng::views::all(std::forward<R>(r))) {
    +
    136 full_shape_ = full_shape;
    +
    137
    +
    138 // Default tile shape splits on leading dimension
    +
    139 tile_shape_ = full_shape;
    +
    140 tile_shape_[0] = decomp::div;
    +
    141
    +
    142 replace_decomp();
    +
    143 segments_ = make_segments(base_, full_shape_, tile_shape_);
    +
    144 }
    +
    145
    +
    146 mdspan_view(R r, dr::__detail::dr_extents<Rank> full_shape,
    +
    147 dr::__detail::dr_extents<Rank> tile_shape)
    +
    148 : base_(rng::views::all(std::forward<R>(r))), full_shape_(full_shape),
    +
    149 tile_shape_(tile_shape) {
    +
    150 replace_decomp();
    +
    151 segments_ = make_segments(base_, full_shape_, tile_shape_);
    +
    152 }
    +
    153
    +
    154 // Base implements random access range
    +
    155 auto begin() const { return base_.begin(); }
    +
    156 auto end() const { return base_.end(); }
    +
    157 auto operator[](difference_type n) { return base_[n]; }
    +
    158
    +
    159 // Add a local mdspan to the base segment
    +
    160 // Mdspan access to base
    +
    161 auto mdspan() const { return mdspan_type(rng::begin(base_), full_shape_); }
    +
    162 static constexpr auto rank() { return Rank; }
    +
    163
    +
    164 auto segments() const { return segments_; }
    +
    165
    +
    166 // Mdspan access to grid
    +
    167 auto grid() {
    +
    168 dr::__detail::dr_extents<Rank> grid_shape;
    +
    169 for (std::size_t i : rng::views::iota(0u, Rank)) {
    +
    170 grid_shape[i] =
    +
    171 dr::__detail::partition_up(full_shape_[i], tile_shape_[i]);
    +
    172 }
    +
    173 using grid_iterator_type = rng::iterator_t<segments_type>;
    +
    174 using grid_type =
    +
    175 md::mdspan<grid_iterator_type, extents_type, Layout,
    + +
    177 return grid_type(rng::begin(segments_), grid_shape);
    +
    178 }
    +
    179
    +
    180private:
    +
    181 // Replace div with actual value
    +
    182 void replace_decomp() {
    +
    183 auto n = std::size_t(rng::size(dr::ranges::segments(base_)));
    +
    184 for (std::size_t i = 0; i < Rank; i++) {
    +
    185 if (tile_shape_[i] == decomp::div) {
    +
    186 tile_shape_[i] = dr::__detail::partition_up(full_shape_[i], n);
    +
    187 } else if (tile_shape_[i] == decomp::all) {
    +
    188 tile_shape_[i] = full_shape_[i];
    +
    189 }
    +
    190 }
    +
    191 }
    +
    192
    +
    193 segments_type segments_;
    +
    194};
    +
    195
    +
    196template <typename R, std::size_t Rank>
    +
    197mdspan_view(R &&r, dr::__detail::dr_extents<Rank> extents)
    + +
    199
    +
    200template <typename R, std::size_t Rank>
    +
    201mdspan_view(R &&r, dr::__detail::dr_extents<Rank> full_shape,
    +
    202 dr::__detail::dr_extents<Rank> tile_shape)
    + +
    204
    +
    205template <typename R>
    + +
    207 dr::distributed_range<R> && requires(R &r) { r.mdspan(); };
    +
    208
    +
    209} // namespace dr::mp
    +
    210
    +
    211namespace dr::mp::views {
    +
    212
    +
    213template <std::size_t Rank> class mdspan_adapter_closure {
    +
    214public:
    +
    215 mdspan_adapter_closure(dr::__detail::dr_extents<Rank> full_shape,
    +
    216 dr::__detail::dr_extents<Rank> tile_shape)
    +
    217 : full_shape_(full_shape), tile_shape_(tile_shape), tile_valid_(true) {}
    +
    218
    +
    219 mdspan_adapter_closure(dr::__detail::dr_extents<Rank> full_shape)
    +
    220 : full_shape_(full_shape) {}
    +
    221
    +
    222 template <rng::viewable_range R> auto operator()(R &&r) const {
    +
    223 if (tile_valid_) {
    +
    224 return mdspan_view(std::forward<R>(r), full_shape_, tile_shape_);
    +
    225 } else {
    +
    226 return mdspan_view(std::forward<R>(r), full_shape_);
    +
    227 }
    +
    228 }
    +
    229
    +
    230 template <rng::viewable_range R>
    +
    231 friend auto operator|(R &&r, const mdspan_adapter_closure &closure) {
    +
    232 return closure(std::forward<R>(r));
    +
    233 }
    +
    234
    +
    235private:
    +
    236 dr::__detail::dr_extents<Rank> full_shape_;
    +
    237 dr::__detail::dr_extents<Rank> tile_shape_;
    +
    238 bool tile_valid_ = false;
    +
    239};
    +
    240
    + +
    242public:
    +
    243 template <rng::viewable_range R, typename Shape>
    +
    244 auto operator()(R &&r, Shape &&full_shape, Shape &&tile_shape) const {
    +
    245 return mdspan_adapter_closure(std::forward<Shape>(full_shape),
    +
    246 std::forward<Shape>(tile_shape))(
    +
    247 std::forward<R>(r));
    +
    248 }
    +
    249
    +
    250 template <rng::viewable_range R, typename Shape>
    +
    251 auto operator()(R &&r, Shape &&full_shape) const {
    +
    252 return mdspan_adapter_closure(std::forward<Shape>(full_shape))(
    +
    253 std::forward<R>(r));
    +
    254 }
    +
    255
    +
    256 template <typename Shape>
    +
    257 auto operator()(Shape &&full_shape, Shape &&tile_shape) const {
    +
    258 return mdspan_adapter_closure(std::forward<Shape>(full_shape),
    +
    259 std::forward<Shape>(tile_shape));
    +
    260 }
    +
    261
    +
    262 template <typename Shape> auto operator()(Shape &&full_shape) const {
    +
    263 return mdspan_adapter_closure(std::forward<Shape>(full_shape));
    +
    264 }
    +
    265};
    +
    266
    +
    267inline constexpr auto mdspan = mdspan_fn_{};
    +
    268
    +
    269} // namespace dr::mp::views
    +
    Definition: mdspan_utils.hpp:60
    +
    Definition: mdspan_view.hpp:26
    +
    Definition: mdspan_view.hpp:213
    +
    Definition: mdspan_view.hpp:241
    +
    Definition: concepts.hpp:42
    +
    Definition: concepts.hpp:20
    +
    Definition: mdspan_view.hpp:206
    +
    Definition: mdspan_view.hpp:80
    +
    + + + + diff --git a/doxygen/memory_8hpp_source.html b/doxygen/memory_8hpp_source.html new file mode 100644 index 0000000000..c99739fab1 --- /dev/null +++ b/doxygen/memory_8hpp_source.html @@ -0,0 +1,190 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/detail/memory.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    memory.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <cstring>
    +
    8
    +
    9namespace dr {
    +
    10
    +
    11template <typename T> struct default_memory {
    +
    12 using value_type = T;
    +
    13 std::allocator<T> std_allocator;
    +
    14
    +
    15 T *allocate(std::size_t size) {
    +
    16 auto p = std_allocator.allocate(size);
    +
    17 assert(p != nullptr);
    +
    18 memset(p, 0, sizeof(T) * size);
    +
    19 return p;
    +
    20 }
    +
    21
    +
    22 template <typename F> F *allocate(std::size_t size) {
    +
    23 std::allocator<F> allocator;
    +
    24 auto p = allocator.allocate(size);
    +
    25 assert(p != nullptr);
    +
    26 memset(p, 0, sizeof(F) * size);
    +
    27 return p;
    +
    28 }
    +
    29
    +
    30 constexpr void deallocate(T *p, std::size_t n) {
    +
    31 std_allocator.deallocate(p, n);
    +
    32 }
    +
    33
    +
    34 template <typename F> void deallocate(F *p, std::size_t n) {
    +
    35 std::allocator<F> allocator;
    +
    36 allocator.deallocate(p, n);
    +
    37 p = nullptr;
    +
    38 }
    +
    39
    +
    40 void memcpy(void *dst, const void *src, std::size_t numBytes) {
    +
    41 std::memcpy(dst, src, numBytes);
    +
    42 }
    +
    43
    +
    44 template <typename F> void offload(F lambda) { lambda(); }
    +
    45};
    +
    46
    +
    47#ifdef SYCL_LANGUAGE_VERSION
    +
    48template <typename T> struct sycl_memory {
    +
    49 using value_type = T;
    +
    50 using device_type = sycl::device;
    +
    51
    +
    52 sycl::device device_;
    +
    53 sycl::context context_;
    +
    54 sycl::usm::alloc kind_;
    +
    55 std::size_t alignment_;
    +
    56 sycl::queue offload_queue_;
    +
    57
    +
    58 sycl_memory(sycl::queue queue,
    +
    59 sycl::usm::alloc kind = sycl::usm::alloc::shared,
    +
    60 std::size_t alignment = 1)
    +
    61 : device_(queue.get_device()), context_(queue.get_context()), kind_(kind),
    +
    62 alignment_(alignment), offload_queue_(queue) {}
    +
    63
    +
    64 T *allocate(std::size_t n) {
    +
    65 auto p = sycl::aligned_alloc<T>(alignment_, n, device_, context_, kind_);
    +
    66 assert(p != nullptr);
    +
    67 return p;
    +
    68 }
    +
    69
    +
    70 template <typename F> F *allocate(std::size_t n) {
    +
    71 auto p = sycl::aligned_alloc<F>(alignment_, n, device_, context_, kind_);
    +
    72 assert(p != nullptr);
    +
    73 return p;
    +
    74 }
    +
    75
    +
    76 void deallocate(T *p, std::size_t n) {
    +
    77 assert(p != nullptr);
    +
    78 sycl::free(p, context_);
    +
    79 p = nullptr;
    +
    80 }
    +
    81
    +
    82 template <typename F> void deallocate(F *p, std::size_t n) {
    +
    83 assert(p != nullptr);
    +
    84 sycl::free(p, context_);
    +
    85 p = nullptr;
    +
    86 }
    +
    87
    +
    88 void memcpy(void *dst, const void *src, std::size_t numBytes) {
    +
    89 assert(dst != nullptr);
    +
    90 assert(src != nullptr);
    +
    91 offload_queue_.memcpy(dst, src, numBytes).wait();
    +
    92 }
    +
    93
    +
    94 template <typename F> void offload(F lambda) {
    +
    95 if (kind_ == sycl::usm::alloc::device) {
    +
    96 offload_queue_.single_task(lambda).wait();
    +
    97 } else {
    +
    98 lambda();
    +
    99 }
    +
    100 }
    +
    101};
    +
    102#endif
    +
    103
    +
    104} // namespace dr
    +
    Definition: memory.hpp:11
    +
    + + + + diff --git a/doxygen/menu.js b/doxygen/menu.js new file mode 100644 index 0000000000..b0b26936a0 --- /dev/null +++ b/doxygen/menu.js @@ -0,0 +1,136 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { + function makeTree(data,relPath) { + var result=''; + if ('children' in data) { + result+='
      '; + for (var i in data.children) { + var url; + var link; + link = data.children[i].url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + } else { + url = relPath+link; + } + result+='
    • '+ + data.children[i].text+''+ + makeTree(data.children[i],relPath)+'
    • '; + } + result+='
    '; + } + return result; + } + var searchBoxHtml; + if (searchEnabled) { + if (serverSide) { + searchBoxHtml='
    '+ + '
    '+ + '
     '+ + ''+ + '
    '+ + '
    '+ + '
    '+ + '
    '; + } else { + searchBoxHtml='
    '+ + ''+ + ' '+ + ''+ + ''+ + ''+ + ''+ + ''+ + '
    '; + } + } + + $('#main-nav').before('
    '+ + ''+ + ''+ + '
    '); + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + if (searchBoxHtml) { + $('#main-menu').append('
  1. '); + } + var $mainMenuState = $('#main-menu-state'); + var prevWidth = 0; + if ($mainMenuState.length) { + function initResizableIfExists() { + if (typeof initResizable==='function') initResizable(); + } + // animate mobile menu + $mainMenuState.change(function(e) { + var $menu = $('#main-menu'); + var options = { duration: 250, step: initResizableIfExists }; + if (this.checked) { + options['complete'] = function() { $menu.css('display', 'block') }; + $menu.hide().slideDown(options); + } else { + options['complete'] = function() { $menu.css('display', 'none') }; + $menu.show().slideUp(options); + } + }); + // set default menu visibility + function resetState() { + var $menu = $('#main-menu'); + var $mainMenuState = $('#main-menu-state'); + var newWidth = $(window).outerWidth(); + if (newWidth!=prevWidth) { + if ($(window).outerWidth()<768) { + $mainMenuState.prop('checked',false); $menu.hide(); + $('#searchBoxPos1').html(searchBoxHtml); + $('#searchBoxPos2').hide(); + } else { + $menu.show(); + $('#searchBoxPos1').empty(); + $('#searchBoxPos2').html(searchBoxHtml); + $('#searchBoxPos2').show(); + } + if (typeof searchBox!=='undefined') { + searchBox.CloseResultsWindow(); + } + prevWidth = newWidth; + } + } + $(window).ready(function() { resetState(); initResizableIfExists(); }); + $(window).resize(resetState); + } + $('#main-menu').smartmenus(); +} +/* @license-end */ diff --git a/doxygen/menudata.js b/doxygen/menudata.js new file mode 100644 index 0000000000..1b1c559b33 --- /dev/null +++ b/doxygen/menudata.js @@ -0,0 +1,36 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file +*/ +var menudata={children:[ +{text:"Main Page",url:"index.html"}, +{text:"Concepts",url:"concepts.html"}, +{text:"Classes",url:"annotated.html",children:[ +{text:"Class List",url:"annotated.html"}, +{text:"Class Index",url:"classes.html"}, +{text:"Class Hierarchy",url:"inherits.html"}, +{text:"Class Members",url:"functions.html",children:[ +{text:"All",url:"functions.html"}, +{text:"Functions",url:"functions_func.html"}]}]}, +{text:"Files",url:"files.html",children:[ +{text:"File List",url:"files.html"}]}]} diff --git a/doxygen/mp_2algorithms_2copy_8hpp_source.html b/doxygen/mp_2algorithms_2copy_8hpp_source.html new file mode 100644 index 0000000000..6f837b37d1 --- /dev/null +++ b/doxygen/mp_2algorithms_2copy_8hpp_source.html @@ -0,0 +1,159 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/algorithms/copy.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    copy.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <dr/detail/ranges_shim.hpp>
    +
    8
    +
    9namespace dr::mp {
    +
    10
    +
    12void copy(rng::forward_range auto &&in, dr::distributed_iterator auto out) {
    +
    13 if (rng::empty(in)) {
    +
    14 return;
    +
    15 }
    +
    16
    +
    17 auto copy = [](auto &&v) { std::get<1>(v) = std::get<0>(v); };
    +
    18
    +
    19 for_each(views::zip(in, views::counted(out, rng::size(in))), copy);
    +
    20}
    +
    21
    +
    23template <dr::distributed_iterator DI_IN>
    +
    24void copy(DI_IN &&first, DI_IN &&last, dr::distributed_iterator auto &&out) {
    +
    25 copy(rng::subrange(first, last), out);
    +
    26}
    +
    27
    +
    28template <std::contiguous_iterator CI_IN>
    +
    29void copy(CI_IN &&first, CI_IN &&last,
    + +
    31 copy(0, rng::subrange(first, last), out);
    +
    32}
    +
    33
    +
    34void copy(rng::contiguous_range auto &&in,
    + +
    36 copy(0, in, out);
    +
    37}
    +
    38
    +
    39void copy(dr::distributed_contiguous_range auto &&in,
    +
    40 std::contiguous_iterator auto out) {
    +
    41 copy(0, in, out);
    +
    42}
    +
    43
    +
    45void copy(std::size_t root, dr::distributed_contiguous_range auto &&in,
    +
    46 std::contiguous_iterator auto out) {
    +
    47 if (default_comm().rank() == root) {
    +
    48 for (const auto &segment : dr::ranges::segments(in)) {
    +
    49 auto sz = rng::size(segment);
    +
    50 rng::begin(segment).get(std::to_address(out), sz);
    +
    51 out += sz;
    +
    52 }
    +
    53 }
    +
    54 barrier();
    +
    55}
    +
    56
    +
    58void copy(std::size_t root, rng::contiguous_range auto &&in,
    + +
    60 if (default_comm().rank() == root) {
    +
    61 auto in_ptr = std::to_address(in.begin());
    +
    62 for (auto remainder = rng::size(in); remainder > 0;) {
    +
    63 auto segment = *(dr::ranges::segments(out).begin());
    +
    64 auto sz = std::min(rng::size(segment), remainder);
    +
    65 assert(sz > 0);
    +
    66 rng::begin(segment).put(in_ptr, sz);
    +
    67 in_ptr += sz;
    +
    68 out += sz;
    +
    69 remainder -= sz;
    +
    70 }
    +
    71 }
    +
    72 barrier();
    +
    73}
    +
    74
    +
    75} // namespace dr::mp
    +
    Definition: concepts.hpp:51
    +
    Definition: concepts.hpp:42
    +
    Definition: concepts.hpp:31
    +
    + + + + diff --git a/doxygen/mp_2algorithms_2equal_8hpp_source.html b/doxygen/mp_2algorithms_2equal_8hpp_source.html new file mode 100644 index 0000000000..bf4fba6501 --- /dev/null +++ b/doxygen/mp_2algorithms_2equal_8hpp_source.html @@ -0,0 +1,146 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/algorithms/equal.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    equal.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6#include <concepts>
    +
    7#include <dr/concepts/concepts.hpp>
    +
    8#include <dr/mp/algorithms/reduce.hpp>
    +
    9#include <dr/mp/algorithms/transform.hpp>
    +
    10#include <dr/mp/views/zip.hpp>
    +
    11
    +
    12namespace dr::mp::_detail {
    +
    13template <dr::distributed_range R1, dr::distributed_range R2>
    +
    14 requires std::equality_comparable_with<rng::range_value_t<R1>,
    +
    15 rng::range_value_t<R2>>
    +
    16bool equal(std::size_t root, bool root_provided, R1 &&r1, R2 &&r2) {
    +
    17
    +
    18 if (rng::distance(r1) != rng::distance(r2)) {
    +
    19 return false;
    +
    20 }
    +
    21
    +
    22 // we must use ints instead of bools, because distributed ranges do not
    +
    23 // support bools
    +
    24 auto compare = [](auto &&elems) {
    +
    25 return elems.first == elems.second ? 1 : 0;
    +
    26 };
    +
    27
    +
    28 auto zipped_views = views::zip(r1, r2);
    +
    29
    +
    30 // we are using mp::transform instead of mp::views::transform due to
    +
    31 // compilation error refer to DRA-192 and test/gtest/mp/reduce.cpp
    +
    32 mp::distributed_vector<int> compared(rng::distance(r1));
    +
    33 mp::transform(zipped_views, compared.begin(), compare);
    +
    34
    +
    35 auto min = [](double x, double y) { return std::min(x, y); };
    +
    36 if (root_provided) {
    +
    37 auto result = mp::reduce(root, compared, 1, min);
    +
    38 return result == 1;
    +
    39 }
    +
    40 auto result = mp::reduce(compared, 1, min);
    +
    41 return result == 1;
    +
    42}
    +
    43
    +
    44} // namespace dr::mp::_detail
    +
    45
    +
    46namespace dr::mp {
    +
    47template <dr::distributed_range R1, dr::distributed_range R2>
    +
    48 requires std::equality_comparable_with<rng::range_value_t<R1>,
    +
    49 rng::range_value_t<R2>>
    +
    50bool equal(std::size_t root, R1 &&r1, R2 &&r2) {
    +
    51 return _detail::equal(root, true, r1, r2);
    +
    52}
    +
    53
    +
    54template <dr::distributed_range R1, dr::distributed_range R2>
    +
    55 requires std::equality_comparable_with<rng::range_value_t<R1>,
    +
    56 rng::range_value_t<R2>>
    +
    57bool equal(R1 &&r1, R2 &&r2) {
    +
    58 return _detail::equal(0, false, r1, r2);
    +
    59}
    +
    60
    +
    61} // namespace dr::mp
    +
    + + + + diff --git a/doxygen/mp_2algorithms_2exclusive__scan_8hpp_source.html b/doxygen/mp_2algorithms_2exclusive__scan_8hpp_source.html new file mode 100644 index 0000000000..596c9be0fe --- /dev/null +++ b/doxygen/mp_2algorithms_2exclusive__scan_8hpp_source.html @@ -0,0 +1,138 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/algorithms/exclusive_scan.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    exclusive_scan.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <dr/mp/algorithms/inclusive_exclusive_scan_impl.hpp>
    +
    8
    +
    9namespace dr::mp {
    +
    10
    + +
    12 dr::distributed_contiguous_range O, typename T, typename BinaryOp>
    +
    13auto exclusive_scan(R &&r, O &&o, T init, BinaryOp &&binary_op) {
    +
    14 return __detail::inclusive_exclusive_scan_impl_<true>(
    +
    15 std::forward<R>(r), rng::begin(std::forward<O>(o)),
    +
    16 std::forward<BinaryOp>(binary_op),
    +
    17 std::optional<rng::range_value_t<R>>(init));
    +
    18}
    +
    19
    + + +
    22auto exclusive_scan(R &&r, O &&o, T init) {
    +
    23 return dr::mp::exclusive_scan(std::forward<R>(r), std::forward<O>(o),
    +
    24 static_cast<rng::range_value_t<R>>(init),
    +
    25 std::plus<rng::range_value_t<R>>());
    +
    26}
    +
    27
    +
    28// Distributed iterator versions
    +
    29
    +
    30template <dr::distributed_iterator Iter, dr::distributed_iterator OutputIter,
    +
    31 typename T, typename BinaryOp>
    +
    32OutputIter exclusive_scan(Iter first, Iter last, OutputIter d_first, T init,
    +
    33 BinaryOp &&binary_op) {
    +
    34
    +
    35 return dr::mp::exclusive_scan(rng::subrange(first, last), d_first,
    +
    36 std::forward<BinaryOp>(binary_op), init);
    +
    37}
    +
    38
    +
    39template <dr::distributed_iterator Iter, dr::distributed_iterator OutputIter,
    +
    40 typename T>
    +
    41OutputIter exclusive_scan(Iter first, Iter last, OutputIter d_first, T init) {
    +
    42 auto dist = rng::distance(first, last);
    +
    43 auto d_last = d_first;
    +
    44 rng::advance(d_last, dist);
    +
    45 dr::mp::exclusive_scan(rng::subrange(first, last),
    +
    46 rng::subrange(d_first, d_last), init);
    +
    47
    +
    48 return d_last;
    +
    49}
    +
    50
    +
    51} // namespace dr::mp
    +
    Definition: concepts.hpp:42
    +
    Definition: concepts.hpp:31
    +
    + + + + diff --git a/doxygen/mp_2algorithms_2fill_8hpp_source.html b/doxygen/mp_2algorithms_2fill_8hpp_source.html new file mode 100644 index 0000000000..dca4065575 --- /dev/null +++ b/doxygen/mp_2algorithms_2fill_8hpp_source.html @@ -0,0 +1,117 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/algorithms/fill.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    fill.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <algorithm>
    +
    8#include <execution>
    +
    9#include <type_traits>
    +
    10#include <utility>
    +
    11
    +
    12#include <dr/concepts/concepts.hpp>
    +
    13#include <dr/detail/logger.hpp>
    +
    14#include <dr/detail/onedpl_direct_iterator.hpp>
    +
    15#include <dr/detail/ranges_shim.hpp>
    +
    16#include <dr/mp/global.hpp>
    +
    17
    +
    18namespace dr::mp {
    +
    19
    +
    21auto fill(dr::distributed_contiguous_range auto &&dr, auto value) {
    +
    22 for_each(dr, [=](auto &v) { v = value; });
    +
    23 return rng::end(dr);
    +
    24}
    +
    25
    +
    27template <dr::distributed_iterator DI>
    +
    28auto fill(DI first, DI last, auto value) {
    +
    29 mp::fill(rng::subrange(first, last), value);
    +
    30 return last;
    +
    31}
    +
    32
    +
    33} // namespace dr::mp
    +
    Definition: concepts.hpp:42
    +
    + + + + diff --git a/doxygen/mp_2algorithms_2for__each_8hpp_source.html b/doxygen/mp_2algorithms_2for__each_8hpp_source.html new file mode 100644 index 0000000000..f7e007f186 --- /dev/null +++ b/doxygen/mp_2algorithms_2for__each_8hpp_source.html @@ -0,0 +1,148 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/algorithms/for_each.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    for_each.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <algorithm>
    +
    8#include <execution>
    +
    9#include <type_traits>
    +
    10#include <utility>
    +
    11
    +
    12#include <dr/concepts/concepts.hpp>
    +
    13#include <dr/detail/logger.hpp>
    +
    14#include <dr/detail/onedpl_direct_iterator.hpp>
    +
    15#include <dr/detail/ranges_shim.hpp>
    +
    16#include <dr/detail/sycl_utils.hpp>
    +
    17#include <dr/mp/global.hpp>
    +
    18
    +
    19namespace dr::mp {
    +
    20
    +
    22void for_each(dr::distributed_range auto &&dr, auto op) {
    +
    23 dr::drlog.debug(dr::logger::for_each, "for_each: parallel execution\n");
    +
    24 if (rng::empty(dr)) {
    +
    25 return;
    +
    26 }
    +
    27 assert(aligned(dr));
    +
    28
    +
    29 for (const auto &s : local_segments(dr)) {
    +
    30 if (mp::use_sycl()) {
    +
    31 dr::drlog.debug(" using sycl\n");
    +
    32
    +
    33 assert(rng::distance(s) > 0);
    +
    34#ifdef SYCL_LANGUAGE_VERSION
    +
    35 dr::__detail::parallel_for(
    +
    36 dr::mp::sycl_queue(), sycl::range<1>(rng::distance(s)),
    +
    37 [first = rng::begin(s), op](auto idx) { op(first[idx]); })
    +
    38 .wait();
    +
    39#else
    +
    40 assert(false);
    +
    41#endif
    +
    42 } else {
    +
    43 dr::drlog.debug(" using cpu\n");
    +
    44 rng::for_each(s, op);
    +
    45 }
    +
    46 }
    +
    47 barrier();
    +
    48}
    +
    49
    +
    51template <dr::distributed_iterator DI>
    +
    52void for_each(DI first, DI last, auto op) {
    +
    53 mp::for_each(rng::subrange(first, last), op);
    +
    54}
    +
    55
    +
    57template <dr::distributed_iterator DI, std::integral I>
    +
    58DI for_each_n(DI first, I n, auto op) {
    +
    59 auto last = first;
    +
    60 rng::advance(last, n);
    +
    61 mp::for_each(first, last, op);
    +
    62 return last;
    +
    63}
    +
    64
    +
    65} // namespace dr::mp
    +
    Definition: concepts.hpp:20
    +
    + + + + diff --git a/doxygen/mp_2algorithms_2inclusive__scan_8hpp_source.html b/doxygen/mp_2algorithms_2inclusive__scan_8hpp_source.html new file mode 100644 index 0000000000..748149d83e --- /dev/null +++ b/doxygen/mp_2algorithms_2inclusive__scan_8hpp_source.html @@ -0,0 +1,158 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/algorithms/inclusive_scan.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    inclusive_scan.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <dr/mp/algorithms/inclusive_exclusive_scan_impl.hpp>
    +
    8
    +
    9namespace dr::mp {
    +
    10
    + +
    12 dr::distributed_contiguous_range O, typename BinaryOp, typename T>
    +
    13auto inclusive_scan(R &&r, O &&o, BinaryOp &&binary_op, T init) {
    +
    14 return __detail::inclusive_exclusive_scan_impl_<false>(
    +
    15 std::forward<R>(r), rng::begin(std::forward<O>(o)),
    +
    16 std::forward<BinaryOp>(binary_op), std::optional(init));
    +
    17}
    +
    18
    + +
    20 dr::distributed_contiguous_range O, typename BinaryOp>
    +
    21auto inclusive_scan(R &&r, O &&o, BinaryOp &&binary_op) {
    +
    22 return __detail::inclusive_exclusive_scan_impl_<false>(
    +
    23 std::forward<R>(r), rng::begin(std::forward<O>(o)),
    +
    24 std::forward<BinaryOp>(binary_op));
    +
    25}
    +
    26
    + + +
    29auto inclusive_scan(R &&r, O &&o) {
    +
    30 return dr::mp::inclusive_scan(std::forward<R>(r), std::forward<O>(o),
    +
    31 std::plus<rng::range_value_t<R>>());
    +
    32}
    +
    33
    +
    34// Distributed iterator versions
    +
    35
    +
    36template <dr::distributed_iterator Iter, dr::distributed_iterator OutputIter,
    +
    37 typename BinaryOp, typename T>
    +
    38OutputIter inclusive_scan(Iter first, Iter last, OutputIter d_first,
    +
    39 BinaryOp &&binary_op, T init) {
    +
    40
    +
    41 return dr::mp::inclusive_scan(rng::subrange(first, last), d_first,
    +
    42 std::forward<BinaryOp>(binary_op), init);
    +
    43}
    +
    44
    +
    45template <dr::distributed_iterator Iter, dr::distributed_iterator OutputIter,
    +
    46 typename BinaryOp>
    +
    47OutputIter inclusive_scan(Iter first, Iter last, OutputIter d_first,
    +
    48 BinaryOp &&binary_op) {
    +
    49
    +
    50 auto dist = rng::distance(first, last);
    +
    51 auto d_last = d_first;
    +
    52 rng::advance(d_last, dist);
    +
    53 dr::mp::inclusive_scan(rng::subrange(first, last),
    +
    54 rng::subrange(d_first, d_last),
    +
    55 std::forward<BinaryOp>(binary_op));
    +
    56
    +
    57 return d_last;
    +
    58}
    +
    59
    +
    60template <dr::distributed_iterator Iter, dr::distributed_iterator OutputIter>
    +
    61OutputIter inclusive_scan(Iter first, Iter last, OutputIter d_first) {
    +
    62 auto dist = rng::distance(first, last);
    +
    63 auto d_last = d_first;
    +
    64 rng::advance(d_last, dist);
    +
    65 dr::mp::inclusive_scan(rng::subrange(first, last),
    +
    66 rng::subrange(d_first, d_last));
    +
    67
    +
    68 return d_last;
    +
    69}
    +
    70
    +
    71} // namespace dr::mp
    +
    Definition: concepts.hpp:42
    +
    Definition: concepts.hpp:31
    +
    + + + + diff --git a/doxygen/mp_2algorithms_2iota_8hpp_source.html b/doxygen/mp_2algorithms_2iota_8hpp_source.html new file mode 100644 index 0000000000..bbd0d493b5 --- /dev/null +++ b/doxygen/mp_2algorithms_2iota_8hpp_source.html @@ -0,0 +1,120 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/algorithms/iota.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    iota.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <algorithm>
    +
    8#include <execution>
    +
    9#include <type_traits>
    +
    10#include <utility>
    +
    11
    +
    12#include <dr/concepts/concepts.hpp>
    +
    13#include <dr/detail/logger.hpp>
    +
    14#include <dr/detail/onedpl_direct_iterator.hpp>
    +
    15#include <dr/detail/ranges_shim.hpp>
    +
    16#include <dr/mp/global.hpp>
    +
    17
    +
    18namespace dr::mp {
    +
    19
    +
    21template <dr::distributed_range R, std::integral T> void iota(R &&r, T value) {
    +
    22 auto iota_view = rng::views::iota(value, T(value + rng::distance(r)));
    +
    23
    +
    24 for_each(views::zip(iota_view, r), [](auto &&elem) {
    +
    25 auto &&[idx, v] = elem;
    +
    26 v = idx;
    +
    27 });
    +
    28}
    +
    29
    +
    31template <dr::distributed_iterator Iter, std::integral T>
    +
    32void iota(Iter begin, Iter end, T value) {
    +
    33 auto r = rng::subrange(begin, end);
    +
    34 iota(r, value);
    +
    35}
    +
    36
    +
    37} // namespace dr::mp
    +
    + + + + diff --git a/doxygen/mp_2algorithms_2reduce_8hpp_source.html b/doxygen/mp_2algorithms_2reduce_8hpp_source.html new file mode 100644 index 0000000000..c6a94fca02 --- /dev/null +++ b/doxygen/mp_2algorithms_2reduce_8hpp_source.html @@ -0,0 +1,296 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/algorithms/reduce.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    reduce.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7namespace dr::mp::__detail {
    +
    8
    +
    9inline auto std_reduce(rng::forward_range auto &&r, auto &&binary_op) {
    +
    10 using value_type = rng::range_value_t<decltype(r)>;
    +
    11 if (rng::empty(r)) {
    +
    12 return value_type{};
    +
    13 } else {
    +
    14 auto skip1 = rng::begin(r);
    +
    15 skip1++;
    +
    16 // Explicit cast from distributed_vector reference to value_type
    +
    17 return std::reduce(std::execution::par_unseq, skip1, rng::end(r),
    +
    18 value_type(*rng::begin(r)), binary_op);
    +
    19 }
    +
    20}
    +
    21
    +
    22inline auto dpl_reduce(rng::forward_range auto &&r, auto &&binary_op) {
    +
    23 rng::range_value_t<decltype(r)> none{};
    +
    24#ifdef SYCL_LANGUAGE_VERSION
    +
    25 if (rng::empty(r)) {
    +
    26 return none;
    +
    27 } else {
    +
    28 using T = rng::range_value_t<decltype(r)>;
    +
    29 using Fn = decltype(binary_op);
    +
    30 if constexpr (sycl::has_known_identity_v<Fn, T>) {
    +
    31 dr::drlog.debug(" known identity\n");
    +
    32 return std::reduce(dpl_policy(),
    +
    33 dr::__detail::direct_iterator(rng::begin(r)),
    + +
    35 sycl::known_identity_v<Fn, T>, binary_op);
    +
    36 } else {
    +
    37 dr::drlog.debug(" peel 1st value\n");
    +
    38 return std::reduce(dpl_policy(),
    +
    39 dr::__detail::direct_iterator(rng::begin(r) + 1),
    + +
    41 sycl_get(*rng::begin(r)), binary_op);
    +
    42 }
    +
    43 }
    +
    44#else
    +
    45 assert(false);
    +
    46 return none;
    +
    47#endif
    +
    48}
    +
    49
    +
    51template <dr::distributed_range DR>
    +
    52auto reduce(std::size_t root, bool root_provided, DR &&dr, auto &&binary_op) {
    +
    53 using value_type = rng::range_value_t<DR>;
    +
    54 auto comm = default_comm();
    +
    55
    +
    56 if (rng::empty(dr)) {
    +
    57 return rng::range_value_t<DR>{};
    +
    58 }
    +
    59
    +
    60 if (aligned(dr)) {
    +
    61 dr::drlog.debug("Parallel reduce\n");
    +
    62
    +
    63 // Reduce the local segments
    +
    64 auto reduce = [=](auto &&r) {
    +
    65 assert(rng::size(r) > 0);
    +
    66 if (mp::use_sycl()) {
    +
    67 dr::drlog.debug(" with DPL\n");
    +
    68 return dpl_reduce(r, binary_op);
    +
    69 } else {
    +
    70 dr::drlog.debug(" with CPU\n");
    +
    71 return std_reduce(r, binary_op);
    +
    72 }
    +
    73 };
    +
    74 auto locals = rng::views::transform(local_segments(dr), reduce);
    +
    75 auto local = std_reduce(locals, binary_op);
    +
    76
    +
    77 std::vector<value_type> all(comm.size());
    +
    78 if (root_provided) {
    +
    79 // Everyone gathers to root, only root reduces
    +
    80 comm.gather(local, std::span{all}, root);
    +
    81 if (root == comm.rank()) {
    +
    82 return std_reduce(all, binary_op);
    +
    83 } else {
    +
    84 return value_type{};
    +
    85 }
    +
    86 } else {
    +
    87 // Everyone gathers and everyone reduces
    +
    88 comm.all_gather(local, all);
    +
    89 return std_reduce(all, binary_op);
    +
    90 }
    +
    91 } else {
    +
    92 dr::drlog.debug("Serial reduce\n");
    +
    93 value_type result{};
    +
    94 if (!root_provided || root == comm.rank()) {
    +
    95 result = std_reduce(dr, binary_op);
    +
    96 }
    +
    97 barrier();
    +
    98 return result;
    +
    99 }
    +
    100}
    +
    101
    +
    102// handles init
    +
    103template <typename T, dr::distributed_range DR>
    +
    104T reduce(std::size_t root, bool root_provided, DR &&dr, T init,
    +
    105 auto &&binary_op = std::plus<>{}) {
    +
    106
    +
    107 if (rng::empty(dr)) {
    +
    108 return init;
    +
    109 }
    +
    110 return binary_op(init, reduce(root, root_provided, dr, binary_op));
    +
    111}
    +
    112
    +
    113inline void
    +
    114#if defined(__GNUC__) && !defined(__clang__)
    +
    115 __attribute__((optimize(0)))
    +
    116#endif
    +
    117 no_optimize(auto x) {
    +
    118}
    +
    119
    +
    120}; // namespace dr::mp::__detail
    +
    121
    +
    122namespace dr::mp {
    +
    123
    +
    124//
    +
    125// Ranges
    +
    126//
    +
    127
    +
    128// range, init, and binary op, w/wo root
    +
    129
    +
    131template <typename T, dr::distributed_range DR>
    +
    132auto reduce(std::size_t root, DR &&dr, T init, auto &&binary_op) {
    +
    133 return __detail::reduce(root, true, std::forward<DR>(dr), init, binary_op);
    +
    134}
    +
    136template <typename T, dr::distributed_range DR>
    +
    137auto reduce(DR &&dr, T init, auto &&binary_op) {
    +
    138 return __detail::reduce(0, false, std::forward<DR>(dr), init, binary_op);
    +
    139}
    +
    140
    +
    141// range, init, w/wo root
    +
    142
    +
    144template <typename T, dr::distributed_range DR>
    +
    145auto reduce(std::size_t root, DR &&dr, T init) {
    +
    146 return __detail::reduce(root, true, std::forward<DR>(dr), init,
    +
    147 std::plus<>{});
    +
    148}
    +
    150template <typename T, dr::distributed_range DR> auto reduce(DR &&dr, T init) {
    +
    151 return __detail::reduce(0, false, std::forward<DR>(dr), init, std::plus<>{});
    +
    152}
    +
    153
    +
    154// range, w/wo root
    +
    155
    +
    157template <dr::distributed_range DR> auto reduce(std::size_t root, DR &&dr) {
    +
    158 return __detail::reduce(root, true, std::forward<DR>(dr), std::plus<>{});
    +
    159}
    +
    160
    +
    162template <dr::distributed_range DR> auto reduce(DR &&dr) {
    +
    163 auto x = __detail::reduce(0, false, std::forward<DR>(dr), std::plus<>{});
    +
    164
    +
    165 // The code below avoids an issue where DotProduct_ZipReduce_DR
    +
    166 // fails with gcc11. From debugging, I can see that the call to
    +
    167 // __detail::reduce above computes the correct value, but this
    +
    168 // function returns a bad value. My theory is that the problem is
    +
    169 // related to tail call optimization and the function below disables
    +
    170 // the optimization.
    +
    171 __detail::no_optimize(x);
    +
    172
    +
    173 return x;
    +
    174}
    +
    175
    +
    176//
    +
    177// Iterators
    +
    178//
    +
    179
    +
    180// range, init, and binary op, w/wo root
    +
    181
    +
    183template <typename T, dr::distributed_iterator DI>
    +
    184auto reduce(std::size_t root, DI first, DI last, T init, auto &&binary_op) {
    +
    185 return __detail::reduce(root, true, rng::subrange(first, last), init,
    +
    186 binary_op);
    +
    187}
    +
    189template <typename T, dr::distributed_iterator DI>
    +
    190auto reduce(DI first, DI last, T init, auto &&binary_op) {
    +
    191 return __detail::reduce(0, false, rng::subrange(first, last), init,
    +
    192 binary_op);
    +
    193}
    +
    194
    +
    195// range, init, w/wo root
    +
    196
    +
    198template <typename T, dr::distributed_iterator DI>
    +
    199auto reduce(std::size_t root, DI first, DI last, T init) {
    +
    200 return __detail::reduce(root, true, rng::subrange(first, last), init,
    +
    201 std::plus<>{});
    +
    202}
    +
    204template <typename T, dr::distributed_iterator DI>
    +
    205auto reduce(DI first, DI last, T init) {
    +
    206 return __detail::reduce(0, false, rng::subrange(first, last), init,
    +
    207 std::plus<>{});
    +
    208}
    +
    209
    +
    210// range, w/wo root
    +
    211
    +
    213template <dr::distributed_iterator DI>
    +
    214auto reduce(std::size_t root, DI first, DI last) {
    +
    215 return __detail::reduce(root, true, rng::subrange(first, last),
    +
    216 std::plus<>{});
    +
    217}
    +
    219template <dr::distributed_iterator DI> auto reduce(DI first, DI last) {
    +
    220 return __detail::reduce(0, false, rng::subrange(first, last), std::plus<>{});
    +
    221}
    +
    222
    +
    223} // namespace dr::mp
    +
    Definition: onedpl_direct_iterator.hpp:15
    +
    + + + + diff --git a/doxygen/mp_2algorithms_2sort_8hpp_source.html b/doxygen/mp_2algorithms_2sort_8hpp_source.html new file mode 100644 index 0000000000..0748e4c361 --- /dev/null +++ b/doxygen/mp_2algorithms_2sort_8hpp_source.html @@ -0,0 +1,565 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/algorithms/sort.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    sort.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#ifdef SYCL_LANGUAGE_VERSION
    +
    8#include <dr/sp/init.hpp>
    +
    9#include <oneapi/dpl/algorithm>
    +
    10#include <oneapi/dpl/execution>
    +
    11#include <oneapi/dpl/iterator>
    +
    12#endif
    +
    13
    +
    14#include <mpi.h>
    +
    15
    +
    16#include <algorithm>
    +
    17#include <utility>
    +
    18
    +
    19#include <dr/concepts/concepts.hpp>
    +
    20#include <dr/detail/logger.hpp>
    +
    21#include <dr/detail/onedpl_direct_iterator.hpp>
    +
    22#include <dr/detail/ranges_shim.hpp>
    +
    23#include <dr/mp/global.hpp>
    +
    24
    +
    25namespace dr::mp {
    +
    26
    +
    27namespace __detail {
    +
    28
    +
    29template <typename T> class buffer {
    +
    30
    +
    31public:
    +
    32 using value_type = T;
    +
    33 std::size_t size() { return size_; }
    +
    34
    +
    35 buffer(std::size_t cnt) : size_(cnt) {
    +
    36 if (cnt > 0) {
    +
    37 data_ = alloc_.allocate(cnt);
    +
    38 assert(data_ != nullptr);
    +
    39 }
    +
    40 }
    +
    41
    +
    42 ~buffer() {
    +
    43 if (data_ != nullptr)
    +
    44 alloc_.deallocate(data_, size_);
    +
    45 data_ = nullptr;
    +
    46 size_ = 0;
    +
    47 }
    +
    48
    +
    49 T *resize(std::size_t cnt) {
    +
    50 if (cnt == size_)
    +
    51 return data_;
    +
    52
    +
    53 if (cnt == 0) {
    +
    54 alloc_.deallocate(data_, size_);
    +
    55 data_ = nullptr;
    +
    56 } else {
    +
    57 T *newdata = alloc_.allocate(cnt);
    +
    58 copy(data_, newdata, std::min(size_, cnt));
    +
    59 alloc_.deallocate(data_, size_);
    +
    60 data_ = newdata;
    +
    61 }
    +
    62 size_ = cnt;
    +
    63 return data_;
    +
    64 }
    +
    65
    +
    66 void replace(buffer &other) {
    +
    67 if (data_ != nullptr)
    +
    68 alloc_.deallocate(data_, size_);
    +
    69
    +
    70 data_ = rng::data(other);
    +
    71 size_ = rng::size(other);
    +
    72 other.data_ = nullptr;
    +
    73 other.size_ = 0;
    +
    74 }
    +
    75
    +
    76 T *data() { return data_; }
    +
    77 T *begin() { return data_; }
    +
    78 T *end() { return data_ + size_; }
    +
    79
    +
    80private:
    +
    81 allocator<T> alloc_;
    +
    82 T *data_ = nullptr;
    +
    83 std::size_t size_ = 0;
    +
    84}; // class buffer
    +
    85
    +
    86template <typename R, typename Compare> void local_sort(R &r, Compare &&comp) {
    +
    87 if (rng::size(r) >= 2) {
    +
    88 if (mp::use_sycl()) {
    +
    89#ifdef SYCL_LANGUAGE_VERSION
    +
    90 auto policy = dpl_policy();
    +
    91 auto &&local_segment = dr::ranges::__detail::local(r);
    +
    92 DRLOG("GPU dpl::sort(), size {}", rng::size(r));
    +
    93 oneapi::dpl::sort(
    +
    94 policy, dr::__detail::direct_iterator(rng::begin(local_segment)),
    +
    95 dr::__detail::direct_iterator(rng::end(local_segment)), comp);
    +
    96#else
    +
    97 assert(false);
    +
    98#endif
    +
    99 } else {
    +
    100 DRLOG("cpu rng::sort, size {}", rng::size(r));
    +
    101 rng::sort(rng::begin(r), rng::end(r), comp);
    +
    102 }
    +
    103 }
    +
    104}
    +
    105
    +
    106template <typename T, typename Compare>
    +
    107void local_merge(buffer<T> &v, std::vector<std::size_t> chunks,
    +
    108 Compare &&comp) {
    +
    109
    +
    110 std::exclusive_scan(chunks.begin(), chunks.end(), chunks.begin(), 0);
    +
    111
    +
    112 while (chunks.size() > 1) {
    +
    113 std::size_t segno = chunks.size();
    +
    114 std::vector<std::size_t> next_chunks;
    +
    115 for (std::size_t i = 0; i < segno / 2; i++) {
    +
    116 auto first = v.begin() + chunks[2 * i];
    +
    117 auto middle = v.begin() + chunks[2 * i + 1];
    +
    118 auto last = (2 * i + 2 < segno) ? v.begin() + chunks[2 * i + 2] : v.end();
    +
    119 if (mp::use_sycl()) {
    +
    120#ifdef SYCL_LANGUAGE_VERSION
    +
    121 auto dfirst = dr::__detail::direct_iterator(first);
    +
    122 auto dmiddle = dr::__detail::direct_iterator(middle);
    +
    123 auto dlast = dr::__detail::direct_iterator(last);
    +
    124 oneapi::dpl::inplace_merge(dpl_policy(), dfirst, dmiddle, dlast, comp);
    +
    125#else
    +
    126 assert(false);
    +
    127#endif
    +
    128 } else {
    +
    129 std::inplace_merge(first, middle, last, comp);
    +
    130 }
    +
    131 next_chunks.push_back(chunks[2 * i]);
    +
    132 }
    +
    133 if (segno % 2 == 1) {
    +
    134 next_chunks.push_back(chunks[segno - 1]);
    +
    135 }
    +
    136 std::swap(chunks, next_chunks);
    +
    137 }
    +
    138}
    +
    139
    +
    140/* elements of dist_sort */
    +
    141template <typename valT, typename Compare, typename Seg>
    +
    142void splitters(Seg &lsegment, Compare &&comp,
    +
    143 std::vector<std::size_t> &vec_split_i,
    +
    144 std::vector<std::size_t> &vec_split_s) {
    +
    145 const std::size_t _comm_size = default_comm().size(); // dr-style ignore
    +
    146
    +
    147 assert(rng::size(vec_split_i) == _comm_size);
    +
    148 assert(rng::size(vec_split_s) == _comm_size);
    +
    149
    +
    150 std::vector<valT> vec_lmedians(_comm_size + 1);
    +
    151 std::vector<valT> vec_gmedians((_comm_size + 1) * _comm_size);
    +
    152
    +
    153 const double _step_m = static_cast<double>(rng::size(lsegment)) /
    +
    154 static_cast<double>(_comm_size);
    +
    155
    +
    156 /* calculate splitting values and indices - find n-1 dividers splitting
    +
    157 * each segment into equal parts */
    +
    158 if (mp::use_sycl()) {
    +
    159#ifdef SYCL_LANGUAGE_VERSION
    +
    160 std::vector<sycl::event> events;
    +
    161
    +
    162 for (std::size_t i = 0; i < rng::size(vec_lmedians) - 1; i++) {
    +
    163 assert(i * _step_m < rng::size(lsegment));
    +
    164 sycl::event ev = sycl_queue().memcpy(
    +
    165 &vec_lmedians[i], &lsegment[i * _step_m], sizeof(valT));
    +
    166 events.emplace_back(ev);
    +
    167 }
    +
    168 sycl::event ev =
    +
    169 sycl_queue().memcpy(&vec_lmedians[rng::size(vec_lmedians) - 1],
    +
    170 &lsegment[rng::size(lsegment) - 1], sizeof(valT));
    +
    171 events.emplace_back(ev);
    +
    172 sycl::event::wait(events);
    +
    173#else
    +
    174 assert(false);
    +
    175#endif
    +
    176 } else {
    +
    177 for (std::size_t i = 0; i < rng::size(vec_lmedians) - 1; i++) {
    +
    178 assert(i * _step_m < rng::size(lsegment));
    +
    179 vec_lmedians[i] = lsegment[i * _step_m];
    +
    180 }
    +
    181 vec_lmedians.back() = lsegment.back();
    +
    182 }
    +
    183
    +
    184 default_comm().all_gather(vec_lmedians, vec_gmedians);
    +
    185 rng::sort(rng::begin(vec_gmedians), rng::end(vec_gmedians), comp);
    +
    186
    +
    187 std::vector<valT> vec_split_v(_comm_size - 1);
    +
    188
    +
    189 for (std::size_t i = 0; i < _comm_size - 1; i++) {
    +
    190 auto global_median_idx = (i + 1) * (_comm_size + 1) - 1;
    +
    191 assert(global_median_idx < rng::size(vec_gmedians));
    +
    192 vec_split_v[i] = vec_gmedians[global_median_idx];
    +
    193 }
    +
    194
    +
    195 /* The while loop is executed in host memory, and together with
    +
    196 * sycl_copy takes most of the execution time of the sort procedure */
    +
    197 if (mp::use_sycl()) {
    +
    198#ifdef SYCL_LANGUAGE_VERSION
    +
    199 auto &&local_policy = dpl_policy();
    +
    200 sycl::queue q = sycl_queue();
    +
    201
    +
    202 auto lsb = dr::__detail::direct_iterator(rng::begin(lsegment));
    +
    203 auto lse = dr::__detail::direct_iterator(rng::end(lsegment));
    +
    204
    +
    205 oneapi::dpl::lower_bound(local_policy, lsb, lse, vec_split_v.begin(),
    +
    206 vec_split_v.end(), vec_split_i.begin() + 1, comp);
    +
    207
    +
    208#else
    +
    209 assert(false);
    +
    210#endif
    +
    211 } else {
    +
    212 for (std::size_t i = 1; i <= rng::size(vec_split_v); i++) {
    +
    213 auto idx = vec_split_v[i - 1];
    +
    214 auto lower =
    +
    215 std::lower_bound(lsegment.begin(), lsegment.end(), idx, comp);
    +
    216 vec_split_i[i] = rng::distance(lsegment.begin(), lower);
    +
    217 }
    +
    218 }
    +
    219 for (std::size_t i = 1; i < vec_split_i.size(); i++) {
    +
    220 vec_split_s[i - 1] = vec_split_i[i] - vec_split_i[i - 1];
    +
    221 }
    +
    222 vec_split_s.back() = rng::size(lsegment) - vec_split_i.back();
    +
    223}
    +
    224
    +
    225template <typename valT>
    +
    226void shift_data(const int64_t shift_left, const int64_t shift_right,
    +
    227 buffer<valT> &vec_recvdata, buffer<valT> &vec_left,
    +
    228 buffer<valT> &vec_right) {
    +
    229 const std::size_t _comm_rank = default_comm().rank();
    +
    230
    +
    231 MPI_Request req_l, req_r;
    +
    232 MPI_Status stat_l, stat_r;
    +
    233
    +
    234 assert(static_cast<int64_t>(rng::size(vec_left)) == std::max(0L, shift_left));
    +
    235 assert(static_cast<int64_t>(rng::size(vec_right)) ==
    +
    236 std::max(0L, shift_right));
    +
    237
    +
    238 if (static_cast<int64_t>(rng::size(vec_recvdata)) < -shift_left) {
    +
    239 // Too little data in recv buffer to shift left - first get from right,
    +
    240 // then send left
    +
    241 DRLOG("Get from right first, recvdata size {} shift left {}",
    +
    242 rng::size(vec_recvdata), shift_left);
    +
    243
    +
    244 assert(shift_right > 0);
    +
    245
    +
    246 default_comm().irecv(rng::data(vec_right), rng::size(vec_right),
    +
    247 _comm_rank + 1, &req_r);
    +
    248 MPI_Wait(&req_r, &stat_r);
    +
    249
    +
    250 std::size_t old_size = rng::size(vec_recvdata);
    +
    251 vec_recvdata.resize(rng::size(vec_recvdata) + shift_right);
    +
    252
    +
    253 assert(rng::size(vec_right) <= rng::size(vec_recvdata) - old_size);
    +
    254
    +
    255 __detail::copy(rng::data(vec_right), rng::data(vec_recvdata) + old_size,
    +
    256 rng::size(vec_right));
    +
    257
    +
    258 vec_right.resize(0);
    +
    259
    +
    260 default_comm().isend(rng::data(vec_recvdata), -shift_left, _comm_rank - 1,
    +
    261 &req_l);
    +
    262 MPI_Wait(&req_l, &stat_l);
    +
    263
    +
    264 } else if (static_cast<int64_t>(rng::size(vec_recvdata)) < -shift_right) {
    +
    265 // Too little data in buffer to shift right - first get from left, then
    +
    266 // send right
    +
    267 // ** This will never happen, because values eq to split go right
    +
    268 DRLOG(
    +
    269 "Too little data in buffer to shift right - this should never happen");
    +
    270 assert(false);
    +
    271
    +
    272 } else {
    +
    273 // enough data in recv buffer
    +
    274 if (shift_left < 0) {
    +
    275 default_comm().isend(rng::data(vec_recvdata), -shift_left, _comm_rank - 1,
    +
    276 &req_l);
    +
    277 } else if (shift_left > 0) {
    +
    278 assert(shift_left == static_cast<int64_t>(rng::size(vec_left)));
    +
    279 default_comm().irecv(rng::data(vec_left), rng::size(vec_left),
    +
    280 _comm_rank - 1, &req_l);
    +
    281 }
    +
    282 if (shift_right > 0) {
    +
    283 assert(shift_right == static_cast<int64_t>(rng::size(vec_right)));
    +
    284 default_comm().irecv(rng::data(vec_right), rng::size(vec_right),
    +
    285 _comm_rank + 1, &req_r);
    +
    286 } else if (shift_right < 0) {
    +
    287 default_comm().isend(rng::data(vec_recvdata) + rng::size(vec_recvdata) +
    +
    288 shift_right,
    +
    289 -shift_right, _comm_rank + 1, &req_r);
    +
    290 }
    +
    291 if (shift_left != 0)
    +
    292 MPI_Wait(&req_l, &stat_l);
    +
    293 if (shift_right != 0)
    +
    294 MPI_Wait(&req_r, &stat_r);
    +
    295 }
    +
    296}
    +
    297
    +
    298template <typename valT>
    +
    299void copy_results(auto &lsegment, const int64_t shift_left,
    +
    300 const int64_t shift_right, buffer<valT> &vec_recvdata,
    +
    301 buffer<valT> &vec_left, buffer<valT> &vec_right) {
    +
    302 const std::size_t invalidate_left = std::max(-shift_left, 0L);
    +
    303 const std::size_t invalidate_right = std::max(-shift_right, 0L);
    +
    304
    +
    305 const std::size_t size_l = rng::size(vec_left);
    +
    306 const std::size_t size_r = rng::size(vec_right);
    +
    307 const std::size_t size_d =
    +
    308 rng::size(vec_recvdata) - (invalidate_left + invalidate_right);
    +
    309
    +
    310 if (mp::use_sycl()) {
    +
    311#ifdef SYCL_LANGUAGE_VERSION
    +
    312 sycl::event e_l, e_d, e_r;
    +
    313
    +
    314 if (size_l > 0) {
    +
    315 assert(size_l <= rng::size(lsegment));
    +
    316 e_l = sycl_queue().copy(rng::data(vec_left), rng::data(lsegment), size_l);
    +
    317 }
    +
    318 if (size_r > 0) {
    +
    319 assert(size_l + size_d + size_r <= rng::size(lsegment));
    +
    320 e_r = sycl_queue().copy(rng::data(vec_right),
    +
    321 rng::data(lsegment) + size_l + size_d, size_r);
    +
    322 }
    +
    323 if (size_d > 0) {
    +
    324 assert(size_l + size_d <= rng::size(lsegment));
    +
    325 assert(invalidate_left + size_d <= rng::size(vec_recvdata));
    +
    326 e_d = sycl_queue().copy(rng::data(vec_recvdata) + invalidate_left,
    +
    327 rng::data(lsegment) + size_l, size_d);
    +
    328 }
    +
    329 if (size_l > 0)
    +
    330 e_l.wait();
    +
    331 if (size_r > 0)
    +
    332 e_r.wait();
    +
    333 if (size_d > 0)
    +
    334 e_d.wait();
    +
    335
    +
    336#else
    +
    337 assert(false);
    +
    338#endif
    +
    339 } else {
    +
    340 if (size_l > 0) {
    +
    341 assert(size_l <= rng::size(lsegment));
    +
    342 std::copy(rng::begin(vec_left), rng::end(vec_left), rng::begin(lsegment));
    +
    343 }
    +
    344 if (size_r > 0) {
    +
    345 assert(size_l + size_d + size_r <= rng::size(lsegment));
    +
    346 std::copy(rng::begin(vec_right), rng::end(vec_right),
    +
    347 rng::begin(lsegment) + size_l + size_d);
    +
    348 }
    +
    349 if (size_d > 0) {
    +
    350 assert(size_l + size_d <= rng::size(lsegment));
    +
    351 assert(invalidate_left + size_d <= rng::size(vec_recvdata));
    +
    352 std::copy(rng::begin(vec_recvdata) + invalidate_left,
    +
    353 rng::begin(vec_recvdata) + invalidate_left + size_d,
    +
    354 rng::begin(lsegment) + size_l);
    +
    355 }
    +
    356 }
    +
    357}
    +
    358
    +
    359template <dr::distributed_range R, typename Compare>
    +
    360void dist_sort(R &r, Compare &&comp) {
    +
    361 using valT = typename R::value_type;
    +
    362
    +
    363 const std::size_t _comm_rank = default_comm().rank();
    +
    364 const std::size_t _comm_size = default_comm().size(); // dr-style ignore
    +
    365
    +
    366 auto &&lsegment = local_segment(r);
    +
    367
    +
    368 std::vector<std::size_t> vec_split_i(_comm_size, 0);
    +
    369 std::vector<std::size_t> vec_split_s(_comm_size, 0);
    +
    370 std::vector<std::size_t> vec_rsizes(_comm_size, 0);
    +
    371 std::vector<std::size_t> vec_rindices(_comm_size, 0);
    +
    372 std::vector<std::size_t> vec_recv_elems(_comm_size, 0);
    +
    373 std::size_t _total_elems = 0;
    +
    374
    +
    375 DRLOG("Rank {}: Dist sort, local segment size {}", default_comm().rank(),
    +
    376 rng::size(lsegment));
    +
    377 __detail::local_sort(lsegment, comp);
    +
    378
    +
    379 /* find splitting values - limits of areas to send to other processes */
    +
    380 __detail::splitters<valT>(lsegment, comp, vec_split_i, vec_split_s);
    +
    381 default_comm().alltoall(vec_split_s, vec_rsizes, 1);
    +
    382
    +
    383 /* prepare data to send and receive */
    +
    384 std::exclusive_scan(vec_rsizes.begin(), vec_rsizes.end(),
    +
    385 vec_rindices.begin(), 0);
    +
    386 const std::size_t _recv_elems = vec_rindices.back() + vec_rsizes.back();
    +
    387
    +
    388 /* send and receive data belonging to each node, then redistribute
    +
    389 * data to achieve size of data equal to size of local segment */
    +
    390 /* async i_all_gather causes problems on some systems */
    +
    391 // MPI_Request req_recvelems;
    +
    392 default_comm().all_gather(_recv_elems, vec_recv_elems);
    +
    393
    +
    394 /* buffer for received data */
    +
    395 buffer<valT> vec_recvdata(_recv_elems);
    +
    396
    +
    397 /* send data not belonging and receive data belonging to local processes
    +
    398 */
    +
    399 default_comm().alltoallv(lsegment, vec_split_s, vec_split_i, vec_recvdata,
    +
    400 vec_rsizes, vec_rindices);
    +
    401
    +
    402 __detail::local_merge(vec_recvdata, vec_rsizes, comp);
    +
    403
    +
    404 // MPI_Wait(&req_recvelems, MPI_STATUS_IGNORE);
    +
    405
    +
    406 _total_elems = std::reduce(vec_recv_elems.begin(), vec_recv_elems.end());
    +
    407
    +
    408 /* prepare data for shift to neighboring processes */
    +
    409 std::vector<int64_t> vec_shift(_comm_size - 1);
    +
    410
    +
    411 const auto desired_elems_num = (_total_elems + _comm_size - 1) / _comm_size;
    +
    412
    +
    413 vec_shift[0] = desired_elems_num - vec_recv_elems[0];
    +
    414 for (std::size_t i = 1; i < _comm_size - 1; i++) {
    +
    415 vec_shift[i] = vec_shift[i - 1] + desired_elems_num - vec_recv_elems[i];
    +
    416 }
    +
    417
    +
    418 const int64_t shift_left = _comm_rank == 0 ? 0 : -vec_shift[_comm_rank - 1];
    +
    419 const int64_t shift_right =
    +
    420 _comm_rank == _comm_size - 1 ? 0 : vec_shift[_comm_rank];
    +
    421
    +
    422 buffer<valT> vec_left(std::max(shift_left, 0L));
    +
    423 buffer<valT> vec_right(std::max(shift_right, 0L));
    +
    424
    +
    425 /* shift data if necessary, to have exactly the number of elements equal to
    +
    426 * lsegment size */
    +
    427 __detail::shift_data<valT>(shift_left, shift_right, vec_recvdata, vec_left,
    +
    428 vec_right);
    +
    429
    +
    430 /* copy results to distributed vector's local segment */
    +
    431 __detail::copy_results<valT>(lsegment, shift_left, shift_right, vec_recvdata,
    +
    432 vec_left, vec_right);
    +
    433} // __detail::dist_sort
    +
    434
    +
    435} // namespace __detail
    +
    436
    +
    437template <dr::distributed_range R, typename Compare = std::less<>>
    +
    438void sort(R &r, Compare &&comp = Compare()) {
    +
    439
    +
    440 using valT = typename R::value_type;
    +
    441
    +
    442 std::size_t _comm_rank = default_comm().rank();
    +
    443 std::size_t _comm_size = default_comm().size(); // dr-style ignore
    +
    444
    +
    445 if (_comm_size == 1) {
    +
    446 DRLOG("mp::sort() - one node only");
    +
    447 auto &&lsegment = local_segment(r);
    +
    448 __detail::local_sort(lsegment, comp);
    +
    449
    +
    450 } else if (rng::size(r) <= (_comm_size - 1) * (_comm_size - 1)) {
    +
    451 /* Distributed vector of size <= (comm_size-1) * (comm_size-1) may have
    +
    452 * 0-size local segments. It is also small enough to prefer sequential sort
    +
    453 */
    +
    454 DRLOG("mp::sort() - local sort on node 0");
    +
    455
    +
    456 std::vector<valT> vec_recvdata(rng::size(r));
    +
    457 dr::mp::copy(0, r, rng::begin(vec_recvdata));
    +
    458
    +
    459 if (_comm_rank == 0) {
    +
    460 rng::sort(vec_recvdata, comp);
    +
    461 }
    +
    462 dr::mp::barrier();
    +
    463 dr::mp::copy(0, vec_recvdata, rng::begin(r));
    +
    464
    +
    465 } else {
    +
    466 DRLOG("mp::sort() - distributed sort");
    +
    467 __detail::dist_sort(r, comp);
    +
    468 dr::mp::barrier();
    +
    469 }
    +
    470}
    +
    471
    +
    472template <dr::distributed_iterator RandomIt, typename Compare = std::less<>>
    +
    473void sort(RandomIt first, RandomIt last, Compare comp = Compare()) {
    +
    474 sort(rng::subrange(first, last), comp);
    +
    475}
    +
    476
    +
    477} // namespace dr::mp
    +
    Definition: onedpl_direct_iterator.hpp:15
    +
    Definition: allocator.hpp:11
    +
    Definition: sort.hpp:29
    +
    + + + + diff --git a/doxygen/mp_2algorithms_2transform_8hpp_source.html b/doxygen/mp_2algorithms_2transform_8hpp_source.html new file mode 100644 index 0000000000..4b33821715 --- /dev/null +++ b/doxygen/mp_2algorithms_2transform_8hpp_source.html @@ -0,0 +1,127 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/algorithms/transform.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    transform.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <algorithm>
    +
    8#include <execution>
    +
    9#include <type_traits>
    +
    10#include <utility>
    +
    11
    +
    12#include <dr/concepts/concepts.hpp>
    +
    13#include <dr/detail/logger.hpp>
    +
    14#include <dr/detail/onedpl_direct_iterator.hpp>
    +
    15#include <dr/detail/ranges_shim.hpp>
    +
    16#include <dr/mp/global.hpp>
    +
    17
    +
    18namespace dr::mp {
    +
    19
    +
    20void transform(rng::forward_range auto &&in, dr::distributed_iterator auto out,
    +
    21 auto op) {
    +
    22 if (rng::empty(in)) {
    +
    23 return;
    +
    24 }
    +
    25 assert(aligned(in, out));
    +
    26
    +
    27 auto zip = mp::views::zip(in, rng::subrange(out, out + rng::size(in)));
    +
    28 auto transform_op = [op](auto pair) {
    +
    29 auto &[in, out] = pair;
    +
    30 out = op(in);
    +
    31 };
    +
    32 for_each(zip, transform_op);
    +
    33}
    +
    34
    +
    35template <rng::forward_iterator DI_IN>
    +
    36void transform(DI_IN &&first, DI_IN &&last, dr::distributed_iterator auto &&out,
    +
    37 auto op) {
    +
    38 mp::transform(rng::subrange(first, last), out, op);
    +
    39}
    +
    40
    +
    41} // namespace dr::mp
    +
    Definition: concepts.hpp:31
    +
    + + + + diff --git a/doxygen/mp_2containers_2distributed__vector_8hpp_source.html b/doxygen/mp_2containers_2distributed__vector_8hpp_source.html new file mode 100644 index 0000000000..c841eaeef6 --- /dev/null +++ b/doxygen/mp_2containers_2distributed__vector_8hpp_source.html @@ -0,0 +1,420 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/containers/distributed_vector.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    distributed_vector.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <dr/mp/algorithms/fill.hpp>
    +
    8#include <dr/mp/allocator.hpp>
    +
    9#include <dr/mp/containers/distribution.hpp>
    +
    10#include <dr/mp/containers/segment.hpp>
    +
    11
    +
    12namespace dr::mp {
    +
    13
    + +
    15 dr::rma_window win_;
    +
    16
    +
    17public:
    +
    18 void *allocate(std::size_t data_size) {
    +
    19 assert(data_size > 0);
    +
    20 void *data = __detail::allocator<std::byte>().allocate(data_size);
    +
    21 DRLOG("called MPI allocate({}) -> got:{}", data_size, data);
    +
    22 win_.create(default_comm(), data, data_size);
    +
    23 active_wins().insert(win_.mpi_win());
    +
    24 return data;
    +
    25 }
    +
    26
    +
    27 void deallocate(void *data, std::size_t data_size) {
    +
    28 assert(data_size > 0);
    +
    29 DRLOG("calling MPI deallocate ({}, data_size:{})", data, data_size);
    +
    30 active_wins().erase(win_.mpi_win());
    +
    31 win_.free();
    +
    32 __detail::allocator<std::byte>().deallocate(static_cast<std::byte *>(data),
    +
    33 data_size);
    +
    34 }
    +
    35
    +
    36 void getmem(void *dst, std::size_t offset, std::size_t datalen,
    +
    37 int segment_index) {
    +
    38 DRLOG("calling MPI get(dst:{}, "
    +
    39 "segm_offset:{}, size:{}, peer:{})",
    +
    40 dst, offset, datalen, segment_index);
    +
    41
    +
    42#if (MPI_VERSION >= 4) || \
    +
    43 (defined(I_MPI_NUMVERSION) && (I_MPI_NUMVERSION > 20211200000))
    +
    44 // 64-bit API inside
    +
    45 win_.get(dst, datalen, segment_index, offset);
    +
    46#else
    +
    47 for (std::size_t remainder = datalen, off = 0UL; remainder > 0;) {
    +
    48 std::size_t s = std::min(remainder, (std::size_t)INT_MAX);
    +
    49 DRLOG("{}:{} win_.get total {} now {} bytes at off {}, dst offset {}",
    +
    50 default_comm().rank(), __LINE__, datalen, s, off, offset + off);
    +
    51 win_.get((uint8_t *)dst + off, s, segment_index, offset + off);
    +
    52 off += s;
    +
    53 remainder -= s;
    +
    54 }
    +
    55#endif
    +
    56 }
    +
    57
    +
    58 void putmem(void const *src, std::size_t offset, std::size_t datalen,
    +
    59 int segment_index) {
    +
    60 DRLOG("calling MPI put(segm_offset:{}, "
    +
    61 "src:{}, size:{}, peer:{})",
    +
    62 offset, src, datalen, segment_index);
    +
    63
    +
    64#if (MPI_VERSION >= 4) || \
    +
    65 (defined(I_MPI_NUMVERSION) && (I_MPI_NUMVERSION > 20211200000))
    +
    66 // 64-bit API inside
    +
    67 win_.put(src, datalen, segment_index, offset);
    +
    68#else
    +
    69 for (std::size_t remainder = datalen, off = 0UL; remainder > 0;) {
    +
    70 std::size_t s = std::min(remainder, (std::size_t)INT_MAX);
    +
    71 DRLOG("{}:{} win_.put {} bytes at off {}, dst offset {}",
    +
    72 default_comm().rank(), __LINE__, s, off, offset + off);
    +
    73 win_.put((uint8_t *)src + off, s, segment_index, offset + off);
    +
    74 off += s;
    +
    75 remainder -= s;
    +
    76 }
    +
    77#endif
    +
    78 }
    +
    79
    +
    80 std::size_t getrank() { return win_.communicator().rank(); }
    +
    81
    +
    82 void fence() { win_.fence(); }
    +
    83};
    +
    84
    +
    85#ifdef DRISHMEM
    +
    86class IshmemBackend {
    +
    87 void *shared_mem_;
    +
    88
    +
    89public:
    +
    90 void *allocate(std::size_t data_size) {
    +
    91 assert(data_size > 0);
    +
    92 shared_mem_ = ishmem_malloc(data_size);
    +
    93 DRLOG("called ishmem_malloc({}) -> got:{}", data_size, shared_mem_);
    +
    94 return shared_mem_;
    +
    95 }
    +
    96
    +
    97 void deallocate(void *data, std::size_t data_size) {
    +
    98 assert(data_size > 0);
    +
    99 assert(data == shared_mem_);
    +
    100 drlog.debug("calling ishmem_free({})\n", data);
    +
    101 ishmem_free(data);
    +
    102 }
    +
    103
    +
    104 void getmem(void *dst, std::size_t offset, std::size_t datalen,
    +
    105 int segment_index) {
    +
    106 void *src = static_cast<std::byte *>(shared_mem_) + offset;
    +
    107
    +
    108 DRLOG("calling ishmem_getmem(dst:{}, src:{} (= dv:{} + "
    +
    109 "segm_offset:{}), size:{}, peer:{})",
    +
    110 dst, src, shared_mem_, offset, datalen, segment_index);
    +
    111
    +
    112 ishmem_getmem(dst, src, datalen, segment_index);
    +
    113 }
    +
    114
    +
    115 void putmem(void const *src, std::size_t offset, std::size_t datalen,
    +
    116 int segment_index) {
    +
    117 void *dst = static_cast<std::byte *>(shared_mem_) + offset;
    +
    118 DRLOG("calling ishmem_putmem(dst:{} (= dv:{} + segm_offset:{}), "
    +
    119 "src:{}, size:{}, peer:{})",
    +
    120 dst, shared_mem_, offset, src, datalen, segment_index);
    +
    121 ishmem_putmem(dst, src, datalen, segment_index);
    +
    122 }
    +
    123
    +
    124 std::size_t getrank() {
    +
    125 auto my_process_segment_index = ishmem_my_pe();
    +
    126 DRLOG("called ishmem_my_pe() -> {}", my_process_segment_index);
    +
    127 return my_process_segment_index;
    +
    128 }
    +
    129
    +
    130 void fence() {
    +
    131 // TODO: to have locality use ishmemx_fence_work_group
    +
    132 ishmem_fence();
    +
    133 }
    +
    134};
    +
    135#endif
    +
    136
    +
    138template <typename T, class BackendT = MpiBackend> class distributed_vector {
    +
    139
    +
    140public:
    +
    141 using value_type = T;
    +
    142 using size_type = std::size_t;
    +
    143 using difference_type = std::ptrdiff_t;
    +
    144 using backend_type = BackendT;
    +
    145
    +
    146 class iterator {
    +
    147 public:
    +
    148 using iterator_category = std::random_access_iterator_tag;
    +
    149 using value_type = typename distributed_vector::value_type;
    +
    150 using difference_type = typename distributed_vector::difference_type;
    +
    151
    +
    152 iterator() {}
    +
    153 iterator(const distributed_vector *parent, difference_type offset)
    +
    154 : parent_(parent), offset_(offset) {}
    +
    155
    +
    156 auto operator+(difference_type n) const {
    +
    157 return iterator(parent_, offset_ + n);
    +
    158 }
    +
    159 friend auto operator+(difference_type n, const iterator &other) {
    +
    160 return other + n;
    +
    161 }
    +
    162 auto operator-(difference_type n) const {
    +
    163 return iterator(parent_, offset_ - n);
    +
    164 }
    +
    165 auto operator-(iterator other) const { return offset_ - other.offset_; }
    +
    166
    +
    167 auto &operator+=(difference_type n) {
    +
    168 offset_ += n;
    +
    169 return *this;
    +
    170 }
    +
    171 auto &operator-=(difference_type n) {
    +
    172 offset_ -= n;
    +
    173 return *this;
    +
    174 }
    +
    175 auto &operator++() {
    +
    176 offset_++;
    +
    177 return *this;
    +
    178 }
    +
    179 auto operator++(int) {
    +
    180 auto old = *this;
    +
    181 offset_++;
    +
    182 return old;
    +
    183 }
    +
    184 auto &operator--() {
    +
    185 offset_--;
    +
    186 return *this;
    +
    187 }
    +
    188 auto operator--(int) {
    +
    189 auto old = *this;
    +
    190 offset_--;
    +
    191 return old;
    +
    192 }
    +
    193
    +
    194 bool operator==(iterator other) const {
    +
    195 if (parent_ == nullptr || other.parent_ == nullptr) {
    +
    196 return false;
    +
    197 } else {
    +
    198 return offset_ == other.offset_;
    +
    199 }
    +
    200 }
    +
    201 auto operator<=>(iterator other) const {
    +
    202 assert(parent_ == other.parent_);
    +
    203 return offset_ <=> other.offset_;
    +
    204 }
    +
    205
    +
    206 auto operator*() const {
    +
    207 auto segment_size = parent_->segment_size_;
    +
    208 return parent_
    +
    209 ->segments()[offset_ / segment_size][offset_ % segment_size];
    +
    210 }
    +
    211 auto operator[](difference_type n) const { return *(*this + n); }
    +
    212
    +
    213 auto local() {
    +
    214 auto segment_size = parent_->segment_size_;
    +
    215 return (parent_->segments()[offset_ / segment_size].begin() +
    +
    216 offset_ % segment_size)
    +
    217 .local();
    +
    218 }
    +
    219
    +
    220 //
    +
    221 // Support for distributed ranges
    +
    222 //
    +
    223 // distributed iterator provides segments
    +
    224 // remote iterator provides local
    +
    225 //
    +
    226 auto segments() {
    +
    227 return dr::__detail::drop_segments(parent_->segments(), offset_);
    +
    228 }
    +
    229
    +
    230 private:
    +
    231 const distributed_vector *parent_ = nullptr;
    +
    232 difference_type offset_;
    +
    233 };
    +
    234
    +
    235 // Do not copy
    +
    236 // We need a move constructor for the implementation of reduce algorithm
    +
    237 distributed_vector(const distributed_vector &) = delete;
    +
    238 distributed_vector &operator=(const distributed_vector &) = delete;
    +
    239 distributed_vector(distributed_vector &&) { assert(false); }
    +
    240
    + +
    243 init(size, dist);
    +
    244 }
    +
    245
    +
    247 distributed_vector(std::size_t size, value_type fill_value,
    +
    248 distribution dist = distribution()) {
    +
    249 init(size, dist);
    +
    250 mp::fill(*this, fill_value);
    +
    251 }
    +
    252
    + +
    254 if (!finalized()) {
    +
    255 fence();
    +
    256 if (data_ != nullptr) {
    +
    257 backend.deallocate(data_, data_size_ * sizeof(value_type));
    +
    258 }
    +
    259
    +
    260 delete halo_;
    +
    261 }
    +
    262 }
    +
    263
    +
    265 auto begin() const { return iterator(this, 0); }
    +
    267 auto end() const { return begin() + size_; }
    +
    268
    +
    270 auto size() const { return size_; }
    +
    272 auto operator[](difference_type n) const { return *(begin() + n); }
    +
    273 auto &halo() const { return *halo_; }
    +
    274
    +
    275 auto segments() const { return rng::views::all(segments_); }
    +
    276
    +
    277 void fence() { backend.fence(); }
    +
    278
    +
    279private:
    +
    280 void init(auto size, auto dist) {
    +
    281 size_ = size;
    +
    282 distribution_ = dist;
    +
    283
    +
    284 // determine the distribution of data
    +
    285 auto comm_size = default_comm().size(); // dr-style ignore
    +
    286 auto hb = dist.halo();
    +
    287 std::size_t gran = dist.granularity();
    +
    288 // TODO: make this an error that is reported back to user
    +
    289 assert(size % gran == 0 && "size must be a multiple of the granularity");
    +
    290 assert(hb.prev % gran == 0 && "size must be a multiple of the granularity");
    +
    291 assert(hb.next % gran == 0 && "size must be a multiple of the granularity");
    +
    292 segment_size_ = gran * std::max({(size / gran + comm_size - 1) / comm_size,
    +
    293 hb.prev / gran, hb.next / gran});
    +
    294
    +
    295 data_size_ = segment_size_ + hb.prev + hb.next;
    +
    296
    +
    297 if (size_ > 0) {
    +
    298 data_ = static_cast<T *>(backend.allocate(data_size_ * sizeof(T)));
    +
    299 }
    +
    300
    +
    301 halo_ = new span_halo<T>(default_comm(), data_, data_size_, hb);
    +
    302
    +
    303 std::size_t segment_index = 0;
    +
    304 for (std::size_t i = 0; i < size; i += segment_size_) {
    +
    305 segments_.emplace_back(this, segment_index++,
    +
    306 std::min(segment_size_, size - i), data_size_);
    +
    307 }
    +
    308
    +
    309 fence();
    +
    310 }
    +
    311
    +
    312 friend dv_segment_iterator<distributed_vector>;
    +
    313
    +
    314 std::size_t segment_size_ = 0;
    +
    315 std::size_t data_size_ = 0; // size + halo
    +
    316 T *data_ = nullptr;
    +
    317 span_halo<T> *halo_;
    +
    318
    +
    319 distribution distribution_;
    +
    320 std::size_t size_;
    +
    321 std::vector<dv_segment<distributed_vector>> segments_;
    +
    322 BackendT backend;
    +
    323};
    +
    324
    +
    325template <typename T, typename B>
    +
    326auto &halo(const distributed_vector<T, B> &dv) {
    +
    327 return dv.halo();
    +
    328}
    +
    329
    +
    330} // namespace dr::mp
    +
    Definition: distributed_vector.hpp:14
    +
    Definition: allocator.hpp:11
    +
    Definition: distributed_vector.hpp:146
    +
    distributed vector
    Definition: distributed_vector.hpp:138
    +
    auto size() const
    Returns size.
    Definition: distributed_vector.hpp:270
    +
    auto operator[](difference_type n) const
    Returns reference using index.
    Definition: distributed_vector.hpp:272
    +
    distributed_vector(std::size_t size, value_type fill_value, distribution dist=distribution())
    Constructor.
    Definition: distributed_vector.hpp:247
    +
    auto end() const
    Returns iterator to end.
    Definition: distributed_vector.hpp:267
    +
    auto begin() const
    Returns iterator to beginning.
    Definition: distributed_vector.hpp:265
    +
    distributed_vector(std::size_t size=0, distribution dist=distribution())
    Constructor.
    Definition: distributed_vector.hpp:242
    +
    Definition: communicator.hpp:230
    +
    Definition: distribution.hpp:11
    +
    + + + + diff --git a/doxygen/mp_2views_2enumerate_8hpp_source.html b/doxygen/mp_2views_2enumerate_8hpp_source.html new file mode 100644 index 0000000000..58141e3444 --- /dev/null +++ b/doxygen/mp_2views_2enumerate_8hpp_source.html @@ -0,0 +1,144 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/views/enumerate.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    enumerate.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <dr/mp/views/zip.hpp>
    +
    8
    +
    9namespace dr::mp {
    +
    10
    +
    11namespace views {
    +
    12
    +
    13namespace __detail {
    +
    14
    +
    15template <rng::range R> struct range_size {
    +
    16 using type = std::size_t;
    +
    17};
    +
    18
    +
    19template <rng::sized_range R> struct range_size<R> {
    +
    20 using type = rng::range_size_t<R>;
    +
    21};
    +
    22
    +
    23template <rng::range R> using range_size_t = typename range_size<R>::type;
    +
    24
    +
    25} // namespace __detail
    +
    26
    + +
    28public:
    +
    29 template <rng::viewable_range R>
    +
    30 requires(rng::sized_range<R>)
    +
    31 auto operator()(R &&r) const {
    +
    32 using W = std::uint32_t;
    +
    33 return mp::views::zip(mp::views::iota(W(0), W(rng::distance(r))),
    +
    34 std::forward<R>(r));
    +
    35 }
    +
    36
    +
    37 template <rng::viewable_range R>
    +
    38 friend auto operator|(R &&r, const enumerate_adapter_closure &closure) {
    +
    39 return closure(std::forward<R>(r));
    +
    40 }
    +
    41};
    +
    42
    + +
    44public:
    +
    45 template <rng::viewable_range R> constexpr auto operator()(R &&r) const {
    +
    46 return enumerate_adapter_closure{}(std::forward<R>(r));
    +
    47 }
    +
    48
    +
    49 inline auto enumerate() const { return enumerate_adapter_closure{}; }
    +
    50};
    +
    51
    +
    52inline constexpr auto enumerate = enumerate_fn_{};
    +
    53
    +
    54} // namespace views
    +
    55
    +
    56} // namespace dr::mp
    +
    Definition: enumerate.hpp:27
    +
    Definition: enumerate.hpp:43
    +
    Definition: enumerate.hpp:15
    +
    + + + + diff --git a/doxygen/mp_2views_2views_8hpp_source.html b/doxygen/mp_2views_2views_8hpp_source.html new file mode 100644 index 0000000000..83e11843e5 --- /dev/null +++ b/doxygen/mp_2views_2views_8hpp_source.html @@ -0,0 +1,173 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/views/views.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    views.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <dr/detail/ranges_shim.hpp>
    +
    8#include <dr/views/iota.hpp>
    +
    9#include <dr/views/transform.hpp>
    +
    10
    +
    11namespace dr::mp {
    +
    12
    +
    13// Select segments local to this rank and convert the iterators in the
    +
    14// segment to local
    +
    15template <typename R> auto local_segments(R &&dr) {
    +
    16 auto is_local = [](const auto &segment) {
    +
    17 return dr::ranges::rank(segment) == default_comm().rank();
    +
    18 };
    +
    19 // Convert from remote iter to local iter
    +
    20 auto local_iter = [](const auto &segment) {
    +
    21 auto b = dr::ranges::local(rng::begin(segment));
    +
    22 return rng::subrange(b, b + rng::distance(segment));
    +
    23 };
    +
    24 return dr::ranges::segments(std::forward<R>(dr)) |
    +
    25 rng::views::filter(is_local) | rng::views::transform(local_iter);
    +
    26}
    +
    27
    +
    28template <typename R> auto local_segments_with_idx(R &&dr) {
    +
    29 auto is_local = [](const auto &segment_with_idx) {
    +
    30 return dr::ranges::rank(std::get<1>(segment_with_idx)) ==
    +
    31 default_comm().rank();
    +
    32 };
    +
    33 // Convert from remote iter to local iter
    +
    34 auto local_iter = [](const auto &segment_with_idx) {
    +
    35 auto &&[idx, segment] = segment_with_idx;
    +
    36 auto b = dr::ranges::local(rng::begin(segment));
    +
    37 return std::tuple(idx, rng::subrange(b, b + rng::distance(segment)));
    +
    38 };
    +
    39 return dr::ranges::segments(std::forward<R>(dr)) | rng::views::enumerate |
    +
    40 rng::views::filter(is_local) | rng::views::transform(local_iter);
    +
    41}
    +
    42
    +
    43template <dr::distributed_contiguous_range R> auto local_segment(R &&r) {
    +
    44 auto segments = dr::mp::local_segments(std::forward<R>(r));
    +
    45
    +
    46 if (rng::empty(segments)) {
    +
    47 return rng::range_value_t<decltype(segments)>{};
    +
    48 }
    +
    49
    +
    50 // Should be error, not assert. Or we could join all the segments
    +
    51 assert(rng::distance(segments) == 1);
    +
    52 return *rng::begin(segments);
    +
    53}
    +
    54
    +
    55template <typename R> auto local_mdspans(R &&dr) {
    +
    56 return dr::ranges::segments(std::forward<R>(dr))
    +
    57 // Select the local segments
    +
    58 | rng::views::filter([](auto s) {
    +
    59 return dr::ranges::rank(s) == default_comm().rank();
    +
    60 })
    +
    61 // Extract the mdspan
    +
    62 | rng::views::transform([](auto s) { return s.mdspan(); });
    +
    63}
    +
    64
    +
    65template <dr::distributed_contiguous_range R> auto local_mdspan(R &&r) {
    +
    66 auto mdspans = dr::mp::local_mdspans(std::forward<R>(r));
    +
    67
    +
    68 if (rng::empty(mdspans)) {
    +
    69 return rng::range_value_t<decltype(mdspans)>{};
    +
    70 }
    +
    71
    +
    72 // Should be error, not assert. Or we could join all the segments
    +
    73 assert(rng::distance(mdspans) == 1);
    +
    74 return *rng::begin(mdspans);
    +
    75}
    +
    76
    +
    77} // namespace dr::mp
    +
    78
    +
    79namespace dr::mp::views {
    +
    80
    +
    81inline constexpr auto all = rng::views::all;
    +
    82inline constexpr auto counted = rng::views::counted;
    +
    83inline constexpr auto drop = rng::views::drop;
    +
    84inline constexpr auto iota = dr::views::iota;
    +
    85inline constexpr auto take = rng::views::take;
    +
    86inline constexpr auto transform = dr::views::transform;
    +
    87
    +
    88} // namespace dr::mp::views
    +
    + + + + diff --git a/doxygen/mp_8hpp_source.html b/doxygen/mp_8hpp_source.html new file mode 100644 index 0000000000..dc5f125b8e --- /dev/null +++ b/doxygen/mp_8hpp_source.html @@ -0,0 +1,166 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    mp.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#ifdef SYCL_LANGUAGE_VERSION
    +
    8#include <oneapi/dpl/algorithm>
    +
    9#include <oneapi/dpl/execution>
    +
    10#include <oneapi/dpl/numeric>
    +
    11#endif
    +
    12
    +
    13#ifdef DRISHMEM
    +
    14#include <ishmem.h>
    +
    15#endif
    +
    16
    +
    17#include <cassert>
    +
    18#include <concepts>
    +
    19#include <execution>
    +
    20#include <fstream>
    +
    21#include <iostream>
    +
    22#include <iterator>
    +
    23#include <memory>
    +
    24#include <optional>
    +
    25#include <set>
    +
    26#include <span>
    +
    27#include <string>
    +
    28#include <utility>
    +
    29#include <vector>
    +
    30
    +
    31#include <vendor/source_location/source_location.hpp>
    +
    32
    +
    33// MPI should be optional
    +
    34#include <mkl.h>
    +
    35#include <mpi.h>
    +
    36
    +
    37#include <dr/detail/format_shim.hpp>
    +
    38#include <dr/detail/ranges_shim.hpp>
    +
    39
    +
    40// clang-format off
    +
    41#include <dr/concepts/concepts.hpp>
    +
    42
    +
    43#include <dr/detail/logger.hpp>
    +
    44#include <dr/detail/view_detectors.hpp>
    +
    45#include <dr/detail/segments_tools.hpp>
    +
    46#include <dr/detail/iterator_adaptor.hpp>
    +
    47#include <dr/detail/normal_distributed_iterator.hpp>
    +
    48#include <dr/detail/memory.hpp>
    +
    49#include <dr/detail/communicator.hpp>
    +
    50#include <dr/detail/index.hpp>
    +
    51
    +
    52#include <dr/views/views.hpp>
    +
    53#include <dr/views/transform.hpp>
    +
    54
    +
    55#include <dr/mp/halo.hpp>
    +
    56#include <dr/mp/global.hpp>
    +
    57#include <dr/mp/sycl_support.hpp>
    +
    58#include <dr/mp/common_support.hpp>
    +
    59#include <dr/mp/alignment.hpp>
    +
    60#include <dr/mp/allocator.hpp>
    +
    61#include <dr/mp/views/views.hpp>
    +
    62#include <dr/mp/views/zip.hpp>
    +
    63#include <dr/mp/views/enumerate.hpp>
    +
    64#include <dr/mp/views/sliding.hpp>
    +
    65#include <dr/mp/views/mdspan_view.hpp>
    +
    66#include <dr/mp/views/submdspan_view.hpp>
    +
    67#include <dr/mp/algorithms/copy.hpp>
    +
    68#include <dr/mp/algorithms/count.hpp>
    +
    69#include <dr/mp/algorithms/equal.hpp>
    +
    70#include <dr/mp/algorithms/fill.hpp>
    +
    71#include <dr/mp/algorithms/for_each.hpp>
    +
    72#include <dr/mp/algorithms/exclusive_scan.hpp>
    +
    73#include <dr/mp/algorithms/inclusive_scan.hpp>
    +
    74#include <dr/mp/algorithms/iota.hpp>
    +
    75#include <dr/mp/algorithms/reduce.hpp>
    +
    76#include <dr/mp/algorithms/sort.hpp>
    +
    77#include <dr/mp/algorithms/md_for_each.hpp>
    +
    78#include <dr/mp/algorithms/transform.hpp>
    +
    79#include <dr/mp/algorithms/transpose.hpp>
    +
    80#include <dr/mp/containers/distributed_vector.hpp>
    +
    81#include <dr/mp/containers/distributed_mdarray.hpp>
    +
    + + + + diff --git a/doxygen/nav_f.png b/doxygen/nav_f.png new file mode 100644 index 0000000000000000000000000000000000000000..72a58a529ed3a9ed6aa0c51a79cf207e026deee2 GIT binary patch literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI`!2~2XGqLUlQVE_ejv*C{Z|{2ZH7M}7UYxc) zn!W8uqtnIQ>_z8U literal 0 HcmV?d00001 diff --git a/doxygen/nav_fd.png b/doxygen/nav_fd.png new file mode 100644 index 0000000000000000000000000000000000000000..032fbdd4c54f54fa9a2e6423b94ef4b2ebdfaceb GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI`!2~2XGqLUlQU#tajv*C{Z|C~*H7f|XvG1G8 zt7aS*L7xwMeS}!z6R#{C5tIw-s~AJ==F^i}x3XyJseHR@yF& zerFf(Zf;Dd{+(0lDIROL@Sj-Ju2JQ8&-n%4%q?>|^bShc&lR?}7HeMo@BDl5N(aHY Uj$gdr1MOz;boFyt=akR{0D!zeaR2}S literal 0 HcmV?d00001 diff --git a/doxygen/nav_g.png b/doxygen/nav_g.png new file mode 100644 index 0000000000000000000000000000000000000000..2093a237a94f6c83e19ec6e5fd42f7ddabdafa81 GIT binary patch literal 95 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrB!3HFm1ilyoDK$?Q$B+ufw|5PB85lU25BhtE tr?otc=hd~V+ws&_A@j8Fiv!KF$B+ufw|5=67#uj90@pIL wZ=Q8~_Ju`#59=RjDrmm`tMD@M=!-l18IR?&vFVdQ&MBb@0HFXL6W-eg#Jd_@e6*DPn)w;=|1H}Zvm9l6xXXB%>yL=NQU;mg M>FVdQ&MBb@0Bdt1Qvd(} literal 0 HcmV?d00001 diff --git a/doxygen/normal__distributed__iterator_8hpp_source.html b/doxygen/normal__distributed__iterator_8hpp_source.html new file mode 100644 index 0000000000..4d76ba4774 --- /dev/null +++ b/doxygen/normal__distributed__iterator_8hpp_source.html @@ -0,0 +1,210 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/detail/normal_distributed_iterator.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    normal_distributed_iterator.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4#pragma once
    +
    5
    +
    6#include <dr/detail/segments_tools.hpp>
    +
    7
    +
    8namespace dr {
    +
    9
    +
    10template <rng::viewable_range V>
    +
    11/*
    +
    12requires(dr::remote_range<rng::range_reference_t<V>> &&
    +
    13 rng::random_access_range<rng::range_reference_t<V>>)
    +
    14 */
    + +
    16public:
    +
    17 using value_type = rng::range_value_t<rng::range_reference_t<V>>;
    +
    18
    +
    19 using segment_type = rng::range_value_t<V>;
    +
    20
    +
    21 using size_type = rng::range_size_t<segment_type>;
    +
    22 using difference_type = rng::range_difference_t<segment_type>;
    +
    23
    +
    24 using reference = rng::range_reference_t<segment_type>;
    +
    25
    +
    26 using iterator_category = std::random_access_iterator_tag;
    +
    27
    + + + +
    31
    +
    32 constexpr normal_distributed_iterator_accessor() noexcept = default;
    +
    33 constexpr ~normal_distributed_iterator_accessor() noexcept = default;
    + +
    35 const normal_distributed_iterator_accessor &) noexcept = default;
    + +
    37 operator=(const normal_distributed_iterator_accessor &) noexcept = default;
    +
    38
    +
    39 constexpr normal_distributed_iterator_accessor(V segments,
    +
    40 size_type segment_id,
    +
    41 size_type idx) noexcept
    +
    42 : segments_(segments), segment_id_(segment_id), idx_(idx) {}
    +
    43
    + +
    45 operator+=(difference_type offset) noexcept {
    +
    46
    +
    47 while (offset > 0) {
    +
    48 difference_type current_offset =
    +
    49 std::min(offset, difference_type(segments_[segment_id_].size()) -
    +
    50 difference_type(idx_));
    +
    51 idx_ += current_offset;
    +
    52 offset -= current_offset;
    +
    53
    +
    54 if (idx_ >= segments_[segment_id_].size()) {
    +
    55 segment_id_++;
    +
    56 idx_ = 0;
    +
    57 }
    +
    58 }
    +
    59
    +
    60 while (offset < 0) {
    +
    61 difference_type current_offset =
    +
    62 std::min(-offset, difference_type(idx_) + 1);
    +
    63
    +
    64 difference_type new_idx = difference_type(idx_) - current_offset;
    +
    65 offset += current_offset;
    +
    66
    +
    67 if (new_idx < 0) {
    +
    68 segment_id_--;
    +
    69 new_idx = segments_[segment_id_].size() - 1;
    +
    70 }
    +
    71
    +
    72 idx_ = new_idx;
    +
    73 }
    +
    74
    +
    75 return *this;
    +
    76 }
    +
    77
    +
    78 constexpr bool operator==(const iterator_accessor &other) const noexcept {
    +
    79 return segment_id_ == other.segment_id_ && idx_ == other.idx_;
    +
    80 }
    +
    81
    +
    82 constexpr difference_type
    +
    83 operator-(const iterator_accessor &other) const noexcept {
    +
    84 return difference_type(get_global_idx()) - other.get_global_idx();
    +
    85 }
    +
    86
    +
    87 constexpr bool operator<(const iterator_accessor &other) const noexcept {
    +
    88 if (segment_id_ < other.segment_id_) {
    +
    89 return true;
    +
    90 } else if (segment_id_ == other.segment_id_) {
    +
    91 return idx_ < other.idx_;
    +
    92 } else {
    +
    93 return false;
    +
    94 }
    +
    95 }
    +
    96
    +
    97 constexpr reference operator*() const noexcept {
    +
    98 return segments_[segment_id_][idx_];
    +
    99 }
    +
    100
    +
    101 auto segments() const noexcept {
    +
    102 return dr::__detail::drop_segments(segments_, segment_id_, idx_);
    +
    103 }
    +
    104
    +
    105private:
    +
    106 size_type get_global_idx() const noexcept {
    +
    107 size_type cumulative_size = 0;
    +
    108 for (std::size_t i = 0; i < segment_id_; i++) {
    +
    109 cumulative_size += segments_[i].size();
    +
    110 }
    +
    111 return cumulative_size + idx_;
    +
    112 }
    +
    113
    +
    114 rng::views::all_t<V> segments_;
    +
    115 size_type segment_id_ = 0;
    +
    116 size_type idx_ = 0;
    +
    117};
    +
    118
    +
    119template <rng::viewable_range T>
    + + +
    122
    +
    123} // namespace dr
    +
    Definition: iterator_adaptor.hpp:23
    +
    Definition: normal_distributed_iterator.hpp:15
    +
    + + + + diff --git a/doxygen/onedpl__direct__iterator_8hpp_source.html b/doxygen/onedpl__direct__iterator_8hpp_source.html new file mode 100644 index 0000000000..d8e41ecd94 --- /dev/null +++ b/doxygen/onedpl__direct__iterator_8hpp_source.html @@ -0,0 +1,197 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/detail/onedpl_direct_iterator.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    onedpl_direct_iterator.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <iterator>
    +
    8
    +
    9#include <dr/detail/iterator_adaptor.hpp>
    +
    10
    +
    11namespace dr {
    +
    12
    +
    13namespace __detail {
    +
    14
    +
    15template <std::random_access_iterator Iter> class direct_iterator {
    +
    16public:
    +
    17 using value_type = std::iter_value_t<Iter>;
    +
    18 using difference_type = std::iter_difference_t<Iter>;
    +
    19 using reference = std::iter_reference_t<Iter>;
    + +
    21
    +
    22 using pointer = iterator;
    +
    23
    +
    24 using iterator_category = std::random_access_iterator_tag;
    +
    25
    +
    26 using is_passed_directly = ::std::true_type;
    +
    27
    +
    28 direct_iterator(Iter iter) noexcept : iter_(iter) {}
    +
    29 direct_iterator() noexcept = default;
    +
    30 ~direct_iterator() noexcept = default;
    +
    31 direct_iterator(const direct_iterator &) noexcept = default;
    +
    32 direct_iterator &operator=(const direct_iterator &) noexcept = default;
    +
    33
    +
    34 bool operator==(const direct_iterator &) const noexcept = default;
    +
    35 bool operator!=(const direct_iterator &) const noexcept = default;
    +
    36
    +
    37 iterator operator+(difference_type offset) const noexcept {
    +
    38 return iterator(iter_ + offset);
    +
    39 }
    +
    40
    +
    41 iterator operator-(difference_type offset) const noexcept {
    +
    42 return iterator(iter_ - offset);
    +
    43 }
    +
    44
    +
    45 difference_type operator-(iterator other) const noexcept {
    +
    46 return iter_ - other.iter_;
    +
    47 }
    +
    48
    +
    49 bool operator<(iterator other) const noexcept { return iter_ < other.iter_; }
    +
    50
    +
    51 bool operator>(iterator other) const noexcept { return iter_ > iter_; }
    +
    52
    +
    53 bool operator<=(iterator other) const noexcept {
    +
    54 return iter_ <= other.iter_;
    +
    55 }
    +
    56
    +
    57 bool operator>=(iterator other) const noexcept {
    +
    58 return iter_ >= other.iter_;
    +
    59 }
    +
    60
    +
    61 iterator &operator++() noexcept {
    +
    62 ++iter_;
    +
    63 return *this;
    +
    64 }
    +
    65
    +
    66 iterator operator++(int) noexcept {
    +
    67 iterator other = *this;
    +
    68 ++(*this);
    +
    69 return other;
    +
    70 }
    +
    71
    +
    72 iterator &operator--() noexcept {
    +
    73 --iter_;
    +
    74 return *this;
    +
    75 }
    +
    76
    +
    77 iterator operator--(int) noexcept {
    +
    78 iterator other = *this;
    +
    79 --(*this);
    +
    80 return other;
    +
    81 }
    +
    82
    +
    83 iterator &operator+=(difference_type offset) noexcept {
    +
    84 iter_ += offset;
    +
    85 return *this;
    +
    86 }
    +
    87
    +
    88 iterator &operator-=(difference_type offset) noexcept {
    +
    89 iter_ -= offset;
    +
    90 return *this;
    +
    91 }
    +
    92
    +
    93 reference operator*() const noexcept { return *iter_; }
    +
    94
    +
    95 reference operator[](difference_type offset) const noexcept {
    +
    96 return reference(*(*this + offset));
    +
    97 }
    +
    98
    +
    99 friend iterator operator+(difference_type n, iterator iter) {
    +
    100 return iter.iter_ + n;
    +
    101 }
    +
    102
    +
    103 Iter base() const noexcept { return iter_; }
    +
    104
    +
    105private:
    +
    106 Iter iter_;
    +
    107};
    +
    108
    +
    109} // namespace __detail
    +
    110
    +
    111} // namespace dr
    +
    Definition: onedpl_direct_iterator.hpp:15
    +
    + + + + diff --git a/doxygen/open.png b/doxygen/open.png new file mode 100644 index 0000000000000000000000000000000000000000..30f75c7efe2dd0c9e956e35b69777a02751f048b GIT binary patch literal 123 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{VPM$7~Ar*{o?;hlAFyLXmaDC0y znK1_#cQqJWPES%4Uujug^TE?jMft$}Eq^WaR~)%f)vSNs&gek&x%A9X9sM + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/detail/owning_view.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    owning_view.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <dr/detail/ranges_shim.hpp>
    +
    8
    +
    9namespace dr {
    +
    10
    +
    11namespace __detail {
    +
    12
    +
    13// TODO: this `owning_view` is needed because range-v3 does not have an
    +
    14// `owning_view`. Ideally we would submit a PR to range-v3 /or
    +
    15// switch to solely using libstdc++13.
    +
    16
    +
    17template <rng::range R>
    +
    18class owning_view : public rng::view_interface<owning_view<R>> {
    +
    19public:
    +
    20 owning_view(R &&range) : range_(std::move(range)) {}
    +
    21
    + +
    23 requires std::default_initializable<R>
    +
    24 = default;
    +
    25 owning_view(owning_view &&other) = default;
    +
    26 owning_view(const owning_view &other) = default;
    +
    27
    +
    28 owning_view &operator=(owning_view &&other) = default;
    +
    29 owning_view &operator=(const owning_view &other) = default;
    +
    30
    +
    31 auto size() const
    +
    32 requires(rng::sized_range<R>)
    +
    33 {
    +
    34 return rng::size(range_);
    +
    35 }
    +
    36
    +
    37 auto empty() const
    +
    38 requires(rng::sized_range<R>)
    +
    39 {
    +
    40 return size() == 0;
    +
    41 }
    +
    42
    +
    43 auto begin() { return rng::begin(range_); }
    +
    44
    +
    45 auto begin() const
    +
    46 requires(rng::range<const R>)
    +
    47 {
    +
    48 return rng::begin(range_);
    +
    49 }
    +
    50
    +
    51 auto end() { return rng::end(range_); }
    +
    52
    +
    53 auto end() const
    +
    54 requires(rng::range<const R>)
    +
    55 {
    +
    56 return rng::end(range_);
    +
    57 }
    +
    58
    +
    59 decltype(auto) base() { return range_; }
    +
    60
    +
    61 decltype(auto) base() const { return range_; }
    +
    62
    +
    63private:
    +
    64 R range_;
    +
    65};
    +
    66
    +
    67} // namespace __detail
    +
    68
    +
    69} // namespace dr
    +
    Definition: owning_view.hpp:18
    +
    + + + + diff --git a/doxygen/range_8hpp_source.html b/doxygen/range_8hpp_source.html new file mode 100644 index 0000000000..9eaaeefb4f --- /dev/null +++ b/doxygen/range_8hpp_source.html @@ -0,0 +1,241 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/range.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    range.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <dr/concepts/concepts.hpp>
    +
    8#include <dr/sp/distributed_span.hpp>
    +
    9
    +
    10namespace dr::sp {
    +
    11
    +
    12template <int dimensions = 1> class id {
    +
    13public:
    +
    14 static_assert(dimensions == 1);
    +
    15
    +
    16 id() noexcept = default;
    +
    17
    +
    18 id(std::size_t segment_id, std::size_t local_id, std::size_t global_id)
    +
    19 : segment_id_(segment_id), local_id_(local_id), global_id_(global_id) {}
    +
    20
    +
    21 std::size_t get(int dimension) const { return global_id_; }
    +
    22
    +
    23 operator std::size_t() const { return global_id_; }
    +
    24
    +
    25 std::size_t segment() const { return segment_id_; }
    +
    26
    +
    27 std::size_t local_id() const { return local_id_; }
    +
    28
    +
    29private:
    +
    30 std::size_t segment_id_ = 0;
    +
    31 std::size_t local_id_ = 0;
    +
    32 std::size_t global_id_ = 0;
    +
    33};
    +
    34
    + +
    36public:
    +
    37 using element_type = id<1>;
    + +
    39
    +
    40 using size_type = std::size_t;
    +
    41 using difference_type = std::ptrdiff_t;
    +
    42
    +
    43 // using pointer = typename segment_type::pointer;
    +
    44 using reference = value_type;
    +
    45
    +
    46 using iterator_category = std::random_access_iterator_tag;
    +
    47
    + + + +
    51
    +
    52 constexpr segment_range_accessor() noexcept = default;
    +
    53 constexpr ~segment_range_accessor() noexcept = default;
    +
    54 constexpr segment_range_accessor(const segment_range_accessor &) noexcept =
    +
    55 default;
    +
    56 constexpr segment_range_accessor &
    +
    57 operator=(const segment_range_accessor &) noexcept = default;
    +
    58
    +
    59 constexpr segment_range_accessor(size_type segment_id, size_type idx,
    +
    60 size_type global_offset) noexcept
    +
    61 : global_offset_(global_offset), segment_id_(segment_id), idx_(idx) {}
    +
    62
    +
    63 constexpr segment_range_accessor &
    +
    64 operator+=(difference_type offset) noexcept {
    +
    65 idx_ += offset;
    +
    66 return *this;
    +
    67 }
    +
    68
    +
    69 constexpr bool operator==(const iterator_accessor &other) const noexcept {
    +
    70 return segment_id_ == other.segment_id_ && idx_ == other.idx_;
    +
    71 }
    +
    72
    +
    73 constexpr difference_type
    +
    74 operator-(const iterator_accessor &other) const noexcept {
    +
    75 return difference_type(idx_) - difference_type(other.idx_);
    +
    76 }
    +
    77
    +
    78 // Comparing iterators from different segments is undefined
    +
    79 constexpr bool operator<(const iterator_accessor &other) const noexcept {
    +
    80 return idx_ < other.idx_;
    +
    81 }
    +
    82
    +
    83 reference operator*() const noexcept {
    +
    84 return value_type(segment_id_, idx_, get_global_idx());
    +
    85 }
    +
    86
    +
    87private:
    +
    88 size_type get_global_idx() const noexcept { return global_offset_ + idx_; }
    +
    89
    +
    90 size_type global_offset_ = 0;
    +
    91 size_type segment_id_ = 0;
    +
    92 size_type idx_ = 0;
    +
    93};
    +
    94
    + +
    96
    +
    97template <int dimensions = 1> class segment_range {
    +
    98public:
    +
    99 static_assert(dimensions == 1);
    +
    100
    + +
    102 using size_type = std::size_t;
    +
    103 using different_type = std::ptrdiff_t;
    +
    104
    +
    105 using reference = value_type;
    +
    106
    + +
    108
    +
    109 segment_range(std::size_t segment_id, std::size_t segment_size,
    +
    110 std::size_t global_offset)
    +
    111 : segment_id_(segment_id), segment_size_(segment_size),
    +
    112 global_offset_(global_offset) {}
    +
    113
    +
    114 iterator begin() const { return iterator(segment_id_, 0, global_offset_); }
    +
    115
    +
    116 iterator end() const {
    +
    117 return iterator(segment_id_, segment_size_, global_offset_);
    +
    118 }
    +
    119
    +
    120 size_type size() const noexcept { return segment_size_; }
    +
    121
    +
    122 value_type operator[](std::size_t idx) { return *(begin() + idx); }
    +
    123
    +
    124 size_type rank() const noexcept { return 0; }
    +
    125
    +
    126private:
    +
    127 std::size_t segment_size_;
    +
    128 std::size_t segment_id_;
    +
    129 std::size_t global_offset_;
    +
    130};
    +
    131
    +
    132/*
    +
    133template <rng::forward_range R> auto distributed_iota_view(R &&r) {
    +
    134 static_assert(dr::distributed_contiguous_range<R>);
    +
    135 if constexpr (dr::distributed_contiguous_range<R>) {
    +
    136 std::vector<segment_range<>> iota_segments;
    +
    137 std::size_t global_offset = 0;
    +
    138 std::size_t segment_id = 0;
    +
    139 for (auto &&segment : r.segments()) {
    +
    140 iota_segments.push_back(
    +
    141 segment_range(segment_id, segment.size(), global_offset));
    +
    142 global_offset += segment.size();
    +
    143 segment_id++;
    +
    144 }
    +
    145 return dr::sp::distributed_span(iota_segments);
    +
    146 } else {
    +
    147 return segment_range(0, rng::size(r), 0);
    +
    148 }
    +
    149}
    +
    150*/
    +
    151
    +
    152} // namespace dr::sp
    +
    Definition: iterator_adaptor.hpp:23
    +
    Definition: range.hpp:12
    +
    Definition: range.hpp:35
    +
    Definition: range.hpp:97
    +
    + + + + diff --git a/doxygen/range__adaptors_8hpp_source.html b/doxygen/range__adaptors_8hpp_source.html new file mode 100644 index 0000000000..3a1cfe67f7 --- /dev/null +++ b/doxygen/range__adaptors_8hpp_source.html @@ -0,0 +1,103 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/range_adaptors.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    range_adaptors.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <dr/sp/views/standard_views.hpp>
    +
    8#include <dr/sp/zip_view.hpp>
    +
    9
    +
    10namespace dr::sp {
    +
    11
    +
    12template <rng::range R> auto enumerate(R &&r) {
    +
    13 auto i = rng::views::iota(uint32_t(0), uint32_t(rng::size(r)));
    +
    14 return dr::sp::zip_view(i, r);
    +
    15}
    +
    16
    +
    17} // namespace dr::sp
    +
    zip
    Definition: zip_view.hpp:108
    +
    + + + + diff --git a/doxygen/ranges_8hpp_source.html b/doxygen/ranges_8hpp_source.html new file mode 100644 index 0000000000..823e2efc84 --- /dev/null +++ b/doxygen/ranges_8hpp_source.html @@ -0,0 +1,360 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/detail/ranges.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    ranges.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <any>
    +
    8#include <iterator>
    +
    9#include <type_traits>
    +
    10
    +
    11#include <dr/detail/ranges_shim.hpp>
    +
    12
    +
    13namespace dr {
    +
    14
    +
    15namespace ranges {
    +
    16
    +
    17template <typename> inline constexpr bool disable_rank = false;
    +
    18
    +
    19namespace {
    +
    20
    +
    21template <typename T>
    +
    22concept has_rank_method = requires(T t) {
    +
    23 { t.rank() } -> std::weakly_incrementable;
    +
    24};
    +
    25
    +
    26template <typename R>
    +
    27concept has_rank_adl = requires(R &r) {
    +
    28 { rank_(r) } -> std::weakly_incrementable;
    +
    29};
    +
    30
    +
    31template <typename Iter>
    + +
    33 std::forward_iterator<Iter> && has_rank_method<Iter> &&
    +
    34 !disable_rank<std::remove_cv_t<Iter>>;
    +
    35
    +
    36} // namespace
    +
    37
    +
    38namespace {
    +
    39
    +
    40struct rank_fn_ {
    +
    41
    +
    42 // Return the rank associated with a remote range.
    +
    43 // This is either:
    +
    44 // 1) r.rank(), if the remote range has a `rank()` method
    +
    45 // OR, if not available,
    +
    46 // 2) r.begin().rank(), if iterator is `remote_iterator`
    +
    47 template <rng::forward_range R>
    +
    48 requires((has_rank_method<R> && !disable_rank<std::remove_cv_t<R>>) ||
    +
    49 (has_rank_adl<R> && !disable_rank<std::remove_cv_t<R>>) ||
    + +
    51 constexpr auto operator()(R &&r) const {
    +
    52 if constexpr (has_rank_method<R> && !disable_rank<std::remove_cv_t<R>>) {
    +
    53 return std::forward<R>(r).rank();
    + +
    55 // rng::begin needs an lvalue or borrowed_range. We only need
    +
    56 // the rank from the rng::begin so creating a local lvalue is ok.
    +
    57 auto t = r;
    +
    58 return operator()(rng::begin(t));
    +
    59 } else if constexpr (has_rank_adl<R> &&
    +
    60 !disable_rank<std::remove_cv_t<R>>) {
    +
    61 return rank_(std::forward<R>(r));
    +
    62 }
    +
    63 }
    +
    64
    +
    65 template <std::forward_iterator Iter>
    +
    66 requires(has_rank_method<Iter> && !disable_rank<std::remove_cv_t<Iter>>)
    +
    67 auto operator()(Iter iter) const {
    +
    68 if constexpr (has_rank_method<Iter> &&
    +
    69 !disable_rank<std::remove_cv_t<Iter>>) {
    +
    70 return std::forward<Iter>(iter).rank();
    +
    71 }
    +
    72 }
    +
    73};
    +
    74
    +
    75} // namespace
    +
    76
    +
    77inline constexpr auto rank = rank_fn_{};
    +
    78
    +
    79namespace {
    +
    80
    +
    81template <typename R>
    + +
    83 rng::forward_range<R> && requires(R &r) { dr::ranges::rank(r); };
    +
    84
    +
    85template <typename R>
    + + +
    88
    +
    89template <typename R>
    +
    90concept has_segments_method = requires(R r) {
    +
    91 { r.segments() } -> segments_range;
    +
    92};
    +
    93
    +
    94template <typename R>
    +
    95concept has_segments_adl = requires(R &r) {
    +
    96 { segments_(r) } -> segments_range;
    +
    97};
    +
    98
    +
    99struct segments_fn_ {
    +
    100 template <rng::forward_range R>
    + +
    102 constexpr decltype(auto) operator()(R &&r) const {
    +
    103 if constexpr (has_segments_method<R>) {
    +
    104 return std::forward<R>(r).segments();
    +
    105 } else if constexpr (has_segments_adl<R>) {
    +
    106 return segments_(std::forward<R>(r));
    +
    107 }
    +
    108 }
    +
    109
    +
    110 template <std::forward_iterator I>
    +
    111 requires(has_segments_method<I> || has_segments_adl<I>)
    +
    112 constexpr decltype(auto) operator()(I iter) const {
    +
    113 if constexpr (has_segments_method<I>) {
    +
    114 return std::forward<I>(iter).segments();
    +
    115 } else if constexpr (has_segments_adl<I>) {
    +
    116 return segments_(std::forward<I>(iter));
    +
    117 }
    +
    118 }
    +
    119};
    +
    120
    +
    121} // namespace
    +
    122
    +
    123inline constexpr auto segments = segments_fn_{};
    +
    124
    +
    125namespace {
    +
    126
    +
    127template <typename Iter>
    +
    128concept has_local_adl = requires(Iter &iter) {
    +
    129 { local_(iter) } -> std::forward_iterator;
    +
    130};
    +
    131
    +
    132template <typename Iter>
    + +
    134 std::forward_iterator<Iter> && requires(Iter iter) {
    +
    135 { iter.local() } -> std::forward_iterator;
    +
    136 };
    +
    137
    +
    138template <typename T> struct is_localizable_helper : std::false_type {};
    +
    139
    +
    140template <has_local_adl T> struct is_localizable_helper<T> : std::true_type {};
    +
    141
    +
    142template <iter_has_local_method T>
    +
    143struct is_localizable_helper<T> : std::true_type {};
    +
    144
    +
    145template <rng::forward_iterator Iter>
    +
    146 requires(not iter_has_local_method<Iter> && not has_local_adl<Iter>) &&
    +
    147 requires() { std::iter_value_t<Iter>(); }
    +
    148struct is_localizable_helper<Iter>
    +
    149 : is_localizable_helper<std::iter_value_t<Iter>> {};
    +
    150
    +
    151template <rng::forward_range R>
    +
    152struct is_localizable_helper<R> : is_localizable_helper<rng::iterator_t<R>> {};
    +
    153
    +
    154template <typename T>
    +
    155concept is_localizable = is_localizable_helper<T>::value;
    +
    156
    +
    157template <typename Segment>
    + +
    159 rng::forward_range<Segment> && requires(Segment segment) {
    +
    160 { segment.local() } -> rng::forward_range;
    +
    161 };
    +
    162
    +
    163struct local_fn_ {
    +
    164
    +
    165 // based on https://ericniebler.github.io/range-v3/#autotoc_md30 "Create
    +
    166 // custom iterators"
    +
    167 // TODO: rewrite using iterator_interface from
    +
    168 // https://github.com/boostorg/stl_interfaces
    +
    169 template <typename Iter>
    +
    170 requires rng::forward_range<typename Iter::value_type>
    +
    171 struct cursor_over_local_ranges {
    +
    172 Iter iter;
    +
    173 auto make_begin_for_counted() const {
    +
    174 if constexpr (iter_has_local_method<
    +
    175 rng::iterator_t<typename Iter::value_type>>)
    +
    176 return rng::begin(*iter).local();
    +
    177 else
    +
    178 return rng::basic_iterator<cursor_over_local_ranges<
    +
    179 rng::iterator_t<typename Iter::value_type>>>(rng::begin(*iter));
    +
    180 }
    +
    181 auto read() const {
    +
    182 return rng::views::counted(make_begin_for_counted(), rng::size(*iter));
    +
    183 }
    +
    184 bool equal(const cursor_over_local_ranges &other) const {
    +
    185 return iter == other.iter;
    +
    186 }
    +
    187 void next() { ++iter; }
    +
    188 void prev() { --iter; }
    +
    189 void advance(std::ptrdiff_t n) { this->iter += n; }
    +
    190 std::ptrdiff_t distance_to(const cursor_over_local_ranges &other) const {
    +
    191 return other.iter - this->iter;
    +
    192 }
    +
    193 cursor_over_local_ranges() = default;
    +
    194 cursor_over_local_ranges(Iter iter) : iter(iter) {}
    +
    195 };
    +
    196
    +
    197 template <std::forward_iterator Iter>
    +
    198 requires(has_local_adl<Iter> || iter_has_local_method<Iter> ||
    +
    199 std::contiguous_iterator<Iter> || is_localizable<Iter>)
    +
    200 auto operator()(Iter iter) const {
    +
    201 if constexpr (iter_has_local_method<Iter>) {
    +
    202 return iter.local();
    +
    203 } else if constexpr (has_local_adl<Iter>) {
    +
    204 return local_(iter);
    +
    205 } else if constexpr (is_localizable<Iter>) {
    +
    206 return rng::basic_iterator<cursor_over_local_ranges<Iter>>(iter);
    +
    207 } else if constexpr (std::contiguous_iterator<Iter>) {
    +
    208 return iter;
    +
    209 }
    +
    210 }
    +
    211
    +
    212 template <rng::forward_range R>
    +
    213 requires(has_local_adl<R> || iter_has_local_method<rng::iterator_t<R>> ||
    +
    214 segment_has_local_method<R> ||
    +
    215 std::contiguous_iterator<rng::iterator_t<R>> ||
    +
    216 is_localizable<R> || rng::contiguous_range<R>)
    +
    217 auto operator()(R &&r) const {
    +
    218 if constexpr (segment_has_local_method<R>) {
    +
    219 return r.local();
    +
    220 } else if constexpr (iter_has_local_method<rng::iterator_t<R>>) {
    +
    221 return rng::views::counted(rng::begin(r).local(), rng::size(r));
    +
    222 } else if constexpr (has_local_adl<R>) {
    +
    223 return local_(std::forward<R>(r));
    +
    224 } else if constexpr (is_localizable<R>) {
    +
    225 return rng::views::counted(
    +
    226 rng::basic_iterator<cursor_over_local_ranges<rng::iterator_t<R>>>(
    +
    227 rng::begin(r)),
    +
    228 rng::size(r));
    +
    229 } else if constexpr (std::contiguous_iterator<rng::iterator_t<R>>) {
    +
    230 return std::span(rng::begin(r), rng::size(r));
    +
    231 }
    +
    232 }
    +
    233};
    +
    234
    +
    235} // namespace
    +
    236
    +
    237inline constexpr auto local = local_fn_{};
    +
    238
    +
    239namespace __detail {
    +
    240
    +
    241template <typename T>
    +
    242concept has_local = requires(T &t) {
    +
    243 { dr::ranges::local(t) } -> std::convertible_to<std::any>;
    +
    244};
    +
    245
    +
    246struct local_fn_ {
    +
    247 template <typename T>
    +
    248 requires(has_local<T>)
    +
    249 auto operator()(T &&t) const {
    +
    250 return dr::ranges::local(t);
    +
    251 }
    +
    252
    +
    253 template <typename T> decltype(auto) operator()(T &&t) const { return t; }
    +
    254};
    +
    255
    +
    256inline constexpr auto local = local_fn_{};
    +
    257
    +
    258} // namespace __detail
    +
    259
    +
    260} // namespace ranges
    +
    261
    +
    262} // namespace dr
    +
    Definition: ranges.hpp:128
    +
    Definition: ranges.hpp:27
    +
    Definition: ranges.hpp:22
    +
    Definition: ranges.hpp:95
    +
    Definition: ranges.hpp:90
    +
    Definition: ranges.hpp:155
    + +
    Definition: ranges.hpp:133
    + + +
    Definition: ranges.hpp:86
    +
    Definition: ranges.hpp:242
    +
    Definition: ranges.hpp:246
    +
    + + + + diff --git a/doxygen/ranges__shim_8hpp_source.html b/doxygen/ranges__shim_8hpp_source.html new file mode 100644 index 0000000000..2d2884eec5 --- /dev/null +++ b/doxygen/ranges__shim_8hpp_source.html @@ -0,0 +1,112 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/detail/ranges_shim.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    ranges_shim.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7// TODO: use libstdc++ 13.0 or greater if available.
    +
    8
    +
    9// #define DR_USE_STD_RANGES
    +
    10
    +
    11#ifdef DR_USE_STD_RANGES
    +
    12
    +
    13#include <ranges>
    +
    14
    +
    15namespace rng = ::std::ranges;
    +
    16
    +
    17#define DR_RANGES_NAMESPACE std::ranges
    +
    18
    +
    19#else
    +
    20
    +
    21#include <range/v3/all.hpp>
    +
    22
    +
    23namespace rng = ::ranges;
    +
    24
    +
    25#define DR_RANGES_NAMESPACE ranges
    +
    26
    +
    27#endif
    +
    + + + + diff --git a/doxygen/ranges__utils_8hpp_source.html b/doxygen/ranges__utils_8hpp_source.html new file mode 100644 index 0000000000..5c8186e641 --- /dev/null +++ b/doxygen/ranges__utils_8hpp_source.html @@ -0,0 +1,106 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/detail/ranges_utils.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    ranges_utils.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7namespace dr::__detail {
    +
    8
    +
    9//
    +
    10// std::ranges::enumerate handles unbounded ranges and returns a range
    +
    11// where end() is a different type than begin(). Most of our code
    +
    12// assumes std::ranges::common_range. bounded_enumerate requires a
    +
    13// bounded range and returns a common_range.
    +
    14//
    +
    15template <typename R> auto bounded_enumerate(R &&r) {
    +
    16 auto size = rng::distance(r);
    +
    17 using W = std::uint32_t;
    +
    18 return rng::views::zip(rng::views::iota(W(0), W(size)), r);
    +
    19}
    +
    20
    +
    21} // namespace dr::__detail
    +
    + + + + diff --git a/doxygen/remote__subrange_8hpp_source.html b/doxygen/remote__subrange_8hpp_source.html new file mode 100644 index 0000000000..d1e61cce00 --- /dev/null +++ b/doxygen/remote__subrange_8hpp_source.html @@ -0,0 +1,140 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/detail/remote_subrange.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    remote_subrange.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <iterator>
    +
    8
    +
    9#include <dr/concepts/concepts.hpp>
    +
    10#include <dr/detail/ranges_shim.hpp>
    +
    11
    +
    12namespace dr {
    +
    13
    +
    14template <std::forward_iterator I>
    +
    15class remote_subrange : public rng::subrange<I, I> {
    +
    16 using base = rng::subrange<I, I>;
    +
    17
    +
    18public:
    + +
    20 requires std::default_initializable<I>
    +
    21 = default;
    +
    22
    +
    23 constexpr remote_subrange(I first, I last, std::size_t rank)
    +
    24 : base(first, last), rank_(rank) {}
    +
    25
    +
    26 template <rng::forward_range R>
    +
    27 constexpr remote_subrange(R &&r, std::size_t rank)
    +
    28 : base(rng::begin(r), rng::end(r)), rank_(rank) {}
    +
    29
    +
    30 template <dr::remote_range R>
    +
    31 constexpr remote_subrange(R &&r)
    +
    32 : base(rng::begin(r), rng::end(r)), rank_(dr::ranges::rank(r)) {}
    +
    33
    +
    34 constexpr std::size_t rank() const noexcept { return rank_; }
    +
    35
    +
    36private:
    +
    37 std::size_t rank_;
    +
    38};
    +
    39
    +
    40template <rng::forward_range R>
    + +
    42
    +
    43template <dr::remote_range R>
    + +
    45
    +
    46} // namespace dr
    +
    47
    +
    48#if !defined(DR_SPEC)
    +
    49
    +
    50// Needed to satisfy concepts for rng::begin
    +
    51template <typename R>
    +
    52inline constexpr bool rng::enable_borrowed_range<dr::remote_subrange<R>> = true;
    +
    53
    +
    54#endif
    +
    Definition: remote_subrange.hpp:15
    +
    + + + + diff --git a/doxygen/search/all_0.js b/doxygen/search/all_0.js new file mode 100644 index 0000000000..1ee809260e --- /dev/null +++ b/doxygen/search/all_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['allocator_0',['allocator',['../classdr_1_1mp_1_1____detail_1_1allocator.html',1,'dr::mp::__detail']]], + ['any_1',['any',['../structdr_1_1mp_1_1____detail_1_1any.html',1,'dr::mp::__detail']]] +]; diff --git a/doxygen/search/all_1.js b/doxygen/search/all_1.js new file mode 100644 index 0000000000..0fc367ad5a --- /dev/null +++ b/doxygen/search/all_1.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['begin_0',['begin',['../classdr_1_1mp_1_1distributed__vector.html#a7d99e72c2d282903d8d3c8c10a72d347',1,'dr::mp::distributed_vector']]], + ['block_5fcyclic_1',['block_cyclic',['../classdr_1_1sp_1_1block__cyclic.html',1,'dr::sp']]], + ['buffer_2',['buffer',['../classdr_1_1mp_1_1____detail_1_1buffer.html',1,'dr::mp::__detail']]], + ['buffered_5fallocator_3',['buffered_allocator',['../classdr_1_1sp_1_1buffered__allocator.html',1,'dr::sp']]] +]; diff --git a/doxygen/search/all_10.js b/doxygen/search/all_10.js new file mode 100644 index 0000000000..ec69469c72 --- /dev/null +++ b/doxygen/search/all_10.js @@ -0,0 +1,17 @@ +var searchData= +[ + ['timer_0',['timer',['../classdr_1_1timer.html',1,'dr']]], + ['tmp_5fbuffer_1',['tmp_buffer',['../classdr_1_1mp_1_1____detail_1_1tmp__buffer.html',1,'dr::mp::__detail']]], + ['transform_5fadapter_5fclosure_2',['transform_adapter_closure',['../classdr_1_1views_1_1transform__adapter__closure.html',1,'dr::views']]], + ['transform_5ffn_5f_3',['transform_fn_',['../classdr_1_1views_1_1transform__fn__.html',1,'dr::views']]], + ['transform_5fiterator_4',['transform_iterator',['../classdr_1_1transform__iterator.html',1,'dr']]], + ['transform_5fview_5',['transform_view',['../classdr_1_1transform__view.html',1,'dr']]], + ['tuple_5felement_3c_20index_2c_20dr_3a_3aindex_3c_20i_20_3e_20_3e_6',['tuple_element< Index, dr::index< I > >',['../structstd_1_1tuple__element_3_01Index_00_01dr_1_1index_3_01I_01_4_01_4.html',1,'std']]], + ['tuple_5felement_3c_20index_2c_20dr_3a_3asp_3a_3amatrix_5fentry_3c_20t_2c_20i_20_3e_20_3e_7',['tuple_element< Index, dr::sp::matrix_entry< T, I > >',['../structstd_1_1tuple__element_3_01Index_00_01dr_1_1sp_1_1matrix__entry_3_01T_00_01I_01_4_01_4.html',1,'std']]], + ['tuple_5felement_3c_20index_2c_20dr_3a_3asp_3a_3amatrix_5fref_3c_20t_2c_20i_2c_20tref_20_3e_20_3e_8',['tuple_element< Index, dr::sp::matrix_ref< T, I, TRef > >',['../structstd_1_1tuple__element_3_01Index_00_01dr_1_1sp_1_1matrix__ref_3_01T_00_01I_00_01TRef_01_4_01_4.html',1,'std']]], + ['tuple_5for_5fpair_9',['tuple_or_pair',['../structdr_1_1sp_1_1____detail_1_1tuple__or__pair.html',1,'dr::sp::__detail']]], + ['tuple_5for_5fpair_3c_20t_2c_20u_20_3e_10',['tuple_or_pair< T, U >',['../structdr_1_1sp_1_1____detail_1_1tuple__or__pair_3_01T_00_01U_01_4.html',1,'dr::sp::__detail']]], + ['tuple_5fsize_3c_20dr_3a_3aindex_3c_20i_20_3e_20_3e_11',['tuple_size< dr::index< I > >',['../structstd_1_1tuple__size_3_01dr_1_1index_3_01I_01_4_01_4.html',1,'std']]], + ['tuple_5fsize_3c_20dr_3a_3asp_3a_3amatrix_5fentry_3c_20t_2c_20i_20_3e_20_3e_12',['tuple_size< dr::sp::matrix_entry< T, I > >',['../structstd_1_1tuple__size_3_01dr_1_1sp_1_1matrix__entry_3_01T_00_01I_01_4_01_4.html',1,'std']]], + ['tuple_5fsize_3c_20dr_3a_3asp_3a_3amatrix_5fref_3c_20t_2c_20i_2c_20tref_20_3e_20_3e_13',['tuple_size< dr::sp::matrix_ref< T, I, TRef > >',['../structstd_1_1tuple__size_3_01dr_1_1sp_1_1matrix__ref_3_01T_00_01I_00_01TRef_01_4_01_4.html',1,'std']]] +]; diff --git a/doxygen/search/all_11.js b/doxygen/search/all_11.js new file mode 100644 index 0000000000..3af9cb755d --- /dev/null +++ b/doxygen/search/all_11.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['unstructured_5fhalo_0',['unstructured_halo',['../classdr_1_1mp_1_1unstructured__halo.html',1,'dr::mp::unstructured_halo< T, Memory >'],['../classdr_1_1mp_1_1unstructured__halo.html#a34175a58141ffb9b5d97f6f7d4e68469',1,'dr::mp::unstructured_halo::unstructured_halo()']]] +]; diff --git a/doxygen/search/all_12.js b/doxygen/search/all_12.js new file mode 100644 index 0000000000..d1fa734f0b --- /dev/null +++ b/doxygen/search/all_12.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['vector_0',['vector',['../classdr_1_1sp_1_1vector.html',1,'dr::sp']]], + ['vector_3c_20t_2c_20allocator_20_3e_1',['vector< T, Allocator >',['../classdr_1_1sp_1_1vector.html',1,'dr::sp']]] +]; diff --git a/doxygen/search/all_13.js b/doxygen/search/all_13.js new file mode 100644 index 0000000000..09d2aa8c81 --- /dev/null +++ b/doxygen/search/all_13.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['zip_5faccessor_0',['zip_accessor',['../classdr_1_1sp_1_1zip__accessor.html',1,'dr::sp']]], + ['zip_5fiterator_1',['zip_iterator',['../classdr_1_1mp_1_1zip__iterator.html',1,'dr::mp']]], + ['zip_5fview_2',['zip_view',['../classdr_1_1mp_1_1zip__view.html',1,'dr::mp::zip_view< Rs >'],['../classdr_1_1sp_1_1zip__view.html',1,'dr::sp::zip_view< Rs >']]] +]; diff --git a/doxygen/search/all_2.js b/doxygen/search/all_2.js new file mode 100644 index 0000000000..85d6db51a0 --- /dev/null +++ b/doxygen/search/all_2.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['communicator_0',['communicator',['../classdr_1_1communicator.html',1,'dr']]], + ['coo_5fmatrix_1',['coo_matrix',['../classdr_1_1sp_1_1____detail_1_1coo__matrix.html',1,'dr::sp::__detail']]], + ['count_5ffn_5f_2',['count_fn_',['../classdr_1_1mp_1_1count__fn__.html',1,'dr::mp']]], + ['count_5fif_5ffn_5f_3',['count_if_fn_',['../classdr_1_1mp_1_1count__if__fn__.html',1,'dr::mp']]], + ['csr_5fmatrix_5fview_4',['csr_matrix_view',['../classdr_1_1sp_1_1csr__matrix__view.html',1,'dr::sp']]], + ['csr_5fmatrix_5fview_5faccessor_5',['csr_matrix_view_accessor',['../classdr_1_1sp_1_1csr__matrix__view__accessor.html',1,'dr::sp']]] +]; diff --git a/doxygen/search/all_3.js b/doxygen/search/all_3.js new file mode 100644 index 0000000000..274a48ab5f --- /dev/null +++ b/doxygen/search/all_3.js @@ -0,0 +1,66 @@ +var searchData= +[ + ['default_5fmemory_0',['default_memory',['../structdr_1_1default__memory.html',1,'dr']]], + ['dense_5fmatrix_1',['dense_matrix',['../classdr_1_1sp_1_1dense__matrix.html',1,'dr::sp']]], + ['dense_5fmatrix_5faccessor_2',['dense_matrix_accessor',['../classdr_1_1sp_1_1dense__matrix__accessor.html',1,'dr::sp']]], + ['dense_5fmatrix_5fcolumn_5faccessor_3',['dense_matrix_column_accessor',['../classdr_1_1sp_1_1dense__matrix__column__accessor.html',1,'dr::sp']]], + ['dense_5fmatrix_5fcolumn_5fview_4',['dense_matrix_column_view',['../classdr_1_1sp_1_1dense__matrix__column__view.html',1,'dr::sp']]], + ['dense_5fmatrix_5frow_5faccessor_5',['dense_matrix_row_accessor',['../classdr_1_1sp_1_1dense__matrix__row__accessor.html',1,'dr::sp']]], + ['dense_5fmatrix_5frow_5fview_6',['dense_matrix_row_view',['../classdr_1_1sp_1_1dense__matrix__row__view.html',1,'dr::sp']]], + ['dense_5fmatrix_5fview_7',['dense_matrix_view',['../classdr_1_1sp_1_1dense__matrix__view.html',1,'dr::sp']]], + ['device_5fallocator_8',['device_allocator',['../classdr_1_1sp_1_1device__allocator.html',1,'dr::sp']]], + ['device_5fpolicy_9',['device_policy',['../structdr_1_1mp_1_1device__policy.html',1,'dr::mp::device_policy'],['../structdr_1_1sp_1_1device__policy.html',1,'dr::sp::device_policy']]], + ['device_5fptr_10',['device_ptr',['../classdr_1_1sp_1_1device__ptr.html',1,'dr::sp']]], + ['device_5fref_11',['device_ref',['../classdr_1_1sp_1_1device__ref.html',1,'dr::sp']]], + ['device_5fspan_12',['device_span',['../classdr_1_1sp_1_1device__span.html',1,'dr::sp']]], + ['device_5fvector_13',['device_vector',['../classdr_1_1sp_1_1device__vector.html',1,'dr::sp']]], + ['direct_5fiterator_14',['direct_iterator',['../classdr_1_1____detail_1_1direct__iterator.html',1,'dr::__detail']]], + ['distributed_5fcontiguous_5fiterator_15',['distributed_contiguous_iterator',['../conceptdr_1_1distributed__contiguous__iterator.html',1,'dr']]], + ['distributed_5fcontiguous_5frange_16',['distributed_contiguous_range',['../conceptdr_1_1distributed__contiguous__range.html',1,'dr']]], + ['distributed_5fdense_5fmatrix_17',['distributed_dense_matrix',['../classdr_1_1sp_1_1distributed__dense__matrix.html',1,'dr::sp']]], + ['distributed_5fdense_5fmatrix_5faccessor_18',['distributed_dense_matrix_accessor',['../classdr_1_1sp_1_1distributed__dense__matrix__accessor.html',1,'dr::sp']]], + ['distributed_5fiterator_19',['distributed_iterator',['../conceptdr_1_1distributed__iterator.html',1,'dr']]], + ['distributed_5fmdarray_20',['distributed_mdarray',['../classdr_1_1mp_1_1distributed__mdarray.html',1,'dr::mp']]], + ['distributed_5fmdspan_5frange_21',['distributed_mdspan_range',['../conceptdr_1_1distributed__mdspan__range.html',1,'dr']]], + ['distributed_5frange_22',['distributed_range',['../conceptdr_1_1distributed__range.html',1,'dr']]], + ['distributed_5frange_5faccessor_23',['distributed_range_accessor',['../classdr_1_1sp_1_1distributed__range__accessor.html',1,'dr::sp']]], + ['distributed_5fspan_24',['distributed_span',['../classdr_1_1sp_1_1distributed__span.html',1,'dr::sp']]], + ['distributed_5fspan_5faccessor_25',['distributed_span_accessor',['../classdr_1_1sp_1_1distributed__span__accessor.html',1,'dr::sp']]], + ['distributed_5fvector_26',['distributed_vector',['../classdr_1_1mp_1_1distributed__vector.html#a3b5aa7f2ec47c0ba482d19edd80166d7',1,'dr::mp::distributed_vector::distributed_vector(std::size_t size, value_type fill_value, distribution dist=distribution())'],['../classdr_1_1mp_1_1distributed__vector.html#ab92ce20fbb29588e0f68e073fecbfff8',1,'dr::mp::distributed_vector::distributed_vector(std::size_t size=0, distribution dist=distribution())'],['../classdr_1_1mp_1_1distributed__vector.html',1,'dr::mp::distributed_vector< T, BackendT >'],['../structdr_1_1sp_1_1distributed__vector.html',1,'dr::sp::distributed_vector< T, Allocator >']]], + ['distributed_5fvector_5faccessor_27',['distributed_vector_accessor',['../classdr_1_1sp_1_1distributed__vector__accessor.html',1,'dr::sp']]], + ['distribution_28',['distribution',['../structdr_1_1mp_1_1distribution.html',1,'dr::mp']]], + ['duplicated_5fvector_29',['duplicated_vector',['../classdr_1_1sp_1_1duplicated__vector.html',1,'dr::sp']]], + ['dv_5fsegment_30',['dv_segment',['../classdr_1_1mp_1_1dv__segment.html',1,'dr::mp']]], + ['dv_5fsegment_5fiterator_31',['dv_segment_iterator',['../classdr_1_1mp_1_1dv__segment__iterator.html',1,'dr::mp']]], + ['dv_5fsegment_5freference_32',['dv_segment_reference',['../classdr_1_1mp_1_1dv__segment__reference.html',1,'dr::mp']]], + ['has_5fhalo_5fmethod_33',['has_halo_method',['../conceptdr_1_1mp_1_1has__halo__method.html',1,'dr::mp']]], + ['has_5flocal_34',['has_local',['../conceptdr_1_1ranges_1_1____detail_1_1has__local.html',1,'dr::ranges::__detail']]], + ['has_5flocal_5fadl_35',['has_local_adl',['../conceptdr_1_1ranges_1_1_0d14_1_1has__local__adl.html',1,'dr::ranges::@14']]], + ['has_5frank_5fadl_36',['has_rank_adl',['../conceptdr_1_1ranges_1_1_0d14_1_1has__rank__adl.html',1,'dr::ranges::@14']]], + ['has_5frank_5fmethod_37',['has_rank_method',['../conceptdr_1_1ranges_1_1_0d14_1_1has__rank__method.html',1,'dr::ranges::@14']]], + ['has_5fsegments_38',['has_segments',['../conceptdr_1_1mp_1_1has__segments.html',1,'dr::mp']]], + ['has_5fsegments_5fadl_39',['has_segments_adl',['../conceptdr_1_1ranges_1_1_0d14_1_1has__segments__adl.html',1,'dr::ranges::@14']]], + ['has_5fsegments_5fmethod_40',['has_segments_method',['../conceptdr_1_1_0d5_1_1has__segments__method.html',1,'dr::@5'],['../conceptdr_1_1ranges_1_1_0d14_1_1has__segments__method.html',1,'dr::ranges::@14']]], + ['is_5fdistributed_41',['is_distributed',['../conceptdr_1_1mp_1_1____detail_1_1is__distributed.html',1,'dr::mp::__detail']]], + ['is_5flocalizable_42',['is_localizable',['../conceptdr_1_1ranges_1_1_0d14_1_1is__localizable.html',1,'dr::ranges::@14']]], + ['is_5fmdspan_5fview_43',['is_mdspan_view',['../conceptdr_1_1mp_1_1is__mdspan__view.html',1,'dr::mp']]], + ['is_5fremote_5fiterator_5fshadow_5fimpl_5f_44',['is_remote_iterator_shadow_impl_',['../conceptdr_1_1ranges_1_1_0d14_1_1is__remote__iterator__shadow__impl__.html',1,'dr::ranges::@14']]], + ['is_5fsyclmemcopyable_45',['is_syclmemcopyable',['../conceptdr_1_1sp_1_1____detail_1_1is__syclmemcopyable.html',1,'dr::sp::__detail']]], + ['iter_5fhas_5flocal_5fmethod_46',['iter_has_local_method',['../conceptdr_1_1ranges_1_1_0d14_1_1iter__has__local__method.html',1,'dr::ranges::@14']]], + ['mdarray_5flike_47',['mdarray_like',['../conceptdr_1_1____detail_1_1mdarray__like.html',1,'dr::__detail']]], + ['mdspan_5flike_48',['mdspan_like',['../conceptdr_1_1____detail_1_1mdspan__like.html',1,'dr::__detail']]], + ['no_5fsegments_49',['no_segments',['../conceptdr_1_1mp_1_1no__segments.html',1,'dr::mp']]], + ['one_5fargument_50',['one_argument',['../conceptdr_1_1mp_1_1____detail_1_1one__argument.html',1,'dr::mp::__detail']]], + ['remote_5fcontiguous_5fiterator_51',['remote_contiguous_iterator',['../conceptdr_1_1remote__contiguous__iterator.html',1,'dr']]], + ['remote_5fcontiguous_5frange_52',['remote_contiguous_range',['../conceptdr_1_1remote__contiguous__range.html',1,'dr']]], + ['remote_5fiterator_53',['remote_iterator',['../conceptdr_1_1remote__iterator.html',1,'dr']]], + ['remote_5frange_54',['remote_range',['../conceptdr_1_1remote__range.html',1,'dr']]], + ['remote_5frange_5fshadow_5fimpl_5f_55',['remote_range_shadow_impl_',['../conceptdr_1_1ranges_1_1_0d14_1_1remote__range__shadow__impl__.html',1,'dr::ranges::@14']]], + ['segment_5fhas_5flocal_5fmethod_56',['segment_has_local_method',['../conceptdr_1_1ranges_1_1_0d14_1_1segment__has__local__method.html',1,'dr::ranges::@14']]], + ['segments_5frange_57',['segments_range',['../conceptdr_1_1ranges_1_1_0d14_1_1segments__range.html',1,'dr::ranges::@14']]], + ['sycl_5fdevice_5fselector_58',['sycl_device_selector',['../conceptdr_1_1sp_1_1____detail_1_1sycl__device__selector.html',1,'dr::sp::__detail']]], + ['tupleelementgettable_59',['TupleElementGettable',['../conceptdr_1_1_0d4_1_1TupleElementGettable.html',1,'dr::@4']]], + ['tuplelike_60',['TupleLike',['../conceptdr_1_1TupleLike.html',1,'dr']]], + ['two_5farguments_61',['two_arguments',['../conceptdr_1_1mp_1_1____detail_1_1two__arguments.html',1,'dr::mp::__detail']]], + ['zipable_62',['zipable',['../conceptdr_1_1mp_1_1____detail_1_1zipable.html',1,'dr::mp::__detail']]] +]; diff --git a/doxygen/search/all_4.js b/doxygen/search/all_4.js new file mode 100644 index 0000000000..7969d96d88 --- /dev/null +++ b/doxygen/search/all_4.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['end_0',['end',['../classdr_1_1mp_1_1distributed__vector.html#a3c00d38e1b8a9bf657fe51f53b9c1184',1,'dr::mp::distributed_vector']]], + ['enumerate_5fadapter_5fclosure_1',['enumerate_adapter_closure',['../classdr_1_1____detail_1_1enumerate__adapter__closure.html',1,'dr::__detail::enumerate_adapter_closure'],['../classdr_1_1mp_1_1views_1_1enumerate__adapter__closure.html',1,'dr::mp::views::enumerate_adapter_closure'],['../classdr_1_1sp_1_1views_1_1enumerate__adapter__closure.html',1,'dr::sp::views::enumerate_adapter_closure']]], + ['enumerate_5ffn_5f_2',['enumerate_fn_',['../classdr_1_1____detail_1_1enumerate__fn__.html',1,'dr::__detail::enumerate_fn_'],['../classdr_1_1mp_1_1views_1_1enumerate__fn__.html',1,'dr::mp::views::enumerate_fn_'],['../classdr_1_1sp_1_1views_1_1enumerate__fn__.html',1,'dr::sp::views::enumerate_fn_']]], + ['event_3',['event',['../classdr_1_1____detail_1_1event.html',1,'dr::__detail']]], + ['exchange_5fbegin_4',['exchange_begin',['../classdr_1_1mp_1_1halo__impl.html#a494233caba6ea66bb8553bfa16e86662',1,'dr::mp::halo_impl']]], + ['exchange_5ffinalize_5',['exchange_finalize',['../classdr_1_1mp_1_1halo__impl.html#afdfab35f826a7591c82dcde73e6dee22',1,'dr::mp::halo_impl']]] +]; diff --git a/doxygen/search/all_5.js b/doxygen/search/all_5.js new file mode 100644 index 0000000000..6b73686053 --- /dev/null +++ b/doxygen/search/all_5.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['formatter_3c_20mdspan_2c_20char_20_3e_0',['formatter< Mdspan, char >',['../structfmt_1_1formatter_3_01Mdspan_00_01char_01_4.html',1,'fmt']]], + ['future_1',['future',['../classdr_1_1sp_1_1future.html',1,'dr::sp']]] +]; diff --git a/doxygen/search/all_6.js b/doxygen/search/all_6.js new file mode 100644 index 0000000000..f207657cac --- /dev/null +++ b/doxygen/search/all_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['global_5fcontext_0',['global_context',['../structdr_1_1mp_1_1____detail_1_1global__context.html',1,'dr::mp::__detail']]] +]; diff --git a/doxygen/search/all_7.js b/doxygen/search/all_7.js new file mode 100644 index 0000000000..cd89d0d6b2 --- /dev/null +++ b/doxygen/search/all_7.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['halo_5fbounds_0',['halo_bounds',['../structdr_1_1mp_1_1halo__bounds.html',1,'dr::mp']]], + ['halo_5fimpl_1',['halo_impl',['../classdr_1_1mp_1_1halo__impl.html',1,'dr::mp::halo_impl< Group >'],['../classdr_1_1mp_1_1halo__impl.html#ac2cb7a4821925599ff4405bd3c94e953',1,'dr::mp::halo_impl::halo_impl()']]] +]; diff --git a/doxygen/search/all_8.js b/doxygen/search/all_8.js new file mode 100644 index 0000000000..bac4ce3d70 --- /dev/null +++ b/doxygen/search/all_8.js @@ -0,0 +1,27 @@ +var searchData= +[ + ['id_0',['id',['../classdr_1_1sp_1_1id.html',1,'dr::sp']]], + ['index_1',['index',['../classdr_1_1index.html',1,'dr']]], + ['index_3c_20i_20_3e_2',['index< I >',['../classdr_1_1index.html',1,'dr']]], + ['index_3c_20std_3a_3aint64_5ft_20_3e_3',['index< std::int64_t >',['../classdr_1_1index.html',1,'dr']]], + ['index_3c_20std_3a_3asize_5ft_20_3e_4',['index< std::size_t >',['../classdr_1_1index.html',1,'dr']]], + ['index_5fgroup_5',['index_group',['../classdr_1_1mp_1_1index__group.html',1,'dr::mp::index_group< T, Memory >'],['../classdr_1_1mp_1_1index__group.html#a240920b56371d37fe7c79904faab4d23',1,'dr::mp::index_group::index_group()']]], + ['iota_5ffn_5f_6',['iota_fn_',['../structdr_1_1views_1_1iota__fn__.html',1,'dr::views']]], + ['is_5fdrop_5fview_7',['is_drop_view',['../structdr_1_1is__drop__view.html',1,'dr']]], + ['is_5fdrop_5fview_3c_20rng_3a_3adrop_5fview_3c_20t_20_3e_20_3e_8',['is_drop_view< rng::drop_view< T > >',['../structdr_1_1is__drop__view_3_01rng_1_1drop__view_3_01T_01_4_01_4.html',1,'dr']]], + ['is_5fiota_5fview_9',['is_iota_view',['../structdr_1_1is__iota__view.html',1,'dr']]], + ['is_5fiota_5fview_3c_20rng_3a_3aiota_5fview_3c_20w_20_3e_20_3e_10',['is_iota_view< rng::iota_view< W > >',['../structdr_1_1is__iota__view_3_01rng_1_1iota__view_3_01W_01_4_01_4.html',1,'dr']]], + ['is_5fowning_5fview_11',['is_owning_view',['../structdr_1_1is__owning__view.html',1,'dr']]], + ['is_5fref_5fview_12',['is_ref_view',['../structdr_1_1is__ref__view.html',1,'dr']]], + ['is_5fref_5fview_3c_20rng_3a_3aref_5fview_3c_20r_20_3e_20_3e_13',['is_ref_view< rng::ref_view< R > >',['../structdr_1_1is__ref__view_3_01rng_1_1ref__view_3_01R_01_4_01_4.html',1,'dr']]], + ['is_5fsliding_5fview_14',['is_sliding_view',['../structdr_1_1is__sliding__view.html',1,'dr']]], + ['is_5fsliding_5fview_3c_20rng_3a_3asliding_5fview_3c_20t_20_3e_20_3e_15',['is_sliding_view< rng::sliding_view< T > >',['../structdr_1_1is__sliding__view_3_01rng_1_1sliding__view_3_01T_01_4_01_4.html',1,'dr']]], + ['is_5fsubrange_5fview_16',['is_subrange_view',['../structdr_1_1is__subrange__view.html',1,'dr']]], + ['is_5fsubrange_5fview_3c_20rng_3a_3asubrange_3c_20t_20_3e_20_3e_17',['is_subrange_view< rng::subrange< T > >',['../structdr_1_1is__subrange__view_3_01rng_1_1subrange_3_01T_01_4_01_4.html',1,'dr']]], + ['is_5ftake_5fview_18',['is_take_view',['../structdr_1_1is__take__view.html',1,'dr']]], + ['is_5ftake_5fview_3c_20rng_3a_3atake_5fview_3c_20t_20_3e_20_3e_19',['is_take_view< rng::take_view< T > >',['../structdr_1_1is__take__view_3_01rng_1_1take__view_3_01T_01_4_01_4.html',1,'dr']]], + ['is_5fzip_5fview_20',['is_zip_view',['../structdr_1_1is__zip__view.html',1,'dr']]], + ['is_5fzip_5fview_3c_20rng_3a_3azip_5fview_3c_20views_2e_2e_2e_20_3e_20_3e_21',['is_zip_view< rng::zip_view< Views... > >',['../structdr_1_1is__zip__view_3_01rng_1_1zip__view_3_01Views_8_8_8_01_4_01_4.html',1,'dr']]], + ['iterator_22',['iterator',['../classdr_1_1mp_1_1distributed__vector_1_1iterator.html',1,'dr::mp::distributed_vector']]], + ['iterator_5fadaptor_23',['iterator_adaptor',['../classdr_1_1iterator__adaptor.html',1,'dr']]] +]; diff --git a/doxygen/search/all_9.js b/doxygen/search/all_9.js new file mode 100644 index 0000000000..6f4ccf4735 --- /dev/null +++ b/doxygen/search/all_9.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['local_5ffn_5f_0',['local_fn_',['../structdr_1_1ranges_1_1____detail_1_1local__fn__.html',1,'dr::ranges::__detail']]], + ['logger_1',['logger',['../classdr_1_1logger.html',1,'dr']]] +]; diff --git a/doxygen/search/all_a.js b/doxygen/search/all_a.js new file mode 100644 index 0000000000..c288cfcb2b --- /dev/null +++ b/doxygen/search/all_a.js @@ -0,0 +1,17 @@ +var searchData= +[ + ['matrix_5fentry_0',['matrix_entry',['../classdr_1_1sp_1_1matrix__entry.html',1,'dr::sp']]], + ['matrix_5fpartition_1',['matrix_partition',['../classdr_1_1sp_1_1matrix__partition.html',1,'dr::sp']]], + ['matrix_5fref_2',['matrix_ref',['../classdr_1_1sp_1_1matrix__ref.html',1,'dr::sp']]], + ['max_5fop_3',['max_op',['../structdr_1_1mp_1_1halo__impl_1_1max__op.html',1,'dr::mp::halo_impl']]], + ['md_5fsegment_4',['md_segment',['../classdr_1_1mp_1_1____detail_1_1md__segment.html',1,'dr::mp::__detail']]], + ['mdspan_5fadapter_5fclosure_5',['mdspan_adapter_closure',['../classdr_1_1mp_1_1views_1_1mdspan__adapter__closure.html',1,'dr::mp::views']]], + ['mdspan_5ffn_5f_6',['mdspan_fn_',['../classdr_1_1mp_1_1views_1_1mdspan__fn__.html',1,'dr::mp::views']]], + ['mdspan_5fiter_5faccessor_7',['mdspan_iter_accessor',['../classdr_1_1____detail_1_1mdspan__iter__accessor.html',1,'dr::__detail']]], + ['mdspan_5fview_8',['mdspan_view',['../structdr_1_1mp_1_1mdspan__view.html',1,'dr::mp']]], + ['mdsub_5fsegment_9',['mdsub_segment',['../classdr_1_1mp_1_1____detail_1_1mdsub__segment.html',1,'dr::mp::__detail']]], + ['mdtranspose_10',['mdtranspose',['../classdr_1_1____detail_1_1mdtranspose.html',1,'dr::__detail']]], + ['min_5fop_11',['min_op',['../structdr_1_1mp_1_1halo__impl_1_1min__op.html',1,'dr::mp::halo_impl']]], + ['mpibackend_12',['MpiBackend',['../classdr_1_1mp_1_1MpiBackend.html',1,'dr::mp']]], + ['multiplies_5fop_13',['multiplies_op',['../structdr_1_1mp_1_1halo__impl_1_1multiplies__op.html',1,'dr::mp::halo_impl']]] +]; diff --git a/doxygen/search/all_b.js b/doxygen/search/all_b.js new file mode 100644 index 0000000000..c0669e1f27 --- /dev/null +++ b/doxygen/search/all_b.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['normal_5fdistributed_5fiterator_5faccessor_0',['normal_distributed_iterator_accessor',['../classdr_1_1normal__distributed__iterator__accessor.html',1,'dr']]] +]; diff --git a/doxygen/search/all_c.js b/doxygen/search/all_c.js new file mode 100644 index 0000000000..338caa687c --- /dev/null +++ b/doxygen/search/all_c.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['operator_5b_5d_0',['operator[]',['../classdr_1_1mp_1_1distributed__vector.html#a2ab3fddcdfedddc8258740f0b1eaa126',1,'dr::mp::distributed_vector']]], + ['owning_5fview_1',['owning_view',['../classdr_1_1____detail_1_1owning__view.html',1,'dr::__detail']]] +]; diff --git a/doxygen/search/all_d.js b/doxygen/search/all_d.js new file mode 100644 index 0000000000..14f6619ec6 --- /dev/null +++ b/doxygen/search/all_d.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['plus_5fop_0',['plus_op',['../structdr_1_1mp_1_1halo__impl_1_1plus__op.html',1,'dr::mp::halo_impl']]] +]; diff --git a/doxygen/search/all_e.js b/doxygen/search/all_e.js new file mode 100644 index 0000000000..24836c25e5 --- /dev/null +++ b/doxygen/search/all_e.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['range_5fsize_0',['range_size',['../structdr_1_1mp_1_1views_1_1____detail_1_1range__size.html',1,'dr::mp::views::__detail']]], + ['range_5fsize_3c_20r_20_3e_1',['range_size< R >',['../structdr_1_1mp_1_1views_1_1____detail_1_1range__size_3_01R_01_4.html',1,'dr::mp::views::__detail']]], + ['rebind_2',['rebind',['../structdr_1_1sp_1_1device__allocator_1_1rebind.html',1,'dr::sp::device_allocator']]], + ['reduce_5fbegin_3',['reduce_begin',['../classdr_1_1mp_1_1halo__impl.html#a3b2c11e0a016c768c65baf063f7ed8b5',1,'dr::mp::halo_impl']]], + ['reduce_5ffinalize_4',['reduce_finalize',['../classdr_1_1mp_1_1halo__impl.html#a16abfcd5cdbcfed8c8b81b19a77d4223',1,'dr::mp::halo_impl::reduce_finalize(const auto &op)'],['../classdr_1_1mp_1_1halo__impl.html#a3e5cec61ea29da0b960b906f686cea9a',1,'dr::mp::halo_impl::reduce_finalize()']]], + ['remote_5fsubrange_5',['remote_subrange',['../classdr_1_1remote__subrange.html',1,'dr']]], + ['rma_5fwindow_6',['rma_window',['../classdr_1_1rma__window.html',1,'dr']]] +]; diff --git a/doxygen/search/all_f.js b/doxygen/search/all_f.js new file mode 100644 index 0000000000..c5b5ab70c1 --- /dev/null +++ b/doxygen/search/all_f.js @@ -0,0 +1,22 @@ +var searchData= +[ + ['second_5fop_0',['second_op',['../structdr_1_1mp_1_1halo__impl_1_1second__op.html',1,'dr::mp::halo_impl']]], + ['segment_5frange_1',['segment_range',['../classdr_1_1sp_1_1segment__range.html',1,'dr::sp']]], + ['segment_5frange_5faccessor_2',['segment_range_accessor',['../classdr_1_1sp_1_1segment__range__accessor.html',1,'dr::sp']]], + ['segmented_5fview_3',['segmented_view',['../classdr_1_1mp_1_1segmented__view.html',1,'dr::mp']]], + ['segmented_5fview_5fiterator_4',['segmented_view_iterator',['../classdr_1_1mp_1_1segmented__view__iterator.html',1,'dr::mp']]], + ['size_5',['size',['../classdr_1_1mp_1_1distributed__vector.html#a080457af224429dbae0ccf586e2da206',1,'dr::mp::distributed_vector']]], + ['slice_5fadaptor_5fclosure_6',['slice_adaptor_closure',['../classdr_1_1sp_1_1views_1_1slice__adaptor__closure.html',1,'dr::sp::views']]], + ['sliding_5ffn_7',['sliding_fn',['../structdr_1_1mp_1_1views_1_1____detail_1_1sliding__fn.html',1,'dr::mp::views::__detail']]], + ['source_5flocation_8',['source_location',['../structnostd_1_1source__location.html',1,'nostd']]], + ['span_9',['span',['../classdr_1_1sp_1_1span.html',1,'dr::sp']]], + ['span_3c_20t_2c_20t_20_2a_20_3e_10',['span< T, T * >',['../classdr_1_1sp_1_1span.html',1,'dr::sp']]], + ['span_5fgroup_11',['span_group',['../classdr_1_1mp_1_1span__group.html',1,'dr::mp']]], + ['span_5fhalo_12',['span_halo',['../classdr_1_1mp_1_1span__halo.html',1,'dr::mp']]], + ['sparse_5fmatrix_13',['sparse_matrix',['../classdr_1_1sp_1_1sparse__matrix.html',1,'dr::sp']]], + ['submdspan_5fadapter_5fclosure_14',['submdspan_adapter_closure',['../classdr_1_1mp_1_1views_1_1submdspan__adapter__closure.html',1,'dr::mp::views']]], + ['submdspan_5ffn_5f_15',['submdspan_fn_',['../classdr_1_1mp_1_1views_1_1submdspan__fn__.html',1,'dr::mp::views']]], + ['submdspan_5fview_16',['submdspan_view',['../structdr_1_1mp_1_1submdspan__view.html',1,'dr::mp']]], + ['subrange_17',['subrange',['../classdr_1_1mp_1_1subrange.html',1,'dr::mp']]], + ['subrange_5fiterator_18',['subrange_iterator',['../classdr_1_1mp_1_1subrange__iterator.html',1,'dr::mp']]] +]; diff --git a/doxygen/search/classes_0.js b/doxygen/search/classes_0.js new file mode 100644 index 0000000000..1ee809260e --- /dev/null +++ b/doxygen/search/classes_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['allocator_0',['allocator',['../classdr_1_1mp_1_1____detail_1_1allocator.html',1,'dr::mp::__detail']]], + ['any_1',['any',['../structdr_1_1mp_1_1____detail_1_1any.html',1,'dr::mp::__detail']]] +]; diff --git a/doxygen/search/classes_1.js b/doxygen/search/classes_1.js new file mode 100644 index 0000000000..4218e2575c --- /dev/null +++ b/doxygen/search/classes_1.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['block_5fcyclic_0',['block_cyclic',['../classdr_1_1sp_1_1block__cyclic.html',1,'dr::sp']]], + ['buffer_1',['buffer',['../classdr_1_1mp_1_1____detail_1_1buffer.html',1,'dr::mp::__detail']]], + ['buffered_5fallocator_2',['buffered_allocator',['../classdr_1_1sp_1_1buffered__allocator.html',1,'dr::sp']]] +]; diff --git a/doxygen/search/classes_10.js b/doxygen/search/classes_10.js new file mode 100644 index 0000000000..ec69469c72 --- /dev/null +++ b/doxygen/search/classes_10.js @@ -0,0 +1,17 @@ +var searchData= +[ + ['timer_0',['timer',['../classdr_1_1timer.html',1,'dr']]], + ['tmp_5fbuffer_1',['tmp_buffer',['../classdr_1_1mp_1_1____detail_1_1tmp__buffer.html',1,'dr::mp::__detail']]], + ['transform_5fadapter_5fclosure_2',['transform_adapter_closure',['../classdr_1_1views_1_1transform__adapter__closure.html',1,'dr::views']]], + ['transform_5ffn_5f_3',['transform_fn_',['../classdr_1_1views_1_1transform__fn__.html',1,'dr::views']]], + ['transform_5fiterator_4',['transform_iterator',['../classdr_1_1transform__iterator.html',1,'dr']]], + ['transform_5fview_5',['transform_view',['../classdr_1_1transform__view.html',1,'dr']]], + ['tuple_5felement_3c_20index_2c_20dr_3a_3aindex_3c_20i_20_3e_20_3e_6',['tuple_element< Index, dr::index< I > >',['../structstd_1_1tuple__element_3_01Index_00_01dr_1_1index_3_01I_01_4_01_4.html',1,'std']]], + ['tuple_5felement_3c_20index_2c_20dr_3a_3asp_3a_3amatrix_5fentry_3c_20t_2c_20i_20_3e_20_3e_7',['tuple_element< Index, dr::sp::matrix_entry< T, I > >',['../structstd_1_1tuple__element_3_01Index_00_01dr_1_1sp_1_1matrix__entry_3_01T_00_01I_01_4_01_4.html',1,'std']]], + ['tuple_5felement_3c_20index_2c_20dr_3a_3asp_3a_3amatrix_5fref_3c_20t_2c_20i_2c_20tref_20_3e_20_3e_8',['tuple_element< Index, dr::sp::matrix_ref< T, I, TRef > >',['../structstd_1_1tuple__element_3_01Index_00_01dr_1_1sp_1_1matrix__ref_3_01T_00_01I_00_01TRef_01_4_01_4.html',1,'std']]], + ['tuple_5for_5fpair_9',['tuple_or_pair',['../structdr_1_1sp_1_1____detail_1_1tuple__or__pair.html',1,'dr::sp::__detail']]], + ['tuple_5for_5fpair_3c_20t_2c_20u_20_3e_10',['tuple_or_pair< T, U >',['../structdr_1_1sp_1_1____detail_1_1tuple__or__pair_3_01T_00_01U_01_4.html',1,'dr::sp::__detail']]], + ['tuple_5fsize_3c_20dr_3a_3aindex_3c_20i_20_3e_20_3e_11',['tuple_size< dr::index< I > >',['../structstd_1_1tuple__size_3_01dr_1_1index_3_01I_01_4_01_4.html',1,'std']]], + ['tuple_5fsize_3c_20dr_3a_3asp_3a_3amatrix_5fentry_3c_20t_2c_20i_20_3e_20_3e_12',['tuple_size< dr::sp::matrix_entry< T, I > >',['../structstd_1_1tuple__size_3_01dr_1_1sp_1_1matrix__entry_3_01T_00_01I_01_4_01_4.html',1,'std']]], + ['tuple_5fsize_3c_20dr_3a_3asp_3a_3amatrix_5fref_3c_20t_2c_20i_2c_20tref_20_3e_20_3e_13',['tuple_size< dr::sp::matrix_ref< T, I, TRef > >',['../structstd_1_1tuple__size_3_01dr_1_1sp_1_1matrix__ref_3_01T_00_01I_00_01TRef_01_4_01_4.html',1,'std']]] +]; diff --git a/doxygen/search/classes_11.js b/doxygen/search/classes_11.js new file mode 100644 index 0000000000..0ef35474f0 --- /dev/null +++ b/doxygen/search/classes_11.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['unstructured_5fhalo_0',['unstructured_halo',['../classdr_1_1mp_1_1unstructured__halo.html',1,'dr::mp']]] +]; diff --git a/doxygen/search/classes_12.js b/doxygen/search/classes_12.js new file mode 100644 index 0000000000..d1fa734f0b --- /dev/null +++ b/doxygen/search/classes_12.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['vector_0',['vector',['../classdr_1_1sp_1_1vector.html',1,'dr::sp']]], + ['vector_3c_20t_2c_20allocator_20_3e_1',['vector< T, Allocator >',['../classdr_1_1sp_1_1vector.html',1,'dr::sp']]] +]; diff --git a/doxygen/search/classes_13.js b/doxygen/search/classes_13.js new file mode 100644 index 0000000000..09d2aa8c81 --- /dev/null +++ b/doxygen/search/classes_13.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['zip_5faccessor_0',['zip_accessor',['../classdr_1_1sp_1_1zip__accessor.html',1,'dr::sp']]], + ['zip_5fiterator_1',['zip_iterator',['../classdr_1_1mp_1_1zip__iterator.html',1,'dr::mp']]], + ['zip_5fview_2',['zip_view',['../classdr_1_1mp_1_1zip__view.html',1,'dr::mp::zip_view< Rs >'],['../classdr_1_1sp_1_1zip__view.html',1,'dr::sp::zip_view< Rs >']]] +]; diff --git a/doxygen/search/classes_2.js b/doxygen/search/classes_2.js new file mode 100644 index 0000000000..85d6db51a0 --- /dev/null +++ b/doxygen/search/classes_2.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['communicator_0',['communicator',['../classdr_1_1communicator.html',1,'dr']]], + ['coo_5fmatrix_1',['coo_matrix',['../classdr_1_1sp_1_1____detail_1_1coo__matrix.html',1,'dr::sp::__detail']]], + ['count_5ffn_5f_2',['count_fn_',['../classdr_1_1mp_1_1count__fn__.html',1,'dr::mp']]], + ['count_5fif_5ffn_5f_3',['count_if_fn_',['../classdr_1_1mp_1_1count__if__fn__.html',1,'dr::mp']]], + ['csr_5fmatrix_5fview_4',['csr_matrix_view',['../classdr_1_1sp_1_1csr__matrix__view.html',1,'dr::sp']]], + ['csr_5fmatrix_5fview_5faccessor_5',['csr_matrix_view_accessor',['../classdr_1_1sp_1_1csr__matrix__view__accessor.html',1,'dr::sp']]] +]; diff --git a/doxygen/search/classes_3.js b/doxygen/search/classes_3.js new file mode 100644 index 0000000000..ca54e4e29c --- /dev/null +++ b/doxygen/search/classes_3.js @@ -0,0 +1,31 @@ +var searchData= +[ + ['default_5fmemory_0',['default_memory',['../structdr_1_1default__memory.html',1,'dr']]], + ['dense_5fmatrix_1',['dense_matrix',['../classdr_1_1sp_1_1dense__matrix.html',1,'dr::sp']]], + ['dense_5fmatrix_5faccessor_2',['dense_matrix_accessor',['../classdr_1_1sp_1_1dense__matrix__accessor.html',1,'dr::sp']]], + ['dense_5fmatrix_5fcolumn_5faccessor_3',['dense_matrix_column_accessor',['../classdr_1_1sp_1_1dense__matrix__column__accessor.html',1,'dr::sp']]], + ['dense_5fmatrix_5fcolumn_5fview_4',['dense_matrix_column_view',['../classdr_1_1sp_1_1dense__matrix__column__view.html',1,'dr::sp']]], + ['dense_5fmatrix_5frow_5faccessor_5',['dense_matrix_row_accessor',['../classdr_1_1sp_1_1dense__matrix__row__accessor.html',1,'dr::sp']]], + ['dense_5fmatrix_5frow_5fview_6',['dense_matrix_row_view',['../classdr_1_1sp_1_1dense__matrix__row__view.html',1,'dr::sp']]], + ['dense_5fmatrix_5fview_7',['dense_matrix_view',['../classdr_1_1sp_1_1dense__matrix__view.html',1,'dr::sp']]], + ['device_5fallocator_8',['device_allocator',['../classdr_1_1sp_1_1device__allocator.html',1,'dr::sp']]], + ['device_5fpolicy_9',['device_policy',['../structdr_1_1mp_1_1device__policy.html',1,'dr::mp::device_policy'],['../structdr_1_1sp_1_1device__policy.html',1,'dr::sp::device_policy']]], + ['device_5fptr_10',['device_ptr',['../classdr_1_1sp_1_1device__ptr.html',1,'dr::sp']]], + ['device_5fref_11',['device_ref',['../classdr_1_1sp_1_1device__ref.html',1,'dr::sp']]], + ['device_5fspan_12',['device_span',['../classdr_1_1sp_1_1device__span.html',1,'dr::sp']]], + ['device_5fvector_13',['device_vector',['../classdr_1_1sp_1_1device__vector.html',1,'dr::sp']]], + ['direct_5fiterator_14',['direct_iterator',['../classdr_1_1____detail_1_1direct__iterator.html',1,'dr::__detail']]], + ['distributed_5fdense_5fmatrix_15',['distributed_dense_matrix',['../classdr_1_1sp_1_1distributed__dense__matrix.html',1,'dr::sp']]], + ['distributed_5fdense_5fmatrix_5faccessor_16',['distributed_dense_matrix_accessor',['../classdr_1_1sp_1_1distributed__dense__matrix__accessor.html',1,'dr::sp']]], + ['distributed_5fmdarray_17',['distributed_mdarray',['../classdr_1_1mp_1_1distributed__mdarray.html',1,'dr::mp']]], + ['distributed_5frange_5faccessor_18',['distributed_range_accessor',['../classdr_1_1sp_1_1distributed__range__accessor.html',1,'dr::sp']]], + ['distributed_5fspan_19',['distributed_span',['../classdr_1_1sp_1_1distributed__span.html',1,'dr::sp']]], + ['distributed_5fspan_5faccessor_20',['distributed_span_accessor',['../classdr_1_1sp_1_1distributed__span__accessor.html',1,'dr::sp']]], + ['distributed_5fvector_21',['distributed_vector',['../classdr_1_1mp_1_1distributed__vector.html',1,'dr::mp::distributed_vector< T, BackendT >'],['../structdr_1_1sp_1_1distributed__vector.html',1,'dr::sp::distributed_vector< T, Allocator >']]], + ['distributed_5fvector_5faccessor_22',['distributed_vector_accessor',['../classdr_1_1sp_1_1distributed__vector__accessor.html',1,'dr::sp']]], + ['distribution_23',['distribution',['../structdr_1_1mp_1_1distribution.html',1,'dr::mp']]], + ['duplicated_5fvector_24',['duplicated_vector',['../classdr_1_1sp_1_1duplicated__vector.html',1,'dr::sp']]], + ['dv_5fsegment_25',['dv_segment',['../classdr_1_1mp_1_1dv__segment.html',1,'dr::mp']]], + ['dv_5fsegment_5fiterator_26',['dv_segment_iterator',['../classdr_1_1mp_1_1dv__segment__iterator.html',1,'dr::mp']]], + ['dv_5fsegment_5freference_27',['dv_segment_reference',['../classdr_1_1mp_1_1dv__segment__reference.html',1,'dr::mp']]] +]; diff --git a/doxygen/search/classes_4.js b/doxygen/search/classes_4.js new file mode 100644 index 0000000000..4167d591fa --- /dev/null +++ b/doxygen/search/classes_4.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['enumerate_5fadapter_5fclosure_0',['enumerate_adapter_closure',['../classdr_1_1____detail_1_1enumerate__adapter__closure.html',1,'dr::__detail::enumerate_adapter_closure'],['../classdr_1_1mp_1_1views_1_1enumerate__adapter__closure.html',1,'dr::mp::views::enumerate_adapter_closure'],['../classdr_1_1sp_1_1views_1_1enumerate__adapter__closure.html',1,'dr::sp::views::enumerate_adapter_closure']]], + ['enumerate_5ffn_5f_1',['enumerate_fn_',['../classdr_1_1____detail_1_1enumerate__fn__.html',1,'dr::__detail::enumerate_fn_'],['../classdr_1_1mp_1_1views_1_1enumerate__fn__.html',1,'dr::mp::views::enumerate_fn_'],['../classdr_1_1sp_1_1views_1_1enumerate__fn__.html',1,'dr::sp::views::enumerate_fn_']]], + ['event_2',['event',['../classdr_1_1____detail_1_1event.html',1,'dr::__detail']]] +]; diff --git a/doxygen/search/classes_5.js b/doxygen/search/classes_5.js new file mode 100644 index 0000000000..6b73686053 --- /dev/null +++ b/doxygen/search/classes_5.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['formatter_3c_20mdspan_2c_20char_20_3e_0',['formatter< Mdspan, char >',['../structfmt_1_1formatter_3_01Mdspan_00_01char_01_4.html',1,'fmt']]], + ['future_1',['future',['../classdr_1_1sp_1_1future.html',1,'dr::sp']]] +]; diff --git a/doxygen/search/classes_6.js b/doxygen/search/classes_6.js new file mode 100644 index 0000000000..f207657cac --- /dev/null +++ b/doxygen/search/classes_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['global_5fcontext_0',['global_context',['../structdr_1_1mp_1_1____detail_1_1global__context.html',1,'dr::mp::__detail']]] +]; diff --git a/doxygen/search/classes_7.js b/doxygen/search/classes_7.js new file mode 100644 index 0000000000..b60e87c507 --- /dev/null +++ b/doxygen/search/classes_7.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['halo_5fbounds_0',['halo_bounds',['../structdr_1_1mp_1_1halo__bounds.html',1,'dr::mp']]], + ['halo_5fimpl_1',['halo_impl',['../classdr_1_1mp_1_1halo__impl.html',1,'dr::mp']]] +]; diff --git a/doxygen/search/classes_8.js b/doxygen/search/classes_8.js new file mode 100644 index 0000000000..053d430e21 --- /dev/null +++ b/doxygen/search/classes_8.js @@ -0,0 +1,27 @@ +var searchData= +[ + ['id_0',['id',['../classdr_1_1sp_1_1id.html',1,'dr::sp']]], + ['index_1',['index',['../classdr_1_1index.html',1,'dr']]], + ['index_3c_20i_20_3e_2',['index< I >',['../classdr_1_1index.html',1,'dr']]], + ['index_3c_20std_3a_3aint64_5ft_20_3e_3',['index< std::int64_t >',['../classdr_1_1index.html',1,'dr']]], + ['index_3c_20std_3a_3asize_5ft_20_3e_4',['index< std::size_t >',['../classdr_1_1index.html',1,'dr']]], + ['index_5fgroup_5',['index_group',['../classdr_1_1mp_1_1index__group.html',1,'dr::mp']]], + ['iota_5ffn_5f_6',['iota_fn_',['../structdr_1_1views_1_1iota__fn__.html',1,'dr::views']]], + ['is_5fdrop_5fview_7',['is_drop_view',['../structdr_1_1is__drop__view.html',1,'dr']]], + ['is_5fdrop_5fview_3c_20rng_3a_3adrop_5fview_3c_20t_20_3e_20_3e_8',['is_drop_view< rng::drop_view< T > >',['../structdr_1_1is__drop__view_3_01rng_1_1drop__view_3_01T_01_4_01_4.html',1,'dr']]], + ['is_5fiota_5fview_9',['is_iota_view',['../structdr_1_1is__iota__view.html',1,'dr']]], + ['is_5fiota_5fview_3c_20rng_3a_3aiota_5fview_3c_20w_20_3e_20_3e_10',['is_iota_view< rng::iota_view< W > >',['../structdr_1_1is__iota__view_3_01rng_1_1iota__view_3_01W_01_4_01_4.html',1,'dr']]], + ['is_5fowning_5fview_11',['is_owning_view',['../structdr_1_1is__owning__view.html',1,'dr']]], + ['is_5fref_5fview_12',['is_ref_view',['../structdr_1_1is__ref__view.html',1,'dr']]], + ['is_5fref_5fview_3c_20rng_3a_3aref_5fview_3c_20r_20_3e_20_3e_13',['is_ref_view< rng::ref_view< R > >',['../structdr_1_1is__ref__view_3_01rng_1_1ref__view_3_01R_01_4_01_4.html',1,'dr']]], + ['is_5fsliding_5fview_14',['is_sliding_view',['../structdr_1_1is__sliding__view.html',1,'dr']]], + ['is_5fsliding_5fview_3c_20rng_3a_3asliding_5fview_3c_20t_20_3e_20_3e_15',['is_sliding_view< rng::sliding_view< T > >',['../structdr_1_1is__sliding__view_3_01rng_1_1sliding__view_3_01T_01_4_01_4.html',1,'dr']]], + ['is_5fsubrange_5fview_16',['is_subrange_view',['../structdr_1_1is__subrange__view.html',1,'dr']]], + ['is_5fsubrange_5fview_3c_20rng_3a_3asubrange_3c_20t_20_3e_20_3e_17',['is_subrange_view< rng::subrange< T > >',['../structdr_1_1is__subrange__view_3_01rng_1_1subrange_3_01T_01_4_01_4.html',1,'dr']]], + ['is_5ftake_5fview_18',['is_take_view',['../structdr_1_1is__take__view.html',1,'dr']]], + ['is_5ftake_5fview_3c_20rng_3a_3atake_5fview_3c_20t_20_3e_20_3e_19',['is_take_view< rng::take_view< T > >',['../structdr_1_1is__take__view_3_01rng_1_1take__view_3_01T_01_4_01_4.html',1,'dr']]], + ['is_5fzip_5fview_20',['is_zip_view',['../structdr_1_1is__zip__view.html',1,'dr']]], + ['is_5fzip_5fview_3c_20rng_3a_3azip_5fview_3c_20views_2e_2e_2e_20_3e_20_3e_21',['is_zip_view< rng::zip_view< Views... > >',['../structdr_1_1is__zip__view_3_01rng_1_1zip__view_3_01Views_8_8_8_01_4_01_4.html',1,'dr']]], + ['iterator_22',['iterator',['../classdr_1_1mp_1_1distributed__vector_1_1iterator.html',1,'dr::mp::distributed_vector']]], + ['iterator_5fadaptor_23',['iterator_adaptor',['../classdr_1_1iterator__adaptor.html',1,'dr']]] +]; diff --git a/doxygen/search/classes_9.js b/doxygen/search/classes_9.js new file mode 100644 index 0000000000..6f4ccf4735 --- /dev/null +++ b/doxygen/search/classes_9.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['local_5ffn_5f_0',['local_fn_',['../structdr_1_1ranges_1_1____detail_1_1local__fn__.html',1,'dr::ranges::__detail']]], + ['logger_1',['logger',['../classdr_1_1logger.html',1,'dr']]] +]; diff --git a/doxygen/search/classes_a.js b/doxygen/search/classes_a.js new file mode 100644 index 0000000000..c288cfcb2b --- /dev/null +++ b/doxygen/search/classes_a.js @@ -0,0 +1,17 @@ +var searchData= +[ + ['matrix_5fentry_0',['matrix_entry',['../classdr_1_1sp_1_1matrix__entry.html',1,'dr::sp']]], + ['matrix_5fpartition_1',['matrix_partition',['../classdr_1_1sp_1_1matrix__partition.html',1,'dr::sp']]], + ['matrix_5fref_2',['matrix_ref',['../classdr_1_1sp_1_1matrix__ref.html',1,'dr::sp']]], + ['max_5fop_3',['max_op',['../structdr_1_1mp_1_1halo__impl_1_1max__op.html',1,'dr::mp::halo_impl']]], + ['md_5fsegment_4',['md_segment',['../classdr_1_1mp_1_1____detail_1_1md__segment.html',1,'dr::mp::__detail']]], + ['mdspan_5fadapter_5fclosure_5',['mdspan_adapter_closure',['../classdr_1_1mp_1_1views_1_1mdspan__adapter__closure.html',1,'dr::mp::views']]], + ['mdspan_5ffn_5f_6',['mdspan_fn_',['../classdr_1_1mp_1_1views_1_1mdspan__fn__.html',1,'dr::mp::views']]], + ['mdspan_5fiter_5faccessor_7',['mdspan_iter_accessor',['../classdr_1_1____detail_1_1mdspan__iter__accessor.html',1,'dr::__detail']]], + ['mdspan_5fview_8',['mdspan_view',['../structdr_1_1mp_1_1mdspan__view.html',1,'dr::mp']]], + ['mdsub_5fsegment_9',['mdsub_segment',['../classdr_1_1mp_1_1____detail_1_1mdsub__segment.html',1,'dr::mp::__detail']]], + ['mdtranspose_10',['mdtranspose',['../classdr_1_1____detail_1_1mdtranspose.html',1,'dr::__detail']]], + ['min_5fop_11',['min_op',['../structdr_1_1mp_1_1halo__impl_1_1min__op.html',1,'dr::mp::halo_impl']]], + ['mpibackend_12',['MpiBackend',['../classdr_1_1mp_1_1MpiBackend.html',1,'dr::mp']]], + ['multiplies_5fop_13',['multiplies_op',['../structdr_1_1mp_1_1halo__impl_1_1multiplies__op.html',1,'dr::mp::halo_impl']]] +]; diff --git a/doxygen/search/classes_b.js b/doxygen/search/classes_b.js new file mode 100644 index 0000000000..c0669e1f27 --- /dev/null +++ b/doxygen/search/classes_b.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['normal_5fdistributed_5fiterator_5faccessor_0',['normal_distributed_iterator_accessor',['../classdr_1_1normal__distributed__iterator__accessor.html',1,'dr']]] +]; diff --git a/doxygen/search/classes_c.js b/doxygen/search/classes_c.js new file mode 100644 index 0000000000..a87c20ce48 --- /dev/null +++ b/doxygen/search/classes_c.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['owning_5fview_0',['owning_view',['../classdr_1_1____detail_1_1owning__view.html',1,'dr::__detail']]] +]; diff --git a/doxygen/search/classes_d.js b/doxygen/search/classes_d.js new file mode 100644 index 0000000000..14f6619ec6 --- /dev/null +++ b/doxygen/search/classes_d.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['plus_5fop_0',['plus_op',['../structdr_1_1mp_1_1halo__impl_1_1plus__op.html',1,'dr::mp::halo_impl']]] +]; diff --git a/doxygen/search/classes_e.js b/doxygen/search/classes_e.js new file mode 100644 index 0000000000..5efe31c735 --- /dev/null +++ b/doxygen/search/classes_e.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['range_5fsize_0',['range_size',['../structdr_1_1mp_1_1views_1_1____detail_1_1range__size.html',1,'dr::mp::views::__detail']]], + ['range_5fsize_3c_20r_20_3e_1',['range_size< R >',['../structdr_1_1mp_1_1views_1_1____detail_1_1range__size_3_01R_01_4.html',1,'dr::mp::views::__detail']]], + ['rebind_2',['rebind',['../structdr_1_1sp_1_1device__allocator_1_1rebind.html',1,'dr::sp::device_allocator']]], + ['remote_5fsubrange_3',['remote_subrange',['../classdr_1_1remote__subrange.html',1,'dr']]], + ['rma_5fwindow_4',['rma_window',['../classdr_1_1rma__window.html',1,'dr']]] +]; diff --git a/doxygen/search/classes_f.js b/doxygen/search/classes_f.js new file mode 100644 index 0000000000..dc0e015c67 --- /dev/null +++ b/doxygen/search/classes_f.js @@ -0,0 +1,21 @@ +var searchData= +[ + ['second_5fop_0',['second_op',['../structdr_1_1mp_1_1halo__impl_1_1second__op.html',1,'dr::mp::halo_impl']]], + ['segment_5frange_1',['segment_range',['../classdr_1_1sp_1_1segment__range.html',1,'dr::sp']]], + ['segment_5frange_5faccessor_2',['segment_range_accessor',['../classdr_1_1sp_1_1segment__range__accessor.html',1,'dr::sp']]], + ['segmented_5fview_3',['segmented_view',['../classdr_1_1mp_1_1segmented__view.html',1,'dr::mp']]], + ['segmented_5fview_5fiterator_4',['segmented_view_iterator',['../classdr_1_1mp_1_1segmented__view__iterator.html',1,'dr::mp']]], + ['slice_5fadaptor_5fclosure_5',['slice_adaptor_closure',['../classdr_1_1sp_1_1views_1_1slice__adaptor__closure.html',1,'dr::sp::views']]], + ['sliding_5ffn_6',['sliding_fn',['../structdr_1_1mp_1_1views_1_1____detail_1_1sliding__fn.html',1,'dr::mp::views::__detail']]], + ['source_5flocation_7',['source_location',['../structnostd_1_1source__location.html',1,'nostd']]], + ['span_8',['span',['../classdr_1_1sp_1_1span.html',1,'dr::sp']]], + ['span_3c_20t_2c_20t_20_2a_20_3e_9',['span< T, T * >',['../classdr_1_1sp_1_1span.html',1,'dr::sp']]], + ['span_5fgroup_10',['span_group',['../classdr_1_1mp_1_1span__group.html',1,'dr::mp']]], + ['span_5fhalo_11',['span_halo',['../classdr_1_1mp_1_1span__halo.html',1,'dr::mp']]], + ['sparse_5fmatrix_12',['sparse_matrix',['../classdr_1_1sp_1_1sparse__matrix.html',1,'dr::sp']]], + ['submdspan_5fadapter_5fclosure_13',['submdspan_adapter_closure',['../classdr_1_1mp_1_1views_1_1submdspan__adapter__closure.html',1,'dr::mp::views']]], + ['submdspan_5ffn_5f_14',['submdspan_fn_',['../classdr_1_1mp_1_1views_1_1submdspan__fn__.html',1,'dr::mp::views']]], + ['submdspan_5fview_15',['submdspan_view',['../structdr_1_1mp_1_1submdspan__view.html',1,'dr::mp']]], + ['subrange_16',['subrange',['../classdr_1_1mp_1_1subrange.html',1,'dr::mp']]], + ['subrange_5fiterator_17',['subrange_iterator',['../classdr_1_1mp_1_1subrange__iterator.html',1,'dr::mp']]] +]; diff --git a/doxygen/search/close.svg b/doxygen/search/close.svg new file mode 100644 index 0000000000..a933eea1a2 --- /dev/null +++ b/doxygen/search/close.svg @@ -0,0 +1,31 @@ + + + + + + image/svg+xml + + + + + + + + diff --git a/doxygen/search/concepts_0.js b/doxygen/search/concepts_0.js new file mode 100644 index 0000000000..8a6a31af1c --- /dev/null +++ b/doxygen/search/concepts_0.js @@ -0,0 +1,38 @@ +var searchData= +[ + ['distributed_5fcontiguous_5fiterator_0',['distributed_contiguous_iterator',['../conceptdr_1_1distributed__contiguous__iterator.html',1,'dr']]], + ['distributed_5fcontiguous_5frange_1',['distributed_contiguous_range',['../conceptdr_1_1distributed__contiguous__range.html',1,'dr']]], + ['distributed_5fiterator_2',['distributed_iterator',['../conceptdr_1_1distributed__iterator.html',1,'dr']]], + ['distributed_5fmdspan_5frange_3',['distributed_mdspan_range',['../conceptdr_1_1distributed__mdspan__range.html',1,'dr']]], + ['distributed_5frange_4',['distributed_range',['../conceptdr_1_1distributed__range.html',1,'dr']]], + ['has_5fhalo_5fmethod_5',['has_halo_method',['../conceptdr_1_1mp_1_1has__halo__method.html',1,'dr::mp']]], + ['has_5flocal_6',['has_local',['../conceptdr_1_1ranges_1_1____detail_1_1has__local.html',1,'dr::ranges::__detail']]], + ['has_5flocal_5fadl_7',['has_local_adl',['../conceptdr_1_1ranges_1_1_0d14_1_1has__local__adl.html',1,'dr::ranges::@14']]], + ['has_5frank_5fadl_8',['has_rank_adl',['../conceptdr_1_1ranges_1_1_0d14_1_1has__rank__adl.html',1,'dr::ranges::@14']]], + ['has_5frank_5fmethod_9',['has_rank_method',['../conceptdr_1_1ranges_1_1_0d14_1_1has__rank__method.html',1,'dr::ranges::@14']]], + ['has_5fsegments_10',['has_segments',['../conceptdr_1_1mp_1_1has__segments.html',1,'dr::mp']]], + ['has_5fsegments_5fadl_11',['has_segments_adl',['../conceptdr_1_1ranges_1_1_0d14_1_1has__segments__adl.html',1,'dr::ranges::@14']]], + ['has_5fsegments_5fmethod_12',['has_segments_method',['../conceptdr_1_1_0d5_1_1has__segments__method.html',1,'dr::@5'],['../conceptdr_1_1ranges_1_1_0d14_1_1has__segments__method.html',1,'dr::ranges::@14']]], + ['is_5fdistributed_13',['is_distributed',['../conceptdr_1_1mp_1_1____detail_1_1is__distributed.html',1,'dr::mp::__detail']]], + ['is_5flocalizable_14',['is_localizable',['../conceptdr_1_1ranges_1_1_0d14_1_1is__localizable.html',1,'dr::ranges::@14']]], + ['is_5fmdspan_5fview_15',['is_mdspan_view',['../conceptdr_1_1mp_1_1is__mdspan__view.html',1,'dr::mp']]], + ['is_5fremote_5fiterator_5fshadow_5fimpl_5f_16',['is_remote_iterator_shadow_impl_',['../conceptdr_1_1ranges_1_1_0d14_1_1is__remote__iterator__shadow__impl__.html',1,'dr::ranges::@14']]], + ['is_5fsyclmemcopyable_17',['is_syclmemcopyable',['../conceptdr_1_1sp_1_1____detail_1_1is__syclmemcopyable.html',1,'dr::sp::__detail']]], + ['iter_5fhas_5flocal_5fmethod_18',['iter_has_local_method',['../conceptdr_1_1ranges_1_1_0d14_1_1iter__has__local__method.html',1,'dr::ranges::@14']]], + ['mdarray_5flike_19',['mdarray_like',['../conceptdr_1_1____detail_1_1mdarray__like.html',1,'dr::__detail']]], + ['mdspan_5flike_20',['mdspan_like',['../conceptdr_1_1____detail_1_1mdspan__like.html',1,'dr::__detail']]], + ['no_5fsegments_21',['no_segments',['../conceptdr_1_1mp_1_1no__segments.html',1,'dr::mp']]], + ['one_5fargument_22',['one_argument',['../conceptdr_1_1mp_1_1____detail_1_1one__argument.html',1,'dr::mp::__detail']]], + ['remote_5fcontiguous_5fiterator_23',['remote_contiguous_iterator',['../conceptdr_1_1remote__contiguous__iterator.html',1,'dr']]], + ['remote_5fcontiguous_5frange_24',['remote_contiguous_range',['../conceptdr_1_1remote__contiguous__range.html',1,'dr']]], + ['remote_5fiterator_25',['remote_iterator',['../conceptdr_1_1remote__iterator.html',1,'dr']]], + ['remote_5frange_26',['remote_range',['../conceptdr_1_1remote__range.html',1,'dr']]], + ['remote_5frange_5fshadow_5fimpl_5f_27',['remote_range_shadow_impl_',['../conceptdr_1_1ranges_1_1_0d14_1_1remote__range__shadow__impl__.html',1,'dr::ranges::@14']]], + ['segment_5fhas_5flocal_5fmethod_28',['segment_has_local_method',['../conceptdr_1_1ranges_1_1_0d14_1_1segment__has__local__method.html',1,'dr::ranges::@14']]], + ['segments_5frange_29',['segments_range',['../conceptdr_1_1ranges_1_1_0d14_1_1segments__range.html',1,'dr::ranges::@14']]], + ['sycl_5fdevice_5fselector_30',['sycl_device_selector',['../conceptdr_1_1sp_1_1____detail_1_1sycl__device__selector.html',1,'dr::sp::__detail']]], + ['tupleelementgettable_31',['TupleElementGettable',['../conceptdr_1_1_0d4_1_1TupleElementGettable.html',1,'dr::@4']]], + ['tuplelike_32',['TupleLike',['../conceptdr_1_1TupleLike.html',1,'dr']]], + ['two_5farguments_33',['two_arguments',['../conceptdr_1_1mp_1_1____detail_1_1two__arguments.html',1,'dr::mp::__detail']]], + ['zipable_34',['zipable',['../conceptdr_1_1mp_1_1____detail_1_1zipable.html',1,'dr::mp::__detail']]] +]; diff --git a/doxygen/search/functions_0.js b/doxygen/search/functions_0.js new file mode 100644 index 0000000000..f9e012ea7b --- /dev/null +++ b/doxygen/search/functions_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['begin_0',['begin',['../classdr_1_1mp_1_1distributed__vector.html#a7d99e72c2d282903d8d3c8c10a72d347',1,'dr::mp::distributed_vector']]] +]; diff --git a/doxygen/search/functions_1.js b/doxygen/search/functions_1.js new file mode 100644 index 0000000000..f9db84d3bf --- /dev/null +++ b/doxygen/search/functions_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['distributed_5fvector_0',['distributed_vector',['../classdr_1_1mp_1_1distributed__vector.html#ab92ce20fbb29588e0f68e073fecbfff8',1,'dr::mp::distributed_vector::distributed_vector(std::size_t size=0, distribution dist=distribution())'],['../classdr_1_1mp_1_1distributed__vector.html#a3b5aa7f2ec47c0ba482d19edd80166d7',1,'dr::mp::distributed_vector::distributed_vector(std::size_t size, value_type fill_value, distribution dist=distribution())']]] +]; diff --git a/doxygen/search/functions_2.js b/doxygen/search/functions_2.js new file mode 100644 index 0000000000..4577079043 --- /dev/null +++ b/doxygen/search/functions_2.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['end_0',['end',['../classdr_1_1mp_1_1distributed__vector.html#a3c00d38e1b8a9bf657fe51f53b9c1184',1,'dr::mp::distributed_vector']]], + ['exchange_5fbegin_1',['exchange_begin',['../classdr_1_1mp_1_1halo__impl.html#a494233caba6ea66bb8553bfa16e86662',1,'dr::mp::halo_impl']]], + ['exchange_5ffinalize_2',['exchange_finalize',['../classdr_1_1mp_1_1halo__impl.html#afdfab35f826a7591c82dcde73e6dee22',1,'dr::mp::halo_impl']]] +]; diff --git a/doxygen/search/functions_3.js b/doxygen/search/functions_3.js new file mode 100644 index 0000000000..c603219033 --- /dev/null +++ b/doxygen/search/functions_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['halo_5fimpl_0',['halo_impl',['../classdr_1_1mp_1_1halo__impl.html#ac2cb7a4821925599ff4405bd3c94e953',1,'dr::mp::halo_impl']]] +]; diff --git a/doxygen/search/functions_4.js b/doxygen/search/functions_4.js new file mode 100644 index 0000000000..8a7d34f519 --- /dev/null +++ b/doxygen/search/functions_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['index_5fgroup_0',['index_group',['../classdr_1_1mp_1_1index__group.html#a240920b56371d37fe7c79904faab4d23',1,'dr::mp::index_group']]] +]; diff --git a/doxygen/search/functions_5.js b/doxygen/search/functions_5.js new file mode 100644 index 0000000000..fe0cd03ac3 --- /dev/null +++ b/doxygen/search/functions_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['operator_5b_5d_0',['operator[]',['../classdr_1_1mp_1_1distributed__vector.html#a2ab3fddcdfedddc8258740f0b1eaa126',1,'dr::mp::distributed_vector']]] +]; diff --git a/doxygen/search/functions_6.js b/doxygen/search/functions_6.js new file mode 100644 index 0000000000..ca6e7059c3 --- /dev/null +++ b/doxygen/search/functions_6.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['reduce_5fbegin_0',['reduce_begin',['../classdr_1_1mp_1_1halo__impl.html#a3b2c11e0a016c768c65baf063f7ed8b5',1,'dr::mp::halo_impl']]], + ['reduce_5ffinalize_1',['reduce_finalize',['../classdr_1_1mp_1_1halo__impl.html#a16abfcd5cdbcfed8c8b81b19a77d4223',1,'dr::mp::halo_impl::reduce_finalize(const auto &op)'],['../classdr_1_1mp_1_1halo__impl.html#a3e5cec61ea29da0b960b906f686cea9a',1,'dr::mp::halo_impl::reduce_finalize()']]] +]; diff --git a/doxygen/search/functions_7.js b/doxygen/search/functions_7.js new file mode 100644 index 0000000000..92c0790ba9 --- /dev/null +++ b/doxygen/search/functions_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['size_0',['size',['../classdr_1_1mp_1_1distributed__vector.html#a080457af224429dbae0ccf586e2da206',1,'dr::mp::distributed_vector']]] +]; diff --git a/doxygen/search/functions_8.js b/doxygen/search/functions_8.js new file mode 100644 index 0000000000..5f2b0f9a0c --- /dev/null +++ b/doxygen/search/functions_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['unstructured_5fhalo_0',['unstructured_halo',['../classdr_1_1mp_1_1unstructured__halo.html#a34175a58141ffb9b5d97f6f7d4e68469',1,'dr::mp::unstructured_halo']]] +]; diff --git a/doxygen/search/mag.svg b/doxygen/search/mag.svg new file mode 100644 index 0000000000..9f46b301eb --- /dev/null +++ b/doxygen/search/mag.svg @@ -0,0 +1,37 @@ + + + + + + image/svg+xml + + + + + + + + + diff --git a/doxygen/search/mag_d.svg b/doxygen/search/mag_d.svg new file mode 100644 index 0000000000..b9a814c78d --- /dev/null +++ b/doxygen/search/mag_d.svg @@ -0,0 +1,37 @@ + + + + + + image/svg+xml + + + + + + + + + diff --git a/doxygen/search/mag_sel.svg b/doxygen/search/mag_sel.svg new file mode 100644 index 0000000000..03626f64a0 --- /dev/null +++ b/doxygen/search/mag_sel.svg @@ -0,0 +1,74 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/doxygen/search/mag_seld.svg b/doxygen/search/mag_seld.svg new file mode 100644 index 0000000000..6e720dcc91 --- /dev/null +++ b/doxygen/search/mag_seld.svg @@ -0,0 +1,74 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/doxygen/search/search.css b/doxygen/search/search.css new file mode 100644 index 0000000000..19f76f9d5b --- /dev/null +++ b/doxygen/search/search.css @@ -0,0 +1,291 @@ +/*---------------- Search Box positioning */ + +#main-menu > li:last-child { + /* This
  2. object is the parent of the search bar */ + display: flex; + justify-content: center; + align-items: center; + height: 36px; + margin-right: 1em; +} + +/*---------------- Search box styling */ + +.SRPage * { + font-weight: normal; + line-height: normal; +} + +dark-mode-toggle { + margin-left: 5px; + display: flex; + float: right; +} + +#MSearchBox { + display: inline-block; + white-space : nowrap; + background: var(--search-background-color); + border-radius: 0.65em; + box-shadow: var(--search-box-shadow); + z-index: 102; +} + +#MSearchBox .left { + display: inline-block; + vertical-align: middle; + height: 1.4em; +} + +#MSearchSelect { + display: inline-block; + vertical-align: middle; + width: 20px; + height: 19px; + background-image: var(--search-magnification-select-image); + margin: 0 0 0 0.3em; + padding: 0; +} + +#MSearchSelectExt { + display: inline-block; + vertical-align: middle; + width: 10px; + height: 19px; + background-image: var(--search-magnification-image); + margin: 0 0 0 0.5em; + padding: 0; +} + + +#MSearchField { + display: inline-block; + vertical-align: middle; + width: 7.5em; + height: 19px; + margin: 0 0.15em; + padding: 0; + line-height: 1em; + border:none; + color: var(--search-foreground-color); + outline: none; + font-family: var(--font-family-search); + -webkit-border-radius: 0px; + border-radius: 0px; + background: none; +} + +@media(hover: none) { + /* to avoid zooming on iOS */ + #MSearchField { + font-size: 16px; + } +} + +#MSearchBox .right { + display: inline-block; + vertical-align: middle; + width: 1.4em; + height: 1.4em; +} + +#MSearchClose { + display: none; + font-size: inherit; + background : none; + border: none; + margin: 0; + padding: 0; + outline: none; + +} + +#MSearchCloseImg { + padding: 0.3em; + margin: 0; +} + +.MSearchBoxActive #MSearchField { + color: var(--search-active-color); +} + + + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid var(--search-filter-border-color); + background-color: var(--search-filter-background-color); + z-index: 10001; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt var(--font-family-search); + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: var(--font-family-monospace); + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: var(--search-filter-foreground-color); + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: var(--search-filter-foreground-color); + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: var(--search-filter-highlight-text-color); + background-color: var(--search-filter-highlight-bg-color); + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + /*width: 60ex;*/ + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid var(--search-results-border-color); + background-color: var(--search-results-background-color); + z-index:10000; + width: 300px; + height: 400px; + overflow: auto; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +div.SRPage { + margin: 5px 2px; + background-color: var(--search-results-background-color); +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: var(--search-results-foreground-color); + font-family: var(--font-family-search); + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: var(--search-results-foreground-color); + font-family: var(--font-family-search); + font-size: 8pt; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; + font-family: var(--font-family-search); +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; + font-family: var(--font-family-search); +} + +.SRResult { + display: none; +} + +div.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: var(--nav-gradient-active-image-parent); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/doxygen/search/search.js b/doxygen/search/search.js new file mode 100644 index 0000000000..e103a26217 --- /dev/null +++ b/doxygen/search/search.js @@ -0,0 +1,816 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function convertToId(search) +{ + var result = ''; + for (i=0;i do a search + { + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) // Up + { + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } + else if (e.keyCode==13 || e.keyCode==27) + { + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() + { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() + { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() + { + this.keyTimeout = 0; + + // strip leading whitespace + var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + var code = searchValue.toLowerCase().charCodeAt(0); + var idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair + { + idxChar = searchValue.substr(0, 2); + } + + var jsFile; + + var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) + { + var hexCode=idx.toString(16); + jsFile = this.resultsPath + indexSectionNames[this.searchIndex] + '_' + hexCode + '.js'; + } + + var loadJS = function(url, impl, loc){ + var scriptTag = document.createElement('script'); + scriptTag.src = url; + scriptTag.onload = impl; + scriptTag.onreadystatechange = impl; + loc.appendChild(scriptTag); + } + + var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + var domSearchBox = this.DOMSearchBox(); + var domPopupSearchResults = this.DOMPopupSearchResults(); + var domSearchClose = this.DOMSearchClose(); + var resultsPath = this.resultsPath; + + var handleResults = function() { + document.getElementById("Loading").style.display="none"; + if (typeof searchData !== 'undefined') { + createResults(resultsPath); + document.getElementById("NoMatches").style.display="none"; + } + + searchResults.Search(searchValue); + + if (domPopupSearchResultsWindow.style.display!='block') + { + domSearchClose.style.display = 'inline-block'; + var left = getXPos(domSearchBox) + 150; + var top = getYPos(domSearchBox) + 20; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + var maxWidth = document.body.clientWidth; + var maxHeight = document.body.clientHeight; + var width = 300; + if (left<10) left=10; + if (width+left+8>maxWidth) width=maxWidth-left-8; + var height = 400; + if (height+top+8>maxHeight) height=maxHeight-top-8; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResultsWindow.style.height = height + 'px'; + } + } + + if (jsFile) { + loadJS(jsFile, handleResults, this.DOMPopupSearchResultsWindow()); + } else { + handleResults(); + } + + this.lastSearchValue = searchValue; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) + { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) + { + this.DOMSearchBox().className = 'MSearchBoxActive'; + this.searchActive = true; + } + else if (!isActive) // directly remove the panel + { + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + this.DOMSearchField().value = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults(name) +{ + // The number of matches from the last run of . + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) + { + var parentElement = document.getElementById(id); + var element = parentElement.firstChild; + + while (element && element!=parentElement) + { + if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') + { + return element; + } + + if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes()) + { + element = element.firstChild; + } + else if (element.nextSibling) + { + element = element.nextSibling; + } + else + { + do + { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) + { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) + { + var element = this.FindChildElement(id); + if (element) + { + if (element.style.display == 'block') + { + element.style.display = 'none'; + } + else + { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) + { + if (!search) // get search word from URL + { + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + var resultRows = document.getElementsByTagName("div"); + var matches = 0; + + var i = 0; + while (i < resultRows.length) + { + var row = resultRows.item(i); + if (row.className == "SRResult") + { + var rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) + { + row.style.display = 'block'; + matches++; + } + else + { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) // no results + { + document.getElementById("NoMatches").style.display='block'; + } + else // at least one result + { + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) + { + if (e.type == "keydown") + { + this.repeatOn = false; + this.lastKey = e.keyCode; + } + else if (e.type == "keypress") + { + if (!this.repeatOn) + { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } + else if (e.type == "keyup") + { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + var newIndex = itemIndex-1; + var focusItem = this.NavPrev(newIndex); + if (focusItem) + { + var child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') // children visible + { + var n=0; + var tmpElem; + while (1) // search for last child + { + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) + { + focusItem = tmpElem; + } + else // found it! + { + break; + } + n++; + } + } + } + if (focusItem) + { + focusItem.focus(); + } + else // return focus to search field + { + document.getElementById("MSearchField").focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = itemIndex+1; + var focusItem; + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') // children visible + { + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } + else if (this.lastKey==39) // Right + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } + else if (this.lastKey==37) // Left + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } + else if (this.lastKey==27) // Escape + { + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + if (childIndex>0) + { + var newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } + else // already at first child, jump to parent + { + document.getElementById('Item'+itemIndex).focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = childIndex+1; + var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) // last child, jump to parent next parent + { + elem = this.NavNext(itemIndex+1); + } + if (elem) + { + elem.focus(); + } + } + else if (this.lastKey==27) // Escape + { + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } +} + +function setKeyActions(elem,action) +{ + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); +} + +function setClassAttr(elem,attr) +{ + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); +} + +function createResults(resultsPath) +{ + var results = document.getElementById("SRResults"); + results.innerHTML = ''; + for (var e=0; e + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/containers/segment.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    segment.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7namespace dr::mp {
    +
    8
    +
    9template <typename DV> class dv_segment_iterator;
    +
    10
    +
    11template <typename DV> class dv_segment_reference {
    + +
    13
    +
    14public:
    +
    15 using value_type = typename DV::value_type;
    +
    16
    +
    17 dv_segment_reference(const iterator it) : iterator_(it) {}
    +
    18
    +
    19 operator value_type() const { return iterator_.get(); }
    +
    20 auto operator=(const value_type &value) const {
    +
    21 iterator_.put(value);
    +
    22 return *this;
    +
    23 }
    +
    24 auto operator=(const dv_segment_reference &other) const {
    +
    25 *this = value_type(other);
    +
    26 return *this;
    +
    27 }
    +
    28 auto operator&() const { return iterator_; }
    +
    29
    +
    30private:
    +
    31 const iterator iterator_;
    +
    32}; // dv_segment_reference
    +
    33
    +
    34template <typename DV> class dv_segment_iterator {
    +
    35public:
    +
    36 using value_type = typename DV::value_type;
    +
    37 using size_type = typename DV::size_type;
    +
    38 using difference_type = typename DV::difference_type;
    +
    39
    +
    40 dv_segment_iterator() = default;
    +
    41 dv_segment_iterator(DV *dv, std::size_t segment_index, std::size_t index) {
    +
    42 dv_ = dv;
    +
    43 segment_index_ = segment_index;
    +
    44 index_ = index;
    +
    45 }
    +
    46
    +
    47 auto operator<=>(const dv_segment_iterator &other) const noexcept {
    +
    48 // assertion below checks against compare dereferenceable iterator to a
    +
    49 // singular iterator and against attempt to compare iterators from different
    +
    50 // sequences like _Safe_iterator<gnu_cxx::normal_iterator> does
    +
    51 assert(dv_ == other.dv_);
    +
    52 return segment_index_ == other.segment_index_
    +
    53 ? index_ <=> other.index_
    +
    54 : segment_index_ <=> other.segment_index_;
    +
    55 }
    +
    56
    +
    57 // Comparison
    +
    58 bool operator==(const dv_segment_iterator &other) const noexcept {
    +
    59 return (*this <=> other) == 0;
    +
    60 }
    +
    61
    +
    62 // Only this arithmetic manipulate internal state
    +
    63 auto &operator+=(difference_type n) {
    +
    64 assert(dv_ != nullptr);
    +
    65 assert(n >= 0 || static_cast<difference_type>(index_) >= -n);
    +
    66 index_ += n;
    +
    67 return *this;
    +
    68 }
    +
    69
    +
    70 auto &operator-=(difference_type n) { return *this += (-n); }
    +
    71
    +
    72 difference_type operator-(const dv_segment_iterator &other) const noexcept {
    +
    73 assert(dv_ != nullptr && dv_ == other.dv_);
    +
    74 assert(index_ >= other.index_);
    +
    75 return index_ - other.index_;
    +
    76 }
    +
    77
    +
    78 // prefix
    +
    79 auto &operator++() {
    +
    80 *this += 1;
    +
    81 return *this;
    +
    82 }
    +
    83 auto &operator--() {
    +
    84 *this -= 1;
    +
    85 return *this;
    +
    86 }
    +
    87
    +
    88 // postfix
    +
    89 auto operator++(int) {
    +
    90 auto prev = *this;
    +
    91 *this += 1;
    +
    92 return prev;
    +
    93 }
    +
    94 auto operator--(int) {
    +
    95 auto prev = *this;
    +
    96 *this -= 1;
    +
    97 return prev;
    +
    98 }
    +
    99
    +
    100 auto operator+(difference_type n) const {
    +
    101 auto p = *this;
    +
    102 p += n;
    +
    103 return p;
    +
    104 }
    +
    105 auto operator-(difference_type n) const {
    +
    106 auto p = *this;
    +
    107 p -= n;
    +
    108 return p;
    +
    109 }
    +
    110
    +
    111 // When *this is not first in the expression
    +
    112 friend auto operator+(difference_type n, const dv_segment_iterator &other) {
    +
    113 return other + n;
    +
    114 }
    +
    115
    +
    116 // dereference
    +
    117 auto operator*() const {
    +
    118 assert(dv_ != nullptr);
    +
    119 return dv_segment_reference<DV>{*this};
    +
    120 }
    +
    121 auto operator[](difference_type n) const {
    +
    122 assert(dv_ != nullptr);
    +
    123 return *(*this + n);
    +
    124 }
    +
    125
    +
    126 void get(value_type *dst, std::size_t size) const {
    +
    127 assert(dv_ != nullptr);
    +
    128 assert(segment_index_ * dv_->segment_size_ + index_ < dv_->size());
    +
    129 auto segment_offset = index_ + dv_->distribution_.halo().prev;
    +
    130 dv_->backend.getmem(dst, segment_offset * sizeof(value_type),
    +
    131 size * sizeof(value_type), segment_index_);
    +
    132 }
    +
    133
    +
    134 value_type get() const {
    +
    135 value_type val;
    +
    136 get(&val, 1);
    +
    137 return val;
    +
    138 }
    +
    139
    +
    140 void put(const value_type *dst, std::size_t size) const {
    +
    141 assert(dv_ != nullptr);
    +
    142 assert(segment_index_ * dv_->segment_size_ + index_ < dv_->size());
    +
    143 auto segment_offset = index_ + dv_->distribution_.halo().prev;
    +
    144 dr::drlog.debug("dv put:: ({}:{}:{})\n", segment_index_, segment_offset,
    +
    145 size);
    +
    146 dv_->backend.putmem(dst, segment_offset * sizeof(value_type),
    +
    147 size * sizeof(value_type), segment_index_);
    +
    148 }
    +
    149
    +
    150 void put(const value_type &value) const { put(&value, 1); }
    +
    151
    +
    152 auto rank() const {
    +
    153 assert(dv_ != nullptr);
    +
    154 return segment_index_;
    +
    155 }
    +
    156
    +
    157 auto local() const {
    +
    158#ifndef SYCL_LANGUAGE_VERSION
    +
    159 assert(dv_ != nullptr);
    +
    160#endif
    +
    161 const auto my_process_segment_index = dv_->backend.getrank();
    +
    162
    +
    163 if (my_process_segment_index == segment_index_)
    +
    164 return dv_->data_ + index_ + dv_->distribution_.halo().prev;
    +
    165#ifndef SYCL_LANGUAGE_VERSION
    +
    166 assert(!dv_->distribution_.halo().periodic); // not implemented
    +
    167#endif
    +
    168 // sliding view needs local iterators that point to the halo
    +
    169 if (my_process_segment_index + 1 == segment_index_) {
    +
    170#ifndef SYCL_LANGUAGE_VERSION
    +
    171 assert(index_ <= dv_->distribution_.halo()
    +
    172 .next); // <= instead of < to cover end() case
    +
    173#endif
    +
    174 return dv_->data_ + dv_->distribution_.halo().prev + index_ +
    +
    175 dv_->segment_size_;
    +
    176 }
    +
    177
    +
    178 if (my_process_segment_index == segment_index_ + 1) {
    +
    179#ifndef SYCL_LANGUAGE_VERSION
    +
    180 assert(dv_->segment_size_ - index_ <= dv_->distribution_.halo().prev);
    +
    181#endif
    +
    182 return dv_->data_ + dv_->distribution_.halo().prev + index_ -
    +
    183 dv_->segment_size_;
    +
    184 }
    +
    185
    +
    186#ifndef SYCL_LANGUAGE_VERSION
    +
    187 assert(false); // trying to read non-owned memory
    +
    188#endif
    +
    189 return static_cast<decltype(dv_->data_)>(nullptr);
    +
    190 }
    +
    191
    +
    192 auto segments() const {
    +
    193 assert(dv_ != nullptr);
    +
    194 return dr::__detail::drop_segments(dv_->segments(), segment_index_, index_);
    +
    195 }
    +
    196
    +
    197 auto &halo() const {
    +
    198 assert(dv_ != nullptr);
    +
    199 return dv_->halo();
    +
    200 }
    +
    201 auto halo_bounds() const {
    +
    202 assert(dv_ != nullptr);
    +
    203 return dv_->distribution_.halo();
    +
    204 }
    +
    205
    +
    206private:
    +
    207 // all fields need to be initialized by default ctor so every default
    +
    208 // constructed iter is equal to any other default constructed iter
    +
    209 DV *dv_ = nullptr;
    +
    210 std::size_t segment_index_ = 0;
    +
    211 std::size_t index_ = 0;
    +
    212}; // dv_segment_iterator
    +
    213
    +
    214template <typename DV> class dv_segment {
    +
    215private:
    + +
    217
    +
    218public:
    +
    219 using difference_type = std::ptrdiff_t;
    +
    220 dv_segment() = default;
    +
    221 dv_segment(DV *dv, std::size_t segment_index, std::size_t size,
    +
    222 std::size_t reserved) {
    +
    223 dv_ = dv;
    +
    224 segment_index_ = segment_index;
    +
    225 size_ = size;
    +
    226 reserved_ = reserved;
    +
    227 assert(dv_ != nullptr);
    +
    228 }
    +
    229
    +
    230 auto size() const {
    +
    231 assert(dv_ != nullptr);
    +
    232 return size_;
    +
    233 }
    +
    234
    +
    235 auto begin() const { return iterator(dv_, segment_index_, 0); }
    +
    236 auto end() const { return begin() + size(); }
    +
    237 auto reserved() const { return reserved_; }
    +
    238
    +
    239 auto operator[](difference_type n) const { return *(begin() + n); }
    +
    240
    +
    241 bool is_local() const { return segment_index_ == default_comm().rank(); }
    +
    242
    +
    243private:
    +
    244 DV *dv_ = nullptr;
    +
    245 std::size_t segment_index_;
    +
    246 std::size_t size_;
    +
    247 std::size_t reserved_;
    +
    248}; // dv_segment
    +
    249
    +
    250//
    +
    251// Many views preserve the distributed_vector segments iterator, which
    +
    252// can supply halo
    +
    253//
    +
    254template <typename DR>
    +
    255concept has_halo_method = dr::distributed_range<DR> && requires(DR &&dr) {
    +
    256 { rng::begin(dr::ranges::segments(dr)[0]).halo() };
    +
    257};
    +
    258
    +
    259auto &halo(has_halo_method auto &&dr) {
    +
    260 return rng::begin(dr::ranges::segments(dr)[0]).halo();
    +
    261}
    +
    262
    +
    263} // namespace dr::mp
    +
    Definition: index.hpp:34
    +
    Definition: segment.hpp:34
    +
    Definition: segment.hpp:11
    +
    Definition: segment.hpp:214
    +
    Definition: concepts.hpp:20
    +
    Definition: segment.hpp:255
    +
    Definition: halo.hpp:362
    +
    + + + + diff --git a/doxygen/segmented_8hpp_source.html b/doxygen/segmented_8hpp_source.html new file mode 100644 index 0000000000..c0ecd57f43 --- /dev/null +++ b/doxygen/segmented_8hpp_source.html @@ -0,0 +1,182 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/views/segmented.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    segmented.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <dr/detail/remote_subrange.hpp>
    +
    8
    +
    9namespace dr::mp {
    +
    10
    +
    11template <typename BaseIter, typename SegTplIter, typename SegTplSentinel>
    + +
    13public:
    +
    14 using iterator_category = std::forward_iterator_tag;
    +
    15 using difference_type = rng::iter_difference_t<SegTplIter>;
    + +
    17
    + +
    19 segmented_view_iterator(BaseIter base_begin, SegTplIter tpl_begin,
    +
    20 SegTplSentinel tpl_end)
    +
    21 : base_cur_(base_begin), tpl_cur_(tpl_begin), tpl_end_(tpl_end) {}
    +
    22
    +
    23 auto operator==(segmented_view_iterator other) const {
    +
    24 return tpl_cur_ == other.tpl_cur_;
    +
    25 }
    +
    26 auto &operator++() {
    +
    27 base_cur_ += rng::size(*tpl_cur_);
    +
    28 tpl_cur_++;
    +
    29 return *this;
    +
    30 }
    +
    31 auto operator++(int) {
    +
    32 auto iter(*this);
    +
    33 base_cur_ += rng::size(*tpl_cur_);
    +
    34 tpl_cur_++;
    +
    35 return iter;
    +
    36 }
    +
    37 auto operator*() const {
    +
    38 return dr::remote_subrange(base_cur_, base_cur_ + rng::size(*tpl_cur_),
    +
    39 dr::ranges::rank(*tpl_cur_));
    +
    40 }
    +
    41
    +
    42private:
    +
    43 BaseIter base_cur_;
    +
    44 SegTplIter tpl_cur_;
    +
    45 SegTplSentinel tpl_end_;
    +
    46};
    +
    47
    +
    48//
    +
    49// Some distributed algorithms need an iota_view as an operand. An
    +
    50// iota_view does not depend on external data and can be segmented as
    +
    51// needed. The segmented_view creates segments for a range using the
    +
    52// segments of another range. It can be used to create segments for an
    +
    53// iota_view, using the segments of a distributed_range.
    +
    54//
    +
    55// It should be usable if you have a range that is local and
    +
    56// replicated across all processes, but that is not tested.
    +
    57//
    +
    58template <rng::random_access_range R, rng::common_range SegTpl>
    +
    59class segmented_view : public rng::view_interface<segmented_view<R, SegTpl>> {
    +
    60public:
    +
    61 template <typename V1, typename V2>
    +
    62 segmented_view(V1 &&r, V2 &&tpl)
    +
    63 : base_(rng::views::all(std::forward<V1>(r))),
    +
    64 segments_tpl_(rng::views::all(std::forward<V2>(tpl))) {}
    +
    65
    +
    66 auto begin() const {
    +
    67 return segmented_view_iterator(rng::begin(base_), rng::begin(segments_tpl_),
    +
    68 rng::end(segments_tpl_));
    +
    69 }
    +
    70 auto end() const {
    +
    71 return segmented_view_iterator(rng::begin(base_), rng::end(segments_tpl_),
    +
    72 rng::end(segments_tpl_));
    +
    73 }
    +
    74
    +
    75 auto size() const { return rng::size(segments_tpl_); }
    +
    76
    +
    77private:
    +
    78 rng::views::all_t<R> base_;
    +
    79 rng::views::all_t<SegTpl> segments_tpl_;
    +
    80};
    +
    81
    +
    82template <typename R, typename Seg>
    +
    83segmented_view(R &&r, Seg &&seg)
    +
    84 -> segmented_view<rng::views::all_t<R>, rng::views::all_t<Seg>>;
    +
    85
    +
    86namespace views {
    +
    87
    +
    89template <typename R, typename Seg> auto segmented(R &&r, Seg &&seg) {
    +
    90 return segmented_view(std::forward<R>(r), std::forward<Seg>(seg));
    +
    91}
    +
    92
    +
    93} // namespace views
    +
    94
    +
    95} // namespace dr::mp
    +
    Definition: segmented.hpp:12
    +
    Definition: segmented.hpp:59
    +
    Definition: remote_subrange.hpp:15
    +
    + + + + diff --git a/doxygen/segments__tools_8hpp_source.html b/doxygen/segments__tools_8hpp_source.html new file mode 100644 index 0000000000..50f0258091 --- /dev/null +++ b/doxygen/segments__tools_8hpp_source.html @@ -0,0 +1,228 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/detail/segments_tools.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    segments_tools.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <dr/concepts/concepts.hpp>
    +
    8#include <dr/detail/enumerate.hpp>
    +
    9#include <dr/detail/ranges_shim.hpp>
    +
    10#include <dr/detail/remote_subrange.hpp>
    +
    11#include <dr/detail/view_detectors.hpp>
    +
    12
    +
    13namespace dr {
    +
    14
    +
    15namespace __detail {
    +
    16
    +
    17// Take all elements up to and including segment `segment_id` at index
    +
    18// `local_id`
    +
    19template <typename R>
    +
    20auto take_segments(R &&segments, std::size_t last_seg, std::size_t local_id) {
    +
    21 auto remainder = local_id;
    +
    22
    +
    23 auto take_partial = [=](auto &&v) {
    +
    24 auto &&[i, segment] = v;
    +
    25 if (i == last_seg) {
    +
    26 auto first = rng::begin(segment);
    +
    27 auto last = rng::begin(segment);
    +
    28 rng::advance(last, remainder);
    +
    29 return dr::remote_subrange(first, last, dr::ranges::rank(segment));
    +
    30 } else {
    +
    31 return dr::remote_subrange(segment);
    +
    32 }
    +
    33 };
    +
    34
    +
    35 return enumerate(segments) | rng::views::take(last_seg + 1) |
    +
    36 rng::views::transform(std::move(take_partial));
    +
    37}
    +
    38
    +
    39// Take the first n elements
    +
    40template <typename R> auto take_segments(R &&segments, std::size_t n) {
    +
    41 std::size_t last_seg = 0;
    +
    42 std::size_t remainder = n;
    +
    43
    +
    44 for (auto &&seg : segments) {
    +
    45 if (seg.size() >= remainder) {
    +
    46 break;
    +
    47 }
    +
    48 remainder -= seg.size();
    +
    49 last_seg++;
    +
    50 }
    +
    51
    +
    52 return take_segments(std::forward<R>(segments), last_seg, remainder);
    +
    53}
    +
    54
    +
    55// Drop all elements up to segment `segment_id` and index `local_id`
    +
    56template <typename R>
    +
    57auto drop_segments(R &&segments, std::size_t first_seg, std::size_t local_id) {
    +
    58 auto remainder = local_id;
    +
    59
    +
    60 auto drop_partial = [=](auto &&v) {
    +
    61 auto &&[i, segment] = v;
    +
    62 if (i == first_seg) {
    +
    63 auto first = rng::begin(segment);
    +
    64 rng::advance(first, remainder);
    +
    65 auto last = rng::end(segment);
    +
    66 return dr::remote_subrange(first, last, dr::ranges::rank(segment));
    +
    67 } else {
    +
    68 return dr::remote_subrange(segment);
    +
    69 }
    +
    70 };
    +
    71
    +
    72 return enumerate(segments) | rng::views::drop(first_seg) |
    +
    73 rng::views::transform(std::move(drop_partial));
    +
    74}
    +
    75
    +
    76// Drop the first n elements
    +
    77template <typename R> auto drop_segments(R &&segments, std::size_t n) {
    +
    78 std::size_t first_seg = 0;
    +
    79 std::size_t remainder = n;
    +
    80
    +
    81 for (auto &&seg : segments) {
    +
    82 if (seg.size() > remainder) {
    +
    83 break;
    +
    84 }
    +
    85 remainder -= seg.size();
    +
    86 first_seg++;
    +
    87 }
    +
    88
    +
    89 return drop_segments(std::forward<R>(segments), first_seg, remainder);
    +
    90}
    +
    91
    +
    92} // namespace __detail
    +
    93
    +
    94} // namespace dr
    +
    95
    +
    96namespace DR_RANGES_NAMESPACE {
    +
    97
    +
    98// A standard library range adaptor does not change the rank of a
    +
    99// remote range, so we can simply return the rank of the base view.
    +
    100template <rng::range V>
    + +
    102auto rank_(V &&v) {
    +
    103 return dr::ranges::rank(std::forward<V>(v).base());
    +
    104}
    +
    105
    +
    106template <rng::range V>
    +
    107 requires(dr::is_ref_view_v<std::remove_cvref_t<V>> &&
    + +
    109auto segments_(V &&v) {
    +
    110 return dr::ranges::segments(v.base());
    +
    111}
    +
    112
    +
    113template <rng::range V>
    +
    114 requires(dr::is_take_view_v<std::remove_cvref_t<V>> &&
    + +
    116auto segments_(V &&v) {
    +
    117 return dr::__detail::take_segments(dr::ranges::segments(v.base()), v.size());
    +
    118}
    +
    119
    +
    120template <rng::range V>
    +
    121 requires(dr::is_drop_view_v<std::remove_cvref_t<V>> &&
    + +
    123auto segments_(V &&v) {
    +
    124 return dr::__detail::drop_segments(dr::ranges::segments(v.base()),
    +
    125 v.base().size() - v.size());
    +
    126}
    +
    127
    +
    128template <rng::range V>
    +
    129 requires(dr::is_subrange_view_v<std::remove_cvref_t<V>> &&
    + +
    131auto segments_(V &&v) {
    +
    132 auto first = rng::begin(v);
    +
    133 auto last = rng::end(v);
    +
    134 auto size = rng::distance(first, last);
    +
    135
    +
    136 return dr::__detail::take_segments(dr::ranges::segments(first), size);
    +
    137}
    +
    138
    +
    139} // namespace DR_RANGES_NAMESPACE
    +
    Definition: remote_subrange.hpp:15
    +
    Definition: concepts.hpp:31
    +
    Definition: concepts.hpp:20
    +
    Definition: concepts.hpp:16
    +
    + + + + diff --git a/doxygen/sliding_8hpp_source.html b/doxygen/sliding_8hpp_source.html new file mode 100644 index 0000000000..01c2af65ff --- /dev/null +++ b/doxygen/sliding_8hpp_source.html @@ -0,0 +1,148 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/views/sliding.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    sliding.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <dr/detail/ranges.hpp>
    +
    8#include <dr/detail/segments_tools.hpp>
    +
    9#include <dr/mp/views/segmented.hpp>
    +
    10
    +
    11namespace dr::mp {
    +
    12namespace views {
    +
    13namespace __detail {
    +
    14
    +
    15struct sliding_fn {
    +
    16
    +
    17 // one can not use local algorithms if n is not equal to halo_bounds.prev + 1
    +
    18 // + halo_bounds.next
    +
    19 template <typename Rng, typename Int>
    +
    20 requires rng::viewable_range<Rng> && rng::forward_range<Rng> &&
    +
    21 rng::detail::integer_like_<Int>
    +
    22 auto operator()(Rng &&r, Int n) const {
    +
    23 return rng::views::sliding(static_cast<Rng &&>(r), n);
    +
    24 }
    +
    25};
    +
    26
    +
    27} // namespace __detail
    +
    28
    +
    29inline constexpr __detail::sliding_fn sliding{};
    +
    30
    +
    31} // namespace views
    +
    32} // namespace dr::mp
    +
    33
    +
    34namespace DR_RANGES_NAMESPACE {
    +
    35
    +
    36template <rng::range V>
    +
    37 requires(dr::is_sliding_view_v<V>)
    +
    38auto segments_(V &&v) {
    +
    39
    +
    40 auto base_segments = dr::ranges::segments(v.base());
    +
    41 auto elements_to_skip_in_base = rng::size(v.base());
    +
    42 auto elements_to_take = 0;
    +
    43 if (!rng::empty(v)) {
    +
    44 // need to reverse engineer `n` which was passed to sliding_view
    +
    45 elements_to_take = rng::size(v);
    +
    46 const auto slide_size = elements_to_skip_in_base - elements_to_take + 1;
    +
    47 // TODO: this code assumes that halo is symmetric, thus odd (center + 2n)
    +
    48 // note, it is not an assertion preventing all wrong use cases
    +
    49 // other ones are caught by assert during attempt to read outside halo
    +
    50 assert(slide_size % 2 == 1);
    +
    51 elements_to_skip_in_base = slide_size / 2;
    +
    52 }
    +
    53
    +
    54 return dr::mp::views::segmented(
    +
    55 v,
    +
    56 dr::__detail::take_segments(
    +
    57 dr::__detail::drop_segments(base_segments, elements_to_skip_in_base),
    +
    58 elements_to_take));
    +
    59}
    +
    60
    +
    61// TODO: add support for dr::mp::halo(dr::mp::views::sliding(r)).exchange()
    +
    62} // namespace DR_RANGES_NAMESPACE
    +
    Definition: sliding.hpp:15
    +
    + + + + diff --git a/doxygen/source__location_8hpp_source.html b/doxygen/source__location_8hpp_source.html new file mode 100644 index 0000000000..6a9bf19c43 --- /dev/null +++ b/doxygen/source__location_8hpp_source.html @@ -0,0 +1,151 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/vendor/source_location/source_location.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    source_location.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#ifndef NOSTD_SOURCE_LOCATION_HPP
    +
    6#define NOSTD_SOURCE_LOCATION_HPP
    +
    7
    +
    8#pragma once
    +
    9
    +
    10#include <cstdint>
    +
    11
    +
    12namespace nostd {
    + +
    14public:
    +
    15#if not defined(__apple_build_version__) and defined(__clang__) and \
    +
    16 (__clang_major__ >= 9)
    +
    17 static constexpr source_location
    +
    18 current(const char *fileName = __builtin_FILE(),
    +
    19 const char *functionName = __builtin_FUNCTION(),
    +
    20 const uint_least32_t lineNumber = __builtin_LINE(),
    +
    21 const uint_least32_t columnOffset = __builtin_COLUMN()) noexcept
    +
    22#elif defined(__GNUC__) and \
    +
    23 (__GNUC__ > 4 or (__GNUC__ == 4 and __GNUC_MINOR__ >= 8))
    +
    24 static constexpr source_location
    +
    25 current(const char *fileName = __builtin_FILE(),
    +
    26 const char *functionName = __builtin_FUNCTION(),
    +
    27 const uint_least32_t lineNumber = __builtin_LINE(),
    +
    28 const uint_least32_t columnOffset = 0) noexcept
    +
    29#else
    +
    30 static constexpr source_location
    +
    31 current(const char *fileName = "unsupported",
    +
    32 const char *functionName = "unsupported",
    +
    33 const uint_least32_t lineNumber = 0,
    +
    34 const uint_least32_t columnOffset = 0) noexcept
    +
    35#endif
    +
    36 {
    +
    37 return source_location(fileName, functionName, lineNumber, columnOffset);
    +
    38 }
    +
    39
    +
    40 source_location(const source_location &) = default;
    +
    41 source_location(source_location &&) = default;
    +
    42
    +
    43 constexpr const char *file_name() const noexcept { return fileName; }
    +
    44
    +
    45 constexpr const char *function_name() const noexcept { return functionName; }
    +
    46
    +
    47 constexpr uint_least32_t line() const noexcept { return lineNumber; }
    +
    48
    +
    49 constexpr std::uint_least32_t column() const noexcept { return columnOffset; }
    +
    50
    +
    51private:
    +
    52 constexpr source_location(const char *fileName, const char *functionName,
    +
    53 const uint_least32_t lineNumber,
    +
    54 const uint_least32_t columnOffset) noexcept
    +
    55 : fileName(fileName), functionName(functionName), lineNumber(lineNumber),
    +
    56 columnOffset(columnOffset) {}
    +
    57
    +
    58 const char *fileName;
    +
    59 const char *functionName;
    +
    60 const std::uint_least32_t lineNumber;
    +
    61 const std::uint_least32_t columnOffset;
    +
    62};
    +
    63} // namespace nostd
    +
    64
    +
    65#endif
    +
    Definition: source_location.hpp:13
    +
    + + + + diff --git a/doxygen/sp_2algorithms_2copy_8hpp_source.html b/doxygen/sp_2algorithms_2copy_8hpp_source.html new file mode 100644 index 0000000000..bc33514551 --- /dev/null +++ b/doxygen/sp_2algorithms_2copy_8hpp_source.html @@ -0,0 +1,314 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/algorithms/copy.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    copy.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <memory>
    +
    8#include <type_traits>
    +
    9
    +
    10#include <sycl/sycl.hpp>
    +
    11
    +
    12#include <dr/concepts/concepts.hpp>
    +
    13#include <dr/detail/segments_tools.hpp>
    +
    14#include <dr/sp/detail.hpp>
    +
    15#include <dr/sp/device_ptr.hpp>
    +
    16#include <dr/sp/util.hpp>
    +
    17
    +
    18namespace dr::sp {
    +
    19
    +
    20// Copy between contiguous ranges
    +
    21template <std::contiguous_iterator InputIt, std::contiguous_iterator OutputIt>
    +
    22 requires __detail::is_syclmemcopyable<std::iter_value_t<InputIt>,
    +
    23 std::iter_value_t<OutputIt>>
    +
    24sycl::event copy_async(InputIt first, InputIt last, OutputIt d_first) {
    +
    25 // auto &&q = dr::sp::__detail::default_queue();
    +
    26 auto &&q = __detail::get_queue_for_pointers(first, d_first);
    +
    27 return q.memcpy(std::to_address(d_first), std::to_address(first),
    +
    28 sizeof(std::iter_value_t<InputIt>) * (last - first));
    +
    29}
    +
    30
    +
    32template <std::contiguous_iterator InputIt, std::contiguous_iterator OutputIt>
    +
    33 requires __detail::is_syclmemcopyable<std::iter_value_t<InputIt>,
    +
    34 std::iter_value_t<OutputIt>>
    +
    35OutputIt copy(InputIt first, InputIt last, OutputIt d_first) {
    +
    36 copy_async(first, last, d_first).wait();
    +
    37 return d_first + (last - first);
    +
    38}
    +
    39
    +
    40// Copy from contiguous range to device
    +
    41template <std::contiguous_iterator Iter, typename T>
    +
    42 requires __detail::is_syclmemcopyable<std::iter_value_t<Iter>, T>
    +
    43sycl::event copy_async(Iter first, Iter last, device_ptr<T> d_first) {
    +
    44 // auto &&q = dr::sp::__detail::default_queue();
    +
    45 auto &&q = __detail::get_queue_for_pointers(first, d_first);
    +
    46 return q.memcpy(d_first.get_raw_pointer(), std::to_address(first),
    +
    47 sizeof(T) * (last - first));
    +
    48}
    +
    49
    +
    50template <std::contiguous_iterator Iter, typename T>
    +
    51 requires __detail::is_syclmemcopyable<std::iter_value_t<Iter>, T>
    +
    52device_ptr<T> copy(Iter first, Iter last, device_ptr<T> d_first) {
    +
    53 copy_async(first, last, d_first).wait();
    +
    54 return d_first + (last - first);
    +
    55}
    +
    56
    +
    57// Copy from device to contiguous range
    +
    58template <typename T, std::contiguous_iterator Iter>
    +
    59 requires __detail::is_syclmemcopyable<T, std::iter_value_t<Iter>>
    +
    60sycl::event copy_async(device_ptr<T> first, device_ptr<T> last, Iter d_first) {
    +
    61 // auto &&q = dr::sp::__detail::default_queue();
    +
    62 auto &&q = __detail::get_queue_for_pointers(first, d_first);
    +
    63 return q.memcpy(std::to_address(d_first), first.get_raw_pointer(),
    +
    64 sizeof(T) * (last - first));
    +
    65}
    +
    66
    +
    67template <typename T, std::contiguous_iterator Iter>
    +
    68 requires __detail::is_syclmemcopyable<T, std::iter_value_t<Iter>>
    +
    69Iter copy(device_ptr<T> first, device_ptr<T> last, Iter d_first) {
    +
    70 copy_async(first, last, d_first).wait();
    +
    71 return d_first + (last - first);
    +
    72}
    +
    73
    +
    74// Copy from device to device
    +
    75template <typename T>
    +
    76 requires(!std::is_const_v<T> && std::is_trivially_copyable_v<T>)
    +
    77sycl::event copy_async(device_ptr<std::add_const_t<T>> first,
    +
    78 device_ptr<std::add_const_t<T>> last,
    +
    79 device_ptr<T> d_first) {
    +
    80 // auto &&q = dr::sp::__detail::default_queue();
    +
    81 auto &&q = __detail::get_queue_for_pointers(first, d_first);
    +
    82 return q.memcpy(d_first.get_raw_pointer(), first.get_raw_pointer(),
    +
    83 sizeof(T) * (last - first));
    +
    84}
    +
    85
    +
    86template <typename T>
    +
    87 requires(!std::is_const_v<T> && std::is_trivially_copyable_v<T>)
    +
    88sycl::event copy_async(sycl::queue &q, device_ptr<std::add_const_t<T>> first,
    +
    89 device_ptr<std::add_const_t<T>> last,
    +
    90 device_ptr<T> d_first) {
    +
    91 return q.memcpy(d_first.get_raw_pointer(), first.get_raw_pointer(),
    +
    92 sizeof(T) * (last - first));
    +
    93}
    +
    94
    +
    95template <typename T>
    +
    96 requires(!std::is_const_v<T> && std::is_trivially_copyable_v<T>)
    +
    97device_ptr<T> copy(device_ptr<std::add_const_t<T>> first,
    +
    98 device_ptr<std::add_const_t<T>> last,
    +
    99 device_ptr<T> d_first) {
    +
    100 copy_async(first, last, d_first).wait();
    +
    101 return d_first + (last - first);
    +
    102}
    +
    103
    +
    104// Copy from local range to distributed range
    +
    105template <std::forward_iterator InputIt, dr::distributed_iterator OutputIt>
    +
    106 requires __detail::is_syclmemcopyable<std::iter_value_t<InputIt>,
    +
    107 std::iter_value_t<OutputIt>>
    +
    108sycl::event copy_async(InputIt first, InputIt last, OutputIt d_first) {
    +
    109 auto &&segments = dr::ranges::segments(d_first);
    +
    110 auto segment_iter = rng::begin(segments);
    +
    111
    +
    112 std::vector<sycl::event> events;
    +
    113
    +
    114 while (first != last) {
    +
    115 auto &&segment = *segment_iter;
    +
    116 auto size = rng::distance(segment);
    +
    117
    +
    118 std::size_t n_to_copy = std::min<size_t>(size, rng::distance(first, last));
    +
    119
    +
    120 auto local_last = first;
    +
    121 rng::advance(local_last, n_to_copy);
    +
    122
    +
    123 events.emplace_back(
    +
    124 dr::sp::copy_async(first, local_last, rng::begin(segment)));
    +
    125
    +
    126 ++segment_iter;
    +
    127 rng::advance(first, n_to_copy);
    +
    128 }
    +
    129
    +
    130 return dr::sp::__detail::combine_events(events);
    +
    131}
    +
    132
    +
    133auto copy(rng::contiguous_range auto r, dr::distributed_iterator auto d_first) {
    +
    134 return copy(rng::begin(r), rng::end(r), d_first);
    +
    135}
    +
    136
    +
    137auto copy(dr::distributed_range auto r, std::contiguous_iterator auto d_first) {
    +
    138 return copy(rng::begin(r), rng::end(r), d_first);
    +
    139}
    +
    140
    +
    141template <std::forward_iterator InputIt, dr::distributed_iterator OutputIt>
    +
    142 requires __detail::is_syclmemcopyable<std::iter_value_t<InputIt>,
    +
    143 std::iter_value_t<OutputIt>>
    +
    144OutputIt copy(InputIt first, InputIt last, OutputIt d_first) {
    +
    145 copy_async(first, last, d_first).wait();
    +
    146 return d_first + (last - first);
    +
    147}
    +
    148
    +
    149// Copy from distributed range to local range
    +
    150template <dr::distributed_iterator InputIt, std::forward_iterator OutputIt>
    +
    151 requires __detail::is_syclmemcopyable<std::iter_value_t<InputIt>,
    +
    152 std::iter_value_t<OutputIt>>
    +
    153sycl::event copy_async(InputIt first, InputIt last, OutputIt d_first) {
    +
    154 auto dist = rng::distance(first, last);
    +
    155 auto segments =
    +
    156 dr::__detail::take_segments(dr::ranges::segments(first), dist);
    +
    157
    +
    158 std::vector<sycl::event> events;
    +
    159
    +
    160 for (auto &&segment : segments) {
    +
    161 auto size = rng::distance(segment);
    +
    162
    +
    163 events.emplace_back(
    +
    164 dr::sp::copy_async(rng::begin(segment), rng::end(segment), d_first));
    +
    165
    +
    166 rng::advance(d_first, size);
    +
    167 }
    +
    168
    +
    169 return dr::sp::__detail::combine_events(events);
    +
    170}
    +
    171
    +
    172template <dr::distributed_iterator InputIt, std::forward_iterator OutputIt>
    +
    173 requires __detail::is_syclmemcopyable<std::iter_value_t<InputIt>,
    +
    174 std::iter_value_t<OutputIt>>
    +
    175OutputIt copy(InputIt first, InputIt last, OutputIt d_first) {
    +
    176 copy_async(first, last, d_first).wait();
    +
    177 return d_first + (last - first);
    +
    178}
    +
    179
    +
    180// Copy from distributed range to distributed range
    +
    181template <dr::distributed_iterator InputIt, dr::distributed_iterator OutputIt>
    +
    182 requires __detail::is_syclmemcopyable<std::iter_value_t<InputIt>,
    +
    183 std::iter_value_t<OutputIt>>
    +
    184sycl::event copy_async(InputIt first, InputIt last, OutputIt d_first) {
    +
    185 auto dist = rng::distance(first, last);
    +
    186 auto segments =
    +
    187 dr::__detail::take_segments(dr::ranges::segments(first), dist);
    +
    188
    +
    189 std::vector<sycl::event> events;
    +
    190
    +
    191 for (auto &&segment : segments) {
    +
    192 auto size = rng::distance(segment);
    +
    193
    +
    194 events.emplace_back(
    +
    195 dr::sp::copy_async(rng::begin(segment), rng::end(segment), d_first));
    +
    196
    +
    197 rng::advance(d_first, size);
    +
    198 }
    +
    199
    +
    200 return dr::sp::__detail::combine_events(events);
    +
    201}
    +
    202
    +
    203template <dr::distributed_iterator InputIt, dr::distributed_iterator OutputIt>
    +
    204 requires __detail::is_syclmemcopyable<std::iter_value_t<InputIt>,
    +
    205 std::iter_value_t<OutputIt>>
    +
    206OutputIt copy(InputIt first, InputIt last, OutputIt d_first) {
    +
    207 copy_async(first, last, d_first).wait();
    +
    208 return d_first + (last - first);
    +
    209}
    +
    210
    +
    211// Ranges versions
    +
    212
    +
    213// Distributed to distributed
    +
    214template <dr::distributed_range R, dr::distributed_iterator O>
    +
    215 requires __detail::is_syclmemcopyable<rng::range_value_t<R>,
    +
    216 std::iter_value_t<O>>
    +
    217sycl::event copy_async(R &&r, O result) {
    +
    218 return copy_async(rng::begin(r), rng::end(r), result);
    +
    219}
    +
    220
    +
    221template <dr::distributed_range R, dr::distributed_iterator O>
    +
    222 requires __detail::is_syclmemcopyable<rng::range_value_t<R>,
    +
    223 std::iter_value_t<O>>
    +
    224O copy(R &&r, O result) {
    +
    225 return copy(rng::begin(r), rng::end(r), result);
    +
    226}
    +
    227
    +
    228} // namespace dr::sp
    +
    Definition: concepts.hpp:31
    +
    Definition: concepts.hpp:20
    +
    + + + + diff --git a/doxygen/sp_2algorithms_2equal_8hpp_source.html b/doxygen/sp_2algorithms_2equal_8hpp_source.html new file mode 100644 index 0000000000..6f0a8ee52d --- /dev/null +++ b/doxygen/sp_2algorithms_2equal_8hpp_source.html @@ -0,0 +1,130 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/algorithms/equal.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    equal.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <dr/sp/algorithms/fill.hpp>
    +
    8#include <dr/sp/algorithms/reduce.hpp>
    +
    9#include <dr/sp/detail.hpp>
    +
    10#include <dr/sp/init.hpp>
    +
    11#include <dr/sp/util.hpp>
    +
    12#include <dr/sp/views/views.hpp>
    +
    13#include <dr/sp/zip_view.hpp>
    +
    14
    +
    15namespace dr::sp {
    +
    16
    +
    17template <typename ExecutionPolicy, dr::distributed_range R1,
    + +
    19 requires std::equality_comparable_with<rng::range_value_t<R1>,
    +
    20 rng::range_value_t<R2>>
    +
    21bool equal(ExecutionPolicy &&policy, R1 &&r1, R2 &&r2) {
    +
    22
    +
    23 if (rng::distance(r1) != rng::distance(r2)) {
    +
    24 return false;
    +
    25 }
    +
    26
    +
    27 // we must use ints instead of bools, because distributed ranges do not
    +
    28 // support bools
    +
    29 auto compare = [](auto &&elems) {
    +
    30 return elems.first == elems.second ? 1 : 0;
    +
    31 };
    +
    32
    +
    33 auto zipped_views = views::zip(r1, r2);
    +
    34 auto compared = sp::views::transform(zipped_views, compare);
    +
    35 auto min = [](double x, double y) { return std::min(x, y); };
    +
    36 auto result = sp::reduce(policy, compared, 1, min);
    +
    37 return result == 1;
    +
    38}
    +
    39
    +
    40template <dr::distributed_range R1, dr::distributed_range R2>
    +
    41bool equal(R1 &&r1, R2 &&r2) {
    +
    42 return equal(dr::sp::par_unseq, r1, r2);
    +
    43}
    +
    44} // namespace dr::sp
    +
    Definition: concepts.hpp:20
    +
    + + + + diff --git a/doxygen/sp_2algorithms_2exclusive__scan_8hpp_source.html b/doxygen/sp_2algorithms_2exclusive__scan_8hpp_source.html new file mode 100644 index 0000000000..647aea76bd --- /dev/null +++ b/doxygen/sp_2algorithms_2exclusive__scan_8hpp_source.html @@ -0,0 +1,315 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/algorithms/exclusive_scan.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    exclusive_scan.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <sycl/sycl.hpp>
    +
    8
    +
    9#include <oneapi/dpl/execution>
    +
    10#include <oneapi/dpl/numeric>
    +
    11
    +
    12#include <oneapi/dpl/async>
    +
    13
    +
    14#include <dr/concepts/concepts.hpp>
    +
    15#include <dr/detail/onedpl_direct_iterator.hpp>
    +
    16#include <dr/sp/algorithms/execution_policy.hpp>
    +
    17#include <dr/sp/allocators.hpp>
    +
    18#include <dr/sp/detail.hpp>
    +
    19#include <dr/sp/init.hpp>
    +
    20#include <dr/sp/vector.hpp>
    +
    21#include <dr/sp/views/views.hpp>
    +
    22
    +
    23namespace dr::sp {
    +
    24
    +
    25template <typename ExecutionPolicy, dr::distributed_contiguous_range R,
    +
    26 dr::distributed_contiguous_range O, typename U, typename BinaryOp>
    +
    27void exclusive_scan_impl_(ExecutionPolicy &&policy, R &&r, O &&o, U init,
    +
    28 BinaryOp &&binary_op) {
    +
    29 using T = rng::range_value_t<O>;
    +
    30
    +
    31 static_assert(
    +
    32 std::is_same_v<std::remove_cvref_t<ExecutionPolicy>, device_policy>);
    +
    33
    +
    34 auto zipped_view = dr::sp::views::zip(r, o);
    +
    35 auto zipped_segments = zipped_view.zipped_segments();
    +
    36
    +
    37 if constexpr (std::is_same_v<std::remove_cvref_t<ExecutionPolicy>,
    +
    38 device_policy>) {
    +
    39
    +
    40 U *d_inits = sycl::malloc_device<U>(rng::size(zipped_segments),
    +
    41 sp::devices()[0], sp::context());
    +
    42
    +
    43 std::vector<sycl::event> events;
    +
    44
    +
    45 std::size_t segment_id = 0;
    +
    46 for (auto &&segs : zipped_segments) {
    +
    47 auto &&[in_segment, out_segment] = segs;
    +
    48
    +
    49 auto last_element = rng::prev(rng::end(__detail::local(in_segment)));
    +
    50 auto dest = d_inits + segment_id;
    +
    51
    +
    52 auto &&q = __detail::queue(dr::ranges::rank(in_segment));
    +
    53
    +
    54 auto e = q.single_task([=] { *dest = *last_element; });
    +
    55 events.push_back(e);
    +
    56 segment_id++;
    +
    57 }
    +
    58
    +
    59 __detail::wait(events);
    +
    60 events.clear();
    +
    61
    +
    62 std::vector<U> inits(rng::size(zipped_segments));
    +
    63
    +
    64 sp::copy(d_inits, d_inits + inits.size(), inits.data() + 1);
    +
    65
    +
    66 sycl::free(d_inits, sp::context());
    +
    67
    +
    68 inits[0] = init;
    +
    69
    +
    70 auto root = dr::sp::devices()[0];
    +
    71 dr::sp::device_allocator<T> allocator(dr::sp::context(), root);
    + +
    73 std::size_t(zipped_segments.size()), allocator);
    +
    74
    +
    75 segment_id = 0;
    +
    76 for (auto &&segs : zipped_segments) {
    +
    77 auto &&[in_segment, out_segment] = segs;
    +
    78
    +
    79 auto &&q = __detail::queue(dr::ranges::rank(in_segment));
    +
    80 auto &&local_policy = __detail::dpl_policy(dr::ranges::rank(in_segment));
    +
    81
    +
    82 auto dist = rng::distance(in_segment);
    +
    83 assert(dist > 0);
    +
    84
    +
    85 auto first = rng::begin(in_segment);
    +
    86 auto last = rng::end(in_segment);
    +
    87 auto d_first = rng::begin(out_segment);
    +
    88
    +
    89 auto init = inits[segment_id];
    +
    90
    +
    91 auto event = oneapi::dpl::experimental::exclusive_scan_async(
    +
    92 local_policy, dr::__detail::direct_iterator(first),
    + +
    94 dr::__detail::direct_iterator(d_first), init, binary_op);
    +
    95
    +
    96 auto dst_iter = dr::ranges::local(partial_sums).data() + segment_id;
    +
    97
    +
    98 auto src_iter = dr::ranges::local(out_segment).data();
    +
    99 rng::advance(src_iter, dist - 1);
    +
    100
    +
    101 auto e = q.submit([&](auto &&h) {
    +
    102 h.depends_on(event);
    +
    103 h.single_task([=]() {
    +
    104 rng::range_value_t<O> value = *src_iter;
    +
    105 *dst_iter = value;
    +
    106 });
    +
    107 });
    +
    108
    +
    109 events.push_back(e);
    +
    110
    +
    111 segment_id++;
    +
    112 }
    +
    113
    +
    114 __detail::wait(events);
    +
    115 events.clear();
    +
    116
    +
    117 auto &&local_policy = __detail::dpl_policy(0);
    +
    118
    +
    119 auto first = dr::ranges::local(partial_sums).data();
    +
    120 auto last = first + partial_sums.size();
    +
    121
    +
    122 oneapi::dpl::experimental::inclusive_scan_async(local_policy, first, last,
    +
    123 first, binary_op)
    +
    124 .wait();
    +
    125
    +
    126 std::size_t idx = 0;
    +
    127 for (auto &&segs : zipped_segments) {
    +
    128 auto &&[in_segment, out_segment] = segs;
    +
    129
    +
    130 if (idx > 0) {
    +
    131 auto &&q = __detail::queue(dr::ranges::rank(out_segment));
    +
    132
    +
    133 auto first = rng::begin(out_segment);
    +
    134 dr::__detail::direct_iterator d_first(first);
    +
    135
    +
    136 auto d_sum =
    +
    137 dr::ranges::__detail::local(partial_sums).begin() + idx - 1;
    +
    138
    +
    139 sycl::event e = dr::__detail::parallel_for(
    +
    140 q, sycl::range<>(rng::distance(out_segment)),
    +
    141 [=](auto idx) { d_first[idx] = binary_op(d_first[idx], *d_sum); });
    +
    142
    +
    143 events.push_back(e);
    +
    144 }
    +
    145 idx++;
    +
    146 }
    +
    147
    +
    148 __detail::wait(events);
    +
    149
    +
    150 } else {
    +
    151 assert(false);
    +
    152 }
    +
    153}
    +
    154
    +
    155// Ranges versions
    +
    156
    +
    157template <typename ExecutionPolicy, dr::distributed_contiguous_range R,
    +
    158 dr::distributed_contiguous_range O, typename T, typename BinaryOp>
    +
    159void exclusive_scan(ExecutionPolicy &&policy, R &&r, O &&o, T init,
    +
    160 BinaryOp &&binary_op) {
    +
    161 exclusive_scan_impl_(std::forward<ExecutionPolicy>(policy),
    +
    162 std::forward<R>(r), std::forward<O>(o), init,
    +
    163 std::forward<BinaryOp>(binary_op));
    +
    164}
    +
    165
    +
    166template <typename ExecutionPolicy, dr::distributed_contiguous_range R,
    + +
    168void exclusive_scan(ExecutionPolicy &&policy, R &&r, O &&o, T init) {
    +
    169 exclusive_scan_impl_(std::forward<ExecutionPolicy>(policy),
    +
    170 std::forward<R>(r), std::forward<O>(o), init,
    +
    171 std::plus<>{});
    +
    172}
    +
    173
    + +
    175 dr::distributed_contiguous_range O, typename T, typename BinaryOp>
    +
    176void exclusive_scan(R &&r, O &&o, T init, BinaryOp &&binary_op) {
    +
    177 exclusive_scan_impl_(dr::sp::par_unseq, std::forward<R>(r),
    +
    178 std::forward<O>(o), init,
    +
    179 std::forward<BinaryOp>(binary_op));
    +
    180}
    +
    181
    + + +
    184void exclusive_scan(R &&r, O &&o, T init) {
    +
    185 exclusive_scan_impl_(dr::sp::par_unseq, std::forward<R>(r),
    +
    186 std::forward<O>(o), init, std::plus<>{});
    +
    187}
    +
    188
    +
    189// Iterator versions
    +
    190
    +
    191template <typename ExecutionPolicy, dr::distributed_iterator Iter,
    +
    192 dr::distributed_iterator OutputIter, typename T, typename BinaryOp>
    +
    193void exclusive_scan(ExecutionPolicy &&policy, Iter first, Iter last,
    +
    194 OutputIter d_first, T init, BinaryOp &&binary_op) {
    +
    195 auto dist = rng::distance(first, last);
    +
    196 auto d_last = d_first;
    +
    197 rng::advance(d_last, dist);
    +
    198 exclusive_scan_impl_(
    +
    199 std::forward<ExecutionPolicy>(policy), rng::subrange(first, last),
    +
    200 rng::subrange(d_first, d_last), init, std::forward<BinaryOp>(binary_op));
    +
    201}
    +
    202
    +
    203template <typename ExecutionPolicy, dr::distributed_iterator Iter,
    +
    204 dr::distributed_iterator OutputIter, typename T>
    +
    205void exclusive_scan(ExecutionPolicy &&policy, Iter first, Iter last,
    +
    206 OutputIter d_first, T init) {
    +
    207 exclusive_scan(std::forward<ExecutionPolicy>(policy), first, last, d_first,
    +
    208 init, std::plus<>{});
    +
    209}
    +
    210
    +
    211template <dr::distributed_iterator Iter, dr::distributed_iterator OutputIter,
    +
    212 typename T, typename BinaryOp>
    +
    213void exclusive_scan(Iter first, Iter last, OutputIter d_first, T init,
    +
    214 BinaryOp &&binary_op) {
    +
    215 exclusive_scan(dr::sp::par_unseq, first, last, d_first, init,
    +
    216 std::forward<BinaryOp>(binary_op));
    +
    217}
    +
    218
    +
    219template <dr::distributed_iterator Iter, dr::distributed_iterator OutputIter,
    +
    220 typename T>
    +
    221void exclusive_scan(Iter first, Iter last, OutputIter d_first, T init) {
    +
    222 exclusive_scan(dr::sp::par_unseq, first, last, d_first, init);
    +
    223}
    +
    224
    +
    225} // namespace dr::sp
    +
    Definition: onedpl_direct_iterator.hpp:15
    +
    Definition: allocators.hpp:20
    +
    Definition: vector.hpp:14
    +
    Definition: concepts.hpp:42
    +
    Definition: concepts.hpp:31
    +
    + + + + diff --git a/doxygen/sp_2algorithms_2fill_8hpp_source.html b/doxygen/sp_2algorithms_2fill_8hpp_source.html new file mode 100644 index 0000000000..758a090ba8 --- /dev/null +++ b/doxygen/sp_2algorithms_2fill_8hpp_source.html @@ -0,0 +1,179 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/algorithms/fill.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    fill.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <memory>
    +
    8#include <type_traits>
    +
    9
    +
    10#include <sycl/sycl.hpp>
    +
    11
    +
    12#include <dr/concepts/concepts.hpp>
    +
    13#include <dr/detail/segments_tools.hpp>
    +
    14#include <dr/sp/detail.hpp>
    +
    15#include <dr/sp/device_ptr.hpp>
    +
    16#include <dr/sp/util.hpp>
    +
    17
    +
    18namespace dr::sp {
    +
    19
    +
    20template <std::contiguous_iterator Iter>
    +
    21 requires(!std::is_const_v<std::iter_value_t<Iter>> &&
    +
    22 std::is_trivially_copyable_v<std::iter_value_t<Iter>>)
    +
    23sycl::event fill_async(Iter first, Iter last,
    +
    24 const std::iter_value_t<Iter> &value) {
    +
    25 auto &&q = __detail::get_queue_for_pointer(first);
    +
    26 std::iter_value_t<Iter> *arr = std::to_address(first);
    +
    27 // not using q.fill because of CMPLRLLVM-46438
    +
    28 return dr::__detail::parallel_for(q, sycl::range<>(last - first),
    +
    29 [=](auto idx) { arr[idx] = value; });
    +
    30}
    +
    31
    +
    32template <std::contiguous_iterator Iter>
    +
    33 requires(!std::is_const_v<std::iter_value_t<Iter>>)
    +
    34void fill(Iter first, Iter last, const std::iter_value_t<Iter> &value) {
    +
    35 fill_async(first, last, value).wait();
    +
    36}
    +
    37
    +
    38template <typename T, typename U>
    +
    39 requires(std::indirectly_writable<device_ptr<T>, U>)
    +
    40sycl::event fill_async(device_ptr<T> first, device_ptr<T> last,
    +
    41 const U &value) {
    +
    42 auto &&q = __detail::get_queue_for_pointer(first);
    +
    43 auto *arr = first.get_raw_pointer();
    +
    44 // not using q.fill because of CMPLRLLVM-46438
    +
    45 return dr::__detail::parallel_for(q, sycl::range<>(last - first),
    +
    46 [=](auto idx) { arr[idx] = value; });
    +
    47}
    +
    48
    +
    49template <typename T, typename U>
    +
    50 requires(std::indirectly_writable<device_ptr<T>, U>)
    +
    51void fill(device_ptr<T> first, device_ptr<T> last, const U &value) {
    +
    52 fill_async(first, last, value).wait();
    +
    53}
    +
    54
    +
    55template <typename T, dr::remote_contiguous_range R>
    +
    56sycl::event fill_async(R &&r, const T &value) {
    +
    57 auto &&q = __detail::queue(dr::ranges::rank(r));
    +
    58 auto *arr = std::to_address(rng::begin(dr::ranges::local(r)));
    +
    59 // not using q.fill because of CMPLRLLVM-46438
    +
    60 return dr::__detail::parallel_for(q, sycl::range<>(rng::distance(r)),
    +
    61 [=](auto idx) { arr[idx] = value; });
    +
    62}
    +
    63
    +
    64template <typename T, dr::remote_contiguous_range R>
    +
    65auto fill(R &&r, const T &value) {
    +
    66 fill_async(r, value).wait();
    +
    67 return rng::end(r);
    +
    68}
    +
    69
    +
    70template <typename T, dr::distributed_contiguous_range DR>
    +
    71sycl::event fill_async(DR &&r, const T &value) {
    +
    72 std::vector<sycl::event> events;
    +
    73
    +
    74 for (auto &&segment : dr::ranges::segments(r)) {
    +
    75 auto e = dr::sp::fill_async(segment, value);
    +
    76 events.push_back(e);
    +
    77 }
    +
    78
    +
    79 return dr::sp::__detail::combine_events(events);
    +
    80}
    +
    81
    +
    82template <typename T, dr::distributed_contiguous_range DR>
    +
    83auto fill(DR &&r, const T &value) {
    +
    84 fill_async(r, value).wait();
    +
    85 return rng::end(r);
    +
    86}
    +
    87
    +
    88template <typename T, dr::distributed_iterator Iter>
    +
    89auto fill(Iter first, Iter last, const T &value) {
    +
    90 fill_async(rng::subrange(first, last), value).wait();
    +
    91 return last;
    +
    92}
    +
    93
    +
    94} // namespace dr::sp
    +
    + + + + diff --git a/doxygen/sp_2algorithms_2for__each_8hpp_source.html b/doxygen/sp_2algorithms_2for__each_8hpp_source.html new file mode 100644 index 0000000000..82e2922127 --- /dev/null +++ b/doxygen/sp_2algorithms_2for__each_8hpp_source.html @@ -0,0 +1,158 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/algorithms/for_each.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    for_each.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <sycl/sycl.hpp>
    +
    8
    +
    9#include <dr/detail/sycl_utils.hpp>
    +
    10#include <dr/sp/algorithms/execution_policy.hpp>
    +
    11#include <dr/sp/detail.hpp>
    +
    12#include <dr/sp/init.hpp>
    +
    13#include <dr/sp/util.hpp>
    +
    14#include <dr/sp/zip_view.hpp>
    +
    15
    +
    16namespace dr::sp {
    +
    17
    +
    18template <typename ExecutionPolicy, dr::distributed_range R, typename Fn>
    +
    19void for_each(ExecutionPolicy &&policy, R &&r, Fn &&fn) {
    +
    20 static_assert( // currently only one policy supported
    +
    21 std::is_same_v<std::remove_cvref_t<ExecutionPolicy>, device_policy>);
    +
    22
    +
    23 std::vector<sycl::event> events;
    +
    24
    +
    25 for (auto &&segment : dr::ranges::segments(r)) {
    +
    26 auto &&q = __detail::queue(dr::ranges::rank(segment));
    +
    27
    +
    28 assert(rng::distance(segment) > 0);
    +
    29
    +
    30 auto local_segment = __detail::local(segment);
    +
    31
    +
    32 auto first = rng::begin(local_segment);
    +
    33
    +
    34 auto event = dr::__detail::parallel_for(
    +
    35 q, sycl::range<>(rng::distance(local_segment)),
    +
    36 [=](auto idx) { fn(*(first + idx)); });
    +
    37 events.emplace_back(event);
    +
    38 }
    +
    39 __detail::wait(events);
    +
    40}
    +
    41
    +
    42template <typename ExecutionPolicy, dr::distributed_iterator Iter, typename Fn>
    +
    43void for_each(ExecutionPolicy &&policy, Iter begin, Iter end, Fn &&fn) {
    +
    44 for_each(std::forward<ExecutionPolicy>(policy), rng::subrange(begin, end),
    +
    45 std::forward<Fn>(fn));
    +
    46}
    +
    47
    +
    48template <dr::distributed_range R, typename Fn> void for_each(R &&r, Fn &&fn) {
    +
    49 for_each(dr::sp::par_unseq, std::forward<R>(r), std::forward<Fn>(fn));
    +
    50}
    +
    51
    +
    52template <dr::distributed_iterator Iter, typename Fn>
    +
    53void for_each(Iter begin, Iter end, Fn &&fn) {
    +
    54 for_each(dr::sp::par_unseq, begin, end, std::forward<Fn>(fn));
    +
    55}
    +
    56
    +
    57template <typename ExecutionPolicy, dr::distributed_iterator Iter,
    +
    58 std::integral I, typename Fn>
    +
    59Iter for_each_n(ExecutionPolicy &&policy, Iter begin, I n, Fn fn) {
    +
    60 auto end = begin;
    +
    61 rng::advance(end, n);
    +
    62 for_each(std::forward<ExecutionPolicy>(policy), begin, end,
    +
    63 std::forward<Fn>(fn));
    +
    64 return end;
    +
    65}
    +
    66
    +
    67template <dr::distributed_iterator Iter, std::integral I, typename Fn>
    +
    68Iter for_each_n(Iter &&r, I n, Fn fn) {
    +
    69 return for_each_n(dr::sp::par_unseq, std::forward<Iter>(r), n, fn);
    +
    70}
    +
    71
    +
    72} // namespace dr::sp
    +
    Definition: concepts.hpp:31
    +
    + + + + diff --git a/doxygen/sp_2algorithms_2inclusive__scan_8hpp_source.html b/doxygen/sp_2algorithms_2inclusive__scan_8hpp_source.html new file mode 100644 index 0000000000..9579bcbc28 --- /dev/null +++ b/doxygen/sp_2algorithms_2inclusive__scan_8hpp_source.html @@ -0,0 +1,342 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/algorithms/inclusive_scan.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    inclusive_scan.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <optional>
    +
    8
    +
    9#include <sycl/sycl.hpp>
    +
    10
    +
    11#include <oneapi/dpl/execution>
    +
    12#include <oneapi/dpl/numeric>
    +
    13
    +
    14#include <oneapi/dpl/async>
    +
    15
    +
    16#include <dr/concepts/concepts.hpp>
    +
    17#include <dr/detail/onedpl_direct_iterator.hpp>
    +
    18#include <dr/sp/algorithms/execution_policy.hpp>
    +
    19#include <dr/sp/allocators.hpp>
    +
    20#include <dr/sp/detail.hpp>
    +
    21#include <dr/sp/init.hpp>
    +
    22#include <dr/sp/vector.hpp>
    +
    23#include <dr/sp/views/views.hpp>
    +
    24
    +
    25namespace dr::sp {
    +
    26
    +
    27template <typename ExecutionPolicy, dr::distributed_contiguous_range R,
    +
    28 dr::distributed_contiguous_range O, typename BinaryOp,
    +
    29 typename U = rng::range_value_t<R>>
    +
    30void inclusive_scan_impl_(ExecutionPolicy &&policy, R &&r, O &&o,
    +
    31 BinaryOp &&binary_op, std::optional<U> init = {}) {
    +
    32 using T = rng::range_value_t<O>;
    +
    33
    +
    34 static_assert(
    +
    35 std::is_same_v<std::remove_cvref_t<ExecutionPolicy>, device_policy>);
    +
    36
    +
    37 auto zipped_view = dr::sp::views::zip(r, o);
    +
    38 auto zipped_segments = zipped_view.zipped_segments();
    +
    39
    +
    40 if constexpr (std::is_same_v<std::remove_cvref_t<ExecutionPolicy>,
    +
    41 device_policy>) {
    +
    42
    +
    43 std::vector<sycl::event> events;
    +
    44
    +
    45 auto root = dr::sp::devices()[0];
    +
    46 dr::sp::device_allocator<T> allocator(dr::sp::context(), root);
    + +
    48 std::size_t(zipped_segments.size()), allocator);
    +
    49
    +
    50 std::size_t segment_id = 0;
    +
    51 for (auto &&segs : zipped_segments) {
    +
    52 auto &&[in_segment, out_segment] = segs;
    +
    53
    +
    54 auto &&q = __detail::queue(dr::ranges::rank(in_segment));
    +
    55 auto &&local_policy = __detail::dpl_policy(dr::ranges::rank(in_segment));
    +
    56
    +
    57 auto dist = rng::distance(in_segment);
    +
    58 assert(dist > 0);
    +
    59
    +
    60 auto first = rng::begin(in_segment);
    +
    61 auto last = rng::end(in_segment);
    +
    62 auto d_first = rng::begin(out_segment);
    +
    63
    +
    64 sycl::event event;
    +
    65
    +
    66 if (segment_id == 0 && init.has_value()) {
    +
    67 event = oneapi::dpl::experimental::inclusive_scan_async(
    +
    68 local_policy, dr::__detail::direct_iterator(first),
    + +
    70 dr::__detail::direct_iterator(d_first), binary_op, init.value());
    +
    71 } else {
    +
    72 event = oneapi::dpl::experimental::inclusive_scan_async(
    +
    73 local_policy, dr::__detail::direct_iterator(first),
    + +
    75 dr::__detail::direct_iterator(d_first), binary_op);
    +
    76 }
    +
    77
    +
    78 auto dst_iter = dr::ranges::local(partial_sums).data() + segment_id;
    +
    79
    +
    80 auto src_iter = dr::ranges::local(out_segment).data();
    +
    81 rng::advance(src_iter, dist - 1);
    +
    82
    +
    83 auto e = q.submit([&](auto &&h) {
    +
    84 h.depends_on(event);
    +
    85 h.single_task([=]() {
    +
    86 rng::range_value_t<O> value = *src_iter;
    +
    87 *dst_iter = value;
    +
    88 });
    +
    89 });
    +
    90
    +
    91 events.push_back(e);
    +
    92
    +
    93 segment_id++;
    +
    94 }
    +
    95
    +
    96 __detail::wait(events);
    +
    97 events.clear();
    +
    98
    +
    99 auto &&local_policy = __detail::dpl_policy(0);
    +
    100
    +
    101 auto first = dr::ranges::local(partial_sums).data();
    +
    102 auto last = first + partial_sums.size();
    +
    103
    +
    104 oneapi::dpl::experimental::inclusive_scan_async(local_policy, first, last,
    +
    105 first, binary_op)
    +
    106 .wait();
    +
    107
    +
    108 std::size_t idx = 0;
    +
    109 for (auto &&segs : zipped_segments) {
    +
    110 auto &&[in_segment, out_segment] = segs;
    +
    111
    +
    112 if (idx > 0) {
    +
    113 auto &&q = __detail::queue(dr::ranges::rank(out_segment));
    +
    114
    +
    115 auto first = rng::begin(out_segment);
    +
    116 dr::__detail::direct_iterator d_first(first);
    +
    117
    +
    118 auto d_sum =
    +
    119 dr::ranges::__detail::local(partial_sums).begin() + idx - 1;
    +
    120
    +
    121 sycl::event e = dr::__detail::parallel_for(
    +
    122 q, sycl::range<>(rng::distance(out_segment)),
    +
    123 [=](auto idx) { d_first[idx] = binary_op(d_first[idx], *d_sum); });
    +
    124
    +
    125 events.push_back(e);
    +
    126 }
    +
    127 idx++;
    +
    128 }
    +
    129
    +
    130 __detail::wait(events);
    +
    131
    +
    132 } else {
    +
    133 assert(false);
    +
    134 }
    +
    135}
    +
    136
    +
    137template <typename ExecutionPolicy, dr::distributed_contiguous_range R,
    +
    138 dr::distributed_contiguous_range O, typename BinaryOp, typename T>
    +
    139void inclusive_scan(ExecutionPolicy &&policy, R &&r, O &&o,
    +
    140 BinaryOp &&binary_op, T init) {
    +
    141 inclusive_scan_impl_(std::forward<ExecutionPolicy>(policy),
    +
    142 std::forward<R>(r), std::forward<O>(o),
    +
    143 std::forward<BinaryOp>(binary_op), std::optional(init));
    +
    144}
    +
    145
    +
    146template <typename ExecutionPolicy, dr::distributed_contiguous_range R,
    +
    147 dr::distributed_contiguous_range O, typename BinaryOp>
    +
    148void inclusive_scan(ExecutionPolicy &&policy, R &&r, O &&o,
    +
    149 BinaryOp &&binary_op) {
    +
    150 inclusive_scan_impl_(std::forward<ExecutionPolicy>(policy),
    +
    151 std::forward<R>(r), std::forward<O>(o),
    +
    152 std::forward<BinaryOp>(binary_op));
    +
    153}
    +
    154
    +
    155template <typename ExecutionPolicy, dr::distributed_contiguous_range R,
    + +
    157void inclusive_scan(ExecutionPolicy &&policy, R &&r, O &&o) {
    +
    158 inclusive_scan(std::forward<ExecutionPolicy>(policy), std::forward<R>(r),
    +
    159 std::forward<O>(o), std::plus<rng::range_value_t<R>>());
    +
    160}
    +
    161
    +
    162// Distributed iterator versions
    +
    163
    +
    164template <typename ExecutionPolicy, dr::distributed_iterator Iter,
    +
    165 dr::distributed_iterator OutputIter, typename BinaryOp, typename T>
    +
    166OutputIter inclusive_scan(ExecutionPolicy &&policy, Iter first, Iter last,
    +
    167 OutputIter d_first, BinaryOp &&binary_op, T init) {
    +
    168
    +
    169 auto dist = rng::distance(first, last);
    +
    170 auto d_last = d_first;
    +
    171 rng::advance(d_last, dist);
    +
    172 inclusive_scan(std::forward<ExecutionPolicy>(policy),
    +
    173 rng::subrange(first, last), rng::subrange(d_first, d_last),
    +
    174 std::forward<BinaryOp>(binary_op), init);
    +
    175
    +
    176 return d_last;
    +
    177}
    +
    178
    +
    179template <typename ExecutionPolicy, dr::distributed_iterator Iter,
    +
    180 dr::distributed_iterator OutputIter, typename BinaryOp>
    +
    181OutputIter inclusive_scan(ExecutionPolicy &&policy, Iter first, Iter last,
    +
    182 OutputIter d_first, BinaryOp &&binary_op) {
    +
    183
    +
    184 auto dist = rng::distance(first, last);
    +
    185 auto d_last = d_first;
    +
    186 rng::advance(d_last, dist);
    +
    187 inclusive_scan(std::forward<ExecutionPolicy>(policy),
    +
    188 rng::subrange(first, last), rng::subrange(d_first, d_last),
    +
    189 std::forward<BinaryOp>(binary_op));
    +
    190
    +
    191 return d_last;
    +
    192}
    +
    193
    +
    194template <typename ExecutionPolicy, dr::distributed_iterator Iter,
    +
    195 dr::distributed_iterator OutputIter>
    +
    196OutputIter inclusive_scan(ExecutionPolicy &&policy, Iter first, Iter last,
    +
    197 OutputIter d_first) {
    +
    198 auto dist = rng::distance(first, last);
    +
    199 auto d_last = d_first;
    +
    200 rng::advance(d_last, dist);
    +
    201 inclusive_scan(std::forward<ExecutionPolicy>(policy),
    +
    202 rng::subrange(first, last), rng::subrange(d_first, d_last));
    +
    203
    +
    204 return d_last;
    +
    205}
    +
    206
    +
    207// Execution policy-less versions
    +
    208
    + + +
    211void inclusive_scan(R &&r, O &&o) {
    +
    212 inclusive_scan(dr::sp::par_unseq, std::forward<R>(r), std::forward<O>(o));
    +
    213}
    +
    214
    + +
    216 dr::distributed_contiguous_range O, typename BinaryOp>
    +
    217void inclusive_scan(R &&r, O &&o, BinaryOp &&binary_op) {
    +
    218 inclusive_scan(dr::sp::par_unseq, std::forward<R>(r), std::forward<O>(o),
    +
    219 std::forward<BinaryOp>(binary_op));
    +
    220}
    +
    221
    + +
    223 dr::distributed_contiguous_range O, typename BinaryOp, typename T>
    +
    224void inclusive_scan(R &&r, O &&o, BinaryOp &&binary_op, T init) {
    +
    225 inclusive_scan(dr::sp::par_unseq, std::forward<R>(r), std::forward<O>(o),
    +
    226 std::forward<BinaryOp>(binary_op), init);
    +
    227}
    +
    228
    +
    229// Distributed iterator versions
    +
    230
    +
    231template <dr::distributed_iterator Iter, dr::distributed_iterator OutputIter>
    +
    232OutputIter inclusive_scan(Iter first, Iter last, OutputIter d_first) {
    +
    233 return inclusive_scan(dr::sp::par_unseq, first, last, d_first);
    +
    234}
    +
    235
    +
    236template <dr::distributed_iterator Iter, dr::distributed_iterator OutputIter,
    +
    237 typename BinaryOp>
    +
    238OutputIter inclusive_scan(Iter first, Iter last, OutputIter d_first,
    +
    239 BinaryOp &&binary_op) {
    +
    240 return inclusive_scan(dr::sp::par_unseq, first, last, d_first,
    +
    241 std::forward<BinaryOp>(binary_op));
    +
    242}
    +
    243
    +
    244template <dr::distributed_iterator Iter, dr::distributed_iterator OutputIter,
    +
    245 typename BinaryOp, typename T>
    +
    246OutputIter inclusive_scan(Iter first, Iter last, OutputIter d_first,
    +
    247 BinaryOp &&binary_op, T init) {
    +
    248 return inclusive_scan(dr::sp::par_unseq, first, last, d_first,
    +
    249 std::forward<BinaryOp>(binary_op), init);
    +
    250}
    +
    251
    +
    252} // namespace dr::sp
    +
    Definition: onedpl_direct_iterator.hpp:15
    +
    Definition: allocators.hpp:20
    +
    Definition: vector.hpp:14
    +
    Definition: concepts.hpp:42
    +
    Definition: concepts.hpp:31
    +
    + + + + diff --git a/doxygen/sp_2algorithms_2iota_8hpp_source.html b/doxygen/sp_2algorithms_2iota_8hpp_source.html new file mode 100644 index 0000000000..a303dbbb12 --- /dev/null +++ b/doxygen/sp_2algorithms_2iota_8hpp_source.html @@ -0,0 +1,116 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/algorithms/iota.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    iota.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <limits>
    +
    8
    +
    9#include <dr/concepts/concepts.hpp>
    +
    10#include <dr/detail/ranges_shim.hpp>
    +
    11#include <dr/sp/algorithms/for_each.hpp>
    +
    12#include <dr/views/iota.hpp>
    +
    13
    +
    14namespace dr::sp {
    +
    15
    +
    16template <dr::distributed_range R, std::integral T> void iota(R &&r, T value) {
    +
    17 auto iota_view = rng::views::iota(value, T(value + rng::distance(r)));
    +
    18
    +
    19 for_each(par_unseq, views::zip(iota_view, r), [](auto &&elem) {
    +
    20 auto &&[idx, v] = elem;
    +
    21 v = idx;
    +
    22 });
    +
    23}
    +
    24
    +
    25template <dr::distributed_iterator Iter, std::integral T>
    +
    26void iota(Iter begin, Iter end, T value) {
    +
    27 auto r = rng::subrange(begin, end);
    +
    28 iota(r, value);
    +
    29}
    +
    30
    +
    31} // namespace dr::sp
    +
    + + + + diff --git a/doxygen/sp_2algorithms_2reduce_8hpp_source.html b/doxygen/sp_2algorithms_2reduce_8hpp_source.html new file mode 100644 index 0000000000..5b6461d2ea --- /dev/null +++ b/doxygen/sp_2algorithms_2reduce_8hpp_source.html @@ -0,0 +1,255 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/algorithms/reduce.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    reduce.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <oneapi/dpl/execution>
    +
    8#include <oneapi/dpl/numeric>
    +
    9
    +
    10#include <oneapi/dpl/async>
    +
    11
    +
    12#include <dr/concepts/concepts.hpp>
    +
    13#include <dr/detail/onedpl_direct_iterator.hpp>
    +
    14#include <dr/sp/algorithms/execution_policy.hpp>
    +
    15#include <dr/sp/init.hpp>
    +
    16#include <sycl/sycl.hpp>
    +
    17
    +
    18namespace {
    +
    19
    +
    20// Precondition: rng::distance(first, last) >= 2
    +
    21// Postcondition: return future to [first, last) reduced with fn
    +
    22template <typename T, typename ExecutionPolicy,
    +
    23 std::bidirectional_iterator Iter, typename Fn>
    +
    24auto reduce_no_init_async(ExecutionPolicy &&policy, Iter first, Iter last,
    +
    25 Fn &&fn) {
    +
    26 Iter new_last = last;
    +
    27 --new_last;
    +
    28
    +
    29 std::iter_value_t<Iter> init = *new_last;
    +
    30
    +
    31 dr::__detail::direct_iterator d_first(first);
    +
    32 dr::__detail::direct_iterator d_last(new_last);
    +
    33
    +
    34 return oneapi::dpl::experimental::reduce_async(
    +
    35 std::forward<ExecutionPolicy>(policy), d_first, d_last,
    +
    36 static_cast<T>(init), std::forward<Fn>(fn));
    +
    37}
    +
    38
    +
    39template <typename T, typename ExecutionPolicy,
    +
    40 std::bidirectional_iterator Iter, typename Fn>
    +
    41 requires(sycl::has_known_identity_v<Fn, T>)
    +
    42auto reduce_no_init_async(ExecutionPolicy &&policy, Iter first, Iter last,
    +
    43 Fn &&fn) {
    +
    44 dr::__detail::direct_iterator d_first(first);
    + +
    46
    +
    47 return oneapi::dpl::experimental::reduce_async(
    +
    48 std::forward<ExecutionPolicy>(policy), d_first, d_last,
    +
    49 sycl::known_identity_v<Fn, T>, std::forward<Fn>(fn));
    +
    50}
    +
    51
    +
    52} // namespace
    +
    53
    +
    54namespace dr::sp {
    +
    55
    +
    56template <typename ExecutionPolicy, dr::distributed_range R, typename T,
    +
    57 typename BinaryOp>
    +
    58T reduce(ExecutionPolicy &&policy, R &&r, T init, BinaryOp &&binary_op) {
    +
    59
    +
    60 static_assert(
    +
    61 std::is_same_v<std::remove_cvref_t<ExecutionPolicy>, device_policy>);
    +
    62
    +
    63 if constexpr (std::is_same_v<std::remove_cvref_t<ExecutionPolicy>,
    +
    64 device_policy>) {
    +
    65 using future_t = decltype(oneapi::dpl::experimental::reduce_async(
    +
    66 __detail::dpl_policy(0), dr::ranges::segments(r)[0].begin(),
    +
    67 dr::ranges::segments(r)[0].end(), init, binary_op));
    +
    68
    +
    69 std::vector<future_t> futures;
    +
    70
    +
    71 for (auto &&segment : dr::ranges::segments(r)) {
    +
    72 auto &&local_policy = __detail::dpl_policy(dr::ranges::rank(segment));
    +
    73
    +
    74 auto dist = rng::distance(segment);
    +
    75 if (dist <= 0) {
    +
    76 continue;
    +
    77 } else if (dist == 1) {
    +
    78 init = binary_op(init, *rng::begin(segment));
    +
    79 continue;
    +
    80 }
    +
    81
    +
    82 auto future = reduce_no_init_async<T>(local_policy, rng::begin(segment),
    +
    83 rng::end(segment), binary_op);
    +
    84
    +
    85 futures.push_back(std::move(future));
    +
    86 }
    +
    87
    +
    88 for (auto &&f : futures) {
    +
    89 init = binary_op(init, f.get());
    +
    90 }
    +
    91
    +
    92 return init;
    +
    93 } else {
    +
    94 assert(false);
    +
    95 }
    +
    96}
    +
    97
    +
    98template <typename ExecutionPolicy, dr::distributed_range R, typename T>
    +
    99T reduce(ExecutionPolicy &&policy, R &&r, T init) {
    +
    100 return reduce(std::forward<ExecutionPolicy>(policy), std::forward<R>(r), init,
    +
    101 std::plus<>());
    +
    102}
    +
    103
    +
    104template <typename ExecutionPolicy, dr::distributed_range R>
    +
    105rng::range_value_t<R> reduce(ExecutionPolicy &&policy, R &&r) {
    +
    106 return reduce(std::forward<ExecutionPolicy>(policy), std::forward<R>(r),
    +
    107 rng::range_value_t<R>{}, std::plus<>());
    +
    108}
    +
    109
    +
    110// Iterator versions
    +
    111
    +
    112template <typename ExecutionPolicy, dr::distributed_iterator Iter>
    +
    113std::iter_value_t<Iter> reduce(ExecutionPolicy &&policy, Iter first,
    +
    114 Iter last) {
    +
    115 return reduce(std::forward<ExecutionPolicy>(policy),
    +
    116 rng::subrange(first, last), std::iter_value_t<Iter>{},
    +
    117 std::plus<>());
    +
    118}
    +
    119
    +
    120template <typename ExecutionPolicy, dr::distributed_iterator Iter, typename T>
    +
    121T reduce(ExecutionPolicy &&policy, Iter first, Iter last, T init) {
    +
    122 return reduce(std::forward<ExecutionPolicy>(policy),
    +
    123 rng::subrange(first, last), init, std::plus<>());
    +
    124}
    +
    125
    +
    126template <typename ExecutionPolicy, dr::distributed_iterator Iter, typename T,
    +
    127 typename BinaryOp>
    +
    128T reduce(ExecutionPolicy &&policy, Iter first, Iter last, T init,
    +
    129 BinaryOp &&binary_op) {
    +
    130 return reduce(std::forward<ExecutionPolicy>(policy),
    +
    131 rng::subrange(first, last), init,
    +
    132 std::forward<BinaryOp>(binary_op));
    +
    133}
    +
    134
    +
    135// Execution policy-less algorithms
    +
    136
    +
    137template <dr::distributed_range R> rng::range_value_t<R> reduce(R &&r) {
    +
    138 return reduce(dr::sp::par_unseq, std::forward<R>(r));
    +
    139}
    +
    140
    +
    141template <dr::distributed_range R, typename T> T reduce(R &&r, T init) {
    +
    142 return reduce(dr::sp::par_unseq, std::forward<R>(r), init);
    +
    143}
    +
    144
    +
    145template <dr::distributed_range R, typename T, typename BinaryOp>
    +
    146T reduce(R &&r, T init, BinaryOp &&binary_op) {
    +
    147 return reduce(dr::sp::par_unseq, std::forward<R>(r), init,
    +
    148 std::forward<BinaryOp>(binary_op));
    +
    149}
    +
    150
    +
    151template <dr::distributed_iterator Iter>
    +
    152std::iter_value_t<Iter> reduce(Iter first, Iter last) {
    +
    153 return reduce(dr::sp::par_unseq, first, last);
    +
    154}
    +
    155
    +
    156template <dr::distributed_iterator Iter, typename T>
    +
    157T reduce(Iter first, Iter last, T init) {
    +
    158 return reduce(dr::sp::par_unseq, first, last, init);
    +
    159}
    +
    160
    +
    161template <dr::distributed_iterator Iter, typename T, typename BinaryOp>
    +
    162T reduce(Iter first, Iter last, T init, BinaryOp &&binary_op) {
    +
    163 return reduce(dr::sp::par_unseq, first, last, init,
    +
    164 std::forward<BinaryOp>(binary_op));
    +
    165}
    +
    166
    +
    167} // namespace dr::sp
    +
    Definition: onedpl_direct_iterator.hpp:15
    +
    Definition: concepts.hpp:31
    +
    Definition: concepts.hpp:20
    +
    + + + + diff --git a/doxygen/sp_2algorithms_2sort_8hpp_source.html b/doxygen/sp_2algorithms_2sort_8hpp_source.html new file mode 100644 index 0000000000..43741ade81 --- /dev/null +++ b/doxygen/sp_2algorithms_2sort_8hpp_source.html @@ -0,0 +1,383 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/algorithms/sort.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    sort.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <oneapi/dpl/execution>
    +
    8
    +
    9#include <oneapi/dpl/algorithm>
    +
    10#include <oneapi/dpl/async>
    +
    11
    +
    12#include <dr/concepts/concepts.hpp>
    +
    13#include <dr/detail/onedpl_direct_iterator.hpp>
    +
    14#include <dr/sp/init.hpp>
    +
    15
    +
    16#include <omp.h>
    +
    17#include <sycl/sycl.hpp>
    +
    18
    +
    19namespace dr::sp {
    +
    20
    +
    21namespace __detail {
    +
    22
    +
    23template <typename LocalPolicy, typename InputIt, typename Compare>
    +
    24sycl::event sort_async(LocalPolicy &&policy, InputIt first, InputIt last,
    +
    25 Compare &&comp) {
    +
    26 if (rng::distance(first, last) >= 2) {
    +
    27 dr::__detail::direct_iterator d_first(first);
    + +
    29 return oneapi::dpl::experimental::sort_async(
    +
    30 std::forward<LocalPolicy>(policy), d_first, d_last,
    +
    31 std::forward<Compare>(comp));
    +
    32 } else {
    +
    33 return sycl::event{};
    +
    34 }
    +
    35}
    +
    36
    +
    37template <typename LocalPolicy, typename InputIt1, typename InputIt2,
    +
    38 typename OutputIt, typename Comparator = std::less<>>
    +
    39OutputIt lower_bound(LocalPolicy &&policy, InputIt1 start, InputIt1 end,
    +
    40 InputIt2 value_first, InputIt2 value_last, OutputIt result,
    +
    41 Comparator comp = Comparator()) {
    +
    42 dr::__detail::direct_iterator d_start(start);
    + +
    44
    +
    45 dr::__detail::direct_iterator d_value_first(value_first);
    +
    46 dr::__detail::direct_iterator d_value_last(value_last);
    +
    47
    +
    48 dr::__detail::direct_iterator d_result(result);
    +
    49
    +
    50 return oneapi::dpl::lower_bound(std::forward<LocalPolicy>(policy), d_start,
    +
    51 d_end, d_value_first, d_value_last, d_result,
    +
    52 comp)
    +
    53 .base();
    +
    54}
    +
    55
    +
    56} // namespace __detail
    +
    57
    +
    58template <dr::distributed_range R, typename Compare = std::less<>>
    +
    59void sort(R &&r, Compare comp = Compare()) {
    +
    60 auto &&segments = dr::ranges::segments(r);
    +
    61
    +
    62 if (rng::size(segments) == 0) {
    +
    63 return;
    +
    64 } else if (rng::size(segments) == 1) {
    +
    65 auto &&segment = *rng::begin(segments);
    +
    66 auto &&local_policy =
    +
    67 dr::sp::__detail::dpl_policy(dr::ranges::rank(segment));
    +
    68 auto &&local_segment = dr::sp::__detail::local(segment);
    +
    69
    +
    70 __detail::sort_async(local_policy, rng::begin(local_segment),
    +
    71 rng::end(local_segment), comp)
    +
    72 .wait();
    +
    73 return;
    +
    74 }
    +
    75
    +
    76 using T = rng::range_value_t<R>;
    +
    77 std::vector<sycl::event> events;
    +
    78
    +
    79 const std::size_t n_segments = std::size_t(rng::size(segments));
    +
    80 const std::size_t n_splitters = n_segments - 1;
    +
    81
    +
    82 // Sort each local segment, then compute medians.
    +
    83 // Each segment has `n_splitters` medians,
    +
    84 // so `n_segments * n_splitters` medians total.
    +
    85
    +
    86 T *medians = sycl::malloc_device<T>(n_segments * n_splitters,
    +
    87 sp::devices()[0], sp::context());
    +
    88
    +
    89 for (auto &&[segment_id_, segment] : rng::views::enumerate(segments)) {
    +
    90 auto const segment_id = static_cast<std::size_t>(segment_id_);
    +
    91 auto &&q = dr::sp::__detail::queue(dr::ranges::rank(segment));
    +
    92 auto &&local_policy =
    +
    93 dr::sp::__detail::dpl_policy(dr::ranges::rank(segment));
    +
    94
    +
    95 auto &&local_segment = dr::sp::__detail::local(segment);
    +
    96
    +
    97 auto s = __detail::sort_async(local_policy, rng::begin(local_segment),
    +
    98 rng::end(local_segment), comp);
    +
    99
    +
    100 double step_size = static_cast<double>(rng::size(segment)) / n_segments;
    +
    101
    +
    102 auto local_begin = rng::begin(local_segment);
    +
    103
    +
    104 auto e = q.submit([&](auto &&h) {
    +
    105 h.depends_on(s);
    +
    106
    +
    107 h.parallel_for(n_splitters, [=](auto i) {
    +
    108 medians[n_splitters * segment_id + i] =
    +
    109 local_begin[std::size_t(step_size * (i + 1) + 0.5)];
    +
    110 });
    +
    111 });
    +
    112
    +
    113 events.push_back(e);
    +
    114 }
    +
    115
    +
    116 dr::sp::__detail::wait(events);
    +
    117 events.clear();
    +
    118
    +
    119 // Compute global medians by sorting medians and
    +
    120 // computing `n_splitters` medians from the medians.
    +
    121 auto &&local_policy = dr::sp::__detail::dpl_policy(0);
    +
    122 __detail::sort_async(local_policy, medians,
    +
    123 medians + n_segments * n_splitters, comp)
    +
    124 .wait();
    +
    125
    +
    126 double step_size = static_cast<double>(n_segments * n_splitters) / n_segments;
    +
    127
    +
    128 // - Collect median of medians to get final splitters.
    +
    129 // - Write splitters to [0, n_splitters) in `medians`
    +
    130
    +
    131 auto &&q = dr::sp::__detail::queue(0);
    +
    132 q.single_task([=] {
    +
    133 for (std::size_t i = 0; i < n_splitters; i++) {
    +
    134 medians[i] = medians[std::size_t(step_size * (i + 1) + 0.5)];
    +
    135 }
    +
    136 }).wait();
    +
    137
    +
    138 std::vector<std::size_t *> splitter_indices;
    +
    139 // sorted_seg_sizes[i]: how many elements exists in all segments between
    +
    140 // medians[i-1] and medians[i]
    +
    141 std::vector<std::size_t> sorted_seg_sizes(n_segments, 0);
    +
    142 // push_positions[snd_idx][rcv_idx]: shift inside final segment of rcv_idx for
    +
    143 // data being sent from initial snd_idx segment
    +
    144 std::vector<std::vector<std::size_t>> push_positions(n_segments);
    +
    145
    +
    146 // Compute how many elements will be sent to each of the new "sorted
    +
    147 // segments". Simultaneously compute the offsets `push_positions` where each
    +
    148 // segments' corresponding elements will be pushed.
    +
    149
    +
    150 for (auto &&[segment_id, segment] : rng::views::enumerate(segments)) {
    +
    151 auto &&q = dr::sp::__detail::queue(dr::ranges::rank(segment));
    +
    152 auto &&local_policy =
    +
    153 dr::sp::__detail::dpl_policy(dr::ranges::rank(segment));
    +
    154
    +
    155 auto &&local_segment = dr::sp::__detail::local(segment);
    +
    156
    +
    157 // slitter_i = [ index in local_segment of first element greater or equal
    +
    158 // 1st global median, index ... 2nd global median, ..., size of
    +
    159 // local_segment]
    +
    160 std::size_t *splitter_i = sycl::malloc_shared<std::size_t>(
    +
    161 n_segments, q.get_device(), sp::context());
    +
    162 splitter_indices.push_back(splitter_i);
    +
    163
    +
    164 // Local copy `medians_l` necessary due to [GSD-3893]
    +
    165 T *medians_l =
    +
    166 sycl::malloc_device<T>(n_splitters, q.get_device(), sp::context());
    +
    167
    +
    168 q.memcpy(medians_l, medians, sizeof(T) * n_splitters).wait();
    +
    169
    +
    170 __detail::lower_bound(local_policy, rng::begin(local_segment),
    +
    171 rng::end(local_segment), medians_l,
    +
    172 medians_l + n_splitters, splitter_i, comp);
    +
    173
    +
    174 sycl::free(medians_l, sp::context());
    +
    175
    +
    176 splitter_i[n_splitters] = rng::size(local_segment);
    +
    177
    +
    178 for (std::size_t i = 0; i < n_segments; i++) {
    +
    179 const std::size_t n_elements =
    +
    180 splitter_i[i] - (i == 0 ? 0 : splitter_i[i - 1]);
    +
    181 const std::size_t pos =
    +
    182 std::atomic_ref(sorted_seg_sizes[i]).fetch_add(n_elements);
    +
    183 push_positions[static_cast<std::size_t>(segment_id)].push_back(pos);
    +
    184 }
    +
    185 }
    +
    186
    +
    187 // Allocate new "sorted segments"
    +
    188 std::vector<T *> sorted_segments;
    +
    189
    +
    190 for (auto &&[segment_id, segment] : rng::views::enumerate(segments)) {
    +
    191 auto &&q = dr::sp::__detail::queue(dr::ranges::rank(segment));
    +
    192
    +
    193 T *buffer = sycl::malloc_device<T>(
    +
    194 sorted_seg_sizes[static_cast<std::size_t>(segment_id)], q);
    +
    195 sorted_segments.push_back(buffer);
    +
    196 }
    +
    197
    +
    198 // Copy corresponding elements to each "sorted segment"
    +
    199 for (auto &&[segment_id_, segment] : rng::views::enumerate(segments)) {
    +
    200 auto &&local_segment = dr::sp::__detail::local(segment);
    +
    201 const auto segment_id = static_cast<std::size_t>(segment_id_);
    +
    202
    +
    203 std::size_t *splitter_i = splitter_indices[segment_id];
    +
    204
    +
    205 auto p_first = rng::begin(local_segment);
    +
    206 auto p_last = p_first;
    +
    207 for (std::size_t i = 0; i < n_segments; i++) {
    +
    208 p_last = rng::begin(local_segment) + splitter_i[i];
    +
    209
    +
    210 const std::size_t pos = push_positions[segment_id][i];
    +
    211
    +
    212 auto e = sp::copy_async(p_first, p_last, sorted_segments[i] + pos);
    +
    213 events.push_back(e);
    +
    214
    +
    215 p_first = p_last;
    +
    216 }
    +
    217 }
    +
    218
    +
    219 dr::sp::__detail::wait(events);
    +
    220 events.clear();
    +
    221
    +
    222 // merge sorted chunks within each of these new segments
    +
    223
    +
    224#pragma omp parallel num_threads(n_segments)
    +
    225 {
    +
    226 int t = omp_get_thread_num();
    +
    227
    +
    228 std::vector<std::size_t> chunks_ind;
    +
    229 for (std::size_t i = 0; i < n_segments; i++) {
    +
    230 chunks_ind.push_back(push_positions[i][t]);
    +
    231 }
    +
    232
    +
    233 auto _segments = n_segments;
    +
    234 while (_segments > 1) {
    +
    235 std::vector<std::size_t> new_chunks;
    +
    236 new_chunks.push_back(0);
    +
    237
    +
    238 for (int s = 0; s < _segments / 2; s++) {
    +
    239
    +
    240 const std::size_t l = (2 * s + 2 < _segments) ? chunks_ind[2 * s + 2]
    +
    241 : sorted_seg_sizes[t];
    +
    242
    +
    243 auto first = dr::__detail::direct_iterator(sorted_segments[t] +
    +
    244 chunks_ind[2 * s]);
    +
    245 auto middle = dr::__detail::direct_iterator(sorted_segments[t] +
    +
    246 chunks_ind[2 * s + 1]);
    +
    247 auto last = dr::__detail::direct_iterator(sorted_segments[t] + l);
    +
    248
    +
    249 new_chunks.push_back(l);
    +
    250
    +
    251 oneapi::dpl::inplace_merge(
    +
    252 __detail::dpl_policy(dr::ranges::rank(segments[t])), first, middle,
    +
    253 last, std::forward<Compare>(comp));
    +
    254 }
    +
    255
    +
    256 _segments = (_segments + 1) / 2;
    +
    257
    +
    258 std::swap(chunks_ind, new_chunks);
    +
    259 }
    +
    260 } // End of omp parallel region
    +
    261
    +
    262 // Copy the results into the output.
    +
    263
    +
    264 auto d_first = rng::begin(r);
    +
    265
    +
    266 for (std::size_t i = 0; i < sorted_segments.size(); i++) {
    +
    267 T *seg = sorted_segments[i];
    +
    268 std::size_t n_elements = sorted_seg_sizes[i];
    +
    269
    +
    270 auto e = sp::copy_async(seg, seg + n_elements, d_first);
    +
    271
    +
    272 events.push_back(e);
    +
    273
    +
    274 rng::advance(d_first, n_elements);
    +
    275 }
    +
    276
    +
    277 dr::sp::__detail::wait(events);
    +
    278
    +
    279 // Free temporary memory.
    +
    280
    +
    281 for (auto &&sorted_seg : sorted_segments) {
    +
    282 sycl::free(sorted_seg, sp::context());
    +
    283 }
    +
    284
    +
    285 for (auto &&splitter_i : splitter_indices) {
    +
    286 sycl::free(splitter_i, sp::context());
    +
    287 }
    +
    288
    +
    289 sycl::free(medians, sp::context());
    +
    290}
    +
    291
    +
    292template <dr::distributed_iterator RandomIt, typename Compare = std::less<>>
    +
    293void sort(RandomIt first, RandomIt last, Compare comp = Compare()) {
    +
    294 sort(rng::subrange(first, last), comp);
    +
    295}
    +
    296
    +
    297} // namespace dr::sp
    +
    Definition: onedpl_direct_iterator.hpp:15
    +
    + + + + diff --git a/doxygen/sp_2algorithms_2transform_8hpp_source.html b/doxygen/sp_2algorithms_2transform_8hpp_source.html new file mode 100644 index 0000000000..48dfb02782 --- /dev/null +++ b/doxygen/sp_2algorithms_2transform_8hpp_source.html @@ -0,0 +1,168 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/algorithms/transform.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    transform.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4#pragma once
    +
    5
    +
    6#include <dr/sp/detail.hpp>
    +
    7#include <dr/sp/init.hpp>
    +
    8#include <dr/sp/util.hpp>
    +
    9
    +
    10namespace dr::sp {
    +
    11
    +
    25template <class ExecutionPolicy>
    +
    26auto transform(ExecutionPolicy &&policy, dr::distributed_range auto &&in,
    +
    27 dr::distributed_iterator auto out, auto &&fn) {
    +
    28
    +
    29 static_assert( // currently only one policy supported
    +
    30 std::is_same_v<std::remove_cvref_t<ExecutionPolicy>, device_policy>);
    +
    31
    +
    32 std::vector<sycl::event> events;
    +
    33 using OutT = typename decltype(out)::value_type;
    +
    34 std::vector<void *> buffers;
    +
    35 const auto out_end = out + rng::size(in);
    +
    36
    +
    37 for (auto &&[in_seg, out_seg] :
    +
    38 views::zip(in, rng::subrange(out, out_end)).zipped_segments()) {
    +
    39 auto in_device = policy.get_devices()[in_seg.rank()];
    +
    40 auto &&q = __detail::queue(dr::ranges::rank(in_seg));
    +
    41 const std::size_t seg_size = rng::size(in_seg);
    +
    42 assert(seg_size == rng::size(out_seg));
    +
    43 auto local_in_seg = __detail::local(in_seg);
    +
    44
    +
    45 if (in_seg.rank() == out_seg.rank()) {
    +
    46 auto local_out_seg = __detail::local(out_seg);
    +
    47 events.emplace_back(q.parallel_for(seg_size, [=](auto idx) {
    +
    48 local_out_seg[idx] = fn(local_in_seg[idx]);
    +
    49 }));
    +
    50 } else {
    +
    51 OutT *buffer =
    +
    52 sycl::malloc_device<OutT>(seg_size, in_device, dr::sp::context());
    +
    53 buffers.push_back(buffer);
    +
    54
    +
    55 sycl::event compute_event = q.parallel_for(
    +
    56 seg_size, [=](auto idx) { buffer[idx] = fn(local_in_seg[idx]); });
    +
    57 events.emplace_back(q.copy(buffer, __detail::local(out_seg.begin()),
    +
    58 seg_size, compute_event));
    +
    59 }
    +
    60 }
    +
    61 __detail::wait(events);
    +
    62
    +
    63 for (auto *b : buffers)
    +
    64 sycl::free(b, dr::sp::context());
    +
    65
    +
    66 return rng::unary_transform_result<decltype(rng::end(in)), decltype(out_end)>{
    +
    67 rng::end(in), out_end};
    +
    68}
    +
    69
    +
    70template <dr::distributed_range R, dr::distributed_iterator Iter, typename Fn>
    +
    71auto transform(R &&in, Iter out, Fn &&fn) {
    +
    72 return transform(dr::sp::par_unseq, std::forward<R>(in),
    +
    73 std::forward<Iter>(out), std::forward<Fn>(fn));
    +
    74}
    +
    75
    +
    76template <typename ExecutionPolicy, dr::distributed_iterator Iter1,
    +
    77 dr::distributed_iterator Iter2, typename Fn>
    +
    78auto transform(ExecutionPolicy &&policy, Iter1 in_begin, Iter1 in_end,
    +
    79 Iter2 out_end, Fn &&fn) {
    +
    80 return transform(
    +
    81 std::forward<ExecutionPolicy>(policy),
    +
    82 rng::subrange(std::forward<Iter1>(in_begin), std::forward<Iter1>(in_end)),
    +
    83 std::forward<Iter2>(out_end), std::forward<Fn>(fn));
    +
    84}
    +
    85
    + +
    87 typename Fn>
    +
    88auto transform(Iter1 in_begin, Iter1 in_end, Iter2 out_end, Fn &&fn) {
    +
    89 return transform(dr::sp::par_unseq, std::forward<Iter1>(in_begin),
    +
    90 std::forward<Iter1>(in_end), std::forward<Iter2>(out_end),
    +
    91 std::forward<Fn>(fn));
    +
    92}
    +
    93
    +
    94} // namespace dr::sp
    +
    Definition: concepts.hpp:31
    +
    Definition: concepts.hpp:20
    +
    + + + + diff --git a/doxygen/sp_2distributed__vector_8hpp_source.html b/doxygen/sp_2distributed__vector_8hpp_source.html new file mode 100644 index 0000000000..da516949fa --- /dev/null +++ b/doxygen/sp_2distributed__vector_8hpp_source.html @@ -0,0 +1,305 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/distributed_vector.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    distributed_vector.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <vector>
    +
    8
    +
    9#include <sycl/sycl.hpp>
    +
    10
    +
    11#include <dr/detail/segments_tools.hpp>
    +
    12#include <dr/sp/allocators.hpp>
    +
    13#include <dr/sp/device_ptr.hpp>
    +
    14#include <dr/sp/device_vector.hpp>
    +
    15#include <dr/sp/vector.hpp>
    +
    16
    +
    17namespace dr::sp {
    +
    18
    +
    19template <typename T, typename L> class distributed_vector_accessor {
    +
    20public:
    +
    21 using element_type = T;
    +
    22 using value_type = std::remove_cv_t<T>;
    +
    23
    +
    24 using segment_type = L;
    +
    25 using const_segment_type = std::add_const_t<L>;
    +
    26 using nonconst_segment_type = std::remove_const_t<L>;
    +
    27
    +
    28 using size_type = std::size_t;
    +
    29 using difference_type = std::ptrdiff_t;
    +
    30
    +
    31 // using pointer = typename segment_type::pointer;
    +
    32 using reference = rng::range_reference_t<segment_type>;
    +
    33
    +
    34 using iterator_category = std::random_access_iterator_tag;
    +
    35
    + + + +
    39
    +
    40 constexpr distributed_vector_accessor() noexcept = default;
    +
    41 constexpr ~distributed_vector_accessor() noexcept = default;
    + +
    43 const distributed_vector_accessor &) noexcept = default;
    + +
    45 operator=(const distributed_vector_accessor &) noexcept = default;
    +
    46
    +
    47 constexpr distributed_vector_accessor(std::span<segment_type> segments,
    +
    48 size_type segment_id, size_type idx,
    +
    49 size_type segment_size) noexcept
    +
    50 : segments_(segments), segment_id_(segment_id), idx_(idx),
    +
    51 segment_size_(segment_size) {}
    +
    52
    + +
    54 operator+=(difference_type offset) noexcept {
    +
    55 if (offset > 0) {
    +
    56 idx_ += offset;
    +
    57 if (idx_ >= segment_size_) {
    +
    58 segment_id_ += idx_ / segment_size_;
    +
    59 idx_ = idx_ % segment_size_;
    +
    60 }
    +
    61 }
    +
    62
    +
    63 if (offset < 0) {
    +
    64 size_type new_global_idx = get_global_idx() + offset;
    +
    65 segment_id_ = new_global_idx / segment_size_;
    +
    66 idx_ = new_global_idx % segment_size_;
    +
    67 }
    +
    68 return *this;
    +
    69 }
    +
    70
    +
    71 constexpr bool operator==(const iterator_accessor &other) const noexcept {
    +
    72 return segment_id_ == other.segment_id_ && idx_ == other.idx_;
    +
    73 }
    +
    74
    +
    75 constexpr difference_type
    +
    76 operator-(const iterator_accessor &other) const noexcept {
    +
    77 return difference_type(get_global_idx()) - other.get_global_idx();
    +
    78 }
    +
    79
    +
    80 constexpr bool operator<(const iterator_accessor &other) const noexcept {
    +
    81 if (segment_id_ < other.segment_id_) {
    +
    82 return true;
    +
    83 } else if (segment_id_ == other.segment_id_) {
    +
    84 return idx_ < other.idx_;
    +
    85 } else {
    +
    86 return false;
    +
    87 }
    +
    88 }
    +
    89
    +
    90 constexpr reference operator*() const noexcept {
    +
    91 return segments_[segment_id_][idx_];
    +
    92 }
    +
    93
    +
    94 auto segments() const noexcept {
    +
    95 return dr::__detail::drop_segments(segments_, segment_id_, idx_);
    +
    96 }
    +
    97
    +
    98private:
    +
    99 size_type get_global_idx() const noexcept {
    +
    100 return segment_id_ * segment_size_ + idx_;
    +
    101 }
    +
    102
    +
    103 std::span<segment_type> segments_;
    +
    104 size_type segment_id_ = 0;
    +
    105 size_type idx_ = 0;
    +
    106 size_type segment_size_ = 0;
    +
    107};
    +
    108
    +
    109template <typename T, typename L>
    + + +
    112
    +
    113// TODO: support teams, distributions
    +
    114
    +
    116template <typename T, typename Allocator = dr::sp::device_allocator<T>>
    + +
    118public:
    + +
    120 using const_segment_type =
    +
    121 std::add_const_t<dr::sp::device_vector<T, Allocator>>;
    +
    122
    +
    123 using value_type = T;
    +
    124 using size_type = std::size_t;
    +
    125 using difference_type = std::ptrdiff_t;
    +
    126
    +
    127 using pointer = decltype(std::declval<segment_type>().data());
    +
    128 using const_pointer =
    +
    129 decltype(std::declval<std::add_const_t<segment_type>>().data());
    +
    130
    +
    131 using reference = std::iter_reference_t<pointer>;
    +
    132 using const_reference = std::iter_reference_t<const_pointer>;
    +
    133
    + +
    135 using const_iterator =
    + +
    137 using allocator_type = Allocator;
    +
    138
    +
    139 distributed_vector(std::size_t count = 0) {
    +
    140 assert(dr::sp::devices().size() > 0);
    +
    141 size_ = count;
    +
    142 segment_size_ =
    +
    143 (count + dr::sp::devices().size() - 1) / dr::sp::devices().size();
    +
    144 capacity_ = segment_size_ * dr::sp::devices().size();
    +
    145
    +
    146 std::size_t rank = 0;
    +
    147 for (auto &&device : dr::sp::devices()) {
    +
    148 segments_.emplace_back(segment_type(
    +
    149 segment_size_, Allocator(dr::sp::context(), device), rank++));
    +
    150 }
    +
    151 }
    +
    152
    +
    153 distributed_vector(std::size_t count, const T &value)
    +
    154 : distributed_vector(count) {
    +
    155 dr::sp::fill(*this, value);
    +
    156 }
    +
    157
    +
    158 distributed_vector(std::initializer_list<T> init)
    +
    159 : distributed_vector(init.size()) {
    +
    160 dr::sp::copy(rng::begin(init), rng::end(init), begin());
    +
    161 }
    +
    162
    +
    163 reference operator[](size_type pos) {
    +
    164 size_type segment_id = pos / segment_size_;
    +
    165 size_type local_id = pos % segment_size_;
    +
    166 return *(segments_[segment_id].begin() + local_id);
    +
    167 }
    +
    168
    +
    169 const_reference operator[](size_type pos) const {
    +
    170 size_type segment_id = pos / segment_size_;
    +
    171 size_type local_id = pos % segment_size_;
    +
    172 return *(segments_[segment_id].begin() + local_id);
    +
    173 }
    +
    174
    +
    175 size_type size() const noexcept { return size_; }
    +
    176
    +
    177 auto segments() { return dr::__detail::take_segments(segments_, size()); }
    +
    178
    +
    179 auto segments() const {
    +
    180 return dr::__detail::take_segments(segments_, size());
    +
    181 }
    +
    182
    +
    183 iterator begin() { return iterator(segments_, 0, 0, segment_size_); }
    +
    184
    +
    185 const_iterator begin() const {
    +
    186 return const_iterator(segments_, 0, 0, segment_size_);
    +
    187 }
    +
    188
    +
    189 iterator end() {
    +
    190 return size_ ? iterator(segments_, size() / segment_size_,
    +
    191 size() % segment_size_, segment_size_)
    +
    192 : begin();
    +
    193 }
    +
    194
    +
    195 const_iterator end() const {
    +
    196 return size_ ? const_iterator(segments_, size() / segment_size_,
    +
    197 size() % segment_size_, segment_size_)
    +
    198 : begin();
    +
    199 }
    +
    200
    +
    201 void resize(size_type count, const value_type &value) {
    +
    202 distributed_vector<T, Allocator> other(count, value);
    +
    203 std::size_t copy_size = std::min(other.size(), size());
    +
    204 dr::sp::copy(begin(), begin() + copy_size, other.begin());
    +
    205 *this = std::move(other);
    +
    206 }
    +
    207
    +
    208 void resize(size_type count) { resize(count, value_type{}); }
    +
    209
    +
    210private:
    +
    211 std::vector<segment_type> segments_;
    +
    212 std::size_t capacity_ = 0;
    +
    213 std::size_t size_ = 0;
    +
    214 std::size_t segment_size_ = 0;
    +
    215};
    +
    216
    +
    217} // namespace dr::sp
    +
    Definition: iterator_adaptor.hpp:23
    +
    Definition: device_vector.hpp:13
    +
    Definition: distributed_vector.hpp:19
    +
    distributed vector
    Definition: distributed_vector.hpp:117
    +
    + + + + diff --git a/doxygen/sp_2views_2enumerate_8hpp_source.html b/doxygen/sp_2views_2enumerate_8hpp_source.html new file mode 100644 index 0000000000..557e3c2ab0 --- /dev/null +++ b/doxygen/sp_2views_2enumerate_8hpp_source.html @@ -0,0 +1,144 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/views/enumerate.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    enumerate.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <dr/sp/zip_view.hpp>
    +
    8
    +
    9namespace dr::sp {
    +
    10
    +
    11namespace views {
    +
    12
    +
    13namespace {
    +
    14
    +
    15template <rng::range R> struct range_size {
    +
    16 using type = std::size_t;
    +
    17};
    +
    18
    +
    19template <rng::sized_range R> struct range_size<R> {
    +
    20 using type = rng::range_size_t<R>;
    +
    21};
    +
    22
    +
    23template <rng::range R> using range_size_t = typename range_size<R>::type;
    +
    24
    +
    25} // namespace
    +
    26
    + +
    28public:
    +
    29 template <rng::viewable_range R>
    +
    30 requires(rng::sized_range<R>)
    +
    31 auto operator()(R &&r) const {
    +
    32 using W = std::uint32_t;
    +
    33 return dr::sp::zip_view(rng::views::iota(W(0), W(rng::size(r))),
    +
    34 std::forward<R>(r));
    +
    35 }
    +
    36
    +
    37 template <rng::viewable_range R>
    +
    38 friend auto operator|(R &&r, const enumerate_adapter_closure &closure) {
    +
    39 return closure(std::forward<R>(r));
    +
    40 }
    +
    41};
    +
    42
    + +
    44public:
    +
    45 template <rng::viewable_range R> constexpr auto operator()(R &&r) const {
    +
    46 return enumerate_adapter_closure{}(std::forward<R>(r));
    +
    47 }
    +
    48
    +
    49 inline auto enumerate() const { return enumerate_adapter_closure{}; }
    +
    50};
    +
    51
    +
    52inline constexpr auto enumerate = enumerate_fn_{};
    +
    53
    +
    54} // namespace views
    +
    55
    +
    56} // namespace dr::sp
    +
    Definition: enumerate.hpp:27
    +
    Definition: enumerate.hpp:43
    +
    zip
    Definition: zip_view.hpp:108
    +
    + + + + diff --git a/doxygen/sp_2views_2views_8hpp_source.html b/doxygen/sp_2views_2views_8hpp_source.html new file mode 100644 index 0000000000..5a5b89b618 --- /dev/null +++ b/doxygen/sp_2views_2views_8hpp_source.html @@ -0,0 +1,111 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/views/views.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    views.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <dr/sp/views/standard_views.hpp>
    +
    8#include <dr/views/iota.hpp>
    +
    9#include <dr/views/transform.hpp>
    +
    10#include <dr/views/views.hpp>
    +
    11
    +
    12namespace dr::sp::views {
    +
    13
    +
    14inline constexpr auto all = rng::views::all;
    +
    15
    +
    16inline constexpr auto counted = rng::views::counted;
    +
    17
    +
    18inline constexpr auto drop = rng::views::drop;
    +
    19
    +
    20inline constexpr auto iota = dr::views::iota;
    +
    21
    +
    22inline constexpr auto take = rng::views::take;
    +
    23
    +
    24inline constexpr auto transform = dr::views::transform;
    +
    25
    +
    26} // namespace dr::sp::views
    +
    + + + + diff --git a/doxygen/sp_8hpp_source.html b/doxygen/sp_8hpp_source.html new file mode 100644 index 0000000000..ac6e111557 --- /dev/null +++ b/doxygen/sp_8hpp_source.html @@ -0,0 +1,105 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    sp.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <dr/detail/logger.hpp>
    +
    8#include <dr/sp/algorithms/algorithms.hpp>
    +
    9#include <dr/sp/containers/distributed_dense_matrix.hpp>
    +
    10#include <dr/sp/containers/sparse_matrix.hpp>
    +
    11#include <dr/sp/detail.hpp>
    +
    12#include <dr/sp/distributed_span.hpp>
    +
    13#include <dr/sp/distributed_vector.hpp>
    +
    14#include <dr/sp/init.hpp>
    +
    15#include <dr/sp/range.hpp>
    +
    16#include <dr/sp/range_adaptors.hpp>
    +
    17#include <dr/sp/util.hpp>
    +
    18#include <dr/sp/util/matrix_io.hpp>
    +
    19#include <dr/sp/views/views.hpp>
    +
    20#include <dr/views/views.hpp>
    +
    + + + + diff --git a/doxygen/span_8hpp_source.html b/doxygen/span_8hpp_source.html new file mode 100644 index 0000000000..c034e42c8c --- /dev/null +++ b/doxygen/span_8hpp_source.html @@ -0,0 +1,148 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/span.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    span.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <iterator>
    +
    8
    +
    9#include <dr/detail/ranges_shim.hpp>
    +
    10
    +
    11namespace dr::sp {
    +
    12
    +
    13template <typename T, rng::random_access_iterator Iter = T *>
    +
    14class span : public rng::view_interface<dr::sp::span<T, Iter>> {
    +
    15public:
    +
    16 static_assert(std::is_same_v<std::iter_value_t<Iter>, T>);
    +
    17
    +
    18 using value_type = std::iter_value_t<Iter>;
    +
    19 using size_type = std::size_t;
    +
    20 using difference_type = std::iter_difference_t<Iter>;
    +
    21 using reference = std::iter_reference_t<Iter>;
    +
    22 using iterator = Iter;
    +
    23
    +
    24 template <rng::random_access_range R>
    +
    25 span(R &&r) : begin_(rng::begin(r)), end_(rng::end(r)) {}
    +
    26 span(Iter first, Iter last) : begin_(first), end_(last) {}
    +
    27 span(Iter first, std::size_t count) : begin_(first), end_(first + count) {}
    +
    28
    +
    29 span() = default;
    +
    30 span(const span &) noexcept = default;
    +
    31 span &operator=(const span &) noexcept = default;
    +
    32
    +
    33 std::size_t size() const noexcept { return std::size_t(end() - begin()); }
    +
    34
    +
    35 bool empty() const noexcept { return size() == 0; }
    +
    36
    +
    37 Iter begin() const noexcept { return begin_; }
    +
    38
    +
    39 Iter end() const noexcept { return end_; }
    +
    40
    +
    41 reference operator[](size_type index) const { return *(begin() + index); }
    +
    42
    +
    43 span first(size_type n) const { return span(begin(), begin() + n); }
    +
    44
    +
    45 span last(size_type n) const { return span(end() - n, end()); }
    +
    46
    +
    47 span subspan(std::size_t offset, std::size_t count) const {
    +
    48 return span(begin() + offset, begin() + offset + count);
    +
    49 }
    +
    50
    +
    51private:
    +
    52 Iter begin_, end_;
    +
    53};
    +
    54
    +
    55template <rng::random_access_range R>
    +
    56span(R &&) -> span<rng::range_value_t<R>, rng::iterator_t<R>>;
    +
    57
    +
    58template <rng::random_access_iterator Iter>
    +
    59span(Iter first, std::size_t count) -> span<std::iter_value_t<Iter>, Iter>;
    +
    60
    +
    61} // namespace dr::sp
    +
    Definition: index.hpp:34
    +
    Definition: span.hpp:14
    +
    + + + + diff --git a/doxygen/sparse__matrix_8hpp_source.html b/doxygen/sparse__matrix_8hpp_source.html new file mode 100644 index 0000000000..83b44c394c --- /dev/null +++ b/doxygen/sparse__matrix_8hpp_source.html @@ -0,0 +1,522 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/containers/sparse_matrix.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    sparse_matrix.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <dr/detail/index.hpp>
    +
    8#include <dr/sp/algorithms/copy.hpp>
    +
    9#include <dr/sp/containers/matrix_entry.hpp>
    +
    10#include <dr/sp/containers/matrix_partition.hpp>
    +
    11#include <dr/sp/device_vector.hpp>
    +
    12#include <dr/sp/distributed_span.hpp>
    +
    13#include <dr/sp/init.hpp>
    +
    14#include <dr/sp/util/generate_random.hpp>
    +
    15#include <dr/sp/views/csr_matrix_view.hpp>
    +
    16#include <iterator>
    +
    17
    +
    18namespace dr::sp {
    +
    19
    +
    20template <rng::random_access_range Segments>
    +
    21 requires(rng::viewable_range<Segments>)
    + +
    23public:
    +
    24 using segment_type = rng::range_value_t<Segments>;
    +
    25
    +
    26 using value_type = rng::range_value_t<segment_type>;
    +
    27
    +
    28 using size_type = rng::range_size_t<segment_type>;
    +
    29 using difference_type = rng::range_difference_t<segment_type>;
    +
    30
    +
    31 using reference = rng::range_reference_t<segment_type>;
    +
    32
    +
    33 using iterator_category = std::random_access_iterator_tag;
    +
    34
    + + + +
    38
    +
    39 constexpr distributed_range_accessor() noexcept = default;
    +
    40 constexpr ~distributed_range_accessor() noexcept = default;
    + +
    42 const distributed_range_accessor &) noexcept = default;
    + +
    44 operator=(const distributed_range_accessor &) noexcept = default;
    +
    45
    +
    46 constexpr distributed_range_accessor(Segments segments, size_type segment_id,
    +
    47 size_type idx) noexcept
    +
    48 : segments_(rng::views::all(std::forward<Segments>(segments))),
    +
    49 segment_id_(segment_id), idx_(idx) {
    +
    50 while (idx_ >= rng::size((*(segments_.begin() + segment_id_))) &&
    +
    51 segment_id_ < rng::size(segments_)) {
    +
    52 segment_id_++;
    +
    53 idx_ = 0;
    +
    54 }
    +
    55 }
    +
    56
    + +
    58 operator+=(difference_type offset) noexcept {
    +
    59
    +
    60 while (offset > 0) {
    +
    61 difference_type current_offset = std::min(
    +
    62 offset,
    +
    63 difference_type(rng::size(*(segments_.begin() + segment_id_))) -
    +
    64 difference_type(idx_));
    +
    65 idx_ += current_offset;
    +
    66 offset -= current_offset;
    +
    67
    +
    68 while (idx_ >= rng::size((*(segments_.begin() + segment_id_))) &&
    +
    69 segment_id_ < rng::size(segments_)) {
    +
    70 segment_id_++;
    +
    71 idx_ = 0;
    +
    72 }
    +
    73 }
    +
    74
    +
    75 while (offset < 0) {
    +
    76 difference_type current_offset =
    +
    77 std::min(-offset, difference_type(idx_) + 1);
    +
    78
    +
    79 difference_type new_idx = difference_type(idx_) - current_offset;
    +
    80
    +
    81 while (new_idx < 0 && segment_id_ > 0) {
    +
    82 segment_id_--;
    +
    83 new_idx = rng::size(*(segments_.begin() + segment_id_)) - 1;
    +
    84 }
    +
    85
    +
    86 idx_ = new_idx;
    +
    87 offset += current_offset;
    +
    88 }
    +
    89
    +
    90 assert(offset == 0);
    +
    91 return *this;
    +
    92 }
    +
    93
    +
    94 constexpr bool operator==(const iterator_accessor &other) const noexcept {
    +
    95 return segment_id_ == other.segment_id_ && idx_ == other.idx_;
    +
    96 }
    +
    97
    +
    98 constexpr difference_type
    +
    99 operator-(const iterator_accessor &other) const noexcept {
    +
    100 return difference_type(get_global_idx()) - other.get_global_idx();
    +
    101 }
    +
    102
    +
    103 constexpr bool operator<(const iterator_accessor &other) const noexcept {
    +
    104 if (segment_id_ < other.segment_id_) {
    +
    105 return true;
    +
    106 } else if (segment_id_ == other.segment_id_) {
    +
    107 return idx_ < other.idx_;
    +
    108 } else {
    +
    109 return false;
    +
    110 }
    +
    111 }
    +
    112
    +
    113 constexpr reference operator*() const noexcept {
    +
    114 return *((*(segments_.begin() + segment_id_)).begin() + idx_);
    +
    115 }
    +
    116
    +
    117private:
    +
    118 size_type get_global_idx() const noexcept {
    +
    119 size_type cumulative_size = 0;
    +
    120 for (std::size_t i = 0; i < segment_id_; i++) {
    +
    121 cumulative_size += segments_[i].size();
    +
    122 }
    +
    123 return cumulative_size + idx_;
    +
    124 }
    +
    125
    +
    126 rng::views::all_t<Segments> segments_;
    +
    127 size_type segment_id_ = 0;
    +
    128 size_type idx_ = 0;
    +
    129};
    +
    130
    +
    131template <typename Segments>
    + + +
    134
    +
    135template <typename T, std::integral I = std::int64_t> class sparse_matrix {
    +
    136public:
    +
    137 using size_type = std::size_t;
    +
    138 using difference_type = std::ptrdiff_t;
    +
    139
    + +
    141
    +
    142 using scalar_reference = rng::range_reference_t<
    + +
    144 using const_scalar_reference = rng::range_reference_t<
    + +
    146
    + + +
    149
    +
    150 using key_type = dr::index<I>;
    +
    151
    + +
    153 T, I,
    +
    154 rng::iterator_t<dr::sp::device_vector<T, dr::sp::device_allocator<T>>>,
    +
    155 rng::iterator_t<dr::sp::device_vector<I, dr::sp::device_allocator<I>>>>;
    +
    156
    +
    157 // using iterator = sparse_matrix_iterator<T, dr::sp::device_vector<T,
    +
    158 // dr::sp::device_allocator<T>>>;
    +
    159 using iterator =
    + +
    161
    + +
    163 : shape_(shape), partition_(default_partition_()) {
    +
    164 init_();
    +
    165 }
    +
    166
    +
    167 sparse_matrix(key_type shape, double density)
    +
    168 : shape_(shape), partition_(default_partition_()) {
    +
    169 init_random_(density);
    +
    170 }
    +
    171
    +
    172 sparse_matrix(key_type shape, double density,
    +
    173 const matrix_partition &partition)
    +
    174 : shape_(shape), partition_(partition.clone()) {
    +
    175 init_random_(density);
    +
    176 }
    +
    177
    +
    178 sparse_matrix(key_type shape, const matrix_partition &partition)
    +
    179 : shape_(shape), partition_(partition.clone()) {
    +
    180 init_();
    +
    181 }
    +
    182
    +
    183 size_type size() const noexcept { return total_nnz_; }
    +
    184
    +
    185 key_type shape() const noexcept { return shape_; }
    +
    186
    +
    187 iterator begin() { return iterator(segments(), 0, 0); }
    +
    188
    +
    189 iterator end() {
    +
    190 return iterator(segments(), grid_shape_[0] * grid_shape_[1], 0);
    +
    191 }
    +
    192
    +
    193 segment_type tile(key_type tile_index) {
    +
    194 std::size_t tile_idx = tile_index[0] * grid_shape_[1] + tile_index[1];
    +
    195 auto values = values_[tile_idx].begin();
    +
    196 auto rowptr = rowptr_[tile_idx].begin();
    +
    197 auto colind = colind_[tile_idx].begin();
    +
    198 auto nnz = nnz_[tile_idx];
    +
    199
    +
    200 std::size_t tm =
    +
    201 std::min(tile_shape_[0], shape()[0] - tile_index[0] * tile_shape_[0]);
    +
    202 std::size_t tn =
    +
    203 std::min(tile_shape_[1], shape()[1] - tile_index[1] * tile_shape_[1]);
    +
    204
    +
    205 return segment_type(values, rowptr, colind, key_type(tm, tn), nnz,
    +
    206 values_[tile_idx].rank());
    +
    207 }
    +
    208
    +
    209 // Note: this function is currently *not* asynchronous due to a deadlock
    +
    210 // in `gemv_benchmark`. I believe this is a SYCL bug.
    +
    211 template <typename... Args>
    +
    212 auto copy_tile_async(key_type tile_index,
    + +
    214 std::size_t tile_idx = tile_index[0] * grid_shape_[1] + tile_index[1];
    +
    215 auto &&values = values_[tile_idx];
    +
    216 auto &&colind = colind_[tile_idx];
    +
    217 auto &&rowptr = rowptr_[tile_idx];
    +
    218 auto &&nnz = nnz_[tile_idx];
    +
    219
    +
    220 total_nnz_ -= nnz;
    +
    221 nnz = tile_view.size();
    +
    222
    +
    223 total_nnz_ += tile_view.size();
    +
    224
    +
    225 values.resize(tile_view.size());
    +
    226 colind.resize(tile_view.size());
    +
    227 rowptr.resize(tile_view.shape()[0] + 1);
    +
    228
    +
    229 auto v_e = dr::sp::copy_async(tile_view.values_data(),
    +
    230 tile_view.values_data() + values.size(),
    +
    231 values.data());
    +
    232
    +
    233 auto c_e = dr::sp::copy_async(tile_view.colind_data(),
    +
    234 tile_view.colind_data() + colind.size(),
    +
    235 colind.data());
    +
    236
    +
    237 auto r_e = dr::sp::copy_async(tile_view.rowptr_data(),
    +
    238 tile_view.rowptr_data() + rowptr.size(),
    +
    239 rowptr.data());
    +
    240
    +
    241 tiles_ = generate_tiles_();
    +
    242 segments_ = generate_segments_();
    +
    243
    +
    244 v_e.wait();
    +
    245 c_e.wait();
    +
    246 r_e.wait();
    +
    247
    +
    248 return __detail::combine_events({v_e, c_e, r_e});
    +
    249 }
    +
    250
    +
    251 template <typename... Args>
    +
    252 void copy_tile(key_type tile_index,
    + +
    254 copy_tile_async(tile_index, tile_view).wait();
    +
    255 }
    +
    256
    +
    257 key_type tile_shape() const noexcept { return tile_shape_; }
    +
    258
    +
    259 key_type grid_shape() const noexcept { return grid_shape_; }
    +
    260
    +
    261 std::span<segment_type> tiles() { return std::span(tiles_); }
    +
    262
    +
    263 std::span<segment_type> segments() { return std::span(segments_); }
    +
    264
    +
    265private:
    +
    266 std::vector<segment_type> generate_tiles_() {
    +
    267 std::vector<segment_type> views_;
    +
    268
    +
    269 for (std::size_t i = 0; i < grid_shape_[0]; i++) {
    +
    270 for (std::size_t j = 0; j < grid_shape_[1]; j++) {
    +
    271 std::size_t tm = std::min<std::size_t>(tile_shape_[0],
    +
    272 shape()[0] - i * tile_shape_[0]);
    +
    273 std::size_t tn = std::min<std::size_t>(tile_shape_[1],
    +
    274 shape()[1] - j * tile_shape_[1]);
    +
    275
    +
    276 std::size_t tile_idx = i * grid_shape_[1] + j;
    +
    277
    +
    278 auto values = values_[tile_idx].begin();
    +
    279 auto rowptr = rowptr_[tile_idx].begin();
    +
    280 auto colind = colind_[tile_idx].begin();
    +
    281 auto nnz = nnz_[tile_idx];
    +
    282
    +
    283 views_.emplace_back(values, rowptr, colind, key_type(tm, tn), nnz,
    +
    284 values_[tile_idx].rank());
    +
    285 }
    +
    286 }
    +
    287 return views_;
    +
    288 }
    +
    289
    +
    290 std::vector<segment_type> generate_segments_() {
    +
    291 std::vector<segment_type> views_;
    +
    292
    +
    293 for (std::size_t i = 0; i < grid_shape_[0]; i++) {
    +
    294 for (std::size_t j = 0; j < grid_shape_[1]; j++) {
    +
    295 std::size_t tm = std::min<std::size_t>(tile_shape_[0],
    +
    296 shape()[0] - i * tile_shape_[0]);
    +
    297 std::size_t tn = std::min<std::size_t>(tile_shape_[1],
    +
    298 shape()[1] - j * tile_shape_[1]);
    +
    299
    +
    300 std::size_t tile_idx = i * grid_shape_[1] + j;
    +
    301
    +
    302 auto values = values_[tile_idx].begin();
    +
    303 auto rowptr = rowptr_[tile_idx].begin();
    +
    304 auto colind = colind_[tile_idx].begin();
    +
    305 auto nnz = nnz_[tile_idx];
    +
    306
    +
    307 std::size_t m_offset = i * tile_shape_[0];
    +
    308 std::size_t n_offset = j * tile_shape_[1];
    +
    309
    +
    310 views_.emplace_back(values, rowptr, colind, key_type(tm, tn), nnz,
    +
    311 values_[i * grid_shape_[1] + j].rank(),
    +
    312 key_type(m_offset, n_offset));
    +
    313 }
    +
    314 }
    +
    315 return views_;
    +
    316 }
    +
    317
    +
    318private:
    +
    319 void init_() {
    +
    320 grid_shape_ = key_type(partition_->grid_shape(shape()));
    +
    321 tile_shape_ = key_type(partition_->tile_shape(shape()));
    +
    322
    +
    323 values_.reserve(grid_shape_[0] * grid_shape_[1]);
    +
    324 rowptr_.reserve(grid_shape_[0] * grid_shape_[1]);
    +
    325 colind_.reserve(grid_shape_[0] * grid_shape_[1]);
    +
    326 nnz_.reserve(grid_shape_[0] * grid_shape_[1]);
    +
    327
    +
    328 for (std::size_t i = 0; i < grid_shape_[0]; i++) {
    +
    329 for (std::size_t j = 0; j < grid_shape_[1]; j++) {
    +
    330 std::size_t rank = partition_->tile_rank(shape(), {i, j});
    +
    331
    +
    332 auto device = dr::sp::devices()[rank];
    +
    333 dr::sp::device_allocator<T> alloc(dr::sp::context(), device);
    +
    334 dr::sp::device_allocator<I> i_alloc(dr::sp::context(), device);
    +
    335
    +
    336 values_.emplace_back(1, alloc, rank);
    +
    337 rowptr_.emplace_back(2, i_alloc, rank);
    +
    338 colind_.emplace_back(1, i_alloc, rank);
    +
    339 nnz_.push_back(0);
    +
    340 rowptr_.back()[0] = 0;
    +
    341 rowptr_.back()[1] = 0;
    +
    342 }
    +
    343 }
    +
    344 tiles_ = generate_tiles_();
    +
    345 segments_ = generate_segments_();
    +
    346 }
    +
    347
    +
    348 void init_random_(double density) {
    +
    349 grid_shape_ = key_type(partition_->grid_shape(shape()));
    +
    350 tile_shape_ = key_type(partition_->tile_shape(shape()));
    +
    351
    +
    352 values_.reserve(grid_shape_[0] * grid_shape_[1]);
    +
    353 rowptr_.reserve(grid_shape_[0] * grid_shape_[1]);
    +
    354 colind_.reserve(grid_shape_[0] * grid_shape_[1]);
    +
    355 nnz_.reserve(grid_shape_[0] * grid_shape_[1]);
    +
    356
    +
    357 for (std::size_t i = 0; i < grid_shape_[0]; i++) {
    +
    358 for (std::size_t j = 0; j < grid_shape_[1]; j++) {
    +
    359 std::size_t rank = partition_->tile_rank(shape(), {i, j});
    +
    360
    +
    361 std::size_t tm = std::min<std::size_t>(tile_shape_[0],
    +
    362 shape()[0] - i * tile_shape_[0]);
    +
    363 std::size_t tn = std::min<std::size_t>(tile_shape_[1],
    +
    364 shape()[1] - j * tile_shape_[1]);
    +
    365
    +
    366 auto device = dr::sp::devices()[rank];
    +
    367 dr::sp::device_allocator<T> alloc(dr::sp::context(), device);
    +
    368 dr::sp::device_allocator<I> i_alloc(dr::sp::context(), device);
    +
    369
    +
    370 auto seed = i * grid_shape_[1] + j;
    +
    371
    +
    372 auto csr = generate_random_csr<T, I>(key_type(tm, tn), density, seed);
    +
    373 std::size_t nnz = csr.size();
    +
    374
    + +
    376 csr.size(), alloc, rank);
    + +
    378 tm + 1, i_alloc, rank);
    +
    379
    + +
    381 csr.size(), i_alloc, rank);
    +
    382
    +
    383 dr::sp::copy(csr.values_data(), csr.values_data() + csr.size(),
    +
    384 values.data());
    +
    385 dr::sp::copy(csr.rowptr_data(), csr.rowptr_data() + tm + 1,
    +
    386 rowptr.data());
    +
    387 dr::sp::copy(csr.colind_data(), csr.colind_data() + csr.size(),
    +
    388 colind.data());
    +
    389
    +
    390 values_.push_back(std::move(values));
    +
    391 rowptr_.emplace_back(std::move(rowptr));
    +
    392 colind_.emplace_back(std::move(colind));
    +
    393 nnz_.push_back(nnz);
    +
    394 total_nnz_ += nnz;
    +
    395
    +
    396 delete[] csr.values_data();
    +
    397 delete[] csr.rowptr_data();
    +
    398 delete[] csr.colind_data();
    +
    399 }
    +
    400 }
    +
    401 tiles_ = generate_tiles_();
    +
    402 segments_ = generate_segments_();
    +
    403 }
    +
    404
    +
    405 std::unique_ptr<dr::sp::matrix_partition> default_partition_() {
    +
    406 auto ptr = dr::sp::row_cyclic();
    +
    407 return std::make_unique<dr::sp::block_cyclic>(ptr);
    +
    408 }
    +
    409
    +
    410private:
    +
    411 key_type shape_;
    +
    412 key_type grid_shape_;
    +
    413 key_type tile_shape_;
    +
    414 std::unique_ptr<dr::sp::matrix_partition> partition_;
    +
    415
    +
    416 std::vector<dr::sp::device_vector<T, dr::sp::device_allocator<T>>> values_;
    +
    417 std::vector<dr::sp::device_vector<I, dr::sp::device_allocator<I>>> rowptr_;
    +
    418 std::vector<dr::sp::device_vector<I, dr::sp::device_allocator<I>>> colind_;
    +
    419
    +
    420 std::vector<std::size_t> nnz_;
    +
    421 std::size_t total_nnz_ = 0;
    +
    422
    +
    423 std::vector<segment_type> tiles_;
    +
    424 std::vector<segment_type> segments_;
    +
    425};
    +
    426
    +
    427} // namespace dr::sp
    + +
    Definition: iterator_adaptor.hpp:23
    +
    Definition: csr_matrix_view.hpp:126
    +
    Definition: allocators.hpp:20
    +
    Definition: device_vector.hpp:13
    +
    Definition: sparse_matrix.hpp:22
    +
    Definition: matrix_entry.hpp:15
    +
    Definition: matrix_partition.hpp:23
    +
    Definition: matrix_entry.hpp:112
    +
    Definition: sparse_matrix.hpp:135
    +
    + + + + diff --git a/doxygen/splitbar.png b/doxygen/splitbar.png new file mode 100644 index 0000000000000000000000000000000000000000..fe895f2c58179b471a22d8320b39a4bd7312ec8e GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^Yzz!63>-{AmhX=Jf(#6djGiuzAr*{o?=JLmPLyc> z_*`QK&+BH@jWrYJ7>r6%keRM@)Qyv8R=enp0jiI>aWlGyB58O zFVR20d+y`K7vDw(hJF3;>dD*3-?v=<8M)@x|EEGLnJsniYK!2U1 Y!`|5biEc?d1`HDhPgg&ebxsLQ02F6;9RL6T literal 0 HcmV?d00001 diff --git a/doxygen/splitbard.png b/doxygen/splitbard.png new file mode 100644 index 0000000000000000000000000000000000000000..8367416d757fd7b6dc4272b6432dc75a75abd068 GIT binary patch literal 282 zcmeAS@N?(olHy`uVBq!ia0vp^Yzz!63>-{AmhX=Jf@VhhFKy35^fiT zT~&lUj3=cDh^%3HDY9k5CEku}PHXNoNC(_$U3XPb&Q*ME25pT;2(*BOgAf<+R$lzakPG`kF31()Fx{L5Wrac|GQzjeE= zueY1`Ze{#x<8=S|`~MgGetGce)#vN&|J{Cd^tS%;tBYTo?+^d68<#n_Y_xx`J||4O V@QB{^CqU0Kc)I$ztaD0e0svEzbJzd? literal 0 HcmV?d00001 diff --git a/doxygen/standard__views_8hpp_source.html b/doxygen/standard__views_8hpp_source.html new file mode 100644 index 0000000000..520845f030 --- /dev/null +++ b/doxygen/standard__views_8hpp_source.html @@ -0,0 +1,135 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/views/standard_views.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    standard_views.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <dr/detail/index.hpp>
    +
    8#include <dr/detail/segments_tools.hpp>
    +
    9#include <dr/sp/distributed_span.hpp>
    +
    10#include <dr/sp/views/enumerate.hpp>
    +
    11#include <dr/sp/zip_view.hpp>
    +
    12#include <dr/views/transform.hpp>
    +
    13
    +
    14namespace dr::sp {
    +
    15
    +
    16namespace views {
    +
    17
    +
    18template <dr::distributed_range R>
    +
    19auto slice(R &&r, dr::index<> slice_indices) {
    +
    20 return dr::sp::distributed_span(dr::ranges::segments(std::forward<R>(r)))
    +
    21 .subspan(slice_indices[0], slice_indices[1] - slice_indices[0]);
    +
    22}
    +
    23
    + +
    25public:
    +
    26 slice_adaptor_closure(dr::index<> slice_indices) : idx_(slice_indices) {}
    +
    27
    +
    28 template <rng::random_access_range R> auto operator()(R &&r) const {
    +
    29 return slice(std::forward<R>(r), idx_);
    +
    30 }
    +
    31
    +
    32 template <rng::random_access_range R>
    +
    33 friend auto operator|(R &&r, const slice_adaptor_closure &closure) {
    +
    34 return closure(std::forward<R>(r));
    +
    35 }
    +
    36
    +
    37private:
    +
    38 dr::index<> idx_;
    +
    39};
    +
    40
    +
    41inline auto slice(dr::index<> slice_indices) {
    +
    42 return slice_adaptor_closure(slice_indices);
    +
    43}
    +
    44
    +
    45} // namespace views
    +
    46
    +
    47} // namespace dr::sp
    +
    Definition: index.hpp:34
    +
    Definition: distributed_span.hpp:127
    +
    Definition: standard_views.hpp:24
    +
    + + + + diff --git a/doxygen/structdr_1_1default__memory-members.html b/doxygen/structdr_1_1default__memory-members.html new file mode 100644 index 0000000000..7be77f51e5 --- /dev/null +++ b/doxygen/structdr_1_1default__memory-members.html @@ -0,0 +1,96 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::default_memory< T > Member List
    +
    +
    + +

    This is the complete list of members for dr::default_memory< T >, including all inherited members.

    + + + + + + + + + +
    allocate(std::size_t size) (defined in dr::default_memory< T >)dr::default_memory< T >inline
    allocate(std::size_t size) (defined in dr::default_memory< T >)dr::default_memory< T >inline
    deallocate(T *p, std::size_t n) (defined in dr::default_memory< T >)dr::default_memory< T >inline
    deallocate(F *p, std::size_t n) (defined in dr::default_memory< T >)dr::default_memory< T >inline
    memcpy(void *dst, const void *src, std::size_t numBytes) (defined in dr::default_memory< T >)dr::default_memory< T >inline
    offload(F lambda) (defined in dr::default_memory< T >)dr::default_memory< T >inline
    std_allocator (defined in dr::default_memory< T >)dr::default_memory< T >
    value_type typedef (defined in dr::default_memory< T >)dr::default_memory< T >
    + + + + diff --git a/doxygen/structdr_1_1default__memory.html b/doxygen/structdr_1_1default__memory.html new file mode 100644 index 0000000000..af16cb71c9 --- /dev/null +++ b/doxygen/structdr_1_1default__memory.html @@ -0,0 +1,130 @@ + + + + + + + +Distributed Ranges: dr::default_memory< T > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::default_memory< T > Struct Template Reference
    +
    +
    + + + + +

    +Public Types

    +using value_type = T
     
    + + + + + + + + + + + + + + + + +

    +Public Member Functions

    +T * allocate (std::size_t size)
     
    +template<typename F >
    F * allocate (std::size_t size)
     
    +constexpr void deallocate (T *p, std::size_t n)
     
    +template<typename F >
    void deallocate (F *p, std::size_t n)
     
    +void memcpy (void *dst, const void *src, std::size_t numBytes)
     
    +template<typename F >
    void offload (F lambda)
     
    + + + +

    +Public Attributes

    +std::allocator< T > std_allocator
     
    +
    The documentation for this struct was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/detail/memory.hpp
    • +
    +
    + + + + diff --git a/doxygen/structdr_1_1is__drop__view.html b/doxygen/structdr_1_1is__drop__view.html new file mode 100644 index 0000000000..31ceb238ea --- /dev/null +++ b/doxygen/structdr_1_1is__drop__view.html @@ -0,0 +1,106 @@ + + + + + + + +Distributed Ranges: dr::is_drop_view< T > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::is_drop_view< T > Struct Template Reference
    +
    +
    +
    +Inheritance diagram for dr::is_drop_view< T >:
    +
    +
    Inheritance graph
    + + + + +
    [legend]
    +
    +Collaboration diagram for dr::is_drop_view< T >:
    +
    +
    Collaboration graph
    + + + + +
    [legend]
    +
    The documentation for this struct was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/detail/view_detectors.hpp
    • +
    +
    + + + + diff --git a/doxygen/structdr_1_1is__drop__view_3_01rng_1_1drop__view_3_01T_01_4_01_4.html b/doxygen/structdr_1_1is__drop__view_3_01rng_1_1drop__view_3_01T_01_4_01_4.html new file mode 100644 index 0000000000..6bfe3be4ee --- /dev/null +++ b/doxygen/structdr_1_1is__drop__view_3_01rng_1_1drop__view_3_01T_01_4_01_4.html @@ -0,0 +1,106 @@ + + + + + + + +Distributed Ranges: dr::is_drop_view< rng::drop_view< T > > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::is_drop_view< rng::drop_view< T > > Struct Template Reference
    +
    +
    +
    +Inheritance diagram for dr::is_drop_view< rng::drop_view< T > >:
    +
    +
    Inheritance graph
    + + + + +
    [legend]
    +
    +Collaboration diagram for dr::is_drop_view< rng::drop_view< T > >:
    +
    +
    Collaboration graph
    + + + + +
    [legend]
    +
    The documentation for this struct was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/detail/view_detectors.hpp
    • +
    +
    + + + + diff --git a/doxygen/structdr_1_1is__drop__view_3_01rng_1_1drop__view_3_01T_01_4_01_4__coll__graph.map b/doxygen/structdr_1_1is__drop__view_3_01rng_1_1drop__view_3_01T_01_4_01_4__coll__graph.map new file mode 100644 index 0000000000..5540ed652e --- /dev/null +++ b/doxygen/structdr_1_1is__drop__view_3_01rng_1_1drop__view_3_01T_01_4_01_4__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/structdr_1_1is__drop__view_3_01rng_1_1drop__view_3_01T_01_4_01_4__coll__graph.md5 b/doxygen/structdr_1_1is__drop__view_3_01rng_1_1drop__view_3_01T_01_4_01_4__coll__graph.md5 new file mode 100644 index 0000000000..14002e5a1c --- /dev/null +++ b/doxygen/structdr_1_1is__drop__view_3_01rng_1_1drop__view_3_01T_01_4_01_4__coll__graph.md5 @@ -0,0 +1 @@ +b2394a6f2e80c9ffb36ae43abecef95c \ No newline at end of file diff --git a/doxygen/structdr_1_1is__drop__view_3_01rng_1_1drop__view_3_01T_01_4_01_4__coll__graph.png b/doxygen/structdr_1_1is__drop__view_3_01rng_1_1drop__view_3_01T_01_4_01_4__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..2c791a562cd248325a8dbfba2b6cd7af0ef2e175 GIT binary patch literal 6419 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 literal 0 HcmV?d00001 diff --git a/doxygen/structdr_1_1is__drop__view_3_01rng_1_1drop__view_3_01T_01_4_01_4__inherit__graph.map b/doxygen/structdr_1_1is__drop__view_3_01rng_1_1drop__view_3_01T_01_4_01_4__inherit__graph.map new file mode 100644 index 0000000000..5540ed652e --- /dev/null +++ b/doxygen/structdr_1_1is__drop__view_3_01rng_1_1drop__view_3_01T_01_4_01_4__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/structdr_1_1is__drop__view_3_01rng_1_1drop__view_3_01T_01_4_01_4__inherit__graph.md5 b/doxygen/structdr_1_1is__drop__view_3_01rng_1_1drop__view_3_01T_01_4_01_4__inherit__graph.md5 new file mode 100644 index 0000000000..14002e5a1c --- /dev/null +++ b/doxygen/structdr_1_1is__drop__view_3_01rng_1_1drop__view_3_01T_01_4_01_4__inherit__graph.md5 @@ -0,0 +1 @@ +b2394a6f2e80c9ffb36ae43abecef95c \ No newline at end of file diff --git a/doxygen/structdr_1_1is__drop__view_3_01rng_1_1drop__view_3_01T_01_4_01_4__inherit__graph.png b/doxygen/structdr_1_1is__drop__view_3_01rng_1_1drop__view_3_01T_01_4_01_4__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..2c791a562cd248325a8dbfba2b6cd7af0ef2e175 GIT binary patch literal 6419 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 literal 0 HcmV?d00001 diff --git a/doxygen/structdr_1_1is__drop__view__coll__graph.map b/doxygen/structdr_1_1is__drop__view__coll__graph.map new file mode 100644 index 0000000000..af5df8b6f0 --- /dev/null +++ b/doxygen/structdr_1_1is__drop__view__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/structdr_1_1is__drop__view__coll__graph.md5 b/doxygen/structdr_1_1is__drop__view__coll__graph.md5 new file mode 100644 index 0000000000..fc437a1562 --- /dev/null +++ b/doxygen/structdr_1_1is__drop__view__coll__graph.md5 @@ -0,0 +1 @@ +a2f91c7d6a6fb5c622edca015988d54e \ No newline at end of file diff --git a/doxygen/structdr_1_1is__drop__view__coll__graph.png b/doxygen/structdr_1_1is__drop__view__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..cc1ba18aae8eb0e5dd21db2983ad065a7dc69ee8 GIT binary patch literal 4703 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 literal 0 HcmV?d00001 diff --git a/doxygen/structdr_1_1is__drop__view__inherit__graph.map b/doxygen/structdr_1_1is__drop__view__inherit__graph.map new file mode 100644 index 0000000000..af5df8b6f0 --- /dev/null +++ b/doxygen/structdr_1_1is__drop__view__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/structdr_1_1is__drop__view__inherit__graph.md5 b/doxygen/structdr_1_1is__drop__view__inherit__graph.md5 new file mode 100644 index 0000000000..fc437a1562 --- /dev/null +++ b/doxygen/structdr_1_1is__drop__view__inherit__graph.md5 @@ -0,0 +1 @@ +a2f91c7d6a6fb5c622edca015988d54e \ No newline at end of file diff --git a/doxygen/structdr_1_1is__drop__view__inherit__graph.png b/doxygen/structdr_1_1is__drop__view__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..cc1ba18aae8eb0e5dd21db2983ad065a7dc69ee8 GIT binary patch literal 4703 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 literal 0 HcmV?d00001 diff --git a/doxygen/structdr_1_1is__iota__view.html b/doxygen/structdr_1_1is__iota__view.html new file mode 100644 index 0000000000..ab34063339 --- /dev/null +++ b/doxygen/structdr_1_1is__iota__view.html @@ -0,0 +1,106 @@ + + + + + + + +Distributed Ranges: dr::is_iota_view< T > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::is_iota_view< T > Struct Template Reference
    +
    +
    +
    +Inheritance diagram for dr::is_iota_view< T >:
    +
    +
    Inheritance graph
    + + + + +
    [legend]
    +
    +Collaboration diagram for dr::is_iota_view< T >:
    +
    +
    Collaboration graph
    + + + + +
    [legend]
    +
    The documentation for this struct was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/detail/view_detectors.hpp
    • +
    +
    + + + + diff --git a/doxygen/structdr_1_1is__iota__view_3_01rng_1_1iota__view_3_01W_01_4_01_4.html b/doxygen/structdr_1_1is__iota__view_3_01rng_1_1iota__view_3_01W_01_4_01_4.html new file mode 100644 index 0000000000..9a4ecd4b70 --- /dev/null +++ b/doxygen/structdr_1_1is__iota__view_3_01rng_1_1iota__view_3_01W_01_4_01_4.html @@ -0,0 +1,106 @@ + + + + + + + +Distributed Ranges: dr::is_iota_view< rng::iota_view< W > > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::is_iota_view< rng::iota_view< W > > Struct Template Reference
    +
    +
    +
    +Inheritance diagram for dr::is_iota_view< rng::iota_view< W > >:
    +
    +
    Inheritance graph
    + + + + +
    [legend]
    +
    +Collaboration diagram for dr::is_iota_view< rng::iota_view< W > >:
    +
    +
    Collaboration graph
    + + + + +
    [legend]
    +
    The documentation for this struct was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/detail/view_detectors.hpp
    • +
    +
    + + + + diff --git a/doxygen/structdr_1_1is__iota__view_3_01rng_1_1iota__view_3_01W_01_4_01_4__coll__graph.map b/doxygen/structdr_1_1is__iota__view_3_01rng_1_1iota__view_3_01W_01_4_01_4__coll__graph.map new file mode 100644 index 0000000000..e7f848c530 --- /dev/null +++ b/doxygen/structdr_1_1is__iota__view_3_01rng_1_1iota__view_3_01W_01_4_01_4__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/structdr_1_1is__iota__view_3_01rng_1_1iota__view_3_01W_01_4_01_4__coll__graph.md5 b/doxygen/structdr_1_1is__iota__view_3_01rng_1_1iota__view_3_01W_01_4_01_4__coll__graph.md5 new file mode 100644 index 0000000000..145b111463 --- /dev/null +++ b/doxygen/structdr_1_1is__iota__view_3_01rng_1_1iota__view_3_01W_01_4_01_4__coll__graph.md5 @@ -0,0 +1 @@ +a9f48d4a7fc5297b8a7c19f5e6a755d7 \ No newline at end of file diff --git a/doxygen/structdr_1_1is__iota__view_3_01rng_1_1iota__view_3_01W_01_4_01_4__coll__graph.png b/doxygen/structdr_1_1is__iota__view_3_01rng_1_1iota__view_3_01W_01_4_01_4__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..2d28b8fc698b618fa3762884e17fd7dfbee8663a GIT binary patch literal 6579 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 + + + diff --git a/doxygen/structdr_1_1is__iota__view_3_01rng_1_1iota__view_3_01W_01_4_01_4__inherit__graph.md5 b/doxygen/structdr_1_1is__iota__view_3_01rng_1_1iota__view_3_01W_01_4_01_4__inherit__graph.md5 new file mode 100644 index 0000000000..145b111463 --- /dev/null +++ b/doxygen/structdr_1_1is__iota__view_3_01rng_1_1iota__view_3_01W_01_4_01_4__inherit__graph.md5 @@ -0,0 +1 @@ +a9f48d4a7fc5297b8a7c19f5e6a755d7 \ No newline at end of file diff --git a/doxygen/structdr_1_1is__iota__view_3_01rng_1_1iota__view_3_01W_01_4_01_4__inherit__graph.png b/doxygen/structdr_1_1is__iota__view_3_01rng_1_1iota__view_3_01W_01_4_01_4__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..2d28b8fc698b618fa3762884e17fd7dfbee8663a GIT binary patch literal 6579 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 + + + diff --git a/doxygen/structdr_1_1is__iota__view__coll__graph.md5 b/doxygen/structdr_1_1is__iota__view__coll__graph.md5 new file mode 100644 index 0000000000..bb7f154d51 --- /dev/null +++ b/doxygen/structdr_1_1is__iota__view__coll__graph.md5 @@ -0,0 +1 @@ +971d254fcf9e90ba1f710154f84b8677 \ No newline at end of file diff --git a/doxygen/structdr_1_1is__iota__view__coll__graph.png b/doxygen/structdr_1_1is__iota__view__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..6b1102c7735067ad9cddf04150f8d106eb04555a GIT binary patch literal 4780 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 literal 0 HcmV?d00001 diff --git a/doxygen/structdr_1_1is__iota__view__inherit__graph.map b/doxygen/structdr_1_1is__iota__view__inherit__graph.map new file mode 100644 index 0000000000..7501f1f5da --- /dev/null +++ b/doxygen/structdr_1_1is__iota__view__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/structdr_1_1is__iota__view__inherit__graph.md5 b/doxygen/structdr_1_1is__iota__view__inherit__graph.md5 new file mode 100644 index 0000000000..bb7f154d51 --- /dev/null +++ b/doxygen/structdr_1_1is__iota__view__inherit__graph.md5 @@ -0,0 +1 @@ +971d254fcf9e90ba1f710154f84b8677 \ No newline at end of file diff --git a/doxygen/structdr_1_1is__iota__view__inherit__graph.png b/doxygen/structdr_1_1is__iota__view__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..6b1102c7735067ad9cddf04150f8d106eb04555a GIT binary patch literal 4780 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 literal 0 HcmV?d00001 diff --git a/doxygen/structdr_1_1is__owning__view.html b/doxygen/structdr_1_1is__owning__view.html new file mode 100644 index 0000000000..2a9ef1880f --- /dev/null +++ b/doxygen/structdr_1_1is__owning__view.html @@ -0,0 +1,106 @@ + + + + + + + +Distributed Ranges: dr::is_owning_view< T > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::is_owning_view< T > Struct Template Reference
    +
    +
    +
    +Inheritance diagram for dr::is_owning_view< T >:
    +
    +
    Inheritance graph
    + + + + +
    [legend]
    +
    +Collaboration diagram for dr::is_owning_view< T >:
    +
    +
    Collaboration graph
    + + + + +
    [legend]
    +
    The documentation for this struct was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/zip_view.hpp
    • +
    +
    + + + + diff --git a/doxygen/structdr_1_1is__owning__view__coll__graph.map b/doxygen/structdr_1_1is__owning__view__coll__graph.map new file mode 100644 index 0000000000..1fdbdf11cc --- /dev/null +++ b/doxygen/structdr_1_1is__owning__view__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/structdr_1_1is__owning__view__coll__graph.md5 b/doxygen/structdr_1_1is__owning__view__coll__graph.md5 new file mode 100644 index 0000000000..8bc5db7d45 --- /dev/null +++ b/doxygen/structdr_1_1is__owning__view__coll__graph.md5 @@ -0,0 +1 @@ +ef09467e54a05cc78ea660814c52f301 \ No newline at end of file diff --git a/doxygen/structdr_1_1is__owning__view__coll__graph.png b/doxygen/structdr_1_1is__owning__view__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..63dea317cbf108d65e57b28dbffea2cbfa3cf235 GIT binary patch literal 4941 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 gPT<88bLZ)Kdu}gGA~Samcs~YFhij{r+ + + + diff --git a/doxygen/structdr_1_1is__owning__view__inherit__graph.md5 b/doxygen/structdr_1_1is__owning__view__inherit__graph.md5 new file mode 100644 index 0000000000..8bc5db7d45 --- /dev/null +++ b/doxygen/structdr_1_1is__owning__view__inherit__graph.md5 @@ -0,0 +1 @@ +ef09467e54a05cc78ea660814c52f301 \ No newline at end of file diff --git a/doxygen/structdr_1_1is__owning__view__inherit__graph.png b/doxygen/structdr_1_1is__owning__view__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..63dea317cbf108d65e57b28dbffea2cbfa3cf235 GIT binary patch literal 4941 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 gPT<88bLZ)Kdu}gGA~Samcs~YFhij{r+ + + + + + + +Distributed Ranges: dr::is_ref_view< T > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::is_ref_view< T > Struct Template Reference
    +
    +
    +
    +Inheritance diagram for dr::is_ref_view< T >:
    +
    +
    Inheritance graph
    + + + + +
    [legend]
    +
    +Collaboration diagram for dr::is_ref_view< T >:
    +
    +
    Collaboration graph
    + + + + +
    [legend]
    +
    The documentation for this struct was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/detail/view_detectors.hpp
    • +
    +
    + + + + diff --git a/doxygen/structdr_1_1is__ref__view_3_01rng_1_1ref__view_3_01R_01_4_01_4.html b/doxygen/structdr_1_1is__ref__view_3_01rng_1_1ref__view_3_01R_01_4_01_4.html new file mode 100644 index 0000000000..dbda435f15 --- /dev/null +++ b/doxygen/structdr_1_1is__ref__view_3_01rng_1_1ref__view_3_01R_01_4_01_4.html @@ -0,0 +1,106 @@ + + + + + + + +Distributed Ranges: dr::is_ref_view< rng::ref_view< R > > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::is_ref_view< rng::ref_view< R > > Struct Template Reference
    +
    +
    +
    +Inheritance diagram for dr::is_ref_view< rng::ref_view< R > >:
    +
    +
    Inheritance graph
    + + + + +
    [legend]
    +
    +Collaboration diagram for dr::is_ref_view< rng::ref_view< R > >:
    +
    +
    Collaboration graph
    + + + + +
    [legend]
    +
    The documentation for this struct was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/detail/view_detectors.hpp
    • +
    +
    + + + + diff --git a/doxygen/structdr_1_1is__ref__view_3_01rng_1_1ref__view_3_01R_01_4_01_4__coll__graph.map b/doxygen/structdr_1_1is__ref__view_3_01rng_1_1ref__view_3_01R_01_4_01_4__coll__graph.map new file mode 100644 index 0000000000..cce1fcce07 --- /dev/null +++ b/doxygen/structdr_1_1is__ref__view_3_01rng_1_1ref__view_3_01R_01_4_01_4__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/structdr_1_1is__ref__view_3_01rng_1_1ref__view_3_01R_01_4_01_4__coll__graph.md5 b/doxygen/structdr_1_1is__ref__view_3_01rng_1_1ref__view_3_01R_01_4_01_4__coll__graph.md5 new file mode 100644 index 0000000000..57bc0cd6c6 --- /dev/null +++ b/doxygen/structdr_1_1is__ref__view_3_01rng_1_1ref__view_3_01R_01_4_01_4__coll__graph.md5 @@ -0,0 +1 @@ +fd977d2e770e454b3d89ee651a6ab0ee \ No newline at end of file diff --git a/doxygen/structdr_1_1is__ref__view_3_01rng_1_1ref__view_3_01R_01_4_01_4__coll__graph.png b/doxygen/structdr_1_1is__ref__view_3_01rng_1_1ref__view_3_01R_01_4_01_4__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..ddef7880711d055304ec8a90cb0a89578a142349 GIT binary patch literal 6029 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 + + + diff --git a/doxygen/structdr_1_1is__ref__view_3_01rng_1_1ref__view_3_01R_01_4_01_4__inherit__graph.md5 b/doxygen/structdr_1_1is__ref__view_3_01rng_1_1ref__view_3_01R_01_4_01_4__inherit__graph.md5 new file mode 100644 index 0000000000..57bc0cd6c6 --- /dev/null +++ b/doxygen/structdr_1_1is__ref__view_3_01rng_1_1ref__view_3_01R_01_4_01_4__inherit__graph.md5 @@ -0,0 +1 @@ +fd977d2e770e454b3d89ee651a6ab0ee \ No newline at end of file diff --git a/doxygen/structdr_1_1is__ref__view_3_01rng_1_1ref__view_3_01R_01_4_01_4__inherit__graph.png b/doxygen/structdr_1_1is__ref__view_3_01rng_1_1ref__view_3_01R_01_4_01_4__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..ddef7880711d055304ec8a90cb0a89578a142349 GIT binary patch literal 6029 zcmchbbx@R1xW-qJP>?PONkL@EML=q$I|L*bBqXF(LPAPFlnzOyTO_5V7DQM=Sh~Zd zq`Q&2hZ{3@=Kg<&S$4kV+mCbJc%I*TLbWs$@7|%i1A##9Dl5rpgZEtU@*%(jzn919 zaljj%g{q<)Vz2P5pUUH6F|tgG#ra`B|-X!0;^gn)w3vzsAdo`wcO zHvDH6Jx(!|>cJfd;)>tKW9NBxs zoE_0j(J)$~fYv!xL80-92@_2O@duNTu1#keq{|AKLq zpB-m0fa;~ABTs>5#{KKdm&3O!N=hQz+T^|!6**2W*+#Tb)4mBDUO!9~bq+i_a!;vw zLT6cy>!26oeY9b|I+!Q1-ve`)sK8~p1?f)W!=FXdykHj)h%GVxaZ^iQzhm3)Se%*{ z(K&@|R##OG4@Hd>>Bps~I|)1XTD!W!LPJ9r|Nh-wNg6mfSl^=l*e-)F zSfRtH+N(4QEQj*dC9cl*p~f{47iY)E>pmFt&Zsf+yYHEMoQt8Mp~TrnB>_u>z|!L4 zPCGra{Pmp7;Lyl}>N z{!(aFl~Cm?S7CZOx?9Y;j}kgNJ4wM(=J)<~-y{`F>$SBRD>a$_-f^EohQOSkR!&>{ zlah)G`PuO{O@sR;c^rp2Ig{_ffMnkUf(V3?ELvhOq<{Ue-KDUwa2_LqrIaDCjF6U= zwwS7MwAlWGVueE08vm^o>2(anh12kbUGIvmFiYAhGjO`%)(9vywfB%7j0rMW?YP*C`=DrL#UszaJPd;X1qiN!W&u*|lS#EBwrnKMT zi2kpR4#ldP8oFpEF*l`KxVSU>sTg$Th+S}5S(&KYN(`w?$ljidITFdoi>NgtUnn(c zhQ8J0QBQ8{-0gN0k||F)=^mG^LbPRKn1E^78U> z3JUX!i!Xb^Lqq3=3w7ELBJRP|)~3^Hyz@6@ZEq zuxvk=qJEc?!^W*wY}TE~(~|+uaGa_kV`Nm9lY6gRx3Xfpu)aD}0JH9)6{5prcEA|M zbD2?%jiRq-As7s1acQZ-ebcDvWS+3bX(lZD;7{h_>Z-D(WsdTnnbjtKn@W0o{Ewz( z;^N|wW!_RnZ{NNpCnf#)<+1(S31>IA#xh#H5~E<1yzHu~_=pIi(NdGCBDFqOMR#N#0lG^uAuNC6w`$Fc*)@l8#6P+#>U3)WDXx{NsCULd|0&CntBSy1Ke2^+{ZQJ_m$D zGrebProroPg8t6V&QCNtcyiKcw8Yq>&$Y(Q6oPEr#pB}QYP|fnURzgp_|2Z5mVlVJ z9fOHnTeFio+kmB}rWS`S2UuqY(XrGkgxFOZrAm71RaI3Th?yb~P>obkmQqucT~AR_ z5yk20X?9_u^6>C*NMobK!uS6SdTY(l~VP&?kIrNzaR*Ei+m$?NLthYuBKrZ9}H zx@CX;s+0=%H?^&vypi^!ZvPPv57j$S*QE&Mi7jc&;rf`ox_adGbr-~%f1XSxs^Wpi zE>N7%@$qrfQ%T$>@#kaF6-;u(Oj11`?$Y<%KU-kBvUR7P1Mw?1_#WuG-0OU@GnYj? zz!4M3z`@GKhKX{&AtNh`S<*}ujlD}RoT**7b9}u0W_o5Ot+*K4h(h7RhRNjbxFqlF z@3;2#A)mgHkdRPPQY!bHZfOYsg3QfU$>ZQMskny?r_6232hY9Lc6Fg#ta!(Tw05xn zkn?-GIsNc-qgUKQM>I)NgZYCp9o(l?vRwpleH&TQ6C8wg2Dn>n1@fkCmG`^@_($TlDJPZo%IhYnMpPSgF>WChsXy+M@? zvpTJQ^N+p6iIHv+IgArBMlIZiztCAhVmC@5GFceuZdqfUgwfb2$0}B1CGOY#6`hc) z=1rs7!PU+{GNM<*Y`Cv*Zzgh^F|>^bn3A2_v0Kt@cJiJ{c|B0|oUkvHH`_CW;ELg% zSm!?UMZ%Mk?k*3dTtVW`v_h4?{2ztaVtE#Q`)~6-G%I&QkgYH>#$pTon3Sad;NLl)gdF)& zmMiY;@qak@$=tAUqhc+_Qx~at`zCsRgyLObxk%>Zzj&87q6_q!ozeV6q(PEhVY6ap zSk&zb?>vQobZ()y;G=hxxi3AH&lJwZH|ck`W1|+NpGwK9INae<3RP#p<@(N*%ltq% z_`h-%KTfF~L!Kh@KX&~8c+)05&R%8fvf7Lin zsWq*P%=!K_b!2kHP zx3@>Oo0gFgT~NS@Y`zfYYj(KcYl~d0ix74=N@`5xF&4IHLeA6&M@RQ%PS6*+lF9TB z4hA+foQ0e;GvSp453jn#CnXJm_Fp$JG`#1rH7#8Fm$h5Ur$e4N2fJS+@s%CXuAGQk>(i?v*}vr z9DP4!<=Z7CCDeWBPgm{j3Z*Zaoj#4)3K0w(io2(!rP&J65#fcy6;##L@8T0P%=Y>6-At{_SwS4 zXSp}c)7x9e$msX`+Z0Ob>UqFo;y5+0?Fs^7q&Ar0_m4|cV)xed3oj@DuvPYe?auCQ zR%vMzI-CXu_`$o~y7vc&7a zAEA?FU%#3GtSElbd|$kw^!Qj4e$fVqQCU-S`wcJT`Sa)07vLe40I>i{J);aRYrgyf zgk`?~ei5o1$MFn-=;=)pKb^u}T9YdRk^?HcxVWhG{JH$gm+X9~19BD?7MyzFv!l({ zj*gEN6@u+ijH*^v4*=fuq==9}A{AOef`LOkEgB(bVCVtXJyGktkXhBHN2pykwhvsA z-=>#gsV^g%G*DCOG*|yRkE6wgLE+(q{f~E6>*$31&OO76WD^n+5KTUxo3AdmYin!! zCnmZ+!)*RBT54it2!Ks@1H3S(ea#Y)vxCXM$9o&q0qc{H_4XDA(fr$;gdI8p zH;tpbMeM4-0KkJ(R91$Dg<13@3!r`zvWz$RHppM;v1oOkEt zrT(q3E%kiH`5DD1er?}d({%(a}1sP?mGEsI@oz+Zu5&#tY7=@sQw zR8(Mv8&;zph>O#&to82g?}tW5ix^*;UNSN;Bnw*I0ec43JvliE7;*_17zB085JU<9 znAiDkhqAi56^Qx;^}@_peoAsOE%0ZER-vw&yZhkyxYG0IRG`z&=V_WD^;>UTTwJdB z^x)<7!4CHJtpGb0S!?U-j~*>AExBW*rl+Spm(x5tF_^zYn()7X2>@giyf8VMX-Y{+ z0W}6hU^G_^q$#7%%9o6ZsSkLoEs&63!Gz#3MjMaL7T{1QQMFNIN(y~eR@VFX?_*+P zrG0%RK@GhB@PTff$D}?U#LMq|S5fL@76)J#pcfV~vHCv6NT;3|8bDVI>suY9C{twP z7%}k`AHD1GBwaCeZgez>SXvalh!ZI(Da63EU_%)^^#>9w>^|gC;5|4n5RjBa1LFEr zpXPF``SKd~ZxGJ(^^wRwGpKR6cX@fqAysc296(M>8`9hi_ww?hq@*NeVv5dAzItSx1u6%Y_0aXjsMUC4kJugU5r4vt}! z?X!%&Se%xzF`6_D#pllx1dav=2c^HyM2-X=?Cda0Nu>h@{%+QC6VT2Rx0Qa$^%=>K zI`Nq}&~TUg8CPHheW0rzK744lG5#G@|K)OaX{lXDQxg4=$*;4~YoAuci9y6^dKQ3q z<9@F=$M$8w^>+qx6bp-r7V?rzD}MW%nK6U%OBMHsTF&sl|E|AZOArPFIA38q)!Q2t z5<&pBWQ#;DZ%kBL+emKFkdTl7nVG0@qz9r>)rG1#z+-rLves*D@HBU8(fP`fG&}V8N@o(Y9GfGhUI|m0sQi(tWK79N3$PYvgX8!BFcl!{} zM$=YKoxQ6^I%y!ceks5GC=`J}Bnw#LF)}hzQd1B9`J>_DA_&r*o1bri#Hwmg7k>M8 z^JD|WBI)gt@pPuR>r#&&ebV`H=FqBIJ7IxF8Y>JI_hxgSNJ|YiT~)ZpIeO;NTM{ZxGWFj1DtG zKQsnUH~YgaJEE+BM4|>k%zbuR@S%nk??ID*(ZsOM{<>FT5dZfj>}0lLk)dunPbE;cp*g_0By5NK;}r(1?^2S0v;AI?Ja(#k4t zR{@(gx_$^aLQqf;_yEhJM|Xfg2_ydyJ=NAGH!4Z&lRAr7TCyf5Cr^g^OO1?-$jQr- z(b3rn7TOboy)>OJ(NjpLi#p!~^CzXeG(mtu4j`bLCKN5cryd?2oZQ^uxw-5_csQJz z>2d_-lwH7O)$;?v2SD^e2zxW&nxLt`>KczG?Qu-;dHMJ{(CECrKjtlgxDpo!LzFZ$ zaVaU?{|?u84-X#*3nv;@S|8RWo2k#VSajl^ZdCStar@{|a3c|FChPc(S&!7mOdT3TAbiGwys|Jq0qCb1bP zLB?f)dP+Nhi&w8+W!2ZyA(6;-a2#e-VhwxaFDWU2Ij#QwPB`{y1ce8*3QS#wK%s%sFi3dDfD@73kMQ%XKB|ZIYs7f6yq%#G zoJXHOlwxkofU*Si@M^C(cWCu%S=n~ANhJR&nu^*;z9HV>^e3)#Dg!cQdd9 zDJdyRDynAyd2DSTf^(&(C3*|X%O5ogU=z%r;^W(nvHpGEEjvKbGYbn-C#Z~US7Sl= zc2{zuuaOgosfMbmYI7f|sVN;Wnv1LJD<>xo0fF6g$=_zf)p#kiRvt*_z|zOYAidxl z-U;-bMz1vI7Zy%;T1mX-f@wN?d$(MtjQr0%kR(N=rPd&65lrxOz-n}$Jiw_`7hdE< zr40Z?2Rl2v&aN(VaP~(_gqNL@1H^W2?jzF{>CrZ}FP2Ran!nA#${Gk*1 + + + diff --git a/doxygen/structdr_1_1is__ref__view__coll__graph.md5 b/doxygen/structdr_1_1is__ref__view__coll__graph.md5 new file mode 100644 index 0000000000..aa5583741a --- /dev/null +++ b/doxygen/structdr_1_1is__ref__view__coll__graph.md5 @@ -0,0 +1 @@ +bac4e2cc71a001722b1cd79b6608d656 \ No newline at end of file diff --git a/doxygen/structdr_1_1is__ref__view__coll__graph.png b/doxygen/structdr_1_1is__ref__view__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..6a24e8e3c29697b5d7259d91d9ba4f27b3457690 GIT binary patch literal 4408 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 literal 0 HcmV?d00001 diff --git a/doxygen/structdr_1_1is__ref__view__inherit__graph.map b/doxygen/structdr_1_1is__ref__view__inherit__graph.map new file mode 100644 index 0000000000..b672f05972 --- /dev/null +++ b/doxygen/structdr_1_1is__ref__view__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/structdr_1_1is__ref__view__inherit__graph.md5 b/doxygen/structdr_1_1is__ref__view__inherit__graph.md5 new file mode 100644 index 0000000000..aa5583741a --- /dev/null +++ b/doxygen/structdr_1_1is__ref__view__inherit__graph.md5 @@ -0,0 +1 @@ +bac4e2cc71a001722b1cd79b6608d656 \ No newline at end of file diff --git a/doxygen/structdr_1_1is__ref__view__inherit__graph.png b/doxygen/structdr_1_1is__ref__view__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..6a24e8e3c29697b5d7259d91d9ba4f27b3457690 GIT binary patch literal 4408 zcmc&&hc{f?+ddc*L?=X)K?IQ~(T%G_FVQ84Nc7%Cxfs1h^k^5C!6YFpUSC(8isA+Z1VL1q8Y+h1i~(Oa zGC25cO+k}@6Wm%`T?M+h{1i65NrxcXbxoD~#sPWjQ!e^OCN1zShu8$VDCncc+wfuZ z6IgfzeY~SlhrtAVpM86;aBP0DuqI!oHmSB&8oT;qV($lwtPLrKK>dCbhr8KHSdClP zC;Qs}m^><#_?r%yipHm0U-_f7EJfl}9^1&Z!}wZZm$SoPT;q4fxgb>o#>*oo25a0c zBO_By&c&_0uV=;_+x|(IDPdO-SNHxFk`z*ki?ho1$y_a{5>op5H?*C(JYkJy<6%k= zl!HmMZA>>MWM(oY>21sFh(2ey{Oe!pfFR8%Kb*)Eo=7RAAKff=Hk-Q zo^q5xhL*I9Oirzy54K}lm#Lh>?*4ru5W-d$s|Tlq#5Hzyb|`F6{**E!BSSi1i?hS} zo}nQqTQWkS3sJ{T;gTLOJmcG6R<>qy|9;XY*3SGy$OJ2u2c5$87c}QQa zh9`HKZu0WNH8nMl*6U`v9_|(DjbTiys!HE`{Ux{!z(L=r$aAL(nzHB z#78$MOu_}<`u#h@yGQRMj0HM>_2&{n=5_9!E8pK>L(T$KR8%a_PWF)~{KyEpuu#!M zmWzuhH8nL`%7dfC@V2$JbxkkE@V4LPbYe;hZAWJ(m%_7)2B+c?N+{@Xqce$JmXj#~ z>$RX}>)??5)&PO(W@TqjOy|>E{WFK!?U&LQ$k;kKfJ2Peu35FmP<_B++dv2g78Z%i z%Z_{d`#Hvgue=tz5^DjZI!x{C>}VrHg*O(EpT1T_`a ztz1dB;g6srdBGsxOz1^Z&pze;QbA~1US8fst+Ah}*eU4M`O$5HmV+ZH`YN;a_I#&l zwS8jS`n$5S)=Gvt_XQA_>1sZ@eiYqi69r?2UmNqsdF}NmleD?zS z&6_K7a&oiYpCBkh%Wn9{x%LKkDp`DdyoRnWNV}LPKxw4jOz}wH!gi|&rQbRM^WI}< zNP$N=1|baHHLHSER8-V^&JhbeZHzlQ3aGEIUv?Gy!}iu#090KnGgCU3T_}5eNoSYDGIMkiQP69cK-v~Zl%tE4)ByqT<^RrV& z50CCQ1tApiDiL45YA`Z0C%>}~4Grzf5xWu{9UZVgV#39gKnDOeQRflay^#2~JP2%y z=j|n+=h|bvR)%l6j#t@rgj{0ACo?N67PMHc3}bjl#ZpZfwB!qtZMu`J4t|fvy?F6u zzB2)9(@ou%C&SR%!pDij;WRWg!}Igm2l8YhZ>lG8^7E4kH|^2G;qd1tY;Hxx$t^7k zkIGGn6ciLxR8`vs2WhCOsTaz|ySm^@g9Y8m3g=|uieVt~fPjF)*RSD{l9D$6CeL-t z^54Eq4yxbW+#Hvb#DRULs0jV)%ZZGOBkSnunjbe`y7yL-hzXP}7*^KBs^Ua-bX>guw7{`{HJ+$^v3b&P>MTIs&Pojd9;Z)Wvs zK7GnzP-a!{miG2Cj)tF?HVjL|3f!OI}e)e)q zUR?ZD@acM8Np*EPSf#0W{G)2T*wCW{!-l8pWVR@94?hV;~U)?T-nKKu1uZ@^l9G~+H3dmcPEOu6D|(32e;l5WaJ9s+blR7L zg9CmzQSCr8IW;x6xmoFt3JgTTh{I*HY6Na*-2tFnILZE6q?({+q2Mvy==G>Ws5}Q{ z^n>$;)(c-p{@ZvoT0FfG?qVY1YZ_eSv-?X&o2HE->om%->~1XUcc*njUb%$mG^^~t zl)i?VmW4{*Mg+9gMLtl_AG`3zi#E(}mRk&}%z8>63Xaruo@WhJ+wMNxQGgwJh&VF+ zY&R0H6USFLi58E(;!V>ckA>D0A=oPKe^hpn^MOlPOUkk4Oe{$_!@K!0STU;_gKrp`@eyb3q87^HW% zkaLz@Lw1yrL@}*f>+3(V9r<-y9X})yJ$Lu#3lp^ZfZTSNcYObuSN6s?FTzo1N4!W% zSgU)77I9Dz70)An7p+1x8=w7+M=Ml68DNzEqVS*sv;S{J{$KuJ*``UW z1Is)U_zXP1z39!h3&^L1Hej!nfO#Mgm9h(@VOu$isX)uOit2YyYxD-yRlk^f^xY*O|8oOMa3=en zP0YYfcQWGUojckS?v9R7Y=h`ieQue`&cT5X2+&<~@xJTdfM|$IN`4s`@$L9b zAUv-B{5hg`u?UN$b9Z-N-rVdiR!^>}jQv&7MMFa~HZFIZ`Sau?P+Uq%xfrL2)^F|ary7(y%xgPG$Op%T zhZ6+^u7*rlJbZZVX}}z*w6yfH9Fy|GJ7WPbuo5S&;{**tzN1&Tg)+uUL_{QPb=CRk zgRn1!FJ`1(pj zDRD8~H7z{!ccZo^w*!yU&66eq(e51_d>I`zaX1^VcGw2wR1BCFR3l1-`@W7270^m- z=tT&mXk~@gl@$|X0JIKBH%6_vttXuitN{?;5_aa4ba4>i{aa3$< zWbfiXZfxnw$4A>XwzjsMl9Eh!9+g8}FraofKN<;Sq-bFX^Rh_f^Jxi?2C*X{LljEx zTW_z|(Uz6xrzez@l!f*6W6L*UlXS@1fZWp2(?`_TON&rOR#l1S$)j#up=N7c9eIcQ z{+%RIEz)-lpE&NXp+VMsx*_{@(HlleN(Alf>|9zNU>}pm{-uood5c^)Jvk`?-eP}$ zKU*$H@~5{9F)^{efdP?+hsWh@aJciS5kF&n$Qcr}{W&|s+V;>#MMpa!{_gL=uRUFU~~gy zs19&LV>M3cZ3p@Q^dD+#RYOAL2@?}mE-qKm`i{>NmAgZZwzzz#BdBwqQc_ioHan3#POWNaUD1(Ad->kZ%C~`stgX&gRT;INZL@1 z!G@1EUd7YbSJljn1rTSKuh;tWa@^>%Q1)l2{cD+m=5P}e6ENS|!hqUXDyc;(b1uj-o;D?`%qmCe9!Iqg@VbEYqYdszkjjWl~%hiW3P+Jw~Lt8IMO|S{J2KA zAu1-OsH%z{u#MVC`=U41(^2ZB%U!d!YXXy?Xqkc$OJk1|H@CGCMd7~|hZ|GMK|u}M zQpdXRv$HdJOE32MGKAY1`@#T?$a9>~F6$^RpS8UWv&1%Im9?N2%80~b~sQG3H68isr f&tPCQctKKibTiXdV2B#L3V}3LbyX^qEF=B{8*Nrz literal 0 HcmV?d00001 diff --git a/doxygen/structdr_1_1is__sliding__view.html b/doxygen/structdr_1_1is__sliding__view.html new file mode 100644 index 0000000000..12f57cfaf1 --- /dev/null +++ b/doxygen/structdr_1_1is__sliding__view.html @@ -0,0 +1,106 @@ + + + + + + + +Distributed Ranges: dr::is_sliding_view< T > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::is_sliding_view< T > Struct Template Reference
    +
    +
    +
    +Inheritance diagram for dr::is_sliding_view< T >:
    +
    +
    Inheritance graph
    + + + + +
    [legend]
    +
    +Collaboration diagram for dr::is_sliding_view< T >:
    +
    +
    Collaboration graph
    + + + + +
    [legend]
    +
    The documentation for this struct was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/detail/view_detectors.hpp
    • +
    +
    + + + + diff --git a/doxygen/structdr_1_1is__sliding__view_3_01rng_1_1sliding__view_3_01T_01_4_01_4.html b/doxygen/structdr_1_1is__sliding__view_3_01rng_1_1sliding__view_3_01T_01_4_01_4.html new file mode 100644 index 0000000000..9ae38314c8 --- /dev/null +++ b/doxygen/structdr_1_1is__sliding__view_3_01rng_1_1sliding__view_3_01T_01_4_01_4.html @@ -0,0 +1,106 @@ + + + + + + + +Distributed Ranges: dr::is_sliding_view< rng::sliding_view< T > > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::is_sliding_view< rng::sliding_view< T > > Struct Template Reference
    +
    +
    +
    +Inheritance diagram for dr::is_sliding_view< rng::sliding_view< T > >:
    +
    +
    Inheritance graph
    + + + + +
    [legend]
    +
    +Collaboration diagram for dr::is_sliding_view< rng::sliding_view< T > >:
    +
    +
    Collaboration graph
    + + + + +
    [legend]
    +
    The documentation for this struct was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/detail/view_detectors.hpp
    • +
    +
    + + + + diff --git a/doxygen/structdr_1_1is__sliding__view_3_01rng_1_1sliding__view_3_01T_01_4_01_4__coll__graph.map b/doxygen/structdr_1_1is__sliding__view_3_01rng_1_1sliding__view_3_01T_01_4_01_4__coll__graph.map new file mode 100644 index 0000000000..f9683c55d0 --- /dev/null +++ b/doxygen/structdr_1_1is__sliding__view_3_01rng_1_1sliding__view_3_01T_01_4_01_4__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/structdr_1_1is__sliding__view_3_01rng_1_1sliding__view_3_01T_01_4_01_4__coll__graph.md5 b/doxygen/structdr_1_1is__sliding__view_3_01rng_1_1sliding__view_3_01T_01_4_01_4__coll__graph.md5 new file mode 100644 index 0000000000..880cfc71c7 --- /dev/null +++ b/doxygen/structdr_1_1is__sliding__view_3_01rng_1_1sliding__view_3_01T_01_4_01_4__coll__graph.md5 @@ -0,0 +1 @@ +0e8dfdd907abacb79ca759ad0bc07d54 \ No newline at end of file diff --git a/doxygen/structdr_1_1is__sliding__view_3_01rng_1_1sliding__view_3_01T_01_4_01_4__coll__graph.png b/doxygen/structdr_1_1is__sliding__view_3_01rng_1_1sliding__view_3_01T_01_4_01_4__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..3b92771a4cc3a7f35822755a2cf1e8a1d4393929 GIT binary patch literal 6305 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 literal 0 HcmV?d00001 diff --git a/doxygen/structdr_1_1is__sliding__view_3_01rng_1_1sliding__view_3_01T_01_4_01_4__inherit__graph.map b/doxygen/structdr_1_1is__sliding__view_3_01rng_1_1sliding__view_3_01T_01_4_01_4__inherit__graph.map new file mode 100644 index 0000000000..f9683c55d0 --- /dev/null +++ b/doxygen/structdr_1_1is__sliding__view_3_01rng_1_1sliding__view_3_01T_01_4_01_4__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/structdr_1_1is__sliding__view_3_01rng_1_1sliding__view_3_01T_01_4_01_4__inherit__graph.md5 b/doxygen/structdr_1_1is__sliding__view_3_01rng_1_1sliding__view_3_01T_01_4_01_4__inherit__graph.md5 new file mode 100644 index 0000000000..880cfc71c7 --- /dev/null +++ b/doxygen/structdr_1_1is__sliding__view_3_01rng_1_1sliding__view_3_01T_01_4_01_4__inherit__graph.md5 @@ -0,0 +1 @@ +0e8dfdd907abacb79ca759ad0bc07d54 \ No newline at end of file diff --git a/doxygen/structdr_1_1is__sliding__view_3_01rng_1_1sliding__view_3_01T_01_4_01_4__inherit__graph.png b/doxygen/structdr_1_1is__sliding__view_3_01rng_1_1sliding__view_3_01T_01_4_01_4__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..3b92771a4cc3a7f35822755a2cf1e8a1d4393929 GIT binary patch literal 6305 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 literal 0 HcmV?d00001 diff --git a/doxygen/structdr_1_1is__sliding__view__coll__graph.map b/doxygen/structdr_1_1is__sliding__view__coll__graph.map new file mode 100644 index 0000000000..302ba7b04b --- /dev/null +++ b/doxygen/structdr_1_1is__sliding__view__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/structdr_1_1is__sliding__view__coll__graph.md5 b/doxygen/structdr_1_1is__sliding__view__coll__graph.md5 new file mode 100644 index 0000000000..ae32ba6be5 --- /dev/null +++ b/doxygen/structdr_1_1is__sliding__view__coll__graph.md5 @@ -0,0 +1 @@ +c082d9b8f35b2990d2bbf27644b1ff70 \ No newline at end of file diff --git a/doxygen/structdr_1_1is__sliding__view__coll__graph.png b/doxygen/structdr_1_1is__sliding__view__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..193795997e9113f62fb3a893fa6c96d870fbbc43 GIT binary patch literal 4783 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%0Dkkvjn3J&FiI*a zzg$V2d?cu-!nkq)FbvpQUwju;@7=p++Vo=i6ZWtO0L}U7;h*I!n=iJV#DyU%EGXsh z`V`4C>4Mbpal=bQFG-WvbaCP7>FJ5xLWjj*!kXaC&C&$mA+X$BOf*b*)EFw_CnQ%wL`k(O4_X&42^%$H2wo&d^LqKK$(nmvMWBXcD zAd~Nb3oI=;%F4-=RaD%Umd<_m?k-B68%9|%(H}!fW%&q=M$@yfXsD}GJa!(uD=V81 zcphw5Ff9N{X^!GZnEipm`ZUP?0vfw5r^89Y^vH5WcIN9>1&Xq$@^u^Hgxy)-eh2i8+9#hZq5a3m!6fi+Bl)lKw3BT zx}&3GQCzQL;wP{|iS}J;=fP}YS2+aqReX9TP)}lF;>PXvQ!-Bpk4b)DX9@oD@m-$c zW7E@`KCj15at?ME@brA`Cg#Nm&hn9H|#fBw%=x8Pf^ukfX?D$~GU7?IZ&7 z`t#WYyuUQ6B9Xo)k)G#Mb+rpfw!?ROm^LtoG?1J7|4do*5-vk}i{}+sD{b>~a&`)j z7Ch9~*9W#(Tv|#ZC@5GMy3Ttid`EG5dYXGea*J{At6FmfwLj*u9d3eG!$JE$scQYu zZ5S9Cs*Xm3mEOwA>f8%YA4yA_HoO^l+JdgO;TS9azt=kHTyFg53hlE_tky1c+u#ip Ok%o$na+Q*8%>Mv%v%J3m literal 0 HcmV?d00001 diff --git a/doxygen/structdr_1_1is__sliding__view__inherit__graph.map b/doxygen/structdr_1_1is__sliding__view__inherit__graph.map new file mode 100644 index 0000000000..302ba7b04b --- /dev/null +++ b/doxygen/structdr_1_1is__sliding__view__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/structdr_1_1is__sliding__view__inherit__graph.md5 b/doxygen/structdr_1_1is__sliding__view__inherit__graph.md5 new file mode 100644 index 0000000000..ae32ba6be5 --- /dev/null +++ b/doxygen/structdr_1_1is__sliding__view__inherit__graph.md5 @@ -0,0 +1 @@ +c082d9b8f35b2990d2bbf27644b1ff70 \ No newline at end of file diff --git a/doxygen/structdr_1_1is__sliding__view__inherit__graph.png b/doxygen/structdr_1_1is__sliding__view__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..193795997e9113f62fb3a893fa6c96d870fbbc43 GIT binary patch literal 4783 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%0Dkkvjn3J&FiI*a zzg$V2d?cu-!nkq)FbvpQUwju;@7=p++Vo=i6ZWtO0L}U7;h*I!n=iJV#DyU%EGXsh z`V`4C>4Mbpal=bQFG-WvbaCP7>FJ5xLWjj*!kXaC&C&$mA+X$BOf*b*)EFw_CnQ%wL`k(O4_X&42^%$H2wo&d^LqKK$(nmvMWBXcD zAd~Nb3oI=;%F4-=RaD%Umd<_m?k-B68%9|%(H}!fW%&q=M$@yfXsD}GJa!(uD=V81 zcphw5Ff9N{X^!GZnEipm`ZUP?0vfw5r^89Y^vH5WcIN9>1&Xq$@^u^Hgxy)-eh2i8+9#hZq5a3m!6fi+Bl)lKw3BT zx}&3GQCzQL;wP{|iS}J;=fP}YS2+aqReX9TP)}lF;>PXvQ!-Bpk4b)DX9@oD@m-$c zW7E@`KCj15at?ME@brA`Cg#Nm&hn9H|#fBw%=x8Pf^ukfX?D$~GU7?IZ&7 z`t#WYyuUQ6B9Xo)k)G#Mb+rpfw!?ROm^LtoG?1J7|4do*5-vk}i{}+sD{b>~a&`)j z7Ch9~*9W#(Tv|#ZC@5GMy3Ttid`EG5dYXGea*J{At6FmfwLj*u9d3eG!$JE$scQYu zZ5S9Cs*Xm3mEOwA>f8%YA4yA_HoO^l+JdgO;TS9azt=kHTyFg53hlE_tky1c+u#ip Ok%o$na+Q*8%>Mv%v%J3m literal 0 HcmV?d00001 diff --git a/doxygen/structdr_1_1is__subrange__view.html b/doxygen/structdr_1_1is__subrange__view.html new file mode 100644 index 0000000000..238cea82ed --- /dev/null +++ b/doxygen/structdr_1_1is__subrange__view.html @@ -0,0 +1,106 @@ + + + + + + + +Distributed Ranges: dr::is_subrange_view< T > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::is_subrange_view< T > Struct Template Reference
    +
    +
    +
    +Inheritance diagram for dr::is_subrange_view< T >:
    +
    +
    Inheritance graph
    + + + + +
    [legend]
    +
    +Collaboration diagram for dr::is_subrange_view< T >:
    +
    +
    Collaboration graph
    + + + + +
    [legend]
    +
    The documentation for this struct was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/detail/view_detectors.hpp
    • +
    +
    + + + + diff --git a/doxygen/structdr_1_1is__subrange__view_3_01rng_1_1subrange_3_01T_01_4_01_4.html b/doxygen/structdr_1_1is__subrange__view_3_01rng_1_1subrange_3_01T_01_4_01_4.html new file mode 100644 index 0000000000..58643d6f10 --- /dev/null +++ b/doxygen/structdr_1_1is__subrange__view_3_01rng_1_1subrange_3_01T_01_4_01_4.html @@ -0,0 +1,106 @@ + + + + + + + +Distributed Ranges: dr::is_subrange_view< rng::subrange< T > > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::is_subrange_view< rng::subrange< T > > Struct Template Reference
    +
    +
    +
    +Inheritance diagram for dr::is_subrange_view< rng::subrange< T > >:
    +
    +
    Inheritance graph
    + + + + +
    [legend]
    +
    +Collaboration diagram for dr::is_subrange_view< rng::subrange< T > >:
    +
    +
    Collaboration graph
    + + + + +
    [legend]
    +
    The documentation for this struct was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/detail/view_detectors.hpp
    • +
    +
    + + + + diff --git a/doxygen/structdr_1_1is__subrange__view_3_01rng_1_1subrange_3_01T_01_4_01_4__coll__graph.map b/doxygen/structdr_1_1is__subrange__view_3_01rng_1_1subrange_3_01T_01_4_01_4__coll__graph.map new file mode 100644 index 0000000000..a448b8f416 --- /dev/null +++ b/doxygen/structdr_1_1is__subrange__view_3_01rng_1_1subrange_3_01T_01_4_01_4__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/structdr_1_1is__subrange__view_3_01rng_1_1subrange_3_01T_01_4_01_4__coll__graph.md5 b/doxygen/structdr_1_1is__subrange__view_3_01rng_1_1subrange_3_01T_01_4_01_4__coll__graph.md5 new file mode 100644 index 0000000000..25c2966b77 --- /dev/null +++ b/doxygen/structdr_1_1is__subrange__view_3_01rng_1_1subrange_3_01T_01_4_01_4__coll__graph.md5 @@ -0,0 +1 @@ +94fee86429efc7e5a71c1cdd1880752e \ No newline at end of file diff --git a/doxygen/structdr_1_1is__subrange__view_3_01rng_1_1subrange_3_01T_01_4_01_4__coll__graph.png b/doxygen/structdr_1_1is__subrange__view_3_01rng_1_1subrange_3_01T_01_4_01_4__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..f8ebb819e639fd76995aba05835e6d1a92f57c63 GIT binary patch literal 6404 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 + + + diff --git a/doxygen/structdr_1_1is__subrange__view_3_01rng_1_1subrange_3_01T_01_4_01_4__inherit__graph.md5 b/doxygen/structdr_1_1is__subrange__view_3_01rng_1_1subrange_3_01T_01_4_01_4__inherit__graph.md5 new file mode 100644 index 0000000000..25c2966b77 --- /dev/null +++ b/doxygen/structdr_1_1is__subrange__view_3_01rng_1_1subrange_3_01T_01_4_01_4__inherit__graph.md5 @@ -0,0 +1 @@ +94fee86429efc7e5a71c1cdd1880752e \ No newline at end of file diff --git a/doxygen/structdr_1_1is__subrange__view_3_01rng_1_1subrange_3_01T_01_4_01_4__inherit__graph.png b/doxygen/structdr_1_1is__subrange__view_3_01rng_1_1subrange_3_01T_01_4_01_4__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..f8ebb819e639fd76995aba05835e6d1a92f57c63 GIT binary patch literal 6404 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 + + + diff --git a/doxygen/structdr_1_1is__subrange__view__coll__graph.md5 b/doxygen/structdr_1_1is__subrange__view__coll__graph.md5 new file mode 100644 index 0000000000..4e2fc340e3 --- /dev/null +++ b/doxygen/structdr_1_1is__subrange__view__coll__graph.md5 @@ -0,0 +1 @@ +652e23d426a91fe5793fb43e195f2f9d \ No newline at end of file diff --git a/doxygen/structdr_1_1is__subrange__view__coll__graph.png b/doxygen/structdr_1_1is__subrange__view__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..370707b4de17360a1b522e1c937c24918d3feb49 GIT binary patch literal 5121 zcmd6rhgTC_w}*!!y@L>%0i?ZDL8{UTO%VZ+Dm4g53q_<#Z%P+Y1VI#$4$?sg)ew2< zBE19%DAmxUN%;=nUF+U|;ZBk@vrgumnX}K{zy0j<%+NrGmWqQ4f*@KwU4$_>4}qTt z1=+>b76AuNWDd7=5YYL>Cl6hi4nfTIdI)usfVZ2o!GsRA^y|)?E`C$x~ zwfHG|9Y*fEd>kJA_?)UW{;T(`Y`ssbwK@9IlLlFGYYI8~MJb2zc=L>@+B?SXS>Gdz zh3844{*8^}3~W+^0>8BX_BkeBj*WR5&i0@k_Y00b$n_m0yq(3(`3~AZJkbmq6ui-? zLgdZ_sC!NI{Af@x7^@~YP;$TY%#i@=)^G>y&+(1!7p*J;LkO!{7siv5lMQY%cAYzS z?g)#D*7(Dag4O;|wEn}FYS9#Gl!$ofrCR=HB$n<$OMv%}Wojy_&w;y6!Yov^4Gq&` z=L>Q0#aVycWhTBV=39A2!V(hQ4Y<&oCDpUDv*tBUv@BGYOhhj8Gd=6S!I4DfT4(8! z`IYX|lE_Se;^P&Dsp;wMQrlD4nSsF5W533xrUk6(*>+=&Z;L)6?A_zLkBMi|!EF8g z{rI4PSFczbo10VC6|udDy#qb@%|b6fKflAt!O+-W@4~LUdGn^Itc(;2IbJRNHZaf) z+UR05h+;G%T3c11cH6TZwvQh_+F_HqzxDUaD%x6Du!DC~E#Ul;larGqj|*Xzm6bIV zW(io%FoU4U$w_c+-sB@7hnh=d7BWyW?u%+YUK4e6a&p+5syjRy3{xptEoeHMYkkV8 zde}jqH?pe#@9&u==64}Gln{@oDD~e10ygcc&S(2BvW=-aY5@U(Nc#K6s+^y7yKq^7S=v*e@r;lqbK<6`jTVNKWureJJ-vKguIzWw;m`u5Lk)Z!dE z_~huujT>Iui&}g8`^gipdY30^A2B-(yrs;z6=U7}ga`t|0E^Fs{`C;fxV16c%ocp` zo7=Y!O3luu2G*FLw*zxnTU;ESk_ViYbyBv=CZB$_>t6kFjp%i zLcECKpEG#L>#zJ3}-qNBpHZk!{yLV(H{q&&ie7T|d z%a_CRwzK1P_g@1!g3DL=_$J8VA?>K~u`y|Ka`GoVyz(&a;KQl97Pv+Z+(swc4-PK?f%sobo!*F5ePgyxR zdr^crbhgJ#V;U~>�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 literal 0 HcmV?d00001 diff --git a/doxygen/structdr_1_1is__subrange__view__inherit__graph.map b/doxygen/structdr_1_1is__subrange__view__inherit__graph.map new file mode 100644 index 0000000000..bd386c1649 --- /dev/null +++ b/doxygen/structdr_1_1is__subrange__view__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/structdr_1_1is__subrange__view__inherit__graph.md5 b/doxygen/structdr_1_1is__subrange__view__inherit__graph.md5 new file mode 100644 index 0000000000..4e2fc340e3 --- /dev/null +++ b/doxygen/structdr_1_1is__subrange__view__inherit__graph.md5 @@ -0,0 +1 @@ +652e23d426a91fe5793fb43e195f2f9d \ No newline at end of file diff --git a/doxygen/structdr_1_1is__subrange__view__inherit__graph.png b/doxygen/structdr_1_1is__subrange__view__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..370707b4de17360a1b522e1c937c24918d3feb49 GIT binary patch literal 5121 zcmd6rhgTC_w}*!!y@L>%0i?ZDL8{UTO%VZ+Dm4g53q_<#Z%P+Y1VI#$4$?sg)ew2< zBE19%DAmxUN%;=nUF+U|;ZBk@vrgumnX}K{zy0j<%+NrGmWqQ4f*@KwU4$_>4}qTt z1=+>b76AuNWDd7=5YYL>Cl6hi4nfTIdI)usfVZ2o!GsRA^y|)?E`C$x~ zwfHG|9Y*fEd>kJA_?)UW{;T(`Y`ssbwK@9IlLlFGYYI8~MJb2zc=L>@+B?SXS>Gdz zh3844{*8^}3~W+^0>8BX_BkeBj*WR5&i0@k_Y00b$n_m0yq(3(`3~AZJkbmq6ui-? zLgdZ_sC!NI{Af@x7^@~YP;$TY%#i@=)^G>y&+(1!7p*J;LkO!{7siv5lMQY%cAYzS z?g)#D*7(Dag4O;|wEn}FYS9#Gl!$ofrCR=HB$n<$OMv%}Wojy_&w;y6!Yov^4Gq&` z=L>Q0#aVycWhTBV=39A2!V(hQ4Y<&oCDpUDv*tBUv@BGYOhhj8Gd=6S!I4DfT4(8! z`IYX|lE_Se;^P&Dsp;wMQrlD4nSsF5W533xrUk6(*>+=&Z;L)6?A_zLkBMi|!EF8g z{rI4PSFczbo10VC6|udDy#qb@%|b6fKflAt!O+-W@4~LUdGn^Itc(;2IbJRNHZaf) z+UR05h+;G%T3c11cH6TZwvQh_+F_HqzxDUaD%x6Du!DC~E#Ul;larGqj|*Xzm6bIV zW(io%FoU4U$w_c+-sB@7hnh=d7BWyW?u%+YUK4e6a&p+5syjRy3{xptEoeHMYkkV8 zde}jqH?pe#@9&u==64}Gln{@oDD~e10ygcc&S(2BvW=-aY5@U(Nc#K6s+^y7yKq^7S=v*e@r;lqbK<6`jTVNKWureJJ-vKguIzWw;m`u5Lk)Z!dE z_~huujT>Iui&}g8`^gipdY30^A2B-(yrs;z6=U7}ga`t|0E^Fs{`C;fxV16c%ocp` zo7=Y!O3luu2G*FLw*zxnTU;ESk_ViYbyBv=CZB$_>t6kFjp%i zLcECKpEG#L>#zJ3}-qNBpHZk!{yLV(H{q&&ie7T|d z%a_CRwzK1P_g@1!g3DL=_$J8VA?>K~u`y|Ka`GoVyz(&a;KQl97Pv+Z+(swc4-PK?f%sobo!*F5ePgyxR zdr^crbhgJ#V;U~>�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 literal 0 HcmV?d00001 diff --git a/doxygen/structdr_1_1is__take__view.html b/doxygen/structdr_1_1is__take__view.html new file mode 100644 index 0000000000..76a688a927 --- /dev/null +++ b/doxygen/structdr_1_1is__take__view.html @@ -0,0 +1,106 @@ + + + + + + + +Distributed Ranges: dr::is_take_view< T > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::is_take_view< T > Struct Template Reference
    +
    +
    +
    +Inheritance diagram for dr::is_take_view< T >:
    +
    +
    Inheritance graph
    + + + + +
    [legend]
    +
    +Collaboration diagram for dr::is_take_view< T >:
    +
    +
    Collaboration graph
    + + + + +
    [legend]
    +
    The documentation for this struct was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/detail/view_detectors.hpp
    • +
    +
    + + + + diff --git a/doxygen/structdr_1_1is__take__view_3_01rng_1_1take__view_3_01T_01_4_01_4.html b/doxygen/structdr_1_1is__take__view_3_01rng_1_1take__view_3_01T_01_4_01_4.html new file mode 100644 index 0000000000..37e4b8987b --- /dev/null +++ b/doxygen/structdr_1_1is__take__view_3_01rng_1_1take__view_3_01T_01_4_01_4.html @@ -0,0 +1,106 @@ + + + + + + + +Distributed Ranges: dr::is_take_view< rng::take_view< T > > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::is_take_view< rng::take_view< T > > Struct Template Reference
    +
    +
    +
    +Inheritance diagram for dr::is_take_view< rng::take_view< T > >:
    +
    +
    Inheritance graph
    + + + + +
    [legend]
    +
    +Collaboration diagram for dr::is_take_view< rng::take_view< T > >:
    +
    +
    Collaboration graph
    + + + + +
    [legend]
    +
    The documentation for this struct was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/detail/view_detectors.hpp
    • +
    +
    + + + + diff --git a/doxygen/structdr_1_1is__take__view_3_01rng_1_1take__view_3_01T_01_4_01_4__coll__graph.map b/doxygen/structdr_1_1is__take__view_3_01rng_1_1take__view_3_01T_01_4_01_4__coll__graph.map new file mode 100644 index 0000000000..d17238c2f0 --- /dev/null +++ b/doxygen/structdr_1_1is__take__view_3_01rng_1_1take__view_3_01T_01_4_01_4__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/structdr_1_1is__take__view_3_01rng_1_1take__view_3_01T_01_4_01_4__coll__graph.md5 b/doxygen/structdr_1_1is__take__view_3_01rng_1_1take__view_3_01T_01_4_01_4__coll__graph.md5 new file mode 100644 index 0000000000..0384f52d7e --- /dev/null +++ b/doxygen/structdr_1_1is__take__view_3_01rng_1_1take__view_3_01T_01_4_01_4__coll__graph.md5 @@ -0,0 +1 @@ +df14a0d4b41133f525f1af75f10c3f60 \ No newline at end of file diff --git a/doxygen/structdr_1_1is__take__view_3_01rng_1_1take__view_3_01T_01_4_01_4__coll__graph.png b/doxygen/structdr_1_1is__take__view_3_01rng_1_1take__view_3_01T_01_4_01_4__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..0ccff0677d1b02a3477f67dbad58714a8100a1fe GIT binary patch literal 6361 zcmchchdb5r+sBWQy(*%E>`2O9$KGTnAuBVH6_St$M>fgGUdKrG$jTn6kWJaL$sWmg z?sNUF=ee%mKk!^G&i6X!IN#6b{@nNb{krcHqNAlkPJ$#sAQ0qgs*1YsSOmX5L0Iax(& z+!k)?4^9`J6&ZD`-6^U+nDeNg?;YCUk=PjVV0><%w06ajvFl0EulojTMmNW}sT%z9 z6>+%?ju>57nBM`I`t~03nk;2|6ba-3-y~qCQaE;I3a*T}*K{u(*&xQs` zAt50{BLbV~aH2uq?GD%u(RAjaA{t`yZ%X<4ZMPp;*Sj|(my1F_l8k(Tu;$qlGG(%97FfyVnASf6j zpUIafGPIbhnXKyRS)(--N^|o|{4Hbmo$FdDs*V5tNXQeh4CZNb{`%xRDt?WIMyc_5 zwGgLoJQ~d?;Srsm&n5EN_tdN0bK87GSMqf)8q!SY8vNS~wG;4giBDzdVO$ZJxev7Fkg@7_zl zL^(K|owIOX3UT=}QOnYAMf|a|@>>FL*UrMXyGBN#6}EkrJHNZ5RoNkV&FLn4?8(}i z$H%W06%{#LW5IWHbiCf>UEX8n;OMwNU|(g#SyE9E>ln~A&%(i>v_ydG<&Y{67>HT17RT9j{^2jg^htEtFyCDzXmA>jB^sC9n(%UcfhH+L|| z%Cts9SB)q9X$MN-RPsi~#vzKVER@$I`Mh`p1!G?l-z^;eeX#K>r?T?h<0>Q87**Am zFQr(lXK48q9OK`;i}pVJv(ll@9rt^&C;4OX#DvMfj~^NLa?8qMelILYRf&_O(y|18 zG_8;So-XsS#Ah>Ncydycgp`!rS3jVCkW~2ALcwDP2X-wjt=}LVUR`8T5~fdCknsP;O-}#~WS%tu#(>iL< z9D=B(-Cl_wkA)r$iZNv7Rx$VY_iLMS^6-3|p2xw#>ErIQFAcrHOM>AYs-!LqNb-2Y z+&(~}e0!);q5ZF`ta^k5yWyVF$NYREB_*Z!cYN$rd}5=F0o8;`Tjh3)HMk1}rHOWG zeI>Essw6_bu?y{gv`6pb$n;j!A7C*1WHe-L*2e6`9IqqYM^f1y@{1e^dmY5@YV+9C z-72zUm+Pv0v^eS3KGjK}j_~7iS*)GuFsVk$=iBv!r?g1k!c#$*6A3XJTG(l_k=q*y zD)`Zm{iwe=aizI6;(dGf+azV=P~{`*$s2QI1ZvDP2aEg&gMxM+^;M*u&S28TPMokr z&PUd&eW*5WbvtAT_Br{|JEW4eIn5SCW~MJ=!pq*|UnCMPdVjPp-fHV7MliF?XpN8{ zH~ZxG@ggxiUs~qB-Ej#QjVO$`mM2LAcY96s5na}SBoM);YI+fA*mqbN%nwh`6fu3l zN4L1|?YS0s%D20rPbhq=V>KfeW61cQBZ{|t_J8*K|MRBh z)8EI(`)dgTWNs6eER`>@yI)NFAemA0b3peaQvS=Qt5>h8A1{t0Z>}#biSC6e3#9(_ zlc06UOP{ZR67cJaVp?0E7cQ!={})Y?r9+T~!E~5QGyc~`(e0HWQe&kScqkMqtv2H8 z*E^L}RqyY{t@xa5cY&hzNfmSSjVIAnOKrs6G|+kQKz!MQo16Q`)RYr}l0sB%?~5EO z_k-qvoSd9QOez>E8+f5**%;3TImaSuDKCiXb#Jehn7H@@_On6D>NI_fZf1G;z)XXY zv-9ZWWJG8viKOodT~AMs=hh64@nUynri#tIdzZg{`Q`B*xVaa*rP6_Pe5s zA5J%5BT-$wI=r?PVkU)*=zPp@k6&HeSXcM;XYa#SaF;unOHj$EE>J2W>GY_b9oO)y zf&|^&-CVr9T@b6SZq9TBVrOT^eLy9Wp#@L^?<^T85Qw>1?J{$qRl*47}>i}dur zN{Z=4oibpJ7cN}DMxx>K=a{!|Ujx)lG`(UnD!LMNO{%r#>3r$adF8QRzt*a-fCEm{ z-q|^aNidUlbi4%`Nmy$V*`KYF4W9#kktk%R+hhbD^YrBCsl#L)jfjZU%Z}53hh z6b`?tH8)dm_UH?Xiz)scY_wH7{%YnUYdk;mwzjdE1$YZADd7zb3wydXBj% zg>pGPe)fBDF{`@z%Ixf{VU;}%E*@Tly{P-CR*D#ozpNjer`E&t z+EOK+Z*|Z=F zQ;N#U1XEsXx8M<=qus#3pslZul7oW-vXD;7OQ^2C{_eedgU$_RJ>%o!2(N3Yqa_bT zQ6ty5;){xI;o{;l$KC1w`I7{a3${c}Lxba&W=Bdw;<7e!OCuFU11Alk6&f$~JKM(t z;%}eIm(Qev!vO%xFDg=Ua}zXsu|R{6N>f!;FHw<6UAn>n(4YC8L{{cM6ajVB@^f{H4S zjHKWr3t;j+lFM5UB))viC~?4gC2V`#Ha!zc|C94{C)^=II$kqG*lqxe?qVnuD;F1$ zzrX)j(<_;z)Br~P;^oT$(8lECzmP#Fu83ZCvEA_P=_i%xz+oA?E zj}Fs~jL9O7ucM+U8yXs*Jau(-XErv9vP+sW<#?r~rMC_al+Dbpk&uuuUkPjB^P=BC zH0Kz`Ue|0Ludtn+neqGaLkHxdt*eXBwl~H9(|Nl5U4~ zbGu)KX=RV66Pmah&uvza|5E#5?(78yMn=N$h532B+X-RNVevc|sPN{6^R?|uQ}Xd? z=&yEkaG*jWLm?0l(20f@gEJrdDgZyJ7#SnN!^yrUi)wdW?sOW+^WU}Zth5`Hr$av& z`1K^I^>=q{KR8rtt2`hxk4X*H{{B8>1f*?#e!d?F*^!U5ab9ih)yc`pH*enXB^H1D z*bXT;v$7Hb4X*k6SQ(IdpdR;ysIIoJaW^%+NcVSl74F}s0j=sE8Va-<%$4J!p6gAO z;JSSqS|>J3E33@@$9yk#tPwx@C45gjiSThv>fDK;n(pOl;H38j>v1bReaa720Onx1 zGq24|HS=e(o`{&ZpFZJG$`(OHMz$_`rHv2Ufj@m}5qu|GIRfhqK=?t}raM1x^yJjk zSz&auTT-6rj=K8At5=B$2??QvlPl26DlLT$3YVCe_{+C%3a+jKVhmEhuI6Ac7f6D# zmI1Fhj~D4D@uh*^W0AQ!WSP1J?o)2XW}mSw*xaDDjBsrPh)!i?Wnv@o1QN-jhi+&j3Bf6D6)b5I-WxR` ztF_ZklOzVefmX_x_w%cBUxX}(bdAYvXrs1vzVTYY${>6*E@E3dJFSH!jrQ)ncQLxN z$CEyR#G!i5JJnbKCvl_`rOdq9*?#Wxaxbdt#Yy`+T^dC-4e+t z5uKDo0xE=979D|UPV<86xY`+X*I7kHJwMvQ?1kc6$esUW4Op~X z37wy&eZwLnBXJ%Qf$D8Ro@jSfCh$H)7Z%>6L*uaE3%n4&%a?6k~t%B1}rLZe28Ulx!hkpdO4i86H)Pm$${=HIF zB?8#Q!UIG=q^Ys-S}+CUYgKm3rE{n0#t482KB{qK1qzWprWP@1m^AtNP^@JY- z1Fx5tmzM;b9KaF5ry$S(kyNy_c@-uSdd~>kN|W<$-MrbBCgmNSk`n&r4bj;6_$-v~ zx>aogF!UUFHz?A&@95oZ<(A>$`%4QswD(5pJ1qIJ4k0?_i3h}T>hw~GLw|Fm1@^|y z!O;S2H2vya3Rc8SP4Y}+3>cXe=2Jk>Si7TO5JME{hXG2xQDhAV>Xtpt9T*-C!d|h) zWMpOGT3A?kp6-ucWMKI2#Lo~~x7eD+Yw6+PQCd}{WNXVQA(>xXOpxBEA}^0ihsHJ@ z*Q9;&KiTjzGb6yPTOso@bhxlp%m%_R{qm4e2uWU#QwKPL<*JpQhg{UH-QC1khkEu* zc*=WID%<8ic)}pzLFQV^aG6sJKjB+YLpfcF-&tdbfZ4G_(`tut zT&Ns(4-e#I&idL~*!20?;SpFkF-A9}y z=P5E<+odHlP`|&oOIBCyU207{jDB|u{n#z~0du69+S-=3Hauhm0q6*Gp!r12Q<%yG z0)WCOE@Rjpc1`l?)vJT;pFe+w9v^#&XcrD=WoF`lvP?})U3U(`^YZ!zS3NxuJ)D6V zIXU>gzP>1{d4J1EXrN%Y1N|1lYtfV*i9}mB80qU1NTYy literal 0 HcmV?d00001 diff --git a/doxygen/structdr_1_1is__take__view_3_01rng_1_1take__view_3_01T_01_4_01_4__inherit__graph.map b/doxygen/structdr_1_1is__take__view_3_01rng_1_1take__view_3_01T_01_4_01_4__inherit__graph.map new file mode 100644 index 0000000000..d17238c2f0 --- /dev/null +++ b/doxygen/structdr_1_1is__take__view_3_01rng_1_1take__view_3_01T_01_4_01_4__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/structdr_1_1is__take__view_3_01rng_1_1take__view_3_01T_01_4_01_4__inherit__graph.md5 b/doxygen/structdr_1_1is__take__view_3_01rng_1_1take__view_3_01T_01_4_01_4__inherit__graph.md5 new file mode 100644 index 0000000000..0384f52d7e --- /dev/null +++ b/doxygen/structdr_1_1is__take__view_3_01rng_1_1take__view_3_01T_01_4_01_4__inherit__graph.md5 @@ -0,0 +1 @@ +df14a0d4b41133f525f1af75f10c3f60 \ No newline at end of file diff --git a/doxygen/structdr_1_1is__take__view_3_01rng_1_1take__view_3_01T_01_4_01_4__inherit__graph.png b/doxygen/structdr_1_1is__take__view_3_01rng_1_1take__view_3_01T_01_4_01_4__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..0ccff0677d1b02a3477f67dbad58714a8100a1fe GIT binary patch literal 6361 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 literal 0 HcmV?d00001 diff --git a/doxygen/structdr_1_1is__take__view__coll__graph.map b/doxygen/structdr_1_1is__take__view__coll__graph.map new file mode 100644 index 0000000000..2b8a5ece5b --- /dev/null +++ b/doxygen/structdr_1_1is__take__view__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/structdr_1_1is__take__view__coll__graph.md5 b/doxygen/structdr_1_1is__take__view__coll__graph.md5 new file mode 100644 index 0000000000..d71720fd7b --- /dev/null +++ b/doxygen/structdr_1_1is__take__view__coll__graph.md5 @@ -0,0 +1 @@ +7fb2e69bbdde7ac7007449ec0cca1c40 \ No newline at end of file diff --git a/doxygen/structdr_1_1is__take__view__coll__graph.png b/doxygen/structdr_1_1is__take__view__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..cb7c212aa26976e2fa2f4022ad8697bff7958281 GIT binary patch literal 4701 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 j|JQ?zDrpkMCme literal 0 HcmV?d00001 diff --git a/doxygen/structdr_1_1is__take__view__inherit__graph.map b/doxygen/structdr_1_1is__take__view__inherit__graph.map new file mode 100644 index 0000000000..2b8a5ece5b --- /dev/null +++ b/doxygen/structdr_1_1is__take__view__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/structdr_1_1is__take__view__inherit__graph.md5 b/doxygen/structdr_1_1is__take__view__inherit__graph.md5 new file mode 100644 index 0000000000..d71720fd7b --- /dev/null +++ b/doxygen/structdr_1_1is__take__view__inherit__graph.md5 @@ -0,0 +1 @@ +7fb2e69bbdde7ac7007449ec0cca1c40 \ No newline at end of file diff --git a/doxygen/structdr_1_1is__take__view__inherit__graph.png b/doxygen/structdr_1_1is__take__view__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..cb7c212aa26976e2fa2f4022ad8697bff7958281 GIT binary patch literal 4701 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 j|JQ?zDrpkMCme literal 0 HcmV?d00001 diff --git a/doxygen/structdr_1_1is__zip__view.html b/doxygen/structdr_1_1is__zip__view.html new file mode 100644 index 0000000000..76c52444b9 --- /dev/null +++ b/doxygen/structdr_1_1is__zip__view.html @@ -0,0 +1,106 @@ + + + + + + + +Distributed Ranges: dr::is_zip_view< T > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::is_zip_view< T > Struct Template Reference
    +
    +
    +
    +Inheritance diagram for dr::is_zip_view< T >:
    +
    +
    Inheritance graph
    + + + + +
    [legend]
    +
    +Collaboration diagram for dr::is_zip_view< T >:
    +
    +
    Collaboration graph
    + + + + +
    [legend]
    +
    The documentation for this struct was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/detail/view_detectors.hpp
    • +
    +
    + + + + diff --git a/doxygen/structdr_1_1is__zip__view_3_01rng_1_1zip__view_3_01Views_8_8_8_01_4_01_4.html b/doxygen/structdr_1_1is__zip__view_3_01rng_1_1zip__view_3_01Views_8_8_8_01_4_01_4.html new file mode 100644 index 0000000000..6a2ce0e6ad --- /dev/null +++ b/doxygen/structdr_1_1is__zip__view_3_01rng_1_1zip__view_3_01Views_8_8_8_01_4_01_4.html @@ -0,0 +1,106 @@ + + + + + + + +Distributed Ranges: dr::is_zip_view< rng::zip_view< Views... > > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::is_zip_view< rng::zip_view< Views... > > Struct Template Reference
    +
    +
    +
    +Inheritance diagram for dr::is_zip_view< rng::zip_view< Views... > >:
    +
    +
    Inheritance graph
    + + + + +
    [legend]
    +
    +Collaboration diagram for dr::is_zip_view< rng::zip_view< Views... > >:
    +
    +
    Collaboration graph
    + + + + +
    [legend]
    +
    The documentation for this struct was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/detail/view_detectors.hpp
    • +
    +
    + + + + diff --git a/doxygen/structdr_1_1is__zip__view_3_01rng_1_1zip__view_3_01Views_8_8_8_01_4_01_4__coll__graph.map b/doxygen/structdr_1_1is__zip__view_3_01rng_1_1zip__view_3_01Views_8_8_8_01_4_01_4__coll__graph.map new file mode 100644 index 0000000000..5a9c141c11 --- /dev/null +++ b/doxygen/structdr_1_1is__zip__view_3_01rng_1_1zip__view_3_01Views_8_8_8_01_4_01_4__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/structdr_1_1is__zip__view_3_01rng_1_1zip__view_3_01Views_8_8_8_01_4_01_4__coll__graph.md5 b/doxygen/structdr_1_1is__zip__view_3_01rng_1_1zip__view_3_01Views_8_8_8_01_4_01_4__coll__graph.md5 new file mode 100644 index 0000000000..370b072008 --- /dev/null +++ b/doxygen/structdr_1_1is__zip__view_3_01rng_1_1zip__view_3_01Views_8_8_8_01_4_01_4__coll__graph.md5 @@ -0,0 +1 @@ +0b5ffce679f56979a39fd7ac2b3c5a08 \ No newline at end of file diff --git a/doxygen/structdr_1_1is__zip__view_3_01rng_1_1zip__view_3_01Views_8_8_8_01_4_01_4__coll__graph.png b/doxygen/structdr_1_1is__zip__view_3_01rng_1_1zip__view_3_01Views_8_8_8_01_4_01_4__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..f0d273f9e4086a08bc8ad15176c903174cbc65f0 GIT binary patch literal 6510 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 U9iT13A5c(aBoxI9MD=|C3xpojxBvhE literal 0 HcmV?d00001 diff --git a/doxygen/structdr_1_1is__zip__view_3_01rng_1_1zip__view_3_01Views_8_8_8_01_4_01_4__inherit__graph.map b/doxygen/structdr_1_1is__zip__view_3_01rng_1_1zip__view_3_01Views_8_8_8_01_4_01_4__inherit__graph.map new file mode 100644 index 0000000000..5a9c141c11 --- /dev/null +++ b/doxygen/structdr_1_1is__zip__view_3_01rng_1_1zip__view_3_01Views_8_8_8_01_4_01_4__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/structdr_1_1is__zip__view_3_01rng_1_1zip__view_3_01Views_8_8_8_01_4_01_4__inherit__graph.md5 b/doxygen/structdr_1_1is__zip__view_3_01rng_1_1zip__view_3_01Views_8_8_8_01_4_01_4__inherit__graph.md5 new file mode 100644 index 0000000000..370b072008 --- /dev/null +++ b/doxygen/structdr_1_1is__zip__view_3_01rng_1_1zip__view_3_01Views_8_8_8_01_4_01_4__inherit__graph.md5 @@ -0,0 +1 @@ +0b5ffce679f56979a39fd7ac2b3c5a08 \ No newline at end of file diff --git a/doxygen/structdr_1_1is__zip__view_3_01rng_1_1zip__view_3_01Views_8_8_8_01_4_01_4__inherit__graph.png b/doxygen/structdr_1_1is__zip__view_3_01rng_1_1zip__view_3_01Views_8_8_8_01_4_01_4__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..f0d273f9e4086a08bc8ad15176c903174cbc65f0 GIT binary patch literal 6510 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 U9iT13A5c(aBoxI9MD=|C3xpojxBvhE literal 0 HcmV?d00001 diff --git a/doxygen/structdr_1_1is__zip__view__coll__graph.map b/doxygen/structdr_1_1is__zip__view__coll__graph.map new file mode 100644 index 0000000000..b7178db2e9 --- /dev/null +++ b/doxygen/structdr_1_1is__zip__view__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/structdr_1_1is__zip__view__coll__graph.md5 b/doxygen/structdr_1_1is__zip__view__coll__graph.md5 new file mode 100644 index 0000000000..f738559ed4 --- /dev/null +++ b/doxygen/structdr_1_1is__zip__view__coll__graph.md5 @@ -0,0 +1 @@ +99c087d18bc4b487a737135592836a9d \ No newline at end of file diff --git a/doxygen/structdr_1_1is__zip__view__coll__graph.png b/doxygen/structdr_1_1is__zip__view__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..c2ed105bbfa5d439015f7896459624a7c9d77206 GIT binary patch literal 4628 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 X$OA4qw*06t literal 0 HcmV?d00001 diff --git a/doxygen/structdr_1_1is__zip__view__inherit__graph.map b/doxygen/structdr_1_1is__zip__view__inherit__graph.map new file mode 100644 index 0000000000..b7178db2e9 --- /dev/null +++ b/doxygen/structdr_1_1is__zip__view__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/structdr_1_1is__zip__view__inherit__graph.md5 b/doxygen/structdr_1_1is__zip__view__inherit__graph.md5 new file mode 100644 index 0000000000..f738559ed4 --- /dev/null +++ b/doxygen/structdr_1_1is__zip__view__inherit__graph.md5 @@ -0,0 +1 @@ +99c087d18bc4b487a737135592836a9d \ No newline at end of file diff --git a/doxygen/structdr_1_1is__zip__view__inherit__graph.png b/doxygen/structdr_1_1is__zip__view__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..c2ed105bbfa5d439015f7896459624a7c9d77206 GIT binary patch literal 4628 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 X$OA4qw*06t literal 0 HcmV?d00001 diff --git a/doxygen/structdr_1_1mp_1_1____detail_1_1any-members.html b/doxygen/structdr_1_1mp_1_1____detail_1_1any-members.html new file mode 100644 index 0000000000..01a7b5dd6e --- /dev/null +++ b/doxygen/structdr_1_1mp_1_1____detail_1_1any-members.html @@ -0,0 +1,89 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::mp::__detail::any Member List
    +
    +
    + +

    This is the complete list of members for dr::mp::__detail::any, including all inherited members.

    + + +
    operator T() const noexcept (defined in dr::mp::__detail::any)dr::mp::__detail::anyinline
    + + + + diff --git a/doxygen/structdr_1_1mp_1_1____detail_1_1any.html b/doxygen/structdr_1_1mp_1_1____detail_1_1any.html new file mode 100644 index 0000000000..e0879e1993 --- /dev/null +++ b/doxygen/structdr_1_1mp_1_1____detail_1_1any.html @@ -0,0 +1,99 @@ + + + + + + + +Distributed Ranges: dr::mp::__detail::any Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::mp::__detail::any Struct Reference
    +
    +
    + + + + + +

    +Public Member Functions

    +template<typename T >
     operator T () const noexcept
     
    +
    The documentation for this struct was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/algorithms/md_for_each.hpp
    • +
    +
    + + + + diff --git a/doxygen/structdr_1_1mp_1_1____detail_1_1global__context-members.html b/doxygen/structdr_1_1mp_1_1____detail_1_1global__context-members.html new file mode 100644 index 0000000000..56ff45839b --- /dev/null +++ b/doxygen/structdr_1_1mp_1_1____detail_1_1global__context-members.html @@ -0,0 +1,97 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::mp::__detail::global_context Member List
    +
    + + + + + diff --git a/doxygen/structdr_1_1mp_1_1____detail_1_1global__context.html b/doxygen/structdr_1_1mp_1_1____detail_1_1global__context.html new file mode 100644 index 0000000000..279b3afba2 --- /dev/null +++ b/doxygen/structdr_1_1mp_1_1____detail_1_1global__context.html @@ -0,0 +1,134 @@ + + + + + + + +Distributed Ranges: dr::mp::__detail::global_context Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::mp::__detail::global_context Struct Reference
    +
    +
    +
    +Collaboration diagram for dr::mp::__detail::global_context:
    +
    +
    Collaboration graph
    + + + + + +
    [legend]
    + + + + +

    +Public Member Functions

    +void init ()
     
    + + + + + + + + + + + +

    +Public Attributes

    +bool use_sycl_ = false
     
    +dr::communicator comm_
     
    +std::set< MPI_Win > wins_
     
    +dr::rma_window root_win_
     
    +std::vector< char > root_scratchpad_
     
    + + + +

    +Static Public Attributes

    +static constexpr std::size_t scratchpad_size_ = 1000000
     
    +
    The documentation for this struct was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/global.hpp
    • +
    +
    + + + + diff --git a/doxygen/structdr_1_1mp_1_1____detail_1_1global__context__coll__graph.map b/doxygen/structdr_1_1mp_1_1____detail_1_1global__context__coll__graph.map new file mode 100644 index 0000000000..6ce65a69d0 --- /dev/null +++ b/doxygen/structdr_1_1mp_1_1____detail_1_1global__context__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/doxygen/structdr_1_1mp_1_1____detail_1_1global__context__coll__graph.md5 b/doxygen/structdr_1_1mp_1_1____detail_1_1global__context__coll__graph.md5 new file mode 100644 index 0000000000..eaec616759 --- /dev/null +++ b/doxygen/structdr_1_1mp_1_1____detail_1_1global__context__coll__graph.md5 @@ -0,0 +1 @@ +b2d067a8a5b159689bb804934306b217 \ No newline at end of file diff --git a/doxygen/structdr_1_1mp_1_1____detail_1_1global__context__coll__graph.png b/doxygen/structdr_1_1mp_1_1____detail_1_1global__context__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..d5e18d21061e6d5dac627f76ddd2949ae931d7ee GIT binary patch literal 9314 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 a(2s`3?WCLo4#7=BC~u{er79(jKm8xtJ-bl= literal 0 HcmV?d00001 diff --git a/doxygen/structdr_1_1mp_1_1device__policy.html b/doxygen/structdr_1_1mp_1_1device__policy.html new file mode 100644 index 0000000000..34035dfcb2 --- /dev/null +++ b/doxygen/structdr_1_1mp_1_1device__policy.html @@ -0,0 +1,88 @@ + + + + + + + +Distributed Ranges: dr::mp::device_policy Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::mp::device_policy Struct Reference
    +
    +
    +
    The documentation for this struct was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/sycl_support.hpp
    • +
    +
    + + + + diff --git a/doxygen/structdr_1_1mp_1_1distribution-members.html b/doxygen/structdr_1_1mp_1_1distribution-members.html new file mode 100644 index 0000000000..8be443468f --- /dev/null +++ b/doxygen/structdr_1_1mp_1_1distribution-members.html @@ -0,0 +1,95 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::mp::distribution Member List
    +
    +
    + +

    This is the complete list of members for dr::mp::distribution, including all inherited members.

    + + + + + + + + +
    granularity(std::size_t size) (defined in dr::mp::distribution)dr::mp::distributioninline
    granularity() const (defined in dr::mp::distribution)dr::mp::distributioninline
    halo(std::size_t radius) (defined in dr::mp::distribution)dr::mp::distributioninline
    halo(std::size_t prev, std::size_t next) (defined in dr::mp::distribution)dr::mp::distributioninline
    halo() const (defined in dr::mp::distribution)dr::mp::distributioninline
    periodic(bool periodic) (defined in dr::mp::distribution)dr::mp::distributioninline
    periodic() const (defined in dr::mp::distribution)dr::mp::distributioninline
    + + + + diff --git a/doxygen/structdr_1_1mp_1_1distribution.html b/doxygen/structdr_1_1mp_1_1distribution.html new file mode 100644 index 0000000000..d546bb136e --- /dev/null +++ b/doxygen/structdr_1_1mp_1_1distribution.html @@ -0,0 +1,116 @@ + + + + + + + +Distributed Ranges: dr::mp::distribution Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::mp::distribution Struct Reference
    +
    +
    + + + + + + + + + + + + + + + + +

    +Public Member Functions

    +distributionhalo (std::size_t radius)
     
    +distributionhalo (std::size_t prev, std::size_t next)
     
    +auto halo () const
     
    +distributionperiodic (bool periodic)
     
    +auto periodic () const
     
    +distributiongranularity (std::size_t size)
     
    +auto granularity () const
     
    +
    The documentation for this struct was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/containers/distribution.hpp
    • +
    +
    + + + + diff --git a/doxygen/structdr_1_1mp_1_1halo__bounds-members.html b/doxygen/structdr_1_1mp_1_1halo__bounds-members.html new file mode 100644 index 0000000000..ab9d569882 --- /dev/null +++ b/doxygen/structdr_1_1mp_1_1halo__bounds-members.html @@ -0,0 +1,91 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::mp::halo_bounds Member List
    +
    +
    + +

    This is the complete list of members for dr::mp::halo_bounds, including all inherited members.

    + + + + +
    next (defined in dr::mp::halo_bounds)dr::mp::halo_bounds
    periodic (defined in dr::mp::halo_bounds)dr::mp::halo_bounds
    prev (defined in dr::mp::halo_bounds)dr::mp::halo_bounds
    + + + + diff --git a/doxygen/structdr_1_1mp_1_1halo__bounds.html b/doxygen/structdr_1_1mp_1_1halo__bounds.html new file mode 100644 index 0000000000..7ea8b91b50 --- /dev/null +++ b/doxygen/structdr_1_1mp_1_1halo__bounds.html @@ -0,0 +1,104 @@ + + + + + + + +Distributed Ranges: dr::mp::halo_bounds Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::mp::halo_bounds Struct Reference
    +
    +
    + + + + + + + + +

    +Public Attributes

    +std::size_t prev = 0
     
    +std::size_t next = 0
     
    +bool periodic = false
     
    +
    The documentation for this struct was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/halo.hpp
    • +
    +
    + + + + diff --git a/doxygen/structdr_1_1mp_1_1halo__impl_1_1max__op-members.html b/doxygen/structdr_1_1mp_1_1halo__impl_1_1max__op-members.html new file mode 100644 index 0000000000..710b099f33 --- /dev/null +++ b/doxygen/structdr_1_1mp_1_1halo__impl_1_1max__op-members.html @@ -0,0 +1,89 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::mp::halo_impl< Group >::max_op Member List
    +
    +
    + +

    This is the complete list of members for dr::mp::halo_impl< Group >::max_op, including all inherited members.

    + + +
    operator()(T &a, T &b) const (defined in dr::mp::halo_impl< Group >::max_op)dr::mp::halo_impl< Group >::max_opinline
    + + + + diff --git a/doxygen/structdr_1_1mp_1_1halo__impl_1_1max__op.html b/doxygen/structdr_1_1mp_1_1halo__impl_1_1max__op.html new file mode 100644 index 0000000000..661f9f6759 --- /dev/null +++ b/doxygen/structdr_1_1mp_1_1halo__impl_1_1max__op.html @@ -0,0 +1,98 @@ + + + + + + + +Distributed Ranges: dr::mp::halo_impl< Group >::max_op Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::mp::halo_impl< Group >::max_op Struct Reference
    +
    +
    + + + + +

    +Public Member Functions

    +T operator() (T &a, T &b) const
     
    +
    The documentation for this struct was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/halo.hpp
    • +
    +
    + + + + diff --git a/doxygen/structdr_1_1mp_1_1halo__impl_1_1min__op-members.html b/doxygen/structdr_1_1mp_1_1halo__impl_1_1min__op-members.html new file mode 100644 index 0000000000..419ee9c592 --- /dev/null +++ b/doxygen/structdr_1_1mp_1_1halo__impl_1_1min__op-members.html @@ -0,0 +1,89 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::mp::halo_impl< Group >::min_op Member List
    +
    +
    + +

    This is the complete list of members for dr::mp::halo_impl< Group >::min_op, including all inherited members.

    + + +
    operator()(T &a, T &b) const (defined in dr::mp::halo_impl< Group >::min_op)dr::mp::halo_impl< Group >::min_opinline
    + + + + diff --git a/doxygen/structdr_1_1mp_1_1halo__impl_1_1min__op.html b/doxygen/structdr_1_1mp_1_1halo__impl_1_1min__op.html new file mode 100644 index 0000000000..2a95c245df --- /dev/null +++ b/doxygen/structdr_1_1mp_1_1halo__impl_1_1min__op.html @@ -0,0 +1,98 @@ + + + + + + + +Distributed Ranges: dr::mp::halo_impl< Group >::min_op Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::mp::halo_impl< Group >::min_op Struct Reference
    +
    +
    + + + + +

    +Public Member Functions

    +T operator() (T &a, T &b) const
     
    +
    The documentation for this struct was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/halo.hpp
    • +
    +
    + + + + diff --git a/doxygen/structdr_1_1mp_1_1halo__impl_1_1multiplies__op-members.html b/doxygen/structdr_1_1mp_1_1halo__impl_1_1multiplies__op-members.html new file mode 100644 index 0000000000..f5d53c4b42 --- /dev/null +++ b/doxygen/structdr_1_1mp_1_1halo__impl_1_1multiplies__op-members.html @@ -0,0 +1,89 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::mp::halo_impl< Group >::multiplies_op Member List
    +
    +
    + +

    This is the complete list of members for dr::mp::halo_impl< Group >::multiplies_op, including all inherited members.

    + + +
    operator()(T &a, T &b) const (defined in dr::mp::halo_impl< Group >::multiplies_op)dr::mp::halo_impl< Group >::multiplies_opinline
    + + + + diff --git a/doxygen/structdr_1_1mp_1_1halo__impl_1_1multiplies__op.html b/doxygen/structdr_1_1mp_1_1halo__impl_1_1multiplies__op.html new file mode 100644 index 0000000000..e6e634424b --- /dev/null +++ b/doxygen/structdr_1_1mp_1_1halo__impl_1_1multiplies__op.html @@ -0,0 +1,98 @@ + + + + + + + +Distributed Ranges: dr::mp::halo_impl< Group >::multiplies_op Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::mp::halo_impl< Group >::multiplies_op Struct Reference
    +
    +
    + + + + +

    +Public Member Functions

    +T operator() (T &a, T &b) const
     
    +
    The documentation for this struct was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/halo.hpp
    • +
    +
    + + + + diff --git a/doxygen/structdr_1_1mp_1_1halo__impl_1_1plus__op-members.html b/doxygen/structdr_1_1mp_1_1halo__impl_1_1plus__op-members.html new file mode 100644 index 0000000000..962ddb559a --- /dev/null +++ b/doxygen/structdr_1_1mp_1_1halo__impl_1_1plus__op-members.html @@ -0,0 +1,89 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::mp::halo_impl< Group >::plus_op Member List
    +
    +
    + +

    This is the complete list of members for dr::mp::halo_impl< Group >::plus_op, including all inherited members.

    + + +
    operator()(T &a, T &b) const (defined in dr::mp::halo_impl< Group >::plus_op)dr::mp::halo_impl< Group >::plus_opinline
    + + + + diff --git a/doxygen/structdr_1_1mp_1_1halo__impl_1_1plus__op.html b/doxygen/structdr_1_1mp_1_1halo__impl_1_1plus__op.html new file mode 100644 index 0000000000..d4992f3c55 --- /dev/null +++ b/doxygen/structdr_1_1mp_1_1halo__impl_1_1plus__op.html @@ -0,0 +1,98 @@ + + + + + + + +Distributed Ranges: dr::mp::halo_impl< Group >::plus_op Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::mp::halo_impl< Group >::plus_op Struct Reference
    +
    +
    + + + + +

    +Public Member Functions

    +T operator() (T &a, T &b) const
     
    +
    The documentation for this struct was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/halo.hpp
    • +
    +
    + + + + diff --git a/doxygen/structdr_1_1mp_1_1halo__impl_1_1second__op-members.html b/doxygen/structdr_1_1mp_1_1halo__impl_1_1second__op-members.html new file mode 100644 index 0000000000..8427a8b9b6 --- /dev/null +++ b/doxygen/structdr_1_1mp_1_1halo__impl_1_1second__op-members.html @@ -0,0 +1,89 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::mp::halo_impl< Group >::second_op Member List
    +
    +
    + +

    This is the complete list of members for dr::mp::halo_impl< Group >::second_op, including all inherited members.

    + + +
    operator()(T &a, T &b) const (defined in dr::mp::halo_impl< Group >::second_op)dr::mp::halo_impl< Group >::second_opinline
    + + + + diff --git a/doxygen/structdr_1_1mp_1_1halo__impl_1_1second__op.html b/doxygen/structdr_1_1mp_1_1halo__impl_1_1second__op.html new file mode 100644 index 0000000000..39e44b9084 --- /dev/null +++ b/doxygen/structdr_1_1mp_1_1halo__impl_1_1second__op.html @@ -0,0 +1,98 @@ + + + + + + + +Distributed Ranges: dr::mp::halo_impl< Group >::second_op Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::mp::halo_impl< Group >::second_op Struct Reference
    +
    +
    + + + + +

    +Public Member Functions

    +T operator() (T &a, T &b) const
     
    +
    The documentation for this struct was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/halo.hpp
    • +
    +
    + + + + diff --git a/doxygen/structdr_1_1mp_1_1mdspan__view-members.html b/doxygen/structdr_1_1mp_1_1mdspan__view-members.html new file mode 100644 index 0000000000..0e12e277ea --- /dev/null +++ b/doxygen/structdr_1_1mp_1_1mdspan__view-members.html @@ -0,0 +1,97 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::mp::mdspan_view< R, Rank, Layout > Member List
    +
    +
    + +

    This is the complete list of members for dr::mp::mdspan_view< R, Rank, Layout >, including all inherited members.

    + + + + + + + + + + +
    begin() const (defined in dr::mp::mdspan_view< R, Rank, Layout >)dr::mp::mdspan_view< R, Rank, Layout >inline
    end() const (defined in dr::mp::mdspan_view< R, Rank, Layout >)dr::mp::mdspan_view< R, Rank, Layout >inline
    grid() (defined in dr::mp::mdspan_view< R, Rank, Layout >)dr::mp::mdspan_view< R, Rank, Layout >inline
    mdspan() const (defined in dr::mp::mdspan_view< R, Rank, Layout >)dr::mp::mdspan_view< R, Rank, Layout >inline
    mdspan_view(R r, dr::__detail::dr_extents< Rank > full_shape) (defined in dr::mp::mdspan_view< R, Rank, Layout >)dr::mp::mdspan_view< R, Rank, Layout >inline
    mdspan_view(R r, dr::__detail::dr_extents< Rank > full_shape, dr::__detail::dr_extents< Rank > tile_shape) (defined in dr::mp::mdspan_view< R, Rank, Layout >)dr::mp::mdspan_view< R, Rank, Layout >inline
    operator[](difference_type n) (defined in dr::mp::mdspan_view< R, Rank, Layout >)dr::mp::mdspan_view< R, Rank, Layout >inline
    rank() (defined in dr::mp::mdspan_view< R, Rank, Layout >)dr::mp::mdspan_view< R, Rank, Layout >inlinestatic
    segments() const (defined in dr::mp::mdspan_view< R, Rank, Layout >)dr::mp::mdspan_view< R, Rank, Layout >inline
    + + + + diff --git a/doxygen/structdr_1_1mp_1_1mdspan__view.html b/doxygen/structdr_1_1mp_1_1mdspan__view.html new file mode 100644 index 0000000000..314ff9e949 --- /dev/null +++ b/doxygen/structdr_1_1mp_1_1mdspan__view.html @@ -0,0 +1,144 @@ + + + + + + + +Distributed Ranges: dr::mp::mdspan_view< R, Rank, Layout > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::mp::mdspan_view< R, Rank, Layout > Struct Template Reference
    +
    +
    +
    +Inheritance diagram for dr::mp::mdspan_view< R, Rank, Layout >:
    +
    +
    Inheritance graph
    + + + + +
    [legend]
    +
    +Collaboration diagram for dr::mp::mdspan_view< R, Rank, Layout >:
    +
    +
    Collaboration graph
    + + + + +
    [legend]
    + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    mdspan_view (R r, dr::__detail::dr_extents< Rank > full_shape)
     
    mdspan_view (R r, dr::__detail::dr_extents< Rank > full_shape, dr::__detail::dr_extents< Rank > tile_shape)
     
    +auto begin () const
     
    +auto end () const
     
    +auto operator[] (difference_type n)
     
    +auto mdspan () const
     
    +auto segments () const
     
    +auto grid ()
     
    + + + +

    +Static Public Member Functions

    +static constexpr auto rank ()
     
    +
    The documentation for this struct was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/views/mdspan_view.hpp
    • +
    +
    + + + + diff --git a/doxygen/structdr_1_1mp_1_1mdspan__view__coll__graph.map b/doxygen/structdr_1_1mp_1_1mdspan__view__coll__graph.map new file mode 100644 index 0000000000..85e993d626 --- /dev/null +++ b/doxygen/structdr_1_1mp_1_1mdspan__view__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/structdr_1_1mp_1_1mdspan__view__coll__graph.md5 b/doxygen/structdr_1_1mp_1_1mdspan__view__coll__graph.md5 new file mode 100644 index 0000000000..fa5d885d0d --- /dev/null +++ b/doxygen/structdr_1_1mp_1_1mdspan__view__coll__graph.md5 @@ -0,0 +1 @@ +bf739661bb9505ac480fc6cd57b5724c \ No newline at end of file diff --git a/doxygen/structdr_1_1mp_1_1mdspan__view__coll__graph.png b/doxygen/structdr_1_1mp_1_1mdspan__view__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..468e8e5694c3bf0d0ea2ab2f996755a715129c2f GIT binary patch literal 8814 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 + + + diff --git a/doxygen/structdr_1_1mp_1_1mdspan__view__inherit__graph.md5 b/doxygen/structdr_1_1mp_1_1mdspan__view__inherit__graph.md5 new file mode 100644 index 0000000000..fa5d885d0d --- /dev/null +++ b/doxygen/structdr_1_1mp_1_1mdspan__view__inherit__graph.md5 @@ -0,0 +1 @@ +bf739661bb9505ac480fc6cd57b5724c \ No newline at end of file diff --git a/doxygen/structdr_1_1mp_1_1mdspan__view__inherit__graph.png b/doxygen/structdr_1_1mp_1_1mdspan__view__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..468e8e5694c3bf0d0ea2ab2f996755a715129c2f GIT binary patch literal 8814 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 + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::mp::submdspan_view< Base > Member List
    +
    +
    + +

    This is the complete list of members for dr::mp::submdspan_view< Base >, including all inherited members.

    + + + + + + + + +
    begin() const (defined in dr::mp::submdspan_view< Base >)dr::mp::submdspan_view< Base >inline
    end() const (defined in dr::mp::submdspan_view< Base >)dr::mp::submdspan_view< Base >inline
    grid() (defined in dr::mp::submdspan_view< Base >)dr::mp::submdspan_view< Base >inline
    mdspan() const (defined in dr::mp::submdspan_view< Base >)dr::mp::submdspan_view< Base >inline
    operator[](difference_type n) (defined in dr::mp::submdspan_view< Base >)dr::mp::submdspan_view< Base >inline
    segments() const (defined in dr::mp::submdspan_view< Base >)dr::mp::submdspan_view< Base >inline
    submdspan_view(is_mdspan_view auto base, extents_type slice_starts, extents_type slice_ends) (defined in dr::mp::submdspan_view< Base >)dr::mp::submdspan_view< Base >inline
    + + + + diff --git a/doxygen/structdr_1_1mp_1_1submdspan__view.html b/doxygen/structdr_1_1mp_1_1submdspan__view.html new file mode 100644 index 0000000000..17abe74721 --- /dev/null +++ b/doxygen/structdr_1_1mp_1_1submdspan__view.html @@ -0,0 +1,134 @@ + + + + + + + +Distributed Ranges: dr::mp::submdspan_view< Base > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::mp::submdspan_view< Base > Struct Template Reference
    +
    +
    +
    +Inheritance diagram for dr::mp::submdspan_view< Base >:
    +
    +
    Inheritance graph
    + + + + +
    [legend]
    +
    +Collaboration diagram for dr::mp::submdspan_view< Base >:
    +
    +
    Collaboration graph
    + + + + +
    [legend]
    + + + + + + + + + + + + + + + + +

    +Public Member Functions

    submdspan_view (is_mdspan_view auto base, extents_type slice_starts, extents_type slice_ends)
     
    +auto begin () const
     
    +auto end () const
     
    +auto operator[] (difference_type n)
     
    +auto mdspan () const
     
    +auto segments () const
     
    +auto grid ()
     
    +
    The documentation for this struct was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/views/submdspan_view.hpp
    • +
    +
    + + + + diff --git a/doxygen/structdr_1_1mp_1_1submdspan__view__coll__graph.map b/doxygen/structdr_1_1mp_1_1submdspan__view__coll__graph.map new file mode 100644 index 0000000000..0436b0c46c --- /dev/null +++ b/doxygen/structdr_1_1mp_1_1submdspan__view__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/structdr_1_1mp_1_1submdspan__view__coll__graph.md5 b/doxygen/structdr_1_1mp_1_1submdspan__view__coll__graph.md5 new file mode 100644 index 0000000000..775ff6393c --- /dev/null +++ b/doxygen/structdr_1_1mp_1_1submdspan__view__coll__graph.md5 @@ -0,0 +1 @@ +a248f4cce634574824b88589b63846bc \ No newline at end of file diff --git a/doxygen/structdr_1_1mp_1_1submdspan__view__coll__graph.png b/doxygen/structdr_1_1mp_1_1submdspan__view__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..92f526c60c7f6d5e69d05f6d56e13e16cfd62a43 GIT binary patch literal 8452 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 b*A*HzNos*m9pgWkI6~^ByjY2-!H53=^|`2_ literal 0 HcmV?d00001 diff --git a/doxygen/structdr_1_1mp_1_1submdspan__view__inherit__graph.map b/doxygen/structdr_1_1mp_1_1submdspan__view__inherit__graph.map new file mode 100644 index 0000000000..0436b0c46c --- /dev/null +++ b/doxygen/structdr_1_1mp_1_1submdspan__view__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/structdr_1_1mp_1_1submdspan__view__inherit__graph.md5 b/doxygen/structdr_1_1mp_1_1submdspan__view__inherit__graph.md5 new file mode 100644 index 0000000000..775ff6393c --- /dev/null +++ b/doxygen/structdr_1_1mp_1_1submdspan__view__inherit__graph.md5 @@ -0,0 +1 @@ +a248f4cce634574824b88589b63846bc \ No newline at end of file diff --git a/doxygen/structdr_1_1mp_1_1submdspan__view__inherit__graph.png b/doxygen/structdr_1_1mp_1_1submdspan__view__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..92f526c60c7f6d5e69d05f6d56e13e16cfd62a43 GIT binary patch literal 8452 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 b*A*HzNos*m9pgWkI6~^ByjY2-!H53=^|`2_ literal 0 HcmV?d00001 diff --git a/doxygen/structdr_1_1mp_1_1views_1_1____detail_1_1range__size-members.html b/doxygen/structdr_1_1mp_1_1views_1_1____detail_1_1range__size-members.html new file mode 100644 index 0000000000..4d529193ea --- /dev/null +++ b/doxygen/structdr_1_1mp_1_1views_1_1____detail_1_1range__size-members.html @@ -0,0 +1,89 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::mp::views::__detail::range_size< R > Member List
    +
    +
    + +

    This is the complete list of members for dr::mp::views::__detail::range_size< R >, including all inherited members.

    + + +
    type typedef (defined in dr::mp::views::__detail::range_size< R >)dr::mp::views::__detail::range_size< R >
    + + + + diff --git a/doxygen/structdr_1_1mp_1_1views_1_1____detail_1_1range__size.html b/doxygen/structdr_1_1mp_1_1views_1_1____detail_1_1range__size.html new file mode 100644 index 0000000000..abce98fe27 --- /dev/null +++ b/doxygen/structdr_1_1mp_1_1views_1_1____detail_1_1range__size.html @@ -0,0 +1,98 @@ + + + + + + + +Distributed Ranges: dr::mp::views::__detail::range_size< R > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::mp::views::__detail::range_size< R > Struct Template Reference
    +
    +
    + + + + +

    +Public Types

    +using type = std::size_t
     
    +
    The documentation for this struct was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/views/enumerate.hpp
    • +
    +
    + + + + diff --git a/doxygen/structdr_1_1mp_1_1views_1_1____detail_1_1range__size_3_01R_01_4-members.html b/doxygen/structdr_1_1mp_1_1views_1_1____detail_1_1range__size_3_01R_01_4-members.html new file mode 100644 index 0000000000..7439973c4d --- /dev/null +++ b/doxygen/structdr_1_1mp_1_1views_1_1____detail_1_1range__size_3_01R_01_4-members.html @@ -0,0 +1,89 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::mp::views::__detail::range_size< R > Member List
    +
    +
    + +

    This is the complete list of members for dr::mp::views::__detail::range_size< R >, including all inherited members.

    + + +
    type typedef (defined in dr::mp::views::__detail::range_size< R >)dr::mp::views::__detail::range_size< R >
    + + + + diff --git a/doxygen/structdr_1_1mp_1_1views_1_1____detail_1_1range__size_3_01R_01_4.html b/doxygen/structdr_1_1mp_1_1views_1_1____detail_1_1range__size_3_01R_01_4.html new file mode 100644 index 0000000000..45b05c405c --- /dev/null +++ b/doxygen/structdr_1_1mp_1_1views_1_1____detail_1_1range__size_3_01R_01_4.html @@ -0,0 +1,98 @@ + + + + + + + +Distributed Ranges: dr::mp::views::__detail::range_size< R > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::mp::views::__detail::range_size< R > Struct Template Reference
    +
    +
    + + + + +

    +Public Types

    +using type = rng::range_size_t< R >
     
    +
    The documentation for this struct was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/views/enumerate.hpp
    • +
    +
    + + + + diff --git a/doxygen/structdr_1_1mp_1_1views_1_1____detail_1_1sliding__fn-members.html b/doxygen/structdr_1_1mp_1_1views_1_1____detail_1_1sliding__fn-members.html new file mode 100644 index 0000000000..8eb1391700 --- /dev/null +++ b/doxygen/structdr_1_1mp_1_1views_1_1____detail_1_1sliding__fn-members.html @@ -0,0 +1,89 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::mp::views::__detail::sliding_fn Member List
    +
    +
    + +

    This is the complete list of members for dr::mp::views::__detail::sliding_fn, including all inherited members.

    + + +
    operator()(Rng &&r, Int n) const (defined in dr::mp::views::__detail::sliding_fn)dr::mp::views::__detail::sliding_fninline
    + + + + diff --git a/doxygen/structdr_1_1mp_1_1views_1_1____detail_1_1sliding__fn.html b/doxygen/structdr_1_1mp_1_1views_1_1____detail_1_1sliding__fn.html new file mode 100644 index 0000000000..36adc3c612 --- /dev/null +++ b/doxygen/structdr_1_1mp_1_1views_1_1____detail_1_1sliding__fn.html @@ -0,0 +1,100 @@ + + + + + + + +Distributed Ranges: dr::mp::views::__detail::sliding_fn Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::mp::views::__detail::sliding_fn Struct Reference
    +
    +
    + + + + + +

    +Public Member Functions

    +template<typename Rng , typename Int >
    +requires rng::viewable_range<Rng> && rng::forward_range<Rng> && rng::detail::integer_like_<Int>
    auto operator() (Rng &&r, Int n) const
     
    +
    The documentation for this struct was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/views/sliding.hpp
    • +
    +
    + + + + diff --git a/doxygen/structdr_1_1ranges_1_1____detail_1_1local__fn__-members.html b/doxygen/structdr_1_1ranges_1_1____detail_1_1local__fn__-members.html new file mode 100644 index 0000000000..26615300a3 --- /dev/null +++ b/doxygen/structdr_1_1ranges_1_1____detail_1_1local__fn__-members.html @@ -0,0 +1,90 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::ranges::__detail::local_fn_ Member List
    +
    +
    + +

    This is the complete list of members for dr::ranges::__detail::local_fn_, including all inherited members.

    + + + +
    operator()(T &&t) const (defined in dr::ranges::__detail::local_fn_)dr::ranges::__detail::local_fn_inline
    operator()(T &&t) const (defined in dr::ranges::__detail::local_fn_)dr::ranges::__detail::local_fn_inline
    + + + + diff --git a/doxygen/structdr_1_1ranges_1_1____detail_1_1local__fn__.html b/doxygen/structdr_1_1ranges_1_1____detail_1_1local__fn__.html new file mode 100644 index 0000000000..0a48020a60 --- /dev/null +++ b/doxygen/structdr_1_1ranges_1_1____detail_1_1local__fn__.html @@ -0,0 +1,104 @@ + + + + + + + +Distributed Ranges: dr::ranges::__detail::local_fn_ Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::ranges::__detail::local_fn_ Struct Reference
    +
    +
    + + + + + + + + +

    +Public Member Functions

    +template<typename T >
    +requires (has_local<T>)
    auto operator() (T &&t) const
     
    +template<typename T >
    decltype(auto) operator() (T &&t) const
     
    +
    The documentation for this struct was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/detail/ranges.hpp
    • +
    +
    + + + + diff --git a/doxygen/structdr_1_1sp_1_1____detail_1_1tuple__or__pair-members.html b/doxygen/structdr_1_1sp_1_1____detail_1_1tuple__or__pair-members.html new file mode 100644 index 0000000000..114321f57c --- /dev/null +++ b/doxygen/structdr_1_1sp_1_1____detail_1_1tuple__or__pair-members.html @@ -0,0 +1,89 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::sp::__detail::tuple_or_pair< Args > Member List
    +
    +
    + +

    This is the complete list of members for dr::sp::__detail::tuple_or_pair< Args >, including all inherited members.

    + + +
    type typedef (defined in dr::sp::__detail::tuple_or_pair< Args >)dr::sp::__detail::tuple_or_pair< Args >
    + + + + diff --git a/doxygen/structdr_1_1sp_1_1____detail_1_1tuple__or__pair.html b/doxygen/structdr_1_1sp_1_1____detail_1_1tuple__or__pair.html new file mode 100644 index 0000000000..5caf25ee6f --- /dev/null +++ b/doxygen/structdr_1_1sp_1_1____detail_1_1tuple__or__pair.html @@ -0,0 +1,98 @@ + + + + + + + +Distributed Ranges: dr::sp::__detail::tuple_or_pair< Args > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::sp::__detail::tuple_or_pair< Args > Struct Template Reference
    +
    +
    + + + + +

    +Public Types

    +using type = std::tuple< Args... >
     
    +
    The documentation for this struct was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/zip_view.hpp
    • +
    +
    + + + + diff --git a/doxygen/structdr_1_1sp_1_1____detail_1_1tuple__or__pair_3_01T_00_01U_01_4-members.html b/doxygen/structdr_1_1sp_1_1____detail_1_1tuple__or__pair_3_01T_00_01U_01_4-members.html new file mode 100644 index 0000000000..45b7b749aa --- /dev/null +++ b/doxygen/structdr_1_1sp_1_1____detail_1_1tuple__or__pair_3_01T_00_01U_01_4-members.html @@ -0,0 +1,89 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::sp::__detail::tuple_or_pair< T, U > Member List
    +
    +
    + +

    This is the complete list of members for dr::sp::__detail::tuple_or_pair< T, U >, including all inherited members.

    + + +
    type typedef (defined in dr::sp::__detail::tuple_or_pair< T, U >)dr::sp::__detail::tuple_or_pair< T, U >
    + + + + diff --git a/doxygen/structdr_1_1sp_1_1____detail_1_1tuple__or__pair_3_01T_00_01U_01_4.html b/doxygen/structdr_1_1sp_1_1____detail_1_1tuple__or__pair_3_01T_00_01U_01_4.html new file mode 100644 index 0000000000..4ce094e753 --- /dev/null +++ b/doxygen/structdr_1_1sp_1_1____detail_1_1tuple__or__pair_3_01T_00_01U_01_4.html @@ -0,0 +1,98 @@ + + + + + + + +Distributed Ranges: dr::sp::__detail::tuple_or_pair< T, U > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::sp::__detail::tuple_or_pair< T, U > Struct Template Reference
    +
    +
    + + + + +

    +Public Types

    +using type = std::pair< T, U >
     
    +
    The documentation for this struct was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/zip_view.hpp
    • +
    +
    + + + + diff --git a/doxygen/structdr_1_1sp_1_1device__allocator_1_1rebind-members.html b/doxygen/structdr_1_1sp_1_1device__allocator_1_1rebind-members.html new file mode 100644 index 0000000000..af05ff7dcc --- /dev/null +++ b/doxygen/structdr_1_1sp_1_1device__allocator_1_1rebind-members.html @@ -0,0 +1,89 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::sp::device_allocator< T, Alignment >::rebind< U > Member List
    +
    +
    + +

    This is the complete list of members for dr::sp::device_allocator< T, Alignment >::rebind< U >, including all inherited members.

    + + +
    other typedef (defined in dr::sp::device_allocator< T, Alignment >::rebind< U >)dr::sp::device_allocator< T, Alignment >::rebind< U >
    + + + + diff --git a/doxygen/structdr_1_1sp_1_1device__allocator_1_1rebind.html b/doxygen/structdr_1_1sp_1_1device__allocator_1_1rebind.html new file mode 100644 index 0000000000..fe6bf223ea --- /dev/null +++ b/doxygen/structdr_1_1sp_1_1device__allocator_1_1rebind.html @@ -0,0 +1,98 @@ + + + + + + + +Distributed Ranges: dr::sp::device_allocator< T, Alignment >::rebind< U > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::sp::device_allocator< T, Alignment >::rebind< U > Struct Template Reference
    +
    +
    + + + + +

    +Public Types

    +using other = device_allocator< U, Alignment >
     
    +
    The documentation for this struct was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/allocators.hpp
    • +
    +
    + + + + diff --git a/doxygen/structdr_1_1sp_1_1device__policy-members.html b/doxygen/structdr_1_1sp_1_1device__policy-members.html new file mode 100644 index 0000000000..c2e2f08e6a --- /dev/null +++ b/doxygen/structdr_1_1sp_1_1device__policy-members.html @@ -0,0 +1,94 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::sp::device_policy Member List
    +
    +
    + +

    This is the complete list of members for dr::sp::device_policy, including all inherited members.

    + + + + + + + +
    device_policy(sycl::device device) (defined in dr::sp::device_policy)dr::sp::device_policyinline
    device_policy(sycl::queue queue) (defined in dr::sp::device_policy)dr::sp::device_policyinline
    device_policy() (defined in dr::sp::device_policy)dr::sp::device_policyinline
    device_policy(R &&devices) (defined in dr::sp::device_policy)dr::sp::device_policyinline
    get_devices() noexcept (defined in dr::sp::device_policy)dr::sp::device_policyinline
    get_devices() const noexcept (defined in dr::sp::device_policy)dr::sp::device_policyinline
    + + + + diff --git a/doxygen/structdr_1_1sp_1_1device__policy.html b/doxygen/structdr_1_1sp_1_1device__policy.html new file mode 100644 index 0000000000..7bcc10d851 --- /dev/null +++ b/doxygen/structdr_1_1sp_1_1device__policy.html @@ -0,0 +1,112 @@ + + + + + + + +Distributed Ranges: dr::sp::device_policy Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::sp::device_policy Struct Reference
    +
    +
    + + + + + + + + + + + + + +

    +Public Member Functions

    device_policy (sycl::device device)
     
    device_policy (sycl::queue queue)
     
    +template<rng::range R>
    +requires (std::is_same_v<rng::range_value_t<R>, sycl::device>)
     device_policy (R &&devices)
     
    +std::span< sycl::device > get_devices () noexcept
     
    +std::span< const sycl::device > get_devices () const noexcept
     
    +
    The documentation for this struct was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/algorithms/execution_policy.hpp
    • +
    +
    + + + + diff --git a/doxygen/structdr_1_1sp_1_1distributed__vector-members.html b/doxygen/structdr_1_1sp_1_1distributed__vector-members.html new file mode 100644 index 0000000000..89ddd86fd8 --- /dev/null +++ b/doxygen/structdr_1_1sp_1_1distributed__vector-members.html @@ -0,0 +1,114 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::sp::distributed_vector< T, Allocator > Member List
    +
    +
    + +

    This is the complete list of members for dr::sp::distributed_vector< T, Allocator >, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    allocator_type typedef (defined in dr::sp::distributed_vector< T, Allocator >)dr::sp::distributed_vector< T, Allocator >
    begin() (defined in dr::sp::distributed_vector< T, Allocator >)dr::sp::distributed_vector< T, Allocator >inline
    begin() const (defined in dr::sp::distributed_vector< T, Allocator >)dr::sp::distributed_vector< T, Allocator >inline
    const_iterator typedef (defined in dr::sp::distributed_vector< T, Allocator >)dr::sp::distributed_vector< T, Allocator >
    const_pointer typedef (defined in dr::sp::distributed_vector< T, Allocator >)dr::sp::distributed_vector< T, Allocator >
    const_reference typedef (defined in dr::sp::distributed_vector< T, Allocator >)dr::sp::distributed_vector< T, Allocator >
    const_segment_type typedef (defined in dr::sp::distributed_vector< T, Allocator >)dr::sp::distributed_vector< T, Allocator >
    difference_type typedef (defined in dr::sp::distributed_vector< T, Allocator >)dr::sp::distributed_vector< T, Allocator >
    distributed_vector(std::size_t count=0) (defined in dr::sp::distributed_vector< T, Allocator >)dr::sp::distributed_vector< T, Allocator >inline
    distributed_vector(std::size_t count, const T &value) (defined in dr::sp::distributed_vector< T, Allocator >)dr::sp::distributed_vector< T, Allocator >inline
    distributed_vector(std::initializer_list< T > init) (defined in dr::sp::distributed_vector< T, Allocator >)dr::sp::distributed_vector< T, Allocator >inline
    end() (defined in dr::sp::distributed_vector< T, Allocator >)dr::sp::distributed_vector< T, Allocator >inline
    end() const (defined in dr::sp::distributed_vector< T, Allocator >)dr::sp::distributed_vector< T, Allocator >inline
    iterator typedef (defined in dr::sp::distributed_vector< T, Allocator >)dr::sp::distributed_vector< T, Allocator >
    operator[](size_type pos) (defined in dr::sp::distributed_vector< T, Allocator >)dr::sp::distributed_vector< T, Allocator >inline
    operator[](size_type pos) const (defined in dr::sp::distributed_vector< T, Allocator >)dr::sp::distributed_vector< T, Allocator >inline
    pointer typedef (defined in dr::sp::distributed_vector< T, Allocator >)dr::sp::distributed_vector< T, Allocator >
    reference typedef (defined in dr::sp::distributed_vector< T, Allocator >)dr::sp::distributed_vector< T, Allocator >
    resize(size_type count, const value_type &value) (defined in dr::sp::distributed_vector< T, Allocator >)dr::sp::distributed_vector< T, Allocator >inline
    resize(size_type count) (defined in dr::sp::distributed_vector< T, Allocator >)dr::sp::distributed_vector< T, Allocator >inline
    segment_type typedef (defined in dr::sp::distributed_vector< T, Allocator >)dr::sp::distributed_vector< T, Allocator >
    segments() (defined in dr::sp::distributed_vector< T, Allocator >)dr::sp::distributed_vector< T, Allocator >inline
    segments() const (defined in dr::sp::distributed_vector< T, Allocator >)dr::sp::distributed_vector< T, Allocator >inline
    size() const noexcept (defined in dr::sp::distributed_vector< T, Allocator >)dr::sp::distributed_vector< T, Allocator >inline
    size_type typedef (defined in dr::sp::distributed_vector< T, Allocator >)dr::sp::distributed_vector< T, Allocator >
    value_type typedef (defined in dr::sp::distributed_vector< T, Allocator >)dr::sp::distributed_vector< T, Allocator >
    + + + + diff --git a/doxygen/structdr_1_1sp_1_1distributed__vector.html b/doxygen/structdr_1_1sp_1_1distributed__vector.html new file mode 100644 index 0000000000..412d2bd45c --- /dev/null +++ b/doxygen/structdr_1_1sp_1_1distributed__vector.html @@ -0,0 +1,185 @@ + + + + + + + +Distributed Ranges: dr::sp::distributed_vector< T, Allocator > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::sp::distributed_vector< T, Allocator > Struct Template Reference
    +
    +
    + +

    distributed vector + More...

    + +

    #include <distributed_vector.hpp>

    + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Types

    +using segment_type = dr::sp::device_vector< T, Allocator >
     
    +using const_segment_type = std::add_const_t< dr::sp::device_vector< T, Allocator > >
     
    +using value_type = T
     
    +using size_type = std::size_t
     
    +using difference_type = std::ptrdiff_t
     
    +using pointer = decltype(std::declval< segment_type >().data())
     
    +using const_pointer = decltype(std::declval< std::add_const_t< segment_type > >().data())
     
    +using reference = std::iter_reference_t< pointer >
     
    +using const_reference = std::iter_reference_t< const_pointer >
     
    +using iterator = distributed_vector_iterator< T, segment_type >
     
    +using const_iterator = distributed_vector_iterator< const T, const_segment_type >
     
    +using allocator_type = Allocator
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    distributed_vector (std::size_t count=0)
     
    distributed_vector (std::size_t count, const T &value)
     
    distributed_vector (std::initializer_list< T > init)
     
    +reference operator[] (size_type pos)
     
    +const_reference operator[] (size_type pos) const
     
    +size_type size () const noexcept
     
    +auto segments ()
     
    +auto segments () const
     
    +iterator begin ()
     
    +const_iterator begin () const
     
    +iterator end ()
     
    +const_iterator end () const
     
    +void resize (size_type count, const value_type &value)
     
    +void resize (size_type count)
     
    +

    Detailed Description

    +
    template<typename T, typename Allocator = dr::sp::device_allocator<T>>
    +struct dr::sp::distributed_vector< T, Allocator >

    distributed vector

    +

    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/doxygen/structdr_1_1views_1_1iota__fn__-members.html b/doxygen/structdr_1_1views_1_1iota__fn__-members.html new file mode 100644 index 0000000000..dd5d1eee73 --- /dev/null +++ b/doxygen/structdr_1_1views_1_1iota__fn__-members.html @@ -0,0 +1,90 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    dr::views::iota_fn_ Member List
    +
    +
    + +

    This is the complete list of members for dr::views::iota_fn_, including all inherited members.

    + + + +
    operator()(W value) const (defined in dr::views::iota_fn_)dr::views::iota_fn_inline
    operator()(W value, Bound bound) const (defined in dr::views::iota_fn_)dr::views::iota_fn_inline
    + + + + diff --git a/doxygen/structdr_1_1views_1_1iota__fn__.html b/doxygen/structdr_1_1views_1_1iota__fn__.html new file mode 100644 index 0000000000..8c2815f90b --- /dev/null +++ b/doxygen/structdr_1_1views_1_1iota__fn__.html @@ -0,0 +1,103 @@ + + + + + + + +Distributed Ranges: dr::views::iota_fn_ Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    dr::views::iota_fn_ Struct Reference
    +
    +
    + + + + + + + + +

    +Public Member Functions

    +template<std::integral W>
    auto operator() (W value) const
     
    +template<std::integral W, std::integral Bound>
    auto operator() (W value, Bound bound) const
     
    +
    The documentation for this struct was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/views/iota.hpp
    • +
    +
    + + + + diff --git a/doxygen/structfmt_1_1formatter_3_01Mdspan_00_01char_01_4-members.html b/doxygen/structfmt_1_1formatter_3_01Mdspan_00_01char_01_4-members.html new file mode 100644 index 0000000000..314de90ce1 --- /dev/null +++ b/doxygen/structfmt_1_1formatter_3_01Mdspan_00_01char_01_4-members.html @@ -0,0 +1,90 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    fmt::formatter< Mdspan, char > Member List
    +
    +
    + +

    This is the complete list of members for fmt::formatter< Mdspan, char >, including all inherited members.

    + + + +
    format(Mdspan mdspan, FmtContext &ctx) const (defined in fmt::formatter< Mdspan, char >)fmt::formatter< Mdspan, char >inline
    format_mdspan(auto &ctx, auto mdspan, auto &index, std::size_t dim) const (defined in fmt::formatter< Mdspan, char >)fmt::formatter< Mdspan, char >inline
    + + + + diff --git a/doxygen/structfmt_1_1formatter_3_01Mdspan_00_01char_01_4.html b/doxygen/structfmt_1_1formatter_3_01Mdspan_00_01char_01_4.html new file mode 100644 index 0000000000..1f5b65d377 --- /dev/null +++ b/doxygen/structfmt_1_1formatter_3_01Mdspan_00_01char_01_4.html @@ -0,0 +1,120 @@ + + + + + + + +Distributed Ranges: fmt::formatter< Mdspan, char > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    fmt::formatter< Mdspan, char > Struct Template Reference
    +
    +
    +
    +Inheritance diagram for fmt::formatter< Mdspan, char >:
    +
    +
    Inheritance graph
    + + + + +
    [legend]
    +
    +Collaboration diagram for fmt::formatter< Mdspan, char >:
    +
    +
    Collaboration graph
    + + + + +
    [legend]
    + + + + + + + +

    +Public Member Functions

    +template<typename FmtContext >
    auto format (Mdspan mdspan, FmtContext &ctx) const
     
    +void format_mdspan (auto &ctx, auto mdspan, auto &index, std::size_t dim) const
     
    +
    The documentation for this struct was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/detail/mdspan_utils.hpp
    • +
    +
    + + + + diff --git a/doxygen/structfmt_1_1formatter_3_01Mdspan_00_01char_01_4__coll__graph.map b/doxygen/structfmt_1_1formatter_3_01Mdspan_00_01char_01_4__coll__graph.map new file mode 100644 index 0000000000..d1b9a379e3 --- /dev/null +++ b/doxygen/structfmt_1_1formatter_3_01Mdspan_00_01char_01_4__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/structfmt_1_1formatter_3_01Mdspan_00_01char_01_4__coll__graph.md5 b/doxygen/structfmt_1_1formatter_3_01Mdspan_00_01char_01_4__coll__graph.md5 new file mode 100644 index 0000000000..8048a0261a --- /dev/null +++ b/doxygen/structfmt_1_1formatter_3_01Mdspan_00_01char_01_4__coll__graph.md5 @@ -0,0 +1 @@ +787393ee5b4d2029036d67d19df84ced \ No newline at end of file diff --git a/doxygen/structfmt_1_1formatter_3_01Mdspan_00_01char_01_4__coll__graph.png b/doxygen/structfmt_1_1formatter_3_01Mdspan_00_01char_01_4__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..0a15b1d70ab17e606b82446b52d1cec3c283e33e GIT binary patch literal 6656 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 literal 0 HcmV?d00001 diff --git a/doxygen/structfmt_1_1formatter_3_01Mdspan_00_01char_01_4__inherit__graph.map b/doxygen/structfmt_1_1formatter_3_01Mdspan_00_01char_01_4__inherit__graph.map new file mode 100644 index 0000000000..d1b9a379e3 --- /dev/null +++ b/doxygen/structfmt_1_1formatter_3_01Mdspan_00_01char_01_4__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/structfmt_1_1formatter_3_01Mdspan_00_01char_01_4__inherit__graph.md5 b/doxygen/structfmt_1_1formatter_3_01Mdspan_00_01char_01_4__inherit__graph.md5 new file mode 100644 index 0000000000..8048a0261a --- /dev/null +++ b/doxygen/structfmt_1_1formatter_3_01Mdspan_00_01char_01_4__inherit__graph.md5 @@ -0,0 +1 @@ +787393ee5b4d2029036d67d19df84ced \ No newline at end of file diff --git a/doxygen/structfmt_1_1formatter_3_01Mdspan_00_01char_01_4__inherit__graph.png b/doxygen/structfmt_1_1formatter_3_01Mdspan_00_01char_01_4__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..0a15b1d70ab17e606b82446b52d1cec3c283e33e GIT binary patch literal 6656 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 literal 0 HcmV?d00001 diff --git a/doxygen/structnostd_1_1source__location-members.html b/doxygen/structnostd_1_1source__location-members.html new file mode 100644 index 0000000000..a587d23c39 --- /dev/null +++ b/doxygen/structnostd_1_1source__location-members.html @@ -0,0 +1,95 @@ + + + + + + + +Distributed Ranges: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    nostd::source_location Member List
    +
    +
    + +

    This is the complete list of members for nostd::source_location, including all inherited members.

    + + + + + + + + +
    column() const noexcept (defined in nostd::source_location)nostd::source_locationinline
    current(const char *fileName="unsupported", const char *functionName="unsupported", const uint_least32_t lineNumber=0, const uint_least32_t columnOffset=0) noexcept (defined in nostd::source_location)nostd::source_locationinlinestatic
    file_name() const noexcept (defined in nostd::source_location)nostd::source_locationinline
    function_name() const noexcept (defined in nostd::source_location)nostd::source_locationinline
    line() const noexcept (defined in nostd::source_location)nostd::source_locationinline
    source_location(const source_location &)=default (defined in nostd::source_location)nostd::source_location
    source_location(source_location &&)=default (defined in nostd::source_location)nostd::source_location
    + + + + diff --git a/doxygen/structnostd_1_1source__location.html b/doxygen/structnostd_1_1source__location.html new file mode 100644 index 0000000000..7628649533 --- /dev/null +++ b/doxygen/structnostd_1_1source__location.html @@ -0,0 +1,120 @@ + + + + + + + +Distributed Ranges: nostd::source_location Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    nostd::source_location Struct Reference
    +
    +
    + + + + + + + + + + + + + + +

    +Public Member Functions

    source_location (const source_location &)=default
     
    source_location (source_location &&)=default
     
    +constexpr const char * file_name () const noexcept
     
    +constexpr const char * function_name () const noexcept
     
    +constexpr uint_least32_t line () const noexcept
     
    +constexpr std::uint_least32_t column () const noexcept
     
    + + + +

    +Static Public Member Functions

    +static constexpr source_location current (const char *fileName="unsupported", const char *functionName="unsupported", const uint_least32_t lineNumber=0, const uint_least32_t columnOffset=0) noexcept
     
    +
    The documentation for this struct was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/vendor/source_location/source_location.hpp
    • +
    +
    + + + + diff --git a/doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1index_3_01I_01_4_01_4.html b/doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1index_3_01I_01_4_01_4.html new file mode 100644 index 0000000000..d4d89ed2f8 --- /dev/null +++ b/doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1index_3_01I_01_4_01_4.html @@ -0,0 +1,106 @@ + + + + + + + +Distributed Ranges: std::tuple_element< Index, dr::index< I > > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    std::tuple_element< Index, dr::index< I > > Struct Template Reference
    +
    +
    +
    +Inheritance diagram for std::tuple_element< Index, dr::index< I > >:
    +
    +
    Inheritance graph
    + + + + +
    [legend]
    +
    +Collaboration diagram for std::tuple_element< Index, dr::index< I > >:
    +
    +
    Collaboration graph
    + + + + +
    [legend]
    +
    The documentation for this struct was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/detail/index.hpp
    • +
    +
    + + + + diff --git a/doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1index_3_01I_01_4_01_4__coll__graph.map b/doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1index_3_01I_01_4_01_4__coll__graph.map new file mode 100644 index 0000000000..9011fdab8f --- /dev/null +++ b/doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1index_3_01I_01_4_01_4__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1index_3_01I_01_4_01_4__coll__graph.md5 b/doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1index_3_01I_01_4_01_4__coll__graph.md5 new file mode 100644 index 0000000000..c210f859dc --- /dev/null +++ b/doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1index_3_01I_01_4_01_4__coll__graph.md5 @@ -0,0 +1 @@ +e1224836b7a16209c60a5f085becfdf1 \ No newline at end of file diff --git a/doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1index_3_01I_01_4_01_4__coll__graph.png b/doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1index_3_01I_01_4_01_4__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..2252aadb473b10c7fb723d4cf3de42ba491f1d5d GIT binary patch literal 6792 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 SqZhtfLZ~RH%a_QS`27zD>Ffgl literal 0 HcmV?d00001 diff --git a/doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1index_3_01I_01_4_01_4__inherit__graph.map b/doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1index_3_01I_01_4_01_4__inherit__graph.map new file mode 100644 index 0000000000..9011fdab8f --- /dev/null +++ b/doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1index_3_01I_01_4_01_4__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1index_3_01I_01_4_01_4__inherit__graph.md5 b/doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1index_3_01I_01_4_01_4__inherit__graph.md5 new file mode 100644 index 0000000000..c210f859dc --- /dev/null +++ b/doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1index_3_01I_01_4_01_4__inherit__graph.md5 @@ -0,0 +1 @@ +e1224836b7a16209c60a5f085becfdf1 \ No newline at end of file diff --git a/doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1index_3_01I_01_4_01_4__inherit__graph.png b/doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1index_3_01I_01_4_01_4__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..2252aadb473b10c7fb723d4cf3de42ba491f1d5d GIT binary patch literal 6792 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 SqZhtfLZ~RH%a_QS`27zD>Ffgl literal 0 HcmV?d00001 diff --git a/doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1sp_1_1matrix__entry_3_01T_00_01I_01_4_01_4.html b/doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1sp_1_1matrix__entry_3_01T_00_01I_01_4_01_4.html new file mode 100644 index 0000000000..6154676e1a --- /dev/null +++ b/doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1sp_1_1matrix__entry_3_01T_00_01I_01_4_01_4.html @@ -0,0 +1,106 @@ + + + + + + + +Distributed Ranges: std::tuple_element< Index, dr::sp::matrix_entry< T, I > > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    std::tuple_element< Index, dr::sp::matrix_entry< T, I > > Struct Template Reference
    +
    +
    +
    +Inheritance diagram for std::tuple_element< Index, dr::sp::matrix_entry< T, I > >:
    +
    +
    Inheritance graph
    + + + + +
    [legend]
    +
    +Collaboration diagram for std::tuple_element< Index, dr::sp::matrix_entry< T, I > >:
    +
    +
    Collaboration graph
    + + + + +
    [legend]
    +
    The documentation for this struct was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/containers/matrix_entry.hpp
    • +
    +
    + + + + diff --git a/doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1sp_1_1matrix__entry_3_01T_00_01I_01_4_01_4__coll__graph.map b/doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1sp_1_1matrix__entry_3_01T_00_01I_01_4_01_4__coll__graph.map new file mode 100644 index 0000000000..046d061958 --- /dev/null +++ b/doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1sp_1_1matrix__entry_3_01T_00_01I_01_4_01_4__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1sp_1_1matrix__entry_3_01T_00_01I_01_4_01_4__coll__graph.md5 b/doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1sp_1_1matrix__entry_3_01T_00_01I_01_4_01_4__coll__graph.md5 new file mode 100644 index 0000000000..8fb63e339c --- /dev/null +++ b/doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1sp_1_1matrix__entry_3_01T_00_01I_01_4_01_4__coll__graph.md5 @@ -0,0 +1 @@ +7ce33c5977498e9f95b83f0526966be3 \ No newline at end of file diff --git a/doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1sp_1_1matrix__entry_3_01T_00_01I_01_4_01_4__coll__graph.png b/doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1sp_1_1matrix__entry_3_01T_00_01I_01_4_01_4__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..fa4612c191d323b279ff1ae7564ee6e084d7e7c2 GIT binary patch literal 9361 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 literal 0 HcmV?d00001 diff --git a/doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1sp_1_1matrix__entry_3_01T_00_01I_01_4_01_4__inherit__graph.map b/doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1sp_1_1matrix__entry_3_01T_00_01I_01_4_01_4__inherit__graph.map new file mode 100644 index 0000000000..046d061958 --- /dev/null +++ b/doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1sp_1_1matrix__entry_3_01T_00_01I_01_4_01_4__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1sp_1_1matrix__entry_3_01T_00_01I_01_4_01_4__inherit__graph.md5 b/doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1sp_1_1matrix__entry_3_01T_00_01I_01_4_01_4__inherit__graph.md5 new file mode 100644 index 0000000000..8fb63e339c --- /dev/null +++ b/doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1sp_1_1matrix__entry_3_01T_00_01I_01_4_01_4__inherit__graph.md5 @@ -0,0 +1 @@ +7ce33c5977498e9f95b83f0526966be3 \ No newline at end of file diff --git a/doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1sp_1_1matrix__entry_3_01T_00_01I_01_4_01_4__inherit__graph.png b/doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1sp_1_1matrix__entry_3_01T_00_01I_01_4_01_4__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..fa4612c191d323b279ff1ae7564ee6e084d7e7c2 GIT binary patch literal 9361 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 literal 0 HcmV?d00001 diff --git a/doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1sp_1_1matrix__ref_3_01T_00_01I_00_01TRef_01_4_01_4.html b/doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1sp_1_1matrix__ref_3_01T_00_01I_00_01TRef_01_4_01_4.html new file mode 100644 index 0000000000..d30600a34d --- /dev/null +++ b/doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1sp_1_1matrix__ref_3_01T_00_01I_00_01TRef_01_4_01_4.html @@ -0,0 +1,106 @@ + + + + + + + +Distributed Ranges: std::tuple_element< Index, dr::sp::matrix_ref< T, I, TRef > > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    std::tuple_element< Index, dr::sp::matrix_ref< T, I, TRef > > Struct Template Reference
    +
    +
    +
    +Inheritance diagram for std::tuple_element< Index, dr::sp::matrix_ref< T, I, TRef > >:
    +
    +
    Inheritance graph
    + + + + +
    [legend]
    +
    +Collaboration diagram for std::tuple_element< Index, dr::sp::matrix_ref< T, I, TRef > >:
    +
    +
    Collaboration graph
    + + + + +
    [legend]
    +
    The documentation for this struct was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/containers/matrix_entry.hpp
    • +
    +
    + + + + diff --git a/doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1sp_1_1matrix__ref_3_01T_00_01I_00_01TRef_01_4_01_4__coll__graph.map b/doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1sp_1_1matrix__ref_3_01T_00_01I_00_01TRef_01_4_01_4__coll__graph.map new file mode 100644 index 0000000000..2aadf9471f --- /dev/null +++ b/doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1sp_1_1matrix__ref_3_01T_00_01I_00_01TRef_01_4_01_4__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1sp_1_1matrix__ref_3_01T_00_01I_00_01TRef_01_4_01_4__coll__graph.md5 b/doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1sp_1_1matrix__ref_3_01T_00_01I_00_01TRef_01_4_01_4__coll__graph.md5 new file mode 100644 index 0000000000..0dccc44d41 --- /dev/null +++ b/doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1sp_1_1matrix__ref_3_01T_00_01I_00_01TRef_01_4_01_4__coll__graph.md5 @@ -0,0 +1 @@ +dc31fc93764b839eee68789ffad51882 \ No newline at end of file diff --git a/doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1sp_1_1matrix__ref_3_01T_00_01I_00_01TRef_01_4_01_4__coll__graph.png b/doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1sp_1_1matrix__ref_3_01T_00_01I_00_01TRef_01_4_01_4__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..b3826ab74df4cd68a4f97c2997accc7e522fa0f6 GIT binary patch literal 9739 zcmch7bySq$xAlNXcXtSaN`oNX2uLFe(nBgC-6b%9bSa1+5(-17fYMSTA}9zb9ZGjd z$~|*`cYWXb*1CUxxRAy0&ig*kbI#dk?|mjlPe+Y}kdY99K#*vts~Et~ckqqI$A$k3 znJU-e2d=fInhN3q^DnohC=G#NM`)-h8v12#yz(_O>^-@VZ^9Q)EqO|CYd|SSB9`KuH>C2Zr8PU_Z^=!`^QKF&$`{jjq`}C5txM>o($XmhiygUjz z?zBuBSJ#U-8`X*%OcY9mLiF+dEp)Ub+G89jv&-Aa2^$ubso0j5VBKD2d=qgB!=)h3JMCMqN47+5`2_bS4Vw#c=DfBBX+gN=!CsR<@8L`v@5`EXl!xnmzG{0Dc zDqYD>Oh`~gBJ;SkzTqomOIDPXb^WY$prEI}R;8_^gl%y5?o}F#w)~0w=>}Iei?)!2 z2t2Zn)6=XL78ZynWb$X^)z#I8O{uAr;}a7FB_)K2*_D+T`HM5Ez`vW3adAYgNApB( z64^Szktmea!Rim=Wxt%&bE(6P2|PMFx-!_x&!0aLID_t{FSD}Tm%g%;8CPR>Mw9jSrSS-R zE$gK$6^UMyACj@j5ySO<{{9^N{Mw5ljg6Bz zl%tYe+s@O?ntT#qnNQ;xM59K=#;BC=tKYr5%A=d}<|HsMkcyL&bAD+_t-`$N_WH&~ zUyWVAO02%IrF-xLV`Fk}Z*PyIZKTIS4~eydgW8vYfxfy&!|Hl^~KI-ZFlCoyFPx*AC}}sB_AF6)p)Pn&wu+?wI`lI8O}%T`|xn&*O;_4 zs-MmNwd(%}IJ$<1(_Um|ru1hBrrj;lNlD>UqeQ%U^G4;(4vVA*ik^WXWp~$ul8Q?C z*|TTrhKA3EB%~L*0v65c z_;WNSj~-o5dH($Ou~2`1e@u3E_7Iugv)1{OnyM=Hz{B;tRoAHxs)*$5Z06PR?{78x z8fHRx(+A9(eDn|Azke^2KXkKazl==M@2;~E`KYq?(Qd3%%?qi(R{0_x;pP4KMxO{rluwr50CG| zjO^_Ao}Sx5JKc0Ly$r;-khdht%F1DKT^qcPfe_^q9c^tALPEl!;o$|z`xX`g>DqVi z-YwBlR=$MLgJ0bks{MAX-xL*ba&h5oO}9ieHA$P9nXy9wy2(i?CtrO0s8nUl_aZCn z?m>Nh{YaZC%S;RvPi|3Bv_={?a_`T8d8|G)*A++H0_7SuToOi9VIg;knYsB?p7vVw zbbVP#$*;Uuv9W~o#JE12lLWMJ-FL@)@{c(lTk20Vu!*)wE>~zH4;{W{$7G5+gm=!( z!s#9D^s-g^Y?$zwf1uvn+;sEu!b!V+Vwc8#apT4fbZM!wxj73>=)|DT$j8(TcntqNsn1_lPRmH?VtuG8>jPAeOmh`G*aPEk=R z5fPDBJ=~9HHjh#biO*(l^`6m-+7lmc%_POg6T=p&HFxUO?%$_f`ueIfPdQrX@uUP4 z$W9Ou5tF68J-3XE%KTBLQjx4lY5#B$_2RmH83!Mx#`Q7jH~o* zlAAXm%u6x4)E8o6VqD_l>C`kdDNv>#?Q1oZl_Q3B-oAaCQl$HOx2_b8W_K3PGBh&6 z09AcGcS=f%bwZxnR)|;Ref{Afa-|Pmft8li=gByck&(u&L6S2c-g_=t!-=#oQ)n9{ zFRI$SjyZw;Kv^vsbmWGLj@Im=P4F5LtlcLhBI>XbLdl75X{@iWyRD8C%k50D^~|tY zFW)#f7`ZuBBzSS{^rZ#eyLa!zzUIhIY`Ktn<>%)^w)`AJ?i1{1e!!dac;D!|#fmxU zg@xgb(R>!-)pC%-9^Slni#*M&|mX=2F7sp`w zM@@}LPa;cPZZ11(ARZZO7h1pIDE;!!k>TOana~UEgT8@*%Ml&9IaVenCe~vW<}c)e zrJg;1j`h`LV!nIt9*wx`H1VZNm(V38)*a!OKYji@KOuhoI)SwBCMqlpOGZ{U zue3DIu0Nfij^Ft#Jw1KACGZxYyRhviaPHzpb+yq3uU zXYmn@UMrN`I@wP}9lkyx4@aY~A)aJqF&XpGLU(qD_EDWq8SWhWajWejajW%|6p$54 zDx$Www!O%t^nUqAs55d_*2ML7XG}r%rCy!&c#n9JpMQl}Hh}v6{rgbvxS#v`Dags6 z?C*O8U7Y`Y#cduV5&}zQmT*J-{{0)<6-l^ocDyIyx6KZbu6F!!Bj{|WmmT$#TG?S? z?Ay1nwl?|Z=H~6yAH3P}p{&rX8Ua8vUVpsvY*Q{sLsyq4Ha3=vgCoo}_>}td$cQ2K z6G&72-hcm2U32O*kzQg42WypWe^zYl?QaJK2NQ5Kub|6=_jY&D^^oo=4<2MPF0KA3 zB|yy2%_-jC;9PTvylJHo>zbC-Ye-)wr_;JM$y$XXo2P)`v zqrrB6`J3&hWRAt@mO$(72^t*Ppp>J`UqeIWbb=OL8I~agPEJliCo4sM|IXgGAHo6Z z85(v~Av@7FJv}|Cq;Z0`Z{KG546n2Nva_{CAiTW2A=}%ngxEPbBLK#2?d`E2_9>h~ z=yukBiqg~5&(;pgbrz^4p+)o9Ran|uTU#4D*Az_I%2$e^0+ejX?amO}TcH{D$VA3}*2*+g7 z`N5csc%(V?y9RW0V0 zqJcF61SF@Xh6BQNb#+-m#-b}Lw}z%CCz<8sqL)WAd5bw0;%{jd^TQle*am6cDPUaMtiO^tt4=qt2*7k`!n?K-MegKV}m&as36LI9{DVI@~oT0(2pP8;g^Z3yjH%G zo{yHBMo%^Q-lda*gdZ9iSzN;uiIA9BceDSVkn^|@rd6=AveL`=Rkb(1(BhUmn!S`Q z?VGs8c8_<8rHzZ67Rtw=_NPS9kx+%%du&xzRp8M!y@@PG+nr>`t<2wty^eI6U{fNv z5$+Fu`O3bltLp-cnA_Z(9?Ki@O1anw2>8*_5$3>ac``?oFrpau^7bnI_VI|hszGsO z3ke5KUtiy~8#g|V6yN3G<((MgIFOz;)h9EYoSY=5q5`111SGb+U+|Kqr~&^fU<5TC zUFWY~AJopfy1VnBA6cEF2&lFE6d9GAoYbk7S*fIfR!`Cwy#~k9u^+1gi;MHmLA|>Qtvo}(oU(D`8ZU1r&}E^AdVdS&U=4o9yH^pwqsTD)uaf6{w_gyS zgrxi5`6<%HB?0uRy}doW82R$$OZ5;SwRr^v!^OExqTCt-YL=qxg4B}Cq={_u zq^715I<+$>3Pwgkb8~a&pEZ#VdrI!d8x1oUxZB=#bDnNy`0(L_p`?rqGbkQBL_DJy z;oRJu-`SBc(1GMvue3MbeoLR9w?5k&l$T-ZSzKIXmy%*UI5@y3BU1|sYVPXgDn4Fz z!i`6-t*yBqtlq~EfH?MzP+zQ|HS~q`;v8wY@sKivm*izvXisp z(=kR80rSk+@aN^_t#)VEUb@Jy>LN$-4r1DEj?v$06_kkSnKP*~~XA3zBb6EQN6$Bm^&>Svc_dIv*-0AxE zEd}TDz#GF8e}K#ZU-KlULX?qEfv&( z<6bY&u4G}Go~O*3zCD-?Yv8Wa5)9_Zb{5|)5_qd;5+-sM7Ht+L`4E}S zsiv{FaZ{V|#kc+x6fOVFx2UltsHv%$-P%fGk@jit?7Z~&@nbmDjByJJs0U2*J3Bv5 zNlnEzGBT?A>CD=p5k4v=h5(|4pO~2F=H}K8d8LToG11^k!OZ++uZI*`{H}dhp0v$s z`SG&Y$;57fEXY*b{&ap7P0ct+g4nZ@wMy&>Lemf~E-rE&9-fcZ)t{hr`=InSTwM5P z>M^tnxYEdvAKr|X4*f}o)qVj1lt48~WRM?Gqzk}R-jtNYl3)3?tDG&YQR8YUWR=0T zQC(9L{`@%&DT@@U?cWJeOiYY^kPWwp3*eWs1gbLs2G zPEp#;e9mhJUhO%>fmyPFhx^|6H?N3Tv9=BkJtgFKWGs%L75g9b$yL?n^d8FJyjp|P zrmVn;#F_rCdFRgRfW(`ec1mT5(j_I0!s<%p6h@pDml4GgEpE|ha*ubtA;X)pZ?a2s zlgH4rXJ{1;WWJW;9m`%$ZE~fYI{8sgrn+x>e$!W_2|CD#aVd2rh5uQ?UpI!FRxO^8 z2c5NDBwg%_GYpUIs7u$O1L+5atZ}W@FJeiwW(!*5mx7|!eyh#&6`3> z;#RG8DtspknNyR>Q=L){qF1-2Z@+`f-dkjH*A5?d*|hAO4c>r?C1h62?Py31yDiWW zYeBlw5(W$C_-%bzNLgNtwarVQ&cr27V!J#Pq)7)Re2!HN#h9P3T(MgWQVd*z(S&xRF61SY?rbzuC ze~Hv&+Jt`68<|ByQ;$i}C?*mq% z_^86tuAUykvVyVyXRF^TRn7-)&9DmyR1BWs;o)@-4(hH3wYcu{f+kWAx1c!qQEKE4 zWfS6>7L^eu)w`bwJvMnf?fK%OEk|uiXA8$hH7RAS}Ivsu)<@fOZr=WNEh* z5e__b2G=KgYw6G08n4&nIaW-}ufahw&p%%};C21`_oF~leC+AL#jsO%cj1zfl3C#8 z@7jDe7%f_ZVq7Nb6;)L)D=I2p6A+;7%V5vSC#R!}rs2KcJ~hQsTwE*x7FQH0ODwbx zpNIYSweDNfvH-A3Mn-f51O!J1W0rFp8zf>Jy13mNymwB4V3wISkOGx@8WV%j8n+V| zBM0S9iD4Vt2M4MTA6}C?S>{Y}>FMpY8F(pXTy1?Bh{Fza_0Gx3W>e3}F?Hu-;6FsP zagmA#6h3t%iBf(1J)>iWIsW%n}WrJZoKo>f{d?AJ<0CS~yByh@0DSg*_C8 zpTy0ZH--FnZH-M#c3m{_75)7sZ;FW(V=}Fgo$%ag2HE8@FLLy}mXO8rL%w2gjO_1X9p2|45=QIVGy zb_tJkUs2^|xq1RxR8$n0`?opTd#369rrg4z8#cIVhg=FODma^y?>XzH_E(1I*4HPAD9+hrZ>&Ow0F65XfdeRj`g9JCzrLX%jzC7- z*;x>{0^Sdm@fAZtCfafq|a6Ilo8zt7BKD zP$(;K81#&cqMtpZhVsBth!z;_?d?#up7ZCf-@ElIrGDK z99ANkEY9x)qoboaWo22Qa3RJDNF+yDS(y-+xibE{IDE83U>c5p@aEk=IKZlt@lSaA z6ftzgO$lGzc^tvQ!U7lxV-*s>uSW245mt~eLA~bs`e86mxG}o%zzH*gg!1o**K z_4S1(mTe&{MwJ%bVDOR>5fOn65anv(cIQ3#ovpE1Q5Q{B|=tsDnG2n&3rh z{+1zTyotXyTCQws%Z0&zpew$9+0zUk&l-AW#F=zVO_?U@T?!r_zY|WbPH3{p$npqUEWq# zQ-DdLuAvbI$@|{}C+$=BhN31t!V+ zC38f;n#$=1(}z-3L_8zTdcY=@6ysz3SbFvemiv#f1!K#p(8`x00QI{74dkO z!G^xqTTshgoO#LwpHO4kqmPd`=IB5g3T5&yy*fMuA|uV^3*>Fo*EwlF~I(Xt0H z0@Yj~RTdOPz?fp^h!eH_=53C&FDW!~dU0oZootCP zP_%k%_hB$oQ(KF)wH=weME%E-e8Z)lzd?2ZW+p6P?O_aL01~uQ3b-%iN@!6h7&kW`;l{3`8m{TJ9XUwhU2vsS13Nmp5^#w>WO#za=I%ce>T4W^7Ck zgKCV+vbyT%czn5TvR~fw4>2VrB{?N!cvqLomzQFi=#2`nE@H>WjbXMr2Y`f+k3U;H z_Wiq(i3uYN9gCaT^4Xm?uPP?Vb32G+3f;OD4W>}LIFN^ter$#QiEA4(twUf4Lf8=P zU%!%icz9swA5<*N;>c-eR9hIV?d_w$?x2JT2_kDC>ca;q@U?`%pE4BHRdqukF4ti` z3t(u-E-Xv|6;jZ816=<&P_%#sWFU}%aD^2YU;kYx`|)fquB|ps66zeBq{}cDR`c)> zi6UkQAC$kyHc`IxBq4$1b|P~OpbSvK_3`Qmsk=l?dW&>}FxK*~xCC!Kext4%Dm4f6u-(1QPJNeEydfF270xUDe;v-7!>S zFnTg$=z1;73g3aDBjrmj4Oe-rf)u_wG#=utb@UOA=&ULW149gqf5CY}!bCloMJH)? zc6O-z-&QB{J3ECqDKRk`z|tcaFBStWpL?KwEm}STWMRgY7+ez&5MT)sr6V9)oc?Bf`YXAj=S8G2IUQr?Nc)B?Tru|mH1u+u?m@y?lc9xkp(Ta~DmzGbM36#{- z@HEr;I_A6MQeM7{ZSvikhpfafdDui?S>>A*qx{EN)%T2zpTfr{%-(@v3|Mlyz^dP4Z#;1^nSkIq7$FKz5fQLp)Xi<|&*&MmxSb!LzKFd~S7+(dQ{{HhvNk=E~SIa%)K;*w)6HZs9rJ49>#oddOfq3;iv_&;AS dAMadXVF$}tx~2Js!>79t8mc-f6-rj&{{?>0c3c1e literal 0 HcmV?d00001 diff --git a/doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1sp_1_1matrix__ref_3_01T_00_01I_00_01TRef_01_4_01_4__inherit__graph.map b/doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1sp_1_1matrix__ref_3_01T_00_01I_00_01TRef_01_4_01_4__inherit__graph.map new file mode 100644 index 0000000000..2aadf9471f --- /dev/null +++ b/doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1sp_1_1matrix__ref_3_01T_00_01I_00_01TRef_01_4_01_4__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1sp_1_1matrix__ref_3_01T_00_01I_00_01TRef_01_4_01_4__inherit__graph.md5 b/doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1sp_1_1matrix__ref_3_01T_00_01I_00_01TRef_01_4_01_4__inherit__graph.md5 new file mode 100644 index 0000000000..0dccc44d41 --- /dev/null +++ b/doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1sp_1_1matrix__ref_3_01T_00_01I_00_01TRef_01_4_01_4__inherit__graph.md5 @@ -0,0 +1 @@ +dc31fc93764b839eee68789ffad51882 \ No newline at end of file diff --git a/doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1sp_1_1matrix__ref_3_01T_00_01I_00_01TRef_01_4_01_4__inherit__graph.png b/doxygen/structstd_1_1tuple__element_3_01Index_00_01dr_1_1sp_1_1matrix__ref_3_01T_00_01I_00_01TRef_01_4_01_4__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..b3826ab74df4cd68a4f97c2997accc7e522fa0f6 GIT binary patch literal 9739 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 literal 0 HcmV?d00001 diff --git a/doxygen/structstd_1_1tuple__size_3_01dr_1_1index_3_01I_01_4_01_4.html b/doxygen/structstd_1_1tuple__size_3_01dr_1_1index_3_01I_01_4_01_4.html new file mode 100644 index 0000000000..32fdc54fe9 --- /dev/null +++ b/doxygen/structstd_1_1tuple__size_3_01dr_1_1index_3_01I_01_4_01_4.html @@ -0,0 +1,106 @@ + + + + + + + +Distributed Ranges: std::tuple_size< dr::index< I > > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    std::tuple_size< dr::index< I > > Struct Template Reference
    +
    +
    +
    +Inheritance diagram for std::tuple_size< dr::index< I > >:
    +
    +
    Inheritance graph
    + + + + +
    [legend]
    +
    +Collaboration diagram for std::tuple_size< dr::index< I > >:
    +
    +
    Collaboration graph
    + + + + +
    [legend]
    +
    The documentation for this struct was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/detail/index.hpp
    • +
    +
    + + + + diff --git a/doxygen/structstd_1_1tuple__size_3_01dr_1_1index_3_01I_01_4_01_4__coll__graph.map b/doxygen/structstd_1_1tuple__size_3_01dr_1_1index_3_01I_01_4_01_4__coll__graph.map new file mode 100644 index 0000000000..09c2ae6dce --- /dev/null +++ b/doxygen/structstd_1_1tuple__size_3_01dr_1_1index_3_01I_01_4_01_4__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/structstd_1_1tuple__size_3_01dr_1_1index_3_01I_01_4_01_4__coll__graph.md5 b/doxygen/structstd_1_1tuple__size_3_01dr_1_1index_3_01I_01_4_01_4__coll__graph.md5 new file mode 100644 index 0000000000..9cdf7c6c83 --- /dev/null +++ b/doxygen/structstd_1_1tuple__size_3_01dr_1_1index_3_01I_01_4_01_4__coll__graph.md5 @@ -0,0 +1 @@ +63ee53349f88fac890b89317c0456308 \ No newline at end of file diff --git a/doxygen/structstd_1_1tuple__size_3_01dr_1_1index_3_01I_01_4_01_4__coll__graph.png b/doxygen/structstd_1_1tuple__size_3_01dr_1_1index_3_01I_01_4_01_4__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..b6132f82c0d9c9aa9bb2dddec8d94116b4b6af37 GIT binary patch literal 6610 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 i{P$-dO$O$3XE^q|7~hB{S!MW;1|cVNz8UI94( literal 0 HcmV?d00001 diff --git a/doxygen/structstd_1_1tuple__size_3_01dr_1_1index_3_01I_01_4_01_4__inherit__graph.map b/doxygen/structstd_1_1tuple__size_3_01dr_1_1index_3_01I_01_4_01_4__inherit__graph.map new file mode 100644 index 0000000000..09c2ae6dce --- /dev/null +++ b/doxygen/structstd_1_1tuple__size_3_01dr_1_1index_3_01I_01_4_01_4__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/structstd_1_1tuple__size_3_01dr_1_1index_3_01I_01_4_01_4__inherit__graph.md5 b/doxygen/structstd_1_1tuple__size_3_01dr_1_1index_3_01I_01_4_01_4__inherit__graph.md5 new file mode 100644 index 0000000000..9cdf7c6c83 --- /dev/null +++ b/doxygen/structstd_1_1tuple__size_3_01dr_1_1index_3_01I_01_4_01_4__inherit__graph.md5 @@ -0,0 +1 @@ +63ee53349f88fac890b89317c0456308 \ No newline at end of file diff --git a/doxygen/structstd_1_1tuple__size_3_01dr_1_1index_3_01I_01_4_01_4__inherit__graph.png b/doxygen/structstd_1_1tuple__size_3_01dr_1_1index_3_01I_01_4_01_4__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..b6132f82c0d9c9aa9bb2dddec8d94116b4b6af37 GIT binary patch literal 6610 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 i{P$-dO$O$3XE^q|7~hB{S!MW;1|cVNz8UI94( literal 0 HcmV?d00001 diff --git a/doxygen/structstd_1_1tuple__size_3_01dr_1_1sp_1_1matrix__entry_3_01T_00_01I_01_4_01_4.html b/doxygen/structstd_1_1tuple__size_3_01dr_1_1sp_1_1matrix__entry_3_01T_00_01I_01_4_01_4.html new file mode 100644 index 0000000000..dbf8b6af16 --- /dev/null +++ b/doxygen/structstd_1_1tuple__size_3_01dr_1_1sp_1_1matrix__entry_3_01T_00_01I_01_4_01_4.html @@ -0,0 +1,106 @@ + + + + + + + +Distributed Ranges: std::tuple_size< dr::sp::matrix_entry< T, I > > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    std::tuple_size< dr::sp::matrix_entry< T, I > > Struct Template Reference
    +
    +
    +
    +Inheritance diagram for std::tuple_size< dr::sp::matrix_entry< T, I > >:
    +
    +
    Inheritance graph
    + + + + +
    [legend]
    +
    +Collaboration diagram for std::tuple_size< dr::sp::matrix_entry< T, I > >:
    +
    +
    Collaboration graph
    + + + + +
    [legend]
    +
    The documentation for this struct was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/containers/matrix_entry.hpp
    • +
    +
    + + + + diff --git a/doxygen/structstd_1_1tuple__size_3_01dr_1_1sp_1_1matrix__entry_3_01T_00_01I_01_4_01_4__coll__graph.map b/doxygen/structstd_1_1tuple__size_3_01dr_1_1sp_1_1matrix__entry_3_01T_00_01I_01_4_01_4__coll__graph.map new file mode 100644 index 0000000000..d750482211 --- /dev/null +++ b/doxygen/structstd_1_1tuple__size_3_01dr_1_1sp_1_1matrix__entry_3_01T_00_01I_01_4_01_4__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/structstd_1_1tuple__size_3_01dr_1_1sp_1_1matrix__entry_3_01T_00_01I_01_4_01_4__coll__graph.md5 b/doxygen/structstd_1_1tuple__size_3_01dr_1_1sp_1_1matrix__entry_3_01T_00_01I_01_4_01_4__coll__graph.md5 new file mode 100644 index 0000000000..8199cce943 --- /dev/null +++ b/doxygen/structstd_1_1tuple__size_3_01dr_1_1sp_1_1matrix__entry_3_01T_00_01I_01_4_01_4__coll__graph.md5 @@ -0,0 +1 @@ +ddcc46f40278cc3b341553d07b068ded \ No newline at end of file diff --git a/doxygen/structstd_1_1tuple__size_3_01dr_1_1sp_1_1matrix__entry_3_01T_00_01I_01_4_01_4__coll__graph.png b/doxygen/structstd_1_1tuple__size_3_01dr_1_1sp_1_1matrix__entry_3_01T_00_01I_01_4_01_4__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..6c8bb9f3a39211f00f08930ddfe5df21b2fec2da GIT binary patch literal 7479 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 >}|Bq}-PYzjp-%3x8+) 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 + + + diff --git a/doxygen/structstd_1_1tuple__size_3_01dr_1_1sp_1_1matrix__entry_3_01T_00_01I_01_4_01_4__inherit__graph.md5 b/doxygen/structstd_1_1tuple__size_3_01dr_1_1sp_1_1matrix__entry_3_01T_00_01I_01_4_01_4__inherit__graph.md5 new file mode 100644 index 0000000000..8199cce943 --- /dev/null +++ b/doxygen/structstd_1_1tuple__size_3_01dr_1_1sp_1_1matrix__entry_3_01T_00_01I_01_4_01_4__inherit__graph.md5 @@ -0,0 +1 @@ +ddcc46f40278cc3b341553d07b068ded \ No newline at end of file diff --git a/doxygen/structstd_1_1tuple__size_3_01dr_1_1sp_1_1matrix__entry_3_01T_00_01I_01_4_01_4__inherit__graph.png b/doxygen/structstd_1_1tuple__size_3_01dr_1_1sp_1_1matrix__entry_3_01T_00_01I_01_4_01_4__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..6c8bb9f3a39211f00f08930ddfe5df21b2fec2da GIT binary patch literal 7479 zcmcIpcR1B?xIZK-d(R`IXxQ1aV<#)3>{YTGRvde0M;Y0QNH!@mD}=0M@9ce~gK*z- z?{lB~+~>Lf-c&e#e&_vuzwi55zerteHF8oGQUn4)uA#1c2R>)Pzf@vE_+J>casrd}dpcP7#*Y zh}vvr(K>4T`uPbc-%G*GldD{RiO}hL6LQ zC>aGNzmIeMkqUpdQnFdN7QR-pn8#W+GmRjUru-n^MxS&6Xwk@TOf)_?r?F(NKb z&BkUyQS59)gvsXTgml!47iB(wT_&6S{hMzfg5Ad9qR_lN?yc#DDEIXdtG;xp(J$`T z*4EeY5Sp*A;~}maR}sTo5R;RiM-UU>Z%oxOPESwo?CyRYtF#Lp=eu^T_2|#Ku;-R3 zdbgc1B09Ql@Avo6@!MKj?YvoNd?O## zJnz*$=0yAYCZwfx=l>iYwmd%AOp);vFf6_o_(sCD!hXKv96~!wKIZ%dhFMqtV^#__ zNd!tg&gQ3n(~4MzxB{N(~be)+bM& za%pR8FK&!gE@F2V+M1gKHfEZ#s8H(9o{6SPKH=Kk+v7?|NLXAiZMuBx)-Bt;#V(Yy zc8X9So3vX*TYGy#e*WdBm?bUTJ#+K&x)e@#DRT=8HHtobAmI$TapMN@>Q>~)h@rKs ztIorol$+Wa(kj}SvKkv38|u%WOHmUOwDt5v*M9l(60`gx(f{mt#&-C<9*>B~o!nj6 zW*!FzhsB+_R(Rnh0Rch0oX>%qjA2MT^7v=+E^kQu>(>lV5BDC-FDxk0(bGpZG{}*V zkZ`_w^{QbHr8Yl5ukPfu5yUAm^Yeqz*gh?fc;^p=v)di9?3&P{WBb*PzdVFzK0jOb9$sBpQIAE+-6CGiI216gRfGdq zzk8RyuJrTg)Eg2Ki57l`q3;U|6TW5@bk5N;QV1J%4O`+((kAT&7m z9FwZ;KaD141B^Sb@vz^62M<=()~unw%?9B;vx|$PjY`c)HW|fI1_#g9?^s)N$;!!< z!)W(pDR7XIl493BlpeV`s=!wM{{5S4s3V$rNJaC(gG=xQcU5WKE|cg(GT85c@p0qH zMqgH#c}dSLHk6W*%Ik!x|EjCp`aEuucy%&op^5J`qNR+Djb|4Yg5PN-x4?MVer{~( z(pu8XQ@v?u$Usj|zadXaNh#}dK!zWPz)h^1TL|oCMMcF$etvRBM#i`K`SS;x6Nmt) zeGb}Bt_Cyv^&As3^W2b*LTGq6(f*%538|@LyuGkLUPt>^V0L@AqN1afp>R`E)A-cX z$dnW&grb=lyB~IrDCd4XFBcbA{Hs@?19@t#V`I#jnVISu8h97Ii;pG*_1rz$+S&+Y zJT?@ywJBgcB44~9?Maua{B|+0u{rXPDeUWfd(`f)rc-(f3JL(J(3~7j?Q}^z1qFqj zL-g%bk@MRPf02v7f8!w%FKe}wnAOcLE)rb3b`5?CRg?6(W$fG8I(>$EKH-f*F=u5L5jm8Zx= zO^wLh+um?G_dwee`}n$uXtyNU8O*CyqkV`lQuHn5dBwY5x!hK4ks2JDV1W+S4a zY#1-#2L|BqqN77qyrI56o#)ael2={b-CThA8x9{DHlS6zPLBVEGB9o?y?T`(bvTncwmeZqNB+;dpC!N zhvRX-T3;`lbMi7;4KVKc{tESH&+W|qmUkI_|B0xgr{{X(i#@`FaF`PoMu;Nj6g02D zsH&>UBPp3;b2lk-)~Q;ie|Ti1rL&Xx%a<=+|FFVKJ*mL~0Rec0GSbp4b)MS{sSHd^ zd>(%^R^?i|(ZC{B+kKQbpdW@Um3ks53UeQSH*su)DNEq)7-A;YasvpI0;+9N= zfq{Y6-$zGBXZv%MaHkCjJGZq(!N`~_@S{*>?}z^>?fv`rg(M`xGcs_%&?f)EcZhjp z=>jFC8X7I@GSe6n6ol{P0)l=5 zNJBX|Tt&*GBedR#NB-=0*_xa*r9ypaFdL!;$WzzS+N7Zypa!l@mv$#@Z*RX>`H&o@ zO2}j59u7({CVcki}4#NSvflmXy~fUQjxwoy$k5S>@o(cuLKMO^$=d)6>&OMSvP`n1&mCION*8I-BLbjK_~3GttEa zca_O+?s>@;TQng*xlEw|ogEw<=N1-*oKKa)DdvU?^&?)qpn1_CDkKyDknUr=h2`$^ zk~N2zG1|gMpKU#){^!fUp z)Cv{%GP1Enmz4=6B_%0dq{;?K2DNcv%p1|nCN)l9e}7NT0jNk?T3wASD!K}zfBw>? zOJ0B0=mpHa5J10`vjC^yUVB?mP`Pb}D9uVKHm<&9n|gHQ-IFRx^ykl?+NZxs;r4Ac zm|lq)%a#xlubo*u8d}| zSGZP3&_93v^uq4U={hhQ$~ymSUtkcMJYKl6nEHt)-9CajU9dSCVW^U*j9*U~bSAU- z^bkrcr!^7dFL4s+GZ^QC{(FSp?@J--bYDzvQmE$*U}xPy-$z zmMLJ^U&8n;)AdEeft`@F(&XaW+m~tZMXM|XX*&`3Itt%gk&0Oe&f!JjxtUMz8L82- z_>XA5KlCPf-q5_lRyjS{VM)#C9VR-AZm?{>D?(0?+t|VvC5{cG@?I}ugg3#@CyyfO zzb;L^@Y zsw$f}6T5uQd+in75k)vpeSipeR7~?3moTvqIl%{J!ZV-BbfS21gJ+xxB0=}4wHS({ zw{{}&Z}Gh zp1@>p>vpkugE!tU+w0cyVOG<2OiRl-2{+JINYx;^sq^gDBB@;)J&KEq z35~iZf{^S5nP3YPU0g~!Z+QPtK|gJY{3#O zXmCefdy6E-CMHrt!1OrPL+&l(TGaJfk}%k%5p?rxoWiNs!aCbk(Cyi!r9Y~pC4z3k z`1bHAiD{A(9vvO&8X6*p#aUQc6OxibfPu*zWKJF^o}SzVsqHddAGx;Xu(H11+S^OM zx3>q7g?jQt7z{%~dO8_9J3AJO#eod~GEPkau~|Ah^BY(IABc#Els*03Eif_llbMDF z-_z5RiHQk;06e8)VR;b{favV%nj0;*0UA>C^OJw^;zc >}|Bq}-PYzjp-%3x8+) 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 + + + + + + +Distributed Ranges: std::tuple_size< dr::sp::matrix_ref< T, I, TRef > > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    std::tuple_size< dr::sp::matrix_ref< T, I, TRef > > Struct Template Reference
    +
    +
    +
    +Inheritance diagram for std::tuple_size< dr::sp::matrix_ref< T, I, TRef > >:
    +
    +
    Inheritance graph
    + + + + +
    [legend]
    +
    +Collaboration diagram for std::tuple_size< dr::sp::matrix_ref< T, I, TRef > >:
    +
    +
    Collaboration graph
    + + + + +
    [legend]
    +
    The documentation for this struct was generated from the following file:
      +
    • /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/containers/matrix_entry.hpp
    • +
    +
    + + + + diff --git a/doxygen/structstd_1_1tuple__size_3_01dr_1_1sp_1_1matrix__ref_3_01T_00_01I_00_01TRef_01_4_01_4__coll__graph.map b/doxygen/structstd_1_1tuple__size_3_01dr_1_1sp_1_1matrix__ref_3_01T_00_01I_00_01TRef_01_4_01_4__coll__graph.map new file mode 100644 index 0000000000..22a37f3ce2 --- /dev/null +++ b/doxygen/structstd_1_1tuple__size_3_01dr_1_1sp_1_1matrix__ref_3_01T_00_01I_00_01TRef_01_4_01_4__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/structstd_1_1tuple__size_3_01dr_1_1sp_1_1matrix__ref_3_01T_00_01I_00_01TRef_01_4_01_4__coll__graph.md5 b/doxygen/structstd_1_1tuple__size_3_01dr_1_1sp_1_1matrix__ref_3_01T_00_01I_00_01TRef_01_4_01_4__coll__graph.md5 new file mode 100644 index 0000000000..b24f570aee --- /dev/null +++ b/doxygen/structstd_1_1tuple__size_3_01dr_1_1sp_1_1matrix__ref_3_01T_00_01I_00_01TRef_01_4_01_4__coll__graph.md5 @@ -0,0 +1 @@ +23fc92fc9e2f1d965314a0dca1f8ecbd \ No newline at end of file diff --git a/doxygen/structstd_1_1tuple__size_3_01dr_1_1sp_1_1matrix__ref_3_01T_00_01I_00_01TRef_01_4_01_4__coll__graph.png b/doxygen/structstd_1_1tuple__size_3_01dr_1_1sp_1_1matrix__ref_3_01T_00_01I_00_01TRef_01_4_01_4__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..ef6a04b351babae6017feb0d748af99bf36f6e6c GIT binary patch literal 8031 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 U7ddbaZp;yys(LD)l`Nk97ixS}OaK4? literal 0 HcmV?d00001 diff --git a/doxygen/structstd_1_1tuple__size_3_01dr_1_1sp_1_1matrix__ref_3_01T_00_01I_00_01TRef_01_4_01_4__inherit__graph.map b/doxygen/structstd_1_1tuple__size_3_01dr_1_1sp_1_1matrix__ref_3_01T_00_01I_00_01TRef_01_4_01_4__inherit__graph.map new file mode 100644 index 0000000000..22a37f3ce2 --- /dev/null +++ b/doxygen/structstd_1_1tuple__size_3_01dr_1_1sp_1_1matrix__ref_3_01T_00_01I_00_01TRef_01_4_01_4__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/doxygen/structstd_1_1tuple__size_3_01dr_1_1sp_1_1matrix__ref_3_01T_00_01I_00_01TRef_01_4_01_4__inherit__graph.md5 b/doxygen/structstd_1_1tuple__size_3_01dr_1_1sp_1_1matrix__ref_3_01T_00_01I_00_01TRef_01_4_01_4__inherit__graph.md5 new file mode 100644 index 0000000000..b24f570aee --- /dev/null +++ b/doxygen/structstd_1_1tuple__size_3_01dr_1_1sp_1_1matrix__ref_3_01T_00_01I_00_01TRef_01_4_01_4__inherit__graph.md5 @@ -0,0 +1 @@ +23fc92fc9e2f1d965314a0dca1f8ecbd \ No newline at end of file diff --git a/doxygen/structstd_1_1tuple__size_3_01dr_1_1sp_1_1matrix__ref_3_01T_00_01I_00_01TRef_01_4_01_4__inherit__graph.png b/doxygen/structstd_1_1tuple__size_3_01dr_1_1sp_1_1matrix__ref_3_01T_00_01I_00_01TRef_01_4_01_4__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..ef6a04b351babae6017feb0d748af99bf36f6e6c GIT binary patch literal 8031 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 U7ddbaZp;yys(LD)l`Nk97ixS}OaK4? literal 0 HcmV?d00001 diff --git a/doxygen/submdspan__view_8hpp_source.html b/doxygen/submdspan__view_8hpp_source.html new file mode 100644 index 0000000000..6b73cb16b8 --- /dev/null +++ b/doxygen/submdspan__view_8hpp_source.html @@ -0,0 +1,256 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/views/submdspan_view.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    submdspan_view.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <dr/detail/mdspan_shim.hpp>
    +
    8#include <dr/detail/ranges_shim.hpp>
    +
    9#include <dr/mp/views/mdspan_view.hpp>
    +
    10
    +
    11namespace dr::mp::__detail {
    +
    12
    +
    13//
    +
    14// Add a local mdspan to the underlying segment
    +
    15//
    +
    16template <typename BaseSegment, std::size_t Rank,
    +
    17 typename Layout = md::layout_stride>
    +
    18class mdsub_segment : public BaseSegment {
    +
    19private:
    +
    20public:
    +
    21 using index_type = dr::__detail::dr_extents<Rank>;
    +
    22
    +
    23 mdsub_segment(){};
    +
    24 mdsub_segment(BaseSegment segment, const index_type &slice_starts,
    +
    25 const index_type &slice_ends)
    +
    26 : BaseSegment(segment),
    +
    27 mdspan_(local_tile(segment, slice_starts, slice_ends)),
    +
    28 root_mdspan_(segment.mdspan()) {}
    +
    29
    +
    30 auto mdspan() const { return mdspan_; }
    +
    31 auto root_mdspan() const { return root_mdspan_; }
    +
    32
    +
    33private:
    +
    34 using T = rng::range_value_t<BaseSegment>;
    +
    35
    +
    36 static auto local_tile(BaseSegment segment, const index_type &slice_starts,
    +
    37 const index_type &slice_ends) {
    +
    38 index_type starts, ends;
    +
    39 index_type base_starts = segment.origin();
    +
    40 auto base_mdspan = segment.mdspan();
    +
    41
    +
    42 for (std::size_t i = 0; i < Rank; i++) {
    +
    43 // Clip base to area covered by requested span, and translate from global
    +
    44 // to local indexing
    +
    45 auto base_end = base_starts[i] + base_mdspan.extent(i);
    +
    46 starts[i] =
    +
    47 std::min(base_end, std::max(slice_starts[i], base_starts[i])) -
    +
    48 base_starts[i];
    +
    49 ends[i] = std::max(base_starts[i], std::min(slice_ends[i], base_end)) -
    +
    50 base_starts[i];
    +
    51 }
    +
    52
    +
    53 return dr::__detail::make_submdspan(base_mdspan, starts, ends);
    +
    54 }
    +
    55
    +
    56 md::mdspan<T, dr::__detail::md_extents<Rank>, md::layout_stride> mdspan_;
    +
    57 md::mdspan<T, dr::__detail::md_extents<Rank>, md::layout_stride> root_mdspan_;
    +
    58};
    +
    59
    +
    60} // namespace dr::mp::__detail
    +
    61
    +
    62namespace dr::mp {
    +
    63
    +
    64//
    +
    65// Wrap a mdspan view
    +
    66//
    +
    67template <is_mdspan_view Base>
    +
    68struct submdspan_view : public rng::view_interface<submdspan_view<Base>> {
    +
    69private:
    +
    70 static auto make_segments(auto base, auto slice_starts, auto slice_ends) {
    +
    71 auto make_md = [=](auto segment) {
    +
    72 return __detail::mdsub_segment(segment, slice_starts, slice_ends);
    +
    73 };
    +
    74 return dr::ranges::segments(base) | rng::views::transform(make_md);
    +
    75 }
    +
    76
    +
    77 using iterator_type = rng::iterator_t<Base>;
    +
    78 using extents_type = dr::__detail::dr_extents<Base::rank()>;
    +
    79 using difference_type = rng::iter_difference_t<iterator_type>;
    +
    80 using segments_type =
    +
    81 decltype(make_segments(std::declval<Base>(), std::declval<extents_type>(),
    +
    82 std::declval<extents_type>()));
    +
    83
    +
    84 Base base_;
    +
    85 extents_type slice_starts_;
    +
    86 extents_type slice_ends_;
    +
    87 segments_type segments_;
    +
    88
    +
    89public:
    +
    90 submdspan_view(is_mdspan_view auto base, extents_type slice_starts,
    +
    91 extents_type slice_ends)
    +
    92 : base_(base), slice_starts_(std::forward<extents_type>(slice_starts)),
    +
    93 slice_ends_(std::forward<extents_type>(slice_ends)) {
    +
    94 segments_ = make_segments(base_, slice_starts_, slice_ends_);
    +
    95 }
    +
    96
    +
    97 // Base implements random access range
    +
    98 auto begin() const { return base_.begin(); }
    +
    99 auto end() const { return base_.end(); }
    +
    100 auto operator[](difference_type n) { return base_[n]; }
    +
    101
    +
    102 auto mdspan() const {
    +
    103 return dr::__detail::make_submdspan(base_.mdspan(), slice_starts_,
    +
    104 slice_ends_);
    +
    105 }
    +
    106
    +
    107 auto segments() const { return segments_; }
    +
    108
    +
    109 // Mdspan access to grid
    +
    110 auto grid() {
    +
    111 using grid_iterator_type = rng::iterator_t<segments_type>;
    +
    112 using grid_type =
    +
    113 md::mdspan<grid_iterator_type, dr::__detail::md_extents<Base::rank()>,
    +
    114 md::layout_right,
    + +
    116 return grid_type(rng::begin(segments_), base_.grid().extents());
    +
    117 }
    +
    118};
    +
    119
    +
    120template <typename R, typename Extents>
    +
    121submdspan_view(R r, Extents slice_starts, Extents slice_ends)
    + +
    123
    +
    124} // namespace dr::mp
    +
    125
    +
    126namespace dr::mp::views {
    +
    127
    +
    128template <typename Extents> class submdspan_adapter_closure {
    +
    129public:
    +
    130 submdspan_adapter_closure(Extents slice_starts, Extents slice_ends)
    +
    131 : slice_starts_(slice_starts), slice_ends_(slice_ends) {}
    +
    132
    +
    133 template <rng::viewable_range R> auto operator()(R &&r) const {
    +
    134 return submdspan_view(std::forward<R>(r), slice_starts_, slice_ends_);
    +
    135 }
    +
    136
    +
    137 template <rng::viewable_range R>
    +
    138 friend auto operator|(R &&r, const submdspan_adapter_closure &closure) {
    +
    139 return closure(std::forward<R>(r));
    +
    140 }
    +
    141
    +
    142private:
    +
    143 Extents slice_starts_;
    +
    144 Extents slice_ends_;
    +
    145};
    +
    146
    + +
    148public:
    +
    149 template <is_mdspan_view R, typename Extents>
    +
    150 auto operator()(R r, Extents &&slice_starts, Extents &&slice_ends) const {
    +
    151 return submdspan_adapter_closure(std::forward<Extents>(slice_starts),
    +
    152 std::forward<Extents>(slice_ends))(
    +
    153 std::forward<R>(r));
    +
    154 }
    +
    155
    +
    156 template <typename Extents>
    +
    157 auto operator()(Extents &&slice_starts, Extents &&slice_ends) const {
    +
    158 return submdspan_adapter_closure(std::forward<Extents>(slice_starts),
    +
    159 std::forward<Extents>(slice_ends));
    +
    160 }
    +
    161};
    +
    162
    +
    163inline constexpr auto submdspan = submdspan_fn_{};
    +
    164
    +
    165} // namespace dr::mp::views
    +
    Definition: mdspan_utils.hpp:60
    +
    Definition: submdspan_view.hpp:18
    +
    Definition: submdspan_view.hpp:128
    +
    Definition: submdspan_view.hpp:147
    +
    Definition: mdspan_view.hpp:206
    +
    Definition: submdspan_view.hpp:68
    +
    + + + + diff --git a/doxygen/subrange_8hpp_source.html b/doxygen/subrange_8hpp_source.html new file mode 100644 index 0000000000..292d6a1d35 --- /dev/null +++ b/doxygen/subrange_8hpp_source.html @@ -0,0 +1,289 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/containers/subrange.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    subrange.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <dr/detail/ranges_shim.hpp>
    +
    8
    +
    9namespace dr::mp {
    +
    10
    +
    11template <typename DM> class subrange_iterator {
    +
    12public:
    +
    13 using value_type = typename DM::value_type;
    +
    14 using difference_type = typename DM::difference_type;
    +
    15
    + +
    17
    +
    18 subrange_iterator(DM *dm, std::pair<std::size_t, std::size_t> row_rng,
    +
    19 std::pair<std::size_t, std::size_t> col_rng,
    +
    20 difference_type index = 0) noexcept {
    +
    21 dm_ = dm;
    +
    22 row_rng_ = row_rng;
    +
    23 col_rng_ = col_rng;
    +
    24 index_ = index;
    +
    25 }
    +
    26
    +
    27 value_type &operator*() const {
    +
    28
    +
    29 int offset = dm_->halo_bounds().prev + find_dm_offset(index_) -
    +
    30 default_comm().rank() * dm_->segment_size();
    +
    31
    +
    32 assert(offset >= 0);
    +
    33 assert(offset < (int)dm_->data_size());
    +
    34 return *(dm_->data() + offset);
    +
    35 }
    +
    36
    +
    37 dm_row<value_type> operator[](int n) {
    +
    38 std::size_t rowsize = col_rng_.second - col_rng_.first;
    +
    39
    +
    40 int offset = dm_->halo_bounds().prev +
    +
    41 find_dm_offset((int)(index_ + n * rowsize)) -
    +
    42 default_comm().rank() * dm_->segment_size();
    +
    43
    +
    44 assert(offset >= 0);
    +
    45 assert(offset < (int)dm_->data_size());
    +
    46
    +
    47 signed long idx = default_comm().rank() * dm_->segment_shape()[0]; // ??
    +
    48 value_type *ptr = dm_->data() + offset;
    +
    49 const dv_segment<DM> *segment = &(dm_->segments()[0]); // comm rank ??
    +
    50
    +
    51 return dm_row<value_type>(idx, ptr, rowsize, segment);
    +
    52 }
    +
    53
    +
    54 value_type &operator[](std::pair<int, int> p) {
    +
    55 int offset = dm_->distribution_.halo().prev + find_dm_offset(index_) -
    +
    56 default_comm().rank() * dm_->segment_size() +
    +
    57 dm_->shape()[1] * p.first + p.second;
    +
    58
    +
    59 assert(offset >= 0);
    +
    60 assert(offset < (int)dm_->data_size());
    +
    61 return *(dm_->data() + offset);
    +
    62 }
    +
    63
    +
    64 // friend operators fulfill rng::detail::weakly_equality_comparable_with_
    +
    65 friend bool operator==(subrange_iterator &first, subrange_iterator &second) {
    +
    66 return first.index_ == second.index_;
    +
    67 }
    +
    68 friend bool operator!=(subrange_iterator &first, subrange_iterator &second) {
    +
    69 return first.index_ != second.index_;
    +
    70 }
    +
    71 friend bool operator==(subrange_iterator first, subrange_iterator second) {
    +
    72 return first.index_ == second.index_;
    +
    73 }
    +
    74 friend bool operator!=(subrange_iterator first, subrange_iterator second) {
    +
    75 return first.index_ != second.index_;
    +
    76 }
    +
    77 auto operator<=>(const subrange_iterator &other) const noexcept {
    +
    78 return this->index_ <=> other.index_;
    +
    79 }
    +
    80
    +
    81 // Only these arithmetic manipulate internal state
    +
    82 auto &operator-=(difference_type n) {
    +
    83 index_ -= n;
    +
    84 return *this;
    +
    85 }
    +
    86 auto &operator+=(difference_type n) {
    +
    87 index_ += n;
    +
    88 return *this;
    +
    89 }
    +
    90
    +
    91 difference_type operator-(const subrange_iterator &other) const noexcept {
    +
    92 return index_ - other.index_;
    +
    93 }
    +
    94 // prefix
    +
    95 auto &operator++() {
    +
    96 index_ += 1;
    +
    97 return *this;
    +
    98 }
    +
    99 auto &operator--() {
    +
    100 index_ -= 1;
    +
    101 return *this;
    +
    102 }
    +
    103
    +
    104 // postfix
    +
    105 auto operator++(int) {
    +
    106 auto prev = *this;
    +
    107 index_ += 1;
    +
    108 return prev;
    +
    109 }
    +
    110 auto operator--(int) {
    +
    111 auto prev = *this;
    +
    112 index_ -= 1;
    +
    113 return prev;
    +
    114 }
    +
    115
    +
    116 auto operator+(difference_type n) const {
    +
    117 return subrange_iterator(dm_, row_rng_, col_rng_, index_ + n);
    +
    118 }
    +
    119 auto operator-(difference_type n) const {
    +
    120 return subrange_iterator(dm_, row_rng_, col_rng_, index_ - n);
    +
    121 }
    +
    122
    +
    123 // When *this is not first in the expression
    +
    124 friend auto operator+(difference_type n, const subrange_iterator &other) {
    +
    125 return other + n;
    +
    126 }
    +
    127
    +
    128 auto &halo() { return dm_->halo(); }
    +
    129 auto segments() { return dm_->segments(); }
    +
    130
    +
    131 bool is_local() { return dm_->is_local_cell(find_dm_offset(index_)); }
    +
    132
    +
    133 // for debug purposes
    +
    134 std::size_t find_dm_offset() const { return find_dm_offset(index_); }
    +
    135
    +
    136private:
    +
    137 /*
    +
    138 * converts index within subrange (viewed as linear contiguous space)
    +
    139 * into index within physical segment in dm
    +
    140 */
    +
    141 std::size_t find_dm_offset(int index) const {
    +
    142 int ind_rows, ind_cols;
    +
    143 int offset = 0;
    +
    144
    +
    145 ind_rows = index / (col_rng_.second - col_rng_.first);
    +
    146 ind_cols = index % (col_rng_.second - col_rng_.first);
    +
    147
    +
    148 if (ind_cols < 0) {
    +
    149 ind_rows -= 1;
    +
    150 ind_cols += (col_rng_.second - col_rng_.first);
    +
    151 }
    +
    152
    +
    153 offset += row_rng_.first * dm_->shape()[1] + col_rng_.first;
    +
    154 offset += (int)(ind_rows * dm_->shape()[1] + ind_cols);
    +
    155
    +
    156 return offset;
    +
    157 };
    +
    158
    +
    159private:
    +
    160 DM *dm_ = nullptr;
    +
    161 std::pair<int, int> row_rng_ = std::pair<int, int>(0, 0);
    +
    162 std::pair<int, int> col_rng_ = std::pair<int, int>(0, 0);
    +
    163
    +
    164 std::size_t index_ = 0;
    +
    165}; // class subrange_iterator
    +
    166
    +
    167template <typename DM>
    +
    168class subrange : public rng::view_interface<subrange<DM>> {
    +
    169public:
    + +
    171 using value_type = typename DM::value_type;
    +
    172
    +
    173 subrange(DM &dm, std::pair<std::size_t, std::size_t> row_rng,
    +
    174 std::pair<std::size_t, std::size_t> col_rng) {
    +
    175 dm_ = &dm;
    +
    176 row_rng_ = row_rng;
    +
    177 col_rng_ = col_rng;
    +
    178
    +
    179 subrng_size_ =
    +
    180 (col_rng.second - col_rng.first) * (row_rng.second - row_rng.first);
    +
    181 }
    +
    182
    +
    183 iterator begin() const { return iterator(dm_, row_rng_, col_rng_); }
    +
    184 iterator end() const { return begin() + subrng_size_; }
    +
    185
    +
    186 auto size() { return subrng_size_; }
    +
    187
    +
    188 auto &halo() const { return dm_->halo(); }
    +
    189 auto segments() const { return dm_->segments(); }
    +
    190
    +
    191private:
    +
    192 DM *dm_;
    +
    193 std::pair<std::size_t, std::size_t> row_rng_;
    +
    194 std::pair<std::size_t, std::size_t> col_rng_;
    +
    195
    +
    196 std::size_t subrng_size_ = 0;
    +
    197
    +
    198}; // class subrange
    +
    199
    +
    200} // namespace dr::mp
    +
    Definition: index.hpp:34
    +
    Definition: segment.hpp:214
    +
    Definition: subrange.hpp:11
    +
    Definition: subrange.hpp:168
    +
    + + + + diff --git a/doxygen/sycl__support_8hpp_source.html b/doxygen/sycl__support_8hpp_source.html new file mode 100644 index 0000000000..c1433f4a75 --- /dev/null +++ b/doxygen/sycl__support_8hpp_source.html @@ -0,0 +1,187 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/sycl_support.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    sycl_support.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7// file for helper functions working only if compiled with SYCL, assert
    +
    8// otherwise
    +
    9
    +
    10#ifdef SYCL_LANGUAGE_VERSION
    +
    11
    +
    12namespace dr::mp {
    +
    13
    +
    14sycl::queue &sycl_queue();
    +
    15
    +
    16} // namespace dr::mp
    +
    17
    +
    18namespace dr::mp::__detail {
    +
    19
    +
    20template <typename T> T sycl_get(T &v) {
    +
    21 T temp;
    +
    22 sycl_queue().memcpy(&temp, &v, sizeof(v)).wait();
    +
    23 return temp;
    +
    24}
    +
    25
    +
    26template <typename T> auto sycl_get(T &v1, T &v2) {
    +
    27 std::pair<T, T> temp;
    +
    28 auto ev1 = sycl_queue().memcpy(&temp.first, &v1, sizeof(v1));
    +
    29 auto ev2 = sycl_queue().memcpy(&temp.second, &v2, sizeof(v2));
    +
    30 ev1.wait();
    +
    31 ev2.wait();
    +
    32 return temp;
    +
    33}
    +
    34
    +
    35template <typename T> void sycl_copy(T const *begin, T const *end, T *dst) {
    +
    36 sycl_queue().memcpy(dst, begin, (end - begin) * sizeof(T)).wait();
    +
    37}
    +
    38
    +
    39template <typename T, std::size_t Alignment>
    +
    40using shared_base_allocator =
    +
    41 sycl::usm_allocator<T, sycl::usm::alloc::shared, Alignment>;
    +
    42
    +
    43}; // namespace dr::mp::__detail
    +
    44
    +
    45namespace dr::mp {
    +
    46
    +
    47template <typename T, std::size_t Alignment = 0>
    +
    48class sycl_shared_allocator
    +
    49 : public __detail::shared_base_allocator<T, Alignment> {
    +
    50public:
    +
    51 sycl_shared_allocator(sycl::queue q = sycl_queue())
    +
    52 : __detail::shared_base_allocator<T, Alignment>(q) {}
    +
    53};
    +
    54
    +
    55struct device_policy {
    +
    56 device_policy(sycl::queue q = sycl_queue()) : queue(q), dpl_policy(q) {}
    +
    57
    +
    58 sycl::queue queue;
    +
    59 decltype(oneapi::dpl::execution::make_device_policy(queue)) dpl_policy;
    +
    60};
    +
    61
    +
    62} // namespace dr::mp
    +
    63
    +
    64#else // !SYCL_LANGUAGE_VERSION
    +
    65
    +
    66namespace dr::mp {
    +
    67
    +
    68struct device_policy {};
    +
    69
    +
    70} // namespace dr::mp
    +
    71
    +
    72namespace dr::mp::__detail {
    +
    73
    +
    74// define here to avoid ifdefs where it is called
    +
    75template <typename T> T sycl_get(T &v) {
    +
    76 assert(false);
    +
    77 return v;
    +
    78}
    +
    79
    +
    80// define here to avoid ifdefs where it is called
    +
    81template <typename T> auto sycl_get(T &v1, T &v2) {
    +
    82 assert(false);
    +
    83 return std::pair<T, T>{v1, v2};
    +
    84}
    +
    85
    +
    86template <typename T> void sycl_copy(T const *begin, T const *end, T *dst) {
    +
    87 assert(false);
    +
    88}
    +
    89
    +
    90} // namespace dr::mp::__detail
    +
    91
    +
    92#endif // SYCL_LANGUAGE_VERSION
    +
    93
    +
    94namespace dr::mp::__detail {
    +
    95
    +
    96template <typename T>
    +
    97void sycl_copy(T const *src, T *dst, std::size_t size = 1) {
    +
    98 sycl_copy(src, src + size, dst);
    +
    99}
    +
    100
    +
    101} // namespace dr::mp::__detail
    +
    Definition: sycl_support.hpp:68
    +
    + + + + diff --git a/doxygen/sycl__utils_8hpp_source.html b/doxygen/sycl__utils_8hpp_source.html new file mode 100644 index 0000000000..37772497c7 --- /dev/null +++ b/doxygen/sycl__utils_8hpp_source.html @@ -0,0 +1,293 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/detail/sycl_utils.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    sycl_utils.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <limits>
    +
    8
    +
    9#include <dr/detail/utils.hpp>
    +
    10
    +
    11#ifdef SYCL_LANGUAGE_VERSION
    +
    12
    +
    13#include <sycl/sycl.hpp>
    +
    14
    +
    15namespace dr::__detail {
    +
    16
    +
    17// With the ND-range workaround, the maximum kernel size is
    +
    18// `std::numeric_limits<std::int32_t>::max()` rounded down to
    +
    19// the nearest multiple of the block size.
    +
    20inline std::size_t max_kernel_size_(std::size_t block_size = 128) {
    +
    21 std::size_t max_kernel_size = std::numeric_limits<std::int32_t>::max();
    +
    22 return (max_kernel_size / block_size) * block_size;
    +
    23}
    +
    24
    +
    25// This is a workaround to avoid performance degradation
    +
    26// in DPC++ for odd range sizes.
    +
    27template <typename Fn>
    +
    28sycl::event parallel_for_workaround(sycl::queue &q, sycl::range<1> numWorkItems,
    +
    29 Fn &&fn, std::size_t block_size = 128) {
    +
    30 std::size_t num_blocks = (numWorkItems.size() + block_size - 1) / block_size;
    +
    31
    +
    32 int32_t range_size = numWorkItems.size();
    +
    33
    +
    34 auto event = q.parallel_for(
    +
    35 sycl::nd_range<>(num_blocks * block_size, block_size), [=](auto nd_idx) {
    +
    36 auto idx = nd_idx.get_global_id(0);
    +
    37 if (idx < range_size) {
    +
    38 fn(idx);
    +
    39 }
    +
    40 });
    +
    41 return event;
    +
    42}
    +
    43
    +
    44template <typename Fn>
    +
    45sycl::event parallel_for_64bit(sycl::queue &q, sycl::range<1> numWorkItems,
    +
    46 Fn &&fn) {
    +
    47 std::size_t block_size = 128;
    +
    48 std::size_t max_kernel_size = max_kernel_size_(block_size);
    +
    49
    +
    50 std::vector<sycl::event> events;
    +
    51 for (std::size_t base_idx = 0; base_idx < numWorkItems.size();
    +
    52 base_idx += max_kernel_size) {
    +
    53 std::size_t launch_size =
    +
    54 std::min(numWorkItems.size() - base_idx, max_kernel_size);
    +
    55
    +
    56 auto e = parallel_for_workaround(
    +
    57 q, launch_size,
    +
    58 [=](sycl::id<1> idx_) {
    +
    59 sycl::id<1> idx(base_idx + idx_);
    +
    60 fn(idx);
    +
    61 },
    +
    62 block_size);
    +
    63
    +
    64 events.push_back(e);
    +
    65 }
    +
    66
    +
    67 auto e = q.submit([&](auto &&h) {
    +
    68 h.depends_on(events);
    +
    69 // Empty host task necessary due to [CMPLRLLVM-46542]
    +
    70 h.host_task([] {});
    +
    71 });
    +
    72
    +
    73 return e;
    +
    74}
    +
    75
    +
    76//
    +
    77// return true if the device can be partitioned by affinity domain
    +
    78//
    +
    79inline auto partitionable(sycl::device device) {
    +
    80 // Earlier commits used the query API, but they return true even
    +
    81 // though a partition will fail: Intel MPI mpirun with multiple
    +
    82 // processes.
    +
    83 try {
    +
    84 device.create_sub_devices<
    +
    85 sycl::info::partition_property::partition_by_affinity_domain>(
    +
    86 sycl::info::partition_affinity_domain::numa);
    +
    87 } catch (sycl::exception const &e) {
    +
    88 if (e.code() == sycl::errc::invalid ||
    +
    89 e.code() == sycl::errc::feature_not_supported) {
    +
    90 return false;
    +
    91 } else {
    +
    92 throw;
    +
    93 }
    +
    94 }
    +
    95
    +
    96 return true;
    +
    97}
    +
    98
    +
    99// Convert a global range to a nd_range using generic block size level
    +
    100// gpu requires uniform size workgroup, so round up to a multiple of a
    +
    101// workgroup.
    +
    102template <int Dim> auto nd_range(sycl::range<Dim> global) {
    +
    103 if constexpr (Dim == 1) {
    +
    104 sycl::range local(128);
    +
    105 return sycl::nd_range<Dim>(sycl::range(round_up(global[0], local[0])),
    +
    106 local);
    +
    107 } else if constexpr (Dim == 2) {
    +
    108 sycl::range local(16, 16);
    +
    109 return sycl::nd_range<Dim>(sycl::range(round_up(global[0], local[0]),
    +
    110 round_up(global[1], local[1])),
    +
    111 local);
    +
    112 } else if constexpr (Dim == 3) {
    +
    113 sycl::range local(8, 8, 8);
    +
    114 return sycl::nd_range<Dim>(sycl::range(round_up(global[0], local[0]),
    +
    115 round_up(global[1], local[1]),
    +
    116 round_up(global[2], local[2])),
    +
    117 local);
    +
    118 } else {
    +
    119 assert(false);
    +
    120 return sycl::range(0);
    +
    121 }
    +
    122}
    +
    123
    +
    124template <typename Fn>
    +
    125sycl::event parallel_for_nd(sycl::queue &q, sycl::range<1> global, Fn &&fn) {
    +
    126 return q.parallel_for(nd_range(global), [=](auto nd_idx) {
    +
    127 auto idx0 = nd_idx.get_global_id(0);
    +
    128 if (idx0 < global[0]) {
    +
    129 fn(idx0);
    +
    130 }
    +
    131 });
    +
    132}
    +
    133
    +
    134template <typename Fn>
    +
    135sycl::event parallel_for_nd(sycl::queue &q, sycl::range<2> global, Fn &&fn) {
    +
    136 return q.parallel_for(nd_range(global), [=](auto nd_idx) {
    +
    137 auto idx0 = nd_idx.get_global_id(0);
    +
    138 auto idx1 = nd_idx.get_global_id(1);
    +
    139 if (idx0 < global[0] && idx1 < global[1]) {
    +
    140 fn(std::array{idx0, idx1});
    +
    141 }
    +
    142 });
    +
    143}
    +
    144
    +
    145template <typename Fn>
    +
    146sycl::event parallel_for_nd(sycl::queue &q, sycl::range<3> global, Fn &&fn) {
    +
    147 return q.parallel_for(nd_range(global), [=](auto nd_idx) {
    +
    148 auto idx0 = nd_idx.get_global_id(0);
    +
    149 auto idx1 = nd_idx.get_global_id(1);
    +
    150 auto idx2 = nd_idx.get_global_id(2);
    +
    151 if (idx0 < global[0] && idx1 < global[1] && idx2 < global[2]) {
    +
    152 fn(std::array{idx0, idx1, idx2});
    +
    153 }
    +
    154 });
    +
    155}
    +
    156
    +
    157auto combine_events(sycl::queue &q, const auto &events) {
    +
    158 return q.submit([&](auto &&h) {
    +
    159 h.depends_on(events);
    +
    160 // Empty host task necessary due to [CMPLRLLVM-46542]
    +
    161 h.host_task([] {});
    +
    162 });
    +
    163}
    +
    164
    +
    165template <typename Fn>
    +
    166sycl::event parallel_for(sycl::queue &q, sycl::range<1> numWorkItems, Fn &&fn) {
    +
    167 std::size_t block_size = 128;
    +
    168 std::size_t max_kernel_size = max_kernel_size_();
    +
    169
    +
    170 if (numWorkItems.size() < max_kernel_size) {
    +
    171 return parallel_for_workaround(q, numWorkItems, std::forward<Fn>(fn),
    +
    172 block_size);
    +
    173 } else {
    +
    174 return parallel_for_64bit(q, numWorkItems, std::forward<Fn>(fn));
    +
    175 }
    +
    176}
    +
    177
    +
    178template <typename Fn>
    +
    179sycl::event parallel_for(sycl::queue &q, sycl::range<2> global, Fn &&fn) {
    +
    180 auto max = std::numeric_limits<std::int32_t>::max();
    +
    181 assert(global[0] < max && global[1] < max);
    +
    182 return parallel_for_nd(q, global, fn);
    +
    183}
    +
    184
    +
    185template <typename Fn>
    +
    186sycl::event parallel_for(sycl::queue &q, sycl::range<3> global, Fn &&fn) {
    +
    187 auto max = std::numeric_limits<std::int32_t>::max();
    +
    188 assert(global[0] < max && global[1] < max && global[2] < max);
    +
    189 return parallel_for_nd(q, global, fn);
    +
    190}
    +
    191
    +
    192using event = sycl::event;
    +
    193
    +
    194} // namespace dr::__detail
    +
    195
    +
    196#else
    +
    197
    +
    198namespace dr::__detail {
    +
    199
    +
    200class event {
    +
    201public:
    +
    202 void wait() {}
    +
    203};
    +
    204
    +
    205} // namespace dr::__detail
    +
    206
    +
    207#endif // SYCL_LANGUAGE_VERSION
    +
    Definition: sycl_utils.hpp:200
    +
    + + + + diff --git a/doxygen/sync_off.png b/doxygen/sync_off.png new file mode 100644 index 0000000000000000000000000000000000000000..3b443fc62892114406e3d399421b2a881b897acc GIT binary patch literal 853 zcmV-b1FHOqP)oT|#XixUYy%lpuf3i8{fX!o zUyDD0jOrAiT^tq>fLSOOABs-#u{dV^F$b{L9&!2=9&RmV;;8s^x&UqB$PCj4FdKbh zoB1WTskPUPu05XzFbA}=KZ-GP1fPpAfSs>6AHb12UlR%-i&uOlTpFNS7{jm@mkU1V zh`nrXr~+^lsV-s1dkZOaI|kYyVj3WBpPCY{n~yd%u%e+d=f%`N0FItMPtdgBb@py; zq@v6NVArhyTC7)ULw-Jy8y42S1~4n(3LkrW8mW(F-4oXUP3E`e#g**YyqI7h-J2zK zK{m9##m4ri!7N>CqQqCcnI3hqo1I;Yh&QLNY4T`*ptiQGozK>FF$!$+84Z`xwmeMh zJ0WT+OH$WYFALEaGj2_l+#DC3t7_S`vHpSivNeFbP6+r50cO8iu)`7i%Z4BTPh@_m3Tk!nAm^)5Bqnr%Ov|Baunj#&RPtRuK& z4RGz|D5HNrW83-#ydk}tVKJrNmyYt-sTxLGlJY5nc&Re zU4SgHNPx8~Yxwr$bsju?4q&%T1874xxzq+_%?h8_ofw~(bld=o3iC)LUNR*BY%c0y zWd_jX{Y8`l%z+ol1$@Qa?Cy!(0CVIEeYpKZ`(9{z>3$CIe;pJDQk$m3p}$>xBm4lb zKo{4S)`wdU9Ba9jJbVJ0C=SOefZe%d$8=2r={nu<_^a3~>c#t_U6dye5)JrR(_a^E f@}b6j1K9lwFJq@>o)+Ry00000NkvXXu0mjfWa5j* literal 0 HcmV?d00001 diff --git a/doxygen/sync_on.png b/doxygen/sync_on.png new file mode 100644 index 0000000000000000000000000000000000000000..e08320fb64e6fa33b573005ed6d8fe294e19db76 GIT binary patch literal 845 zcmV-T1G4;yP)Y;xxyHF2B5Wzm| zOOGupOTn@c(JmBOl)e;XMNnZuiTJP>rM8<|Q`7I_))aP?*T)ow&n59{}X4$3Goat zgjs?*aasfbrokzG5cT4K=uG`E14xZl@z)F={P0Y^?$4t z>v!teRnNZym<6h{7sLyF1V0HsfEl+l6TrZpsfr1}luH~F7L}ktXu|*uVX^RG$L0`K zWs3j|0tIvVe(N%_?2{(iCPFGf#B6Hjy6o&}D$A%W%jfO8_W%ZO#-mh}EM$LMn7joJ z05dHr!5Y92g+31l<%i1(=L1a1pXX+OYnalY>31V4K}BjyRe3)9n#;-cCVRD_IG1fT zOKGeNY8q;TL@K{dj@D^scf&VCs*-Jb>8b>|`b*osv52-!A?BpbYtTQBns5EAU**$m zSnVSm(teh>tQi*S*A>#ySc=n;`BHz`DuG4&g4Kf8lLhca+zvZ7t7RflD6-i-mcK=M z!=^P$*u2)bkY5asG4gsss!Hn%u~>}kIW`vMs%lJLH+u*9<4PaV_c6U`KqWXQH%+Nu zTv41O(^ZVi@qhjQdG!fbZw&y+2o!iYymO^?ud3{P*HdoX83YV*Uu_HB=?U&W9%AU# z80}k1SS-CXTU7dcQlsm<^oYLxVSseqY6NO}dc`Nj?8vrhNuCdm@^{a3AQ_>6myOj+ z`1RsLUXF|dm|3k7s2jD(B{rzE>WI2scH8i1;=O5Cc9xB3^aJk%fQjqsu+kH#0=_5a z0nCE8@dbQa-|YIuUVvG0L_IwHMEhOj$Mj4Uq05 X8=0q~qBNan00000NkvXXu0mjfptF>5 literal 0 HcmV?d00001 diff --git a/doxygen/tab_a.png b/doxygen/tab_a.png new file mode 100644 index 0000000000000000000000000000000000000000..3b725c41c5a527a3a3e40097077d0e206a681247 GIT binary patch literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QlXwMjv*C{Z|8b*H5dputLHD# z=<0|*y7z(Vor?d;H&?EG&cXR}?!j-Lm&u1OOI7AIF5&c)RFE;&p0MYK>*Kl@eiymD r@|NpwKX@^z+;{u_Z~trSBfrMKa%3`zocFjEXaR$#tDnm{r-UW|TZ1%4 literal 0 HcmV?d00001 diff --git a/doxygen/tab_ad.png b/doxygen/tab_ad.png new file mode 100644 index 0000000000000000000000000000000000000000..e34850acfc24be58da6d2fd1ccc6b29cc84fe34d GIT binary patch literal 135 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QhuH;jv*C{Z|5d*H3V=pKi{In zd2jxLclDRPylmD}^l7{QOtL{vUjO{-WqItb5sQp2h-99b8^^Scr-=2mblCdZuUm?4 jzOJvgvt3{(cjKLW5(A@0qPS@<&}0TrS3j3^P6y&q2{!U5bk+Tso_B!YCpDh>v z{CM*1U8YvQRyBUHt^Ju0W_sq-?;9@_4equ-bavTs=gk796zopr0EBT&m;e9( literal 0 HcmV?d00001 diff --git a/doxygen/tab_s.png b/doxygen/tab_s.png new file mode 100644 index 0000000000000000000000000000000000000000..ab478c95b67371d700a20869f7de1ddd73522d50 GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QuUrLjv*C{Z|^p8HaRdjTwH7) zC?wLlL}}I{)n%R&r+1}IGmDnq;&J#%V6)9VsYhS`O^BVBQlxOUep0c$RENLq#g8A$ z)z7%K_bI&n@J+X_=x}fJoEKed-$<>=ZI-;YrdjIl`U`uzuDWSP?o#Dmo{%SgM#oan kX~E1%D-|#H#QbHoIja2U-MgvsK&LQxy85}Sb4q9e0Efg%P5=M^ literal 0 HcmV?d00001 diff --git a/doxygen/tab_sd.png b/doxygen/tab_sd.png new file mode 100644 index 0000000000000000000000000000000000000000..757a565ced4730f85c833fb2547d8e199ae68f19 GIT binary patch literal 188 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!Qq7(&jv*C{Z|_!fH5o7*c=%9% zcILh!EA=pAQKdx-Cdiev=v{eg{8Ht<{e8_NAN~b=)%W>-WDCE0PyDHGemi$BoXwcK z{>e9^za6*c1ilttWw&V+U;WCPlV9{LdC~Ey%_H(qj`xgfES(4Yz5jSTZfCt`4E$0YRsR*S^mTCR^;V&sxC8{l_Cp7w8-YPgg&ebxsLQ00$vXK>z>% literal 0 HcmV?d00001 diff --git a/doxygen/tabs.css b/doxygen/tabs.css new file mode 100644 index 0000000000..71c8a4704c --- /dev/null +++ b/doxygen/tabs.css @@ -0,0 +1 @@ +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.main-menu-btn{position:relative;display:inline-block;width:36px;height:36px;text-indent:36px;margin-left:8px;white-space:nowrap;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0)}.main-menu-btn-icon,.main-menu-btn-icon:before,.main-menu-btn-icon:after{position:absolute;top:50%;left:2px;height:2px;width:24px;background:var(--nav-menu-button-color);-webkit-transition:all .25s;transition:all .25s}.main-menu-btn-icon:before{content:'';top:-7px;left:0}.main-menu-btn-icon:after{content:'';top:7px;left:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon{height:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:before{top:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:after{top:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#main-menu-state{position:absolute;width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden;clip:rect(1px,1px,1px,1px)}#main-menu-state:not(:checked) ~ #main-menu{display:none}#main-menu-state:checked ~ #main-menu{display:block}@media(min-width:768px){.main-menu-btn{position:absolute;top:-99999px}#main-menu-state:not(:checked) ~ #main-menu{display:block}}.sm-dox{background-image:var(--nav-gradient-image)}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:var(--font-family-nav);font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:var(--nav-text-normal-shadow);color:var(--nav-text-normal-color);outline:0}.sm-dox a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:var(--nav-menu-toggle-color);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a span.sub-arrow:before{display:block;content:'+'}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:var(--nav-menu-background-color)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:var(--nav-menu-background-color);background-image:none}.sm-dox ul a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:var(--nav-gradient-image);line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:var(--nav-text-normal-color) transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:var(--nav-separator-image);background-repeat:no-repeat;background-position:right;-moz-border-radius:0 !important;-webkit-border-radius:0;border-radius:0 !important}.sm-dox a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox a:hover span.sub-arrow{border-color:var(--nav-text-hover-color) transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent var(--nav-menu-background-color) transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:var(--nav-menu-background-color);-moz-border-radius:5px !important;-webkit-border-radius:5px;border-radius:5px !important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent var(--nav-menu-foreground-color);border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:var(--nav-menu-foreground-color);background-image:none;border:0 !important;color:var(--nav-menu-foreground-color);background-image:none}.sm-dox ul a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent var(--nav-text-hover-color)}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:var(--nav-menu-background-color);height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent var(--nav-menu-foreground-color) transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:var(--nav-menu-foreground-color) transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:var(--nav-gradient-image)}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:var(--nav-menu-background-color)}} \ No newline at end of file diff --git a/doxygen/transpose_8hpp_source.html b/doxygen/transpose_8hpp_source.html new file mode 100644 index 0000000000..5ee3c779f6 --- /dev/null +++ b/doxygen/transpose_8hpp_source.html @@ -0,0 +1,355 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/algorithms/transpose.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    transpose.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <dr/detail/mdspan_shim.hpp>
    +
    8#include <dr/detail/ranges_shim.hpp>
    +
    9#include <dr/mp/allocator.hpp>
    +
    10#include <dr/mp/containers/distributed_mdarray.hpp>
    +
    11
    +
    12namespace dr::mp::__detail {
    +
    13
    +
    14template <typename T> class tmp_buffer {
    +
    15public:
    +
    16 tmp_buffer(std::size_t size, auto &&candidate) {
    +
    17 // Try to use the candidate for storage
    +
    18 data_ = candidate.mdspan().data_handle();
    +
    19 size_ = size;
    +
    20 allocated_data_ = nullptr;
    +
    21
    +
    22 // Allocate a temporary buffer if it is too small
    +
    23 if (size_ > candidate.reserved()) {
    +
    24 dr::drlog.debug(
    +
    25 dr::logger::transpose,
    +
    26 "Allocating a temporary buffer requested size {} candidate size {}\n",
    +
    27 size, candidate.reserved());
    +
    28 allocated_data_ = __detail::allocator<T>().allocate(size_);
    +
    29 data_ = allocated_data_;
    +
    30 }
    +
    31 assert(data_ != nullptr);
    +
    32 }
    +
    33
    +
    34 T *data() { return data_; }
    +
    35
    +
    36 ~tmp_buffer() {
    +
    37 // release temporary storage
    +
    38 if (allocated_data_) {
    +
    39 __detail::allocator<T>().deallocate(allocated_data_, size_);
    +
    40 allocated_data_ = nullptr;
    +
    41 }
    +
    42 }
    +
    43
    +
    44private:
    +
    45 T *data_;
    +
    46 T *allocated_data_ = nullptr;
    +
    47 std::size_t size_;
    +
    48};
    +
    49
    +
    50template <dr::distributed_mdspan_range MR1, dr::distributed_mdspan_range MR2>
    +
    51void transpose2D(MR1 &&src, MR2 &&dst, auto sm, auto dm) {
    +
    52 auto comm = default_comm();
    +
    53
    +
    54 using T = rng::range_value_t<MR1>;
    +
    55
    +
    56 using index_type = dr::__detail::dr_extents<2>;
    +
    57
    +
    58 // swap dimensions of the src to create the dst
    +
    59 assert(sm.extent(0) == dm.extent(1) && sm.extent(1) == dm.extent(0));
    +
    60
    +
    61 auto src_tile = src.grid()(comm.rank(), 0);
    +
    62 auto dst_tile = dst.grid()(comm.rank(), 0);
    +
    63
    +
    64 if (comm.size() == 1) {
    +
    65 dr::drlog.debug(dr::logger::transpose, "direct transpose on single rank\n");
    +
    66 auto sm = src_tile.mdspan();
    +
    67 auto dm = dst_tile.mdspan();
    +
    68 dr::__detail::mdtranspose<decltype(sm), 1, 0> src_tile_t(sm);
    +
    69 dr::__detail::mdspan_copy(src_tile_t, dm).wait();
    +
    70
    +
    71 } else {
    +
    72 // Divide src tile into sub-tiles by taking vertical slices, each
    +
    73 // sub-tile is sent to a different rank. The sub-tile is transposed
    +
    74 // so the number of columns must match the number of rows in the
    +
    75 // dst tile
    +
    76
    +
    77 // The alltoall assumes all the ranks have equal size data. The
    +
    78 // last rank may hold less data, but the actual storage size is
    +
    79 // uniform.
    +
    80 std::size_t sub_tile_size = src.grid()(0, 0).mdspan().extent(0) *
    +
    81 dst.grid()(0, 0).mdspan().extent(0);
    +
    82 std::size_t sub_tiles_size = sub_tile_size * comm.size();
    +
    83 dr::drlog.debug(dr::logger::transpose, "sub_tile_size: {}x{} total: {}\n",
    +
    84 src.grid()(0, 0).mdspan().extent(0),
    +
    85 dst.grid()(0, 0).mdspan().extent(0), sub_tile_size);
    +
    86
    +
    87 // create a send buffer. try to reuse destination for storage
    +
    88 __detail::tmp_buffer<T> send_buffer(sub_tiles_size, dst_tile);
    +
    89 T *buffer = send_buffer.data();
    +
    90
    +
    91 std::vector<dr::__detail::event> pack_events;
    +
    92 index_type start({0, 0}), end({src_tile.mdspan().extent(0), 0});
    +
    93 for (std::size_t i = 0; i < dst.grid().extent(0); i++) {
    +
    94 auto num_cols = dst.grid()(i, 0).mdspan().extent(0);
    +
    95
    +
    96 end[1] = start[1] + num_cols;
    +
    97 dr::drlog.debug(dr::logger::transpose, "Packing start: {}, end: {}\n",
    +
    98 start, end);
    +
    99 auto sub_tile =
    +
    100 dr::__detail::make_submdspan(src_tile.mdspan(), start, end);
    +
    101 dr::__detail::mdtranspose<decltype(sub_tile), 1, 0> sub_tile_t(sub_tile);
    +
    102 pack_events.push_back(dr::__detail::mdspan_copy(sub_tile_t, buffer));
    +
    103 buffer += sub_tile_size;
    +
    104 start[1] += num_cols;
    +
    105 }
    +
    106 rng::for_each(pack_events, [](auto e) { e.wait(); });
    +
    107
    +
    108 // We have packed the src into the send_buffer and no longer need
    +
    109 // it. Try to reuse its space for the receive buffer
    +
    110 __detail::tmp_buffer<T> receive_buffer(sub_tiles_size, src_tile);
    +
    111 buffer = receive_buffer.data();
    +
    112 comm.alltoall(send_buffer.data(), receive_buffer.data(), sub_tile_size);
    +
    113
    +
    114 std::vector<dr::__detail::event> unpack_events;
    +
    115 start = {0, 0};
    +
    116 end = {dst_tile.mdspan().extent(0), 0};
    +
    117 for (std::size_t i = 0; i < src.grid().extent(0); i++) {
    +
    118 auto num_cols = src.grid()(i, 0).mdspan().extent(0);
    +
    119
    +
    120 end[1] = start[1] + num_cols;
    +
    121 dr::drlog.debug(dr::logger::transpose, "Unpacking start: {}, end: {}\n",
    +
    122 start, end);
    +
    123 auto sub_tile =
    +
    124 dr::__detail::make_submdspan(dst_tile.mdspan(), start, end);
    +
    125 unpack_events.push_back(dr::__detail::mdspan_copy(buffer, sub_tile));
    +
    126 buffer += sub_tile_size;
    +
    127 start[1] += num_cols;
    +
    128 }
    +
    129 rng::for_each(unpack_events, [](auto e) { e.wait(); });
    +
    130 }
    +
    131}
    +
    132
    + +
    134 std::size_t... Is>
    +
    135void transpose3D_slab(MR1 &&src, MR2 &&dst, auto sm, auto dm) {
    +
    136 auto comm = default_comm();
    +
    137
    +
    138 using T = rng::range_value_t<MR1>;
    +
    139
    +
    140 using index_type = dr::__detail::dr_extents<3>;
    +
    141 // 3d mdspan
    +
    142 // The transpose is needed to make the first dimension contiguous.
    +
    143 dr::drlog.debug(dr::logger::transpose,
    +
    144 "transpose src: [{}, {}, {}] dst: [{}, {}, {}]\n",
    +
    145 sm.extent(0), sm.extent(1), sm.extent(2), dm.extent(0),
    +
    146 dm.extent(1), dm.extent(2));
    +
    147
    +
    148 constexpr std::array<std::size_t, 3> from_transposed{Is...};
    +
    149
    +
    150 assert(sm.extent(0) == dm.extent(from_transposed[0]) &&
    +
    151 sm.extent(1) == dm.extent(from_transposed[1]) &&
    +
    152 sm.extent(2) == dm.extent(from_transposed[2]));
    +
    153
    +
    154 // i,j,k -> j,k,i : {2,0,1}
    +
    155 std::size_t mask_p = 1, mask_u = 2;
    +
    156 if (from_transposed[0] == 1) {
    +
    157 // i,j,k -> k,i,j : {1,2,0}
    +
    158 mask_p = 2;
    +
    159 mask_u = 1;
    +
    160 }
    +
    161
    +
    162 auto origin_dst_tile = dst.grid()(0, 0, 0).mdspan();
    +
    163 auto origin_src_tile = src.grid()(0, 0, 0).mdspan();
    +
    164 std::size_t sub_tile_size = origin_src_tile.extent(0) *
    +
    165 origin_dst_tile.extent(0) *
    +
    166 origin_dst_tile.extent(mask_p);
    +
    167
    +
    168 std::size_t sub_tiles_size = sub_tile_size * comm.size();
    +
    169
    +
    170 auto src_tile = src.grid()(comm.rank(), 0, 0);
    +
    171 auto dst_tile = dst.grid()(comm.rank(), 0, 0);
    +
    172
    +
    173 if (comm.size() == 1) {
    +
    174 dr::drlog.debug(dr::logger::transpose, "direct transpose on single rank\n");
    +
    175 auto sm = src_tile.mdspan();
    +
    176 auto dm = dst_tile.mdspan();
    +
    177 dr::__detail::mdtranspose<decltype(sm), Is...> src_tile_t(sm);
    +
    178 dr::__detail::mdspan_copy(src_tile_t, dm).wait();
    +
    179 } else {
    +
    180
    +
    181 // create a send buffer. try to reuse destination for storage
    +
    182 __detail::tmp_buffer<T> send_buffer(sub_tiles_size, dst_tile);
    +
    183
    +
    184 T *buffer = send_buffer.data();
    +
    185
    +
    186 std::vector<dr::__detail::event> pack_events;
    +
    187 index_type start({0, 0, 0}),
    +
    188 end({src_tile.mdspan().extent(0), src_tile.mdspan().extent(1),
    +
    189 src_tile.mdspan().extent(2)});
    +
    190
    +
    191 for (std::size_t i = 0; i < dst.grid().extent(0); i++) {
    +
    192 auto num_cols = dst.grid()(i, 0, 0).mdspan().extent(0);
    +
    193 end[mask_p] = start[mask_p] + num_cols;
    +
    194
    +
    195 dr::drlog.debug(dr::logger::transpose, "Packing start: {}, end: {}\n",
    +
    196 start, end);
    +
    197 auto sub_tile =
    +
    198 dr::__detail::make_submdspan(src_tile.mdspan(), start, end);
    +
    199 dr::__detail::mdtranspose<decltype(sub_tile), Is...> sub_tile_t(sub_tile);
    +
    200
    +
    201 pack_events.push_back(dr::__detail::mdspan_copy(sub_tile_t, buffer));
    +
    202 buffer += sub_tile_size;
    +
    203 start[mask_p] += num_cols;
    +
    204 }
    +
    205
    +
    206 rng::for_each(pack_events, [](auto e) { e.wait(); });
    +
    207
    +
    208 __detail::tmp_buffer<T> receive_buffer(sub_tiles_size, src_tile);
    +
    209 buffer = receive_buffer.data();
    +
    210 comm.alltoall(send_buffer.data(), receive_buffer.data(), sub_tile_size);
    +
    211
    +
    212 std::vector<dr::__detail::event> unpack_events;
    +
    213 start = {0, 0, 0};
    +
    214 end = {dst_tile.mdspan().extent(0), dst_tile.mdspan().extent(1),
    +
    215 dst_tile.mdspan().extent(2)};
    +
    216 for (std::size_t i = 0; i < src.grid().extent(0); i++) {
    +
    217 auto num_cols = src.grid()(i, 0, 0).mdspan().extent(0);
    +
    218
    +
    219 end[mask_u] = start[mask_u] + num_cols;
    +
    220 dr::drlog.debug(dr::logger::transpose, "Unpacking start: {}, end: {}\n",
    +
    221 start, end);
    +
    222 auto sub_tile =
    +
    223 dr::__detail::make_submdspan(dst_tile.mdspan(), start, end);
    +
    224 unpack_events.push_back(dr::__detail::mdspan_copy(buffer, sub_tile));
    +
    225 buffer += sub_tile_size;
    +
    226 start[mask_u] += num_cols;
    +
    227 }
    +
    228 rng::for_each(unpack_events, [](auto e) { e.wait(); });
    +
    229 }
    +
    230}
    +
    231
    +
    232}; // namespace dr::mp::__detail
    +
    233
    +
    234namespace dr::mp {
    +
    235
    +
    236// Transpose mdspan_view. The src is used for temporary storage and is
    +
    237// undefined after the transpose completes.
    +
    238template <dr::distributed_mdspan_range MR1, dr::distributed_mdspan_range MR2>
    +
    239void transpose(MR1 &&src, MR2 &&dst, bool forward = true) {
    +
    240 constexpr std::size_t rank1 = std::remove_cvref_t<MR1>::rank();
    +
    241 constexpr std::size_t rank2 = std::remove_cvref_t<MR2>::rank();
    +
    242 static_assert(rank1 == rank2);
    +
    243
    +
    244 // Data decomposition on leading dimension only
    +
    245 for (std::size_t i = 1; i < rank1; i++) {
    +
    246 assert(src.grid().extent(i) == 1);
    +
    247 }
    +
    248
    +
    249 auto sm = src.mdspan();
    +
    250 auto dm = dst.mdspan();
    +
    251
    +
    252 if constexpr (rank1 == 2) {
    +
    253 __detail::transpose2D(src, dst, sm, dm);
    +
    254 } else if constexpr (rank1 == 3) {
    +
    255 if (forward) {
    +
    256 __detail::transpose3D_slab<MR1, MR2, 2, 0, 1>(src, dst, sm, dm);
    +
    257 } else {
    +
    258 __detail::transpose3D_slab<MR1, MR2, 1, 2, 0>(src, dst, sm, dm);
    +
    259 }
    +
    260 } else {
    +
    261 assert(false);
    +
    262 }
    +
    263 barrier();
    +
    264}
    +
    265
    +
    266} // namespace dr::mp
    +
    Definition: mdspan_utils.hpp:214
    +
    Definition: allocator.hpp:11
    +
    Definition: transpose.hpp:14
    +
    Definition: mdspan_utils.hpp:332
    +
    + + + + diff --git a/doxygen/tuple__utils_8hpp_source.html b/doxygen/tuple__utils_8hpp_source.html new file mode 100644 index 0000000000..090c84ec0b --- /dev/null +++ b/doxygen/tuple__utils_8hpp_source.html @@ -0,0 +1,113 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/detail/tuple_utils.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    tuple_utils.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7namespace dr::__detail {
    +
    8
    +
    9auto tuple_transform(auto tuple, auto op) {
    +
    10 auto transform = [op](auto &&...items) {
    +
    11 return std::make_tuple(op(items)...);
    +
    12 };
    +
    13 return std::apply(transform, tuple);
    +
    14}
    +
    15
    +
    16auto tie_transform(auto tuple, auto op) {
    +
    17 auto transform = [op]<typename... Items>(Items &&...items) {
    +
    18 return std::tie(op(std::forward<Items>(items))...);
    +
    19 };
    +
    20 return std::apply(transform, tuple);
    +
    21}
    +
    22
    +
    23auto tuple_foreach(auto tuple, auto op) {
    +
    24 auto transform = [op](auto... items) { (op(items), ...); };
    +
    25 std::apply(transform, tuple);
    +
    26}
    +
    27
    +
    28} // namespace dr::__detail
    +
    + + + + diff --git a/doxygen/util_8hpp_source.html b/doxygen/util_8hpp_source.html new file mode 100644 index 0000000000..64638dd023 --- /dev/null +++ b/doxygen/util_8hpp_source.html @@ -0,0 +1,357 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/util.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    util.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <iostream>
    +
    8#include <omp.h>
    +
    9#include <sycl/sycl.hpp>
    +
    10
    +
    11namespace dr::sp {
    +
    12
    +
    13template <typename Selector> sycl::device select_device(Selector &&selector) {
    +
    14 sycl::device d;
    +
    15
    +
    16 try {
    +
    17 d = sycl::device(std::forward<Selector>(selector));
    +
    18 std::cout << "Running on device \""
    +
    19 << d.get_info<sycl::info::device::name>() << "\"" << std::endl;
    +
    20 } catch (sycl::exception const &e) {
    +
    21 std::cout << "Cannot select an accelerator\n" << e.what() << "\n";
    +
    22 std::cout << "Using a CPU device\n";
    +
    23 d = sycl::device(sycl::cpu_selector_v);
    +
    24 }
    +
    25 return d;
    +
    26}
    +
    27
    +
    28inline void list_devices() {
    +
    29 auto platforms = sycl::platform::get_platforms();
    +
    30
    +
    31 for (auto &platform : platforms) {
    +
    32 std::cout << "Platform: " << platform.get_info<sycl::info::platform::name>()
    +
    33 << std::endl;
    +
    34
    +
    35 auto devices = platform.get_devices();
    +
    36 for (auto &device : devices) {
    +
    37 std::cout << " Device: " << device.get_info<sycl::info::device::name>()
    +
    38 << std::endl;
    +
    39 }
    +
    40 }
    +
    41}
    +
    42
    +
    43inline void print_device_details(std::span<sycl::device> devices) {
    +
    44 std::size_t device_id = 0;
    +
    45 for (auto &&device : devices) {
    +
    46 std::cout << "Device " << device_id << ": "
    +
    47 << device.get_info<sycl::info::device::name>() << std::endl;
    +
    48 device_id++;
    +
    49 }
    +
    50}
    +
    51
    +
    52template <typename Selector> void list_devices(Selector &&selector) {
    +
    53 sycl::platform p(std::forward<Selector>(selector));
    +
    54 auto devices = p.get_devices();
    +
    55
    +
    56 printf("--Platform Info-----------------\n");
    +
    57
    +
    58 printf("Platform %s has %lu root devices.\n",
    +
    59 p.get_info<sycl::info::platform::name>().c_str(), devices.size());
    +
    60
    +
    61 for (std::size_t i = 0; i < devices.size(); i++) {
    +
    62 auto &&device = devices[i];
    +
    63
    +
    64 printf(" %lu %s\n", i,
    +
    65 device.get_info<sycl::info::device::name>().c_str());
    +
    66
    +
    67 auto subdevices = device.create_sub_devices<
    +
    68 sycl::info::partition_property::partition_by_affinity_domain>(
    +
    69 sycl::info::partition_affinity_domain::numa);
    +
    70
    +
    71 printf(" Subdevices:\n");
    +
    72 for (std::size_t j = 0; j < subdevices.size(); j++) {
    +
    73 auto &&subdevice = subdevices[j];
    +
    74 printf(" %lu.%lu %s\n", i, j,
    +
    75 subdevice.get_info<sycl::info::device::name>().c_str());
    +
    76 }
    +
    77 }
    +
    78
    +
    79 printf("--------------------------------\n");
    +
    80}
    +
    81
    +
    82inline std::vector<sycl::device>
    +
    83trim_devices(const std::vector<sycl::device> &devices, std::size_t n_devices) {
    +
    84 std::vector<sycl::device> trimmed_devices = devices;
    +
    85
    +
    86 if (n_devices < devices.size()) {
    +
    87 trimmed_devices.resize(n_devices);
    +
    88 }
    +
    89 return trimmed_devices;
    +
    90}
    +
    91
    +
    92template <typename Selector>
    +
    93std::vector<sycl::device> get_numa_devices_impl_(Selector &&selector) {
    +
    94 std::vector<sycl::device> devices;
    +
    95
    +
    96 sycl::platform p(std::forward<Selector>(selector));
    +
    97 auto root_devices = p.get_devices();
    +
    98
    +
    99 for (auto &&root_device : root_devices) {
    +
    100 auto subdevices = root_device.create_sub_devices<
    +
    101 sycl::info::partition_property::partition_by_affinity_domain>(
    +
    102 sycl::info::partition_affinity_domain::numa);
    +
    103
    +
    104 for (auto &&subdevice : subdevices) {
    +
    105 devices.push_back(subdevice);
    +
    106 }
    +
    107 }
    +
    108
    +
    109 return devices;
    +
    110}
    +
    111
    +
    112template <typename Selector>
    +
    113std::vector<sycl::device> get_devices(Selector &&selector) {
    +
    114 sycl::platform p(std::forward<Selector>(selector));
    +
    115 return p.get_devices();
    +
    116}
    +
    117
    +
    118template <typename Selector>
    +
    119std::vector<sycl::device> get_numa_devices(Selector &&selector) {
    +
    120#ifdef USE_OMP_INTEROP
    +
    121 // possible to move ompt_queues_ sp::__detail as a global object
    +
    122 static std::vector<sycl::queue *> ompt_queues_;
    +
    123 if (ompt_queues_.empty()) {
    +
    124 int num_devices = omp_get_num_devices();
    +
    125 for (int d = 0; d < num_devices; ++d) {
    +
    126 omp_interop_t interop = nullptr;
    +
    127#pragma omp interop device(d) init(prefer_type("sycl"), targetsync : interop)
    +
    128 int result;
    +
    129 sycl::queue *omp_queue = static_cast<sycl::queue *>(
    +
    130 omp_get_interop_ptr(interop, omp_ipr_targetsync, &result));
    +
    131 if (result != omp_irc_success)
    +
    132 throw std::runtime_error(
    +
    133 "Fail to obtain sycl::queue by openmp::interop");
    +
    134 ompt_queues_.emplace_back(omp_queue);
    +
    135 }
    +
    136 }
    +
    137 std::vector<sycl::device> devices;
    +
    138 for (auto &&q : ompt_queues_) {
    +
    139 devices.push_back(q->get_device());
    +
    140 }
    +
    141 return devices;
    +
    142#else
    +
    143 try {
    +
    144 return get_numa_devices_impl_(std::forward<Selector>(selector));
    +
    145 } catch (sycl::exception const &e) {
    +
    146 if (e.code() == sycl::errc::feature_not_supported) {
    +
    147 std::cerr << "NUMA partitioning not supported, returning root devices..."
    +
    148 << std::endl;
    +
    149 return get_devices(std::forward<Selector>(selector));
    +
    150 } else {
    +
    151 throw;
    +
    152 }
    +
    153 }
    +
    154#endif
    +
    155}
    +
    156
    +
    157// Return exactly `n` devices obtained using the selector `selector`.
    +
    158// May duplicate devices
    +
    159template <typename Selector>
    +
    160std::vector<sycl::device> get_duplicated_devices(Selector &&selector,
    +
    161 std::size_t n) {
    +
    162 auto devices = get_numa_devices(std::forward<Selector>(selector));
    +
    163
    +
    164 if (devices.size() >= n) {
    +
    165 return std::vector<sycl::device>(devices.begin(), devices.begin() + n);
    +
    166 } else {
    +
    167 std::size_t i = 0;
    +
    168 while (devices.size() < n) {
    +
    169 auto d = devices[i++];
    +
    170 devices.push_back(d);
    +
    171 }
    +
    172 return devices;
    +
    173 }
    +
    174}
    +
    175
    +
    176template <typename Range> void print_range(Range &&r, std::string label = "") {
    +
    177 std::size_t indent = 1;
    +
    178
    +
    179 if (label != "") {
    +
    180 std::cout << "\"" << label << "\": ";
    +
    181 indent += label.size() + 4;
    +
    182 }
    +
    183
    +
    184 std::string indent_whitespace(indent, ' ');
    +
    185
    +
    186 std::cout << "[";
    +
    187 std::size_t columns = 10;
    +
    188 std::size_t count = 1;
    +
    189 for (auto iter = r.begin(); iter != r.end(); ++iter) {
    +
    190 std::cout << static_cast<rng::range_value_t<Range>>(*iter);
    +
    191
    +
    192 auto next = iter;
    +
    193 ++next;
    +
    194 if (next != r.end()) {
    +
    195 std::cout << ", ";
    +
    196 if (count % columns == 0) {
    +
    197 std::cout << "\n" << indent_whitespace;
    +
    198 }
    +
    199 }
    +
    200 ++count;
    +
    201 }
    +
    202 std::cout << "]" << std::endl;
    +
    203}
    +
    204
    +
    205template <typename Matrix>
    +
    206void print_matrix(Matrix &&m, std::string label = "") {
    +
    207 std::cout << m.shape()[0] << " x " << m.shape()[1] << " matrix with "
    +
    208 << m.size() << " stored values";
    +
    209 if (label != "") {
    +
    210 std::cout << " \"" << label << "\"";
    +
    211 }
    +
    212 std::cout << std::endl;
    +
    213
    +
    214 for (auto &&tuple : m) {
    +
    215 auto &&[index, value] = tuple;
    +
    216 auto &&[i, j] = index;
    +
    217
    +
    218 std::cout << "(" << i << ", " << j << "): " << value << std::endl;
    +
    219 }
    +
    220}
    +
    221
    +
    222template <typename R> void print_range_details(R &&r, std::string label = "") {
    +
    223 if (label != "") {
    +
    224 std::cout << "\"" << label << "\" ";
    +
    225 }
    +
    226
    +
    227 std::cout << "distributed range with " << rng::size(dr::ranges::segments(r))
    +
    228 << " segments." << std::endl;
    +
    229
    +
    230 std::size_t idx = 0;
    +
    231 for (auto &&segment : dr::ranges::segments(r)) {
    +
    232 std::cout << "Seg " << idx++ << ", size " << segment.size() << " (rank "
    +
    233 << dr::ranges::rank(segment) << ")" << std::endl;
    +
    234 }
    +
    235}
    +
    236
    +
    237template <dr::distributed_range R>
    +
    238void range_details(R &&r, std::size_t width = 80) {
    +
    239 std::size_t size = rng::size(r);
    +
    240
    +
    241 for (auto &&[idx, segment] :
    +
    242 dr::__detail::enumerate(dr::ranges::segments(r))) {
    +
    243 std::size_t local_size = rng::size(segment);
    +
    244
    +
    245 double percent = double(local_size) / size;
    +
    246
    +
    247 std::size_t num_chars = percent * width;
    +
    248 num_chars = std::max(num_chars, std::size_t(3));
    +
    249
    +
    250 std::size_t whitespace = num_chars - 3;
    +
    251
    +
    252 std::size_t initial_whitespace = whitespace / 2;
    +
    253 std::size_t after_whitespace = whitespace - initial_whitespace;
    +
    254
    +
    255 std::cout << "[" << std::string(initial_whitespace, ' ')
    +
    256 << dr::ranges::rank(segment) << std::string(after_whitespace, ' ')
    +
    257 << "]";
    +
    258 }
    +
    259 std::cout << std::endl;
    +
    260}
    +
    261
    +
    262namespace __detail {
    +
    263
    +
    264template <typename T>
    +
    265concept sycl_device_selector = requires(T &t, const sycl::device &device) {
    +
    266 { t(device) } -> std::convertible_to<int>;
    +
    267};
    +
    268
    +
    269}
    +
    270
    +
    271} // namespace dr::sp
    + +
    + + + + diff --git a/doxygen/utils_8hpp_source.html b/doxygen/utils_8hpp_source.html new file mode 100644 index 0000000000..99bb58b0e0 --- /dev/null +++ b/doxygen/utils_8hpp_source.html @@ -0,0 +1,115 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/detail/utils.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    utils.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7namespace dr::__detail {
    +
    8
    +
    9inline std::size_t round_up(std::size_t n, std::size_t multiple) {
    +
    10 if (multiple == 0) {
    +
    11 return n;
    +
    12 }
    +
    13
    +
    14 int remainder = n % multiple;
    +
    15 if (remainder == 0) {
    +
    16 return n;
    +
    17 }
    +
    18
    +
    19 return n + multiple - remainder;
    +
    20}
    +
    21
    +
    22inline std::size_t partition_up(std::size_t n, std::size_t multiple) {
    +
    23 if (multiple == 0) {
    +
    24 return n;
    +
    25 }
    +
    26
    +
    27 return round_up(n, multiple) / multiple;
    +
    28}
    +
    29
    +
    30} // namespace dr::__detail
    +
    + + + + diff --git a/doxygen/vector_8hpp_source.html b/doxygen/vector_8hpp_source.html new file mode 100644 index 0000000000..6cda71ba62 --- /dev/null +++ b/doxygen/vector_8hpp_source.html @@ -0,0 +1,334 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/vector.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    vector.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <memory>
    +
    8
    +
    9namespace dr::sp {
    +
    10
    +
    11// TODO: deal properly with non-trivially destructible types
    +
    12// - constructors, destructors, assign
    +
    13
    +
    14template <typename T, typename Allocator = std::allocator<T>> class vector {
    +
    15public:
    +
    16 using value_type = T;
    +
    17 using allocator_type = Allocator;
    +
    18 using size_type = std::size_t;
    +
    19 using difference_type = std::ptrdiff_t;
    +
    20 using pointer = typename std::allocator_traits<allocator_type>::pointer;
    +
    21 using const_pointer =
    +
    22 typename std::allocator_traits<allocator_type>::const_pointer;
    +
    23 using reference = decltype(*std::declval<pointer>());
    +
    24 using const_reference = decltype(*std::declval<const_pointer>());
    +
    25 using iterator = pointer;
    +
    26 using const_iterator = const_pointer;
    +
    27
    +
    28 vector() noexcept {}
    +
    29 explicit vector(const Allocator &allocator) noexcept
    +
    30 : allocator_(allocator) {}
    +
    31
    +
    32 explicit vector(size_type count, const T &value,
    +
    33 const Allocator &alloc = Allocator())
    +
    34 : allocator_(alloc) {
    +
    35 change_capacity_impl_(count);
    +
    36 using namespace std;
    +
    37 fill(data(), data() + size(), value);
    +
    38 }
    +
    39
    +
    40 explicit vector(size_type count, const Allocator &alloc = Allocator())
    +
    41 : allocator_(alloc) {
    +
    42 change_capacity_impl_(count);
    +
    43 using namespace std;
    +
    44 fill(data(), data() + size(), T{});
    +
    45 }
    +
    46
    +
    47 template <std::forward_iterator Iter>
    +
    48 constexpr vector(Iter first, Iter last, const Allocator &alloc = Allocator())
    +
    49 : allocator_(alloc) {
    +
    50 change_capacity_impl_(rng::distance(first, last));
    +
    51 using namespace std;
    +
    52 copy(first, last, begin());
    +
    53 }
    +
    54
    +
    55 vector(const vector &other) : allocator_(other.get_allocator()) {
    +
    56 change_capacity_impl_(other.size());
    +
    57 using namespace std;
    +
    58 copy(other.begin(), other.end(), begin());
    +
    59 }
    +
    60
    +
    61 vector(const vector &other, const Allocator &alloc) : allocator_(alloc) {
    +
    62 change_capacity_impl_(other.size());
    +
    63 using namespace std;
    +
    64 copy(other.begin(), other.end(), begin());
    +
    65 }
    +
    66
    +
    67 vector(vector &&other) noexcept
    +
    68 requires(std::is_trivially_move_constructible_v<T>)
    +
    69 : allocator_(other.get_allocator()) {
    +
    70 data_ = other.data_;
    +
    71 other.data_ = nullptr;
    +
    72 size_ = other.size_;
    +
    73 other.size_ = 0;
    +
    74 capacity_ = other.capacity_;
    +
    75 other.capacity_ = 0;
    +
    76 }
    +
    77
    +
    78 vector(vector &&other, const Allocator &alloc) noexcept
    +
    79 requires(std::is_trivially_move_constructible_v<T>)
    +
    80 : allocator_(alloc) {
    +
    81 data_ = other.data_;
    +
    82 other.data_ = nullptr;
    +
    83 size_ = other.size_;
    +
    84 other.size_ = 0;
    +
    85 capacity_ = other.capacity_;
    +
    86 other.capacity_ = 0;
    +
    87 }
    +
    88
    +
    89 vector(std::initializer_list<T> init, const Allocator &alloc = Allocator())
    +
    90 : allocator_(alloc) {
    +
    91 change_capacity_impl_(init.size());
    +
    92 using namespace std;
    +
    93 copy(init.begin(), init.end(), begin());
    +
    94 }
    +
    95
    +
    96 vector &operator=(const vector &other) {
    +
    97 assign(other.begin(), other.end());
    +
    98 return *this;
    +
    99 }
    +
    100
    +
    101 template <std::forward_iterator Iter> void assign(Iter first, Iter last) {
    +
    102 auto new_size = rng::distance(first, last);
    +
    103 reserve(new_size);
    +
    104 using namespace std;
    +
    105 copy(first, last, begin());
    +
    106 size_ = new_size;
    +
    107 }
    +
    108
    +
    109 ~vector() noexcept {
    +
    110 /*
    +
    111 for (auto iter = begin(); iter != end(); ++iter) {
    +
    112 std::allocator_traits<allocator_type>::destroy(allocator_, iter);
    +
    113 }
    +
    114 */
    +
    115 if (data() != nullptr) {
    +
    116 allocator_.deallocate(data(), capacity());
    +
    117 }
    +
    118 }
    +
    119
    +
    120 size_type size() const noexcept { return size_; }
    +
    121
    +
    122 bool empty() const noexcept { return size() == 0; }
    +
    123
    +
    124 size_type capacity() const noexcept { return capacity_; }
    +
    125
    +
    126 pointer data() noexcept { return data_; }
    +
    127
    +
    128 const_pointer data() const noexcept { return data_; }
    +
    129
    +
    130 allocator_type get_allocator() const noexcept { return allocator_; }
    +
    131
    +
    132 iterator begin() noexcept { return data_; }
    +
    133
    +
    134 iterator end() noexcept { return begin() + size(); }
    +
    135
    +
    136 const_iterator begin() const noexcept { return data_; }
    +
    137
    +
    138 const_iterator end() const noexcept { return begin() + size(); }
    +
    139
    +
    140 reference operator[](size_type pos) { return *(begin() + pos); }
    +
    141
    +
    142 const_reference operator[](size_type pos) const { return *(begin() + pos); }
    +
    143
    +
    144 void reserve(size_type new_cap) {
    +
    145 if (new_cap > capacity()) {
    +
    146 pointer new_data = get_allocator().allocate(new_cap);
    +
    147 using namespace std;
    +
    148 if (begin() != end()) {
    +
    149 using namespace std;
    +
    150 copy(begin(), end(), new_data);
    +
    151 }
    +
    152 if (data_ != nullptr) {
    +
    153 get_allocator().deallocate(data_, capacity());
    +
    154 }
    +
    155 data_ = new_data;
    +
    156 capacity_ = new_cap;
    +
    157 }
    +
    158 }
    +
    159
    +
    160 void push_back(const T &value) {
    +
    161 if (size() + 1 > capacity()) {
    +
    162 size_type new_capacity = next_highest_power_of_two_impl_(capacity());
    +
    163 reserve(new_capacity);
    +
    164 }
    +
    165
    +
    166 data()[size()] = value;
    +
    167 ++size_;
    +
    168 }
    +
    169
    +
    170 void push_back(T &&value) {
    +
    171 if (size() + 1 > capacity()) {
    +
    172 size_type new_capacity = next_highest_power_of_two_impl_(capacity());
    +
    173 reserve(new_capacity);
    +
    174 }
    +
    175
    +
    176 data()[size()] = std::move(value);
    +
    177 ++size_;
    +
    178 }
    +
    179
    +
    180 bool try_push_back(const T &value) {
    +
    181 if (size() + 1 <= capacity()) {
    +
    182 data()[size()] = value;
    +
    183 ++size_;
    +
    184 return true;
    +
    185 }
    +
    186 return false;
    +
    187 }
    +
    188
    +
    189 // TODO: properly construct/destruct
    +
    190 void resize(size_type count) {
    +
    191 if (count > capacity()) {
    +
    192 reserve(count);
    +
    193 }
    +
    194 if (count > size()) {
    +
    195 /*
    +
    196 for (std::size_t i = 0; i < count - size(); i++) {
    +
    197 end()[i] = T();
    +
    198 }
    +
    199 */
    +
    200 }
    +
    201 size_ = count;
    +
    202 }
    +
    203
    +
    204 void resize(size_type count, const value_type &value) {
    +
    205 if (count > capacity()) {
    +
    206 reserve(count);
    +
    207 }
    +
    208 if (count > size()) {
    +
    209 for (std::size_t i = 0; i < count - size(); i++) {
    +
    210 end()[i] = value;
    +
    211 }
    +
    212 }
    +
    213 size_ = count;
    +
    214 }
    +
    215
    +
    216private:
    +
    217 // For use only inside constructors and assignment operators
    +
    218 void change_capacity_impl_(size_type count) {
    +
    219 if (data_ != nullptr && capacity_ != count) {
    +
    220 allocator_.deallocate(data_, capacity());
    +
    221 }
    +
    222 size_ = capacity_ = count;
    +
    223 data_ = size_ ? allocator_.allocate(count) : nullptr;
    +
    224 }
    +
    225
    +
    226 // NOTE: algorithm copied from "Bit Twiddling Hacks"
    +
    227 // (Public domain)
    +
    228 constexpr size_type next_highest_power_of_two_impl_(size_type n) {
    +
    229 n--;
    +
    230 n |= n >> 1;
    +
    231 n |= n >> 2;
    +
    232 n |= n >> 4;
    +
    233 n |= n >> 8;
    +
    234 if constexpr (sizeof(size_type) > 2)
    +
    235 n |= n >> 16;
    +
    236 if constexpr (sizeof(size_type) > 4)
    +
    237 n |= n >> 32;
    +
    238 n++;
    +
    239 return n;
    +
    240 }
    +
    241
    +
    242 pointer data_ = nullptr;
    +
    243 size_type size_ = 0;
    +
    244 size_type capacity_ = 0;
    +
    245 allocator_type allocator_;
    +
    246};
    +
    247
    +
    248} // namespace dr::sp
    +
    Definition: vector.hpp:14
    +
    + + + + diff --git a/doxygen/view__detectors_8hpp_source.html b/doxygen/view__detectors_8hpp_source.html new file mode 100644 index 0000000000..4889ed7136 --- /dev/null +++ b/doxygen/view__detectors_8hpp_source.html @@ -0,0 +1,151 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/detail/view_detectors.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    view_detectors.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <type_traits>
    +
    8
    +
    9namespace dr {
    +
    10
    +
    11template <typename T> struct is_ref_view : std::false_type {};
    +
    12template <rng::range R>
    +
    13struct is_ref_view<rng::ref_view<R>> : std::true_type {};
    +
    14
    +
    15template <typename T> inline constexpr bool is_ref_view_v = is_ref_view<T>{};
    +
    16
    +
    17template <typename T> struct is_iota_view : std::false_type {};
    +
    18template <std::weakly_incrementable W>
    +
    19struct is_iota_view<rng::iota_view<W>> : std::true_type {};
    +
    20
    +
    21template <typename T> inline constexpr bool is_iota_view_v = is_iota_view<T>{};
    +
    22
    +
    23template <typename T> struct is_take_view : std::false_type {};
    +
    24template <typename T>
    +
    25struct is_take_view<rng::take_view<T>> : std::true_type {};
    +
    26
    +
    27template <typename T>
    +
    28inline constexpr bool is_take_view_v = is_take_view<T>::value;
    +
    29
    +
    30template <typename T> struct is_drop_view : std::false_type {};
    +
    31template <typename T>
    +
    32struct is_drop_view<rng::drop_view<T>> : std::true_type {};
    +
    33
    +
    34template <typename T>
    +
    35inline constexpr bool is_drop_view_v = is_drop_view<T>::value;
    +
    36
    +
    37template <typename T> struct is_subrange_view : std::false_type {};
    +
    38template <typename T>
    +
    39struct is_subrange_view<rng::subrange<T>> : std::true_type {};
    +
    40
    +
    41template <typename T>
    +
    42inline constexpr bool is_subrange_view_v = is_subrange_view<T>::value;
    +
    43
    +
    44template <typename T> struct is_sliding_view : std::false_type {};
    +
    45template <typename T>
    +
    46struct is_sliding_view<rng::sliding_view<T>> : std::true_type {};
    +
    47template <typename T>
    +
    48inline constexpr bool is_sliding_view_v =
    + +
    50
    +
    51template <typename T> struct is_zip_view : std::false_type {};
    +
    52
    +
    53template <typename... Views>
    +
    54struct is_zip_view<rng::zip_view<Views...>> : std::true_type {};
    +
    55
    +
    56template <typename T>
    +
    57inline constexpr bool is_zip_view_v = is_zip_view<T>::value;
    +
    58
    +
    59} // namespace dr
    +
    Definition: view_detectors.hpp:30
    +
    Definition: view_detectors.hpp:17
    +
    Definition: view_detectors.hpp:11
    +
    Definition: view_detectors.hpp:44
    +
    Definition: view_detectors.hpp:37
    +
    Definition: view_detectors.hpp:23
    +
    Definition: view_detectors.hpp:51
    +
    + + + + diff --git a/doxygen/views_2iota_8hpp_source.html b/doxygen/views_2iota_8hpp_source.html new file mode 100644 index 0000000000..e9d0775b8a --- /dev/null +++ b/doxygen/views_2iota_8hpp_source.html @@ -0,0 +1,113 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/views/iota.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    iota.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7namespace dr::views {
    +
    8
    +
    9//
    +
    10// range-v3 iota uses sentinels that are not the same type as the
    +
    11// iterator. A zip that uses an iota has the same issue. Make our own.
    +
    12//
    +
    13
    +
    14struct iota_fn_ {
    +
    15 template <std::integral W> auto operator()(W value) const {
    +
    16 return rng::views::iota(value, std::numeric_limits<W>::max());
    +
    17 }
    +
    18
    +
    19 template <std::integral W, std::integral Bound>
    +
    20 auto operator()(W value, Bound bound) const {
    +
    21 return rng::views::iota(value, W(bound));
    +
    22 }
    +
    23};
    +
    24
    +
    25inline constexpr auto iota = iota_fn_{};
    +
    26
    +
    27} // namespace dr::views
    +
    Definition: iota.hpp:14
    +
    + + + + diff --git a/doxygen/views_2transform_8hpp_source.html b/doxygen/views_2transform_8hpp_source.html new file mode 100644 index 0000000000..c4da816ecd --- /dev/null +++ b/doxygen/views_2transform_8hpp_source.html @@ -0,0 +1,300 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/views/transform.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    transform.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <concepts>
    +
    8#include <iterator>
    +
    9#include <type_traits>
    +
    10
    +
    11#include <dr/concepts/concepts.hpp>
    +
    12#include <dr/detail/ranges_shim.hpp>
    +
    13
    +
    14namespace dr {
    +
    15
    +
    16template <std::random_access_iterator Iter, std::copy_constructible F>
    + +
    18public:
    +
    19 using value_type = std::invoke_result_t<F, std::iter_value_t<Iter>>;
    +
    20 using difference_type = std::iter_difference_t<Iter>;
    + +
    22 using reference = value_type;
    +
    23
    +
    24 using pointer = iterator;
    +
    25
    +
    26 using iterator_category = std::random_access_iterator_tag;
    +
    27
    +
    28 transform_iterator(Iter iter, F fn) noexcept : iter_(iter) {}
    +
    29 transform_iterator() noexcept = default;
    +
    30 ~transform_iterator() noexcept = default;
    +
    31 transform_iterator(const transform_iterator &) noexcept = default;
    +
    32 transform_iterator &operator=(const transform_iterator &) noexcept = default;
    +
    33
    +
    34 bool operator==(const transform_iterator &other) const noexcept {
    +
    35 return iter_ == other.iter_;
    +
    36 }
    +
    37
    +
    38 bool operator!=(const transform_iterator &other) const noexcept {
    +
    39 return iter_ != other.iter_;
    +
    40 }
    +
    41
    +
    42 iterator operator+(difference_type offset) const noexcept {
    +
    43 return iterator(iter_ + offset, fn_);
    +
    44 }
    +
    45
    +
    46 iterator operator-(difference_type offset) const noexcept {
    +
    47 return iterator(iter_ - offset, fn_);
    +
    48 }
    +
    49
    +
    50 difference_type operator-(iterator other) const noexcept {
    +
    51 return iter_ - other.iter_;
    +
    52 }
    +
    53
    +
    54 bool operator<(iterator other) const noexcept { return iter_ < other.iter_; }
    +
    55
    +
    56 bool operator>(iterator other) const noexcept { return iter_ > iter_; }
    +
    57
    +
    58 bool operator<=(iterator other) const noexcept {
    +
    59 return iter_ <= other.iter_;
    +
    60 }
    +
    61
    +
    62 bool operator>=(iterator other) const noexcept {
    +
    63 return iter_ >= other.iter_;
    +
    64 }
    +
    65
    +
    66 iterator &operator++() noexcept {
    +
    67 ++iter_;
    +
    68 return *this;
    +
    69 }
    +
    70
    +
    71 iterator operator++(int) noexcept {
    +
    72 iterator other = *this;
    +
    73 ++(*this);
    +
    74 return other;
    +
    75 }
    +
    76
    +
    77 iterator &operator--() noexcept {
    +
    78 --iter_;
    +
    79 return *this;
    +
    80 }
    +
    81
    +
    82 iterator operator--(int) noexcept {
    +
    83 iterator other = *this;
    +
    84 --(*this);
    +
    85 return other;
    +
    86 }
    +
    87
    +
    88 iterator &operator+=(difference_type offset) noexcept {
    +
    89 iter_ += offset;
    +
    90 return *this;
    +
    91 }
    +
    92
    +
    93 iterator &operator-=(difference_type offset) noexcept {
    +
    94 iter_ -= offset;
    +
    95 return *this;
    +
    96 }
    +
    97
    +
    98 reference operator*() const noexcept { return fn_(*iter_); }
    +
    99
    +
    100 reference operator[](difference_type offset) const noexcept {
    +
    101 return *(*this + offset);
    +
    102 }
    +
    103
    +
    104 friend iterator operator+(difference_type n, iterator iter) {
    +
    105 return iter.iter_ + n;
    +
    106 }
    +
    107
    +
    108 auto local() const
    + +
    110 {
    +
    111 auto iter = dr::ranges::__detail::local(iter_);
    + +
    113 }
    +
    114
    +
    115private:
    +
    116 Iter iter_;
    +
    117 F fn_;
    +
    118};
    +
    119
    +
    120template <rng::random_access_range V, std::copy_constructible F>
    +
    121 requires(std::is_default_constructible_v<F>)
    +
    122class transform_view : public rng::view_interface<transform_view<V, F>> {
    +
    123public:
    +
    124 template <rng::viewable_range R>
    +
    125 transform_view(R &&r, F fn)
    +
    126 : base_(rng::views::all(std::forward<R>(r))), fn_(fn) {}
    +
    127
    +
    128 auto begin() const { return transform_iterator(rng::begin(base_), fn_); }
    +
    129
    +
    130 auto end() const { return transform_iterator(rng::end(base_), fn_); }
    +
    131
    +
    132 auto size() const
    +
    133 requires(rng::sized_range<V>)
    +
    134 {
    +
    135 return rng::size(base_);
    +
    136 }
    +
    137
    +
    138 auto segments() const
    + +
    140 {
    +
    141 auto fn = fn_;
    +
    142 return dr::ranges::segments(base_) |
    +
    143 rng::views::transform([fn]<typename T>(T &&segment) {
    +
    144 return transform_view<rng::views::all_t<decltype(segment)>, F>(
    +
    145 std::forward<T>(segment), fn);
    +
    146 });
    +
    147 }
    +
    148
    +
    149 auto rank() const
    +
    150 requires(dr::remote_range<V>)
    +
    151 {
    +
    152 return dr::ranges::rank(base_);
    +
    153 }
    +
    154
    +
    155 V base() const { return base_; }
    +
    156
    +
    157private:
    +
    158 V base_;
    +
    159 F fn_;
    +
    160};
    +
    161
    +
    162template <rng::viewable_range R, std::copy_constructible F>
    + +
    164
    +
    165namespace views {
    +
    166
    +
    167template <std::copy_constructible F> class transform_adapter_closure {
    +
    168public:
    +
    169 transform_adapter_closure(F fn) : fn_(fn) {}
    +
    170
    +
    171 template <rng::viewable_range R> auto operator()(R &&r) const {
    +
    172 return dr::transform_view(std::forward<R>(r), fn_);
    +
    173 }
    +
    174
    +
    175 template <rng::viewable_range R>
    +
    176 friend auto operator|(R &&r, const transform_adapter_closure &closure) {
    +
    177 return closure(std::forward<R>(r));
    +
    178 }
    +
    179
    +
    180private:
    +
    181 F fn_;
    +
    182};
    +
    183
    + +
    185public:
    +
    186 template <rng::viewable_range R, std::copy_constructible F>
    +
    187 auto operator()(R &&r, F &&f) const {
    +
    188 return transform_adapter_closure(std::forward<F>(f))(std::forward<R>(r));
    +
    189 }
    +
    190
    +
    191 template <std::copy_constructible F> auto operator()(F &&fn) const {
    +
    192 return transform_adapter_closure(std::forward<F>(fn));
    +
    193 }
    +
    194};
    +
    195
    +
    196inline constexpr auto transform = transform_fn_{};
    +
    197} // namespace views
    +
    198
    +
    199} // namespace dr
    +
    200
    +
    201#if !defined(DR_SPEC)
    +
    202
    +
    203// Needed to satisfy rng::viewable_range
    +
    204template <rng::random_access_range V, std::copy_constructible F>
    +
    205inline constexpr bool rng::enable_borrowed_range<dr::transform_view<V, F>> =
    +
    206 true;
    +
    207
    +
    208#endif
    +
    Definition: transform.hpp:17
    +
    Definition: transform.hpp:122
    +
    Definition: transform.hpp:167
    +
    Definition: transform.hpp:184
    +
    Definition: concepts.hpp:20
    +
    Definition: ranges.hpp:242
    +
    Definition: concepts.hpp:16
    +
    + + + + diff --git a/doxygen/views_2views_8hpp_source.html b/doxygen/views_2views_8hpp_source.html new file mode 100644 index 0000000000..a69100fc8c --- /dev/null +++ b/doxygen/views_2views_8hpp_source.html @@ -0,0 +1,104 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/views/views.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    views.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <dr/concepts/concepts.hpp>
    +
    8#include <dr/views/transform.hpp>
    +
    9
    +
    10namespace dr {
    +
    11
    +
    12// returns range: [(rank, element) ...]
    +
    13auto ranked_view(const dr::distributed_range auto &r) {
    +
    14 auto rank = [](auto &&v) { return dr::ranges::rank(&v); };
    +
    15 return rng::views::zip(rng::views::transform(r, rank), r);
    +
    16}
    +
    17
    +
    18} // namespace dr
    +
    Definition: concepts.hpp:20
    +
    + + + + diff --git a/doxygen/zip_8hpp_source.html b/doxygen/zip_8hpp_source.html new file mode 100644 index 0000000000..f4746acd4b --- /dev/null +++ b/doxygen/zip_8hpp_source.html @@ -0,0 +1,366 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/mp/views/zip.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    zip.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <cstddef>
    +
    8#include <iterator>
    +
    9#include <tuple>
    +
    10#include <type_traits>
    +
    11#include <utility>
    +
    12
    +
    13#include <dr/detail/ranges_shim.hpp>
    +
    14#include <dr/mp/alignment.hpp>
    +
    15#include <dr/mp/views/segmented.hpp>
    +
    16
    +
    17namespace dr::mp::__detail {
    +
    18
    +
    19template <typename R>
    +
    20concept zipable = rng::random_access_range<R> && rng::common_range<R>;
    +
    21
    +
    22} // namespace dr::mp::__detail
    +
    23
    +
    24namespace dr::mp {
    +
    25
    +
    26template <__detail::zipable... Rs> class zip_view;
    +
    27
    +
    28namespace views {
    +
    29
    +
    30template <typename... Rs> auto zip(Rs &&...rs) {
    +
    31 return zip_view(std::forward<Rs>(rs)...);
    +
    32}
    +
    33
    +
    34} // namespace views
    +
    35
    +
    36namespace __detail {
    +
    37
    +
    38template <typename T>
    + + +
    41
    +
    42template <typename T, typename... Rest>
    +
    43inline auto select_segments(T &&t, Rest &&...rest) {
    +
    44 if constexpr (is_distributed<T>) {
    +
    45 return dr::ranges::segments(std::forward<T>(t));
    +
    46 } else {
    +
    47 return select_segments(std::forward<Rest>(rest)...);
    +
    48 }
    +
    49}
    +
    50
    +
    51template <typename T, typename Seg> inline auto tpl_segments(T &&t, Seg &&tpl) {
    +
    52 if constexpr (is_distributed<T>) {
    +
    53 return dr::ranges::segments(std::forward<T>(t));
    +
    54 } else if constexpr (rng::forward_range<T>) {
    +
    55 return views::segmented(std::forward<T>(t), std::forward<Seg>(tpl));
    +
    56 } else if constexpr (rng::forward_iterator<T>) {
    +
    57 return views::segmented(rng::subrange(std::forward<T>(t), T{}),
    +
    58 std::forward<Seg>(tpl));
    +
    59 }
    +
    60}
    +
    61
    +
    62template <typename Base> auto base_to_segments(Base &&base) {
    +
    63 // Given segments, return elementwise zip
    +
    64 auto zip_segments = [](auto &&...segments) {
    +
    65 return views::zip(segments...);
    +
    66 };
    +
    67
    +
    68 // Given a tuple of segments, return a single segment by doing
    +
    69 // elementwise zip
    +
    70 auto zip_segment_tuple = [zip_segments](auto &&v) {
    +
    71 return std::apply(zip_segments, v);
    +
    72 };
    +
    73
    +
    74 // Given base ranges, return segments
    +
    75 auto bases_to_segments = [zip_segment_tuple](auto &&...bases) {
    +
    76 bool is_aligned = aligned(bases...);
    +
    77 auto tpl = select_segments(bases...);
    +
    78 return rng::views::zip(tpl_segments(bases, tpl)...) |
    +
    79 rng::views::transform(zip_segment_tuple) |
    +
    80 rng::views::filter([is_aligned](auto &&v) { return is_aligned; });
    +
    81 };
    +
    82
    +
    83 return std::apply(bases_to_segments, base);
    +
    84}
    +
    85
    +
    86} // namespace __detail
    +
    87
    +
    88template <std::random_access_iterator RngIter,
    +
    89 std::random_access_iterator... BaseIters>
    + +
    91public:
    +
    92 using value_type = rng::iter_value_t<RngIter>;
    +
    93 using difference_type = rng::iter_difference_t<RngIter>;
    +
    94
    +
    95 using iterator_category = std::random_access_iterator_tag;
    +
    96
    +
    97 zip_iterator() {}
    +
    98 zip_iterator(RngIter rng_iter, BaseIters... base_iters)
    +
    99 : rng_iter_(rng_iter), base_(base_iters...) {}
    +
    100
    +
    101 auto operator+(difference_type n) const {
    +
    102 auto iter(*this);
    +
    103 iter.rng_iter_ += n;
    +
    104 iter.offset_ += n;
    +
    105 return iter;
    +
    106 }
    +
    107 friend auto operator+(difference_type n, const zip_iterator &other) {
    +
    108 return other + n;
    +
    109 }
    +
    110 auto operator-(difference_type n) const {
    +
    111 auto iter(*this);
    +
    112 iter.rng_iter_ -= n;
    +
    113 iter.offset_ -= n;
    +
    114 return iter;
    +
    115 }
    +
    116 auto operator-(zip_iterator other) const {
    +
    117 return rng_iter_ - other.rng_iter_;
    +
    118 }
    +
    119
    +
    120 auto &operator+=(difference_type n) {
    +
    121 rng_iter_ += n;
    +
    122 offset_ += n;
    +
    123 return *this;
    +
    124 }
    +
    125 auto &operator-=(difference_type n) {
    +
    126 rng_iter_ -= n;
    +
    127 offset_ -= n;
    +
    128 return *this;
    +
    129 }
    +
    130 auto &operator++() {
    +
    131 rng_iter_++;
    +
    132 offset_++;
    +
    133 return *this;
    +
    134 }
    +
    135 auto operator++(int) {
    +
    136 auto iter(*this);
    +
    137 rng_iter_++;
    +
    138 offset_++;
    +
    139 return iter;
    +
    140 }
    +
    141 auto &operator--() {
    +
    142 rng_iter_--;
    +
    143 offset_--;
    +
    144 return *this;
    +
    145 }
    +
    146 auto operator--(int) {
    +
    147 auto iter(*this);
    +
    148 rng_iter_--;
    +
    149 offset_--;
    +
    150 return iter;
    +
    151 }
    +
    152
    +
    153 bool operator==(zip_iterator other) const {
    +
    154 return rng_iter_ == other.rng_iter_;
    +
    155 }
    +
    156 auto operator<=>(zip_iterator other) const {
    +
    157 return offset_ <=> other.offset_;
    +
    158 }
    +
    159
    +
    160 // Underlying zip_iterator does not return a reference
    +
    161 auto operator*() const { return *rng_iter_; }
    +
    162 auto operator[](difference_type n) const { return rng_iter_[n]; }
    +
    163
    +
    164 //
    +
    165 // Distributed Ranges support
    +
    166 //
    +
    167 auto segments() const
    +
    168 requires(distributed_iterator<BaseIters> || ...)
    +
    169 {
    +
    170 return dr::__detail::drop_segments(__detail::base_to_segments(base_),
    +
    171 offset_);
    +
    172 }
    +
    173
    +
    174 auto rank() const
    +
    175 requires(remote_iterator<BaseIters> || ...)
    +
    176 {
    +
    177 return dr::ranges::rank(std::get<0>(base_));
    +
    178 }
    +
    179
    +
    180 auto local() const
    + +
    182 {
    +
    183 // Create a temporary zip_view and return the iterator. This code
    +
    184 // assumes the iterator is valid even if the underlying zip_view
    +
    185 // is destroyed.
    +
    186 auto zip = [this]<typename... Iters>(Iters &&...iters) {
    +
    187 return rng::begin(rng::views::zip(
    +
    188 rng::subrange(base_local(std::forward<Iters>(iters)) + this->offset_,
    +
    189 decltype(base_local(iters)){})...));
    +
    190 };
    +
    191
    +
    192 return std::apply(zip, base_);
    +
    193 }
    +
    194
    +
    195private:
    +
    196 // If it is not a remote iterator, assume it is a local iterator
    +
    197 auto static base_local(auto iter) { return iter; }
    +
    198
    +
    199 auto static base_local(dr::ranges::__detail::has_local auto iter) {
    +
    200 return dr::ranges::local(iter);
    +
    201 }
    +
    202
    +
    203 RngIter rng_iter_;
    +
    204 std::tuple<BaseIters...> base_;
    +
    205 difference_type offset_ = 0;
    +
    206};
    +
    207
    +
    208template <__detail::zipable... Rs>
    +
    209class zip_view : public rng::view_interface<zip_view<Rs...>> {
    +
    210private:
    +
    211 using rng_zip = rng::zip_view<Rs...>;
    +
    212 using rng_zip_iterator = rng::iterator_t<rng_zip>;
    +
    213 using difference_type = std::iter_difference_t<rng_zip_iterator>;
    +
    214
    +
    215public:
    +
    216 zip_view(Rs... rs)
    +
    217 : rng_zip_(rng::views::all(rs)...), base_(rng::views::all(rs)...) {}
    +
    218
    +
    219 auto begin() const {
    +
    220 auto make_begin = [this](auto &&...bases) {
    +
    221 return zip_iterator(rng::begin(this->rng_zip_), rng::begin(bases)...);
    +
    222 };
    +
    223 return std::apply(make_begin, base_);
    +
    224 }
    +
    225 auto end() const
    +
    226 requires(rng::common_range<rng_zip>)
    +
    227 {
    +
    228 auto make_end = [this](auto &&...bases) {
    +
    229 return zip_iterator(rng::end(this->rng_zip_), rng::end(bases)...);
    +
    230 };
    +
    231 return std::apply(make_end, base_);
    +
    232 }
    +
    233 auto size() const { return rng::size(rng_zip_); }
    +
    234
    +
    235 auto operator[](difference_type n) const { return rng_zip_[n]; }
    +
    236
    +
    237 auto base() const { return base_; }
    +
    238
    +
    239 //
    +
    240 // Distributed Ranges support
    +
    241 //
    +
    242 auto segments() const
    +
    243 requires(distributed_range<Rs> || ...)
    +
    244 {
    +
    245 return __detail::base_to_segments(base_);
    +
    246 }
    +
    247
    +
    248 auto rank() const
    +
    249 requires(remote_range<Rs> || ...)
    +
    250 {
    +
    251 return dr::ranges::rank(std::get<0>(base_));
    +
    252 }
    +
    253
    +
    254 auto local() const
    +
    255 requires(remote_range<Rs> || ...)
    +
    256 {
    +
    257 auto zip = []<typename... Vs>(Vs &&...bases) {
    +
    258 return rng::views::zip(dr::ranges::local(std::forward<Vs>(bases))...);
    +
    259 };
    +
    260
    +
    261 return std::apply(zip, base_);
    +
    262 }
    +
    263
    +
    264private:
    +
    265 rng_zip rng_zip_;
    +
    266 std::tuple<rng::views::all_t<Rs>...> base_;
    +
    267};
    +
    268
    +
    269template <typename... Rs>
    + +
    271
    +
    272} // namespace dr::mp
    +
    Definition: zip.hpp:90
    +
    Definition: zip.hpp:209
    +
    Definition: concepts.hpp:31
    +
    Definition: concepts.hpp:20
    +
    Definition: zip.hpp:39
    +
    Definition: zip.hpp:20
    +
    Definition: ranges.hpp:242
    +
    Definition: concepts.hpp:12
    +
    Definition: concepts.hpp:16
    +
    + + + + diff --git a/doxygen/zip__view_8hpp_source.html b/doxygen/zip__view_8hpp_source.html new file mode 100644 index 0000000000..5d464ee9ed --- /dev/null +++ b/doxygen/zip__view_8hpp_source.html @@ -0,0 +1,442 @@ + + + + + + + +Distributed Ranges: /opt/actions-runner/_work/distributed-ranges/distributed-ranges/include/dr/sp/zip_view.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Distributed Ranges +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    zip_view.hpp
    +
    +
    +
    1// SPDX-FileCopyrightText: Intel Corporation
    +
    2//
    +
    3// SPDX-License-Identifier: BSD-3-Clause
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#include <oneapi/dpl/iterator>
    +
    8
    +
    9#include <dr/detail/iterator_adaptor.hpp>
    +
    10#include <dr/detail/owning_view.hpp>
    +
    11#include <dr/detail/ranges_shim.hpp>
    +
    12#include <dr/detail/view_detectors.hpp>
    +
    13#include <dr/sp/device_span.hpp>
    +
    14
    +
    15namespace dr {
    +
    16
    +
    17template <typename T> struct is_owning_view : std::false_type {};
    +
    18// template <rng::range R>
    +
    19// struct is_owning_view<rng::owning_view<R>> : std::true_type {};
    +
    20
    +
    21template <typename T>
    +
    22inline constexpr bool is_owning_view_v = is_owning_view<T>{};
    +
    23
    +
    24}; // namespace dr
    +
    25
    +
    26namespace dr::sp {
    +
    27
    +
    28namespace __detail {
    +
    29
    +
    30template <typename... Args> struct tuple_or_pair {
    +
    31 using type = std::tuple<Args...>;
    +
    32};
    +
    33
    +
    34template <typename T, typename U> struct tuple_or_pair<T, U> {
    +
    35 using type = std::pair<T, U>;
    +
    36};
    +
    37
    +
    38template <typename... Args>
    +
    39using tuple_or_pair_t = typename tuple_or_pair<Args...>::type;
    +
    40
    +
    41}; // namespace __detail
    +
    42
    +
    43template <rng::random_access_iterator... Iters> class zip_accessor {
    +
    44public:
    +
    45 using element_type = __detail::tuple_or_pair_t<std::iter_value_t<Iters>...>;
    +
    46 using value_type = element_type;
    +
    47 using size_type = std::size_t;
    +
    48 using difference_type = std::ptrdiff_t;
    +
    49 using reference = __detail::tuple_or_pair_t<std::iter_reference_t<Iters>...>;
    +
    50
    +
    51 using iterator_category = std::random_access_iterator_tag;
    +
    52
    + + + +
    56
    +
    57 constexpr zip_accessor() noexcept = default;
    +
    58 constexpr ~zip_accessor() noexcept = default;
    +
    59 constexpr zip_accessor(const zip_accessor &) noexcept = default;
    +
    60 constexpr zip_accessor &operator=(const zip_accessor &) noexcept = default;
    +
    61
    +
    62 constexpr zip_accessor(Iters... iters) : iterators_(iters...) {}
    +
    63
    +
    64 zip_accessor &operator+=(difference_type offset) {
    +
    65 auto increment = [&](auto &&iter) { iter += offset; };
    +
    66 iterators_apply_impl_<0>(increment);
    +
    67 return *this;
    +
    68 }
    +
    69
    +
    70 constexpr bool operator==(const iterator_accessor &other) const noexcept {
    +
    71 return std::get<0>(iterators_) == std::get<0>(other.iterators_);
    +
    72 }
    +
    73
    +
    74 constexpr difference_type
    +
    75 operator-(const iterator_accessor &other) const noexcept {
    +
    76 return std::get<0>(iterators_) - std::get<0>(other.iterators_);
    +
    77 }
    +
    78
    +
    79 constexpr bool operator<(const iterator_accessor &other) const noexcept {
    +
    80 return std::get<0>(iterators_) < std::get<0>(other.iterators_);
    +
    81 }
    +
    82
    +
    83 constexpr reference operator*() const noexcept {
    +
    84 return get_impl_(std::make_index_sequence<sizeof...(Iters)>{});
    +
    85 }
    +
    86
    +
    87private:
    +
    88 template <std::size_t... Ints>
    +
    89 reference get_impl_(std::index_sequence<Ints...>) const noexcept {
    +
    90 return reference(*std::get<Ints>(iterators_)...);
    +
    91 }
    +
    92
    +
    93 template <std::size_t I, typename Fn> void iterators_apply_impl_(Fn &&fn) {
    +
    94 fn(std::get<I>(iterators_));
    +
    95 if constexpr (I + 1 < sizeof...(Iters)) {
    +
    96 iterators_apply_impl_<I + 1>(fn);
    +
    97 }
    +
    98 }
    +
    99
    +
    100 std::tuple<Iters...> iterators_;
    +
    101};
    +
    102
    +
    103template <rng::random_access_iterator... Iters>
    + +
    105
    +
    107template <rng::random_access_range... Rs>
    +
    108class zip_view : public rng::view_interface<zip_view<Rs...>> {
    +
    109public:
    +
    110 using size_type = std::size_t;
    +
    111 using difference_type = std::ptrdiff_t;
    +
    112
    +
    113 zip_view(Rs... rs) : views_(rng::views::all(std::forward<Rs>(rs))...) {
    +
    114 std::array<std::size_t, sizeof...(Rs)> sizes = {
    +
    115 std::size_t(rng::distance(rs))...};
    +
    116
    +
    117 // TODO: support zipped views with some ranges shorter than others
    +
    118 size_ = sizes[0];
    +
    119
    +
    120 for (auto &&size : sizes) {
    +
    121 size_ = std::min(size_, size);
    +
    122 }
    +
    123 }
    +
    124
    +
    125 std::size_t size() const noexcept { return size_; }
    +
    126
    +
    127 auto begin() const {
    +
    128 return begin_impl_(std::make_index_sequence<sizeof...(Rs)>{});
    +
    129 }
    +
    130
    +
    131 auto end() const { return begin() + size(); }
    +
    132
    +
    133 auto operator[](std::size_t idx) const { return *(begin() + idx); }
    +
    134
    +
    135 static constexpr bool num_views = sizeof...(Rs);
    +
    136
    +
    137 template <std::size_t I> decltype(auto) get_view() const {
    +
    138 auto &&view = std::get<I>(views_);
    +
    139
    +
    140 if constexpr (dr::is_ref_view_v<std::remove_cvref_t<decltype(view)>> ||
    +
    141 dr::is_owning_view_v<std::remove_cvref_t<decltype(view)>>) {
    +
    142 return view.base();
    +
    143 } else {
    +
    144 return view;
    +
    145 }
    +
    146 }
    +
    147
    +
    148 // If there is at least one distributed range, expose segments
    +
    149 // of overlapping remote ranges.
    +
    150 auto segments() const
    +
    151 requires(dr::distributed_range<Rs> || ...)
    +
    152 {
    +
    153 std::array<std::size_t, sizeof...(Rs)> segment_ids;
    +
    154 std::array<std::size_t, sizeof...(Rs)> local_idx;
    +
    155 segment_ids.fill(0);
    +
    156 local_idx.fill(0);
    +
    157
    +
    158 std::size_t cumulative_size = 0;
    +
    159
    +
    160 using segment_view_type = decltype(get_zipped_view_impl_(
    +
    161 segment_ids, local_idx, 0, std::make_index_sequence<sizeof...(Rs)>{}));
    +
    162 std::vector<segment_view_type> segment_views;
    +
    163
    +
    164 while (cumulative_size < size()) {
    +
    165 auto size = get_next_segment_size(segment_ids, local_idx);
    +
    166
    +
    167 cumulative_size += size;
    +
    168
    +
    169 // Create zipped segment with
    +
    170 // zip_view(segments()[Is].subspan(local_idx[Is], size)...) And some rank
    +
    171 // (e.g. get_view<0>.rank())
    +
    172 auto segment_view =
    +
    173 get_zipped_view_impl_(segment_ids, local_idx, size,
    +
    174 std::make_index_sequence<sizeof...(Rs)>{});
    +
    175
    +
    176 segment_views.push_back(std::move(segment_view));
    +
    177
    +
    178 increment_local_idx(segment_ids, local_idx, size);
    +
    179 }
    +
    180
    +
    181 return dr::__detail::owning_view(std::move(segment_views));
    +
    182 }
    +
    183
    +
    184 // Return a range corresponding to each segment in `segments()`,
    +
    185 // but with a tuple of the constituent ranges instead of a
    +
    186 // `zip_view` of the ranges.
    +
    187 auto zipped_segments() const
    +
    188 requires(dr::distributed_range<Rs> || ...)
    +
    189 {
    +
    190 std::array<std::size_t, sizeof...(Rs)> segment_ids;
    +
    191 std::array<std::size_t, sizeof...(Rs)> local_idx;
    +
    192 segment_ids.fill(0);
    +
    193 local_idx.fill(0);
    +
    194
    +
    195 std::size_t cumulative_size = 0;
    +
    196
    +
    197 using segment_view_type = decltype(get_zipped_segments_impl_(
    +
    198 segment_ids, local_idx, 0, std::make_index_sequence<sizeof...(Rs)>{}));
    +
    199 std::vector<segment_view_type> segment_views;
    +
    200
    +
    201 while (cumulative_size < size()) {
    +
    202 auto size = get_next_segment_size(segment_ids, local_idx);
    +
    203
    +
    204 cumulative_size += size;
    +
    205
    +
    206 // Get zipped segments with
    +
    207 // std::tuple(segments()[Is].subspan(local_idx[Is], size)...)
    +
    208 auto segment_view =
    +
    209 get_zipped_segments_impl_(segment_ids, local_idx, size,
    +
    210 std::make_index_sequence<sizeof...(Rs)>{});
    +
    211
    +
    212 segment_views.push_back(std::move(segment_view));
    +
    213
    +
    214 increment_local_idx(segment_ids, local_idx, size);
    +
    215 }
    +
    216
    +
    217 return dr::__detail::owning_view(std::move(segment_views));
    +
    218 }
    +
    219
    +
    220 auto local() const noexcept
    +
    221 requires(!(dr::distributed_range<Rs> || ...))
    +
    222 {
    +
    223 return local_impl_(std::make_index_sequence<sizeof...(Rs)>());
    +
    224 }
    +
    225
    +
    226 // If:
    +
    227 // - There is at least one remote range in the zip
    +
    228 // - There are no distributed ranges in the zip
    +
    229 // Expose a rank.
    +
    230 std::size_t rank() const
    +
    231 requires((dr::remote_range<Rs> || ...) &&
    + +
    233 {
    +
    234 return get_rank_impl_<0, Rs...>();
    +
    235 }
    +
    236
    +
    237private:
    +
    238 template <std::size_t... Ints>
    +
    239 auto local_impl_(std::index_sequence<Ints...>) const noexcept {
    +
    240 return rng::views::zip(__detail::local(std::get<Ints>(views_))...);
    +
    241 }
    +
    242
    +
    243 template <std::size_t I, typename R> std::size_t get_rank_impl_() const {
    +
    244 static_assert(I < sizeof...(Rs));
    +
    245 return dr::ranges::rank(get_view<I>());
    +
    246 }
    +
    247
    +
    248 template <std::size_t I, typename R, typename... Rs_>
    +
    249 requires(sizeof...(Rs_) > 0)
    +
    250 std::size_t get_rank_impl_() const {
    +
    251 static_assert(I < sizeof...(Rs));
    +
    252 if constexpr (dr::remote_range<R>) {
    +
    253 return dr::ranges::rank(get_view<I>());
    +
    254 } else {
    +
    255 return get_rank_impl_<I + 1, Rs_...>();
    +
    256 }
    +
    257 }
    +
    258
    +
    259 template <typename T> auto create_view_impl_(T &&t) const {
    +
    260 if constexpr (dr::remote_range<T>) {
    +
    261 return dr::sp::device_span(std::forward<T>(t));
    +
    262 } else {
    +
    263 return dr::sp::span(std::forward<T>(t));
    +
    264 }
    +
    265 }
    +
    266
    +
    267 template <std::size_t... Is>
    +
    268 auto get_zipped_view_impl_(auto &&segment_ids, auto &&local_idx,
    +
    269 std::size_t size,
    +
    270 std::index_sequence<Is...>) const {
    +
    271 return zip_view<decltype(create_view_impl_(
    +
    272 segment_or_orig_(get_view<Is>(),
    +
    273 segment_ids[Is]))
    +
    274 .subspan(local_idx[Is], size))...>(
    +
    275 create_view_impl_(segment_or_orig_(get_view<Is>(), segment_ids[Is]))
    +
    276 .subspan(local_idx[Is], size)...);
    +
    277 }
    +
    278
    +
    279 template <std::size_t... Is>
    +
    280 auto get_zipped_segments_impl_(auto &&segment_ids, auto &&local_idx,
    +
    281 std::size_t size,
    +
    282 std::index_sequence<Is...>) const {
    +
    283 return std::tuple(
    +
    284 create_view_impl_(segment_or_orig_(get_view<Is>(), segment_ids[Is]))
    +
    285 .subspan(local_idx[Is], size)...);
    +
    286 }
    +
    287
    +
    288 template <std::size_t I = 0>
    +
    289 void increment_local_idx(auto &&segment_ids, auto &&local_idx,
    +
    290 std::size_t size) const {
    +
    291 local_idx[I] += size;
    +
    292
    +
    293 if (local_idx[I] >=
    +
    294 rng::distance(segment_or_orig_(get_view<I>(), segment_ids[I]))) {
    +
    295 local_idx[I] = 0;
    +
    296 segment_ids[I]++;
    +
    297 }
    +
    298
    +
    299 if constexpr (I + 1 < sizeof...(Rs)) {
    +
    300 increment_local_idx<I + 1>(segment_ids, local_idx, size);
    +
    301 }
    +
    302 }
    +
    303
    +
    304 template <std::size_t... Is>
    +
    305 auto begin_impl_(std::index_sequence<Is...>) const {
    + +
    307 rng::begin(std::get<Is>(views_))...);
    +
    308 }
    +
    309
    +
    310 template <dr::distributed_range T>
    +
    311 decltype(auto) segment_or_orig_(T &&t, std::size_t idx) const {
    +
    312 return dr::ranges::segments(t)[idx];
    +
    313 }
    +
    314
    +
    315 template <typename T>
    +
    316 decltype(auto) segment_or_orig_(T &&t, std::size_t idx) const {
    +
    317 return t;
    +
    318 }
    +
    319
    +
    320 template <std::size_t... Is>
    +
    321 std::size_t get_next_segment_size_impl_(auto &&segment_ids, auto &&local_idx,
    +
    322 std::index_sequence<Is...>) const {
    +
    323 return std::min({std::size_t(rng::distance(
    +
    324 segment_or_orig_(get_view<Is>(), segment_ids[Is]))) -
    +
    325 local_idx[Is]...});
    +
    326 }
    +
    327
    +
    328 std::size_t get_next_segment_size(auto &&segment_ids,
    +
    329 auto &&local_idx) const {
    +
    330 return get_next_segment_size_impl_(
    +
    331 segment_ids, local_idx, std::make_index_sequence<sizeof...(Rs)>{});
    +
    332 }
    +
    333
    +
    334 std::tuple<rng::views::all_t<Rs>...> views_;
    +
    335 std::size_t size_;
    +
    336};
    +
    337
    +
    338template <typename... Rs> zip_view(Rs &&...rs) -> zip_view<Rs...>;
    +
    339
    +
    340namespace views {
    +
    341
    +
    343template <rng::random_access_range... Rs> auto zip(Rs &&...rs) {
    +
    344 return dr::sp::zip_view(std::forward<Rs>(rs)...);
    +
    345}
    +
    346
    +
    347} // namespace views
    +
    348
    +
    349} // namespace dr::sp
    +
    Definition: owning_view.hpp:18
    +
    Definition: iterator_adaptor.hpp:23
    +
    Definition: device_span.hpp:44
    +
    Definition: span.hpp:14
    +
    Definition: zip_view.hpp:43
    +
    zip
    Definition: zip_view.hpp:108
    +
    Definition: concepts.hpp:20
    +
    Definition: concepts.hpp:16
    +
    Definition: zip_view.hpp:17
    +
    Definition: zip_view.hpp:30
    +
    + + + + diff --git a/spec/.buildinfo b/spec/.buildinfo new file mode 100644 index 0000000000..61dcd95bfd --- /dev/null +++ b/spec/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 8f6231b2b4c9ad2472f3c61520fc42ec +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/spec/_sources/algorithms/algorithms.rst b/spec/_sources/algorithms/algorithms.rst new file mode 100644 index 0000000000..d721423c0d --- /dev/null +++ b/spec/_sources/algorithms/algorithms.rst @@ -0,0 +1,32 @@ +.. SPDX-FileCopyrightText: Intel Corporation +.. +.. SPDX-License-Identifier: BSD-3-Clause + +============ + Algorithms +============ + +Algorithms on distributed ranges. + +.. toctree:: + :maxdepth: 1 + + copy + exclusive_scan + fill + for_each + inclusive_scan + iota + reduce + sort + transform + +# transform_reduce + +Algorithms on matrices, dense and sparse + +.. toctree:: + :maxdepth: 1 + + sp_matrix_gemm + sp_matrix_gemv diff --git a/spec/_sources/algorithms/copy.rst b/spec/_sources/algorithms/copy.rst new file mode 100644 index 0000000000..5aeca76754 --- /dev/null +++ b/spec/_sources/algorithms/copy.rst @@ -0,0 +1,45 @@ +.. SPDX-FileCopyrightText: Intel Corporation +.. +.. SPDX-License-Identifier: BSD-3-Clause + +.. include:: ../include/distributed-ranges.rst + +.. _copy: + +========== + ``copy`` +========== + +Interface +========= + +MP +--- + +.. doxygenfunction:: dr::mp::copy(rng::forward_range auto &&in, dr::distributed_iterator auto out) + :outline: +.. doxygenfunction:: dr::mp::copy(DI_IN &&first, DI_IN &&last, dr::distributed_iterator auto &&out) + :outline: +.. doxygenfunction:: dr::mp::copy(std::size_t root, dr::distributed_contiguous_range auto &&in, std::contiguous_iterator auto out) + :outline: +.. doxygenfunction:: dr::mp::copy(std::size_t root, rng::contiguous_range auto &&in, dr::distributed_contiguous_iterator auto out) + :outline: + +SP +--- + +.. doxygenfunction:: dr::sp::copy(InputIt first, InputIt last, OutputIt d_first) + :outline: +.. doxygenfunction:: dr::sp::copy(device_ptr first, device_ptr last, Iter d_first) + :outline: + + +Description +=========== + +.. seealso:: + + `std::ranges::copy`_ + Standard C++ algorithm + `std::copy`_ + Standard C++ algorithm diff --git a/spec/_sources/algorithms/exclusive_scan.rst b/spec/_sources/algorithms/exclusive_scan.rst new file mode 100644 index 0000000000..915e43aece --- /dev/null +++ b/spec/_sources/algorithms/exclusive_scan.rst @@ -0,0 +1,46 @@ +.. SPDX-FileCopyrightText: Intel Corporation +.. +.. SPDX-License-Identifier: BSD-3-Clause + +.. include:: ../include/distributed-ranges.rst + +.. _exclusive_scan: + +============================ + ``exclusive_scan`` +============================ + +Interface +========= +MP +--- + +SP +--- + +.. doxygenfunction:: dr::sp::exclusive_scan(ExecutionPolicy &&policy, R &&r, O &&o, T init, BinaryOp &&binary_op) + :outline: +.. doxygenfunction:: dr::sp::exclusive_scan(ExecutionPolicy &&policy, R &&r, O &&o, T init) + :outline: +.. doxygenfunction:: dr::sp::exclusive_scan(R &&r, O &&o, T init, BinaryOp &&binary_op) + :outline: +.. doxygenfunction:: dr::sp::exclusive_scan(R &&r, O &&o, T init) + :outline: +.. doxygenfunction:: dr::sp::exclusive_scan(ExecutionPolicy &&policy, Iter first, Iter last, OutputIter d_first, T init, BinaryOp &&binary_op) + :outline: +.. doxygenfunction:: dr::sp::exclusive_scan(ExecutionPolicy &&policy, Iter first, Iter last, OutputIter d_first, T init) + :outline: +.. doxygenfunction:: dr::sp::exclusive_scan(Iter first, Iter last, OutputIter d_first, T init, BinaryOp &&binary_op) + :outline: +.. doxygenfunction:: dr::sp::exclusive_scan(Iter first, Iter last, OutputIter d_first, T init) + :outline + +Description +=========== + +.. seealso:: + + 'std::exclusive_scan'_ + +Examples +======== diff --git a/spec/_sources/algorithms/fill.rst b/spec/_sources/algorithms/fill.rst new file mode 100644 index 0000000000..d26cb53f86 --- /dev/null +++ b/spec/_sources/algorithms/fill.rst @@ -0,0 +1,57 @@ +.. SPDX-FileCopyrightText: Intel Corporation +.. +.. SPDX-License-Identifier: BSD-3-Clause + +.. include:: ../include/distributed-ranges.rst + +.. _fill: + +========== + ``fill`` +========== + +Interface +========= + +MP +--- + +.. doxygenfunction:: dr::mp::fill(dr::distributed_contiguous_range auto &&dr, auto value); + :outline: +.. doxygenfunction:: dr::mp::fill(DI first, DI last, auto value) + :outline: + +SP +--- + +.. doxygenfunction:: dr::sp::fill_async(Iter first, Iter last, const std::iter_value_t &value) + :outline: +.. doxygenfunction:: dr::sp::fill(Iter first, Iter last, const std::iter_value_t &value) + :outline: +.. doxygenfunction:: dr::sp::fill_async(device_ptr first, device_ptr last, const U &value) + :outline: +.. doxygenfunction:: dr::sp::fill(device_ptr first, device_ptr last, const U &value) + :outline: +.. doxygenfunction:: dr::sp::fill_async(R &&r, const T &value) + :outline: +.. doxygenfunction:: dr::sp::fill(R &&r, const T &value) + :outline: +.. doxygenfunction:: dr::sp::fill_async(DR &&r, const T &value) + :outline: +.. doxygenfunction:: dr::sp::fill(DR &&r, const T &value) + :outline: +.. doxygenfunction:: dr::sp::fill(Iter first, Iter last, const T &value) + :outline: + +Description +=========== + +.. seealso:: + + C++ model + `std::fill`_ + C++ model + `std::ranges::fill`_ + +Usage +===== diff --git a/spec/_sources/algorithms/for_each.rst b/spec/_sources/algorithms/for_each.rst new file mode 100644 index 0000000000..63947218d2 --- /dev/null +++ b/spec/_sources/algorithms/for_each.rst @@ -0,0 +1,45 @@ +.. SPDX-FileCopyrightText: Intel Corporation +.. +.. SPDX-License-Identifier: BSD-3-Clause + +.. include:: ../include/distributed-ranges.rst + +.. _for_each: + +============== + ``for_each`` +============== + +Interface +========= +MP +--- +.. doxygenfunction:: dr::mp::for_each(dr::distributed_range auto &&dr, auto op) + :outline: +.. doxygenfunction:: dr::mp::for_each(DI first, DI last, auto op) + :outline: + +SP +--- + +.. doxygenfunction:: dr::sp::for_each(ExecutionPolicy &&policy, R &&r, Fn &&fn) + :outline: +.. doxygenfunction:: dr::sp::for_each(ExecutionPolicy &&policy, Iter begin, Iter end, Fn &&fn) + :outline: +.. doxygenfunction:: dr::sp::for_each(R &&r, Fn &&fn) + :outline: +.. doxygenfunction:: dr::sp::for_each(Iter begin, Iter end, Fn &&fn) + :outline: + +Description +=========== + +.. seealso:: + + `std::ranges::for_each`_ + Standard C++ algorithm + `std::for_each`_ + Standard C++ algorithm + +Examples +======== diff --git a/spec/_sources/algorithms/inclusive_scan.rst b/spec/_sources/algorithms/inclusive_scan.rst new file mode 100644 index 0000000000..d46ad7f8f6 --- /dev/null +++ b/spec/_sources/algorithms/inclusive_scan.rst @@ -0,0 +1,61 @@ +.. SPDX-FileCopyrightText: Intel Corporation +.. +.. SPDX-License-Identifier: BSD-3-Clause + +.. include:: ../include/distributed-ranges.rst + +.. _inclusive_scan: + +============================ + ``inclusive_scan`` +============================ + +Interface +========= + +MP +--- + +SP +--- + +.. doxygenfunction:: dr::sp::inclusive_scan(ExecutionPolicy &&policy, R &&r, O &&o, BinaryOp &&binary_op, T init) + :outline: +.. doxygenfunction:: dr::sp::inclusive_scan(ExecutionPolicy &&policy, R &&r, O &&o, BinaryOp &&binary_op) + :outline: +.. doxygenfunction:: dr::sp::inclusive_scan(ExecutionPolicy &&policy, R &&r, O &&o) + :outline: +.. doxygenfunction:: dr::sp::inclusive_scan(ExecutionPolicy &&policy, Iter first, Iter last, OutputIter d_first, BinaryOp &&binary_op, T init) + :outline: +.. doxygenfunction:: dr::sp::inclusive_scan(ExecutionPolicy &&policy, Iter first, Iter last, OutputIter d_first, BinaryOp &&binary_op) + :outline: +.. doxygenfunction:: dr::sp::inclusive_scan(ExecutionPolicy &&policy, Iter first, Iter last, OutputIter d_first) + :outline: + +Execution policy-less versions + +.. doxygenfunction:: dr::sp::inclusive_scan(R &&r, O &&o) + :outline: +.. doxygenfunction:: dr::sp::inclusive_scan(R &&r, O &&o, BinaryOp &&binary_op) + :outline: +.. doxygenfunction:: dr::sp::inclusive_scan(R &&r, O &&o, BinaryOp &&binary_op, T init) + :outline: + +Distributed iterator versions + +.. doxygenfunction:: dr::sp::inclusive_scan(Iter first, Iter last, OutputIter d_first) + :outline: +.. doxygenfunction:: dr::sp::inclusive_scan(Iter first, Iter last, OutputIter d_first, BinaryOp &&binary_op) + :outline: +.. doxygenfunction:: dr::sp::inclusive_scan(Iter first, Iter last, OutputIter d_first, BinaryOp &&binary_op, T init) + :outline: + +Description +=========== + +.. seealso:: + + 'std::inclusive_scan'_ + +Examples +======== diff --git a/spec/_sources/algorithms/iota.rst b/spec/_sources/algorithms/iota.rst new file mode 100644 index 0000000000..cfecdf01fe --- /dev/null +++ b/spec/_sources/algorithms/iota.rst @@ -0,0 +1,45 @@ +.. SPDX-FileCopyrightText: Intel Corporation +.. +.. SPDX-License-Identifier: BSD-3-Clause + +.. include:: ../include/distributed-ranges.rst + +.. _iota: + +========== + ``iota`` +========== + +Interface +========= + +MP +--- + +.. doxygenfunction:: dr::mp::iota(R &&r, T value) + :outline: +.. doxygenfunction:: dr::mp::iota(Iter begin, Iter end, T value) + :outline: + +SP +--- + +.. doxygenfunction:: dr::sp::iota(R &&r, T value) + :outline: +.. doxygenfunction:: dr::sp::iota(Iter begin, Iter end, T value) + :outline: + + + +Description +=========== + +.. seealso:: + + `std::ranges::iota`_ + Standard C++ algorithm + `std::iota`_ + Standard C++ algorithm + +Usage +===== diff --git a/spec/_sources/algorithms/reduce.rst b/spec/_sources/algorithms/reduce.rst new file mode 100644 index 0000000000..8cc4862f1c --- /dev/null +++ b/spec/_sources/algorithms/reduce.rst @@ -0,0 +1,78 @@ +.. SPDX-FileCopyrightText: Intel Corporation +.. +.. SPDX-License-Identifier: BSD-3-Clause + +.. include:: ../include/distributed-ranges.rst + +.. _reduce: + +============ + ``reduce`` +============ + +Interface +========= + +MP +--- + +.. doxygenfunction:: dr::mp::reduce(std::size_t root, DR &&dr, T init, auto &&binary_op) + :outline: +.. doxygenfunction:: dr::mp::reduce(DR &&dr, T init, auto &&binary_op) + :outline: +.. doxygenfunction:: dr::mp::reduce(std::size_t root, DR &&dr, T init) + :outline: +.. doxygenfunction:: dr::mp::reduce(DR &&dr, T init) + :outline: +.. doxygenfunction:: dr::mp::reduce(std::size_t root, DR &&dr) + :outline: +.. doxygenfunction:: dr::mp::reduce(DR &&dr) + :outline: +.. doxygenfunction:: dr::mp::reduce(std::size_t root, DI first, DI last, T init, auto &&binary_op) + :outline: +.. doxygenfunction:: dr::mp::reduce(DI first, DI last, T init, auto &&binary_op) + :outline: +.. doxygenfunction:: dr::mp::reduce(std::size_t root, DI first, DI last, T init) + :outline: +.. doxygenfunction:: dr::mp::reduce(DI first, DI last, T init) + :outline: +.. doxygenfunction:: dr::mp::reduce(std::size_t root, DI first, DI last) + :outline: +.. doxygenfunction:: dr::mp::reduce(DI first, DI last) + :outline: + +SP +--- + +.. doxygenfunction:: dr::sp::reduce(ExecutionPolicy &&policy, R &&r, T init, BinaryOp &&binary_op) + :outline: +.. doxygenfunction:: dr::sp::reduce(ExecutionPolicy &&policy, R &&r, T init) + :outline: +.. doxygenfunction:: dr::sp::reduce(ExecutionPolicy &&policy, R &&r) + :outline: + +Iterator versions + +.. doxygenfunction:: dr::sp::reduce(ExecutionPolicy &&policy, Iter first, Iter last) + :outline: +.. doxygenfunction:: dr::sp::reduce(ExecutionPolicy &&policy, Iter first, Iter last, T init) + :outline: +.. doxygenfunction:: dr::sp::reduce(ExecutionPolicy &&policy, Iter first, Iter last, T init, BinaryOp &&binary_op) + :outline: + +Execution policy-less algorithms + +.. doxygenfunction:: dr::sp::reduce(R &&r) + :outline: +.. doxygenfunction:: dr::sp::reduce(R &&r, T init) + :outline: +.. doxygenfunction:: dr::sp::reduce(R &&r, T init, BinaryOp &&binary_op) + :outline: + +Description +=========== + +.. seealso:: `std::reduce`_ + +Examples +======== diff --git a/spec/_sources/algorithms/sort.rst b/spec/_sources/algorithms/sort.rst new file mode 100644 index 0000000000..689fb7bcd3 --- /dev/null +++ b/spec/_sources/algorithms/sort.rst @@ -0,0 +1,38 @@ +.. SPDX-FileCopyrightText: Intel Corporation +.. +.. SPDX-License-Identifier: BSD-3-Clause + +.. include:: ../include/distributed-ranges.rst + +.. _sort: + +========== + ``sort`` +========== + +Interface +========= + +MP +--- + +SP +--- + +.. doxygenfunction:: dr::sp::sort(R &&r, Compare comp = Compare()) + :outline: +.. doxygenfunction:: dr::sp::sort(RandomIt first, RandomIt last, Compare comp = Compare()) + :outline: + +Description +=========== + +.. seealso:: + + C++ model + `std::sort`_ + C++ model + `std::ranges::sort`_ + +Usage +===== diff --git a/spec/_sources/algorithms/sp_matrix_gemm.rst b/spec/_sources/algorithms/sp_matrix_gemm.rst new file mode 100644 index 0000000000..d5f16faded --- /dev/null +++ b/spec/_sources/algorithms/sp_matrix_gemm.rst @@ -0,0 +1,23 @@ +.. SPDX-FileCopyrightText: Intel Corporation +.. +.. SPDX-License-Identifier: BSD-3-Clause + +.. include:: ../include/distributed-ranges.rst + +.. _gemm: + +====================== + ``gemm`` +====================== + +Interface +========= + +.. doxygenfunction:: dr::sp::gemm(distributed_dense_matrix &a, distributed_dense_matrix &b, distributed_dense_matrix &c) + +Description +=========== + + +Examples +======== diff --git a/spec/_sources/algorithms/sp_matrix_gemv.rst b/spec/_sources/algorithms/sp_matrix_gemv.rst new file mode 100644 index 0000000000..d48ca1225f --- /dev/null +++ b/spec/_sources/algorithms/sp_matrix_gemv.rst @@ -0,0 +1,27 @@ +.. SPDX-FileCopyrightText: Intel Corporation +.. +.. SPDX-License-Identifier: BSD-3-Clause + +.. include:: ../include/distributed-ranges.rst + +.. _gemv: + +====================== + ``gemv`` +====================== + +Interface +========= + +.. doxygenfunction:: dr::sp::flat_gemv(C &&c, dr::sp::sparse_matrix &a, B &&b) +.. doxygenfunction:: dr::sp::gemv(C &&c, dr::sp::sparse_matrix &a, B &&b, sp::duplicated_vector> &scratch) +.. doxygenfunction:: dr::sp::gemv(C &&c, dr::sp::sparse_matrix &a, B &&b) +.. doxygenfunction:: dr::sp::gemv_square(C &&c, dr::sp::sparse_matrix &a, B &&b) +.. doxygenfunction:: dr::sp::gemv_square_copy(C &&c, dr::sp::sparse_matrix &a, B &&b) + +Description +=========== + + +Examples +======== diff --git a/spec/_sources/algorithms/transform.rst b/spec/_sources/algorithms/transform.rst new file mode 100644 index 0000000000..9cda409d86 --- /dev/null +++ b/spec/_sources/algorithms/transform.rst @@ -0,0 +1,44 @@ +.. SPDX-FileCopyrightText: Intel Corporation +.. +.. SPDX-License-Identifier: BSD-3-Clause + +.. include:: ../include/distributed-ranges.rst + +.. _transform: + +=============== + ``transform`` +=============== + +Interface +========= + +MP +--- + +.. doxygenfunction:: dr::mp::transform(rng::forward_range auto &&in, dr::distributed_iterator auto out, auto op) +.. doxygenfunction:: dr::mp::transform(DI_IN &&first, DI_IN &&last, dr::distributed_iterator auto &&out, auto op) + +SP +--- + +.. doxygenfunction:: dr::sp::transform(ExecutionPolicy &&policy, dr::distributed_range auto &&in, dr::distributed_iterator auto out, auto &&fn) +.. doxygenfunction:: dr::sp::transform(R &&in, Iter out, Fn &&fn) +.. doxygenfunction:: dr::sp::transform(ExecutionPolicy &&policy, Iter1 in_begin, Iter1 in_end, Iter2 out_end, Fn &&fn) +.. doxygenfunction:: dr::sp::transform(Iter1 in_begin, Iter1 in_end, Iter2 out_end, Fn &&fn) + + +Description +=========== + +.. seealso:: + + `std::transform`_ + C++ model + `std::ranges::transform`_ + C++ range-based model + :ref:`reduce` + related algorithm + +Usage +===== diff --git a/spec/_sources/arch.rst b/spec/_sources/arch.rst new file mode 100644 index 0000000000..464c8e9d45 --- /dev/null +++ b/spec/_sources/arch.rst @@ -0,0 +1,14 @@ +.. SPDX-FileCopyrightText: Intel Corporation +.. +.. SPDX-License-Identifier: BSD-3-Clause + +============== + Architecture +============== + +See `Distributed Ranges, why you need it`_ presentation +and all other materials listed in `Documentation`_ section +on Distributed Ranges repository main page. + +.. _`Distributed Ranges, why you need it`: https://github.com/oneapi-src/distributed-ranges/blob/main/doc/presentations/Distributed%20Ranges%2C%20why%20you%20need%20it.pdf +.. _`Documentation`: https://github.com/oneapi-src/distributed-ranges/blob/main/README.rst diff --git a/spec/_sources/concepts.rst b/spec/_sources/concepts.rst new file mode 100644 index 0000000000..cca429cc38 --- /dev/null +++ b/spec/_sources/concepts.rst @@ -0,0 +1,177 @@ +.. SPDX-FileCopyrightText: Intel Corporation +.. +.. SPDX-License-Identifier: BSD-3-Clause + +.. _concepts: + +======== +Concepts +======== + +``remote_iterator`` +=================== + +.. doxygenconcept:: dr::remote_iterator + +Defined in ``concepts.hpp`` +:: + + template + concept remote_iterator = + std::forward_iterator && requires(I &iter) { dr::ranges::rank(iter); }; + +Requirements +"""""""""""" +1. ``I`` fulfills ``std::forward_iterator`` +2. ``i`` has a method ``rank`` returning the rank on which the memory + ``i`` references is located. + +``remote_range`` +================ + +.. doxygenconcept:: dr::remote_range + +Defined in ``concepts.hpp`` +:: + + template + concept remote_range = + rng::forward_range && requires(R &r) { dr::ranges::rank(r); }; + +Requirements +"""""""""""" +1. ``R`` fulfills ``rng::forward_range`` +2. ``r`` has a method ``rank`` returning the rank on which the memory + ``r`` references is located. + +``distributed_range`` +===================== + +.. doxygenconcept:: dr::distributed_range + +Defined in ``concepts.hpp`` +:: + + template + concept distributed_range = + rng::forward_range && requires(R &r) { dr::ranges::segments(r); }; + +Requirements +"""""""""""" +1. ``R`` fulfills ``rng::forward_range`` +2. ``r`` has a method ``segments`` + +``remote_contiguous_iterator`` +============================== + +.. doxygenconcept:: dr::remote_contiguous_iterator + +A remote contiguous iterator acts as a pointer to some contiguous piece +of remote memory. + +Defined in ``concepts.hpp`` +:: + + template + concept remote_contiguous_iterator = std::random_access_iterator && + requires(I i) { + { i.rank() } -> std::convertible_to; + { i.local() } -> std::contiguous_iterator; + }; + + +Requirements +"""""""""""" + +An object `i` of type ``I`` fulfills ``remote_contiguous_iterator`` +if and only if: + +1. ``I`` fulfills ``std::random_access_iterator`` +2. ``i`` has a method ``rank`` returning the rank on which the memory + ``i`` references is located. +3. ``i`` has a method ``local`` returning an object ``l`` whose type + fulfills ``std::contiguous_iterator``. Dereferencing ``l`` is + well-defined if the current rank is equal ``i.rank()``. + +Remarks +""""""" +Instantiations of `remote_ptr`, `device_ptr`, and `BCL::GlobalPtr` should all +fulfill ``remote_contiguous_iterator``. + + +``remote_contiguous_range`` +=========================== + +.. doxygenconcept:: dr::remote_contiguous_range + +A remote contiguous range is a range located in a contiguous piece of remote +memory. + +Defined in ``concepts.hpp`` + +:: + + template + concept remote_contiguous_range = std::ranges::random_access_range && + remote_contiguous_iterator> && requires(T t) { + { t.rank() } -> std::convertible_to; + }; + + +Requirements +"""""""""""" + +An object `t` of type ``T`` fulfills ``remote_contiguous_range`` if and only +if: + +1. ``T`` fulfills ``std::ranges::random_access_range``. +2. ``T``'s iterator type fulfills ``remote_contiguous_iterator``. +3. ``t`` has a method ``rank`` returning the rank on which the range is + located. For all iterators ``iter`` ``t.rank() == t.begin().rank()``. + +Remarks +""""""" +All of the iterators in ``[begin(), end())`` should be contiguous iterators +with the same rank, and ``[begin().local(), end().local())`` should form a +contiguous range referencing the same memory, but locally. Not quite sure how +to express that concisely. + +``distributed_contiguous_range`` +================================ + +.. doxygenconcept:: dr::distributed_contiguous_range + +A distributed contiguous range is a range consisting of multiple segments +distributed over multiple processes, where each each segment is a +remote contiguous range. + +Defined in ``concepts.hpp`` + +:: + + template + concept distributed_contiguous_range = std::ranges::random_access_range && + requires(T t) { + { t.segments() } -> std::ranges::random_access_range; + { + std::declval>() + } -> remote_contiguous_range; + }; + + +Requirements +"""""""""""" + +An object ``t`` of type ``T`` fulfills ``distributed_contiguous_range`` if and +only if: + +1. ``T`` fulfills `std::ranges::random_access_range` +2. ``t`` has a method ``segments`` such that the ``t.segments()`` returns an + ``std::ranges::random_access_range`` where each element is a + ``remote_contiguous_range``. + +Remarks +""""""" +Should there be other requirements, other than ``segments``? Perhaps a +``distribution`` method to return an implementation-defined type describing the +distribution? diff --git a/spec/_sources/containers/containers.rst b/spec/_sources/containers/containers.rst new file mode 100644 index 0000000000..b05eabc258 --- /dev/null +++ b/spec/_sources/containers/containers.rst @@ -0,0 +1,22 @@ +.. SPDX-FileCopyrightText: Intel Corporation +.. +.. SPDX-License-Identifier: BSD-3-Clause + +============ + Containers +============ + +*Containers* own storage. + +The storage for a *distributed container* is divided over multiple +processes and can be accessed by any process in the team. + +.. toctree:: + :maxdepth: 1 + + mp_distributed_vector + mp_distributed_dense_matrix + + sp_distributed_vector + sp_dense_matrix + sp_sparse_matrix diff --git a/spec/_sources/containers/mp_distributed_dense_matrix.rst b/spec/_sources/containers/mp_distributed_dense_matrix.rst new file mode 100644 index 0000000000..01cfa11ec2 --- /dev/null +++ b/spec/_sources/containers/mp_distributed_dense_matrix.rst @@ -0,0 +1,26 @@ +.. SPDX-FileCopyrightText: Intel Corporation +.. +.. SPDX-License-Identifier: BSD-3-Clause + +.. include:: ../include/distributed-ranges.rst + +.. _distributed_dense_matrix: + +===================================== +``dr::mp::distributed_dense_matrix`` +===================================== + +Interface +========= + +.. code-block:: cpp + + template class distributed_dense_matrix; + +The class will be merged and documented soon + + +Description +=========== + +Dense matrix class, distributed over MPI nodes diff --git a/spec/_sources/containers/mp_distributed_vector.rst b/spec/_sources/containers/mp_distributed_vector.rst new file mode 100644 index 0000000000..63510b8bee --- /dev/null +++ b/spec/_sources/containers/mp_distributed_vector.rst @@ -0,0 +1,27 @@ +.. SPDX-FileCopyrightText: Intel Corporation +.. +.. SPDX-License-Identifier: BSD-3-Clause + +.. include:: ../include/distributed-ranges.rst + +.. _mp_distributed_vector: + +=============================== +``dr::mp::distributed_vector`` +=============================== + +Interface +========= + +.. doxygenclass:: dr::mp::distributed_vector + :members: + +Description +=========== + +Vector distributed among MPI nodes, with support +for data exchange at segment edges (halo) + +.. seealso:: + + `std::vector`_ diff --git a/spec/_sources/containers/sp_dense_matrix.rst b/spec/_sources/containers/sp_dense_matrix.rst new file mode 100644 index 0000000000..9c53ede378 --- /dev/null +++ b/spec/_sources/containers/sp_dense_matrix.rst @@ -0,0 +1,20 @@ +.. SPDX-FileCopyrightText: Intel Corporation +.. +.. SPDX-License-Identifier: BSD-3-Clause + +.. include:: ../include/distributed-ranges.rst + +.. _sp_dense_matrix: + +=============================== +``dr::sp::dense_matrix`` +=============================== + +Interface +========= + +.. doxygenclass:: dr::sp::dense_matrix + :members: + +Description +=========== diff --git a/spec/_sources/containers/sp_distributed_vector.rst b/spec/_sources/containers/sp_distributed_vector.rst new file mode 100644 index 0000000000..2c0f10aefc --- /dev/null +++ b/spec/_sources/containers/sp_distributed_vector.rst @@ -0,0 +1,24 @@ +.. SPDX-FileCopyrightText: Intel Corporation +.. +.. SPDX-License-Identifier: BSD-3-Clause + +.. include:: ../include/distributed-ranges.rst + +.. _sp_distributed_vector: + +=============================== +``dr::sp::distributed_vector`` +=============================== + +Interface +========= + +.. doxygenstruct:: dr::sp::distributed_vector + :members: + +Description +=========== + +.. seealso:: + + `std::vector`_ diff --git a/spec/_sources/containers/sp_sparse_matrix.rst b/spec/_sources/containers/sp_sparse_matrix.rst new file mode 100644 index 0000000000..f387e9ab02 --- /dev/null +++ b/spec/_sources/containers/sp_sparse_matrix.rst @@ -0,0 +1,20 @@ +.. SPDX-FileCopyrightText: Intel Corporation +.. +.. SPDX-License-Identifier: BSD-3-Clause + +.. include:: ../include/distributed-ranges.rst + +.. _sp_sparse_matrix: + +=============================== +``dr::sp::sparse_matrix`` +=============================== + +Interface +========= + +.. doxygenclass:: dr::sp::sparse_matrix + :members: + +Description +=========== diff --git a/spec/_sources/include/distributed-ranges.rst b/spec/_sources/include/distributed-ranges.rst new file mode 100644 index 0000000000..08da383a41 --- /dev/null +++ b/spec/_sources/include/distributed-ranges.rst @@ -0,0 +1,41 @@ +.. SPDX-FileCopyrightText: Intel Corporation +.. +.. SPDX-License-Identifier: BSD-3-Clause + +.. cppreference links + +.. _`C++ execution policies`: https://en.cppreference.com/w/cpp/algorithm/execution_policy_tag_t + +.. _`std::copy`: https://en.cppreference.com/w/cpp/algorithm/copy +.. _`std::exclusive_scan`: https://en.cppreference.com/w/cpp/algorithm/exclusive_scan +.. _`std::fill`: https://en.cppreference.com/w/cpp/algorithm/fill +.. _`std::for_each`: https://en.cppreference.com/w/cpp/algorithm/for_each +.. _`std::inclusive_scan`: https://en.cppreference.com/w/cpp/algorithm/inclusive_scan +.. _`std::iota`: https://en.cppreference.com/w/cpp/algorithm/iota +.. _`std::mdspan`: https://en.cppreference.com/w/cpp/container/mdspan +.. _`std::reduce`: https://en.cppreference.com/w/cpp/algorithm/reduce +.. _`std::span`: https://en.cppreference.com/w/cpp/container/span +.. _`std::sort`: https://en.cppreference.com/w/cpp/algorithm/sort +.. _`std::transform`: https://en.cppreference.com/w/cpp/algorithm/transform +.. _`std::transform_reduce`: https://en.cppreference.com/w/cpp/algorithm/transform_reduce +.. _`std::vector`: https://en.cppreference.com/w/cpp/container/vector + +.. _`std::ranges::copy`: https://en.cppreference.com/w/cpp/algorithm/ranges/copy +.. _`std::ranges::fill`: https://en.cppreference.com/w/cpp/algorithm/ranges/fill +.. _`std::ranges::for_each`: https://en.cppreference.com/w/cpp/algorithm/ranges/for_each +.. _`std::ranges::iota`: https://en.cppreference.com/w/cpp/algorithm/ranges/iota +.. _`std::ranges::sort`: https://en.cppreference.com/w/cpp/algorithm/ranges/sort +.. _`std::ranges::transform`: https://en.cppreference.com/w/cpp/algorithm/ranges/transform + +.. _`std::ranges::views::all`: https://en.cppreference.com/w/cpp/ranges/all_view +.. _`std::ranges::views::counted`: https://en.cppreference.com/w/cpp/ranges/view_counted +.. _`std::ranges::views::drop`: https://en.cppreference.com/w/cpp/ranges/drop_view +.. _`std::ranges::views::iota`: https://en.cppreference.com/w/cpp/ranges/iota_view +.. _`std::ranges::views::slide`: https://en.cppreference.com/w/cpp/ranges/slide_view +.. _`std::ranges::views::take`: https://en.cppreference.com/w/cpp/ranges/take_view +.. _`std::ranges::views::transform`: https://en.cppreference.com/w/cpp/ranges/transform_view +.. _`std::ranges::views::zip`: https://en.cppreference.com/w/cpp/ranges/zip_view + +.. C++ paper links + +.. _`std::mdarray`: https://www.open-std.org/JTC1/SC22/WG21/docs/papers/2022/p1684r2.html diff --git a/spec/_sources/index.rst b/spec/_sources/index.rst new file mode 100644 index 0000000000..f580e54175 --- /dev/null +++ b/spec/_sources/index.rst @@ -0,0 +1,31 @@ +.. SPDX-FileCopyrightText: Intel Corporation +.. +.. SPDX-License-Identifier: BSD-3-Clause + +.. distributed-ranges documentation master file, created by + sphinx-quickstart on Wed Sep 7 15:21:53 2022. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Distributed Ranges +================== + +Welcome to the Distributed Ranges Specification. + +.. toctree:: + :maxdepth: 1 + + intro + arch + concepts + containers/containers + algorithms/algorithms + views/views + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` diff --git a/spec/_sources/intro.rst b/spec/_sources/intro.rst new file mode 100644 index 0000000000..1888a4f154 --- /dev/null +++ b/spec/_sources/intro.rst @@ -0,0 +1,14 @@ +.. SPDX-FileCopyrightText: Intel Corporation +.. +.. SPDX-License-Identifier: BSD-3-Clause + +============== + Introduction +============== + +Distributed Ranges is a productivity library for distributed and partitioned memory based on C++ ranges. +It offers a collection of data structures, views, and algorithms for building generic abstractions +and provides interoperability with MPI, SHMEM, SYCL and OpenMP and portability on CPUs and GPUs. +NUMA-aware allocators and distributed data structures facilitate development of C++ applications +on heterogeneous nodes with multiple devices and achieve excellent performance and parallel scalability +by exploiting local compute and data access. diff --git a/spec/_sources/views/all_view.rst b/spec/_sources/views/all_view.rst new file mode 100644 index 0000000000..97bdc59209 --- /dev/null +++ b/spec/_sources/views/all_view.rst @@ -0,0 +1,21 @@ +.. SPDX-FileCopyrightText: Intel Corporation +.. +.. SPDX-License-Identifier: BSD-3-Clause + +.. include:: ../include/distributed-ranges.rst + +.. _all_view: + +============= + ``all_view`` +============= + +Interface +========= + +.. code-block:: cpp + + dr::mp::views::all + dr::sp::views::all + +For interface, see `std::ranges::views::all`_ diff --git a/spec/_sources/views/counted_view.rst b/spec/_sources/views/counted_view.rst new file mode 100644 index 0000000000..041b1138be --- /dev/null +++ b/spec/_sources/views/counted_view.rst @@ -0,0 +1,21 @@ +.. SPDX-FileCopyrightText: Intel Corporation +.. +.. SPDX-License-Identifier: BSD-3-Clause + +.. include:: ../include/distributed-ranges.rst + +.. _counted_view: + +================= + ``counted_view`` +================= + +Interface +========= + +.. code-block:: cpp + + dr::mp::views::counted + dr::sp::views::counted + +For interface, see `std::ranges::views::counted`_ diff --git a/spec/_sources/views/drop_view.rst b/spec/_sources/views/drop_view.rst new file mode 100644 index 0000000000..ad55422fad --- /dev/null +++ b/spec/_sources/views/drop_view.rst @@ -0,0 +1,21 @@ +.. SPDX-FileCopyrightText: Intel Corporation +.. +.. SPDX-License-Identifier: BSD-3-Clause + +.. include:: ../include/distributed-ranges.rst + +.. _drop_view: + +============== + ``drop_view`` +============== + +Interface +========= + +.. code-block:: cpp + + dr::mp::views::drop + dr::sp::views::drop + +For interface, see `std::ranges::views::drop`_ diff --git a/spec/_sources/views/iota_view.rst b/spec/_sources/views/iota_view.rst new file mode 100644 index 0000000000..e0aa6c790e --- /dev/null +++ b/spec/_sources/views/iota_view.rst @@ -0,0 +1,21 @@ +.. SPDX-FileCopyrightText: Intel Corporation +.. +.. SPDX-License-Identifier: BSD-3-Clause + +.. include:: ../include/distributed-ranges.rst + +.. _iota_view: + +============== + ``iota_view`` +============== + +Interface +========= + +.. code-block:: cpp + + dr::mp::views::all + dr::sp::views::all + +For interface, see `std::ranges::views::all`_ diff --git a/spec/_sources/views/sliding_view.rst b/spec/_sources/views/sliding_view.rst new file mode 100644 index 0000000000..de1e7c295d --- /dev/null +++ b/spec/_sources/views/sliding_view.rst @@ -0,0 +1,28 @@ +.. SPDX-FileCopyrightText: Intel Corporation +.. +.. SPDX-License-Identifier: BSD-3-Clause + +.. include:: ../include/distributed-ranges.rst + +.. _sliding_view: + +================= + ``sliding_view`` +================= + +Interface +========= + + +.. code-block:: cpp + + dr::mp::views::sliding + dr::sp::views::sliding + +Description +=========== + +.. seealso:: + + `std::ranges::views::slide`_ + Standard C++ view diff --git a/spec/_sources/views/take_view.rst b/spec/_sources/views/take_view.rst new file mode 100644 index 0000000000..0cd30e5bb4 --- /dev/null +++ b/spec/_sources/views/take_view.rst @@ -0,0 +1,21 @@ +.. SPDX-FileCopyrightText: Intel Corporation +.. +.. SPDX-License-Identifier: BSD-3-Clause + +.. include:: ../include/distributed-ranges.rst + +.. _take_view: + +============== + ``take_view`` +============== + +Interface +========= + +.. code-block:: cpp + + dr::mp::views::take + dr::sp::views::take + +For interface, see `std::ranges::views::take`_ diff --git a/spec/_sources/views/transform_view.rst b/spec/_sources/views/transform_view.rst new file mode 100644 index 0000000000..b9649a1d74 --- /dev/null +++ b/spec/_sources/views/transform_view.rst @@ -0,0 +1,21 @@ +.. SPDX-FileCopyrightText: Intel Corporation +.. +.. SPDX-License-Identifier: BSD-3-Clause + +.. include:: ../include/distributed-ranges.rst + +.. _transform_view: + +=================== + ``transform_view`` +=================== + +Interface +========= + +.. code-block:: cpp + + dr::mp::views::transform + dr::sp::views::transform + +For interface, see `std::ranges::views::transform`_ diff --git a/spec/_sources/views/views.rst b/spec/_sources/views/views.rst new file mode 100644 index 0000000000..6dd677b7d4 --- /dev/null +++ b/spec/_sources/views/views.rst @@ -0,0 +1,21 @@ +.. SPDX-FileCopyrightText: Intel Corporation +.. +.. SPDX-License-Identifier: BSD-3-Clause + +======= + Views +======= + +Views can reference collections of objects but do not own the storage. + +.. toctree:: + :maxdepth: 1 + + all_view + counted_view + drop_view + iota_view + take_view + sliding_view + transform_view + zip_view diff --git a/spec/_sources/views/zip_view.rst b/spec/_sources/views/zip_view.rst new file mode 100644 index 0000000000..86e4316657 --- /dev/null +++ b/spec/_sources/views/zip_view.rst @@ -0,0 +1,39 @@ +.. SPDX-FileCopyrightText: Intel Corporation +.. +.. SPDX-License-Identifier: BSD-3-Clause + + +.. include:: ../include/distributed-ranges.rst + +.. _zip_view: + +============= + ``zip_view`` +============= + +Interface +========= + +MP +--- + +.. doxygenclass:: dr::mp::zip_view + :members: +.. doxygenfunction:: dr::mp::views::zip + :outline: + +SP +--- + +.. doxygenclass:: dr::sp::zip_view + :members: +.. doxygenfunction:: dr::sp::views::zip + :outline: + +Description +=========== + +.. seealso:: + + `std::ranges::views::zip`_ + Standard C++ view diff --git a/spec/_static/basic.css b/spec/_static/basic.css new file mode 100644 index 0000000000..2af6139e6b --- /dev/null +++ b/spec/_static/basic.css @@ -0,0 +1,925 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 270px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 360px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +a:visited { + color: #551A8B; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +nav.contents, +aside.topic, +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +nav.contents, +aside.topic, +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +nav.contents > :last-child, +aside.topic > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +nav.contents::after, +aside.topic::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +.sig dd { + margin-top: 0px; + margin-bottom: 0px; +} + +.sig dl { + margin-top: 0px; + margin-bottom: 0px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +.translated { + background-color: rgba(207, 255, 207, 0.2) +} + +.untranslated { + background-color: rgba(255, 207, 207, 0.2) +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/spec/_static/doctools.js b/spec/_static/doctools.js new file mode 100644 index 0000000000..4d67807d17 --- /dev/null +++ b/spec/_static/doctools.js @@ -0,0 +1,156 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Base JavaScript utilities for all Sphinx HTML documentation. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", +]); + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); + } +}; + +/** + * Small JavaScript module for the documentation. + */ +const Documentation = { + init: () => { + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } + }, + + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; + }, + + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); + }, + + /** + * Initialise the domain index toggle buttons + */ + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; + + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); + }, + + initOnKeyListeners: () => { + // only install a listener if it is really needed + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.altKey || event.ctrlKey || event.metaKey) return; + + if (!event.shiftKey) { + switch (event.key) { + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } + }); + }, +}; + +// quick alias for translations +const _ = Documentation.gettext; + +_ready(Documentation.init); diff --git a/spec/_static/documentation_options.js b/spec/_static/documentation_options.js new file mode 100644 index 0000000000..fcc0cede1f --- /dev/null +++ b/spec/_static/documentation_options.js @@ -0,0 +1,13 @@ +const DOCUMENTATION_OPTIONS = { + VERSION: '', + LANGUAGE: 'en', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '', + NAVIGATION_WITH_KEYS: true, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, +}; \ No newline at end of file diff --git a/spec/_static/file.png b/spec/_static/file.png new file mode 100644 index 0000000000000000000000000000000000000000..a858a410e4faa62ce324d814e4b816fff83a6fb3 GIT binary patch literal 286 zcmV+(0pb3MP)s`hMrGg#P~ix$^RISR_I47Y|r1 z_CyJOe}D1){SET-^Amu_i71Lt6eYfZjRyw@I6OQAIXXHDfiX^GbOlHe=Ae4>0m)d(f|Me07*qoM6N<$f}vM^LjV8( literal 0 HcmV?d00001 diff --git a/spec/_static/images/logo_binder.svg b/spec/_static/images/logo_binder.svg new file mode 100644 index 0000000000..45fecf7511 --- /dev/null +++ b/spec/_static/images/logo_binder.svg @@ -0,0 +1,19 @@ + + + + +logo + + + + + + + + diff --git a/spec/_static/images/logo_colab.png b/spec/_static/images/logo_colab.png new file mode 100644 index 0000000000000000000000000000000000000000..b7560ec216b2d1b6f77855525fe966c741833428 GIT binary patch literal 7601 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 diff --git a/spec/_static/images/logo_jupyterhub.svg b/spec/_static/images/logo_jupyterhub.svg new file mode 100644 index 0000000000..60cfe9f222 --- /dev/null +++ b/spec/_static/images/logo_jupyterhub.svg @@ -0,0 +1 @@ +logo_jupyterhubHub diff --git a/spec/_static/language_data.js b/spec/_static/language_data.js new file mode 100644 index 0000000000..367b8ed81b --- /dev/null +++ b/spec/_static/language_data.js @@ -0,0 +1,199 @@ +/* + * language_data.js + * ~~~~~~~~~~~~~~~~ + * + * This script contains the language-specific data used by searchtools.js, + * namely the list of stopwords, stemmer, scorer and splitter. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"]; + + +/* Non-minified version is copied as a separate JS file, if available */ + +/** + * Porter Stemmer + */ +var Stemmer = function() { + + var step2list = { + ational: 'ate', + tional: 'tion', + enci: 'ence', + anci: 'ance', + izer: 'ize', + bli: 'ble', + alli: 'al', + entli: 'ent', + eli: 'e', + ousli: 'ous', + ization: 'ize', + ation: 'ate', + ator: 'ate', + alism: 'al', + iveness: 'ive', + fulness: 'ful', + ousness: 'ous', + aliti: 'al', + iviti: 'ive', + biliti: 'ble', + logi: 'log' + }; + + var step3list = { + icate: 'ic', + ative: '', + alize: 'al', + iciti: 'ic', + ical: 'ic', + ful: '', + ness: '' + }; + + var c = "[^aeiou]"; // consonant + var v = "[aeiouy]"; // vowel + var C = c + "[^aeiouy]*"; // consonant sequence + var V = v + "[aeiou]*"; // vowel sequence + + var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0 + var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 + var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 + var s_v = "^(" + C + ")?" + v; // vowel in stem + + this.stemWord = function (w) { + var stem; + var suffix; + var firstch; + var origword = w; + + if (w.length < 3) + return w; + + var re; + var re2; + var re3; + var re4; + + firstch = w.substr(0,1); + if (firstch == "y") + w = firstch.toUpperCase() + w.substr(1); + + // Step 1a + re = /^(.+?)(ss|i)es$/; + re2 = /^(.+?)([^s])s$/; + + if (re.test(w)) + w = w.replace(re,"$1$2"); + else if (re2.test(w)) + w = w.replace(re2,"$1$2"); + + // Step 1b + re = /^(.+?)eed$/; + re2 = /^(.+?)(ed|ing)$/; + if (re.test(w)) { + var fp = re.exec(w); + re = new RegExp(mgr0); + if (re.test(fp[1])) { + re = /.$/; + w = w.replace(re,""); + } + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = new RegExp(s_v); + if (re2.test(stem)) { + w = stem; + re2 = /(at|bl|iz)$/; + re3 = new RegExp("([^aeiouylsz])\\1$"); + re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re2.test(w)) + w = w + "e"; + else if (re3.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + else if (re4.test(w)) + w = w + "e"; + } + } + + // Step 1c + re = /^(.+?)y$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(s_v); + if (re.test(stem)) + w = stem + "i"; + } + + // Step 2 + re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step2list[suffix]; + } + + // Step 3 + re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step3list[suffix]; + } + + // Step 4 + re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + re2 = /^(.+?)(s|t)(ion)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + if (re.test(stem)) + w = stem; + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = new RegExp(mgr1); + if (re2.test(stem)) + w = stem; + } + + // Step 5 + re = /^(.+?)e$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + re2 = new RegExp(meq1); + re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) + w = stem; + } + re = /ll$/; + re2 = new RegExp(mgr1); + if (re.test(w) && re2.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + + // and turn initial Y back to y + if (firstch == "y") + w = firstch.toLowerCase() + w.substr(1); + return w; + } +} + diff --git a/spec/_static/locales/ar/LC_MESSAGES/booktheme.mo b/spec/_static/locales/ar/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000000000000000000000000000000000000..15541a6a375f93efed3f410c2f892174ba91aaa0 GIT binary patch literal 1541 zcmZvaJ!}+56vrn40$lhsA5n;v39lh z&UUPnK|(?lfROD&7suGxxK0yMQ@o*|gesy+5vu&(?mBh?qn-WTn|=G<|NZw~b#1&Y zus*}?#(shQ752{`;fA&4V5qyTPS`e-!60i}(%5{r(0^;D!zP`#V66yFspV7<>kvF5*86z5`j$ z=8ez}?gu^a8}Li;DtHLIQScsk0P*i2&-V)CK7WC%Q*07qAJ7GU4juvd{a%p0tQWim zeu4N7$oY#!{2XK-Ul-?ZLAIP{VE@?5Oee^5uV0WLc46~8yjT}6*2P}4uiOhI#i!V; zXZ>RTx%Xyl*phu;(K~`m+PV^FjkZeL1V5sYI1K7moHI9c!}v9+ja5U&{2;G|4YhWh zm^7}c{~g+Tn8?Tvl<2F47Nu9i{l>4L9=6uy?FAD0FiY3w(=eiIKTWvQbqOe&{(Wd5^qM9YH}dGcsaNzja& zq-k29Wt#nO;9At7wwrWQc-|J&abpO^Bu%@f8>dB@7kE5QPu!GiO4q{asH8bJN^P3Y zvv7uYJM=8C@P0OzYSB}gLot+ZNt#(-bAo@Zj6?Yfp?anYnoPQR?;I# z{we#%LHPn31obOfkF`-+I9KUX>gUj zW@~ literal 0 HcmV?d00001 diff --git a/spec/_static/locales/ar/LC_MESSAGES/booktheme.po b/spec/_static/locales/ar/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000000..34d404c6d0 --- /dev/null +++ b/spec/_static/locales/ar/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ar\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "طباعة إلى PDF" + +msgid "Theme by the" +msgstr "موضوع بواسطة" + +msgid "Download source file" +msgstr "تنزيل ملف المصدر" + +msgid "open issue" +msgstr "قضية مفتوحة" + +msgid "Contents" +msgstr "محتويات" + +msgid "previous page" +msgstr "الصفحة السابقة" + +msgid "Download notebook file" +msgstr "تنزيل ملف دفتر الملاحظات" + +msgid "Copyright" +msgstr "حقوق النشر" + +msgid "Download this page" +msgstr "قم بتنزيل هذه الصفحة" + +msgid "Source repository" +msgstr "مستودع المصدر" + +msgid "By" +msgstr "بواسطة" + +msgid "repository" +msgstr "مخزن" + +msgid "Last updated on" +msgstr "آخر تحديث في" + +msgid "Toggle navigation" +msgstr "تبديل التنقل" + +msgid "Sphinx Book Theme" +msgstr "موضوع كتاب أبو الهول" + +msgid "suggest edit" +msgstr "أقترح تحرير" + +msgid "Open an issue" +msgstr "افتح قضية" + +msgid "Launch" +msgstr "إطلاق" + +msgid "Fullscreen mode" +msgstr "وضع ملء الشاشة" + +msgid "Edit this page" +msgstr "قم بتحرير هذه الصفحة" + +msgid "By the" +msgstr "بواسطة" + +msgid "next page" +msgstr "الصفحة التالية" diff --git a/spec/_static/locales/bg/LC_MESSAGES/booktheme.mo b/spec/_static/locales/bg/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000000000000000000000000000000000000..da95120037f8d7c52ad1f166a7682ea55ca47a01 GIT binary patch literal 1708 zcmaKqOKcQJ5QaOv0vkhkhC?jT2nh&cNkBwFYxY90B_t3AOpcMpyUpy7b@wpSL+}lZ zc_s=RKte*|C2`<_7URcy7jLdPR->G9h;qvTamgjhjlX8bj}R-P?fIs=y6dm{dw*ZQ z?5@DG8KWEHSBxzfKYoB0o|Q|4z)!5gYX#T^t^_xLtH5sX6L34Y5iEo2!IR(`P=OzV zHs>hFdG3I#!TVqr_zYYJPUie2U;izi{|U0*KVSh|x->h#2IP4+$a!{vO>jTB41AmO zFOci|8~haPLhws)C%7B@Hs=rEKFpioR`3nD2VA{8JAV*le@=j0?>TT6cp2OVJ_ot4 z*WiBe50LY0LeuQ=S0K-igY45ea0fUFvgOv1JgO3NWrRpO`@TbYDa&#J04 z8uLU~YT|f^4W5=k94AWjM}bBXBl{2ciBp+gq(T!1)p!vCDOMX z%z7FyzF${Td*=h+vjIf3x?r>F4C`bfVWiFnCdtcQkUma)U!h8cPEd+Dt17m5q+0w& zMKQ9KWTsza{bH(IICkV%?|gjko-YcyvBiPmP?e-b0iTC;FVH=*QuCr%+4AXuzT$!T zeUYc*Gb$?f>WZlb+AqligMlp^^|YVB*ODCc3;p#Z^6JGt6Ai^Bsl#*{m-qF^?6bU6 z%dKU(_p_dYpa*V5&_n77dhBk}xVz~t(j+x#hMF`X=r)bH5$d>$?h>`ABk5bs2r;-dTfq#Q2#?t@q|9teP3*uNPWy^ACfqd~8<8}Y{+a1%CJzCK zxEruG6KALRIVJ-U$3Yy!~NpG7AK|w8QyPuG1485SvTmo%i zrHNb3JL61fEcXDLQBPwL`;mLLOPayeL#0F0B5ju4Yr5-c6aTq5cjf(V=MS}!0~aLI KlK*|VZ0$SA#iddJ literal 0 HcmV?d00001 diff --git a/spec/_static/locales/bg/LC_MESSAGES/booktheme.po b/spec/_static/locales/bg/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000000..7420c19eb0 --- /dev/null +++ b/spec/_static/locales/bg/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bg\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "Печат в PDF" + +msgid "Theme by the" +msgstr "Тема от" + +msgid "Download source file" +msgstr "Изтеглете изходния файл" + +msgid "open issue" +msgstr "отворен брой" + +msgid "Contents" +msgstr "Съдържание" + +msgid "previous page" +msgstr "предишна страница" + +msgid "Download notebook file" +msgstr "Изтеглете файла на бележника" + +msgid "Copyright" +msgstr "Авторско право" + +msgid "Download this page" +msgstr "Изтеглете тази страница" + +msgid "Source repository" +msgstr "Хранилище на източника" + +msgid "By" +msgstr "От" + +msgid "repository" +msgstr "хранилище" + +msgid "Last updated on" +msgstr "Последна актуализация на" + +msgid "Toggle navigation" +msgstr "Превключване на навигацията" + +msgid "Sphinx Book Theme" +msgstr "Тема на книгата Sphinx" + +msgid "suggest edit" +msgstr "предложи редактиране" + +msgid "Open an issue" +msgstr "Отворете проблем" + +msgid "Launch" +msgstr "Стартиране" + +msgid "Fullscreen mode" +msgstr "Режим на цял екран" + +msgid "Edit this page" +msgstr "Редактирайте тази страница" + +msgid "By the" +msgstr "По" + +msgid "next page" +msgstr "Следваща страница" diff --git a/spec/_static/locales/bn/LC_MESSAGES/booktheme.mo b/spec/_static/locales/bn/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000000000000000000000000000000000000..6b96639b726a2fa959a6419b6f8b7e0dfcce33ae GIT binary patch literal 1646 zcmbV~&5IOA7>8S2xE{WN>)mqrjbP_+ zD|`%n|9`+8@Gtlc{Cs5;eF=|2zkdOGUHYZ{3U0$*$xxrd?Ipj1NbvXay{#>+)sQwK zLc@BGr=Q8s@3s2pVyti%e$UVEm)Gmv@K$Kxb@iIkGQ)QH3Dc6%KAm>6q}ejje*L3r z>$oA5HgZzyAH?ybE$6p$-O1{5(WYr7xk%%tj7A!XA>+Uti*qA7X(KkWA+(Cd;*P4f zqC=@vB32^F^Nx(hvqTZ3#rXcw=x~uglc~-VqqA;wIBg~Bl-TQgnP|xqG73*IS+qW( zo6WWqDn6MsW0O!s$y282M*BKNku;Mh6WuA>9MAOkvTmve8r7pR%ZaLqqE6Ml~R{3$6RYz1^ zHxkvXiQSWlsf@*{*+H+Gm{gVVb|;J5)lr?D$ZJBS!OVxh8WP3p@HQnr8y3617^+0h zTGzYm>~GFKb#|8L(pyu`-gfp`;o|IhXQy$z<$9NR^WnYI&Q1wu?}S90&tc32?JEMg4wtZV(;LB0u<-^*y2)npB|JLL@f}SDrcO%Hi&xc%8I{oPgE$%7j?Kgl1>Fz ze@F9IjWZ|r@GsvuUE*t^AN05zoTs2{kFZmI~m25V-8`&>S^dPTx z$^cEyl^jJ+?oOKAsWhagj`qI>dC8~bzq_0hZSgC)LsF@U6+9F=tR`Ky;!WHMs_vF; z;&hv=3*2(}kGreju(wh1_KV>qMpKtu5HHORr>y#KY7MM6T^uJ&R^K(T z4hABYyJ6tQiOxVI^L*F1qO_S8am=vBunT>6i=$ATZdb3f&v8VJ2BK9Ft@hoIsQAhin!}wxzs(N*6pVu~DVqb08$hD1)Yjm|` zLS;tVxWMJrDAJYrr0_baPC1|EHL_WMn2%o?qrvC+h@~^*GMofV4`)o0LtLbidwpll9h6X)!5Y za@FKiW0X*mn3iX1k|l^w_?&_QX>NDCJM7-fGBbN{ zu90Yv ze2zJT`3vTkm``?L!Pxha5O~CXEFXgh!F}K{a6dQ$o&?W;$H6Xm6ub={0u}ff7#cnT z+0QfZQ*aGD2(E)iz#kj_+}M9>_J4vL?;Y3zckiz69|Czl1G1m9;7jl_xEK7Z;olA4 zfrnxL7yKGLyhn&Hz$@Tsa2Y%S-Uqp^$KWaO2ax0Z1af_E!2{s0AfNlAvHt_IJ_it- z&m9L@hqKN83dlMwfSm7Lkn7GsmYi+Vd*Crl_RV$g90)P3f&KE}ym+u5)|z$Y8sKu8 zBlmXaVEsAAPcR|Fw7=ro7!QS1iR;z`WrD|#V(fI1264kaFu9d685`8V+Kg6ouC~qI zmM&5s7(=Q(6*5s`F4h6A|KHA+dF~^pl%b)GmAEN=pt6W%P%&A9eQBapEEYH*4QcO7 zC3;R9II+~bF)xtNkjEETCX59u1`)=$+?iRns%x~9HOl3bCIBb~^g5yYs6 zq0Y{7oH|J1)JWU1NqdKTUnYq{mI{?16?;!bp}i2dzgNz~TZiiSZI0ibMsD3&xHY%^ z{^Gd{twz{(e_W^z1tf63$fY*36s6L66}rp)`S#WAb50t+qFj5Cn}I4y~Kg zBqen1P~=;^ymT^e&s#V29Wupq>${g`ss7ph#?V(?y7=vEOZ04vuGQ<}z{^y~66*P^ zno!}Y$w-Q&P)$-}%RuPqz&a}Is;MT!%#Nz{)Y2fgS=pT0Tnmc4rqvjN;Qj07&Ihjp zVvrB;Z*XvQD zxu;CEAr^xgZM{%PrEqqD`$N&!KBKt)RPHp%tyA?Xw}`Se37c!8k8_eTqth`htw3AZ zm~1S1a92z`@RU9C@Xu~NJj63$#L LZS{&p7>oY^Ev$2? literal 0 HcmV?d00001 diff --git a/spec/_static/locales/cs/LC_MESSAGES/booktheme.po b/spec/_static/locales/cs/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000000..c6ef469082 --- /dev/null +++ b/spec/_static/locales/cs/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: cs\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "Tisk do PDF" + +msgid "Theme by the" +msgstr "Téma od" + +msgid "Download source file" +msgstr "Stáhněte si zdrojový soubor" + +msgid "open issue" +msgstr "otevřené číslo" + +msgid "Contents" +msgstr "Obsah" + +msgid "previous page" +msgstr "předchozí stránka" + +msgid "Download notebook file" +msgstr "Stáhnout soubor poznámkového bloku" + +msgid "Copyright" +msgstr "autorská práva" + +msgid "Download this page" +msgstr "Stáhněte si tuto stránku" + +msgid "Source repository" +msgstr "Zdrojové úložiště" + +msgid "By" +msgstr "Podle" + +msgid "repository" +msgstr "úložiště" + +msgid "Last updated on" +msgstr "Naposledy aktualizováno" + +msgid "Toggle navigation" +msgstr "Přepnout navigaci" + +msgid "Sphinx Book Theme" +msgstr "Téma knihy Sfinga" + +msgid "suggest edit" +msgstr "navrhnout úpravy" + +msgid "Open an issue" +msgstr "Otevřete problém" + +msgid "Launch" +msgstr "Zahájení" + +msgid "Fullscreen mode" +msgstr "Režim celé obrazovky" + +msgid "Edit this page" +msgstr "Upravit tuto stránku" + +msgid "By the" +msgstr "Podle" + +msgid "next page" +msgstr "další strana" diff --git a/spec/_static/locales/da/LC_MESSAGES/booktheme.mo b/spec/_static/locales/da/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000000000000000000000000000000000000..f43157d70c63ff21b4385dc36cb73f5b14eb6b01 GIT binary patch literal 1304 zcmZ9KyKmG$5XKi02pkaJ&;+qGJPH$nD9}aMKoTh;K$JVu@15uDO?nzn&U>A+XM4Phfw-zKH#7 zA8uHO_6vba9LDV+coaMYo(2zt6W}@UGI$1TfTzGEa2zD?I2bB!f*j{Lcno|A9tB^6 zC&9NBKUV%PmHi!Ly?>3CQ(qR(uY!{wt8{eFL)2d+-GK0XzbJ2D#pEAm_OQa=bqv z>yEt{#_?I3XFI&O|2#v^6KxpGSKQga zB|}Q$t~G&7@Oa2KoKDgpX6$2=SrtoT1GTMPm0g|DuG`zfb!d+>q}t0|B_w8J9T57T zIag$v?>HhOdp0JqpnQ-;9;-mHv<7xzI;nV=;{#=+_P!vo=(Ir)D;H<{wy4q`3h#>~ zA!JFY1gY2+>V#-Mj+V)JM61hEKVto8pj^8@e}8uO{nYgvwW_gEYa^$+3`k%y&y+UP zvXd(3DKs9n=AzrX-#KM`ms~V!IyTlOsmt4K9cl~8BnA3fm$9lXW`$E(G-qAU*QLn^ zrf=MwmgQsPs*#r(a_ZW2O)OJ9*z+b%Z59igr)teR+B0C^wn>Bm@6LBsXEFWfiOCp} zUSoVqXi7p(4!JPl*su1tkyFr_56Z-%sbe(I4#o^g{#-PJazXT;wvB`*ceb5TPdvg| zr`IHo4yJvN)iV_A{*4(42I?u%!cD5KXs+sR7@qEf{)q=$-v3Mo~pNRgs6dB45A_~g;fK07nJ@Atd!PtN@)FuuTCzw-;3=>No&-0+;~;^bfwAQikaeDcpMpPw z$G{ih3Gh|R-`o9n?fMUp?fnCGz(a>7-ya8gy#TV#x8N_}HSiTa&9^9*#YUsChPKG9Ug3-wb>5ahNSoell`9^ zoCmHU$Afe<^%ebHTryT9ZaN#u#(;-<*Xy#1V#z(Q#;HPD7is9+wj60gd)vV!pVPk0 zSm_{ZRgzdPbcFPDxsr?txhJx6>8J8fdK zt=*csGQxpNwNctG%DhrOQ0(2=TFGwgz2}t;Bl6j@&0V2w*_AhjI(F8SEfezEl?8P+ zO!CTPE6$HYSK7K+hThdhIeF}TXXUw`ymDc&BbHF5O7u~OM`4rK)5Mn;Zwdn zburuA-y2y!aDY4^_ YHT)aX(-~_xf`&nTEYd88)4;9x4>RdeS^xk5 literal 0 HcmV?d00001 diff --git a/spec/_static/locales/de/LC_MESSAGES/booktheme.po b/spec/_static/locales/de/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000000..4925360d43 --- /dev/null +++ b/spec/_static/locales/de/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: de\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "In PDF drucken" + +msgid "Theme by the" +msgstr "Thema von der" + +msgid "Download source file" +msgstr "Quelldatei herunterladen" + +msgid "open issue" +msgstr "offenes Thema" + +msgid "Contents" +msgstr "Inhalt" + +msgid "previous page" +msgstr "vorherige Seite" + +msgid "Download notebook file" +msgstr "Notebook-Datei herunterladen" + +msgid "Copyright" +msgstr "Urheberrechte ©" + +msgid "Download this page" +msgstr "Laden Sie diese Seite herunter" + +msgid "Source repository" +msgstr "Quell-Repository" + +msgid "By" +msgstr "Durch" + +msgid "repository" +msgstr "Repository" + +msgid "Last updated on" +msgstr "Zuletzt aktualisiert am" + +msgid "Toggle navigation" +msgstr "Navigation umschalten" + +msgid "Sphinx Book Theme" +msgstr "Sphinx-Buch-Thema" + +msgid "suggest edit" +msgstr "vorschlagen zu bearbeiten" + +msgid "Open an issue" +msgstr "Öffnen Sie ein Problem" + +msgid "Launch" +msgstr "Starten" + +msgid "Fullscreen mode" +msgstr "Vollbildmodus" + +msgid "Edit this page" +msgstr "Bearbeite diese Seite" + +msgid "By the" +msgstr "Bis zum" + +msgid "next page" +msgstr "Nächste Seite" diff --git a/spec/_static/locales/el/LC_MESSAGES/booktheme.mo b/spec/_static/locales/el/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000000000000000000000000000000000000..fca6e9355f314677f2890f5679fd79dd67a7a5a2 GIT binary patch literal 1722 zcmZ{iPiS047{Euewt4U5n=fkKPHMz8X+JKcS{dGGPw+nU_c zCZPt>L)D-XMN9P{m<`*yO}BBoS3#I}@#Mj)Cp~!cBL2SFE!h-0?96ZHoA3Yk{@Ax; zMX{b{53_$`KhIu%fP=N`L8bVq-5d|WJ#ZJ?4|l_1_!N8@J_(C(AAASyg$6zb(>@oV z`1uSz3RmGC_yc?b-t6<2zWn$8{ZAG}N=-3*|lx#m@-51&_iV@GtlX{0B;& z|G|Us0FOuETkutwLXlsEZ^B>UVYqXrQitFhQ0g-9MK}YWfvbJC;B(wFD1G=Fz66IT z_E|X6=LsnC_o4J>9*)3IptM|SkT~LFKU;E^x(64jsmIx3FH7o|CH<3LOJ5JLNx{`F zvmIQ7ax;7w(hfIYb$phePOCsWALdpYv;G zOPqxDxMc1Trd2=DkykNltn8<_zIz?7*J?>AHYU*1VcDqDUXtp1RQ6I+)?vWC9+ax; z?Fa=g(0-ECjhcx404JfII61D)_Tt4R3KKsK<5_h!s`|lJua|GifioP~!B0M6o&VhxLBi1MZW0rDDj^PzkAoADB{_KUL1ZXW|5J z1>K9Em-u-XId|sNnX#?+BZm&>`i;#`&PJx7QxbSBs(F4es!LTbPE1;ScXB*`Y)dcp zg5;cu^J76NEc-#FppQ-YY3{TaRO_9ar-jjaZW8iNR~zWhPCd z!IGORj47br#qth1q_-xG*Y+m$QJl1ldYsi|#&y>pn)3O}2r<588%%~cb6DJv&M0zR z6Ju?!Gpp;aJ2H>n=Q;4)9QX)UBsQv>oVXExo49XqkvY35v_#)clq&D(UelG*<`bgE k?KNN}BbD^J+2#A$4_2dkCejtU)5(_TEbrUqDh*fv19*CpTMYflop9djWEuuR*>)1Ua4$Am958?gqbuT!-Hv=RLl? ztm83|e|Hk(lCvi7xt0eoxwahd<^hR9n|*n(9}lh{d$2y|1j)ji^V&Q(5ANYkOq8Lh zleoHqM}{7WYt{rZ!Q&-caXRS*F>UXd)T&q-8)(7WzFgEPZ5(@>yDt567<$^vOeG|m zu?~=4-?s8J^<76~z&terQmeydOn{H3s$Z$a!slCrhw4F8(v9dkg67!{> zqs)38tXmQDSx=k0@+!yH>Cu2hvC4%qr;bgMl%!G1I#EHx#L(SPMrYZlG|3z-YnxYL zZ<6X6Bk3-!Gg!U#kimbyhN}%YXpR zWvS9;N_Kn7c?ykNomO;Zym7(o#sxZQOml4 zuS=5^Ti>`iCCk^wX(LZG)Bqh@I0@tnvqcu0^K+ literal 0 HcmV?d00001 diff --git a/spec/_static/locales/eo/LC_MESSAGES/booktheme.po b/spec/_static/locales/eo/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000000..f7ed2262d1 --- /dev/null +++ b/spec/_static/locales/eo/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: eo\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "Presi al PDF" + +msgid "Theme by the" +msgstr "Temo de la" + +msgid "Download source file" +msgstr "Elŝutu fontodosieron" + +msgid "open issue" +msgstr "malferma numero" + +msgid "Contents" +msgstr "Enhavo" + +msgid "previous page" +msgstr "antaŭa paĝo" + +msgid "Download notebook file" +msgstr "Elŝutu kajeran dosieron" + +msgid "Copyright" +msgstr "Kopirajto" + +msgid "Download this page" +msgstr "Elŝutu ĉi tiun paĝon" + +msgid "Source repository" +msgstr "Fonto-deponejo" + +msgid "By" +msgstr "De" + +msgid "repository" +msgstr "deponejo" + +msgid "Last updated on" +msgstr "Laste ĝisdatigita la" + +msgid "Toggle navigation" +msgstr "Ŝalti navigadon" + +msgid "Sphinx Book Theme" +msgstr "Sfinksa Libro-Temo" + +msgid "suggest edit" +msgstr "sugesti redaktadon" + +msgid "Open an issue" +msgstr "Malfermu numeron" + +msgid "Launch" +msgstr "Lanĉo" + +msgid "Fullscreen mode" +msgstr "Plenekrana reĝimo" + +msgid "Edit this page" +msgstr "Redaktu ĉi tiun paĝon" + +msgid "By the" +msgstr "Per la" + +msgid "next page" +msgstr "sekva paĝo" diff --git a/spec/_static/locales/es/LC_MESSAGES/booktheme.mo b/spec/_static/locales/es/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000000000000000000000000000000000000..ba2ee4dc22148ed53f2aeba32c5965654d4a5a2f GIT binary patch literal 1396 zcmZ9Kzi$;s5XU#z;m3pU!zKwxjKJWQQZ~wEO{|$=X8*l*5%yj3EgEC(L#m|@E3-CIKPyLHQ^!@|o{A*Bj z4$La`8F(5z16~6q{%=5u|2}vYjQ#o}@F?a_K{@|BDEE2^ehj_>C4c{bvhUD`U0&uv z*?$p~_`U+=+!`qRz6aYpfs%6BBl;4{Ji6po;@;mNp-!U9Icai#X`&;(C9e__T(%nW zw)>mpL*DQZy5tBcRcdJ)pH3yKo8BdMDdMNz4yGuRTJ{f|^^|Mp6HmSWQEwW{d*1tzb%mTC1mCsq-qL_43=ae|t-eKOjtW>vaY#^sij18-e zU>uxyy|KKi?sj^CYadPWVO!m;OXD8uC5dfPa>c40^|ZUw#21BS?P$vslng{1KTKV8 zUUWKW55MCO;ccWl{h{a&Tjjy}+WN}g`qfKU z27O|OlkJ*EIw63|wI$;gbyiY{oW}PitHT?6`vSSR$zizSGM^h)jP#AENrPMDiUxTd zX^w*p+XS-1RUfK2(ynf&aeQr2cfaHFPM;g=s}~jrYQqQVnr;8cCiiNY181d=I%iD{ zk_k)9C=?Vlg{(ANUY4?kat==RzrVWKpj=Q5{Q{y&B&juy+NY=9viqbpt^2(7Sd&X+ zE$PfxwdF+Wo=v7AO<8KlnjOl_?lY%ZD#GnhWgz3#*VABvZk(=zpIWX+tyOg}6^wXC zsg65u%fhre9yJUf6KusrthQzv+672++(cecEV5X4sri<+xahTU@tQ2Tj8rs5BN4#T iU!*-mQ^Nsab@xTRCJqKkd{;ciD^w4Rh!536LH!R)!cyS? literal 0 HcmV?d00001 diff --git a/spec/_static/locales/es/LC_MESSAGES/booktheme.po b/spec/_static/locales/es/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000000..5e0029e5f7 --- /dev/null +++ b/spec/_static/locales/es/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "Imprimir en PDF" + +msgid "Theme by the" +msgstr "Tema por el" + +msgid "Download source file" +msgstr "Descargar archivo fuente" + +msgid "open issue" +msgstr "Tema abierto" + +msgid "Contents" +msgstr "Contenido" + +msgid "previous page" +msgstr "pagina anterior" + +msgid "Download notebook file" +msgstr "Descargar archivo de cuaderno" + +msgid "Copyright" +msgstr "Derechos de autor" + +msgid "Download this page" +msgstr "Descarga esta pagina" + +msgid "Source repository" +msgstr "Repositorio de origen" + +msgid "By" +msgstr "Por" + +msgid "repository" +msgstr "repositorio" + +msgid "Last updated on" +msgstr "Ultima actualización en" + +msgid "Toggle navigation" +msgstr "Navegación de palanca" + +msgid "Sphinx Book Theme" +msgstr "Tema del libro de la esfinge" + +msgid "suggest edit" +msgstr "sugerir editar" + +msgid "Open an issue" +msgstr "Abrir un problema" + +msgid "Launch" +msgstr "Lanzamiento" + +msgid "Fullscreen mode" +msgstr "Modo de pantalla completa" + +msgid "Edit this page" +msgstr "Edita esta página" + +msgid "By the" +msgstr "Por el" + +msgid "next page" +msgstr "siguiente página" diff --git a/spec/_static/locales/et/LC_MESSAGES/booktheme.mo b/spec/_static/locales/et/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000000000000000000000000000000000000..983b82391f499b67a9046c15d0dd8744650ad925 GIT binary patch literal 1341 zcmZ9Kzi%8x6vqb=^5gOYNC*@$VrY^ev%C-5~0q6cNoSQvQHcDIz*5N(ux8-*>yj7Nec{?37 zm@hCt!hG}w7K~$WDuqWK$8rQb2_6H_g2%xn@O|(C_#QX{&wyWnr$GYW22;<6py+%D zo&tXWPl7*z?}ESdeBSTB?Csw{@%I-v01qANzCR6$y#$KRMeqsu1$Y$v1AGho6Fdz5 z4az++J_JsIlKZFNIq(K3aoh#Zg45o90E(Y)LCNb!P;`Fo`2>{wpMm1IA0b zcW{Vb>7mpIdO`vjME%rCbb#Z zLB#9Ln`>&T^B1V~k&_R*YOAf;-PhM8wsB1jsl}?dyPU?psw`<|W?Y%XaN_8G>Z0@F zr*qN&8_XbscI- zgH4-*vBjDXO&n_1F3dRkd|7v|qf1VIJknP`Sstj{^T%OktXj#ancCu*yH}n+<|;=N z-jrOCj`OFMOqk`wddINU##;0GR19tBdvzi?e7zruw52+Aw>NT5Q%F&X%h*Lj=6f7z z8jNuq=-IE#jk<#c{m?m+L;rJ$825O_Nq(D^8CKl}zio+{#UD_z^uJ)WVl7Wi?YTr` zTRZHgk)aH+jLK4D)OfM3BNeE1ohJ(1utQX6H>rE`y-+P|2~e4t1fZw$r;!^}gUIe5 P_MW2m5}a<3ol*Y+f5$~k literal 0 HcmV?d00001 diff --git a/spec/_static/locales/et/LC_MESSAGES/booktheme.po b/spec/_static/locales/et/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000000..8680982a97 --- /dev/null +++ b/spec/_static/locales/et/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: et\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "Prindi PDF-i" + +msgid "Theme by the" +msgstr "Teema" + +msgid "Download source file" +msgstr "Laadige alla lähtefail" + +msgid "open issue" +msgstr "avatud küsimus" + +msgid "Contents" +msgstr "Sisu" + +msgid "previous page" +msgstr "eelmine leht" + +msgid "Download notebook file" +msgstr "Laadige sülearvuti fail alla" + +msgid "Copyright" +msgstr "Autoriõigus" + +msgid "Download this page" +msgstr "Laadige see leht alla" + +msgid "Source repository" +msgstr "Allikahoidla" + +msgid "By" +msgstr "Kõrval" + +msgid "repository" +msgstr "hoidla" + +msgid "Last updated on" +msgstr "Viimati uuendatud" + +msgid "Toggle navigation" +msgstr "Lülita navigeerimine sisse" + +msgid "Sphinx Book Theme" +msgstr "Sfinksiraamatu teema" + +msgid "suggest edit" +msgstr "soovita muuta" + +msgid "Open an issue" +msgstr "Avage probleem" + +msgid "Launch" +msgstr "Käivitage" + +msgid "Fullscreen mode" +msgstr "Täisekraanirežiim" + +msgid "Edit this page" +msgstr "Muutke seda lehte" + +msgid "By the" +msgstr "Autor" + +msgid "next page" +msgstr "järgmine leht" diff --git a/spec/_static/locales/fi/LC_MESSAGES/booktheme.mo b/spec/_static/locales/fi/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000000000000000000000000000000000000..d8ac054597c924e3010f629caeac1c748b7211cd GIT binary patch literal 1368 zcmZ9KJ#5r46vquMU&lA4Af!r|g^wXX5kqz52B58kprWEjclYv|xbfLh>>S*}#K;Cr ztS2O9B*cCTVrBw~l?gF1AR)y6B`K}2;{5K}=lB1=7k@o5`BGq<#+lRCrOA1CaQ!^kKlhsTrZJIH9K_^ryK`_q_#3i5+EIO9achW2 zhLpr@X9L;b@gpA=I!S|AaF48UDwfs-T6Zp!8`{wJvUg?CqyH8|s=drrLSix20jamb zrP3JRD~PP@yO_j1<%2BqSOtouvxrOEOU3;he^6Fx?@JOZg|3?XUWo3*(Ha#V+1j$!k61sdlv~SpmKV48XD?rEHI0qB!<^bOz`&KTmRqe+kV}^cf!#bT&>G1)AQnFuaA9SXR zO>~T6=Ywl@%y^W>^xt9_kNV@0^m3c4B9BMrgfh( zuVp?S>46Ru!ccTe7eieYS*GF0;G*3eAeplXnZCllffvOWA=>i5w+5yH-zgk~ao1dl zs44(@M0}Rt9Mp|iQ#yrKbuAq3msY|P`l$x0E<_Em{7-o?CS$aPMpfmO5T&sTb;r2u H66VBTf3Z^G literal 0 HcmV?d00001 diff --git a/spec/_static/locales/fi/LC_MESSAGES/booktheme.po b/spec/_static/locales/fi/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000000..34dac21839 --- /dev/null +++ b/spec/_static/locales/fi/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "Tulosta PDF-tiedostoon" + +msgid "Theme by the" +msgstr "Teeman tekijä" + +msgid "Download source file" +msgstr "Lataa lähdetiedosto" + +msgid "open issue" +msgstr "avoin ongelma" + +msgid "Contents" +msgstr "Sisällys" + +msgid "previous page" +msgstr "Edellinen sivu" + +msgid "Download notebook file" +msgstr "Lataa muistikirjatiedosto" + +msgid "Copyright" +msgstr "Tekijänoikeus" + +msgid "Download this page" +msgstr "Lataa tämä sivu" + +msgid "Source repository" +msgstr "Lähteen arkisto" + +msgid "By" +msgstr "Tekijä" + +msgid "repository" +msgstr "arkisto" + +msgid "Last updated on" +msgstr "Viimeksi päivitetty" + +msgid "Toggle navigation" +msgstr "Vaihda navigointia" + +msgid "Sphinx Book Theme" +msgstr "Sphinx-kirjan teema" + +msgid "suggest edit" +msgstr "ehdottaa muokkausta" + +msgid "Open an issue" +msgstr "Avaa ongelma" + +msgid "Launch" +msgstr "Tuoda markkinoille" + +msgid "Fullscreen mode" +msgstr "Koko näytön tila" + +msgid "Edit this page" +msgstr "Muokkaa tätä sivua" + +msgid "By the" +msgstr "Mukaan" + +msgid "next page" +msgstr "seuraava sivu" diff --git a/spec/_static/locales/fr/LC_MESSAGES/booktheme.mo b/spec/_static/locales/fr/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000000000000000000000000000000000000..f663d39f0faa76c5b9bd504c51252eef74cca5de GIT binary patch literal 1412 zcmZ{jJ!}+56vv0pm9t{vhm&8^IIO`h6wqyy*798~B-FLeKdo!!~aIl*+ zlr)i&DosjGX-Sm+nxs!ffzqWyh>mpmzuUEJBQe_9-_FOq|NFX^vnPL27*{aoG5^N= z4D;zRyf9{tD}_g$!Rs`57MuYuf@i>a@G^KEoCEvdEO-|@2Qqjbj4hvlV&_NjBk*VN zEI0-~27hn)XS@HRUH=P;-hW^RJaMA={W(z9^Pt$d0saAg1L9Gy@DjZ@;0NGaQ2bFR zmAVF8043f<@DuPZcoBRAia+0jpMpPtqW^1q{u?N9{{>2%|FrAZpu~0hRC7KD%K8iN z5_lUFyPKf+qrt170VU-UgXB+gDSn8C=pG)BP!}*oSBAtdL+nayq9N(OOB9IrIvT`P%K$}>uh8j13v0qZ;CRi75AO3oX*L*$lK06qM@nyU^}?vGk#|? zmL^cG3s$SSi7>stTuW6IGS6&j2uDVy3#y+NH@oiA@h}HB>+f7UZR}>YK)jOup(LluVV6L*Ln| zlGjyt&G}L2k*%l8&|h4l=Cgm((zQMpFVk1~#tn>=qIhM|}`x`)$>jU}ieUbVvBn#nWIG%|r{ z@(VpgvBl*|+YE)ZQEjFj&wG?C)!uDalV>RR`l$A11nWA{5XsPS+9@lOaXon+Y2Ue0 zE>oVUGO*E>4ZSkmuAAH}>yV{N!q_?5zAzp!&O#! TA2+cw{Vw>h7Yg+MtLz81? literal 0 HcmV?d00001 diff --git a/spec/_static/locales/fr/LC_MESSAGES/booktheme.po b/spec/_static/locales/fr/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000000..8991a1b87b --- /dev/null +++ b/spec/_static/locales/fr/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fr\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "Imprimer au format PDF" + +msgid "Theme by the" +msgstr "Thème par le" + +msgid "Download source file" +msgstr "Télécharger le fichier source" + +msgid "open issue" +msgstr "signaler un problème" + +msgid "Contents" +msgstr "Contenu" + +msgid "previous page" +msgstr "page précédente" + +msgid "Download notebook file" +msgstr "Télécharger le fichier notebook" + +msgid "Copyright" +msgstr "droits d'auteur" + +msgid "Download this page" +msgstr "Téléchargez cette page" + +msgid "Source repository" +msgstr "Dépôt source" + +msgid "By" +msgstr "Par" + +msgid "repository" +msgstr "dépôt" + +msgid "Last updated on" +msgstr "Dernière mise à jour le" + +msgid "Toggle navigation" +msgstr "Basculer la navigation" + +msgid "Sphinx Book Theme" +msgstr "Thème du livre Sphinx" + +msgid "suggest edit" +msgstr "suggestion de modification" + +msgid "Open an issue" +msgstr "Ouvrez un problème" + +msgid "Launch" +msgstr "lancement" + +msgid "Fullscreen mode" +msgstr "Mode plein écran" + +msgid "Edit this page" +msgstr "Modifier cette page" + +msgid "By the" +msgstr "Par le" + +msgid "next page" +msgstr "page suivante" diff --git a/spec/_static/locales/hr/LC_MESSAGES/booktheme.mo b/spec/_static/locales/hr/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000000000000000000000000000000000000..eca4a1a2842830f06bd5f6235bf01d07bdd313d2 GIT binary patch literal 1402 zcmZ9KJ!~9B6vu}+kmLvh)-Bbu!YZ&sL*)#Wq0oOW>)iY z#I7UJKoJQlD$3MIh{}~uqNJdrprN2bqC$d-|Jz;1r;K*?xAU?8_kVBZ_tmrCDzsP8 z*U*1Oe;xg+XYfKhe?}=h>H=QRffvE^;1%!!xCXugz6HJv4#8FMQ}7bV;EQ1F_z)DG zZ@?G8@4$=TWAG*L$BsXD^S^cDKS7E2FW3WDR@(nBfihkLMdxksC-6Fmt?DmO{`(sg z-~WN)YvpX4?<)8j#_OQu@i8cQeBP}`P-^oC6rIQ5W$*{^dGHvNe1GZqM>qcuD0MvZ zY`gv@DF5B)#v@RCe+FI!b5KeyIf$NkxPmU8B<^y9bfYDCNE01tQa`D+)KxSg*?1KH z%T4MpwK#{4ax`^Pw+`@7ELnZzY-Ae)KI#K+iZZI(?h9Kvos)Hu_nn*4eN*x2ba2UM z{M2MDO`uvAtTuBKA$>9&rK$>r--+ODxdTQVUeRy*EU zh&bB0JyN@EJkPZYCOUthcI(pE2XsrkjZ2=fYTmTp<}`LiQ88IPH-(M{K`cLrtve@i z+90*(xpAqpy(Aw}Q7~LGGJzF0;VkyI^8P*c0crzk0e zJ5}W`eCg#p>R8HV8p8`ORd-?8+@kgmPE(NjB4ZRZpsbXo1{+%JywM17c0!7$ZS zdp+04j?>}H5RL>u+?)6`B(!QC;nQ(E%YYHwOi5)9EgF2Tundr{ymsm2Z;f2mKh k(#nYgw(f}olqHrfw@Z7L48TfWxy6y8Q4`jSBkXa^hFIaGO(a}_Drr&ngPIpyPhwkKtCW1zS zxtWoenhB;xBBn-yn24D8zwTalu&Ao9Uv<5s{`Yli#|wdR9BT&a6V_?0r`xb$Ol}tf zQ|!UE3)}}zg45t0a0WaEo&}G9U2qD#3myOoJP3w{Pe6|I9NZ7S1owfj!NcI&h98>q z&yD>JoIl_+xD%H+@5zQ2!9%dS z4R3=dU_S)+f*T;`dD8G1$o{WD_Im?z{P&Ih5#&5yK-S?0$ohz#wGPuD`<((=a*oaa zSxfd~Z8_ffK#0nR_2t3u=fQPw4%YQ37D84vb8p87>(4#hjm4TkQX%F>m@;G}=B){2 zg2zWWayrd|Sg?;xZdD?U4b-=GDA#mOTgTo;H=zFxL#DkfRZ3zp(E*`1&83*aj(wjsI*=O>qg>UnQ5~j z=eV|BMg@s#m;L%pJ)5RENuwU=R0WMBhBiW7o#i}rlG4#5ZDUjRSa=`Plu#w%B`C$N z(;&2$llB909??3o&fn(z?J9F?WqD;KhDS6Yp*?cS)QjtnT^a+xb_X5}DL&Qs{# z?=7`&Y~6Fp_%(9vMKiF8HfcxR=o0auv z_q>s3y7KCU*_ODI6J+IW*=v!hp&aNkC~@B;F{`@wufgMIJ{Em)%}J(mRd82~uKPNE zu!45VT#b~I5H)6^M@|hh?PQ`$a((5ZmR_kKRwzf4qZ=wC=HgJvLU}~a#5@JmHKeM~ zcQ+dhueyjH6-vS(Hi{zy4lKXvX09`YYnog=urAe8uFQH2W~4-u2I{*$(n5sIJAG7C T@Rc+s5Lgrh10CRyRonjp5+F85 literal 0 HcmV?d00001 diff --git a/spec/_static/locales/id/LC_MESSAGES/booktheme.po b/spec/_static/locales/id/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000000..b8d8d898ee --- /dev/null +++ b/spec/_static/locales/id/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: id\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "Cetak ke PDF" + +msgid "Theme by the" +msgstr "Tema oleh" + +msgid "Download source file" +msgstr "Unduh file sumber" + +msgid "open issue" +msgstr "masalah terbuka" + +msgid "Contents" +msgstr "Isi" + +msgid "previous page" +msgstr "halaman sebelumnya" + +msgid "Download notebook file" +msgstr "Unduh file notebook" + +msgid "Copyright" +msgstr "hak cipta" + +msgid "Download this page" +msgstr "Unduh halaman ini" + +msgid "Source repository" +msgstr "Repositori sumber" + +msgid "By" +msgstr "Oleh" + +msgid "repository" +msgstr "gudang" + +msgid "Last updated on" +msgstr "Terakhir diperbarui saat" + +msgid "Toggle navigation" +msgstr "Alihkan navigasi" + +msgid "Sphinx Book Theme" +msgstr "Tema Buku Sphinx" + +msgid "suggest edit" +msgstr "menyarankan edit" + +msgid "Open an issue" +msgstr "Buka masalah" + +msgid "Launch" +msgstr "Meluncurkan" + +msgid "Fullscreen mode" +msgstr "Mode layar penuh" + +msgid "Edit this page" +msgstr "Edit halaman ini" + +msgid "By the" +msgstr "Oleh" + +msgid "next page" +msgstr "halaman selanjutnya" diff --git a/spec/_static/locales/it/LC_MESSAGES/booktheme.mo b/spec/_static/locales/it/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000000000000000000000000000000000000..53ba476edd2df2a802917e9df402257ceca1a130 GIT binary patch literal 1403 zcmZXSJ&aXF6vsyafhY1QYQiQS8W$5EU!j1vc?Gb$351Os-eM!oynD~ycVOPkWoGWm zTH9#}m5qrNiM6q@vN55xvLLatGO@6+(D*<1-gP%Hxii0e=Htvc|2Z#C?tf~~-bG(P z{{{Vh^sipSfOhD0WAK^77~TMnfQP_S;9+n9db5tC&9bmQINr7VD9+^sD7S+ zZ-HNfN5E&`3Gn-#Klk&$_V(|f-uE{+0Qc?d&L0KUUI5k4BKQM%1;keK2Z+!7i9yf* z1s(_g1vTGe`;B=I{0KY^u7H})r~P~cRhutC&HGzW&wmGM{6B(v?m2h{{0%$^{sW!` z4;<+7S_JjnwcfrBYTWn1Q(y(ER@tjRN(zMHIBUF`R@^(uqn+2D6ew@4L zg5J|zQb*pB(DY&Nai5y1VnoTv1fhfnT;$=ca`*|y1aBki?jP#?!}jLE+O4&f-Stc7 zFAjQPha1~9k0>L63$?T2m#CQ8m^hE`ZLAKj?(U1$r%jH-6<>r>d^Mu0Q^|un)>jR5 z9TALm*F@`vt0B(QhBFUgSr)TwUH`yMh9yxlG%Xix0~y&& z3LB-cB(8l-D%nxCMbU^4uPmkzD-_D^sYeYovZ|_hYt|6+raF6N+B(TUeM703ahwOj z!*UGfp34HuR+WV4?HsPL=1>m45R2fh*HNhPRL3xNJhx_&?Yu^?zAcKo|5pQ*LIIU4 z9%X=yZ5mFd5t*`cmL{7}b7xJ=^_*qP(gmDLw)@AXu2??D^RnquqSO=xr-aR>O-k3u a)*Q3l*@6-(xNK#4xqhOgLbT*tS;gN$Zm<*V0gr*F!6RT6JPeM4`#}XB0Byp@Am^!p`@mOV z7q|)@0zW4Fn)rVt_HU5uZGb6o$Bx$f{UF;tAm=#)eg-dtd%-^-*V_PDx7aDf37`|? zeoukD;5CqS=MqLB_wxkgxVgmt1?-0X4dj{qO1J@X+@W2qe$Rs(cQvs`6FUcTpOYZ# zd6M|6Adj4TU>#hW-}7v_@AidK;vhE9mlyZXi}UiVd9FvXkushE>ug^<53aoj8)J$8 zzT$crKWU3f+%VcIZ9^RVa^Sf|D{h)8T{2EVYGYN-m<~=w|xXST6$p^DKQdw8cB>C zxj87tTJ-|uo6xf+D2p+_=;?>@I%^v*stG0HugtZ28aJ+6Qc^pUp6gf-MYMWoTj~tg zX%+DUHR+isk=>R)j9gbir9vl=V(zQFO%D~)cU2G~TSm6(r@4MQuACYk8XnlX?>m1n zl?*mLUiMW+S_rt{mmE*`%Y4xZLS?ge#s||^w&DUuhxb&F9?*GH@U)weS8|?B-Ey=W zVXhhJO{GRkQQ(x)gC>{=GgAAp8D=l_%hoY_R?FV3>^s+=67+^$;pPAU literal 0 HcmV?d00001 diff --git a/spec/_static/locales/iw/LC_MESSAGES/booktheme.po b/spec/_static/locales/iw/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000000..dede9cb086 --- /dev/null +++ b/spec/_static/locales/iw/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: iw\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "הדפס לקובץ PDF" + +msgid "Theme by the" +msgstr "נושא מאת" + +msgid "Download source file" +msgstr "הורד את קובץ המקור" + +msgid "open issue" +msgstr "בעיה פתוחה" + +msgid "Contents" +msgstr "תוכן" + +msgid "previous page" +msgstr "עמוד קודם" + +msgid "Download notebook file" +msgstr "הורד קובץ מחברת" + +msgid "Copyright" +msgstr "זכויות יוצרים" + +msgid "Download this page" +msgstr "הורד דף זה" + +msgid "Source repository" +msgstr "מאגר המקורות" + +msgid "By" +msgstr "על ידי" + +msgid "repository" +msgstr "מאגר" + +msgid "Last updated on" +msgstr "עודכן לאחרונה ב" + +msgid "Toggle navigation" +msgstr "החלף ניווט" + +msgid "Sphinx Book Theme" +msgstr "נושא ספר ספינקס" + +msgid "suggest edit" +msgstr "מציע לערוך" + +msgid "Open an issue" +msgstr "פתח גיליון" + +msgid "Launch" +msgstr "לְהַשִׁיק" + +msgid "Fullscreen mode" +msgstr "מצב מסך מלא" + +msgid "Edit this page" +msgstr "ערוך דף זה" + +msgid "By the" +msgstr "דרך" + +msgid "next page" +msgstr "עמוד הבא" diff --git a/spec/_static/locales/ja/LC_MESSAGES/booktheme.mo b/spec/_static/locales/ja/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000000000000000000000000000000000000..1cefd29ce3cc08792667a82dc7ff47e9843107be GIT binary patch literal 1471 zcma))U2GIp6vr=uT2=%temyktnh+I|RZ$+uHv1sbO-LX%QhlH9-p&qe?;Yo((zoth z!EFJNkCxzqu~zx0SU`c+ubA-Uv++eAe7Tv~_Q5w};+y|7GulOC;?11-%{lkn^L6K! z-gVOq>v2dQu6IDn_Xk)2*RIXZZv;v211Zik;1ak4q&&ao z_TO@S&AKd35BL)Hd%6F@2|fYNfYiq|km|n!QoJ8>{U?y}t$^hJJGcehbZ=(g z0h0bQNasgDiZ_<)lR3|UkHUThq>)oh@}pU9hR|%O@9u?E>>&uvmlpL;i{?kUXs#3! zA=v{Ey4&tWeb61=55ZW{`(?Yv@$jH7*egl~LIyrQ+;Pvb>jB%X-jWSv)wooF7*^^a zA8{ID)$FU#tBQXZgSz8$*Rlm0s5t>b|D{&KM#HaqLP$QUYJ%;x{D6mU%?d<~D+xW6 z)jE6Cg@Yxz75=BO|)yDPjO+O|NI0-c}~bwE^u;+|UZ4dMBS zR^nOyBIPfpnG5^&>>F6!-~QYSg?zBZp>bD~cz^<)cN>-?`+2o)dAX*25Q`IlO*w3@i^0SgZ zRp#5b_7~Xl$+OE7hnZ=9YND2D&Y9*#)@d&!S7*EK+UR$U{>JE*(KAMC6J0ZU+C;M^ z`q*e3JZ1ERi7p!bh0&j-o|DW(-_lp~<^OPPo;J+|qu);tEd58ke>rs)FR!$Zu=w!h z&Y7=QE_`G(9#lEWlJgUtTT#-!nao^I&VIs{Z!N}0r&&CGVrBLi!p9%ph)+&2{5I%2 zK7KuJEq2#CZ}bHdEv5a=V6`%k-R^d(Xw}Jf>8QN5e!h zBbA`3bkQ)WS=dVKSy@;~B<{I88!P_b+$$|{a=-hV^ZNe(@4NG5)%+^MSdZvHd_rtS zROaA?v3M?Hcvu@=3&Ew}VsJIs26lk!z^&jKFbl2%PlD~B0GES0VHu=655Q&M6L2Xw z0j>n66Mjh6KPU5VAnE-CQ{cRL@%?s?<{cpA*#_Ef2kG3A zWc>t4Ehi1?A9+}fAZZd{dqh6EFS_D$EB?$Vqvj_EszTqMS+R^&H z>|hBG*9E~2DXE3jK7P0*&#?=d9aa}*QCWE|l@|R-n>7qsZZHEJ ziA7vbTyRv7*q)W%4{Te&r9dUHqRxq&PWR-~XN2b?TZYH_Y0^)(lvBrgj&;rK@7cLK zl{7ZpS8_#$YZ%z&7A;41@?634e4(?a`?}KyX3lw*^v?<}-6eA>??^kt5A-`ab<~n} zfWBto^Y9)w_0g!> zVBythE}X>$!Q{z_su`ZeFjL;phL~syBFa zXVlaiX8iI$xBl9S?ljH#2qeqqHLg5*5Kc5=W8s^|_vRD}$A^$29KXrU!@=^_j5Dv6%;4cA#sHtggl>eA))${_687xQDk?6`Kc@OWFO}WOS!3uO( zjPOmFMc3|`Ymgi(M~_AsRb8*l6oj5N!k1G#oNSsg^a1i?<=NZRz?N8C9`e*ob%^~2 D6Q!<* literal 0 HcmV?d00001 diff --git a/spec/_static/locales/ko/LC_MESSAGES/booktheme.po b/spec/_static/locales/ko/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000000..c9e13a427b --- /dev/null +++ b/spec/_static/locales/ko/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ko\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "PDF로 인쇄" + +msgid "Theme by the" +msgstr "테마별" + +msgid "Download source file" +msgstr "소스 파일 다운로드" + +msgid "open issue" +msgstr "열린 문제" + +msgid "Contents" +msgstr "내용" + +msgid "previous page" +msgstr "이전 페이지" + +msgid "Download notebook file" +msgstr "노트북 파일 다운로드" + +msgid "Copyright" +msgstr "저작권" + +msgid "Download this page" +msgstr "이 페이지 다운로드" + +msgid "Source repository" +msgstr "소스 저장소" + +msgid "By" +msgstr "으로" + +msgid "repository" +msgstr "저장소" + +msgid "Last updated on" +msgstr "마지막 업데이트" + +msgid "Toggle navigation" +msgstr "탐색 전환" + +msgid "Sphinx Book Theme" +msgstr "스핑크스 도서 테마" + +msgid "suggest edit" +msgstr "편집 제안" + +msgid "Open an issue" +msgstr "이슈 열기" + +msgid "Launch" +msgstr "시작하다" + +msgid "Fullscreen mode" +msgstr "전체 화면으로보기" + +msgid "Edit this page" +msgstr "이 페이지 편집" + +msgid "By the" +msgstr "에 의해" + +msgid "next page" +msgstr "다음 페이지" diff --git a/spec/_static/locales/lt/LC_MESSAGES/booktheme.mo b/spec/_static/locales/lt/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000000000000000000000000000000000000..4468ba04bc134a84fea5e3c973461cf02c9c2da3 GIT binary patch literal 1413 zcmZvaJ*-qk6vsyag_RElKVp1=p+SgQ1!6(=Ws8Trm%IpJ!!Cq&-rn=>&feLX$$UJx zy>yfs3mYDtv7j(9R@&?)#@fol&{Y(AbXL(_rUwj`9qL(er@8vgIw=pko$cKo&XOVSm=ES z^8O^qK3oL({z?6$1#4Nz2(054oJ;=;JiGzE*_kpy=GszcBB+< zVRAov2m8<3><4U^|G(mLjYp;ti7%W@WK+ZsUk6=|lDOjTSmRV7txL4wTqQTPq1|wF zISlEQU>fNty(&qp7CIsI&UP&u6NiDw%84sTTvaj2>KHSL zUeFdvoa|j$6a9r=An&41F4Us$N7~+%m$|mVh$bZFtK3-hG;n2UNLsa}OO-T4EZt3u z>KyAVM0}tv?Q&E0p7b%7C80_}Cn&{@X_(sUMf(ENwtj7O_x!@A z=Ua`j?LqCSBNGbv%p0ZcvK)?7h?KfF2W#z1yZ3^!ag#!O)ec>uZP}5RHgsxTRkqCV zwIfYx^-K=RwAWmi#E!InzKz|B%X0Cvd)CU+U3uZ$a!agNntg;f8E)25tYny{XFsAC z9jD(SkfM$V#H6LA*|v6LHF0AnD>v~vCkoohO{LBB-b;69+sY(u|L3sMiR5g1`bhd5 zjq=k+;szC}%nlMS$9vjXC#gc)P6nF&q9-bfo{CjQZe*xbNYi^#C9ConpM%1oLFKH0 za&)0WJ=gQWZ5W!M$i7!O!aIl|0e?HQ2Ro%kmCL#^O7u6its3{(8W!QLNCjg(=>2Jsvw ClWZvf literal 0 HcmV?d00001 diff --git a/spec/_static/locales/lt/LC_MESSAGES/booktheme.po b/spec/_static/locales/lt/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000000..35eabd955f --- /dev/null +++ b/spec/_static/locales/lt/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lt\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "Spausdinti į PDF" + +msgid "Theme by the" +msgstr "Tema" + +msgid "Download source file" +msgstr "Atsisiųsti šaltinio failą" + +msgid "open issue" +msgstr "atviras klausimas" + +msgid "Contents" +msgstr "Turinys" + +msgid "previous page" +msgstr "Ankstesnis puslapis" + +msgid "Download notebook file" +msgstr "Atsisiųsti nešiojamojo kompiuterio failą" + +msgid "Copyright" +msgstr "Autorių teisės" + +msgid "Download this page" +msgstr "Atsisiųskite šį puslapį" + +msgid "Source repository" +msgstr "Šaltinio saugykla" + +msgid "By" +msgstr "Iki" + +msgid "repository" +msgstr "saugykla" + +msgid "Last updated on" +msgstr "Paskutinį kartą atnaujinta" + +msgid "Toggle navigation" +msgstr "Perjungti naršymą" + +msgid "Sphinx Book Theme" +msgstr "Sfinkso knygos tema" + +msgid "suggest edit" +msgstr "pasiūlyti redaguoti" + +msgid "Open an issue" +msgstr "Atidarykite problemą" + +msgid "Launch" +msgstr "Paleiskite" + +msgid "Fullscreen mode" +msgstr "Pilno ekrano režimas" + +msgid "Edit this page" +msgstr "Redaguoti šį puslapį" + +msgid "By the" +msgstr "Prie" + +msgid "next page" +msgstr "Kitas puslapis" diff --git a/spec/_static/locales/lv/LC_MESSAGES/booktheme.mo b/spec/_static/locales/lv/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000000000000000000000000000000000000..74aa4d8985d96a07c4c9be96f006f3b58d884342 GIT binary patch literal 1404 zcmZ9K&5ImG7{*_dsL7ZQP5eMvump*E7&XB|oMjFhcNYS?IAk~8Yi8c*sqUVtras2( zdKwT<9)#7Cr{GC*^B|r)^?-kXCk3y9;7t%O;`2^-vdb1-{p+f(exK)k=-;oN`-(7L z!d%1r1@l$R&!4~zPs;uHG2 zUH=1$um8Z;!As|eUIA~m+y%w|6qJ5G0bd5c0G|fGYu|qlzJT=-lzP8`lHs4A_&D=q zlgkxQ>Rkt~f$z861tmufO5Zssk;}JoUbN-BWGj829FU-AF-2E~^e;o|NY;|8ctc5g z22*^U9FmJ@OFxKVl@HxMz@_4p=>umY+Zgar9e9&XBW=2mZRzw_Sr>WeT%jhWmHkCxl1EW^k%TQzfIrX3xkO4V3L9xG?DPIfe<4=WtdR+$hI z)4&^xB2Eo9w`s4@^IW-LqVor|S51w*uWpOC{VC6wR(CaQdfIncRMGG) zBv*eURUdB+Oli45Wvi9v9Ia6vne84ZIht?0o$f< A2mk;8 literal 0 HcmV?d00001 diff --git a/spec/_static/locales/lv/LC_MESSAGES/booktheme.po b/spec/_static/locales/lv/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000000..ee1bd08dfe --- /dev/null +++ b/spec/_static/locales/lv/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lv\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "Drukāt PDF formātā" + +msgid "Theme by the" +msgstr "Autora tēma" + +msgid "Download source file" +msgstr "Lejupielādēt avota failu" + +msgid "open issue" +msgstr "atklāts jautājums" + +msgid "Contents" +msgstr "Saturs" + +msgid "previous page" +msgstr "iepriekšējā lapa" + +msgid "Download notebook file" +msgstr "Lejupielādēt piezīmju grāmatiņu" + +msgid "Copyright" +msgstr "Autortiesības" + +msgid "Download this page" +msgstr "Lejupielādējiet šo lapu" + +msgid "Source repository" +msgstr "Avota krātuve" + +msgid "By" +msgstr "Autors" + +msgid "repository" +msgstr "krātuve" + +msgid "Last updated on" +msgstr "Pēdējoreiz atjaunināts" + +msgid "Toggle navigation" +msgstr "Pārslēgt navigāciju" + +msgid "Sphinx Book Theme" +msgstr "Sfinksa grāmatas tēma" + +msgid "suggest edit" +msgstr "ieteikt rediģēt" + +msgid "Open an issue" +msgstr "Atveriet problēmu" + +msgid "Launch" +msgstr "Uzsākt" + +msgid "Fullscreen mode" +msgstr "Pilnekrāna režīms" + +msgid "Edit this page" +msgstr "Rediģēt šo lapu" + +msgid "By the" +msgstr "Ar" + +msgid "next page" +msgstr "nākamā lapaspuse" diff --git a/spec/_static/locales/ml/LC_MESSAGES/booktheme.mo b/spec/_static/locales/ml/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000000000000000000000000000000000000..2736e8fcf6f9e923c2403307f0b366086d37b335 GIT binary patch literal 1883 zcmbW0%ZnUE9LGydG>*^22ObnFl0!U=*`!Gj=35eWDu@Vn6%SYIC#v~L=<+PV8oUUd{}t%`e}*gYclZSS_^!ZZxSjb`_!_(p zTd=uFh;ewl;wqeG{x{qKTbqR#gE5?hpTno&U(oq&;Si6(7JLc50p0#-xD$R4pMlrl zez^G_At=eHx!OEj&F+K95`^|`3%xs|tB0$dYp$lQaXj&eABB3jp*ug}eRDN&btbLg zC_?O6*AzH~{-A|&9)JdV{ljJRVAnvQRl4{_?&D7b7KD1k z&HJ`jzT)e&M4gbqlB?mhqaXMpAZg<;-hlh5ZiX1=e36nUswzgb&SN${bnp4Gv=IQ6$P05hgaiFop^2w W+5FkQ^s?wV7=JSkIl3Km4aE({iDO&< literal 0 HcmV?d00001 diff --git a/spec/_static/locales/ml/LC_MESSAGES/booktheme.po b/spec/_static/locales/ml/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000000..d471277d60 --- /dev/null +++ b/spec/_static/locales/ml/LC_MESSAGES/booktheme.po @@ -0,0 +1,66 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ml\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "PDF- ലേക്ക് പ്രിന്റുചെയ്യുക" + +msgid "Theme by the" +msgstr "പ്രമേയം" + +msgid "Download source file" +msgstr "ഉറവിട ഫയൽ ഡൗൺലോഡുചെയ്യുക" + +msgid "open issue" +msgstr "തുറന്ന പ്രശ്നം" + +msgid "previous page" +msgstr "മുൻപത്തെ താൾ" + +msgid "Download notebook file" +msgstr "നോട്ട്ബുക്ക് ഫയൽ ഡൺലോഡ് ചെയ്യുക" + +msgid "Copyright" +msgstr "പകർപ്പവകാശം" + +msgid "Download this page" +msgstr "ഈ പേജ് ഡൗൺലോഡുചെയ്യുക" + +msgid "Source repository" +msgstr "ഉറവിട ശേഖരം" + +msgid "By" +msgstr "എഴുതിയത്" + +msgid "Last updated on" +msgstr "അവസാനം അപ്‌ഡേറ്റുചെയ്‌തത്" + +msgid "Toggle navigation" +msgstr "നാവിഗേഷൻ ടോഗിൾ ചെയ്യുക" + +msgid "Sphinx Book Theme" +msgstr "സ്ഫിങ്ക്സ് പുസ്തക തീം" + +msgid "suggest edit" +msgstr "എഡിറ്റുചെയ്യാൻ നിർദ്ദേശിക്കുക" + +msgid "Open an issue" +msgstr "ഒരു പ്രശ്നം തുറക്കുക" + +msgid "Launch" +msgstr "സമാരംഭിക്കുക" + +msgid "Edit this page" +msgstr "ഈ പേജ് എഡിറ്റുചെയ്യുക" + +msgid "By the" +msgstr "എഴുതിയത്" + +msgid "next page" +msgstr "അടുത്ത പേജ്" diff --git a/spec/_static/locales/mr/LC_MESSAGES/booktheme.mo b/spec/_static/locales/mr/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000000000000000000000000000000000000..fe530100d7715cdc19a6f9db33a971665835f3c4 GIT binary patch literal 1674 zcma))-D_M$7>7rVU#qnriYO?KB2uYGt)hetL1>ylCBZ;a@uD{;yVJ8rH#3KG&bG~6 zRisua;ze5NO^wW!;71IF+EldSwKo+61wrPsjrLTQ<5nO9X$iPPmDi?R5_3f- z*T>{OU(0+)Eh-V7av_#JZ?debq)w0ISz70aXmzZP)flf6MT$}#$xUxiX4T6wMQMt1 z(Km0ZR-GJZC$ForB1Kb1(Zq`;L9Q`#U}kc-zxUba8xuy?O4rH!QlXl%M)kR(o922< zwmNB9se1h2{8TbJJXfZ=I;_fMQnySy*I84JF64D%I@MVZ^O|z8Y|M6hW!g=qOu1M! zr7ps>8h>F-#@F%PT0TB5_dY$=5YC=={Zr0fboPp~>pX9~wCwsPo&DVPkH=Hao^bXY zXIEYSL*AVI()HhVc3C?6MacEOvlp1GgbA^$%){9gR+l%mHiEnj&-JixH&Y;SGbt{+ z{t03z?p+g;%KlU0jXnJ;6hm+E zO4d<`2T4o{Hn?Oyg$)#jm)Q^UYaHJCp>S-t$!CBi7ej)}A>Wy>@(p%y@Lc$O&cyp1 zdP#?v^I4GaH+|g|B8k!Ldl%Wfwrg(}`)i>kl#a*D@zz$^*>a1%2AcIZ5x;fu4@Sqm A6951J literal 0 HcmV?d00001 diff --git a/spec/_static/locales/mr/LC_MESSAGES/booktheme.po b/spec/_static/locales/mr/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000000..f3694acfa5 --- /dev/null +++ b/spec/_static/locales/mr/LC_MESSAGES/booktheme.po @@ -0,0 +1,66 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mr\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "पीडीएफवर मुद्रित करा" + +msgid "Theme by the" +msgstr "द्वारा थीम" + +msgid "Download source file" +msgstr "स्त्रोत फाइल डाउनलोड करा" + +msgid "open issue" +msgstr "खुला मुद्दा" + +msgid "previous page" +msgstr "मागील पान" + +msgid "Download notebook file" +msgstr "नोटबुक फाईल डाउनलोड करा" + +msgid "Copyright" +msgstr "कॉपीराइट" + +msgid "Download this page" +msgstr "हे पृष्ठ डाउनलोड करा" + +msgid "Source repository" +msgstr "स्त्रोत भांडार" + +msgid "By" +msgstr "द्वारा" + +msgid "Last updated on" +msgstr "अखेरचे अद्यतनित" + +msgid "Toggle navigation" +msgstr "नेव्हिगेशन टॉगल करा" + +msgid "Sphinx Book Theme" +msgstr "स्फिंक्स बुक थीम" + +msgid "suggest edit" +msgstr "संपादन सुचवा" + +msgid "Open an issue" +msgstr "एक मुद्दा उघडा" + +msgid "Launch" +msgstr "लाँच करा" + +msgid "Edit this page" +msgstr "हे पृष्ठ संपादित करा" + +msgid "By the" +msgstr "द्वारा" + +msgid "next page" +msgstr "पुढील पृष्ठ" diff --git a/spec/_static/locales/ms/LC_MESSAGES/booktheme.mo b/spec/_static/locales/ms/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000000000000000000000000000000000000..f02603fa2522a40060bd3f1b5d65052c77530de6 GIT binary patch literal 1213 zcmZXRJ8Km|6vs!6uj@1M0TG1}Eworov@58TBL2_ajS)TU%x`DrywA6>k!K8Y7V9F`8>~xM5BFh% zd;s@@AHhT5C-5lv6+91q2g&v)I0lYF`6PH1JO$nc$*v2Y0Pldu!3W?dC>w4z_m7+N zHb`+^fGzM9NcL|*vVRZ02ETwK;L`&&w?VSo0ms4TAm#b4;b-tP&Og8l;4hH$$Kizh zUTHW1Qhptf^p`=>djwK_>)<(X03HLMfK>lZ^ZpV{}g%EROCaZxzWLzM_G6K*tH6hX%sTdt($LUZL@kZi>& z4I{%>X6M;z?cd7EIOUBUu+=J4dW+9cF1<{ak_~s>uT$@tG%Y08Vne0ED+JMU%h%Z$ zic<%vtlUs0G-K1wUB*6INTU1FI=E=_I%q^eqhYw#(!$c*-uvW@iB{KW zFSU<)gG#o!N7S2DA(WoxaVD&jzH_fPA5HD)S)tvUw9%Z7O`>$#=2Ly;TZ=-c0nKak z(zRBKU_}wl8(X?I*VXXoI=7~I{oA>w`Q;9uyguDx%Y{TQY0E^;V^w*;2yki7=)(TYV{?8_pQ^c*8Iog%4v$iD&q$RjNP literal 0 HcmV?d00001 diff --git a/spec/_static/locales/ms/LC_MESSAGES/booktheme.po b/spec/_static/locales/ms/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000000..65b7c6026a --- /dev/null +++ b/spec/_static/locales/ms/LC_MESSAGES/booktheme.po @@ -0,0 +1,66 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ms\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "Cetak ke PDF" + +msgid "Theme by the" +msgstr "Tema oleh" + +msgid "Download source file" +msgstr "Muat turun fail sumber" + +msgid "open issue" +msgstr "isu terbuka" + +msgid "previous page" +msgstr "halaman sebelumnya" + +msgid "Download notebook file" +msgstr "Muat turun fail buku nota" + +msgid "Copyright" +msgstr "hak cipta" + +msgid "Download this page" +msgstr "Muat turun halaman ini" + +msgid "Source repository" +msgstr "Repositori sumber" + +msgid "By" +msgstr "Oleh" + +msgid "Last updated on" +msgstr "Terakhir dikemas kini pada" + +msgid "Toggle navigation" +msgstr "Togol navigasi" + +msgid "Sphinx Book Theme" +msgstr "Tema Buku Sphinx" + +msgid "suggest edit" +msgstr "cadangkan edit" + +msgid "Open an issue" +msgstr "Buka masalah" + +msgid "Launch" +msgstr "Lancarkan" + +msgid "Edit this page" +msgstr "Edit halaman ini" + +msgid "By the" +msgstr "Oleh" + +msgid "next page" +msgstr "muka surat seterusnya" diff --git a/spec/_static/locales/nl/LC_MESSAGES/booktheme.mo b/spec/_static/locales/nl/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000000000000000000000000000000000000..e59e7ecb308a7648cd23aa6342a9ad98a61d0009 GIT binary patch literal 1356 zcmZXTJ5Los6vqcag)1TtUj+$cqf)Gju^^CJh(JODkqBZvyL;~La`(<`W@dTSmfC47 z`~-XfW8nv|v9q$Ewb8~-3*-OXUAP1%JNw%?Gxz+@WA4%Tz*~WF19KAdE9MmDt3JFi z2G0qBM-1V00UQPg!3l5(oCL3fx52Am6C4Mhfg>P+S3qC$CCGl>fS1Ad;4pXyj)5O) zey;7`>h*V!^?rj5u)n|h{RqhGNs#^A0Y8F|zya_lcoF;svhE*{ng4G|2HU zfE@n|kmKI2*9Rc$zXmzZceVWx9L4%m%`YJ5bp-OcA0YetTieIZSNl^S#~pwZ;4H`` z=N$Mv$HI25E$f~haMji1Jb17l9<0YPv;H+qxD=N#xwoeW*MWP;bwN40{S^!Qc%)BB zJTcmn_6{G#zRi--xzS!`5#mI~uCZ|uI< zDAG*t$pwyWGo=oR?puacPMao4a*|r@WQp<_L^SRBDmueDl}KS}Co^Ro_9^$SOcFwr zgiH{M*`~+`D{-(z*1_AHtn>rc54y^YwUxD{-u}$J2aUS0!RCHJbJ8P#`$euYJujnF zSx3J4d~-RN?VYnqyB67CNk=BmbTTJr!^}5Ul}<|3bx!KMv7VP!<-xMC9S1|vUApGO zd0Bln?`nCgDQBkV8|as@-IqkwS9EI1Sg6udX`Q7gMb~>RJ??afw3Uu~8!34iTBHBl zi0Od1qM24Aq+POY$n;EGCeKm6M7k&?+d-F=M@18=IxkHDla2^|PO9GX1u3ivbE1xT z+=^}4Zo{ONva*On--8-OUjI=r94V1Y}`N=IHv19Ut jbWAeLReX?b<52fDoT%;?`~gm~I(s23S;SN2irW1H>^?=m literal 0 HcmV?d00001 diff --git a/spec/_static/locales/nl/LC_MESSAGES/booktheme.po b/spec/_static/locales/nl/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000000..71bd1cda70 --- /dev/null +++ b/spec/_static/locales/nl/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "Afdrukken naar pdf" + +msgid "Theme by the" +msgstr "Thema door de" + +msgid "Download source file" +msgstr "Download het bronbestand" + +msgid "open issue" +msgstr "open probleem" + +msgid "Contents" +msgstr "Inhoud" + +msgid "previous page" +msgstr "vorige pagina" + +msgid "Download notebook file" +msgstr "Download notebookbestand" + +msgid "Copyright" +msgstr "auteursrechten" + +msgid "Download this page" +msgstr "Download deze pagina" + +msgid "Source repository" +msgstr "Bronopslagplaats" + +msgid "By" +msgstr "Door" + +msgid "repository" +msgstr "repository" + +msgid "Last updated on" +msgstr "Laatst geupdate op" + +msgid "Toggle navigation" +msgstr "Schakel navigatie" + +msgid "Sphinx Book Theme" +msgstr "Sphinx-boekthema" + +msgid "suggest edit" +msgstr "suggereren bewerken" + +msgid "Open an issue" +msgstr "Open een probleem" + +msgid "Launch" +msgstr "Lancering" + +msgid "Fullscreen mode" +msgstr "Volledig scherm" + +msgid "Edit this page" +msgstr "bewerk deze pagina" + +msgid "By the" +msgstr "Door de" + +msgid "next page" +msgstr "volgende bladzijde" diff --git a/spec/_static/locales/no/LC_MESSAGES/booktheme.mo b/spec/_static/locales/no/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000000000000000000000000000000000000..6cd15c88de675226c00ca4d0430171075e5559ff GIT binary patch literal 1317 zcmZ9KJ#5r46vxeXdz6pzxm3a|d<+2!3{|TeDD*@{E2`eX#NxZWChjG6WIIQ@F#r=I zh=CaiW+cQ+7sSlefekSsA;E&g!2exRwZe-1i=UnMe;@gJZ0`$!aT;?1^9$w~%xAl> zV2tb*0*@HQvL74+N5JFYC^!M00?&abz$SPMTm}z=1ReoH&Bq}7c@7=|Ux8!bTW}nF zU-MIK->moFLDu^NHo!f5s_zejyq^Hs&w20zcpb!5@dLyoequQQ{ss?%e?g9WWG`|7 z&ww2NwR(RWJc|7Tkn_pGec+?o{vnrOx2I^Ydmn%A>ZL_zf>(PJ4kZLarm5`W=b%5)w zZL7>O-*ZGp<~Am=pnQ;J5vxG4v+R9LTr zb?c&Cq}r^>S&prfQchyH%5IfY$0kWe(x`z>RL~GHv=*x9EbCMvg`Y>jh2AfB-HRnbKxP z_EP0Mh336ZE1KHA=alg)i!%*zV<7HREar_#Z59h#6sa0`M0_gBf~5&B$u(bn(=RqnJ4d{?xCazSi7Dd36F5NEp? z<)YnpdLTAmS7{(1PP{Mcl94asi9}+1PF;uA{A!sWqQCgLP1e#J@rEvuCjIeG)u_ z_zHL&oC3+mBarlB@FchjQl1we?OzAU{{~3=--1+!&*l7gkoNrokAjC_hW4EWNq-dF z2i^p!UUxt$Ipw67YDs=blg_=fL9(w&^`%C>sF5z^AYYUllKnH&-R^8uf4W1;k81~m7!h)9ylfZ~^CgwY?O|s!8_53#eN#D}ib%4l zPdl`G0* zrR^Q^E{h@wml7v|6|*b@U!4i752bZbtMMX#mGW2nnJcq1vs2siW24t9Wnrs}c`9q% z!@$)v5lT<+ped}AzW!iwx;nnS&I;|8q^(Zrz=TRiH9p=@zH(RSC_`OqJWVR|NoGY- zoi?`RYFwxN(ABR`V3KC)moz_L=VO;ADlp!Wow9!{+QNF%d)$vmWXUlwR2&%HTrgJW19E;7l zzACcDJ`;)Rh+tW;2Q~|urlsI%&bL2qk_T%ViEOb+o5j!ziwCfPoA2cCtFji~wj$ZA z@p+raPIaI5KE$fLmvXo`p>N|Ts6=nA`!wj_O|+>xW d^Crc{P^+yKEfI-Mu31OGXlgVp$}sP%{Q=l!SrY&N literal 0 HcmV?d00001 diff --git a/spec/_static/locales/pl/LC_MESSAGES/booktheme.po b/spec/_static/locales/pl/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000000..1b7233f4ff --- /dev/null +++ b/spec/_static/locales/pl/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "Drukuj do PDF" + +msgid "Theme by the" +msgstr "Motyw autorstwa" + +msgid "Download source file" +msgstr "Pobierz plik źródłowy" + +msgid "open issue" +msgstr "otwarty problem" + +msgid "Contents" +msgstr "Zawartość" + +msgid "previous page" +msgstr "Poprzednia strona" + +msgid "Download notebook file" +msgstr "Pobierz plik notatnika" + +msgid "Copyright" +msgstr "prawa autorskie" + +msgid "Download this page" +msgstr "Pobierz tę stronę" + +msgid "Source repository" +msgstr "Repozytorium źródłowe" + +msgid "By" +msgstr "Przez" + +msgid "repository" +msgstr "magazyn" + +msgid "Last updated on" +msgstr "Ostatnia aktualizacja" + +msgid "Toggle navigation" +msgstr "Przełącz nawigację" + +msgid "Sphinx Book Theme" +msgstr "Motyw książki Sphinx" + +msgid "suggest edit" +msgstr "zaproponuj edycję" + +msgid "Open an issue" +msgstr "Otwórz problem" + +msgid "Launch" +msgstr "Uruchomić" + +msgid "Fullscreen mode" +msgstr "Pełny ekran" + +msgid "Edit this page" +msgstr "Edytuj tę strone" + +msgid "By the" +msgstr "Przez" + +msgid "next page" +msgstr "Następna strona" diff --git a/spec/_static/locales/pt/LC_MESSAGES/booktheme.mo b/spec/_static/locales/pt/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000000000000000000000000000000000000..d0ddb8728e1d5ef72dddc1537f66aa32251a83c8 GIT binary patch literal 1364 zcmZ9KJ!lj`6vsyszs~RYi3A)AKVkhsL@peXm>dKW4Dqy|yM5Uk-JMxyXV09qrC4bb zE3pu<6hyS##>&dd!p6cz!N$T$|8I9gLWZ0D-MpQB@BjWY-^NCt35+9{h16S(zZ$SR;BglC^gY3_DkUjkg^8V2+RlY+YuTO%k z_iDYq0kY*B<9wX!0496Oy4Me+EOW5GJh*=z>>q1pUk_m-WvQ8UtRL(@Yuttj8%m$V z)DS=E`y_5yrAF9A~6$c zkJPKnb{@xB&k-4!*pS4W%Dl|ePxSZ1+Sg`TPO-L5pAr(~Q+BJKIyQ=8l12@5q`XEEL(9HWXSq&QBy}{>iJ+c4DOK2kgX}J`T^Gu%F2!T+4-5Z_m|FJY}CdEoncB%=^@}k z8Y^ukWUsGWM!t2s(+;k!?Q_axOXPwX)3c#AQBz*)YTuYsCd%P!Q>MPL5a&+CLEE|{ zYf6)r%dB;ILRNoUXN)}2l9$d-G{iJ)q}Wy`Tzm+v2(=>^C{+#@RV=2IURF*jcR$wy zD??aTpZLaCOMFYpAW1l*WLmt4v{B_@b0}L2&D+qT-&mnh(n=I7vDb-`%I7N94^{E1 zcxfdiIC)dNQVDLK6_Z`3WS+>>*=|gU60=F_bfO(LmX~0$I{o6U(^gh;I@l*sE7k*N z>oXB$Fttuh#-5x(d)$^9P*fEbsVm+tv!2x!?&s);C8;hsuS6ZkWkdpvO!dtuOAFi$ LL?J8GWh3H0!r)O_ literal 0 HcmV?d00001 diff --git a/spec/_static/locales/pt/LC_MESSAGES/booktheme.po b/spec/_static/locales/pt/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000000..1b27314d69 --- /dev/null +++ b/spec/_static/locales/pt/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "Imprimir em PDF" + +msgid "Theme by the" +msgstr "Tema por" + +msgid "Download source file" +msgstr "Baixar arquivo fonte" + +msgid "open issue" +msgstr "questão aberta" + +msgid "Contents" +msgstr "Conteúdo" + +msgid "previous page" +msgstr "página anterior" + +msgid "Download notebook file" +msgstr "Baixar arquivo de notebook" + +msgid "Copyright" +msgstr "direito autoral" + +msgid "Download this page" +msgstr "Baixe esta página" + +msgid "Source repository" +msgstr "Repositório fonte" + +msgid "By" +msgstr "De" + +msgid "repository" +msgstr "repositório" + +msgid "Last updated on" +msgstr "Última atualização em" + +msgid "Toggle navigation" +msgstr "Alternar de navegação" + +msgid "Sphinx Book Theme" +msgstr "Tema do livro Sphinx" + +msgid "suggest edit" +msgstr "sugerir edição" + +msgid "Open an issue" +msgstr "Abra um problema" + +msgid "Launch" +msgstr "Lançamento" + +msgid "Fullscreen mode" +msgstr "Modo tela cheia" + +msgid "Edit this page" +msgstr "Edite essa página" + +msgid "By the" +msgstr "Pelo" + +msgid "next page" +msgstr "próxima página" diff --git a/spec/_static/locales/ro/LC_MESSAGES/booktheme.mo b/spec/_static/locales/ro/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000000000000000000000000000000000000..3c36ab1df7c589ad82614599b8c91f072a25d4a6 GIT binary patch literal 1390 zcmZ{jxo;Ce6vhX_5zG}5ZUr$kT#~s&fgHI>97~Z1L||yB#=9@;f%VL44!~(cNeM!T zzkmW7Bt%b&NVHTGv{Xn`NHmD=truc}813$F=kWX9`}X8CsJNO-Bou44rIk82E zW8ekwD0mG#0%~vyTm=t+&p?jz3S_U|fL!MXkn8*mPJmxQ*7*st&Nlprc^KsLXDc>A z&U>kv-vQZju7S_7m#oj;a^0f?p-U~+<-u`yunv38zH-h8DR$!Kd`AcS&)<;qgbk%n zVs?N_h8~GIYXX_z@lp(&&U!(#>;scql}cj+b*;T8mvv4X%iczp&|iz8r@bsxMq)nI z0il0S+cD35;)smw+mysr<%5hxssg3b8qA|fdg6M41IkG4eI&8uv_TLnms)LcbExO2 zuwDo22I6MX)8?U^<=i?w>XRs+vOBD)W3wzLY1Dn4sh}ZZ=wTRUXIW<`QaHM=ZLHEB z3GZW;5wavyf>i8XN#8^5U79nrN}tCR1WA7O>Nc7D^1!X_=B#5k}&OPu5mlqSjw% ze9!ggnq18PeE0wD`{?}IYPqW%0!Wn*zA9eO0NP-Sd!P*Z&(5Mvp+E_$mG57h;3yNf z@}T<)Q9@L?UQv!@t~hzGN|ByUi8HjaaJHLM9|{Y76xA;^5T@*t78+y)y;r5zA;cW% z6j3gq1Ltf%1{N7Mh$B&^tz>kF94xj(C8Xe$PteOytPUysU!2AvEWuE6Fj7Z>o*_qS K1txIYaExD}s9q8P literal 0 HcmV?d00001 diff --git a/spec/_static/locales/ro/LC_MESSAGES/booktheme.po b/spec/_static/locales/ro/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000000..1783ad2c4f --- /dev/null +++ b/spec/_static/locales/ro/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ro\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "Imprimați în PDF" + +msgid "Theme by the" +msgstr "Tema de" + +msgid "Download source file" +msgstr "Descărcați fișierul sursă" + +msgid "open issue" +msgstr "problema deschisă" + +msgid "Contents" +msgstr "Cuprins" + +msgid "previous page" +msgstr "pagina anterioară" + +msgid "Download notebook file" +msgstr "Descărcați fișierul notebook" + +msgid "Copyright" +msgstr "Drepturi de autor" + +msgid "Download this page" +msgstr "Descarcă această pagină" + +msgid "Source repository" +msgstr "Depozit sursă" + +msgid "By" +msgstr "De" + +msgid "repository" +msgstr "repertoriu" + +msgid "Last updated on" +msgstr "Ultima actualizare la" + +msgid "Toggle navigation" +msgstr "Comutare navigare" + +msgid "Sphinx Book Theme" +msgstr "Tema Sphinx Book" + +msgid "suggest edit" +msgstr "sugerează editare" + +msgid "Open an issue" +msgstr "Deschideți o problemă" + +msgid "Launch" +msgstr "Lansa" + +msgid "Fullscreen mode" +msgstr "Modul ecran întreg" + +msgid "Edit this page" +msgstr "Editați această pagină" + +msgid "By the" +msgstr "Langa" + +msgid "next page" +msgstr "pagina următoare" diff --git a/spec/_static/locales/ru/LC_MESSAGES/booktheme.mo b/spec/_static/locales/ru/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000000000000000000000000000000000000..6b8ca41f36ebf869818399a9584cdb15619bea78 GIT binary patch literal 1722 zcmZ{iPiz!b9LJx6N>>C0{~WCHj6uL;MNkv6buUP3NFY{Oy-#-^yQABg$;>R!8?=By zpk6eZkcjo>ZEd^jw#)9`jK?>LiHQeq#*-Is-2D7zrnWZnvTr^!zxmDY_x*j}{=RSL zmx}cqdz}3X`vCjaLtI$99#)E<8sqXP+zofZ{csG9!)M_u@M&0v```y~4>WKujB{Rv zQs)c!1iS-x!|&l!u$%MeJpNn${3n!t_hA9<*pYp|2g>s}lsboC555U^!oQ&C`x}bB zF@i6^7vWp*ZFm@l@KtyR9)~}{gYZ5)1P?rt)qfX0&vOMzodC-FMW|sH%3Qy~Bk&LS zGTh71lK%!g2;Ya|(?xg`eg?&InL*;Bbw69Q%iLQRlGKxI@mH42FH8IruciMpY+9?w z*>bj97p>AWd<Owguyc8|lEQ8#P&TV@hv4PPLlNs2UpM=~=&K)EOs=bt|Yjv8id_3$EYFWp61Twd!?)O2Z^b@jo`zxOlo&{K$k6 z)k-?+UzGmEv~%I?>9doY?~lFqdLcKqSeXk!s4V?^=qzIFXM1NyDcB~ z^h;%Z?8rnx*}Ha_UXm-xW!tfr6}wJC zN81q@gr(9Fv3Bw)dp^0PldHtnY+u_Sxf$6W-wgO>O_L_|y0EwXD@jYPrM(BqO_Ddt zDEk#lk9`p%b*uDr%Zu6PU zG_bh>@urJlTp^1w`f2$AR}2{1AJVy&({OH-XdNXBVw1Appn{Ug&D59FU~!E~qO?uY z2%}Tqa+P*D{a@R!x0@kSMzqWv;2@B-rtEiw@7eZ-vn#fz?Gn!QP_`~@{!JJr^D>2; zYX|@P$s&z$lLI4H4zg!gP;s5$q8v^-E0ZiHHwb^e&1~CN%&|G1oY;Q{yqk7fcCfJk literal 0 HcmV?d00001 diff --git a/spec/_static/locales/ru/LC_MESSAGES/booktheme.po b/spec/_static/locales/ru/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000000..b1176b7ae7 --- /dev/null +++ b/spec/_static/locales/ru/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "Распечатать в PDF" + +msgid "Theme by the" +msgstr "Тема от" + +msgid "Download source file" +msgstr "Скачать исходный файл" + +msgid "open issue" +msgstr "открытый вопрос" + +msgid "Contents" +msgstr "Содержание" + +msgid "previous page" +msgstr "Предыдущая страница" + +msgid "Download notebook file" +msgstr "Скачать файл записной книжки" + +msgid "Copyright" +msgstr "авторское право" + +msgid "Download this page" +msgstr "Загрузите эту страницу" + +msgid "Source repository" +msgstr "Исходный репозиторий" + +msgid "By" +msgstr "По" + +msgid "repository" +msgstr "хранилище" + +msgid "Last updated on" +msgstr "Последнее обновление" + +msgid "Toggle navigation" +msgstr "Переключить навигацию" + +msgid "Sphinx Book Theme" +msgstr "Тема книги Сфинкс" + +msgid "suggest edit" +msgstr "предложить редактировать" + +msgid "Open an issue" +msgstr "Открыть вопрос" + +msgid "Launch" +msgstr "Запуск" + +msgid "Fullscreen mode" +msgstr "Полноэкранный режим" + +msgid "Edit this page" +msgstr "Редактировать эту страницу" + +msgid "By the" +msgstr "Посредством" + +msgid "next page" +msgstr "Следующая страница" diff --git a/spec/_static/locales/sk/LC_MESSAGES/booktheme.mo b/spec/_static/locales/sk/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000000000000000000000000000000000000..59bd0ddfa341477cf5ccfdc88f4c3e6127046f7a GIT binary patch literal 1393 zcmZ9KKWrRD6vijSKyrit=ARHoJeoj?1A-``v#uc6mLesxmAg<-Am(Iw==v>7a08THd<;rm`=IpY4k&eh2g>u`gW~ryD0Tk|O5J~fa_(Nc zzXDUK|0PiBy9|o{Iw-jZpgi{xC@mLFS&OFRlMGV#=>h3w2I;R1(UBqg;w6239ut!4 z2~6=jJ)|#^@o`MFWBGp7wHbaCb5`#=8`;KyKjqAuERSl#ePRozQ?f4d$hk4?nu1TZ zgR6YP4{gTW1S)mLYBMzv(*G~Fs-g&qXSOtPDXSYgM5@YEM^4FEtSg)3YP-Y%ZOMdC zvD)#*Ld4O|#+Dj1ex6GgOmu#x24!ySK3$V+!<;9qmRA}zH4R;s6--u7O{SxPiRJy+ zq;ulan3SHU##L?XQ}Ut8GDb>9C5YnoIEmfsY4-#60ct&J{JY}cT{?GeUcb3{a{tPk zZ+F_pc89Z)dlV7it+LR@u2Yh0A2{}J54XBkPtJL5!!G;orcGRGY}TWzBNIC}w9P8? zwMSvx*(oZoi|&^5lh7kuE|;PI&N?-J`)^o!txs1juXogY6?)ZEJ1#xCtJU@>=)Bnr zU1l0t--9arjh>CyA! zZ|R}^TYP-iOeo=k_sEUBK5*0V4ADZtsjcUv$Fb6dIjHA}(Ucy4hGb%cXdqT-thpkjw8w z94mEnM;EAFODWoF<;0UM`ZS%T+8S2)Skfe~=jnmos~5@rll9m4U7_dmM!H@|Co1(H Di}h+h literal 0 HcmV?d00001 diff --git a/spec/_static/locales/sk/LC_MESSAGES/booktheme.po b/spec/_static/locales/sk/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000000..650128817a --- /dev/null +++ b/spec/_static/locales/sk/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sk\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "Tlač do PDF" + +msgid "Theme by the" +msgstr "Téma od" + +msgid "Download source file" +msgstr "Stiahnite si zdrojový súbor" + +msgid "open issue" +msgstr "otvorené vydanie" + +msgid "Contents" +msgstr "Obsah" + +msgid "previous page" +msgstr "predchádzajúca strana" + +msgid "Download notebook file" +msgstr "Stiahnite si zošit" + +msgid "Copyright" +msgstr "Autorské práva" + +msgid "Download this page" +msgstr "Stiahnite si túto stránku" + +msgid "Source repository" +msgstr "Zdrojové úložisko" + +msgid "By" +msgstr "Autor:" + +msgid "repository" +msgstr "Úložisko" + +msgid "Last updated on" +msgstr "Posledná aktualizácia dňa" + +msgid "Toggle navigation" +msgstr "Prepnúť navigáciu" + +msgid "Sphinx Book Theme" +msgstr "Téma knihy Sfinga" + +msgid "suggest edit" +msgstr "navrhnúť úpravu" + +msgid "Open an issue" +msgstr "Otvorte problém" + +msgid "Launch" +msgstr "Spustiť" + +msgid "Fullscreen mode" +msgstr "Režim celej obrazovky" + +msgid "Edit this page" +msgstr "Upraviť túto stránku" + +msgid "By the" +msgstr "Podľa" + +msgid "next page" +msgstr "ďalšia strana" diff --git a/spec/_static/locales/sl/LC_MESSAGES/booktheme.mo b/spec/_static/locales/sl/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000000000000000000000000000000000000..87bf26de683cb18c73bd23c2b4c57ef6a02545ec GIT binary patch literal 1374 zcmZ9KyKfXR5XQ}$9PjWFC=#aOAvj*5h%UN@MVlwf1j4YtMW$vtK7Sz7QA(F{dy;VIIMJx(*A* z*7ZW*5ffN8gWJKa;9hV7oB|Jk$H0AH8=M61fIC3~cY(3y6OjEp2X}z4!0q5`a1Z#l z=EvIprQUx7Io@xu0dCk(-QNlFehOqi$H8~tMQ{`NqvlU=3--Uk-Qc>7LL34o!NcHb zkab@J`TGNq^T|Ly_ZVc|FG1Eh0$KkXa4+~CYpSj^k88a!&*8idy!V z`%t7QK_wv*NO67Y#^!v|yiY#BTT52)n;gGcMsD1kzd5`1{rs78jk>VS#g&{|GD5)F z+$e2lWVfe$pxC~*IM2jgT5~@lP4MDpz zCx-(XW@_w<9uAzh?%#>APv}sH5H9X{E*5diD#H~rZm5EBHe?#D`0z|yaZ3$VV*3d1 zf=gV-^ojji64%jMWljW5^x#&@4 literal 0 HcmV?d00001 diff --git a/spec/_static/locales/sl/LC_MESSAGES/booktheme.po b/spec/_static/locales/sl/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000000..3c7e3a8665 --- /dev/null +++ b/spec/_static/locales/sl/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "Natisni v PDF" + +msgid "Theme by the" +msgstr "Tema avtorja" + +msgid "Download source file" +msgstr "Prenesite izvorno datoteko" + +msgid "open issue" +msgstr "odprto vprašanje" + +msgid "Contents" +msgstr "Vsebina" + +msgid "previous page" +msgstr "Prejšnja stran" + +msgid "Download notebook file" +msgstr "Prenesite datoteko zvezka" + +msgid "Copyright" +msgstr "avtorske pravice" + +msgid "Download this page" +msgstr "Prenesite to stran" + +msgid "Source repository" +msgstr "Izvorno skladišče" + +msgid "By" +msgstr "Avtor" + +msgid "repository" +msgstr "odlagališče" + +msgid "Last updated on" +msgstr "Nazadnje posodobljeno dne" + +msgid "Toggle navigation" +msgstr "Preklopi navigacijo" + +msgid "Sphinx Book Theme" +msgstr "Tema knjige Sphinx" + +msgid "suggest edit" +msgstr "predlagajte urejanje" + +msgid "Open an issue" +msgstr "Odprite številko" + +msgid "Launch" +msgstr "Kosilo" + +msgid "Fullscreen mode" +msgstr "Celozaslonski način" + +msgid "Edit this page" +msgstr "Uredite to stran" + +msgid "By the" +msgstr "Avtor" + +msgid "next page" +msgstr "Naslednja stran" diff --git a/spec/_static/locales/sr/LC_MESSAGES/booktheme.mo b/spec/_static/locales/sr/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000000000000000000000000000000000000..ec740f4852f3973fa72ed0c7f7cf59273b8dba41 GIT binary patch literal 1679 zcmZ{i&2Jk;7>5TMpf#n12FigTrXZCM$qB70R5|j2(nPA%iiifpt=iZVd#SU#+K*9wix4UV%CCk|YD;tzleJn!xzyAg~$`^-$R zf|BP7d;(sF`{57pDcCFcOL6{NvA++c-k-1p_w32;FeHVeLgQ7^hJ zGdzy`B&?ZThjG)5bl^0MnyI@nssG*1CaqRf3ytygl3zFKtP{mL3F=O4>e~0%Ctj_o z-VO+GJncqNV$@vddL;4n-04|$KCc&=z>nP650};Xpy_&-^(oOd-!w}`WnaCJdz$wf zjh4}#bIENuu}cxpT#j>fzSPN!1fjX)`bi;sBz=@L8U~dHCrI%>FtxaRre1!}gb~>) zID-xfGsC|hn|!@gG`2jy9GHrZ5ik|B9M_xHwWbqBCa%6aKU+RIj0+tv zS~OvK#;f^t*K1Vt$ptqqoproMLSHL73QKdXBy?KkSwCEgD%uOOZB#uzt@CB|6;B_j z>SM1?mz2F>J33uW*U}Z+wmY_)ohZA>uESZ+w$lw|zev~9H9JUG(p9@{2io4t;AJmR@7g|5U2Qwul5jS5J6+fI7K$b?*B^Gym(vvm#N%kCu@EWomq3c>6awm HD*E*gL}ZXP literal 0 HcmV?d00001 diff --git a/spec/_static/locales/sr/LC_MESSAGES/booktheme.po b/spec/_static/locales/sr/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000000..773b8adae8 --- /dev/null +++ b/spec/_static/locales/sr/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sr\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "Испис у ПДФ" + +msgid "Theme by the" +msgstr "Тхеме би" + +msgid "Download source file" +msgstr "Преузми изворну датотеку" + +msgid "open issue" +msgstr "отворено издање" + +msgid "Contents" +msgstr "Садржај" + +msgid "previous page" +msgstr "Претходна страница" + +msgid "Download notebook file" +msgstr "Преузмите датотеку бележнице" + +msgid "Copyright" +msgstr "Ауторско право" + +msgid "Download this page" +msgstr "Преузмите ову страницу" + +msgid "Source repository" +msgstr "Изворно спремиште" + +msgid "By" +msgstr "Од стране" + +msgid "repository" +msgstr "спремиште" + +msgid "Last updated on" +msgstr "Последње ажурирање" + +msgid "Toggle navigation" +msgstr "Укључи / искључи навигацију" + +msgid "Sphinx Book Theme" +msgstr "Тема књиге Спхинк" + +msgid "suggest edit" +msgstr "предложи уређивање" + +msgid "Open an issue" +msgstr "Отворите издање" + +msgid "Launch" +msgstr "Лансирање" + +msgid "Fullscreen mode" +msgstr "Режим целог екрана" + +msgid "Edit this page" +msgstr "Уредите ову страницу" + +msgid "By the" +msgstr "Од" + +msgid "next page" +msgstr "Следећа страна" diff --git a/spec/_static/locales/sv/LC_MESSAGES/booktheme.mo b/spec/_static/locales/sv/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000000000000000000000000000000000000..b07dc76ff21128244172d2e415cc899555d8b49d GIT binary patch literal 1365 zcmZ9Ky>App7{XZ}|d=zQVMY>d0>TJUwK!GS|siLHd(&c$~H~3(*Gryg$_j%@>d3o;WBZ2ZE>JsWR z)Jv%M7to-bct;3);v|}P!BgM~@H}`DTmmnGm%$If0eB9)11^FDo&i(GpFxiE5Ihb3 z0-geY1>Xk`IzH{jUv&LfAnW}L_P`@Y+Wm_l_m@D9a|Qez{0hWU@h8Z7e}laLACT8A z9Bq9sg6#KG@FQ>;^|ue&MB7Xc{&_$WV4fmrpPUX_NMBC1d<&HLVI2>ISM)cNT zDs_}z6(rVjoe=u}?s{cR90ejPCoU&(OT{EBpQ}W+2Kkatlh7xu)KFSXs3tL$x9(u73Q%I)?{Lst}rq*YU0sH7ocX*ad*9P6|q zKG0OVs2vT8zb&|U%F`w^(-Z1 zKF^i36kcC+hKrsX9@jHt-W)0~UWJ0RHRwJIJFG|WNq7Z50sn;0!@U&o7(5PV;9F4M{{RobKj41& z@a;;?!xtbeX@>OX{(5y6M3y47A9wJS8l@l7I~meb8I-3U@UzelnM(bH_d|LjeI~u4 zB&Ck5^3z4%s2P{8W=Y&H)T}#g2QKPq>k6~t+?)DDGB7*axf^C(bKPdqPja0`u~Boq zq#)vWxe(=r9;UshFg@+8T8M_W+gC58#_GuGB+rLNEoOcl%M6n_~Kv<@xsE9lI>D`3aM?=WN&Y5*v5);gzIlEkrgR(mY~Bt;NAGiw5m^ zmz~Tz+NOS)Pd_uI!*qJT)%&LPp{J%=sw%gu@~f)+wA%QnDo0iMT~%)Q%}sWAT~-@s zt8&XvWPPzJFLmFFj3kCLZVZKXbJg6qObpgpYXhKc{dPQvXD4*l1`&-oR|ZVWnD5S zLMPGk+4yL_MW)wWJ7GI+sWh)Cq}dE7ao%TGqX8uPK%$P%oUIVNaozG6uhIA~XTs-( z77E8j3VKIkNhd=@QrBItuMs9x^kr3kK4HautE;{2cexG}GQN=#P4;o6q{&7}8xZ++ zl w$ZZQ&WaeX;?9mtGBq&}escqTfGyJc(*W8(47(T)#0?{xcP9tpFr||Or2L57y?*IS* literal 0 HcmV?d00001 diff --git a/spec/_static/locales/ta/LC_MESSAGES/booktheme.po b/spec/_static/locales/ta/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000000..b48bdfaf17 --- /dev/null +++ b/spec/_static/locales/ta/LC_MESSAGES/booktheme.po @@ -0,0 +1,66 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ta\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "PDF இல் அச்சிடுக" + +msgid "Theme by the" +msgstr "வழங்கிய தீம்" + +msgid "Download source file" +msgstr "மூல கோப்பைப் பதிவிறக்குக" + +msgid "open issue" +msgstr "திறந்த பிரச்சினை" + +msgid "previous page" +msgstr "முந்தைய பக்கம்" + +msgid "Download notebook file" +msgstr "நோட்புக் கோப்பைப் பதிவிறக்கவும்" + +msgid "Copyright" +msgstr "பதிப்புரிமை" + +msgid "Download this page" +msgstr "இந்தப் பக்கத்தைப் பதிவிறக்கவும்" + +msgid "Source repository" +msgstr "மூல களஞ்சியம்" + +msgid "By" +msgstr "வழங்கியவர்" + +msgid "Last updated on" +msgstr "கடைசியாக புதுப்பிக்கப்பட்டது" + +msgid "Toggle navigation" +msgstr "வழிசெலுத்தலை நிலைமாற்று" + +msgid "Sphinx Book Theme" +msgstr "ஸ்பிங்க்ஸ் புத்தக தீம்" + +msgid "suggest edit" +msgstr "திருத்த பரிந்துரைக்கவும்" + +msgid "Open an issue" +msgstr "சிக்கலைத் திறக்கவும்" + +msgid "Launch" +msgstr "தொடங்க" + +msgid "Edit this page" +msgstr "இந்தப் பக்கத்தைத் திருத்தவும்" + +msgid "By the" +msgstr "மூலம்" + +msgid "next page" +msgstr "அடுத்த பக்கம்" diff --git a/spec/_static/locales/te/LC_MESSAGES/booktheme.mo b/spec/_static/locales/te/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000000000000000000000000000000000000..0a5f4b46adfda1551ae6791c3c3782525b61be04 GIT binary patch literal 1806 zcmbu8?`s@I7{^DgzpiR+74e1QD2kPOYU&G1LO_}((2{DPsaEjK=5D&TdYxHz_mbva zT2L$M3z1kXg(AcfwAS4~Neb5f0lujqQV?VieD5FN3qLcn=UrpK7cRH^*?DH3U*CQ1 zw_V$o1=qvek8yv`{W$mAxAEY*0dI#t!Motk@Lu>Ud<6aho$p_87u?C=2jJ6i2YeYi zzX^ChJOuB9$KXz=YA)3F59{^k(B)Z$4Y&rK|263Re}o(GCUki}y(4f1KFWF>z6o!@ z*Wm7LLQKL1xEEf7ufjj!vvA~2A@;zx;Pdc3_zYZw?)**o1l&$Dhu|Lg6r6|7{snaU zU4^f}Um%kFbGaHHtXJD1WeGz1>mHu2N2iC=&RtGZchR1B$iD?W+^g&V?%L)waXOPu z(25ZI7x~Geqr`+s7qcYp6yktc&|MR?r8b3{Gv-}+Jn5=|IXAtmr8XIhPLj(sij|mb zCj}Av%jqaDWG`(;g=$Nq#dOrut&Vs-Ra!<`CVAddVkS#8PDaigm=Z@q{7j`LPYRPQ ziX&+!(I@48SIcZiolwF*xU=VM^?@zFv*l@L zDz6jwvaMLG-4f{crQm*REN}ghN#a8coKPu>p z%YTFt$m|qAXTDh&g5gT~hljsJ*ry=A+<9Nb1sA(o5-xGw{Z;?6OlS@gI#jemLQG%z zrpf6>XY=H3-bW;Qrf>v2>%ZN4n4aM|U<|2-ZBn^mBghuhM0)Dv2+@ei()B(V2&(za uuMrF7ToguSy%w`N&3+IHSt#2LVBfiP)B5iT;9Jx)h5&elIS4O(ZT|-CPABOA literal 0 HcmV?d00001 diff --git a/spec/_static/locales/te/LC_MESSAGES/booktheme.po b/spec/_static/locales/te/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000000..952278f5f7 --- /dev/null +++ b/spec/_static/locales/te/LC_MESSAGES/booktheme.po @@ -0,0 +1,66 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: te\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "PDF కి ముద్రించండి" + +msgid "Theme by the" +msgstr "ద్వారా థీమ్" + +msgid "Download source file" +msgstr "మూల ఫైల్‌ను డౌన్‌లోడ్ చేయండి" + +msgid "open issue" +msgstr "ఓపెన్ ఇష్యూ" + +msgid "previous page" +msgstr "ముందు పేజి" + +msgid "Download notebook file" +msgstr "నోట్బుక్ ఫైల్ను డౌన్లోడ్ చేయండి" + +msgid "Copyright" +msgstr "కాపీరైట్" + +msgid "Download this page" +msgstr "ఈ పేజీని డౌన్‌లోడ్ చేయండి" + +msgid "Source repository" +msgstr "మూల రిపోజిటరీ" + +msgid "By" +msgstr "ద్వారా" + +msgid "Last updated on" +msgstr "చివరిగా నవీకరించబడింది" + +msgid "Toggle navigation" +msgstr "నావిగేషన్‌ను టోగుల్ చేయండి" + +msgid "Sphinx Book Theme" +msgstr "సింహిక పుస్తక థీమ్" + +msgid "suggest edit" +msgstr "సవరించమని సూచించండి" + +msgid "Open an issue" +msgstr "సమస్యను తెరవండి" + +msgid "Launch" +msgstr "ప్రారంభించండి" + +msgid "Edit this page" +msgstr "ఈ పేజీని సవరించండి" + +msgid "By the" +msgstr "ద్వారా" + +msgid "next page" +msgstr "తరువాతి పేజీ" diff --git a/spec/_static/locales/tg/LC_MESSAGES/booktheme.mo b/spec/_static/locales/tg/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000000000000000000000000000000000000..b21c6c6340194fdf35f7e5660deb42479c8dbff9 GIT binary patch literal 1628 zcmaiyO^6gn6vxZY=tNE8S5Q|hA#9RE$8XSGCI@vF1jR*HLCB?drtIlBTh(+|t9#pZ z_b^Dr#19Y@K@`-J?Yg?{x;qOwd8{6D@{o&%oP^*d#K?f}Wpw_pnH1Q&v@ z3%&tK*FWF}u!PNBU}wRfz%8&Zfe!dP_zn0sxE@@yD9?KJ9kAteKMU^WF zJC>CiI~?GEE4d#GJ20M-!R?)~ z>>S<1-6l7a<}oHySZKVs&CQhc{Mbyqb88w7X3RqzI{&F#*USvhMoiLrM6s>Hk4E|6 zc@o%qM9F2t?V4KSrinZf?58}t0JXzb84{b#Mr}$-{y{=+V#Xn)X(lNzTPtR6wl32O zGdJL5Bs-5oxB+T`zIGRrAt`^lPLZT?M?g!0angPB{%GR5vxHp0oR8Arqi zbZiRp&%w__8!lf*NbDpe;WA2%r?Xi$atSF8VXr;q_FB@_W_A(5kPfr&0p+;^8?eY= pg1vVOUqyoB&tBYSn9xh&7BjPW`v%MukJU629MMs5Ow+8v{s(GpYQg{j literal 0 HcmV?d00001 diff --git a/spec/_static/locales/tg/LC_MESSAGES/booktheme.po b/spec/_static/locales/tg/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000000..c33dc42172 --- /dev/null +++ b/spec/_static/locales/tg/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tg\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "Чоп ба PDF" + +msgid "Theme by the" +msgstr "Мавзӯъи аз" + +msgid "Download source file" +msgstr "Файли манбаъро зеркашӣ кунед" + +msgid "open issue" +msgstr "барориши кушод" + +msgid "Contents" +msgstr "Мундариҷа" + +msgid "previous page" +msgstr "саҳифаи қаблӣ" + +msgid "Download notebook file" +msgstr "Файли дафтарро зеркашӣ кунед" + +msgid "Copyright" +msgstr "Ҳуқуқи муаллиф" + +msgid "Download this page" +msgstr "Ин саҳифаро зеркашӣ кунед" + +msgid "Source repository" +msgstr "Анбори манбаъ" + +msgid "By" +msgstr "Бо" + +msgid "repository" +msgstr "анбор" + +msgid "Last updated on" +msgstr "Last навсозӣ дар" + +msgid "Toggle navigation" +msgstr "Гузаришро иваз кунед" + +msgid "Sphinx Book Theme" +msgstr "Сфинкс Мавзӯи китоб" + +msgid "suggest edit" +msgstr "пешниҳод вироиш" + +msgid "Open an issue" +msgstr "Масъаларо кушоед" + +msgid "Launch" +msgstr "Оғоз" + +msgid "Fullscreen mode" +msgstr "Ҳолати экрани пурра" + +msgid "Edit this page" +msgstr "Ин саҳифаро таҳрир кунед" + +msgid "By the" +msgstr "Бо" + +msgid "next page" +msgstr "саҳифаи оянда" diff --git a/spec/_static/locales/th/LC_MESSAGES/booktheme.mo b/spec/_static/locales/th/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000000000000000000000000000000000000..abede98aa11b163e580a26b545980ace31e61ccf GIT binary patch literal 1766 zcma)*-)|K~6vqcarB^@&)CU_K663GrYB9uM>wQ7mgal$EMW46#4trN`XEwWgD~&H; zNI=2(Qi7!k28|(VOaz2Z{{sC3d@_d21Bp*Q8{hn#*{fZQQ8%6a%*>u2-*e9G?VVdL zD4xeyEM|9;NtGW4!Kz+u&BX3y#5Y_$YiD?uH$>6TSg=Km#9y)rhB| z#94;h;VRq)zl0CNTOLHf&S01Tf9_gR-TKX!nk)j@8 z$!wbssp1UphqNWmR~=a5Pgi}TUURlGwkp}=OGTFUD|OJlYX>grY3nL8@7z23cs4K_ z*QFa4UGulgs-KlQPg0|%ds#*3KaVrR!JzCG##p`JdPW^i%1RIOUQ(H!c9!$dcKhn} z9D~H_tSpB{%@&y@h|{wNXVlR;Utw}rW|b?J)X}`3*%SJJXq)Ss1*76y&(}50xilRZ zZIi_;O{$C})|{wnbx!isN%F!hW^Oo=-3VU})6}5SPzh4p+ooH!5B1t_nxZ7yq^|R~ zC4W0+ZXG#vWP0QK-WMiXqsF%9mU1(xD+Iil50cDI>25zMN>g=?&CRs;Z`c)yEsvX` zJ#D+Lm)Ueu@1M`A*5SmaL;6aLert9xERsQc#uW?Yq_%lHmYtWTbiM67YxSOv-uv8C zONI6KgI^B*v*yl!75w$!KM(#=@YjO>NCp2z@ZSZGG2hr+4E__@te@u_{+M44euZ<4 z_;qwx4(q3b|5Wzei|3W#eYCFwuf#yNf&j$Yu0#;+cXcn64J%wUT=~$4O>SO5=h=^

    cLPeiV0|6qlnFzL#U0qn`*`iT?nxl@xb2Mx-{rpyeF$L|PmGL73Xj zjT&US*r9DL+Oc6=XyNi4J`IP)4~3RpiSp}N5WkMWZ=`O(hjnrBo?i;ppCMASYj{fI qV*6MBqwc03(drtRAFXAoSBd=B?a4S*sk|OB^ZqtY{YJQZ;_45RC*i9A literal 0 HcmV?d00001 diff --git a/spec/_static/locales/th/LC_MESSAGES/booktheme.po b/spec/_static/locales/th/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000000..9d24294a7f --- /dev/null +++ b/spec/_static/locales/th/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: th\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "พิมพ์เป็น PDF" + +msgid "Theme by the" +msgstr "ธีมโดย" + +msgid "Download source file" +msgstr "ดาวน์โหลดไฟล์ต้นฉบับ" + +msgid "open issue" +msgstr "เปิดปัญหา" + +msgid "Contents" +msgstr "สารบัญ" + +msgid "previous page" +msgstr "หน้าที่แล้ว" + +msgid "Download notebook file" +msgstr "ดาวน์โหลดไฟล์สมุดบันทึก" + +msgid "Copyright" +msgstr "ลิขสิทธิ์" + +msgid "Download this page" +msgstr "ดาวน์โหลดหน้านี้" + +msgid "Source repository" +msgstr "ที่เก็บซอร์ส" + +msgid "By" +msgstr "โดย" + +msgid "repository" +msgstr "ที่เก็บ" + +msgid "Last updated on" +msgstr "ปรับปรุงล่าสุดเมื่อ" + +msgid "Toggle navigation" +msgstr "ไม่ต้องสลับช่องทาง" + +msgid "Sphinx Book Theme" +msgstr "ธีมหนังสือสฟิงซ์" + +msgid "suggest edit" +msgstr "แนะนำแก้ไข" + +msgid "Open an issue" +msgstr "เปิดปัญหา" + +msgid "Launch" +msgstr "เปิด" + +msgid "Fullscreen mode" +msgstr "โหมดเต็มหน้าจอ" + +msgid "Edit this page" +msgstr "แก้ไขหน้านี้" + +msgid "By the" +msgstr "โดย" + +msgid "next page" +msgstr "หน้าต่อไป" diff --git a/spec/_static/locales/tl/LC_MESSAGES/booktheme.mo b/spec/_static/locales/tl/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000000000000000000000000000000000000..8df1b73310e0c606251d1abff7e6033d1f6b273f GIT binary patch literal 1273 zcmZ{iJ#P~+7{?8ixA4}MHz7bWh@lJz6qYJggw!_(YD=U9)PcpxxsJ)jKAr8h8TbH< zl>mt^fEW=h3@|dWP{DwN#01}fk%9knmnKyup2YV%`|Ricw;%r;A9>CYr_e5-eL%a2 z_Gk|th%ew?a0@&DeghAKKfp8KZ;;mh1;@cLOg;`?0Z)LpKw38o9s}=zN5K_v43vGY z_s5_1`!7J!c@37pw;-+m2-5n`;Ct{ph(FuhSLAyJ(z;h52j75~!7cDS_y;@-j*b-m zC%}W~-v&p)J0SUA0Z)SpJPAGlY2GGy4txoc|92qy`UKMYuOOYrFAzsE2s#`3PH_Yc zHrRgZAP%9?9w{GbQ&0{H+8gOp(7q^W|Kx>&wCSAbj3LR`Ob>tV+mg-Nw3lhs_H53s zo5YHk8|!7$+74gUi5w0)8?u(%HR#*g@l+_u=40)Val5-HoaZ5pg_kk6hAoOEtD7`fpKHxt1^q`P0PmGs4|~w zYF}CuMg<%mawMf%5;BoQ3pVSzGB;`7b(Ndbym+ll7=Ee3C$CPI*s^AIft_~oQ`+M| zjoMMlC845tP)?QC3^N9mW&fLyY9mxPB*L)jFaumd3$>sZlm_4E_)y1P<99=X&7mSu zQF#bj7^^11I1!U-GjxO_E86t}@}&6i_@% literal 0 HcmV?d00001 diff --git a/spec/_static/locales/tl/LC_MESSAGES/booktheme.po b/spec/_static/locales/tl/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000000..20e0d07ce5 --- /dev/null +++ b/spec/_static/locales/tl/LC_MESSAGES/booktheme.po @@ -0,0 +1,66 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "I-print sa PDF" + +msgid "Theme by the" +msgstr "Tema ng" + +msgid "Download source file" +msgstr "Mag-download ng file ng pinagmulan" + +msgid "open issue" +msgstr "bukas na isyu" + +msgid "previous page" +msgstr "Nakaraang pahina" + +msgid "Download notebook file" +msgstr "Mag-download ng file ng notebook" + +msgid "Copyright" +msgstr "Copyright" + +msgid "Download this page" +msgstr "I-download ang pahinang ito" + +msgid "Source repository" +msgstr "Pinagmulan ng imbakan" + +msgid "By" +msgstr "Ni" + +msgid "Last updated on" +msgstr "Huling na-update noong" + +msgid "Toggle navigation" +msgstr "I-toggle ang pag-navigate" + +msgid "Sphinx Book Theme" +msgstr "Tema ng Sphinx Book" + +msgid "suggest edit" +msgstr "iminumungkahi i-edit" + +msgid "Open an issue" +msgstr "Magbukas ng isyu" + +msgid "Launch" +msgstr "Ilunsad" + +msgid "Edit this page" +msgstr "I-edit ang pahinang ito" + +msgid "By the" +msgstr "Sa pamamagitan ng" + +msgid "next page" +msgstr "Susunod na pahina" diff --git a/spec/_static/locales/tr/LC_MESSAGES/booktheme.mo b/spec/_static/locales/tr/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000000000000000000000000000000000000..029ae18afb5360a8c238a052e8d3971761759d3d GIT binary patch literal 1373 zcmZ{izi%8x6vqdWKynFz!~~?sQXUOIiX{o62)3@sVLOWA2n!$dC&=i7J19yL{j6T0W2%?d)gY?96-L@67yl{`g~s z_CESD`XA_*&>y~r7uw0!mBOP=;q?Z120RHafv3P_@ICND@LjMEo(I1M&w>oT4aSc5 zLCNz7d<%R6o&kRZ&w(7D`FN2cjBk&jSbMQ3yvf}|L z^-dgb=PiL35fdohSHUH48x$WIDEhw##oq%^>ihtT&YwW>`D+*d4$8W}!FRxeF7BOZ z>s|syPtwI-fS96gfHHp*lr0wzl2>wx9;q$97n`h;HKI?N=#nP7WUs~N1$3mG*A#z? zP4-{T@J)1V%lv%Rpus~iXZ5ACk!=k4s2XpwJgPPKoh_YC$-2lp&J{E^B_9n3SNjqF zXE5d_P^B|g>#2!IeHd=kWf?}E+0w+NtTuIsR9C5voRYJMYdgx-R~05`OD2Sx)s{CF zNgQphZK&MIp`-&XC zw^i0&m&u0nldwXznunqP*($Z4{f{ku(5I`PtoGDUdp(}*+f>_seb0WLJ~cMw0*C6= zkV`YBTo=V`U#;;tvZvIAMh7gN?Gt7i9EQ538>@@sDR7=_PxgBv?;s7aXZ*rps`o&(U<3tx~U_1rqYg?0^K7|^E%RsJ#t%4f8 zo6h$Ap{&BCl*;`;;xXGI&@B^nMMIv5kwyPFiiuV?c-PnoHwMdQd*;PnG+qT~k=xL= f7*f}zXhDUuwVFPIQ2d!&RZ>YE8iRKH#ZJBgJpfrQ literal 0 HcmV?d00001 diff --git a/spec/_static/locales/tr/LC_MESSAGES/booktheme.po b/spec/_static/locales/tr/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000000..a77eb0273f --- /dev/null +++ b/spec/_static/locales/tr/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tr\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "PDF olarak yazdır" + +msgid "Theme by the" +msgstr "Tarafından tema" + +msgid "Download source file" +msgstr "Kaynak dosyayı indirin" + +msgid "open issue" +msgstr "Açık konu" + +msgid "Contents" +msgstr "İçindekiler" + +msgid "previous page" +msgstr "önceki sayfa" + +msgid "Download notebook file" +msgstr "Defter dosyasını indirin" + +msgid "Copyright" +msgstr "Telif hakkı" + +msgid "Download this page" +msgstr "Bu sayfayı indirin" + +msgid "Source repository" +msgstr "Kaynak kod deposu" + +msgid "By" +msgstr "Tarafından" + +msgid "repository" +msgstr "depo" + +msgid "Last updated on" +msgstr "Son güncelleme tarihi" + +msgid "Toggle navigation" +msgstr "Gezinmeyi değiştir" + +msgid "Sphinx Book Theme" +msgstr "Sfenks Kitap Teması" + +msgid "suggest edit" +msgstr "düzenleme öner" + +msgid "Open an issue" +msgstr "Bir sorunu açın" + +msgid "Launch" +msgstr "Başlatmak" + +msgid "Fullscreen mode" +msgstr "Tam ekran modu" + +msgid "Edit this page" +msgstr "Bu sayfayı düzenle" + +msgid "By the" +msgstr "Tarafından" + +msgid "next page" +msgstr "sonraki Sayfa" diff --git a/spec/_static/locales/uk/LC_MESSAGES/booktheme.mo b/spec/_static/locales/uk/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000000000000000000000000000000000000..16ab78909cfbaba7fa199f47fdfc2934426ac699 GIT binary patch literal 1681 zcmZvaO>7%Q6vv0QKx#^WmXAw-X;52=V^7yhotb5Kwlue- zPJ@uD1fdWPh|e20*TKPc;zZ)a@r}d@A+B8DUJjM|f4dvvq>McK+j;xuef*#QJbLI0 zf%O{p5cY4_Z(`qj3JD;1Tdg@Fj3P=dZc__x$`9$oc*S3*fo^agnKo4Zexd+ydwLFH++H&9h3nhscvH3nP?w=Ry$GKV8 zSFn*%JcrG*?O#Zh&hS|fa-{PW7iaO4wx+~;Mq8zAjF)gW3jCTCm(0hyZoI10#;R#! zZps@$UG17A`bVb!y$DvicD z(UqEbKZJv)We~@S5))CN5yZ%eOXK2NmM>DFi34k*S#d3_1^TwU$hA$?)Ql48Q%+|+ zO&Q;>E2+I(f$!M>Nwm6cv+4}z$&!STx)qotFS{>%ocO*%l?t7p6!W2~*y81C@dFjb zh*pwW{vziurkM*@FJB$o{eEubY#|r6I5iuplC&t`Oj!2O`(TSv<;z`$dL~;A5u^%qBgBK^s=!h>rLI6)qdpT zRwLUoA{Qc+BL{@CNd#$~fM}{TM=rgzQV%n0sfS7&;BP2WpLe~9L#0ZLy!)G(eLtS} z@uTBCHyGACc;3gei{}G8S6;vi>pu7*_yBwvdd_{ zw7^~PH24qrDR`oXv3~FiknZO|ioXGV2*%(?;Gf{z;NRf8;J+FBUg~@w04eVRNO2|b zJ#Z2H7+e8i$-yFT-pWp-6LJ_r(sdMXnvv>}ceKb;S{N^_PkZu%7R~=ky6bpCK9k3g z$k@3h{CHRvY(#lWzU!1jHmVk6McE}TRVZeZy2@wWis)VkD)Nisnai;32Hdk9!Ny8% zh>H8iNjnI6>?(vD=Y%)au3|&?BFFX~vq4Jm5 zMX&72MShO7Oqazq!O}OM=}4bej#Cj_+Vieshc22(u^4vLDC*N`;`w6URZ%80h#W^i znt)vNS978mS`#JfvhV|x$n#E9i<(+#yWIJS^JCrbgJ(X=jVKuk8Cugzp2+hMT?f31 z?aE=i4%v6}~kli>l;GC(nmw+%Pw3ODBSPc^>(>sY>MA6>D7i z*MdBkUV01)pAYlSw$Ly6$pRnzWH`t4n!cr5?Pa~wuCipkz0CC=x@BmuW3xx+mX7tR z*NZtNFp)tbr@2L4}dj%B? z$~?F1e_~CYdU3r0$=I6uq5ePVO_Bn=P}riFSZ}qf6oE57w5w3K+FoX+hEW?y<4|&p zx|p)Aw=sGx%}Vw#el49X^(ARiaRizwH+vA!fH?=_BQ=JATO9Uo!rm6_g(Z9Fvrf~J ziFzY}!KTjO`w9hS|3mkKY2Z8hBsWpwH*$FgF5fip{lMp#&N|*Vkp4MHrJJsNw1%8D c^9?3>eEmE8GP@z_uy-`khW>?G>aA{%rxd0lq5uE@ literal 0 HcmV?d00001 diff --git a/spec/_static/locales/ur/LC_MESSAGES/booktheme.po b/spec/_static/locales/ur/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000000..2f774267f8 --- /dev/null +++ b/spec/_static/locales/ur/LC_MESSAGES/booktheme.po @@ -0,0 +1,66 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ur\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "پی ڈی ایف پرنٹ کریں" + +msgid "Theme by the" +msgstr "کے ذریعہ تھیم" + +msgid "Download source file" +msgstr "سورس فائل ڈاؤن لوڈ کریں" + +msgid "open issue" +msgstr "کھلا مسئلہ" + +msgid "previous page" +msgstr "سابقہ ​​صفحہ" + +msgid "Download notebook file" +msgstr "نوٹ بک فائل ڈاؤن لوڈ کریں" + +msgid "Copyright" +msgstr "کاپی رائٹ" + +msgid "Download this page" +msgstr "اس صفحے کو ڈاؤن لوڈ کریں" + +msgid "Source repository" +msgstr "ماخذ ذخیرہ" + +msgid "By" +msgstr "بذریعہ" + +msgid "Last updated on" +msgstr "آخری بار تازہ کاری ہوئی" + +msgid "Toggle navigation" +msgstr "نیویگیشن ٹوگل کریں" + +msgid "Sphinx Book Theme" +msgstr "سپنکس بک تھیم" + +msgid "suggest edit" +msgstr "ترمیم کی تجویز کریں" + +msgid "Open an issue" +msgstr "ایک مسئلہ کھولیں" + +msgid "Launch" +msgstr "لانچ کریں" + +msgid "Edit this page" +msgstr "اس صفحے میں ترمیم کریں" + +msgid "By the" +msgstr "کی طرف" + +msgid "next page" +msgstr "اگلا صفحہ" diff --git a/spec/_static/locales/vi/LC_MESSAGES/booktheme.mo b/spec/_static/locales/vi/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000000000000000000000000000000000000..2bb32555c3ea0dab08ed37b71cb863fbe75698c6 GIT binary patch literal 1431 zcmZvb&x;&I6vr#s{2bR9catc(#OK8%htWiG2(!#(H#@MntBVvV&v#)!JFr^_{KP>F`@nJV05}OA1gF4b;9KAkunA6pAA*NK z3BCmSiq}An^CkEqxCxGf--9oMKUe&tTK}_}KL%Ov30MQi#>)GLK%P&59Onf13wRdX z3;qSN-ajCp`xj*0y?e@hC&AY-KMlSLE>x7&{%7EEtZ#xGrw?+zzkx4+4=O$aInLi8 z=P?fP6X0=>=PmFs_%X6t9{djXqq7H;REU`#e&m%Dv(|WNyu(A%OLe5YIB!2Su?;$8te4By zUZxct%bjIsvow_dS@cRfN`gp=xsLV-{cPIG;@E|$l!jJqM~a2OdCHPb;AMxb!8|je z5+5Wu5E#l0;esOMR|IFK`YgJ+E?Oq}qlDRK7TFmDND~hLNUKno*_5*I#duC ze1pUH?uya95XS7fK6vqb$6da&5d>$e(Tqr%5FL8(*`2r*YiH`^Z>aE(?ll6i#v)Y{nLNAmS zVZLM|@+Cqff{+L(H9>+X*h#n|&YXJarQWrDsNf1G{?EIRgwekJ?VFu>|Np%Cx20*2 zVQfXTBHkmmBW^Fl3uEes3ZOb zQk?;C9XJZE1)qXHfzuJ+M)Utfc@-qRPhbpOu_D~R9;Cb#q&h!?W$*w<>pw>P43chB zQ^;m;Gx8RY{OyX^7V!v3^?n6uod9Y7@6r5Kko@OC(isEk+)qHNR|2Y~glBh97KqDQIoyw}Q#g=trLPD*?? zsWX<#ZNn6-BW-Dv{+f1r*{qv#gpj;Xr3E`?xSD%*+R!4+l|=5zREC|jvA~era$Qfb zF2|B6qIlQgPIfxfbA+v2ODm_JowhTUyu=TZx9*JS6Rh#(J>i+Um1$-Lm&OIlG_(Z~ zDK6>Iog$r3#CF65OL>v)Mde-3GzDA=oCH?XIg!%wqv`lr;kc-l;Guq;^y3ZX*zu#s zI~M-$+r2jyH8$SeZ;J%iFtEqY8kTJ5sf^*cLMP93cgEWm);WfBdxaD4kSUe6q?zDt zJ(i9gGoRpuVl zu3Y;tdw+Y?BAIRa)rh7%Q6vqb|O6z_>OFs^gI=uiz7%1XUIrvhVNR?8ES{E)zXk$;;3!9nM?rdo| zg(?BJNt;NGU78fyR1pmy`2barI!U>5;l_yr7d&hG1XmCT{?EI?hS9$L&6|(+{`20i zd%MaE;~=aX_A~4-Y~m68Ft$C)7(TWgzpda-a2vP}+zxhw2f(Mnr@$<@7d!**1_ihW z)CosHiZc!F0%yUU;1}SN;CBgsOxAx%{5nYa{sdFtmM!u9-5~khAjNqGTmxSL>HHrF z{{ks*S695g10>!1LDKhp!dDaaCwv>+k9`-U`l4+X18A zb`E+6_3&{R%F^mDJ28xp>!M(W-N{d0I-s9&TSG1P{ z75aJczeQbi0`6J1V7&!LBlM=*7rJhc_l1yrNEHO@w*t*WuV86W;7Y;|WxmMX@NmGA z+zEnEumRtZ2%`AF$v$>A&gTnH1&&t!FgxoN9eI(TAZ@v#7!s`Y=Y#Q^a>}+{!KHP< zu`TT&i4+%gtWHs$IEm+r3yumC*&X47(6$9s3cLhT)Vm_D)29mQH-#S{T878@)098m z%A7iV>U3{=|JVyJrINy?bHkpi>0X&v z1xMN$etgi;seVh^A?ljp9~9roy_FhpL*H`KeaasSGF*BsH^{!+!{cf8S;>!N`LUxt zDOTIK)fgH3eSM~5R-avJPKqIR9T5`UTRjZlMYk9ZN|&2 zSsBNyvAEKln_#AN!(3g7N>iJPqMOUL)it`->9il( zoLjEXSEEv;IrB~9#-v%f*7$q_8AyL^bp+y>8T%Uf>ocRKJlP7gdS!Fx->lK(l=-+? P`(Y`Xeqh$BP|E%Rvo4ks literal 0 HcmV?d00001 diff --git a/spec/_static/locales/zh_TW/LC_MESSAGES/booktheme.po b/spec/_static/locales/zh_TW/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000000..beecb076b1 --- /dev/null +++ b/spec/_static/locales/zh_TW/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_TW\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Print to PDF" +msgstr "列印成 PDF" + +msgid "Theme by the" +msgstr "佈景主題作者:" + +msgid "Download source file" +msgstr "下載原始檔" + +msgid "open issue" +msgstr "公開的問題" + +msgid "Contents" +msgstr "目錄" + +msgid "previous page" +msgstr "上一頁" + +msgid "Download notebook file" +msgstr "下載 Notebook 檔案" + +msgid "Copyright" +msgstr "Copyright" + +msgid "Download this page" +msgstr "下載此頁面" + +msgid "Source repository" +msgstr "來源儲存庫" + +msgid "By" +msgstr "作者:" + +msgid "repository" +msgstr "儲存庫" + +msgid "Last updated on" +msgstr "最後更新時間:" + +msgid "Toggle navigation" +msgstr "顯示或隱藏導覽列" + +msgid "Sphinx Book Theme" +msgstr "Sphinx Book 佈景主題" + +msgid "suggest edit" +msgstr "提出修改建議" + +msgid "Open an issue" +msgstr "開啟議題" + +msgid "Launch" +msgstr "啟動" + +msgid "Fullscreen mode" +msgstr "全螢幕模式" + +msgid "Edit this page" +msgstr "編輯此頁面" + +msgid "By the" +msgstr "作者:" + +msgid "next page" +msgstr "下一頁" diff --git a/spec/_static/minus.png b/spec/_static/minus.png new file mode 100644 index 0000000000000000000000000000000000000000..d96755fdaf8bb2214971e0db9c1fd3077d7c419d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu=nj kDsEF_5m^0CR;1wuP-*O&G^0G}KYk!hp00i_>zopr08q^qX#fBK literal 0 HcmV?d00001 diff --git a/spec/_static/plus.png b/spec/_static/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..7107cec93a979b9a5f64843235a16651d563ce2d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu>-2 m3q%Vub%g%s<8sJhVPMczOq}xhg9DJoz~JfX=d#Wzp$Pyb1r*Kz literal 0 HcmV?d00001 diff --git a/spec/_static/pygments.css b/spec/_static/pygments.css new file mode 100644 index 0000000000..012e6a00a4 --- /dev/null +++ b/spec/_static/pygments.css @@ -0,0 +1,152 @@ +html[data-theme="light"] .highlight pre { line-height: 125%; } +html[data-theme="light"] .highlight td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +html[data-theme="light"] .highlight span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +html[data-theme="light"] .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +html[data-theme="light"] .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +html[data-theme="light"] .highlight .hll { background-color: #fae4c2 } +html[data-theme="light"] .highlight { background: #fefefe; color: #080808 } +html[data-theme="light"] .highlight .c { color: #515151 } /* Comment */ +html[data-theme="light"] .highlight .err { color: #a12236 } /* Error */ +html[data-theme="light"] .highlight .k { color: #6730c5 } /* Keyword */ +html[data-theme="light"] .highlight .l { color: #7f4707 } /* Literal */ +html[data-theme="light"] .highlight .n { color: #080808 } /* Name */ +html[data-theme="light"] .highlight .o { color: #00622f } /* Operator */ +html[data-theme="light"] .highlight .p { color: #080808 } /* Punctuation */ +html[data-theme="light"] .highlight .ch { color: #515151 } /* Comment.Hashbang */ +html[data-theme="light"] .highlight .cm { color: #515151 } /* Comment.Multiline */ +html[data-theme="light"] .highlight .cp { color: #515151 } /* Comment.Preproc */ +html[data-theme="light"] .highlight .cpf { color: #515151 } /* Comment.PreprocFile */ +html[data-theme="light"] .highlight .c1 { color: #515151 } /* Comment.Single */ +html[data-theme="light"] .highlight .cs { color: #515151 } /* Comment.Special */ +html[data-theme="light"] .highlight .gd { color: #005b82 } /* Generic.Deleted */ +html[data-theme="light"] .highlight .ge { font-style: italic } /* Generic.Emph */ +html[data-theme="light"] .highlight .gh { color: #005b82 } /* Generic.Heading */ +html[data-theme="light"] .highlight .gs { font-weight: bold } /* Generic.Strong */ +html[data-theme="light"] .highlight .gu { color: #005b82 } /* Generic.Subheading */ +html[data-theme="light"] .highlight .kc { color: #6730c5 } /* Keyword.Constant */ +html[data-theme="light"] .highlight .kd { color: #6730c5 } /* Keyword.Declaration */ +html[data-theme="light"] .highlight .kn { color: #6730c5 } /* Keyword.Namespace */ +html[data-theme="light"] .highlight .kp { color: #6730c5 } /* Keyword.Pseudo */ +html[data-theme="light"] .highlight .kr { color: #6730c5 } /* Keyword.Reserved */ +html[data-theme="light"] .highlight .kt { color: #7f4707 } /* Keyword.Type */ +html[data-theme="light"] .highlight .ld { color: #7f4707 } /* Literal.Date */ +html[data-theme="light"] .highlight .m { color: #7f4707 } /* Literal.Number */ +html[data-theme="light"] .highlight .s { color: #00622f } /* Literal.String */ +html[data-theme="light"] .highlight .na { color: #912583 } /* Name.Attribute */ +html[data-theme="light"] .highlight .nb { color: #7f4707 } /* Name.Builtin */ +html[data-theme="light"] .highlight .nc { color: #005b82 } /* Name.Class */ +html[data-theme="light"] .highlight .no { color: #005b82 } /* Name.Constant */ +html[data-theme="light"] .highlight .nd { color: #7f4707 } /* Name.Decorator */ +html[data-theme="light"] .highlight .ni { color: #00622f } /* Name.Entity */ +html[data-theme="light"] .highlight .ne { color: #6730c5 } /* Name.Exception */ +html[data-theme="light"] .highlight .nf { color: #005b82 } /* Name.Function */ +html[data-theme="light"] .highlight .nl { color: #7f4707 } /* Name.Label */ +html[data-theme="light"] .highlight .nn { color: #080808 } /* Name.Namespace */ +html[data-theme="light"] .highlight .nx { color: #080808 } /* Name.Other */ +html[data-theme="light"] .highlight .py { color: #005b82 } /* Name.Property */ +html[data-theme="light"] .highlight .nt { color: #005b82 } /* Name.Tag */ +html[data-theme="light"] .highlight .nv { color: #a12236 } /* Name.Variable */ +html[data-theme="light"] .highlight .ow { color: #6730c5 } /* Operator.Word */ +html[data-theme="light"] .highlight .pm { color: #080808 } /* Punctuation.Marker */ +html[data-theme="light"] .highlight .w { color: #080808 } /* Text.Whitespace */ +html[data-theme="light"] .highlight .mb { color: #7f4707 } /* Literal.Number.Bin */ +html[data-theme="light"] .highlight .mf { color: #7f4707 } /* Literal.Number.Float */ +html[data-theme="light"] .highlight .mh { color: #7f4707 } /* Literal.Number.Hex */ +html[data-theme="light"] .highlight .mi { color: #7f4707 } /* Literal.Number.Integer */ +html[data-theme="light"] .highlight .mo { color: #7f4707 } /* Literal.Number.Oct */ +html[data-theme="light"] .highlight .sa { color: #00622f } /* Literal.String.Affix */ +html[data-theme="light"] .highlight .sb { color: #00622f } /* Literal.String.Backtick */ +html[data-theme="light"] .highlight .sc { color: #00622f } /* Literal.String.Char */ +html[data-theme="light"] .highlight .dl { color: #00622f } /* Literal.String.Delimiter */ +html[data-theme="light"] .highlight .sd { color: #00622f } /* Literal.String.Doc */ +html[data-theme="light"] .highlight .s2 { color: #00622f } /* Literal.String.Double */ +html[data-theme="light"] .highlight .se { color: #00622f } /* Literal.String.Escape */ +html[data-theme="light"] .highlight .sh { color: #00622f } /* Literal.String.Heredoc */ +html[data-theme="light"] .highlight .si { color: #00622f } /* Literal.String.Interpol */ +html[data-theme="light"] .highlight .sx { color: #00622f } /* Literal.String.Other */ +html[data-theme="light"] .highlight .sr { color: #a12236 } /* Literal.String.Regex */ +html[data-theme="light"] .highlight .s1 { color: #00622f } /* Literal.String.Single */ +html[data-theme="light"] .highlight .ss { color: #005b82 } /* Literal.String.Symbol */ +html[data-theme="light"] .highlight .bp { color: #7f4707 } /* Name.Builtin.Pseudo */ +html[data-theme="light"] .highlight .fm { color: #005b82 } /* Name.Function.Magic */ +html[data-theme="light"] .highlight .vc { color: #a12236 } /* Name.Variable.Class */ +html[data-theme="light"] .highlight .vg { color: #a12236 } /* Name.Variable.Global */ +html[data-theme="light"] .highlight .vi { color: #a12236 } /* Name.Variable.Instance */ +html[data-theme="light"] .highlight .vm { color: #7f4707 } /* Name.Variable.Magic */ +html[data-theme="light"] .highlight .il { color: #7f4707 } /* Literal.Number.Integer.Long */ +html[data-theme="dark"] .highlight pre { line-height: 125%; } +html[data-theme="dark"] .highlight td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +html[data-theme="dark"] .highlight span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +html[data-theme="dark"] .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +html[data-theme="dark"] .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +html[data-theme="dark"] .highlight .hll { background-color: #ffd9002e } +html[data-theme="dark"] .highlight { background: #2b2b2b; color: #f8f8f2 } +html[data-theme="dark"] .highlight .c { color: #ffd900 } /* Comment */ +html[data-theme="dark"] .highlight .err { color: #ffa07a } /* Error */ +html[data-theme="dark"] .highlight .k { color: #dcc6e0 } /* Keyword */ +html[data-theme="dark"] .highlight .l { color: #ffd900 } /* Literal */ +html[data-theme="dark"] .highlight .n { color: #f8f8f2 } /* Name */ +html[data-theme="dark"] .highlight .o { color: #abe338 } /* Operator */ +html[data-theme="dark"] .highlight .p { color: #f8f8f2 } /* Punctuation */ +html[data-theme="dark"] .highlight .ch { color: #ffd900 } /* Comment.Hashbang */ +html[data-theme="dark"] .highlight .cm { color: #ffd900 } /* Comment.Multiline */ +html[data-theme="dark"] .highlight .cp { color: #ffd900 } /* Comment.Preproc */ +html[data-theme="dark"] .highlight .cpf { color: #ffd900 } /* Comment.PreprocFile */ +html[data-theme="dark"] .highlight .c1 { color: #ffd900 } /* Comment.Single */ +html[data-theme="dark"] .highlight .cs { color: #ffd900 } /* Comment.Special */ +html[data-theme="dark"] .highlight .gd { color: #00e0e0 } /* Generic.Deleted */ +html[data-theme="dark"] .highlight .ge { font-style: italic } /* Generic.Emph */ +html[data-theme="dark"] .highlight .gh { color: #00e0e0 } /* Generic.Heading */ +html[data-theme="dark"] .highlight .gs { font-weight: bold } /* Generic.Strong */ +html[data-theme="dark"] .highlight .gu { color: #00e0e0 } /* Generic.Subheading */ +html[data-theme="dark"] .highlight .kc { color: #dcc6e0 } /* Keyword.Constant */ +html[data-theme="dark"] .highlight .kd { color: #dcc6e0 } /* Keyword.Declaration */ +html[data-theme="dark"] .highlight .kn { color: #dcc6e0 } /* Keyword.Namespace */ +html[data-theme="dark"] .highlight .kp { color: #dcc6e0 } /* Keyword.Pseudo */ +html[data-theme="dark"] .highlight .kr { color: #dcc6e0 } /* Keyword.Reserved */ +html[data-theme="dark"] .highlight .kt { color: #ffd900 } /* Keyword.Type */ +html[data-theme="dark"] .highlight .ld { color: #ffd900 } /* Literal.Date */ +html[data-theme="dark"] .highlight .m { color: #ffd900 } /* Literal.Number */ +html[data-theme="dark"] .highlight .s { color: #abe338 } /* Literal.String */ +html[data-theme="dark"] .highlight .na { color: #ffd900 } /* Name.Attribute */ +html[data-theme="dark"] .highlight .nb { color: #ffd900 } /* Name.Builtin */ +html[data-theme="dark"] .highlight .nc { color: #00e0e0 } /* Name.Class */ +html[data-theme="dark"] .highlight .no { color: #00e0e0 } /* Name.Constant */ +html[data-theme="dark"] .highlight .nd { color: #ffd900 } /* Name.Decorator */ +html[data-theme="dark"] .highlight .ni { color: #abe338 } /* Name.Entity */ +html[data-theme="dark"] .highlight .ne { color: #dcc6e0 } /* Name.Exception */ +html[data-theme="dark"] .highlight .nf { color: #00e0e0 } /* Name.Function */ +html[data-theme="dark"] .highlight .nl { color: #ffd900 } /* Name.Label */ +html[data-theme="dark"] .highlight .nn { color: #f8f8f2 } /* Name.Namespace */ +html[data-theme="dark"] .highlight .nx { color: #f8f8f2 } /* Name.Other */ +html[data-theme="dark"] .highlight .py { color: #00e0e0 } /* Name.Property */ +html[data-theme="dark"] .highlight .nt { color: #00e0e0 } /* Name.Tag */ +html[data-theme="dark"] .highlight .nv { color: #ffa07a } /* Name.Variable */ +html[data-theme="dark"] .highlight .ow { color: #dcc6e0 } /* Operator.Word */ +html[data-theme="dark"] .highlight .pm { color: #f8f8f2 } /* Punctuation.Marker */ +html[data-theme="dark"] .highlight .w { color: #f8f8f2 } /* Text.Whitespace */ +html[data-theme="dark"] .highlight .mb { color: #ffd900 } /* Literal.Number.Bin */ +html[data-theme="dark"] .highlight .mf { color: #ffd900 } /* Literal.Number.Float */ +html[data-theme="dark"] .highlight .mh { color: #ffd900 } /* Literal.Number.Hex */ +html[data-theme="dark"] .highlight .mi { color: #ffd900 } /* Literal.Number.Integer */ +html[data-theme="dark"] .highlight .mo { color: #ffd900 } /* Literal.Number.Oct */ +html[data-theme="dark"] .highlight .sa { color: #abe338 } /* Literal.String.Affix */ +html[data-theme="dark"] .highlight .sb { color: #abe338 } /* Literal.String.Backtick */ +html[data-theme="dark"] .highlight .sc { color: #abe338 } /* Literal.String.Char */ +html[data-theme="dark"] .highlight .dl { color: #abe338 } /* Literal.String.Delimiter */ +html[data-theme="dark"] .highlight .sd { color: #abe338 } /* Literal.String.Doc */ +html[data-theme="dark"] .highlight .s2 { color: #abe338 } /* Literal.String.Double */ +html[data-theme="dark"] .highlight .se { color: #abe338 } /* Literal.String.Escape */ +html[data-theme="dark"] .highlight .sh { color: #abe338 } /* Literal.String.Heredoc */ +html[data-theme="dark"] .highlight .si { color: #abe338 } /* Literal.String.Interpol */ +html[data-theme="dark"] .highlight .sx { color: #abe338 } /* Literal.String.Other */ +html[data-theme="dark"] .highlight .sr { color: #ffa07a } /* Literal.String.Regex */ +html[data-theme="dark"] .highlight .s1 { color: #abe338 } /* Literal.String.Single */ +html[data-theme="dark"] .highlight .ss { color: #00e0e0 } /* Literal.String.Symbol */ +html[data-theme="dark"] .highlight .bp { color: #ffd900 } /* Name.Builtin.Pseudo */ +html[data-theme="dark"] .highlight .fm { color: #00e0e0 } /* Name.Function.Magic */ +html[data-theme="dark"] .highlight .vc { color: #ffa07a } /* Name.Variable.Class */ +html[data-theme="dark"] .highlight .vg { color: #ffa07a } /* Name.Variable.Global */ +html[data-theme="dark"] .highlight .vi { color: #ffa07a } /* Name.Variable.Instance */ +html[data-theme="dark"] .highlight .vm { color: #ffd900 } /* Name.Variable.Magic */ +html[data-theme="dark"] .highlight .il { color: #ffd900 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/spec/_static/sbt-webpack-macros.html b/spec/_static/sbt-webpack-macros.html new file mode 100644 index 0000000000..6cbf559faa --- /dev/null +++ b/spec/_static/sbt-webpack-macros.html @@ -0,0 +1,11 @@ + +{% macro head_pre_bootstrap() %} + +{% endmacro %} + +{% macro body_post() %} + +{% endmacro %} diff --git a/spec/_static/scripts/bootstrap.js b/spec/_static/scripts/bootstrap.js new file mode 100644 index 0000000000..c8178debbc --- /dev/null +++ b/spec/_static/scripts/bootstrap.js @@ -0,0 +1,3 @@ +/*! For license information please see bootstrap.js.LICENSE.txt */ +(()=>{"use strict";var t={d:(e,i)=>{for(var n in i)t.o(i,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:i[n]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};t.r(e),t.d(e,{afterMain:()=>E,afterRead:()=>v,afterWrite:()=>C,applyStyles:()=>$,arrow:()=>J,auto:()=>a,basePlacements:()=>l,beforeMain:()=>y,beforeRead:()=>_,beforeWrite:()=>A,bottom:()=>s,clippingParents:()=>d,computeStyles:()=>it,createPopper:()=>Dt,createPopperBase:()=>St,createPopperLite:()=>$t,detectOverflow:()=>_t,end:()=>h,eventListeners:()=>st,flip:()=>bt,hide:()=>wt,left:()=>r,main:()=>w,modifierPhases:()=>O,offset:()=>Et,placements:()=>g,popper:()=>f,popperGenerator:()=>Lt,popperOffsets:()=>At,preventOverflow:()=>Tt,read:()=>b,reference:()=>p,right:()=>o,start:()=>c,top:()=>n,variationPlacements:()=>m,viewport:()=>u,write:()=>T});var i={};t.r(i),t.d(i,{Alert:()=>Oe,Button:()=>ke,Carousel:()=>li,Collapse:()=>Ei,Dropdown:()=>Ki,Modal:()=>Ln,Offcanvas:()=>Kn,Popover:()=>bs,ScrollSpy:()=>Ls,Tab:()=>Js,Toast:()=>po,Tooltip:()=>fs});var n="top",s="bottom",o="right",r="left",a="auto",l=[n,s,o,r],c="start",h="end",d="clippingParents",u="viewport",f="popper",p="reference",m=l.reduce((function(t,e){return t.concat([e+"-"+c,e+"-"+h])}),[]),g=[].concat(l,[a]).reduce((function(t,e){return t.concat([e,e+"-"+c,e+"-"+h])}),[]),_="beforeRead",b="read",v="afterRead",y="beforeMain",w="main",E="afterMain",A="beforeWrite",T="write",C="afterWrite",O=[_,b,v,y,w,E,A,T,C];function x(t){return t?(t.nodeName||"").toLowerCase():null}function k(t){if(null==t)return window;if("[object Window]"!==t.toString()){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function L(t){return t instanceof k(t).Element||t instanceof Element}function S(t){return t instanceof k(t).HTMLElement||t instanceof HTMLElement}function D(t){return"undefined"!=typeof ShadowRoot&&(t instanceof k(t).ShadowRoot||t instanceof ShadowRoot)}const $={name:"applyStyles",enabled:!0,phase:"write",fn:function(t){var e=t.state;Object.keys(e.elements).forEach((function(t){var i=e.styles[t]||{},n=e.attributes[t]||{},s=e.elements[t];S(s)&&x(s)&&(Object.assign(s.style,i),Object.keys(n).forEach((function(t){var e=n[t];!1===e?s.removeAttribute(t):s.setAttribute(t,!0===e?"":e)})))}))},effect:function(t){var e=t.state,i={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,i.popper),e.styles=i,e.elements.arrow&&Object.assign(e.elements.arrow.style,i.arrow),function(){Object.keys(e.elements).forEach((function(t){var n=e.elements[t],s=e.attributes[t]||{},o=Object.keys(e.styles.hasOwnProperty(t)?e.styles[t]:i[t]).reduce((function(t,e){return t[e]="",t}),{});S(n)&&x(n)&&(Object.assign(n.style,o),Object.keys(s).forEach((function(t){n.removeAttribute(t)})))}))}},requires:["computeStyles"]};function I(t){return t.split("-")[0]}var N=Math.max,P=Math.min,M=Math.round;function j(){var t=navigator.userAgentData;return null!=t&&t.brands&&Array.isArray(t.brands)?t.brands.map((function(t){return t.brand+"/"+t.version})).join(" "):navigator.userAgent}function F(){return!/^((?!chrome|android).)*safari/i.test(j())}function H(t,e,i){void 0===e&&(e=!1),void 0===i&&(i=!1);var n=t.getBoundingClientRect(),s=1,o=1;e&&S(t)&&(s=t.offsetWidth>0&&M(n.width)/t.offsetWidth||1,o=t.offsetHeight>0&&M(n.height)/t.offsetHeight||1);var r=(L(t)?k(t):window).visualViewport,a=!F()&&i,l=(n.left+(a&&r?r.offsetLeft:0))/s,c=(n.top+(a&&r?r.offsetTop:0))/o,h=n.width/s,d=n.height/o;return{width:h,height:d,top:c,right:l+h,bottom:c+d,left:l,x:l,y:c}}function B(t){var e=H(t),i=t.offsetWidth,n=t.offsetHeight;return Math.abs(e.width-i)<=1&&(i=e.width),Math.abs(e.height-n)<=1&&(n=e.height),{x:t.offsetLeft,y:t.offsetTop,width:i,height:n}}function W(t,e){var i=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(i&&D(i)){var n=e;do{if(n&&t.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function z(t){return k(t).getComputedStyle(t)}function R(t){return["table","td","th"].indexOf(x(t))>=0}function q(t){return((L(t)?t.ownerDocument:t.document)||window.document).documentElement}function V(t){return"html"===x(t)?t:t.assignedSlot||t.parentNode||(D(t)?t.host:null)||q(t)}function Y(t){return S(t)&&"fixed"!==z(t).position?t.offsetParent:null}function K(t){for(var e=k(t),i=Y(t);i&&R(i)&&"static"===z(i).position;)i=Y(i);return i&&("html"===x(i)||"body"===x(i)&&"static"===z(i).position)?e:i||function(t){var e=/firefox/i.test(j());if(/Trident/i.test(j())&&S(t)&&"fixed"===z(t).position)return null;var i=V(t);for(D(i)&&(i=i.host);S(i)&&["html","body"].indexOf(x(i))<0;){var n=z(i);if("none"!==n.transform||"none"!==n.perspective||"paint"===n.contain||-1!==["transform","perspective"].indexOf(n.willChange)||e&&"filter"===n.willChange||e&&n.filter&&"none"!==n.filter)return i;i=i.parentNode}return null}(t)||e}function Q(t){return["top","bottom"].indexOf(t)>=0?"x":"y"}function X(t,e,i){return N(t,P(e,i))}function U(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function G(t,e){return e.reduce((function(e,i){return e[i]=t,e}),{})}const J={name:"arrow",enabled:!0,phase:"main",fn:function(t){var e,i=t.state,a=t.name,c=t.options,h=i.elements.arrow,d=i.modifiersData.popperOffsets,u=I(i.placement),f=Q(u),p=[r,o].indexOf(u)>=0?"height":"width";if(h&&d){var m=function(t,e){return U("number"!=typeof(t="function"==typeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:G(t,l))}(c.padding,i),g=B(h),_="y"===f?n:r,b="y"===f?s:o,v=i.rects.reference[p]+i.rects.reference[f]-d[f]-i.rects.popper[p],y=d[f]-i.rects.reference[f],w=K(h),E=w?"y"===f?w.clientHeight||0:w.clientWidth||0:0,A=v/2-y/2,T=m[_],C=E-g[p]-m[b],O=E/2-g[p]/2+A,x=X(T,O,C),k=f;i.modifiersData[a]=((e={})[k]=x,e.centerOffset=x-O,e)}},effect:function(t){var e=t.state,i=t.options.element,n=void 0===i?"[data-popper-arrow]":i;null!=n&&("string"!=typeof n||(n=e.elements.popper.querySelector(n)))&&W(e.elements.popper,n)&&(e.elements.arrow=n)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function Z(t){return t.split("-")[1]}var tt={top:"auto",right:"auto",bottom:"auto",left:"auto"};function et(t){var e,i=t.popper,a=t.popperRect,l=t.placement,c=t.variation,d=t.offsets,u=t.position,f=t.gpuAcceleration,p=t.adaptive,m=t.roundOffsets,g=t.isFixed,_=d.x,b=void 0===_?0:_,v=d.y,y=void 0===v?0:v,w="function"==typeof m?m({x:b,y}):{x:b,y};b=w.x,y=w.y;var E=d.hasOwnProperty("x"),A=d.hasOwnProperty("y"),T=r,C=n,O=window;if(p){var x=K(i),L="clientHeight",S="clientWidth";x===k(i)&&"static"!==z(x=q(i)).position&&"absolute"===u&&(L="scrollHeight",S="scrollWidth"),(l===n||(l===r||l===o)&&c===h)&&(C=s,y-=(g&&x===O&&O.visualViewport?O.visualViewport.height:x[L])-a.height,y*=f?1:-1),l!==r&&(l!==n&&l!==s||c!==h)||(T=o,b-=(g&&x===O&&O.visualViewport?O.visualViewport.width:x[S])-a.width,b*=f?1:-1)}var D,$=Object.assign({position:u},p&&tt),I=!0===m?function(t,e){var i=t.x,n=t.y,s=e.devicePixelRatio||1;return{x:M(i*s)/s||0,y:M(n*s)/s||0}}({x:b,y},k(i)):{x:b,y};return b=I.x,y=I.y,f?Object.assign({},$,((D={})[C]=A?"0":"",D[T]=E?"0":"",D.transform=(O.devicePixelRatio||1)<=1?"translate("+b+"px, "+y+"px)":"translate3d("+b+"px, "+y+"px, 0)",D)):Object.assign({},$,((e={})[C]=A?y+"px":"",e[T]=E?b+"px":"",e.transform="",e))}const it={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(t){var e=t.state,i=t.options,n=i.gpuAcceleration,s=void 0===n||n,o=i.adaptive,r=void 0===o||o,a=i.roundOffsets,l=void 0===a||a,c={placement:I(e.placement),variation:Z(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:s,isFixed:"fixed"===e.options.strategy};null!=e.modifiersData.popperOffsets&&(e.styles.popper=Object.assign({},e.styles.popper,et(Object.assign({},c,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:r,roundOffsets:l})))),null!=e.modifiersData.arrow&&(e.styles.arrow=Object.assign({},e.styles.arrow,et(Object.assign({},c,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})},data:{}};var nt={passive:!0};const st={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(t){var e=t.state,i=t.instance,n=t.options,s=n.scroll,o=void 0===s||s,r=n.resize,a=void 0===r||r,l=k(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return o&&c.forEach((function(t){t.addEventListener("scroll",i.update,nt)})),a&&l.addEventListener("resize",i.update,nt),function(){o&&c.forEach((function(t){t.removeEventListener("scroll",i.update,nt)})),a&&l.removeEventListener("resize",i.update,nt)}},data:{}};var ot={left:"right",right:"left",bottom:"top",top:"bottom"};function rt(t){return t.replace(/left|right|bottom|top/g,(function(t){return ot[t]}))}var at={start:"end",end:"start"};function lt(t){return t.replace(/start|end/g,(function(t){return at[t]}))}function ct(t){var e=k(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function ht(t){return H(q(t)).left+ct(t).scrollLeft}function dt(t){var e=z(t),i=e.overflow,n=e.overflowX,s=e.overflowY;return/auto|scroll|overlay|hidden/.test(i+s+n)}function ut(t){return["html","body","#document"].indexOf(x(t))>=0?t.ownerDocument.body:S(t)&&dt(t)?t:ut(V(t))}function ft(t,e){var i;void 0===e&&(e=[]);var n=ut(t),s=n===(null==(i=t.ownerDocument)?void 0:i.body),o=k(n),r=s?[o].concat(o.visualViewport||[],dt(n)?n:[]):n,a=e.concat(r);return s?a:a.concat(ft(V(r)))}function pt(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function mt(t,e,i){return e===u?pt(function(t,e){var i=k(t),n=q(t),s=i.visualViewport,o=n.clientWidth,r=n.clientHeight,a=0,l=0;if(s){o=s.width,r=s.height;var c=F();(c||!c&&"fixed"===e)&&(a=s.offsetLeft,l=s.offsetTop)}return{width:o,height:r,x:a+ht(t),y:l}}(t,i)):L(e)?function(t,e){var i=H(t,!1,"fixed"===e);return i.top=i.top+t.clientTop,i.left=i.left+t.clientLeft,i.bottom=i.top+t.clientHeight,i.right=i.left+t.clientWidth,i.width=t.clientWidth,i.height=t.clientHeight,i.x=i.left,i.y=i.top,i}(e,i):pt(function(t){var e,i=q(t),n=ct(t),s=null==(e=t.ownerDocument)?void 0:e.body,o=N(i.scrollWidth,i.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),r=N(i.scrollHeight,i.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a=-n.scrollLeft+ht(t),l=-n.scrollTop;return"rtl"===z(s||i).direction&&(a+=N(i.clientWidth,s?s.clientWidth:0)-o),{width:o,height:r,x:a,y:l}}(q(t)))}function gt(t){var e,i=t.reference,a=t.element,l=t.placement,d=l?I(l):null,u=l?Z(l):null,f=i.x+i.width/2-a.width/2,p=i.y+i.height/2-a.height/2;switch(d){case n:e={x:f,y:i.y-a.height};break;case s:e={x:f,y:i.y+i.height};break;case o:e={x:i.x+i.width,y:p};break;case r:e={x:i.x-a.width,y:p};break;default:e={x:i.x,y:i.y}}var m=d?Q(d):null;if(null!=m){var g="y"===m?"height":"width";switch(u){case c:e[m]=e[m]-(i[g]/2-a[g]/2);break;case h:e[m]=e[m]+(i[g]/2-a[g]/2)}}return e}function _t(t,e){void 0===e&&(e={});var i=e,r=i.placement,a=void 0===r?t.placement:r,c=i.strategy,h=void 0===c?t.strategy:c,m=i.boundary,g=void 0===m?d:m,_=i.rootBoundary,b=void 0===_?u:_,v=i.elementContext,y=void 0===v?f:v,w=i.altBoundary,E=void 0!==w&&w,A=i.padding,T=void 0===A?0:A,C=U("number"!=typeof T?T:G(T,l)),O=y===f?p:f,k=t.rects.popper,D=t.elements[E?O:y],$=function(t,e,i,n){var s="clippingParents"===e?function(t){var e=ft(V(t)),i=["absolute","fixed"].indexOf(z(t).position)>=0&&S(t)?K(t):t;return L(i)?e.filter((function(t){return L(t)&&W(t,i)&&"body"!==x(t)})):[]}(t):[].concat(e),o=[].concat(s,[i]),r=o[0],a=o.reduce((function(e,i){var s=mt(t,i,n);return e.top=N(s.top,e.top),e.right=P(s.right,e.right),e.bottom=P(s.bottom,e.bottom),e.left=N(s.left,e.left),e}),mt(t,r,n));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}(L(D)?D:D.contextElement||q(t.elements.popper),g,b,h),I=H(t.elements.reference),M=gt({reference:I,element:k,strategy:"absolute",placement:a}),j=pt(Object.assign({},k,M)),F=y===f?j:I,B={top:$.top-F.top+C.top,bottom:F.bottom-$.bottom+C.bottom,left:$.left-F.left+C.left,right:F.right-$.right+C.right},R=t.modifiersData.offset;if(y===f&&R){var Y=R[a];Object.keys(B).forEach((function(t){var e=[o,s].indexOf(t)>=0?1:-1,i=[n,s].indexOf(t)>=0?"y":"x";B[t]+=Y[i]*e}))}return B}const bt={name:"flip",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,h=t.name;if(!e.modifiersData[h]._skip){for(var d=i.mainAxis,u=void 0===d||d,f=i.altAxis,p=void 0===f||f,_=i.fallbackPlacements,b=i.padding,v=i.boundary,y=i.rootBoundary,w=i.altBoundary,E=i.flipVariations,A=void 0===E||E,T=i.allowedAutoPlacements,C=e.options.placement,O=I(C),x=_||(O!==C&&A?function(t){if(I(t)===a)return[];var e=rt(t);return[lt(t),e,lt(e)]}(C):[rt(C)]),k=[C].concat(x).reduce((function(t,i){return t.concat(I(i)===a?function(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=i.boundary,o=i.rootBoundary,r=i.padding,a=i.flipVariations,c=i.allowedAutoPlacements,h=void 0===c?g:c,d=Z(n),u=d?a?m:m.filter((function(t){return Z(t)===d})):l,f=u.filter((function(t){return h.indexOf(t)>=0}));0===f.length&&(f=u);var p=f.reduce((function(e,i){return e[i]=_t(t,{placement:i,boundary:s,rootBoundary:o,padding:r})[I(i)],e}),{});return Object.keys(p).sort((function(t,e){return p[t]-p[e]}))}(e,{placement:i,boundary:v,rootBoundary:y,padding:b,flipVariations:A,allowedAutoPlacements:T}):i)}),[]),L=e.rects.reference,S=e.rects.popper,D=new Map,$=!0,N=k[0],P=0;P=0,B=H?"width":"height",W=_t(e,{placement:M,boundary:v,rootBoundary:y,altBoundary:w,padding:b}),z=H?F?o:r:F?s:n;L[B]>S[B]&&(z=rt(z));var R=rt(z),q=[];if(u&&q.push(W[j]<=0),p&&q.push(W[z]<=0,W[R]<=0),q.every((function(t){return t}))){N=M,$=!1;break}D.set(M,q)}if($)for(var V=function(t){var e=k.find((function(e){var i=D.get(e);if(i)return i.slice(0,t).every((function(t){return t}))}));if(e)return N=e,"break"},Y=A?3:1;Y>0&&"break"!==V(Y);Y--);e.placement!==N&&(e.modifiersData[h]._skip=!0,e.placement=N,e.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function vt(t,e,i){return void 0===i&&(i={x:0,y:0}),{top:t.top-e.height-i.y,right:t.right-e.width+i.x,bottom:t.bottom-e.height+i.y,left:t.left-e.width-i.x}}function yt(t){return[n,o,s,r].some((function(e){return t[e]>=0}))}const wt={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(t){var e=t.state,i=t.name,n=e.rects.reference,s=e.rects.popper,o=e.modifiersData.preventOverflow,r=_t(e,{elementContext:"reference"}),a=_t(e,{altBoundary:!0}),l=vt(r,n),c=vt(a,s,o),h=yt(l),d=yt(c);e.modifiersData[i]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:h,hasPopperEscaped:d},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":h,"data-popper-escaped":d})}},Et={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(t){var e=t.state,i=t.options,s=t.name,a=i.offset,l=void 0===a?[0,0]:a,c=g.reduce((function(t,i){return t[i]=function(t,e,i){var s=I(t),a=[r,n].indexOf(s)>=0?-1:1,l="function"==typeof i?i(Object.assign({},e,{placement:t})):i,c=l[0],h=l[1];return c=c||0,h=(h||0)*a,[r,o].indexOf(s)>=0?{x:h,y:c}:{x:c,y:h}}(i,e.rects,l),t}),{}),h=c[e.placement],d=h.x,u=h.y;null!=e.modifiersData.popperOffsets&&(e.modifiersData.popperOffsets.x+=d,e.modifiersData.popperOffsets.y+=u),e.modifiersData[s]=c}},At={name:"popperOffsets",enabled:!0,phase:"read",fn:function(t){var e=t.state,i=t.name;e.modifiersData[i]=gt({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})},data:{}},Tt={name:"preventOverflow",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,a=t.name,l=i.mainAxis,h=void 0===l||l,d=i.altAxis,u=void 0!==d&&d,f=i.boundary,p=i.rootBoundary,m=i.altBoundary,g=i.padding,_=i.tether,b=void 0===_||_,v=i.tetherOffset,y=void 0===v?0:v,w=_t(e,{boundary:f,rootBoundary:p,padding:g,altBoundary:m}),E=I(e.placement),A=Z(e.placement),T=!A,C=Q(E),O="x"===C?"y":"x",x=e.modifiersData.popperOffsets,k=e.rects.reference,L=e.rects.popper,S="function"==typeof y?y(Object.assign({},e.rects,{placement:e.placement})):y,D="number"==typeof S?{mainAxis:S,altAxis:S}:Object.assign({mainAxis:0,altAxis:0},S),$=e.modifiersData.offset?e.modifiersData.offset[e.placement]:null,M={x:0,y:0};if(x){if(h){var j,F="y"===C?n:r,H="y"===C?s:o,W="y"===C?"height":"width",z=x[C],R=z+w[F],q=z-w[H],V=b?-L[W]/2:0,Y=A===c?k[W]:L[W],U=A===c?-L[W]:-k[W],G=e.elements.arrow,J=b&&G?B(G):{width:0,height:0},tt=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},et=tt[F],it=tt[H],nt=X(0,k[W],J[W]),st=T?k[W]/2-V-nt-et-D.mainAxis:Y-nt-et-D.mainAxis,ot=T?-k[W]/2+V+nt+it+D.mainAxis:U+nt+it+D.mainAxis,rt=e.elements.arrow&&K(e.elements.arrow),at=rt?"y"===C?rt.clientTop||0:rt.clientLeft||0:0,lt=null!=(j=null==$?void 0:$[C])?j:0,ct=z+ot-lt,ht=X(b?P(R,z+st-lt-at):R,z,b?N(q,ct):q);x[C]=ht,M[C]=ht-z}if(u){var dt,ut="x"===C?n:r,ft="x"===C?s:o,pt=x[O],mt="y"===O?"height":"width",gt=pt+w[ut],bt=pt-w[ft],vt=-1!==[n,r].indexOf(E),yt=null!=(dt=null==$?void 0:$[O])?dt:0,wt=vt?gt:pt-k[mt]-L[mt]-yt+D.altAxis,Et=vt?pt+k[mt]+L[mt]-yt-D.altAxis:bt,At=b&&vt?function(t,e,i){var n=X(t,e,i);return n>i?i:n}(wt,pt,Et):X(b?wt:gt,pt,b?Et:bt);x[O]=At,M[O]=At-pt}e.modifiersData[a]=M}},requiresIfExists:["offset"]};function Ct(t,e,i){void 0===i&&(i=!1);var n,s,o=S(e),r=S(e)&&function(t){var e=t.getBoundingClientRect(),i=M(e.width)/t.offsetWidth||1,n=M(e.height)/t.offsetHeight||1;return 1!==i||1!==n}(e),a=q(e),l=H(t,r,i),c={scrollLeft:0,scrollTop:0},h={x:0,y:0};return(o||!o&&!i)&&(("body"!==x(e)||dt(a))&&(c=(n=e)!==k(n)&&S(n)?{scrollLeft:(s=n).scrollLeft,scrollTop:s.scrollTop}:ct(n)),S(e)?((h=H(e,!0)).x+=e.clientLeft,h.y+=e.clientTop):a&&(h.x=ht(a))),{x:l.left+c.scrollLeft-h.x,y:l.top+c.scrollTop-h.y,width:l.width,height:l.height}}function Ot(t){var e=new Map,i=new Set,n=[];function s(t){i.add(t.name),[].concat(t.requires||[],t.requiresIfExists||[]).forEach((function(t){if(!i.has(t)){var n=e.get(t);n&&s(n)}})),n.push(t)}return t.forEach((function(t){e.set(t.name,t)})),t.forEach((function(t){i.has(t.name)||s(t)})),n}var xt={placement:"bottom",modifiers:[],strategy:"absolute"};function kt(){for(var t=arguments.length,e=new Array(t),i=0;iIt.has(t)&&It.get(t).get(e)||null,remove(t,e){if(!It.has(t))return;const i=It.get(t);i.delete(e),0===i.size&&It.delete(t)}},Pt="transitionend",Mt=t=>(t&&window.CSS&&window.CSS.escape&&(t=t.replace(/#([^\s"#']+)/g,((t,e)=>`#${CSS.escape(e)}`))),t),jt=t=>{t.dispatchEvent(new Event(Pt))},Ft=t=>!(!t||"object"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),Ht=t=>Ft(t)?t.jquery?t[0]:t:"string"==typeof t&&t.length>0?document.querySelector(Mt(t)):null,Bt=t=>{if(!Ft(t)||0===t.getClientRects().length)return!1;const e="visible"===getComputedStyle(t).getPropertyValue("visibility"),i=t.closest("details:not([open])");if(!i)return e;if(i!==t){const e=t.closest("summary");if(e&&e.parentNode!==i)return!1;if(null===e)return!1}return e},Wt=t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")),zt=t=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?zt(t.parentNode):null},Rt=()=>{},qt=t=>{t.offsetHeight},Vt=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,Yt=[],Kt=()=>"rtl"===document.documentElement.dir,Qt=t=>{var e;e=()=>{const e=Vt();if(e){const i=t.NAME,n=e.fn[i];e.fn[i]=t.jQueryInterface,e.fn[i].Constructor=t,e.fn[i].noConflict=()=>(e.fn[i]=n,t.jQueryInterface)}},"loading"===document.readyState?(Yt.length||document.addEventListener("DOMContentLoaded",(()=>{for(const t of Yt)t()})),Yt.push(e)):e()},Xt=(t,e=[],i=t)=>"function"==typeof t?t(...e):i,Ut=(t,e,i=!0)=>{if(!i)return void Xt(t);const n=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:i}=window.getComputedStyle(t);const n=Number.parseFloat(e),s=Number.parseFloat(i);return n||s?(e=e.split(",")[0],i=i.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(i))):0})(e)+5;let s=!1;const o=({target:i})=>{i===e&&(s=!0,e.removeEventListener(Pt,o),Xt(t))};e.addEventListener(Pt,o),setTimeout((()=>{s||jt(e)}),n)},Gt=(t,e,i,n)=>{const s=t.length;let o=t.indexOf(e);return-1===o?!i&&n?t[s-1]:t[0]:(o+=i?1:-1,n&&(o=(o+s)%s),t[Math.max(0,Math.min(o,s-1))])},Jt=/[^.]*(?=\..*)\.|.*/,Zt=/\..*/,te=/::\d+$/,ee={};let ie=1;const ne={mouseenter:"mouseover",mouseleave:"mouseout"},se=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function oe(t,e){return e&&`${e}::${ie++}`||t.uidEvent||ie++}function re(t){const e=oe(t);return t.uidEvent=e,ee[e]=ee[e]||{},ee[e]}function ae(t,e,i=null){return Object.values(t).find((t=>t.callable===e&&t.delegationSelector===i))}function le(t,e,i){const n="string"==typeof e,s=n?i:e||i;let o=ue(t);return se.has(o)||(o=t),[n,s,o]}function ce(t,e,i,n,s){if("string"!=typeof e||!t)return;let[o,r,a]=le(e,i,n);if(e in ne){const t=t=>function(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};r=t(r)}const l=re(t),c=l[a]||(l[a]={}),h=ae(c,r,o?i:null);if(h)return void(h.oneOff=h.oneOff&&s);const d=oe(r,e.replace(Jt,"")),u=o?function(t,e,i){return function n(s){const o=t.querySelectorAll(e);for(let{target:r}=s;r&&r!==this;r=r.parentNode)for(const a of o)if(a===r)return pe(s,{delegateTarget:r}),n.oneOff&&fe.off(t,s.type,e,i),i.apply(r,[s])}}(t,i,r):function(t,e){return function i(n){return pe(n,{delegateTarget:t}),i.oneOff&&fe.off(t,n.type,e),e.apply(t,[n])}}(t,r);u.delegationSelector=o?i:null,u.callable=r,u.oneOff=s,u.uidEvent=d,c[d]=u,t.addEventListener(a,u,o)}function he(t,e,i,n,s){const o=ae(e[i],n,s);o&&(t.removeEventListener(i,o,Boolean(s)),delete e[i][o.uidEvent])}function de(t,e,i,n){const s=e[i]||{};for(const[o,r]of Object.entries(s))o.includes(n)&&he(t,e,i,r.callable,r.delegationSelector)}function ue(t){return t=t.replace(Zt,""),ne[t]||t}const fe={on(t,e,i,n){ce(t,e,i,n,!1)},one(t,e,i,n){ce(t,e,i,n,!0)},off(t,e,i,n){if("string"!=typeof e||!t)return;const[s,o,r]=le(e,i,n),a=r!==e,l=re(t),c=l[r]||{},h=e.startsWith(".");if(void 0===o){if(h)for(const i of Object.keys(l))de(t,l,i,e.slice(1));for(const[i,n]of Object.entries(c)){const s=i.replace(te,"");a&&!e.includes(s)||he(t,l,r,n.callable,n.delegationSelector)}}else{if(!Object.keys(c).length)return;he(t,l,r,o,s?i:null)}},trigger(t,e,i){if("string"!=typeof e||!t)return null;const n=Vt();let s=null,o=!0,r=!0,a=!1;e!==ue(e)&&n&&(s=n.Event(e,i),n(t).trigger(s),o=!s.isPropagationStopped(),r=!s.isImmediatePropagationStopped(),a=s.isDefaultPrevented());const l=pe(new Event(e,{bubbles:o,cancelable:!0}),i);return a&&l.preventDefault(),r&&t.dispatchEvent(l),l.defaultPrevented&&s&&s.preventDefault(),l}};function pe(t,e={}){for(const[i,n]of Object.entries(e))try{t[i]=n}catch(e){Object.defineProperty(t,i,{configurable:!0,get:()=>n})}return t}function me(t){if("true"===t)return!0;if("false"===t)return!1;if(t===Number(t).toString())return Number(t);if(""===t||"null"===t)return null;if("string"!=typeof t)return t;try{return JSON.parse(decodeURIComponent(t))}catch(e){return t}}function ge(t){return t.replace(/[A-Z]/g,(t=>`-${t.toLowerCase()}`))}const _e={setDataAttribute(t,e,i){t.setAttribute(`data-bs-${ge(e)}`,i)},removeDataAttribute(t,e){t.removeAttribute(`data-bs-${ge(e)}`)},getDataAttributes(t){if(!t)return{};const e={},i=Object.keys(t.dataset).filter((t=>t.startsWith("bs")&&!t.startsWith("bsConfig")));for(const n of i){let i=n.replace(/^bs/,"");i=i.charAt(0).toLowerCase()+i.slice(1,i.length),e[i]=me(t.dataset[n])}return e},getDataAttribute:(t,e)=>me(t.getAttribute(`data-bs-${ge(e)}`))};class be{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(t){return t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t}_mergeConfigObj(t,e){const i=Ft(e)?_e.getDataAttribute(e,"config"):{};return{...this.constructor.Default,..."object"==typeof i?i:{},...Ft(e)?_e.getDataAttributes(e):{},..."object"==typeof t?t:{}}}_typeCheckConfig(t,e=this.constructor.DefaultType){for(const[n,s]of Object.entries(e)){const e=t[n],o=Ft(e)?"element":null==(i=e)?`${i}`:Object.prototype.toString.call(i).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(s).test(o))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${n}" provided type "${o}" but expected type "${s}".`)}var i}}class ve extends be{constructor(t,e){super(),(t=Ht(t))&&(this._element=t,this._config=this._getConfig(e),Nt.set(this._element,this.constructor.DATA_KEY,this))}dispose(){Nt.remove(this._element,this.constructor.DATA_KEY),fe.off(this._element,this.constructor.EVENT_KEY);for(const t of Object.getOwnPropertyNames(this))this[t]=null}_queueCallback(t,e,i=!0){Ut(t,e,i)}_getConfig(t){return t=this._mergeConfigObj(t,this._element),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}static getInstance(t){return Nt.get(Ht(t),this.DATA_KEY)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,"object"==typeof e?e:null)}static get VERSION(){return"5.3.3"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(t){return`${t}${this.EVENT_KEY}`}}const ye=t=>{let e=t.getAttribute("data-bs-target");if(!e||"#"===e){let i=t.getAttribute("href");if(!i||!i.includes("#")&&!i.startsWith("."))return null;i.includes("#")&&!i.startsWith("#")&&(i=`#${i.split("#")[1]}`),e=i&&"#"!==i?i.trim():null}return e?e.split(",").map((t=>Mt(t))).join(","):null},we={find:(t,e=document.documentElement)=>[].concat(...Element.prototype.querySelectorAll.call(e,t)),findOne:(t,e=document.documentElement)=>Element.prototype.querySelector.call(e,t),children:(t,e)=>[].concat(...t.children).filter((t=>t.matches(e))),parents(t,e){const i=[];let n=t.parentNode.closest(e);for(;n;)i.push(n),n=n.parentNode.closest(e);return i},prev(t,e){let i=t.previousElementSibling;for(;i;){if(i.matches(e))return[i];i=i.previousElementSibling}return[]},next(t,e){let i=t.nextElementSibling;for(;i;){if(i.matches(e))return[i];i=i.nextElementSibling}return[]},focusableChildren(t){const e=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map((t=>`${t}:not([tabindex^="-"])`)).join(",");return this.find(e,t).filter((t=>!Wt(t)&&Bt(t)))},getSelectorFromElement(t){const e=ye(t);return e&&we.findOne(e)?e:null},getElementFromSelector(t){const e=ye(t);return e?we.findOne(e):null},getMultipleElementsFromSelector(t){const e=ye(t);return e?we.find(e):[]}},Ee=(t,e="hide")=>{const i=`click.dismiss${t.EVENT_KEY}`,n=t.NAME;fe.on(document,i,`[data-bs-dismiss="${n}"]`,(function(i){if(["A","AREA"].includes(this.tagName)&&i.preventDefault(),Wt(this))return;const s=we.getElementFromSelector(this)||this.closest(`.${n}`);t.getOrCreateInstance(s)[e]()}))},Ae=".bs.alert",Te=`close${Ae}`,Ce=`closed${Ae}`;class Oe extends ve{static get NAME(){return"alert"}close(){if(fe.trigger(this._element,Te).defaultPrevented)return;this._element.classList.remove("show");const t=this._element.classList.contains("fade");this._queueCallback((()=>this._destroyElement()),this._element,t)}_destroyElement(){this._element.remove(),fe.trigger(this._element,Ce),this.dispose()}static jQueryInterface(t){return this.each((function(){const e=Oe.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}Ee(Oe,"close"),Qt(Oe);const xe='[data-bs-toggle="button"]';class ke extends ve{static get NAME(){return"button"}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle("active"))}static jQueryInterface(t){return this.each((function(){const e=ke.getOrCreateInstance(this);"toggle"===t&&e[t]()}))}}fe.on(document,"click.bs.button.data-api",xe,(t=>{t.preventDefault();const e=t.target.closest(xe);ke.getOrCreateInstance(e).toggle()})),Qt(ke);const Le=".bs.swipe",Se=`touchstart${Le}`,De=`touchmove${Le}`,$e=`touchend${Le}`,Ie=`pointerdown${Le}`,Ne=`pointerup${Le}`,Pe={endCallback:null,leftCallback:null,rightCallback:null},Me={endCallback:"(function|null)",leftCallback:"(function|null)",rightCallback:"(function|null)"};class je extends be{constructor(t,e){super(),this._element=t,t&&je.isSupported()&&(this._config=this._getConfig(e),this._deltaX=0,this._supportPointerEvents=Boolean(window.PointerEvent),this._initEvents())}static get Default(){return Pe}static get DefaultType(){return Me}static get NAME(){return"swipe"}dispose(){fe.off(this._element,Le)}_start(t){this._supportPointerEvents?this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX):this._deltaX=t.touches[0].clientX}_end(t){this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX-this._deltaX),this._handleSwipe(),Xt(this._config.endCallback)}_move(t){this._deltaX=t.touches&&t.touches.length>1?0:t.touches[0].clientX-this._deltaX}_handleSwipe(){const t=Math.abs(this._deltaX);if(t<=40)return;const e=t/this._deltaX;this._deltaX=0,e&&Xt(e>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(fe.on(this._element,Ie,(t=>this._start(t))),fe.on(this._element,Ne,(t=>this._end(t))),this._element.classList.add("pointer-event")):(fe.on(this._element,Se,(t=>this._start(t))),fe.on(this._element,De,(t=>this._move(t))),fe.on(this._element,$e,(t=>this._end(t))))}_eventIsPointerPenTouch(t){return this._supportPointerEvents&&("pen"===t.pointerType||"touch"===t.pointerType)}static isSupported(){return"ontouchstart"in document.documentElement||navigator.maxTouchPoints>0}}const Fe=".bs.carousel",He=".data-api",Be="ArrowLeft",We="ArrowRight",ze="next",Re="prev",qe="left",Ve="right",Ye=`slide${Fe}`,Ke=`slid${Fe}`,Qe=`keydown${Fe}`,Xe=`mouseenter${Fe}`,Ue=`mouseleave${Fe}`,Ge=`dragstart${Fe}`,Je=`load${Fe}${He}`,Ze=`click${Fe}${He}`,ti="carousel",ei="active",ii=".active",ni=".carousel-item",si=ii+ni,oi={[Be]:Ve,[We]:qe},ri={interval:5e3,keyboard:!0,pause:"hover",ride:!1,touch:!0,wrap:!0},ai={interval:"(number|boolean)",keyboard:"boolean",pause:"(string|boolean)",ride:"(boolean|string)",touch:"boolean",wrap:"boolean"};class li extends ve{constructor(t,e){super(t,e),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=we.findOne(".carousel-indicators",this._element),this._addEventListeners(),this._config.ride===ti&&this.cycle()}static get Default(){return ri}static get DefaultType(){return ai}static get NAME(){return"carousel"}next(){this._slide(ze)}nextWhenVisible(){!document.hidden&&Bt(this._element)&&this.next()}prev(){this._slide(Re)}pause(){this._isSliding&&jt(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval((()=>this.nextWhenVisible()),this._config.interval)}_maybeEnableCycle(){this._config.ride&&(this._isSliding?fe.one(this._element,Ke,(()=>this.cycle())):this.cycle())}to(t){const e=this._getItems();if(t>e.length-1||t<0)return;if(this._isSliding)return void fe.one(this._element,Ke,(()=>this.to(t)));const i=this._getItemIndex(this._getActive());if(i===t)return;const n=t>i?ze:Re;this._slide(n,e[t])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(t){return t.defaultInterval=t.interval,t}_addEventListeners(){this._config.keyboard&&fe.on(this._element,Qe,(t=>this._keydown(t))),"hover"===this._config.pause&&(fe.on(this._element,Xe,(()=>this.pause())),fe.on(this._element,Ue,(()=>this._maybeEnableCycle()))),this._config.touch&&je.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(const t of we.find(".carousel-item img",this._element))fe.on(t,Ge,(t=>t.preventDefault()));const t={leftCallback:()=>this._slide(this._directionToOrder(qe)),rightCallback:()=>this._slide(this._directionToOrder(Ve)),endCallback:()=>{"hover"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout((()=>this._maybeEnableCycle()),500+this._config.interval))}};this._swipeHelper=new je(this._element,t)}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e=oi[t.key];e&&(t.preventDefault(),this._slide(this._directionToOrder(e)))}_getItemIndex(t){return this._getItems().indexOf(t)}_setActiveIndicatorElement(t){if(!this._indicatorsElement)return;const e=we.findOne(ii,this._indicatorsElement);e.classList.remove(ei),e.removeAttribute("aria-current");const i=we.findOne(`[data-bs-slide-to="${t}"]`,this._indicatorsElement);i&&(i.classList.add(ei),i.setAttribute("aria-current","true"))}_updateInterval(){const t=this._activeElement||this._getActive();if(!t)return;const e=Number.parseInt(t.getAttribute("data-bs-interval"),10);this._config.interval=e||this._config.defaultInterval}_slide(t,e=null){if(this._isSliding)return;const i=this._getActive(),n=t===ze,s=e||Gt(this._getItems(),i,n,this._config.wrap);if(s===i)return;const o=this._getItemIndex(s),r=e=>fe.trigger(this._element,e,{relatedTarget:s,direction:this._orderToDirection(t),from:this._getItemIndex(i),to:o});if(r(Ye).defaultPrevented)return;if(!i||!s)return;const a=Boolean(this._interval);this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(o),this._activeElement=s;const l=n?"carousel-item-start":"carousel-item-end",c=n?"carousel-item-next":"carousel-item-prev";s.classList.add(c),qt(s),i.classList.add(l),s.classList.add(l),this._queueCallback((()=>{s.classList.remove(l,c),s.classList.add(ei),i.classList.remove(ei,c,l),this._isSliding=!1,r(Ke)}),i,this._isAnimated()),a&&this.cycle()}_isAnimated(){return this._element.classList.contains("slide")}_getActive(){return we.findOne(si,this._element)}_getItems(){return we.find(ni,this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(t){return Kt()?t===qe?Re:ze:t===qe?ze:Re}_orderToDirection(t){return Kt()?t===Re?qe:Ve:t===Re?Ve:qe}static jQueryInterface(t){return this.each((function(){const e=li.getOrCreateInstance(this,t);if("number"!=typeof t){if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}else e.to(t)}))}}fe.on(document,Ze,"[data-bs-slide], [data-bs-slide-to]",(function(t){const e=we.getElementFromSelector(this);if(!e||!e.classList.contains(ti))return;t.preventDefault();const i=li.getOrCreateInstance(e),n=this.getAttribute("data-bs-slide-to");return n?(i.to(n),void i._maybeEnableCycle()):"next"===_e.getDataAttribute(this,"slide")?(i.next(),void i._maybeEnableCycle()):(i.prev(),void i._maybeEnableCycle())})),fe.on(window,Je,(()=>{const t=we.find('[data-bs-ride="carousel"]');for(const e of t)li.getOrCreateInstance(e)})),Qt(li);const ci=".bs.collapse",hi=`show${ci}`,di=`shown${ci}`,ui=`hide${ci}`,fi=`hidden${ci}`,pi=`click${ci}.data-api`,mi="show",gi="collapse",_i="collapsing",bi=`:scope .${gi} .${gi}`,vi='[data-bs-toggle="collapse"]',yi={parent:null,toggle:!0},wi={parent:"(null|element)",toggle:"boolean"};class Ei extends ve{constructor(t,e){super(t,e),this._isTransitioning=!1,this._triggerArray=[];const i=we.find(vi);for(const t of i){const e=we.getSelectorFromElement(t),i=we.find(e).filter((t=>t===this._element));null!==e&&i.length&&this._triggerArray.push(t)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return yi}static get DefaultType(){return wi}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t=[];if(this._config.parent&&(t=this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter((t=>t!==this._element)).map((t=>Ei.getOrCreateInstance(t,{toggle:!1})))),t.length&&t[0]._isTransitioning)return;if(fe.trigger(this._element,hi).defaultPrevented)return;for(const e of t)e.hide();const e=this._getDimension();this._element.classList.remove(gi),this._element.classList.add(_i),this._element.style[e]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const i=`scroll${e[0].toUpperCase()+e.slice(1)}`;this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(_i),this._element.classList.add(gi,mi),this._element.style[e]="",fe.trigger(this._element,di)}),this._element,!0),this._element.style[e]=`${this._element[i]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(fe.trigger(this._element,ui).defaultPrevented)return;const t=this._getDimension();this._element.style[t]=`${this._element.getBoundingClientRect()[t]}px`,qt(this._element),this._element.classList.add(_i),this._element.classList.remove(gi,mi);for(const t of this._triggerArray){const e=we.getElementFromSelector(t);e&&!this._isShown(e)&&this._addAriaAndCollapsedClass([t],!1)}this._isTransitioning=!0,this._element.style[t]="",this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(_i),this._element.classList.add(gi),fe.trigger(this._element,fi)}),this._element,!0)}_isShown(t=this._element){return t.classList.contains(mi)}_configAfterMerge(t){return t.toggle=Boolean(t.toggle),t.parent=Ht(t.parent),t}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const t=this._getFirstLevelChildren(vi);for(const e of t){const t=we.getElementFromSelector(e);t&&this._addAriaAndCollapsedClass([e],this._isShown(t))}}_getFirstLevelChildren(t){const e=we.find(bi,this._config.parent);return we.find(t,this._config.parent).filter((t=>!e.includes(t)))}_addAriaAndCollapsedClass(t,e){if(t.length)for(const i of t)i.classList.toggle("collapsed",!e),i.setAttribute("aria-expanded",e)}static jQueryInterface(t){const e={};return"string"==typeof t&&/show|hide/.test(t)&&(e.toggle=!1),this.each((function(){const i=Ei.getOrCreateInstance(this,e);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t]()}}))}}fe.on(document,pi,vi,(function(t){("A"===t.target.tagName||t.delegateTarget&&"A"===t.delegateTarget.tagName)&&t.preventDefault();for(const t of we.getMultipleElementsFromSelector(this))Ei.getOrCreateInstance(t,{toggle:!1}).toggle()})),Qt(Ei);const Ai="dropdown",Ti=".bs.dropdown",Ci=".data-api",Oi="ArrowUp",xi="ArrowDown",ki=`hide${Ti}`,Li=`hidden${Ti}`,Si=`show${Ti}`,Di=`shown${Ti}`,$i=`click${Ti}${Ci}`,Ii=`keydown${Ti}${Ci}`,Ni=`keyup${Ti}${Ci}`,Pi="show",Mi='[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)',ji=`${Mi}.${Pi}`,Fi=".dropdown-menu",Hi=Kt()?"top-end":"top-start",Bi=Kt()?"top-start":"top-end",Wi=Kt()?"bottom-end":"bottom-start",zi=Kt()?"bottom-start":"bottom-end",Ri=Kt()?"left-start":"right-start",qi=Kt()?"right-start":"left-start",Vi={autoClose:!0,boundary:"clippingParents",display:"dynamic",offset:[0,2],popperConfig:null,reference:"toggle"},Yi={autoClose:"(boolean|string)",boundary:"(string|element)",display:"string",offset:"(array|string|function)",popperConfig:"(null|object|function)",reference:"(string|element|object)"};class Ki extends ve{constructor(t,e){super(t,e),this._popper=null,this._parent=this._element.parentNode,this._menu=we.next(this._element,Fi)[0]||we.prev(this._element,Fi)[0]||we.findOne(Fi,this._parent),this._inNavbar=this._detectNavbar()}static get Default(){return Vi}static get DefaultType(){return Yi}static get NAME(){return Ai}toggle(){return this._isShown()?this.hide():this.show()}show(){if(Wt(this._element)||this._isShown())return;const t={relatedTarget:this._element};if(!fe.trigger(this._element,Si,t).defaultPrevented){if(this._createPopper(),"ontouchstart"in document.documentElement&&!this._parent.closest(".navbar-nav"))for(const t of[].concat(...document.body.children))fe.on(t,"mouseover",Rt);this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.classList.add(Pi),this._element.classList.add(Pi),fe.trigger(this._element,Di,t)}}hide(){if(Wt(this._element)||!this._isShown())return;const t={relatedTarget:this._element};this._completeHide(t)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_completeHide(t){if(!fe.trigger(this._element,ki,t).defaultPrevented){if("ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))fe.off(t,"mouseover",Rt);this._popper&&this._popper.destroy(),this._menu.classList.remove(Pi),this._element.classList.remove(Pi),this._element.setAttribute("aria-expanded","false"),_e.removeDataAttribute(this._menu,"popper"),fe.trigger(this._element,Li,t)}}_getConfig(t){if("object"==typeof(t=super._getConfig(t)).reference&&!Ft(t.reference)&&"function"!=typeof t.reference.getBoundingClientRect)throw new TypeError(`${Ai.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);return t}_createPopper(){if(void 0===e)throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)");let t=this._element;"parent"===this._config.reference?t=this._parent:Ft(this._config.reference)?t=Ht(this._config.reference):"object"==typeof this._config.reference&&(t=this._config.reference);const i=this._getPopperConfig();this._popper=Dt(t,this._menu,i)}_isShown(){return this._menu.classList.contains(Pi)}_getPlacement(){const t=this._parent;if(t.classList.contains("dropend"))return Ri;if(t.classList.contains("dropstart"))return qi;if(t.classList.contains("dropup-center"))return"top";if(t.classList.contains("dropdown-center"))return"bottom";const e="end"===getComputedStyle(this._menu).getPropertyValue("--bs-position").trim();return t.classList.contains("dropup")?e?Bi:Hi:e?zi:Wi}_detectNavbar(){return null!==this._element.closest(".navbar")}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||"static"===this._config.display)&&(_e.setDataAttribute(this._menu,"popper","static"),t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,...Xt(this._config.popperConfig,[t])}}_selectMenuItem({key:t,target:e}){const i=we.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter((t=>Bt(t)));i.length&&Gt(i,e,t===xi,!i.includes(e)).focus()}static jQueryInterface(t){return this.each((function(){const e=Ki.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}static clearMenus(t){if(2===t.button||"keyup"===t.type&&"Tab"!==t.key)return;const e=we.find(ji);for(const i of e){const e=Ki.getInstance(i);if(!e||!1===e._config.autoClose)continue;const n=t.composedPath(),s=n.includes(e._menu);if(n.includes(e._element)||"inside"===e._config.autoClose&&!s||"outside"===e._config.autoClose&&s)continue;if(e._menu.contains(t.target)&&("keyup"===t.type&&"Tab"===t.key||/input|select|option|textarea|form/i.test(t.target.tagName)))continue;const o={relatedTarget:e._element};"click"===t.type&&(o.clickEvent=t),e._completeHide(o)}}static dataApiKeydownHandler(t){const e=/input|textarea/i.test(t.target.tagName),i="Escape"===t.key,n=[Oi,xi].includes(t.key);if(!n&&!i)return;if(e&&!i)return;t.preventDefault();const s=this.matches(Mi)?this:we.prev(this,Mi)[0]||we.next(this,Mi)[0]||we.findOne(Mi,t.delegateTarget.parentNode),o=Ki.getOrCreateInstance(s);if(n)return t.stopPropagation(),o.show(),void o._selectMenuItem(t);o._isShown()&&(t.stopPropagation(),o.hide(),s.focus())}}fe.on(document,Ii,Mi,Ki.dataApiKeydownHandler),fe.on(document,Ii,Fi,Ki.dataApiKeydownHandler),fe.on(document,$i,Ki.clearMenus),fe.on(document,Ni,Ki.clearMenus),fe.on(document,$i,Mi,(function(t){t.preventDefault(),Ki.getOrCreateInstance(this).toggle()})),Qt(Ki);const Qi="backdrop",Xi="show",Ui=`mousedown.bs.${Qi}`,Gi={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},Ji={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"};class Zi extends be{constructor(t){super(),this._config=this._getConfig(t),this._isAppended=!1,this._element=null}static get Default(){return Gi}static get DefaultType(){return Ji}static get NAME(){return Qi}show(t){if(!this._config.isVisible)return void Xt(t);this._append();const e=this._getElement();this._config.isAnimated&&qt(e),e.classList.add(Xi),this._emulateAnimation((()=>{Xt(t)}))}hide(t){this._config.isVisible?(this._getElement().classList.remove(Xi),this._emulateAnimation((()=>{this.dispose(),Xt(t)}))):Xt(t)}dispose(){this._isAppended&&(fe.off(this._element,Ui),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){const t=document.createElement("div");t.className=this._config.className,this._config.isAnimated&&t.classList.add("fade"),this._element=t}return this._element}_configAfterMerge(t){return t.rootElement=Ht(t.rootElement),t}_append(){if(this._isAppended)return;const t=this._getElement();this._config.rootElement.append(t),fe.on(t,Ui,(()=>{Xt(this._config.clickCallback)})),this._isAppended=!0}_emulateAnimation(t){Ut(t,this._getElement(),this._config.isAnimated)}}const tn=".bs.focustrap",en=`focusin${tn}`,nn=`keydown.tab${tn}`,sn="backward",on={autofocus:!0,trapElement:null},rn={autofocus:"boolean",trapElement:"element"};class an extends be{constructor(t){super(),this._config=this._getConfig(t),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return on}static get DefaultType(){return rn}static get NAME(){return"focustrap"}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),fe.off(document,tn),fe.on(document,en,(t=>this._handleFocusin(t))),fe.on(document,nn,(t=>this._handleKeydown(t))),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,fe.off(document,tn))}_handleFocusin(t){const{trapElement:e}=this._config;if(t.target===document||t.target===e||e.contains(t.target))return;const i=we.focusableChildren(e);0===i.length?e.focus():this._lastTabNavDirection===sn?i[i.length-1].focus():i[0].focus()}_handleKeydown(t){"Tab"===t.key&&(this._lastTabNavDirection=t.shiftKey?sn:"forward")}}const ln=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",cn=".sticky-top",hn="padding-right",dn="margin-right";class un{constructor(){this._element=document.body}getWidth(){const t=document.documentElement.clientWidth;return Math.abs(window.innerWidth-t)}hide(){const t=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,hn,(e=>e+t)),this._setElementAttributes(ln,hn,(e=>e+t)),this._setElementAttributes(cn,dn,(e=>e-t))}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,hn),this._resetElementAttributes(ln,hn),this._resetElementAttributes(cn,dn)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(t,e,i){const n=this.getWidth();this._applyManipulationCallback(t,(t=>{if(t!==this._element&&window.innerWidth>t.clientWidth+n)return;this._saveInitialAttribute(t,e);const s=window.getComputedStyle(t).getPropertyValue(e);t.style.setProperty(e,`${i(Number.parseFloat(s))}px`)}))}_saveInitialAttribute(t,e){const i=t.style.getPropertyValue(e);i&&_e.setDataAttribute(t,e,i)}_resetElementAttributes(t,e){this._applyManipulationCallback(t,(t=>{const i=_e.getDataAttribute(t,e);null!==i?(_e.removeDataAttribute(t,e),t.style.setProperty(e,i)):t.style.removeProperty(e)}))}_applyManipulationCallback(t,e){if(Ft(t))e(t);else for(const i of we.find(t,this._element))e(i)}}const fn=".bs.modal",pn=`hide${fn}`,mn=`hidePrevented${fn}`,gn=`hidden${fn}`,_n=`show${fn}`,bn=`shown${fn}`,vn=`resize${fn}`,yn=`click.dismiss${fn}`,wn=`mousedown.dismiss${fn}`,En=`keydown.dismiss${fn}`,An=`click${fn}.data-api`,Tn="modal-open",Cn="show",On="modal-static",xn={backdrop:!0,focus:!0,keyboard:!0},kn={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"};class Ln extends ve{constructor(t,e){super(t,e),this._dialog=we.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new un,this._addEventListeners()}static get Default(){return xn}static get DefaultType(){return kn}static get NAME(){return"modal"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||fe.trigger(this._element,_n,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(Tn),this._adjustDialog(),this._backdrop.show((()=>this._showElement(t))))}hide(){this._isShown&&!this._isTransitioning&&(fe.trigger(this._element,pn).defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(Cn),this._queueCallback((()=>this._hideModal()),this._element,this._isAnimated())))}dispose(){fe.off(window,fn),fe.off(this._dialog,fn),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new Zi({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new an({trapElement:this._element})}_showElement(t){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0;const e=we.findOne(".modal-body",this._dialog);e&&(e.scrollTop=0),qt(this._element),this._element.classList.add(Cn),this._queueCallback((()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,fe.trigger(this._element,bn,{relatedTarget:t})}),this._dialog,this._isAnimated())}_addEventListeners(){fe.on(this._element,En,(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():this._triggerBackdropTransition())})),fe.on(window,vn,(()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()})),fe.on(this._element,wn,(t=>{fe.one(this._element,yn,(e=>{this._element===t.target&&this._element===e.target&&("static"!==this._config.backdrop?this._config.backdrop&&this.hide():this._triggerBackdropTransition())}))}))}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide((()=>{document.body.classList.remove(Tn),this._resetAdjustments(),this._scrollBar.reset(),fe.trigger(this._element,gn)}))}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if(fe.trigger(this._element,mn).defaultPrevented)return;const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._element.style.overflowY;"hidden"===e||this._element.classList.contains(On)||(t||(this._element.style.overflowY="hidden"),this._element.classList.add(On),this._queueCallback((()=>{this._element.classList.remove(On),this._queueCallback((()=>{this._element.style.overflowY=e}),this._dialog)}),this._dialog),this._element.focus())}_adjustDialog(){const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._scrollBar.getWidth(),i=e>0;if(i&&!t){const t=Kt()?"paddingLeft":"paddingRight";this._element.style[t]=`${e}px`}if(!i&&t){const t=Kt()?"paddingRight":"paddingLeft";this._element.style[t]=`${e}px`}}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(t,e){return this.each((function(){const i=Ln.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t](e)}}))}}fe.on(document,An,'[data-bs-toggle="modal"]',(function(t){const e=we.getElementFromSelector(this);["A","AREA"].includes(this.tagName)&&t.preventDefault(),fe.one(e,_n,(t=>{t.defaultPrevented||fe.one(e,gn,(()=>{Bt(this)&&this.focus()}))}));const i=we.findOne(".modal.show");i&&Ln.getInstance(i).hide(),Ln.getOrCreateInstance(e).toggle(this)})),Ee(Ln),Qt(Ln);const Sn=".bs.offcanvas",Dn=".data-api",$n=`load${Sn}${Dn}`,In="show",Nn="showing",Pn="hiding",Mn=".offcanvas.show",jn=`show${Sn}`,Fn=`shown${Sn}`,Hn=`hide${Sn}`,Bn=`hidePrevented${Sn}`,Wn=`hidden${Sn}`,zn=`resize${Sn}`,Rn=`click${Sn}${Dn}`,qn=`keydown.dismiss${Sn}`,Vn={backdrop:!0,keyboard:!0,scroll:!1},Yn={backdrop:"(boolean|string)",keyboard:"boolean",scroll:"boolean"};class Kn extends ve{constructor(t,e){super(t,e),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return Vn}static get DefaultType(){return Yn}static get NAME(){return"offcanvas"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||fe.trigger(this._element,jn,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._backdrop.show(),this._config.scroll||(new un).hide(),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add(Nn),this._queueCallback((()=>{this._config.scroll&&!this._config.backdrop||this._focustrap.activate(),this._element.classList.add(In),this._element.classList.remove(Nn),fe.trigger(this._element,Fn,{relatedTarget:t})}),this._element,!0))}hide(){this._isShown&&(fe.trigger(this._element,Hn).defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add(Pn),this._backdrop.hide(),this._queueCallback((()=>{this._element.classList.remove(In,Pn),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._config.scroll||(new un).reset(),fe.trigger(this._element,Wn)}),this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){const t=Boolean(this._config.backdrop);return new Zi({className:"offcanvas-backdrop",isVisible:t,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:t?()=>{"static"!==this._config.backdrop?this.hide():fe.trigger(this._element,Bn)}:null})}_initializeFocusTrap(){return new an({trapElement:this._element})}_addEventListeners(){fe.on(this._element,qn,(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():fe.trigger(this._element,Bn))}))}static jQueryInterface(t){return this.each((function(){const e=Kn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}fe.on(document,Rn,'[data-bs-toggle="offcanvas"]',(function(t){const e=we.getElementFromSelector(this);if(["A","AREA"].includes(this.tagName)&&t.preventDefault(),Wt(this))return;fe.one(e,Wn,(()=>{Bt(this)&&this.focus()}));const i=we.findOne(Mn);i&&i!==e&&Kn.getInstance(i).hide(),Kn.getOrCreateInstance(e).toggle(this)})),fe.on(window,$n,(()=>{for(const t of we.find(Mn))Kn.getOrCreateInstance(t).show()})),fe.on(window,zn,(()=>{for(const t of we.find("[aria-modal][class*=show][class*=offcanvas-]"))"fixed"!==getComputedStyle(t).position&&Kn.getOrCreateInstance(t).hide()})),Ee(Kn),Qt(Kn);const Qn={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],dd:[],div:[],dl:[],dt:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},Xn=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),Un=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i,Gn=(t,e)=>{const i=t.nodeName.toLowerCase();return e.includes(i)?!Xn.has(i)||Boolean(Un.test(t.nodeValue)):e.filter((t=>t instanceof RegExp)).some((t=>t.test(i)))},Jn={allowList:Qn,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"

    "},Zn={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},ts={entry:"(string|element|function|null)",selector:"(string|element)"};class es extends be{constructor(t){super(),this._config=this._getConfig(t)}static get Default(){return Jn}static get DefaultType(){return Zn}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map((t=>this._resolvePossibleFunction(t))).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(t){return this._checkContent(t),this._config.content={...this._config.content,...t},this}toHtml(){const t=document.createElement("div");t.innerHTML=this._maybeSanitize(this._config.template);for(const[e,i]of Object.entries(this._config.content))this._setContent(t,i,e);const e=t.children[0],i=this._resolvePossibleFunction(this._config.extraClass);return i&&e.classList.add(...i.split(" ")),e}_typeCheckConfig(t){super._typeCheckConfig(t),this._checkContent(t.content)}_checkContent(t){for(const[e,i]of Object.entries(t))super._typeCheckConfig({selector:e,entry:i},ts)}_setContent(t,e,i){const n=we.findOne(i,t);n&&((e=this._resolvePossibleFunction(e))?Ft(e)?this._putElementInTemplate(Ht(e),n):this._config.html?n.innerHTML=this._maybeSanitize(e):n.textContent=e:n.remove())}_maybeSanitize(t){return this._config.sanitize?function(t,e,i){if(!t.length)return t;if(i&&"function"==typeof i)return i(t);const n=(new window.DOMParser).parseFromString(t,"text/html"),s=[].concat(...n.body.querySelectorAll("*"));for(const t of s){const i=t.nodeName.toLowerCase();if(!Object.keys(e).includes(i)){t.remove();continue}const n=[].concat(...t.attributes),s=[].concat(e["*"]||[],e[i]||[]);for(const e of n)Gn(e,s)||t.removeAttribute(e.nodeName)}return n.body.innerHTML}(t,this._config.allowList,this._config.sanitizeFn):t}_resolvePossibleFunction(t){return Xt(t,[this])}_putElementInTemplate(t,e){if(this._config.html)return e.innerHTML="",void e.append(t);e.textContent=t.textContent}}const is=new Set(["sanitize","allowList","sanitizeFn"]),ns="fade",ss="show",os=".tooltip-inner",rs=".modal",as="hide.bs.modal",ls="hover",cs="focus",hs={AUTO:"auto",TOP:"top",RIGHT:Kt()?"left":"right",BOTTOM:"bottom",LEFT:Kt()?"right":"left"},ds={allowList:Qn,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'',title:"",trigger:"hover focus"},us={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class fs extends ve{constructor(t,i){if(void 0===e)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(t,i),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return ds}static get DefaultType(){return us}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._activeTrigger.click=!this._activeTrigger.click,this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),fe.off(this._element.closest(rs),as,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const t=fe.trigger(this._element,this.constructor.eventName("show")),e=(zt(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(t.defaultPrevented||!e)return;this._disposePopper();const i=this._getTipElement();this._element.setAttribute("aria-describedby",i.getAttribute("id"));const{container:n}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(n.append(i),fe.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(i),i.classList.add(ss),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))fe.on(t,"mouseover",Rt);this._queueCallback((()=>{fe.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1}),this.tip,this._isAnimated())}hide(){if(this._isShown()&&!fe.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented){if(this._getTipElement().classList.remove(ss),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))fe.off(t,"mouseover",Rt);this._activeTrigger.click=!1,this._activeTrigger[cs]=!1,this._activeTrigger[ls]=!1,this._isHovered=null,this._queueCallback((()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),fe.trigger(this._element,this.constructor.eventName("hidden")))}),this.tip,this._isAnimated())}}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(t){const e=this._getTemplateFactory(t).toHtml();if(!e)return null;e.classList.remove(ns,ss),e.classList.add(`bs-${this.constructor.NAME}-auto`);const i=(t=>{do{t+=Math.floor(1e6*Math.random())}while(document.getElementById(t));return t})(this.constructor.NAME).toString();return e.setAttribute("id",i),this._isAnimated()&&e.classList.add(ns),e}setContent(t){this._newContent=t,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(t){return this._templateFactory?this._templateFactory.changeContent(t):this._templateFactory=new es({...this._config,content:t,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{[os]:this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(t){return this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(ns)}_isShown(){return this.tip&&this.tip.classList.contains(ss)}_createPopper(t){const e=Xt(this._config.placement,[this,t,this._element]),i=hs[e.toUpperCase()];return Dt(this._element,t,this._getPopperConfig(i))}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_resolvePossibleFunction(t){return Xt(t,[this._element])}_getPopperConfig(t){const e={placement:t,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:t=>{this._getTipElement().setAttribute("data-popper-placement",t.state.placement)}}]};return{...e,...Xt(this._config.popperConfig,[e])}}_setListeners(){const t=this._config.trigger.split(" ");for(const e of t)if("click"===e)fe.on(this._element,this.constructor.eventName("click"),this._config.selector,(t=>{this._initializeOnDelegatedTarget(t).toggle()}));else if("manual"!==e){const t=e===ls?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),i=e===ls?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");fe.on(this._element,t,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusin"===t.type?cs:ls]=!0,e._enter()})),fe.on(this._element,i,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusout"===t.type?cs:ls]=e._element.contains(t.relatedTarget),e._leave()}))}this._hideModalHandler=()=>{this._element&&this.hide()},fe.on(this._element.closest(rs),as,this._hideModalHandler)}_fixTitle(){const t=this._element.getAttribute("title");t&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",t),this._element.setAttribute("data-bs-original-title",t),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout((()=>{this._isHovered&&this.show()}),this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout((()=>{this._isHovered||this.hide()}),this._config.delay.hide))}_setTimeout(t,e){clearTimeout(this._timeout),this._timeout=setTimeout(t,e)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(t){const e=_e.getDataAttributes(this._element);for(const t of Object.keys(e))is.has(t)&&delete e[t];return t={...e,..."object"==typeof t&&t?t:{}},t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t.container=!1===t.container?document.body:Ht(t.container),"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),t}_getDelegateConfig(){const t={};for(const[e,i]of Object.entries(this._config))this.constructor.Default[e]!==i&&(t[e]=i);return t.selector=!1,t.trigger="manual",t}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(t){return this.each((function(){const e=fs.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}Qt(fs);const ps=".popover-header",ms=".popover-body",gs={...fs.Default,content:"",offset:[0,8],placement:"right",template:'',trigger:"click"},_s={...fs.DefaultType,content:"(null|string|element|function)"};class bs extends fs{static get Default(){return gs}static get DefaultType(){return _s}static get NAME(){return"popover"}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{[ps]:this._getTitle(),[ms]:this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(t){return this.each((function(){const e=bs.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}Qt(bs);const vs=".bs.scrollspy",ys=`activate${vs}`,ws=`click${vs}`,Es=`load${vs}.data-api`,As="active",Ts="[href]",Cs=".nav-link",Os=`${Cs}, .nav-item > ${Cs}, .list-group-item`,xs={offset:null,rootMargin:"0px 0px -25%",smoothScroll:!1,target:null,threshold:[.1,.5,1]},ks={offset:"(number|null)",rootMargin:"string",smoothScroll:"boolean",target:"element",threshold:"array"};class Ls extends ve{constructor(t,e){super(t,e),this._targetLinks=new Map,this._observableSections=new Map,this._rootElement="visible"===getComputedStyle(this._element).overflowY?null:this._element,this._activeTarget=null,this._observer=null,this._previousScrollData={visibleEntryTop:0,parentScrollTop:0},this.refresh()}static get Default(){return xs}static get DefaultType(){return ks}static get NAME(){return"scrollspy"}refresh(){this._initializeTargetsAndObservables(),this._maybeEnableSmoothScroll(),this._observer?this._observer.disconnect():this._observer=this._getNewObserver();for(const t of this._observableSections.values())this._observer.observe(t)}dispose(){this._observer.disconnect(),super.dispose()}_configAfterMerge(t){return t.target=Ht(t.target)||document.body,t.rootMargin=t.offset?`${t.offset}px 0px -30%`:t.rootMargin,"string"==typeof t.threshold&&(t.threshold=t.threshold.split(",").map((t=>Number.parseFloat(t)))),t}_maybeEnableSmoothScroll(){this._config.smoothScroll&&(fe.off(this._config.target,ws),fe.on(this._config.target,ws,Ts,(t=>{const e=this._observableSections.get(t.target.hash);if(e){t.preventDefault();const i=this._rootElement||window,n=e.offsetTop-this._element.offsetTop;if(i.scrollTo)return void i.scrollTo({top:n,behavior:"smooth"});i.scrollTop=n}})))}_getNewObserver(){const t={root:this._rootElement,threshold:this._config.threshold,rootMargin:this._config.rootMargin};return new IntersectionObserver((t=>this._observerCallback(t)),t)}_observerCallback(t){const e=t=>this._targetLinks.get(`#${t.target.id}`),i=t=>{this._previousScrollData.visibleEntryTop=t.target.offsetTop,this._process(e(t))},n=(this._rootElement||document.documentElement).scrollTop,s=n>=this._previousScrollData.parentScrollTop;this._previousScrollData.parentScrollTop=n;for(const o of t){if(!o.isIntersecting){this._activeTarget=null,this._clearActiveClass(e(o));continue}const t=o.target.offsetTop>=this._previousScrollData.visibleEntryTop;if(s&&t){if(i(o),!n)return}else s||t||i(o)}}_initializeTargetsAndObservables(){this._targetLinks=new Map,this._observableSections=new Map;const t=we.find(Ts,this._config.target);for(const e of t){if(!e.hash||Wt(e))continue;const t=we.findOne(decodeURI(e.hash),this._element);Bt(t)&&(this._targetLinks.set(decodeURI(e.hash),e),this._observableSections.set(e.hash,t))}}_process(t){this._activeTarget!==t&&(this._clearActiveClass(this._config.target),this._activeTarget=t,t.classList.add(As),this._activateParents(t),fe.trigger(this._element,ys,{relatedTarget:t}))}_activateParents(t){if(t.classList.contains("dropdown-item"))we.findOne(".dropdown-toggle",t.closest(".dropdown")).classList.add(As);else for(const e of we.parents(t,".nav, .list-group"))for(const t of we.prev(e,Os))t.classList.add(As)}_clearActiveClass(t){t.classList.remove(As);const e=we.find(`${Ts}.${As}`,t);for(const t of e)t.classList.remove(As)}static jQueryInterface(t){return this.each((function(){const e=Ls.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}fe.on(window,Es,(()=>{for(const t of we.find('[data-bs-spy="scroll"]'))Ls.getOrCreateInstance(t)})),Qt(Ls);const Ss=".bs.tab",Ds=`hide${Ss}`,$s=`hidden${Ss}`,Is=`show${Ss}`,Ns=`shown${Ss}`,Ps=`click${Ss}`,Ms=`keydown${Ss}`,js=`load${Ss}`,Fs="ArrowLeft",Hs="ArrowRight",Bs="ArrowUp",Ws="ArrowDown",zs="Home",Rs="End",qs="active",Vs="fade",Ys="show",Ks=".dropdown-toggle",Qs=`:not(${Ks})`,Xs='[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',Us=`.nav-link${Qs}, .list-group-item${Qs}, [role="tab"]${Qs}, ${Xs}`,Gs=`.${qs}[data-bs-toggle="tab"], .${qs}[data-bs-toggle="pill"], .${qs}[data-bs-toggle="list"]`;class Js extends ve{constructor(t){super(t),this._parent=this._element.closest('.list-group, .nav, [role="tablist"]'),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),fe.on(this._element,Ms,(t=>this._keydown(t))))}static get NAME(){return"tab"}show(){const t=this._element;if(this._elemIsActive(t))return;const e=this._getActiveElem(),i=e?fe.trigger(e,Ds,{relatedTarget:t}):null;fe.trigger(t,Is,{relatedTarget:e}).defaultPrevented||i&&i.defaultPrevented||(this._deactivate(e,t),this._activate(t,e))}_activate(t,e){t&&(t.classList.add(qs),this._activate(we.getElementFromSelector(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.removeAttribute("tabindex"),t.setAttribute("aria-selected",!0),this._toggleDropDown(t,!0),fe.trigger(t,Ns,{relatedTarget:e})):t.classList.add(Ys)}),t,t.classList.contains(Vs)))}_deactivate(t,e){t&&(t.classList.remove(qs),t.blur(),this._deactivate(we.getElementFromSelector(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.setAttribute("aria-selected",!1),t.setAttribute("tabindex","-1"),this._toggleDropDown(t,!1),fe.trigger(t,$s,{relatedTarget:e})):t.classList.remove(Ys)}),t,t.classList.contains(Vs)))}_keydown(t){if(![Fs,Hs,Bs,Ws,zs,Rs].includes(t.key))return;t.stopPropagation(),t.preventDefault();const e=this._getChildren().filter((t=>!Wt(t)));let i;if([zs,Rs].includes(t.key))i=e[t.key===zs?0:e.length-1];else{const n=[Hs,Ws].includes(t.key);i=Gt(e,t.target,n,!0)}i&&(i.focus({preventScroll:!0}),Js.getOrCreateInstance(i).show())}_getChildren(){return we.find(Us,this._parent)}_getActiveElem(){return this._getChildren().find((t=>this._elemIsActive(t)))||null}_setInitialAttributes(t,e){this._setAttributeIfNotExists(t,"role","tablist");for(const t of e)this._setInitialAttributesOnChild(t)}_setInitialAttributesOnChild(t){t=this._getInnerElement(t);const e=this._elemIsActive(t),i=this._getOuterElement(t);t.setAttribute("aria-selected",e),i!==t&&this._setAttributeIfNotExists(i,"role","presentation"),e||t.setAttribute("tabindex","-1"),this._setAttributeIfNotExists(t,"role","tab"),this._setInitialAttributesOnTargetPanel(t)}_setInitialAttributesOnTargetPanel(t){const e=we.getElementFromSelector(t);e&&(this._setAttributeIfNotExists(e,"role","tabpanel"),t.id&&this._setAttributeIfNotExists(e,"aria-labelledby",`${t.id}`))}_toggleDropDown(t,e){const i=this._getOuterElement(t);if(!i.classList.contains("dropdown"))return;const n=(t,n)=>{const s=we.findOne(t,i);s&&s.classList.toggle(n,e)};n(Ks,qs),n(".dropdown-menu",Ys),i.setAttribute("aria-expanded",e)}_setAttributeIfNotExists(t,e,i){t.hasAttribute(e)||t.setAttribute(e,i)}_elemIsActive(t){return t.classList.contains(qs)}_getInnerElement(t){return t.matches(Us)?t:we.findOne(Us,t)}_getOuterElement(t){return t.closest(".nav-item, .list-group-item")||t}static jQueryInterface(t){return this.each((function(){const e=Js.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}fe.on(document,Ps,Xs,(function(t){["A","AREA"].includes(this.tagName)&&t.preventDefault(),Wt(this)||Js.getOrCreateInstance(this).show()})),fe.on(window,js,(()=>{for(const t of we.find(Gs))Js.getOrCreateInstance(t)})),Qt(Js);const Zs=".bs.toast",to=`mouseover${Zs}`,eo=`mouseout${Zs}`,io=`focusin${Zs}`,no=`focusout${Zs}`,so=`hide${Zs}`,oo=`hidden${Zs}`,ro=`show${Zs}`,ao=`shown${Zs}`,lo="hide",co="show",ho="showing",uo={animation:"boolean",autohide:"boolean",delay:"number"},fo={animation:!0,autohide:!0,delay:5e3};class po extends ve{constructor(t,e){super(t,e),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return fo}static get DefaultType(){return uo}static get NAME(){return"toast"}show(){fe.trigger(this._element,ro).defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add("fade"),this._element.classList.remove(lo),qt(this._element),this._element.classList.add(co,ho),this._queueCallback((()=>{this._element.classList.remove(ho),fe.trigger(this._element,ao),this._maybeScheduleHide()}),this._element,this._config.animation))}hide(){this.isShown()&&(fe.trigger(this._element,so).defaultPrevented||(this._element.classList.add(ho),this._queueCallback((()=>{this._element.classList.add(lo),this._element.classList.remove(ho,co),fe.trigger(this._element,oo)}),this._element,this._config.animation)))}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(co),super.dispose()}isShown(){return this._element.classList.contains(co)}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout((()=>{this.hide()}),this._config.delay)))}_onInteraction(t,e){switch(t.type){case"mouseover":case"mouseout":this._hasMouseInteraction=e;break;case"focusin":case"focusout":this._hasKeyboardInteraction=e}if(e)return void this._clearTimeout();const i=t.relatedTarget;this._element===i||this._element.contains(i)||this._maybeScheduleHide()}_setListeners(){fe.on(this._element,to,(t=>this._onInteraction(t,!0))),fe.on(this._element,eo,(t=>this._onInteraction(t,!1))),fe.on(this._element,io,(t=>this._onInteraction(t,!0))),fe.on(this._element,no,(t=>this._onInteraction(t,!1)))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each((function(){const e=po.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}function mo(t){"loading"!=document.readyState?t():document.addEventListener("DOMContentLoaded",t)}Ee(po),Qt(po),mo((function(){[].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]')).map((function(t){return new fs(t,{delay:{show:500,hide:100}})}))})),mo((function(){document.getElementById("pst-back-to-top").addEventListener("click",(function(){document.body.scrollTop=0,document.documentElement.scrollTop=0}))})),mo((function(){var t=document.getElementById("pst-back-to-top"),e=document.getElementsByClassName("bd-header")[0].getBoundingClientRect();window.addEventListener("scroll",(function(){this.oldScroll>this.scrollY&&this.scrollY>e.bottom?t.style.display="block":t.style.display="none",this.oldScroll=this.scrollY}))})),window.bootstrap=i})(); +//# sourceMappingURL=bootstrap.js.map \ No newline at end of file diff --git a/spec/_static/scripts/bootstrap.js.LICENSE.txt b/spec/_static/scripts/bootstrap.js.LICENSE.txt new file mode 100644 index 0000000000..28755c2c5b --- /dev/null +++ b/spec/_static/scripts/bootstrap.js.LICENSE.txt @@ -0,0 +1,5 @@ +/*! + * Bootstrap v5.3.3 (https://getbootstrap.com/) + * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ diff --git a/spec/_static/scripts/bootstrap.js.map b/spec/_static/scripts/bootstrap.js.map new file mode 100644 index 0000000000..e9e815891f --- /dev/null +++ b/spec/_static/scripts/bootstrap.js.map @@ -0,0 +1 @@ +{"version":3,"file":"scripts/bootstrap.js","mappings":"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","sources":["webpack://pydata_sphinx_theme/webpack/bootstrap","webpack://pydata_sphinx_theme/webpack/runtime/define property getters","webpack://pydata_sphinx_theme/webpack/runtime/hasOwnProperty shorthand","webpack://pydata_sphinx_theme/webpack/runtime/make namespace object","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/enums.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getWindow.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/applyStyles.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getBasePlacement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/math.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/userAgent.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/contains.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/within.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/expandToHashMap.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/arrow.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getVariation.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/computeStyles.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/eventListeners.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/rectToClientRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/computeOffsets.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/detectOverflow.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/flip.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/hide.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/offset.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getAltAxis.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/orderModifiers.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/createPopper.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/debounce.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/mergeByName.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/popper.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/popper-lite.js","webpack://pydata_sphinx_theme/./node_modules/bootstrap/dist/js/bootstrap.esm.js","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/scripts/mixin.js","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/scripts/bootstrap.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];","export default function getNodeName(element) {\n return element ? (element.nodeName || '').toLowerCase() : null;\n}","export default function getWindow(node) {\n if (node == null) {\n return window;\n }\n\n if (node.toString() !== '[object Window]') {\n var ownerDocument = node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView || window : window;\n }\n\n return node;\n}","import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n var OwnElement = getWindow(node).Element;\n return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n var OwnElement = getWindow(node).HTMLElement;\n return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n // IE 11 has no ShadowRoot\n if (typeof ShadowRoot === 'undefined') {\n return false;\n }\n\n var OwnElement = getWindow(node).ShadowRoot;\n return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };","import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n var state = _ref.state;\n Object.keys(state.elements).forEach(function (name) {\n var style = state.styles[name] || {};\n var attributes = state.attributes[name] || {};\n var element = state.elements[name]; // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n } // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe[cannot-write]\n\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (name) {\n var value = attributes[name];\n\n if (value === false) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, value === true ? '' : value);\n }\n });\n });\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state;\n var initialStyles = {\n popper: {\n position: state.options.strategy,\n left: '0',\n top: '0',\n margin: '0'\n },\n arrow: {\n position: 'absolute'\n },\n reference: {}\n };\n Object.assign(state.elements.popper.style, initialStyles.popper);\n state.styles = initialStyles;\n\n if (state.elements.arrow) {\n Object.assign(state.elements.arrow.style, initialStyles.arrow);\n }\n\n return function () {\n Object.keys(state.elements).forEach(function (name) {\n var element = state.elements[name];\n var attributes = state.attributes[name] || {};\n var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n var style = styleProperties.reduce(function (style, property) {\n style[property] = '';\n return style;\n }, {}); // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n }\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (attribute) {\n element.removeAttribute(attribute);\n });\n });\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'applyStyles',\n enabled: true,\n phase: 'write',\n fn: applyStyles,\n effect: effect,\n requires: ['computeStyles']\n};","import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n return placement.split('-')[0];\n}","export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;","export default function getUAString() {\n var uaData = navigator.userAgentData;\n\n if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {\n return uaData.brands.map(function (item) {\n return item.brand + \"/\" + item.version;\n }).join(' ');\n }\n\n return navigator.userAgent;\n}","import getUAString from \"../utils/userAgent.js\";\nexport default function isLayoutViewport() {\n return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}","import { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nimport getWindow from \"./getWindow.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getBoundingClientRect(element, includeScale, isFixedStrategy) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n\n var clientRect = element.getBoundingClientRect();\n var scaleX = 1;\n var scaleY = 1;\n\n if (includeScale && isHTMLElement(element)) {\n scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;\n scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;\n }\n\n var _ref = isElement(element) ? getWindow(element) : window,\n visualViewport = _ref.visualViewport;\n\n var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\n var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\n var width = clientRect.width / scaleX;\n var height = clientRect.height / scaleY;\n return {\n width: width,\n height: height,\n top: y,\n right: x + width,\n bottom: y + height,\n left: x,\n x: x,\n y: y\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n if (Math.abs(clientRect.width - width) <= 1) {\n width = clientRect.width;\n }\n\n if (Math.abs(clientRect.height - height) <= 1) {\n height = clientRect.height;\n }\n\n return {\n x: element.offsetLeft,\n y: element.offsetTop,\n width: width,\n height: height\n };\n}","import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n if (parent.contains(child)) {\n return true;\n } // then fallback to custom implementation with Shadow DOM support\n else if (rootNode && isShadowRoot(rootNode)) {\n var next = child;\n\n do {\n if (next && parent.isSameNode(next)) {\n return true;\n } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n next = next.parentNode || next.host;\n } while (next);\n } // Give up, the result is false\n\n\n return false;\n}","import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}","import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}","import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n element.document) || window.document).documentElement;\n}","import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n if (getNodeName(element) === 'html') {\n return element;\n }\n\n return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n // $FlowFixMe[incompatible-return]\n // $FlowFixMe[prop-missing]\n element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n element.parentNode || ( // DOM Element detected\n isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n getDocumentElement(element) // fallback\n\n );\n}","import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement, isShadowRoot } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getUAString from \"../utils/userAgent.js\";\n\nfunction getTrueOffsetParent(element) {\n if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n getComputedStyle(element).position === 'fixed') {\n return null;\n }\n\n return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n var isFirefox = /firefox/i.test(getUAString());\n var isIE = /Trident/i.test(getUAString());\n\n if (isIE && isHTMLElement(element)) {\n // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n var elementCss = getComputedStyle(element);\n\n if (elementCss.position === 'fixed') {\n return null;\n }\n }\n\n var currentNode = getParentNode(element);\n\n if (isShadowRoot(currentNode)) {\n currentNode = currentNode.host;\n }\n\n while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n return currentNode;\n } else {\n currentNode = currentNode.parentNode;\n }\n }\n\n return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n var window = getWindow(element);\n var offsetParent = getTrueOffsetParent(element);\n\n while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n offsetParent = getTrueOffsetParent(offsetParent);\n }\n\n if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n return window;\n }\n\n return offsetParent || getContainingBlock(element) || window;\n}","export default function getMainAxisFromPlacement(placement) {\n return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}","import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n var v = within(min, value, max);\n return v > max ? max : v;\n}","import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n return Object.assign({}, getFreshSideObject(), paddingObject);\n}","export default function getFreshSideObject() {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n}","export default function expandToHashMap(value, keys) {\n return keys.reduce(function (hashMap, key) {\n hashMap[key] = value;\n return hashMap;\n }, {});\n}","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n placement: state.placement\n })) : padding;\n return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n var _state$modifiersData$;\n\n var state = _ref.state,\n name = _ref.name,\n options = _ref.options;\n var arrowElement = state.elements.arrow;\n var popperOffsets = state.modifiersData.popperOffsets;\n var basePlacement = getBasePlacement(state.placement);\n var axis = getMainAxisFromPlacement(basePlacement);\n var isVertical = [left, right].indexOf(basePlacement) >= 0;\n var len = isVertical ? 'height' : 'width';\n\n if (!arrowElement || !popperOffsets) {\n return;\n }\n\n var paddingObject = toPaddingObject(options.padding, state);\n var arrowRect = getLayoutRect(arrowElement);\n var minProp = axis === 'y' ? top : left;\n var maxProp = axis === 'y' ? bottom : right;\n var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n var arrowOffsetParent = getOffsetParent(arrowElement);\n var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n // outside of the popper bounds\n\n var min = paddingObject[minProp];\n var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n var axisProp = axis;\n state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state,\n options = _ref2.options;\n var _options$element = options.element,\n arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n if (arrowElement == null) {\n return;\n } // CSS selector\n\n\n if (typeof arrowElement === 'string') {\n arrowElement = state.elements.popper.querySelector(arrowElement);\n\n if (!arrowElement) {\n return;\n }\n }\n\n if (!contains(state.elements.popper, arrowElement)) {\n return;\n }\n\n state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'arrow',\n enabled: true,\n phase: 'main',\n fn: arrow,\n effect: effect,\n requires: ['popperOffsets'],\n requiresIfExists: ['preventOverflow']\n};","export default function getVariation(placement) {\n return placement.split('-')[1];\n}","import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n top: 'auto',\n right: 'auto',\n bottom: 'auto',\n left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref, win) {\n var x = _ref.x,\n y = _ref.y;\n var dpr = win.devicePixelRatio || 1;\n return {\n x: round(x * dpr) / dpr || 0,\n y: round(y * dpr) / dpr || 0\n };\n}\n\nexport function mapToStyles(_ref2) {\n var _Object$assign2;\n\n var popper = _ref2.popper,\n popperRect = _ref2.popperRect,\n placement = _ref2.placement,\n variation = _ref2.variation,\n offsets = _ref2.offsets,\n position = _ref2.position,\n gpuAcceleration = _ref2.gpuAcceleration,\n adaptive = _ref2.adaptive,\n roundOffsets = _ref2.roundOffsets,\n isFixed = _ref2.isFixed;\n var _offsets$x = offsets.x,\n x = _offsets$x === void 0 ? 0 : _offsets$x,\n _offsets$y = offsets.y,\n y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n x: x,\n y: y\n }) : {\n x: x,\n y: y\n };\n\n x = _ref3.x;\n y = _ref3.y;\n var hasX = offsets.hasOwnProperty('x');\n var hasY = offsets.hasOwnProperty('y');\n var sideX = left;\n var sideY = top;\n var win = window;\n\n if (adaptive) {\n var offsetParent = getOffsetParent(popper);\n var heightProp = 'clientHeight';\n var widthProp = 'clientWidth';\n\n if (offsetParent === getWindow(popper)) {\n offsetParent = getDocumentElement(popper);\n\n if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n heightProp = 'scrollHeight';\n widthProp = 'scrollWidth';\n }\n } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n offsetParent = offsetParent;\n\n if (placement === top || (placement === left || placement === right) && variation === end) {\n sideY = bottom;\n var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n offsetParent[heightProp];\n y -= offsetY - popperRect.height;\n y *= gpuAcceleration ? 1 : -1;\n }\n\n if (placement === left || (placement === top || placement === bottom) && variation === end) {\n sideX = right;\n var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n offsetParent[widthProp];\n x -= offsetX - popperRect.width;\n x *= gpuAcceleration ? 1 : -1;\n }\n }\n\n var commonStyles = Object.assign({\n position: position\n }, adaptive && unsetSides);\n\n var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n x: x,\n y: y\n }, getWindow(popper)) : {\n x: x,\n y: y\n };\n\n x = _ref4.x;\n y = _ref4.y;\n\n if (gpuAcceleration) {\n var _Object$assign;\n\n return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n }\n\n return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n var state = _ref5.state,\n options = _ref5.options;\n var _options$gpuAccelerat = options.gpuAcceleration,\n gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n _options$adaptive = options.adaptive,\n adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n _options$roundOffsets = options.roundOffsets,\n roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n var commonStyles = {\n placement: getBasePlacement(state.placement),\n variation: getVariation(state.placement),\n popper: state.elements.popper,\n popperRect: state.rects.popper,\n gpuAcceleration: gpuAcceleration,\n isFixed: state.options.strategy === 'fixed'\n };\n\n if (state.modifiersData.popperOffsets != null) {\n state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.popperOffsets,\n position: state.options.strategy,\n adaptive: adaptive,\n roundOffsets: roundOffsets\n })));\n }\n\n if (state.modifiersData.arrow != null) {\n state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.arrow,\n position: 'absolute',\n adaptive: false,\n roundOffsets: roundOffsets\n })));\n }\n\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-placement': state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'computeStyles',\n enabled: true,\n phase: 'beforeWrite',\n fn: computeStyles,\n data: {}\n};","import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n passive: true\n};\n\nfunction effect(_ref) {\n var state = _ref.state,\n instance = _ref.instance,\n options = _ref.options;\n var _options$scroll = options.scroll,\n scroll = _options$scroll === void 0 ? true : _options$scroll,\n _options$resize = options.resize,\n resize = _options$resize === void 0 ? true : _options$resize;\n var window = getWindow(state.elements.popper);\n var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.addEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.addEventListener('resize', instance.update, passive);\n }\n\n return function () {\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.removeEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.removeEventListener('resize', instance.update, passive);\n }\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'eventListeners',\n enabled: true,\n phase: 'write',\n fn: function fn() {},\n effect: effect,\n data: {}\n};","var hash = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}","var hash = {\n start: 'end',\n end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n return placement.replace(/start|end/g, function (matched) {\n return hash[matched];\n });\n}","import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n var win = getWindow(node);\n var scrollLeft = win.pageXOffset;\n var scrollTop = win.pageYOffset;\n return {\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n // If has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n // Popper 1 is broken in this case and never had a bug report so let's assume\n // it's not an issue. I don't think anyone ever specifies width on \n // anyway.\n // Browsers where the left scrollbar doesn't cause an issue report `0` for\n // this (e.g. Edge 2019, IE11, Safari)\n return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}","import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n // Firefox wants us to check `-x` and `-y` variations as well\n var _getComputedStyle = getComputedStyle(element),\n overflow = _getComputedStyle.overflow,\n overflowX = _getComputedStyle.overflowX,\n overflowY = _getComputedStyle.overflowY;\n\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}","import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return node.ownerDocument.body;\n }\n\n if (isHTMLElement(node) && isScrollParent(node)) {\n return node;\n }\n\n return getScrollParent(getParentNode(node));\n}","import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n var _element$ownerDocumen;\n\n if (list === void 0) {\n list = [];\n }\n\n var scrollParent = getScrollParent(element);\n var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n var win = getWindow(scrollParent);\n var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n var updatedList = list.concat(target);\n return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n updatedList.concat(listScrollParents(getParentNode(target)));\n}","export default function rectToClientRect(rect) {\n return Object.assign({}, rect, {\n left: rect.x,\n top: rect.y,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n });\n}","import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element, strategy) {\n var rect = getBoundingClientRect(element, false, strategy === 'fixed');\n rect.top = rect.top + element.clientTop;\n rect.left = rect.left + element.clientLeft;\n rect.bottom = rect.top + element.clientHeight;\n rect.right = rect.left + element.clientWidth;\n rect.width = element.clientWidth;\n rect.height = element.clientHeight;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent, strategy) {\n return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n var clippingParents = listScrollParents(getParentNode(element));\n var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n if (!isElement(clipperElement)) {\n return [];\n } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n return clippingParents.filter(function (clippingParent) {\n return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary, strategy) {\n var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n var firstClippingParent = clippingParents[0];\n var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n clippingRect.width = clippingRect.right - clippingRect.left;\n clippingRect.height = clippingRect.bottom - clippingRect.top;\n clippingRect.x = clippingRect.left;\n clippingRect.y = clippingRect.top;\n return clippingRect;\n}","import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getViewportRect(element, strategy) {\n var win = getWindow(element);\n var html = getDocumentElement(element);\n var visualViewport = win.visualViewport;\n var width = html.clientWidth;\n var height = html.clientHeight;\n var x = 0;\n var y = 0;\n\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n var layoutViewport = isLayoutViewport();\n\n if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n\n return {\n width: width,\n height: height,\n x: x + getWindowScrollBarX(element),\n y: y\n };\n}","import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `` and `` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n var _element$ownerDocumen;\n\n var html = getDocumentElement(element);\n var winScroll = getWindowScroll(element);\n var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n var y = -winScroll.scrollTop;\n\n if (getComputedStyle(body || html).direction === 'rtl') {\n x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n }\n\n return {\n width: width,\n height: height,\n x: x,\n y: y\n };\n}","import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n var reference = _ref.reference,\n element = _ref.element,\n placement = _ref.placement;\n var basePlacement = placement ? getBasePlacement(placement) : null;\n var variation = placement ? getVariation(placement) : null;\n var commonX = reference.x + reference.width / 2 - element.width / 2;\n var commonY = reference.y + reference.height / 2 - element.height / 2;\n var offsets;\n\n switch (basePlacement) {\n case top:\n offsets = {\n x: commonX,\n y: reference.y - element.height\n };\n break;\n\n case bottom:\n offsets = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n\n case right:\n offsets = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n\n case left:\n offsets = {\n x: reference.x - element.width,\n y: commonY\n };\n break;\n\n default:\n offsets = {\n x: reference.x,\n y: reference.y\n };\n }\n\n var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n if (mainAxis != null) {\n var len = mainAxis === 'y' ? 'height' : 'width';\n\n switch (variation) {\n case start:\n offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n break;\n\n case end:\n offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n break;\n\n default:\n }\n }\n\n return offsets;\n}","import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n _options$placement = _options.placement,\n placement = _options$placement === void 0 ? state.placement : _options$placement,\n _options$strategy = _options.strategy,\n strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\n _options$boundary = _options.boundary,\n boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n _options$rootBoundary = _options.rootBoundary,\n rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n _options$elementConte = _options.elementContext,\n elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n _options$altBoundary = _options.altBoundary,\n altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n _options$padding = _options.padding,\n padding = _options$padding === void 0 ? 0 : _options$padding;\n var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n var altContext = elementContext === popper ? reference : popper;\n var popperRect = state.rects.popper;\n var element = state.elements[altBoundary ? altContext : elementContext];\n var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);\n var referenceClientRect = getBoundingClientRect(state.elements.reference);\n var popperOffsets = computeOffsets({\n reference: referenceClientRect,\n element: popperRect,\n strategy: 'absolute',\n placement: placement\n });\n var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n // 0 or negative = within the clipping rect\n\n var overflowOffsets = {\n top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n };\n var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n if (elementContext === popper && offsetData) {\n var offset = offsetData[placement];\n Object.keys(overflowOffsets).forEach(function (key) {\n var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n overflowOffsets[key] += offset[axis] * multiply;\n });\n }\n\n return overflowOffsets;\n}","import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n if (getBasePlacement(placement) === auto) {\n return [];\n }\n\n var oppositePlacement = getOppositePlacement(placement);\n return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n\n if (state.modifiersData[name]._skip) {\n return;\n }\n\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n specifiedFallbackPlacements = options.fallbackPlacements,\n padding = options.padding,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n _options$flipVariatio = options.flipVariations,\n flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n allowedAutoPlacements = options.allowedAutoPlacements;\n var preferredPlacement = state.options.placement;\n var basePlacement = getBasePlacement(preferredPlacement);\n var isBasePlacement = basePlacement === preferredPlacement;\n var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n flipVariations: flipVariations,\n allowedAutoPlacements: allowedAutoPlacements\n }) : placement);\n }, []);\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var checksMap = new Map();\n var makeFallbackChecks = true;\n var firstFittingPlacement = placements[0];\n\n for (var i = 0; i < placements.length; i++) {\n var placement = placements[i];\n\n var _basePlacement = getBasePlacement(placement);\n\n var isStartVariation = getVariation(placement) === start;\n var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n var len = isVertical ? 'width' : 'height';\n var overflow = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n altBoundary: altBoundary,\n padding: padding\n });\n var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n if (referenceRect[len] > popperRect[len]) {\n mainVariationSide = getOppositePlacement(mainVariationSide);\n }\n\n var altVariationSide = getOppositePlacement(mainVariationSide);\n var checks = [];\n\n if (checkMainAxis) {\n checks.push(overflow[_basePlacement] <= 0);\n }\n\n if (checkAltAxis) {\n checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n }\n\n if (checks.every(function (check) {\n return check;\n })) {\n firstFittingPlacement = placement;\n makeFallbackChecks = false;\n break;\n }\n\n checksMap.set(placement, checks);\n }\n\n if (makeFallbackChecks) {\n // `2` may be desired in some cases – research later\n var numberOfChecks = flipVariations ? 3 : 1;\n\n var _loop = function _loop(_i) {\n var fittingPlacement = placements.find(function (placement) {\n var checks = checksMap.get(placement);\n\n if (checks) {\n return checks.slice(0, _i).every(function (check) {\n return check;\n });\n }\n });\n\n if (fittingPlacement) {\n firstFittingPlacement = fittingPlacement;\n return \"break\";\n }\n };\n\n for (var _i = numberOfChecks; _i > 0; _i--) {\n var _ret = _loop(_i);\n\n if (_ret === \"break\") break;\n }\n }\n\n if (state.placement !== firstFittingPlacement) {\n state.modifiersData[name]._skip = true;\n state.placement = firstFittingPlacement;\n state.reset = true;\n }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'flip',\n enabled: true,\n phase: 'main',\n fn: flip,\n requiresIfExists: ['offset'],\n data: {\n _skip: false\n }\n};","import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n placement = _options.placement,\n boundary = _options.boundary,\n rootBoundary = _options.rootBoundary,\n padding = _options.padding,\n flipVariations = _options.flipVariations,\n _options$allowedAutoP = _options.allowedAutoPlacements,\n allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n var variation = getVariation(placement);\n var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n return getVariation(placement) === variation;\n }) : basePlacements;\n var allowedPlacements = placements.filter(function (placement) {\n return allowedAutoPlacements.indexOf(placement) >= 0;\n });\n\n if (allowedPlacements.length === 0) {\n allowedPlacements = placements;\n } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n var overflows = allowedPlacements.reduce(function (acc, placement) {\n acc[placement] = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding\n })[getBasePlacement(placement)];\n return acc;\n }, {});\n return Object.keys(overflows).sort(function (a, b) {\n return overflows[a] - overflows[b];\n });\n}","import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n if (preventedOffsets === void 0) {\n preventedOffsets = {\n x: 0,\n y: 0\n };\n }\n\n return {\n top: overflow.top - rect.height - preventedOffsets.y,\n right: overflow.right - rect.width + preventedOffsets.x,\n bottom: overflow.bottom - rect.height + preventedOffsets.y,\n left: overflow.left - rect.width - preventedOffsets.x\n };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n return [top, right, bottom, left].some(function (side) {\n return overflow[side] >= 0;\n });\n}\n\nfunction hide(_ref) {\n var state = _ref.state,\n name = _ref.name;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var preventedOffsets = state.modifiersData.preventOverflow;\n var referenceOverflow = detectOverflow(state, {\n elementContext: 'reference'\n });\n var popperAltOverflow = detectOverflow(state, {\n altBoundary: true\n });\n var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n state.modifiersData[name] = {\n referenceClippingOffsets: referenceClippingOffsets,\n popperEscapeOffsets: popperEscapeOffsets,\n isReferenceHidden: isReferenceHidden,\n hasPopperEscaped: hasPopperEscaped\n };\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-reference-hidden': isReferenceHidden,\n 'data-popper-escaped': hasPopperEscaped\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'hide',\n enabled: true,\n phase: 'main',\n requiresIfExists: ['preventOverflow'],\n fn: hide\n};","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n var basePlacement = getBasePlacement(placement);\n var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n placement: placement\n })) : offset,\n skidding = _ref[0],\n distance = _ref[1];\n\n skidding = skidding || 0;\n distance = (distance || 0) * invertDistance;\n return [left, right].indexOf(basePlacement) >= 0 ? {\n x: distance,\n y: skidding\n } : {\n x: skidding,\n y: distance\n };\n}\n\nfunction offset(_ref2) {\n var state = _ref2.state,\n options = _ref2.options,\n name = _ref2.name;\n var _options$offset = options.offset,\n offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n var data = placements.reduce(function (acc, placement) {\n acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n return acc;\n }, {});\n var _data$state$placement = data[state.placement],\n x = _data$state$placement.x,\n y = _data$state$placement.y;\n\n if (state.modifiersData.popperOffsets != null) {\n state.modifiersData.popperOffsets.x += x;\n state.modifiersData.popperOffsets.y += y;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'offset',\n enabled: true,\n phase: 'main',\n requires: ['popperOffsets'],\n fn: offset\n};","import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n var state = _ref.state,\n name = _ref.name;\n // Offsets are the actual position the popper needs to have to be\n // properly positioned near its reference element\n // This is the most basic placement, and will be adjusted by\n // the modifiers in the next step\n state.modifiersData[name] = computeOffsets({\n reference: state.rects.reference,\n element: state.rects.popper,\n strategy: 'absolute',\n placement: state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'popperOffsets',\n enabled: true,\n phase: 'read',\n fn: popperOffsets,\n data: {}\n};","import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n padding = options.padding,\n _options$tether = options.tether,\n tether = _options$tether === void 0 ? true : _options$tether,\n _options$tetherOffset = options.tetherOffset,\n tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n var overflow = detectOverflow(state, {\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n altBoundary: altBoundary\n });\n var basePlacement = getBasePlacement(state.placement);\n var variation = getVariation(state.placement);\n var isBasePlacement = !variation;\n var mainAxis = getMainAxisFromPlacement(basePlacement);\n var altAxis = getAltAxis(mainAxis);\n var popperOffsets = state.modifiersData.popperOffsets;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n placement: state.placement\n })) : tetherOffset;\n var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n mainAxis: tetherOffsetValue,\n altAxis: tetherOffsetValue\n } : Object.assign({\n mainAxis: 0,\n altAxis: 0\n }, tetherOffsetValue);\n var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n var data = {\n x: 0,\n y: 0\n };\n\n if (!popperOffsets) {\n return;\n }\n\n if (checkMainAxis) {\n var _offsetModifierState$;\n\n var mainSide = mainAxis === 'y' ? top : left;\n var altSide = mainAxis === 'y' ? bottom : right;\n var len = mainAxis === 'y' ? 'height' : 'width';\n var offset = popperOffsets[mainAxis];\n var min = offset + overflow[mainSide];\n var max = offset - overflow[altSide];\n var additive = tether ? -popperRect[len] / 2 : 0;\n var minLen = variation === start ? referenceRect[len] : popperRect[len];\n var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n // outside the reference bounds\n\n var arrowElement = state.elements.arrow;\n var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n width: 0,\n height: 0\n };\n var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n var arrowPaddingMin = arrowPaddingObject[mainSide];\n var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n // to include its full size in the calculation. If the reference is small\n // and near the edge of a boundary, the popper can overflow even if the\n // reference is not overflowing as well (e.g. virtual elements with no\n // width or height)\n\n var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n var tetherMax = offset + maxOffset - offsetModifierValue;\n var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n popperOffsets[mainAxis] = preventedOffset;\n data[mainAxis] = preventedOffset - offset;\n }\n\n if (checkAltAxis) {\n var _offsetModifierState$2;\n\n var _mainSide = mainAxis === 'x' ? top : left;\n\n var _altSide = mainAxis === 'x' ? bottom : right;\n\n var _offset = popperOffsets[altAxis];\n\n var _len = altAxis === 'y' ? 'height' : 'width';\n\n var _min = _offset + overflow[_mainSide];\n\n var _max = _offset - overflow[_altSide];\n\n var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n popperOffsets[altAxis] = _preventedOffset;\n data[altAxis] = _preventedOffset - _offset;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'preventOverflow',\n enabled: true,\n phase: 'main',\n fn: preventOverflow,\n requiresIfExists: ['offset']\n};","export default function getAltAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n var rect = element.getBoundingClientRect();\n var scaleX = round(rect.width) / element.offsetWidth || 1;\n var scaleY = round(rect.height) / element.offsetHeight || 1;\n return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n\n var isOffsetParentAnElement = isHTMLElement(offsetParent);\n var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n var documentElement = getDocumentElement(offsetParent);\n var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);\n var scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n var offsets = {\n x: 0,\n y: 0\n };\n\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n isScrollParent(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n\n if (isHTMLElement(offsetParent)) {\n offsets = getBoundingClientRect(offsetParent, true);\n offsets.x += offsetParent.clientLeft;\n offsets.y += offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}","import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n if (node === getWindow(node) || !isHTMLElement(node)) {\n return getWindowScroll(node);\n } else {\n return getHTMLElementScroll(node);\n }\n}","export default function getHTMLElementScroll(element) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n}","import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n var map = new Map();\n var visited = new Set();\n var result = [];\n modifiers.forEach(function (modifier) {\n map.set(modifier.name, modifier);\n }); // On visiting object, check for its dependencies and visit them recursively\n\n function sort(modifier) {\n visited.add(modifier.name);\n var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n requires.forEach(function (dep) {\n if (!visited.has(dep)) {\n var depModifier = map.get(dep);\n\n if (depModifier) {\n sort(depModifier);\n }\n }\n });\n result.push(modifier);\n }\n\n modifiers.forEach(function (modifier) {\n if (!visited.has(modifier.name)) {\n // check for visited object\n sort(modifier);\n }\n });\n return result;\n}\n\nexport default function orderModifiers(modifiers) {\n // order based on dependencies\n var orderedModifiers = order(modifiers); // order based on phase\n\n return modifierPhases.reduce(function (acc, phase) {\n return acc.concat(orderedModifiers.filter(function (modifier) {\n return modifier.phase === phase;\n }));\n }, []);\n}","import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nvar DEFAULT_OPTIONS = {\n placement: 'bottom',\n modifiers: [],\n strategy: 'absolute'\n};\n\nfunction areValidElements() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return !args.some(function (element) {\n return !(element && typeof element.getBoundingClientRect === 'function');\n });\n}\n\nexport function popperGenerator(generatorOptions) {\n if (generatorOptions === void 0) {\n generatorOptions = {};\n }\n\n var _generatorOptions = generatorOptions,\n _generatorOptions$def = _generatorOptions.defaultModifiers,\n defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n _generatorOptions$def2 = _generatorOptions.defaultOptions,\n defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n return function createPopper(reference, popper, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n\n var state = {\n placement: 'bottom',\n orderedModifiers: [],\n options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n modifiersData: {},\n elements: {\n reference: reference,\n popper: popper\n },\n attributes: {},\n styles: {}\n };\n var effectCleanupFns = [];\n var isDestroyed = false;\n var instance = {\n state: state,\n setOptions: function setOptions(setOptionsAction) {\n var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n cleanupModifierEffects();\n state.options = Object.assign({}, defaultOptions, state.options, options);\n state.scrollParents = {\n reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n popper: listScrollParents(popper)\n }; // Orders the modifiers based on their dependencies and `phase`\n // properties\n\n var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n state.orderedModifiers = orderedModifiers.filter(function (m) {\n return m.enabled;\n });\n runModifierEffects();\n return instance.update();\n },\n // Sync update – it will always be executed, even if not necessary. This\n // is useful for low frequency updates where sync behavior simplifies the\n // logic.\n // For high frequency updates (e.g. `resize` and `scroll` events), always\n // prefer the async Popper#update method\n forceUpdate: function forceUpdate() {\n if (isDestroyed) {\n return;\n }\n\n var _state$elements = state.elements,\n reference = _state$elements.reference,\n popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n // anymore\n\n if (!areValidElements(reference, popper)) {\n return;\n } // Store the reference and popper rects to be read by modifiers\n\n\n state.rects = {\n reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n popper: getLayoutRect(popper)\n }; // Modifiers have the ability to reset the current update cycle. The\n // most common use case for this is the `flip` modifier changing the\n // placement, which then needs to re-run all the modifiers, because the\n // logic was previously ran for the previous placement and is therefore\n // stale/incorrect\n\n state.reset = false;\n state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n // is filled with the initial data specified by the modifier. This means\n // it doesn't persist and is fresh on each update.\n // To ensure persistent data, use `${name}#persistent`\n\n state.orderedModifiers.forEach(function (modifier) {\n return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n });\n\n for (var index = 0; index < state.orderedModifiers.length; index++) {\n if (state.reset === true) {\n state.reset = false;\n index = -1;\n continue;\n }\n\n var _state$orderedModifie = state.orderedModifiers[index],\n fn = _state$orderedModifie.fn,\n _state$orderedModifie2 = _state$orderedModifie.options,\n _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n name = _state$orderedModifie.name;\n\n if (typeof fn === 'function') {\n state = fn({\n state: state,\n options: _options,\n name: name,\n instance: instance\n }) || state;\n }\n }\n },\n // Async and optimistically optimized update – it will not be executed if\n // not necessary (debounced to run at most once-per-tick)\n update: debounce(function () {\n return new Promise(function (resolve) {\n instance.forceUpdate();\n resolve(state);\n });\n }),\n destroy: function destroy() {\n cleanupModifierEffects();\n isDestroyed = true;\n }\n };\n\n if (!areValidElements(reference, popper)) {\n return instance;\n }\n\n instance.setOptions(options).then(function (state) {\n if (!isDestroyed && options.onFirstUpdate) {\n options.onFirstUpdate(state);\n }\n }); // Modifiers have the ability to execute arbitrary code before the first\n // update cycle runs. They will be executed in the same order as the update\n // cycle. This is useful when a modifier adds some persistent data that\n // other modifiers need to use, but the modifier is run after the dependent\n // one.\n\n function runModifierEffects() {\n state.orderedModifiers.forEach(function (_ref) {\n var name = _ref.name,\n _ref$options = _ref.options,\n options = _ref$options === void 0 ? {} : _ref$options,\n effect = _ref.effect;\n\n if (typeof effect === 'function') {\n var cleanupFn = effect({\n state: state,\n name: name,\n instance: instance,\n options: options\n });\n\n var noopFn = function noopFn() {};\n\n effectCleanupFns.push(cleanupFn || noopFn);\n }\n });\n }\n\n function cleanupModifierEffects() {\n effectCleanupFns.forEach(function (fn) {\n return fn();\n });\n effectCleanupFns = [];\n }\n\n return instance;\n };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };","export default function debounce(fn) {\n var pending;\n return function () {\n if (!pending) {\n pending = new Promise(function (resolve) {\n Promise.resolve().then(function () {\n pending = undefined;\n resolve(fn());\n });\n });\n }\n\n return pending;\n };\n}","export default function mergeByName(modifiers) {\n var merged = modifiers.reduce(function (merged, current) {\n var existing = merged[current.name];\n merged[current.name] = existing ? Object.assign({}, existing, current, {\n options: Object.assign({}, existing.options, current.options),\n data: Object.assign({}, existing.data, current.data)\n }) : current;\n return merged;\n }, {}); // IE11 does not support Object.values\n\n return Object.keys(merged).map(function (key) {\n return merged[key];\n });\n}","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow };","/*!\n * Bootstrap v5.3.3 (https://getbootstrap.com/)\n * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\nimport * as Popper from '@popperjs/core';\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nconst elementMap = new Map();\nconst Data = {\n set(element, key, instance) {\n if (!elementMap.has(element)) {\n elementMap.set(element, new Map());\n }\n const instanceMap = elementMap.get(element);\n\n // make it clear we only want one instance per element\n // can be removed later when multiple key/instances are fine to be used\n if (!instanceMap.has(key) && instanceMap.size !== 0) {\n // eslint-disable-next-line no-console\n console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n return;\n }\n instanceMap.set(key, instance);\n },\n get(element, key) {\n if (elementMap.has(element)) {\n return elementMap.get(element).get(key) || null;\n }\n return null;\n },\n remove(element, key) {\n if (!elementMap.has(element)) {\n return;\n }\n const instanceMap = elementMap.get(element);\n instanceMap.delete(key);\n\n // free up element references if there are no instances left for an element\n if (instanceMap.size === 0) {\n elementMap.delete(element);\n }\n }\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1000000;\nconst MILLISECONDS_MULTIPLIER = 1000;\nconst TRANSITION_END = 'transitionend';\n\n/**\n * Properly escape IDs selectors to handle weird IDs\n * @param {string} selector\n * @returns {string}\n */\nconst parseSelector = selector => {\n if (selector && window.CSS && window.CSS.escape) {\n // document.querySelector needs escaping to handle IDs (html5+) containing for instance /\n selector = selector.replace(/#([^\\s\"#']+)/g, (match, id) => `#${CSS.escape(id)}`);\n }\n return selector;\n};\n\n// Shout-out Angus Croll (https://goo.gl/pxwQGp)\nconst toType = object => {\n if (object === null || object === undefined) {\n return `${object}`;\n }\n return Object.prototype.toString.call(object).match(/\\s([a-z]+)/i)[1].toLowerCase();\n};\n\n/**\n * Public Util API\n */\n\nconst getUID = prefix => {\n do {\n prefix += Math.floor(Math.random() * MAX_UID);\n } while (document.getElementById(prefix));\n return prefix;\n};\nconst getTransitionDurationFromElement = element => {\n if (!element) {\n return 0;\n }\n\n // Get transition-duration of the element\n let {\n transitionDuration,\n transitionDelay\n } = window.getComputedStyle(element);\n const floatTransitionDuration = Number.parseFloat(transitionDuration);\n const floatTransitionDelay = Number.parseFloat(transitionDelay);\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0;\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0];\n transitionDelay = transitionDelay.split(',')[0];\n return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n};\nconst triggerTransitionEnd = element => {\n element.dispatchEvent(new Event(TRANSITION_END));\n};\nconst isElement = object => {\n if (!object || typeof object !== 'object') {\n return false;\n }\n if (typeof object.jquery !== 'undefined') {\n object = object[0];\n }\n return typeof object.nodeType !== 'undefined';\n};\nconst getElement = object => {\n // it's a jQuery object or a node element\n if (isElement(object)) {\n return object.jquery ? object[0] : object;\n }\n if (typeof object === 'string' && object.length > 0) {\n return document.querySelector(parseSelector(object));\n }\n return null;\n};\nconst isVisible = element => {\n if (!isElement(element) || element.getClientRects().length === 0) {\n return false;\n }\n const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n // Handle `details` element as its content may falsie appear visible when it is closed\n const closedDetails = element.closest('details:not([open])');\n if (!closedDetails) {\n return elementIsVisible;\n }\n if (closedDetails !== element) {\n const summary = element.closest('summary');\n if (summary && summary.parentNode !== closedDetails) {\n return false;\n }\n if (summary === null) {\n return false;\n }\n }\n return elementIsVisible;\n};\nconst isDisabled = element => {\n if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n return true;\n }\n if (element.classList.contains('disabled')) {\n return true;\n }\n if (typeof element.disabled !== 'undefined') {\n return element.disabled;\n }\n return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n};\nconst findShadowRoot = element => {\n if (!document.documentElement.attachShadow) {\n return null;\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode();\n return root instanceof ShadowRoot ? root : null;\n }\n if (element instanceof ShadowRoot) {\n return element;\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null;\n }\n return findShadowRoot(element.parentNode);\n};\nconst noop = () => {};\n\n/**\n * Trick to restart an element's animation\n *\n * @param {HTMLElement} element\n * @return void\n *\n * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n */\nconst reflow = element => {\n element.offsetHeight; // eslint-disable-line no-unused-expressions\n};\nconst getjQuery = () => {\n if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n return window.jQuery;\n }\n return null;\n};\nconst DOMContentLoadedCallbacks = [];\nconst onDOMContentLoaded = callback => {\n if (document.readyState === 'loading') {\n // add listener on the first call when the document is in loading state\n if (!DOMContentLoadedCallbacks.length) {\n document.addEventListener('DOMContentLoaded', () => {\n for (const callback of DOMContentLoadedCallbacks) {\n callback();\n }\n });\n }\n DOMContentLoadedCallbacks.push(callback);\n } else {\n callback();\n }\n};\nconst isRTL = () => document.documentElement.dir === 'rtl';\nconst defineJQueryPlugin = plugin => {\n onDOMContentLoaded(() => {\n const $ = getjQuery();\n /* istanbul ignore if */\n if ($) {\n const name = plugin.NAME;\n const JQUERY_NO_CONFLICT = $.fn[name];\n $.fn[name] = plugin.jQueryInterface;\n $.fn[name].Constructor = plugin;\n $.fn[name].noConflict = () => {\n $.fn[name] = JQUERY_NO_CONFLICT;\n return plugin.jQueryInterface;\n };\n }\n });\n};\nconst execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {\n return typeof possibleCallback === 'function' ? possibleCallback(...args) : defaultValue;\n};\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n if (!waitForTransition) {\n execute(callback);\n return;\n }\n const durationPadding = 5;\n const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n let called = false;\n const handler = ({\n target\n }) => {\n if (target !== transitionElement) {\n return;\n }\n called = true;\n transitionElement.removeEventListener(TRANSITION_END, handler);\n execute(callback);\n };\n transitionElement.addEventListener(TRANSITION_END, handler);\n setTimeout(() => {\n if (!called) {\n triggerTransitionEnd(transitionElement);\n }\n }, emulatedDuration);\n};\n\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list The list of elements\n * @param activeElement The active element\n * @param shouldGetNext Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n const listLength = list.length;\n let index = list.indexOf(activeElement);\n\n // if the element does not exist in the list return an element\n // depending on the direction and if cycle is allowed\n if (index === -1) {\n return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0];\n }\n index += shouldGetNext ? 1 : -1;\n if (isCycleAllowed) {\n index = (index + listLength) % listLength;\n }\n return list[Math.max(0, Math.min(index, listLength - 1))];\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\nconst stripNameRegex = /\\..*/;\nconst stripUidRegex = /::\\d+$/;\nconst eventRegistry = {}; // Events storage\nlet uidEvent = 1;\nconst customEvents = {\n mouseenter: 'mouseover',\n mouseleave: 'mouseout'\n};\nconst nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n\n/**\n * Private methods\n */\n\nfunction makeEventUid(element, uid) {\n return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n}\nfunction getElementEvents(element) {\n const uid = makeEventUid(element);\n element.uidEvent = uid;\n eventRegistry[uid] = eventRegistry[uid] || {};\n return eventRegistry[uid];\n}\nfunction bootstrapHandler(element, fn) {\n return function handler(event) {\n hydrateObj(event, {\n delegateTarget: element\n });\n if (handler.oneOff) {\n EventHandler.off(element, event.type, fn);\n }\n return fn.apply(element, [event]);\n };\n}\nfunction bootstrapDelegationHandler(element, selector, fn) {\n return function handler(event) {\n const domElements = element.querySelectorAll(selector);\n for (let {\n target\n } = event; target && target !== this; target = target.parentNode) {\n for (const domElement of domElements) {\n if (domElement !== target) {\n continue;\n }\n hydrateObj(event, {\n delegateTarget: target\n });\n if (handler.oneOff) {\n EventHandler.off(element, event.type, selector, fn);\n }\n return fn.apply(target, [event]);\n }\n }\n };\n}\nfunction findHandler(events, callable, delegationSelector = null) {\n return Object.values(events).find(event => event.callable === callable && event.delegationSelector === delegationSelector);\n}\nfunction normalizeParameters(originalTypeEvent, handler, delegationFunction) {\n const isDelegated = typeof handler === 'string';\n // TODO: tooltip passes `false` instead of selector, so we need to check\n const callable = isDelegated ? delegationFunction : handler || delegationFunction;\n let typeEvent = getTypeEvent(originalTypeEvent);\n if (!nativeEvents.has(typeEvent)) {\n typeEvent = originalTypeEvent;\n }\n return [isDelegated, callable, typeEvent];\n}\nfunction addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return;\n }\n let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);\n\n // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n if (originalTypeEvent in customEvents) {\n const wrapFunction = fn => {\n return function (event) {\n if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n return fn.call(this, event);\n }\n };\n };\n callable = wrapFunction(callable);\n }\n const events = getElementEvents(element);\n const handlers = events[typeEvent] || (events[typeEvent] = {});\n const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null);\n if (previousFunction) {\n previousFunction.oneOff = previousFunction.oneOff && oneOff;\n return;\n }\n const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''));\n const fn = isDelegated ? bootstrapDelegationHandler(element, handler, callable) : bootstrapHandler(element, callable);\n fn.delegationSelector = isDelegated ? handler : null;\n fn.callable = callable;\n fn.oneOff = oneOff;\n fn.uidEvent = uid;\n handlers[uid] = fn;\n element.addEventListener(typeEvent, fn, isDelegated);\n}\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n const fn = findHandler(events[typeEvent], handler, delegationSelector);\n if (!fn) {\n return;\n }\n element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n delete events[typeEvent][fn.uidEvent];\n}\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n const storeElementEvent = events[typeEvent] || {};\n for (const [handlerKey, event] of Object.entries(storeElementEvent)) {\n if (handlerKey.includes(namespace)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);\n }\n }\n}\nfunction getTypeEvent(event) {\n // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n event = event.replace(stripNameRegex, '');\n return customEvents[event] || event;\n}\nconst EventHandler = {\n on(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, false);\n },\n one(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, true);\n },\n off(element, originalTypeEvent, handler, delegationFunction) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return;\n }\n const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);\n const inNamespace = typeEvent !== originalTypeEvent;\n const events = getElementEvents(element);\n const storeElementEvent = events[typeEvent] || {};\n const isNamespace = originalTypeEvent.startsWith('.');\n if (typeof callable !== 'undefined') {\n // Simplest case: handler is passed, remove that listener ONLY.\n if (!Object.keys(storeElementEvent).length) {\n return;\n }\n removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null);\n return;\n }\n if (isNamespace) {\n for (const elementEvent of Object.keys(events)) {\n removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n }\n }\n for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {\n const handlerKey = keyHandlers.replace(stripUidRegex, '');\n if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);\n }\n }\n },\n trigger(element, event, args) {\n if (typeof event !== 'string' || !element) {\n return null;\n }\n const $ = getjQuery();\n const typeEvent = getTypeEvent(event);\n const inNamespace = event !== typeEvent;\n let jQueryEvent = null;\n let bubbles = true;\n let nativeDispatch = true;\n let defaultPrevented = false;\n if (inNamespace && $) {\n jQueryEvent = $.Event(event, args);\n $(element).trigger(jQueryEvent);\n bubbles = !jQueryEvent.isPropagationStopped();\n nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n defaultPrevented = jQueryEvent.isDefaultPrevented();\n }\n const evt = hydrateObj(new Event(event, {\n bubbles,\n cancelable: true\n }), args);\n if (defaultPrevented) {\n evt.preventDefault();\n }\n if (nativeDispatch) {\n element.dispatchEvent(evt);\n }\n if (evt.defaultPrevented && jQueryEvent) {\n jQueryEvent.preventDefault();\n }\n return evt;\n }\n};\nfunction hydrateObj(obj, meta = {}) {\n for (const [key, value] of Object.entries(meta)) {\n try {\n obj[key] = value;\n } catch (_unused) {\n Object.defineProperty(obj, key, {\n configurable: true,\n get() {\n return value;\n }\n });\n }\n }\n return obj;\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(value) {\n if (value === 'true') {\n return true;\n }\n if (value === 'false') {\n return false;\n }\n if (value === Number(value).toString()) {\n return Number(value);\n }\n if (value === '' || value === 'null') {\n return null;\n }\n if (typeof value !== 'string') {\n return value;\n }\n try {\n return JSON.parse(decodeURIComponent(value));\n } catch (_unused) {\n return value;\n }\n}\nfunction normalizeDataKey(key) {\n return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n}\nconst Manipulator = {\n setDataAttribute(element, key, value) {\n element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n },\n removeDataAttribute(element, key) {\n element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n },\n getDataAttributes(element) {\n if (!element) {\n return {};\n }\n const attributes = {};\n const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'));\n for (const key of bsKeys) {\n let pureKey = key.replace(/^bs/, '');\n pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n attributes[pureKey] = normalizeData(element.dataset[key]);\n }\n return attributes;\n },\n getDataAttribute(element, key) {\n return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n }\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/config.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Class definition\n */\n\nclass Config {\n // Getters\n static get Default() {\n return {};\n }\n static get DefaultType() {\n return {};\n }\n static get NAME() {\n throw new Error('You have to implement the static method \"NAME\", for each component!');\n }\n _getConfig(config) {\n config = this._mergeConfigObj(config);\n config = this._configAfterMerge(config);\n this._typeCheckConfig(config);\n return config;\n }\n _configAfterMerge(config) {\n return config;\n }\n _mergeConfigObj(config, element) {\n const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {}; // try to parse\n\n return {\n ...this.constructor.Default,\n ...(typeof jsonConfig === 'object' ? jsonConfig : {}),\n ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}),\n ...(typeof config === 'object' ? config : {})\n };\n }\n _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {\n for (const [property, expectedTypes] of Object.entries(configTypes)) {\n const value = config[property];\n const valueType = isElement(value) ? 'element' : toType(value);\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n }\n }\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst VERSION = '5.3.3';\n\n/**\n * Class definition\n */\n\nclass BaseComponent extends Config {\n constructor(element, config) {\n super();\n element = getElement(element);\n if (!element) {\n return;\n }\n this._element = element;\n this._config = this._getConfig(config);\n Data.set(this._element, this.constructor.DATA_KEY, this);\n }\n\n // Public\n dispose() {\n Data.remove(this._element, this.constructor.DATA_KEY);\n EventHandler.off(this._element, this.constructor.EVENT_KEY);\n for (const propertyName of Object.getOwnPropertyNames(this)) {\n this[propertyName] = null;\n }\n }\n _queueCallback(callback, element, isAnimated = true) {\n executeAfterTransition(callback, element, isAnimated);\n }\n _getConfig(config) {\n config = this._mergeConfigObj(config, this._element);\n config = this._configAfterMerge(config);\n this._typeCheckConfig(config);\n return config;\n }\n\n // Static\n static getInstance(element) {\n return Data.get(getElement(element), this.DATA_KEY);\n }\n static getOrCreateInstance(element, config = {}) {\n return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n }\n static get VERSION() {\n return VERSION;\n }\n static get DATA_KEY() {\n return `bs.${this.NAME}`;\n }\n static get EVENT_KEY() {\n return `.${this.DATA_KEY}`;\n }\n static eventName(name) {\n return `${name}${this.EVENT_KEY}`;\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst getSelector = element => {\n let selector = element.getAttribute('data-bs-target');\n if (!selector || selector === '#') {\n let hrefAttribute = element.getAttribute('href');\n\n // The only valid content that could double as a selector are IDs or classes,\n // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n // `document.querySelector` will rightfully complain it is invalid.\n // See https://github.com/twbs/bootstrap/issues/32273\n if (!hrefAttribute || !hrefAttribute.includes('#') && !hrefAttribute.startsWith('.')) {\n return null;\n }\n\n // Just in case some CMS puts out a full URL with the anchor appended\n if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {\n hrefAttribute = `#${hrefAttribute.split('#')[1]}`;\n }\n selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null;\n }\n return selector ? selector.split(',').map(sel => parseSelector(sel)).join(',') : null;\n};\nconst SelectorEngine = {\n find(selector, element = document.documentElement) {\n return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n },\n findOne(selector, element = document.documentElement) {\n return Element.prototype.querySelector.call(element, selector);\n },\n children(element, selector) {\n return [].concat(...element.children).filter(child => child.matches(selector));\n },\n parents(element, selector) {\n const parents = [];\n let ancestor = element.parentNode.closest(selector);\n while (ancestor) {\n parents.push(ancestor);\n ancestor = ancestor.parentNode.closest(selector);\n }\n return parents;\n },\n prev(element, selector) {\n let previous = element.previousElementSibling;\n while (previous) {\n if (previous.matches(selector)) {\n return [previous];\n }\n previous = previous.previousElementSibling;\n }\n return [];\n },\n // TODO: this is now unused; remove later along with prev()\n next(element, selector) {\n let next = element.nextElementSibling;\n while (next) {\n if (next.matches(selector)) {\n return [next];\n }\n next = next.nextElementSibling;\n }\n return [];\n },\n focusableChildren(element) {\n const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable=\"true\"]'].map(selector => `${selector}:not([tabindex^=\"-\"])`).join(',');\n return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el));\n },\n getSelectorFromElement(element) {\n const selector = getSelector(element);\n if (selector) {\n return SelectorEngine.findOne(selector) ? selector : null;\n }\n return null;\n },\n getElementFromSelector(element) {\n const selector = getSelector(element);\n return selector ? SelectorEngine.findOne(selector) : null;\n },\n getMultipleElementsFromSelector(element) {\n const selector = getSelector(element);\n return selector ? SelectorEngine.find(selector) : [];\n }\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/component-functions.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst enableDismissTrigger = (component, method = 'hide') => {\n const clickEvent = `click.dismiss${component.EVENT_KEY}`;\n const name = component.NAME;\n EventHandler.on(document, clickEvent, `[data-bs-dismiss=\"${name}\"]`, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault();\n }\n if (isDisabled(this)) {\n return;\n }\n const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`);\n const instance = component.getOrCreateInstance(target);\n\n // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n instance[method]();\n });\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$f = 'alert';\nconst DATA_KEY$a = 'bs.alert';\nconst EVENT_KEY$b = `.${DATA_KEY$a}`;\nconst EVENT_CLOSE = `close${EVENT_KEY$b}`;\nconst EVENT_CLOSED = `closed${EVENT_KEY$b}`;\nconst CLASS_NAME_FADE$5 = 'fade';\nconst CLASS_NAME_SHOW$8 = 'show';\n\n/**\n * Class definition\n */\n\nclass Alert extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME$f;\n }\n\n // Public\n close() {\n const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE);\n if (closeEvent.defaultPrevented) {\n return;\n }\n this._element.classList.remove(CLASS_NAME_SHOW$8);\n const isAnimated = this._element.classList.contains(CLASS_NAME_FADE$5);\n this._queueCallback(() => this._destroyElement(), this._element, isAnimated);\n }\n\n // Private\n _destroyElement() {\n this._element.remove();\n EventHandler.trigger(this._element, EVENT_CLOSED);\n this.dispose();\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Alert.getOrCreateInstance(this);\n if (typeof config !== 'string') {\n return;\n }\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config](this);\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Alert, 'close');\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Alert);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$e = 'button';\nconst DATA_KEY$9 = 'bs.button';\nconst EVENT_KEY$a = `.${DATA_KEY$9}`;\nconst DATA_API_KEY$6 = '.data-api';\nconst CLASS_NAME_ACTIVE$3 = 'active';\nconst SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\nconst EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$6}`;\n\n/**\n * Class definition\n */\n\nclass Button extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME$e;\n }\n\n // Public\n toggle() {\n // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Button.getOrCreateInstance(this);\n if (config === 'toggle') {\n data[config]();\n }\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n event.preventDefault();\n const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n const data = Button.getOrCreateInstance(button);\n data.toggle();\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Button);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/swipe.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$d = 'swipe';\nconst EVENT_KEY$9 = '.bs.swipe';\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\nconst POINTER_TYPE_TOUCH = 'touch';\nconst POINTER_TYPE_PEN = 'pen';\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event';\nconst SWIPE_THRESHOLD = 40;\nconst Default$c = {\n endCallback: null,\n leftCallback: null,\n rightCallback: null\n};\nconst DefaultType$c = {\n endCallback: '(function|null)',\n leftCallback: '(function|null)',\n rightCallback: '(function|null)'\n};\n\n/**\n * Class definition\n */\n\nclass Swipe extends Config {\n constructor(element, config) {\n super();\n this._element = element;\n if (!element || !Swipe.isSupported()) {\n return;\n }\n this._config = this._getConfig(config);\n this._deltaX = 0;\n this._supportPointerEvents = Boolean(window.PointerEvent);\n this._initEvents();\n }\n\n // Getters\n static get Default() {\n return Default$c;\n }\n static get DefaultType() {\n return DefaultType$c;\n }\n static get NAME() {\n return NAME$d;\n }\n\n // Public\n dispose() {\n EventHandler.off(this._element, EVENT_KEY$9);\n }\n\n // Private\n _start(event) {\n if (!this._supportPointerEvents) {\n this._deltaX = event.touches[0].clientX;\n return;\n }\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX;\n }\n }\n _end(event) {\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX - this._deltaX;\n }\n this._handleSwipe();\n execute(this._config.endCallback);\n }\n _move(event) {\n this._deltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this._deltaX;\n }\n _handleSwipe() {\n const absDeltaX = Math.abs(this._deltaX);\n if (absDeltaX <= SWIPE_THRESHOLD) {\n return;\n }\n const direction = absDeltaX / this._deltaX;\n this._deltaX = 0;\n if (!direction) {\n return;\n }\n execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback);\n }\n _initEvents() {\n if (this._supportPointerEvents) {\n EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event));\n EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event));\n this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n } else {\n EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event));\n EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event));\n EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event));\n }\n }\n _eventIsPointerPenTouch(event) {\n return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH);\n }\n\n // Static\n static isSupported() {\n return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$c = 'carousel';\nconst DATA_KEY$8 = 'bs.carousel';\nconst EVENT_KEY$8 = `.${DATA_KEY$8}`;\nconst DATA_API_KEY$5 = '.data-api';\nconst ARROW_LEFT_KEY$1 = 'ArrowLeft';\nconst ARROW_RIGHT_KEY$1 = 'ArrowRight';\nconst TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\nconst ORDER_NEXT = 'next';\nconst ORDER_PREV = 'prev';\nconst DIRECTION_LEFT = 'left';\nconst DIRECTION_RIGHT = 'right';\nconst EVENT_SLIDE = `slide${EVENT_KEY$8}`;\nconst EVENT_SLID = `slid${EVENT_KEY$8}`;\nconst EVENT_KEYDOWN$1 = `keydown${EVENT_KEY$8}`;\nconst EVENT_MOUSEENTER$1 = `mouseenter${EVENT_KEY$8}`;\nconst EVENT_MOUSELEAVE$1 = `mouseleave${EVENT_KEY$8}`;\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY$8}`;\nconst EVENT_LOAD_DATA_API$3 = `load${EVENT_KEY$8}${DATA_API_KEY$5}`;\nconst EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\nconst CLASS_NAME_CAROUSEL = 'carousel';\nconst CLASS_NAME_ACTIVE$2 = 'active';\nconst CLASS_NAME_SLIDE = 'slide';\nconst CLASS_NAME_END = 'carousel-item-end';\nconst CLASS_NAME_START = 'carousel-item-start';\nconst CLASS_NAME_NEXT = 'carousel-item-next';\nconst CLASS_NAME_PREV = 'carousel-item-prev';\nconst SELECTOR_ACTIVE = '.active';\nconst SELECTOR_ITEM = '.carousel-item';\nconst SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM;\nconst SELECTOR_ITEM_IMG = '.carousel-item img';\nconst SELECTOR_INDICATORS = '.carousel-indicators';\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\nconst KEY_TO_DIRECTION = {\n [ARROW_LEFT_KEY$1]: DIRECTION_RIGHT,\n [ARROW_RIGHT_KEY$1]: DIRECTION_LEFT\n};\nconst Default$b = {\n interval: 5000,\n keyboard: true,\n pause: 'hover',\n ride: false,\n touch: true,\n wrap: true\n};\nconst DefaultType$b = {\n interval: '(number|boolean)',\n // TODO:v6 remove boolean support\n keyboard: 'boolean',\n pause: '(string|boolean)',\n ride: '(boolean|string)',\n touch: 'boolean',\n wrap: 'boolean'\n};\n\n/**\n * Class definition\n */\n\nclass Carousel extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._interval = null;\n this._activeElement = null;\n this._isSliding = false;\n this.touchTimeout = null;\n this._swipeHelper = null;\n this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n this._addEventListeners();\n if (this._config.ride === CLASS_NAME_CAROUSEL) {\n this.cycle();\n }\n }\n\n // Getters\n static get Default() {\n return Default$b;\n }\n static get DefaultType() {\n return DefaultType$b;\n }\n static get NAME() {\n return NAME$c;\n }\n\n // Public\n next() {\n this._slide(ORDER_NEXT);\n }\n nextWhenVisible() {\n // FIXME TODO use `document.visibilityState`\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden && isVisible(this._element)) {\n this.next();\n }\n }\n prev() {\n this._slide(ORDER_PREV);\n }\n pause() {\n if (this._isSliding) {\n triggerTransitionEnd(this._element);\n }\n this._clearInterval();\n }\n cycle() {\n this._clearInterval();\n this._updateInterval();\n this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval);\n }\n _maybeEnableCycle() {\n if (!this._config.ride) {\n return;\n }\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.cycle());\n return;\n }\n this.cycle();\n }\n to(index) {\n const items = this._getItems();\n if (index > items.length - 1 || index < 0) {\n return;\n }\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n return;\n }\n const activeIndex = this._getItemIndex(this._getActive());\n if (activeIndex === index) {\n return;\n }\n const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n this._slide(order, items[index]);\n }\n dispose() {\n if (this._swipeHelper) {\n this._swipeHelper.dispose();\n }\n super.dispose();\n }\n\n // Private\n _configAfterMerge(config) {\n config.defaultInterval = config.interval;\n return config;\n }\n _addEventListeners() {\n if (this._config.keyboard) {\n EventHandler.on(this._element, EVENT_KEYDOWN$1, event => this._keydown(event));\n }\n if (this._config.pause === 'hover') {\n EventHandler.on(this._element, EVENT_MOUSEENTER$1, () => this.pause());\n EventHandler.on(this._element, EVENT_MOUSELEAVE$1, () => this._maybeEnableCycle());\n }\n if (this._config.touch && Swipe.isSupported()) {\n this._addTouchEventListeners();\n }\n }\n _addTouchEventListeners() {\n for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {\n EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault());\n }\n const endCallBack = () => {\n if (this._config.pause !== 'hover') {\n return;\n }\n\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause();\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout);\n }\n this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n };\n const swipeConfig = {\n leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),\n rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),\n endCallback: endCallBack\n };\n this._swipeHelper = new Swipe(this._element, swipeConfig);\n }\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return;\n }\n const direction = KEY_TO_DIRECTION[event.key];\n if (direction) {\n event.preventDefault();\n this._slide(this._directionToOrder(direction));\n }\n }\n _getItemIndex(element) {\n return this._getItems().indexOf(element);\n }\n _setActiveIndicatorElement(index) {\n if (!this._indicatorsElement) {\n return;\n }\n const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement);\n activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n activeIndicator.removeAttribute('aria-current');\n const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to=\"${index}\"]`, this._indicatorsElement);\n if (newActiveIndicator) {\n newActiveIndicator.classList.add(CLASS_NAME_ACTIVE$2);\n newActiveIndicator.setAttribute('aria-current', 'true');\n }\n }\n _updateInterval() {\n const element = this._activeElement || this._getActive();\n if (!element) {\n return;\n }\n const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n this._config.interval = elementInterval || this._config.defaultInterval;\n }\n _slide(order, element = null) {\n if (this._isSliding) {\n return;\n }\n const activeElement = this._getActive();\n const isNext = order === ORDER_NEXT;\n const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap);\n if (nextElement === activeElement) {\n return;\n }\n const nextElementIndex = this._getItemIndex(nextElement);\n const triggerEvent = eventName => {\n return EventHandler.trigger(this._element, eventName, {\n relatedTarget: nextElement,\n direction: this._orderToDirection(order),\n from: this._getItemIndex(activeElement),\n to: nextElementIndex\n });\n };\n const slideEvent = triggerEvent(EVENT_SLIDE);\n if (slideEvent.defaultPrevented) {\n return;\n }\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n // TODO: change tests that use empty divs to avoid this check\n return;\n }\n const isCycling = Boolean(this._interval);\n this.pause();\n this._isSliding = true;\n this._setActiveIndicatorElement(nextElementIndex);\n this._activeElement = nextElement;\n const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n nextElement.classList.add(orderClassName);\n reflow(nextElement);\n activeElement.classList.add(directionalClassName);\n nextElement.classList.add(directionalClassName);\n const completeCallBack = () => {\n nextElement.classList.remove(directionalClassName, orderClassName);\n nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n this._isSliding = false;\n triggerEvent(EVENT_SLID);\n };\n this._queueCallback(completeCallBack, activeElement, this._isAnimated());\n if (isCycling) {\n this.cycle();\n }\n }\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_SLIDE);\n }\n _getActive() {\n return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n }\n _getItems() {\n return SelectorEngine.find(SELECTOR_ITEM, this._element);\n }\n _clearInterval() {\n if (this._interval) {\n clearInterval(this._interval);\n this._interval = null;\n }\n }\n _directionToOrder(direction) {\n if (isRTL()) {\n return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n }\n return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n }\n _orderToDirection(order) {\n if (isRTL()) {\n return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n }\n return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Carousel.getOrCreateInstance(this, config);\n if (typeof config === 'number') {\n data.to(config);\n return;\n }\n if (typeof config === 'string') {\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n }\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, function (event) {\n const target = SelectorEngine.getElementFromSelector(this);\n if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n return;\n }\n event.preventDefault();\n const carousel = Carousel.getOrCreateInstance(target);\n const slideIndex = this.getAttribute('data-bs-slide-to');\n if (slideIndex) {\n carousel.to(slideIndex);\n carousel._maybeEnableCycle();\n return;\n }\n if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\n carousel.next();\n carousel._maybeEnableCycle();\n return;\n }\n carousel.prev();\n carousel._maybeEnableCycle();\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$3, () => {\n const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n for (const carousel of carousels) {\n Carousel.getOrCreateInstance(carousel);\n }\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Carousel);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$b = 'collapse';\nconst DATA_KEY$7 = 'bs.collapse';\nconst EVENT_KEY$7 = `.${DATA_KEY$7}`;\nconst DATA_API_KEY$4 = '.data-api';\nconst EVENT_SHOW$6 = `show${EVENT_KEY$7}`;\nconst EVENT_SHOWN$6 = `shown${EVENT_KEY$7}`;\nconst EVENT_HIDE$6 = `hide${EVENT_KEY$7}`;\nconst EVENT_HIDDEN$6 = `hidden${EVENT_KEY$7}`;\nconst EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst CLASS_NAME_SHOW$7 = 'show';\nconst CLASS_NAME_COLLAPSE = 'collapse';\nconst CLASS_NAME_COLLAPSING = 'collapsing';\nconst CLASS_NAME_COLLAPSED = 'collapsed';\nconst CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`;\nconst CLASS_NAME_HORIZONTAL = 'collapse-horizontal';\nconst WIDTH = 'width';\nconst HEIGHT = 'height';\nconst SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing';\nconst SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\nconst Default$a = {\n parent: null,\n toggle: true\n};\nconst DefaultType$a = {\n parent: '(null|element)',\n toggle: 'boolean'\n};\n\n/**\n * Class definition\n */\n\nclass Collapse extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._isTransitioning = false;\n this._triggerArray = [];\n const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n for (const elem of toggleList) {\n const selector = SelectorEngine.getSelectorFromElement(elem);\n const filterElement = SelectorEngine.find(selector).filter(foundElement => foundElement === this._element);\n if (selector !== null && filterElement.length) {\n this._triggerArray.push(elem);\n }\n }\n this._initializeChildren();\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._triggerArray, this._isShown());\n }\n if (this._config.toggle) {\n this.toggle();\n }\n }\n\n // Getters\n static get Default() {\n return Default$a;\n }\n static get DefaultType() {\n return DefaultType$a;\n }\n static get NAME() {\n return NAME$b;\n }\n\n // Public\n toggle() {\n if (this._isShown()) {\n this.hide();\n } else {\n this.show();\n }\n }\n show() {\n if (this._isTransitioning || this._isShown()) {\n return;\n }\n let activeChildren = [];\n\n // find active children\n if (this._config.parent) {\n activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES).filter(element => element !== this._element).map(element => Collapse.getOrCreateInstance(element, {\n toggle: false\n }));\n }\n if (activeChildren.length && activeChildren[0]._isTransitioning) {\n return;\n }\n const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$6);\n if (startEvent.defaultPrevented) {\n return;\n }\n for (const activeInstance of activeChildren) {\n activeInstance.hide();\n }\n const dimension = this._getDimension();\n this._element.classList.remove(CLASS_NAME_COLLAPSE);\n this._element.classList.add(CLASS_NAME_COLLAPSING);\n this._element.style[dimension] = 0;\n this._addAriaAndCollapsedClass(this._triggerArray, true);\n this._isTransitioning = true;\n const complete = () => {\n this._isTransitioning = false;\n this._element.classList.remove(CLASS_NAME_COLLAPSING);\n this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);\n this._element.style[dimension] = '';\n EventHandler.trigger(this._element, EVENT_SHOWN$6);\n };\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n const scrollSize = `scroll${capitalizedDimension}`;\n this._queueCallback(complete, this._element, true);\n this._element.style[dimension] = `${this._element[scrollSize]}px`;\n }\n hide() {\n if (this._isTransitioning || !this._isShown()) {\n return;\n }\n const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$6);\n if (startEvent.defaultPrevented) {\n return;\n }\n const dimension = this._getDimension();\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n reflow(this._element);\n this._element.classList.add(CLASS_NAME_COLLAPSING);\n this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);\n for (const trigger of this._triggerArray) {\n const element = SelectorEngine.getElementFromSelector(trigger);\n if (element && !this._isShown(element)) {\n this._addAriaAndCollapsedClass([trigger], false);\n }\n }\n this._isTransitioning = true;\n const complete = () => {\n this._isTransitioning = false;\n this._element.classList.remove(CLASS_NAME_COLLAPSING);\n this._element.classList.add(CLASS_NAME_COLLAPSE);\n EventHandler.trigger(this._element, EVENT_HIDDEN$6);\n };\n this._element.style[dimension] = '';\n this._queueCallback(complete, this._element, true);\n }\n _isShown(element = this._element) {\n return element.classList.contains(CLASS_NAME_SHOW$7);\n }\n\n // Private\n _configAfterMerge(config) {\n config.toggle = Boolean(config.toggle); // Coerce string values\n config.parent = getElement(config.parent);\n return config;\n }\n _getDimension() {\n return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT;\n }\n _initializeChildren() {\n if (!this._config.parent) {\n return;\n }\n const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE$4);\n for (const element of children) {\n const selected = SelectorEngine.getElementFromSelector(element);\n if (selected) {\n this._addAriaAndCollapsedClass([element], this._isShown(selected));\n }\n }\n }\n _getFirstLevelChildren(selector) {\n const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent);\n // remove children if greater depth\n return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element));\n }\n _addAriaAndCollapsedClass(triggerArray, isOpen) {\n if (!triggerArray.length) {\n return;\n }\n for (const element of triggerArray) {\n element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen);\n element.setAttribute('aria-expanded', isOpen);\n }\n }\n\n // Static\n static jQueryInterface(config) {\n const _config = {};\n if (typeof config === 'string' && /show|hide/.test(config)) {\n _config.toggle = false;\n }\n return this.each(function () {\n const data = Collapse.getOrCreateInstance(this, _config);\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n }\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n // preventDefault only for elements (which change the URL) not inside the collapsible element\n if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n event.preventDefault();\n }\n for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {\n Collapse.getOrCreateInstance(element, {\n toggle: false\n }).toggle();\n }\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Collapse);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$a = 'dropdown';\nconst DATA_KEY$6 = 'bs.dropdown';\nconst EVENT_KEY$6 = `.${DATA_KEY$6}`;\nconst DATA_API_KEY$3 = '.data-api';\nconst ESCAPE_KEY$2 = 'Escape';\nconst TAB_KEY$1 = 'Tab';\nconst ARROW_UP_KEY$1 = 'ArrowUp';\nconst ARROW_DOWN_KEY$1 = 'ArrowDown';\nconst RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\nconst EVENT_HIDE$5 = `hide${EVENT_KEY$6}`;\nconst EVENT_HIDDEN$5 = `hidden${EVENT_KEY$6}`;\nconst EVENT_SHOW$5 = `show${EVENT_KEY$6}`;\nconst EVENT_SHOWN$5 = `shown${EVENT_KEY$6}`;\nconst EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst CLASS_NAME_SHOW$6 = 'show';\nconst CLASS_NAME_DROPUP = 'dropup';\nconst CLASS_NAME_DROPEND = 'dropend';\nconst CLASS_NAME_DROPSTART = 'dropstart';\nconst CLASS_NAME_DROPUP_CENTER = 'dropup-center';\nconst CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center';\nconst SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]:not(.disabled):not(:disabled)';\nconst SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE$3}.${CLASS_NAME_SHOW$6}`;\nconst SELECTOR_MENU = '.dropdown-menu';\nconst SELECTOR_NAVBAR = '.navbar';\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav';\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\nconst PLACEMENT_TOPCENTER = 'top';\nconst PLACEMENT_BOTTOMCENTER = 'bottom';\nconst Default$9 = {\n autoClose: true,\n boundary: 'clippingParents',\n display: 'dynamic',\n offset: [0, 2],\n popperConfig: null,\n reference: 'toggle'\n};\nconst DefaultType$9 = {\n autoClose: '(boolean|string)',\n boundary: '(string|element)',\n display: 'string',\n offset: '(array|string|function)',\n popperConfig: '(null|object|function)',\n reference: '(string|element|object)'\n};\n\n/**\n * Class definition\n */\n\nclass Dropdown extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._popper = null;\n this._parent = this._element.parentNode; // dropdown wrapper\n // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] || SelectorEngine.prev(this._element, SELECTOR_MENU)[0] || SelectorEngine.findOne(SELECTOR_MENU, this._parent);\n this._inNavbar = this._detectNavbar();\n }\n\n // Getters\n static get Default() {\n return Default$9;\n }\n static get DefaultType() {\n return DefaultType$9;\n }\n static get NAME() {\n return NAME$a;\n }\n\n // Public\n toggle() {\n return this._isShown() ? this.hide() : this.show();\n }\n show() {\n if (isDisabled(this._element) || this._isShown()) {\n return;\n }\n const relatedTarget = {\n relatedTarget: this._element\n };\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$5, relatedTarget);\n if (showEvent.defaultPrevented) {\n return;\n }\n this._createPopper();\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop);\n }\n }\n this._element.focus();\n this._element.setAttribute('aria-expanded', true);\n this._menu.classList.add(CLASS_NAME_SHOW$6);\n this._element.classList.add(CLASS_NAME_SHOW$6);\n EventHandler.trigger(this._element, EVENT_SHOWN$5, relatedTarget);\n }\n hide() {\n if (isDisabled(this._element) || !this._isShown()) {\n return;\n }\n const relatedTarget = {\n relatedTarget: this._element\n };\n this._completeHide(relatedTarget);\n }\n dispose() {\n if (this._popper) {\n this._popper.destroy();\n }\n super.dispose();\n }\n update() {\n this._inNavbar = this._detectNavbar();\n if (this._popper) {\n this._popper.update();\n }\n }\n\n // Private\n _completeHide(relatedTarget) {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$5, relatedTarget);\n if (hideEvent.defaultPrevented) {\n return;\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop);\n }\n }\n if (this._popper) {\n this._popper.destroy();\n }\n this._menu.classList.remove(CLASS_NAME_SHOW$6);\n this._element.classList.remove(CLASS_NAME_SHOW$6);\n this._element.setAttribute('aria-expanded', 'false');\n Manipulator.removeDataAttribute(this._menu, 'popper');\n EventHandler.trigger(this._element, EVENT_HIDDEN$5, relatedTarget);\n }\n _getConfig(config) {\n config = super._getConfig(config);\n if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n // Popper virtual elements require a getBoundingClientRect method\n throw new TypeError(`${NAME$a.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n }\n return config;\n }\n _createPopper() {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n }\n let referenceElement = this._element;\n if (this._config.reference === 'parent') {\n referenceElement = this._parent;\n } else if (isElement(this._config.reference)) {\n referenceElement = getElement(this._config.reference);\n } else if (typeof this._config.reference === 'object') {\n referenceElement = this._config.reference;\n }\n const popperConfig = this._getPopperConfig();\n this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig);\n }\n _isShown() {\n return this._menu.classList.contains(CLASS_NAME_SHOW$6);\n }\n _getPlacement() {\n const parentDropdown = this._parent;\n if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n return PLACEMENT_RIGHT;\n }\n if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n return PLACEMENT_LEFT;\n }\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {\n return PLACEMENT_TOPCENTER;\n }\n if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {\n return PLACEMENT_BOTTOMCENTER;\n }\n\n // We need to trim the value because custom properties can also include spaces\n const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n }\n return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n }\n _detectNavbar() {\n return this._element.closest(SELECTOR_NAVBAR) !== null;\n }\n _getOffset() {\n const {\n offset\n } = this._config;\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10));\n }\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element);\n }\n return offset;\n }\n _getPopperConfig() {\n const defaultBsPopperConfig = {\n placement: this._getPlacement(),\n modifiers: [{\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n }, {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n }]\n };\n\n // Disable Popper if we have a static display or Dropdown is in Navbar\n if (this._inNavbar || this._config.display === 'static') {\n Manipulator.setDataAttribute(this._menu, 'popper', 'static'); // TODO: v6 remove\n defaultBsPopperConfig.modifiers = [{\n name: 'applyStyles',\n enabled: false\n }];\n }\n return {\n ...defaultBsPopperConfig,\n ...execute(this._config.popperConfig, [defaultBsPopperConfig])\n };\n }\n _selectMenuItem({\n key,\n target\n }) {\n const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element));\n if (!items.length) {\n return;\n }\n\n // if target isn't included in items (e.g. when expanding the dropdown)\n // allow cycling to get the last item in case key equals ARROW_UP_KEY\n getNextActiveElement(items, target, key === ARROW_DOWN_KEY$1, !items.includes(target)).focus();\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Dropdown.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n });\n }\n static clearMenus(event) {\n if (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY$1) {\n return;\n }\n const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN);\n for (const toggle of openToggles) {\n const context = Dropdown.getInstance(toggle);\n if (!context || context._config.autoClose === false) {\n continue;\n }\n const composedPath = event.composedPath();\n const isMenuTarget = composedPath.includes(context._menu);\n if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n continue;\n }\n\n // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY$1 || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n continue;\n }\n const relatedTarget = {\n relatedTarget: context._element\n };\n if (event.type === 'click') {\n relatedTarget.clickEvent = event;\n }\n context._completeHide(relatedTarget);\n }\n }\n static dataApiKeydownHandler(event) {\n // If not an UP | DOWN | ESCAPE key => not a dropdown command\n // If input/textarea && if key is other than ESCAPE => not a dropdown command\n\n const isInput = /input|textarea/i.test(event.target.tagName);\n const isEscapeEvent = event.key === ESCAPE_KEY$2;\n const isUpOrDownEvent = [ARROW_UP_KEY$1, ARROW_DOWN_KEY$1].includes(event.key);\n if (!isUpOrDownEvent && !isEscapeEvent) {\n return;\n }\n if (isInput && !isEscapeEvent) {\n return;\n }\n event.preventDefault();\n\n // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.next(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.findOne(SELECTOR_DATA_TOGGLE$3, event.delegateTarget.parentNode);\n const instance = Dropdown.getOrCreateInstance(getToggleButton);\n if (isUpOrDownEvent) {\n event.stopPropagation();\n instance.show();\n instance._selectMenuItem(event);\n return;\n }\n if (instance._isShown()) {\n // else is escape and we check if it is shown\n event.stopPropagation();\n instance.hide();\n getToggleButton.focus();\n }\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n event.preventDefault();\n Dropdown.getOrCreateInstance(this).toggle();\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Dropdown);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$9 = 'backdrop';\nconst CLASS_NAME_FADE$4 = 'fade';\nconst CLASS_NAME_SHOW$5 = 'show';\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME$9}`;\nconst Default$8 = {\n className: 'modal-backdrop',\n clickCallback: null,\n isAnimated: false,\n isVisible: true,\n // if false, we use the backdrop helper without adding any element to the dom\n rootElement: 'body' // give the choice to place backdrop under different elements\n};\nconst DefaultType$8 = {\n className: 'string',\n clickCallback: '(function|null)',\n isAnimated: 'boolean',\n isVisible: 'boolean',\n rootElement: '(element|string)'\n};\n\n/**\n * Class definition\n */\n\nclass Backdrop extends Config {\n constructor(config) {\n super();\n this._config = this._getConfig(config);\n this._isAppended = false;\n this._element = null;\n }\n\n // Getters\n static get Default() {\n return Default$8;\n }\n static get DefaultType() {\n return DefaultType$8;\n }\n static get NAME() {\n return NAME$9;\n }\n\n // Public\n show(callback) {\n if (!this._config.isVisible) {\n execute(callback);\n return;\n }\n this._append();\n const element = this._getElement();\n if (this._config.isAnimated) {\n reflow(element);\n }\n element.classList.add(CLASS_NAME_SHOW$5);\n this._emulateAnimation(() => {\n execute(callback);\n });\n }\n hide(callback) {\n if (!this._config.isVisible) {\n execute(callback);\n return;\n }\n this._getElement().classList.remove(CLASS_NAME_SHOW$5);\n this._emulateAnimation(() => {\n this.dispose();\n execute(callback);\n });\n }\n dispose() {\n if (!this._isAppended) {\n return;\n }\n EventHandler.off(this._element, EVENT_MOUSEDOWN);\n this._element.remove();\n this._isAppended = false;\n }\n\n // Private\n _getElement() {\n if (!this._element) {\n const backdrop = document.createElement('div');\n backdrop.className = this._config.className;\n if (this._config.isAnimated) {\n backdrop.classList.add(CLASS_NAME_FADE$4);\n }\n this._element = backdrop;\n }\n return this._element;\n }\n _configAfterMerge(config) {\n // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n config.rootElement = getElement(config.rootElement);\n return config;\n }\n _append() {\n if (this._isAppended) {\n return;\n }\n const element = this._getElement();\n this._config.rootElement.append(element);\n EventHandler.on(element, EVENT_MOUSEDOWN, () => {\n execute(this._config.clickCallback);\n });\n this._isAppended = true;\n }\n _emulateAnimation(callback) {\n executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/focustrap.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$8 = 'focustrap';\nconst DATA_KEY$5 = 'bs.focustrap';\nconst EVENT_KEY$5 = `.${DATA_KEY$5}`;\nconst EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$5}`;\nconst EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY$5}`;\nconst TAB_KEY = 'Tab';\nconst TAB_NAV_FORWARD = 'forward';\nconst TAB_NAV_BACKWARD = 'backward';\nconst Default$7 = {\n autofocus: true,\n trapElement: null // The element to trap focus inside of\n};\nconst DefaultType$7 = {\n autofocus: 'boolean',\n trapElement: 'element'\n};\n\n/**\n * Class definition\n */\n\nclass FocusTrap extends Config {\n constructor(config) {\n super();\n this._config = this._getConfig(config);\n this._isActive = false;\n this._lastTabNavDirection = null;\n }\n\n // Getters\n static get Default() {\n return Default$7;\n }\n static get DefaultType() {\n return DefaultType$7;\n }\n static get NAME() {\n return NAME$8;\n }\n\n // Public\n activate() {\n if (this._isActive) {\n return;\n }\n if (this._config.autofocus) {\n this._config.trapElement.focus();\n }\n EventHandler.off(document, EVENT_KEY$5); // guard against infinite focus loop\n EventHandler.on(document, EVENT_FOCUSIN$2, event => this._handleFocusin(event));\n EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event));\n this._isActive = true;\n }\n deactivate() {\n if (!this._isActive) {\n return;\n }\n this._isActive = false;\n EventHandler.off(document, EVENT_KEY$5);\n }\n\n // Private\n _handleFocusin(event) {\n const {\n trapElement\n } = this._config;\n if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {\n return;\n }\n const elements = SelectorEngine.focusableChildren(trapElement);\n if (elements.length === 0) {\n trapElement.focus();\n } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n elements[elements.length - 1].focus();\n } else {\n elements[0].focus();\n }\n }\n _handleKeydown(event) {\n if (event.key !== TAB_KEY) {\n return;\n }\n this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD;\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\nconst SELECTOR_STICKY_CONTENT = '.sticky-top';\nconst PROPERTY_PADDING = 'padding-right';\nconst PROPERTY_MARGIN = 'margin-right';\n\n/**\n * Class definition\n */\n\nclass ScrollBarHelper {\n constructor() {\n this._element = document.body;\n }\n\n // Public\n getWidth() {\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n const documentWidth = document.documentElement.clientWidth;\n return Math.abs(window.innerWidth - documentWidth);\n }\n hide() {\n const width = this.getWidth();\n this._disableOverFlow();\n // give padding to element to balance the hidden scrollbar width\n this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width);\n // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width);\n this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width);\n }\n reset() {\n this._resetElementAttributes(this._element, 'overflow');\n this._resetElementAttributes(this._element, PROPERTY_PADDING);\n this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING);\n this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN);\n }\n isOverflowing() {\n return this.getWidth() > 0;\n }\n\n // Private\n _disableOverFlow() {\n this._saveInitialAttribute(this._element, 'overflow');\n this._element.style.overflow = 'hidden';\n }\n _setElementAttributes(selector, styleProperty, callback) {\n const scrollbarWidth = this.getWidth();\n const manipulationCallBack = element => {\n if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n return;\n }\n this._saveInitialAttribute(element, styleProperty);\n const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty);\n element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`);\n };\n this._applyManipulationCallback(selector, manipulationCallBack);\n }\n _saveInitialAttribute(element, styleProperty) {\n const actualValue = element.style.getPropertyValue(styleProperty);\n if (actualValue) {\n Manipulator.setDataAttribute(element, styleProperty, actualValue);\n }\n }\n _resetElementAttributes(selector, styleProperty) {\n const manipulationCallBack = element => {\n const value = Manipulator.getDataAttribute(element, styleProperty);\n // We only want to remove the property if the value is `null`; the value can also be zero\n if (value === null) {\n element.style.removeProperty(styleProperty);\n return;\n }\n Manipulator.removeDataAttribute(element, styleProperty);\n element.style.setProperty(styleProperty, value);\n };\n this._applyManipulationCallback(selector, manipulationCallBack);\n }\n _applyManipulationCallback(selector, callBack) {\n if (isElement(selector)) {\n callBack(selector);\n return;\n }\n for (const sel of SelectorEngine.find(selector, this._element)) {\n callBack(sel);\n }\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$7 = 'modal';\nconst DATA_KEY$4 = 'bs.modal';\nconst EVENT_KEY$4 = `.${DATA_KEY$4}`;\nconst DATA_API_KEY$2 = '.data-api';\nconst ESCAPE_KEY$1 = 'Escape';\nconst EVENT_HIDE$4 = `hide${EVENT_KEY$4}`;\nconst EVENT_HIDE_PREVENTED$1 = `hidePrevented${EVENT_KEY$4}`;\nconst EVENT_HIDDEN$4 = `hidden${EVENT_KEY$4}`;\nconst EVENT_SHOW$4 = `show${EVENT_KEY$4}`;\nconst EVENT_SHOWN$4 = `shown${EVENT_KEY$4}`;\nconst EVENT_RESIZE$1 = `resize${EVENT_KEY$4}`;\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY$4}`;\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$4}`;\nconst EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$4}`;\nconst EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$4}${DATA_API_KEY$2}`;\nconst CLASS_NAME_OPEN = 'modal-open';\nconst CLASS_NAME_FADE$3 = 'fade';\nconst CLASS_NAME_SHOW$4 = 'show';\nconst CLASS_NAME_STATIC = 'modal-static';\nconst OPEN_SELECTOR$1 = '.modal.show';\nconst SELECTOR_DIALOG = '.modal-dialog';\nconst SELECTOR_MODAL_BODY = '.modal-body';\nconst SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\nconst Default$6 = {\n backdrop: true,\n focus: true,\n keyboard: true\n};\nconst DefaultType$6 = {\n backdrop: '(boolean|string)',\n focus: 'boolean',\n keyboard: 'boolean'\n};\n\n/**\n * Class definition\n */\n\nclass Modal extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n this._backdrop = this._initializeBackDrop();\n this._focustrap = this._initializeFocusTrap();\n this._isShown = false;\n this._isTransitioning = false;\n this._scrollBar = new ScrollBarHelper();\n this._addEventListeners();\n }\n\n // Getters\n static get Default() {\n return Default$6;\n }\n static get DefaultType() {\n return DefaultType$6;\n }\n static get NAME() {\n return NAME$7;\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget);\n }\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return;\n }\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, {\n relatedTarget\n });\n if (showEvent.defaultPrevented) {\n return;\n }\n this._isShown = true;\n this._isTransitioning = true;\n this._scrollBar.hide();\n document.body.classList.add(CLASS_NAME_OPEN);\n this._adjustDialog();\n this._backdrop.show(() => this._showElement(relatedTarget));\n }\n hide() {\n if (!this._isShown || this._isTransitioning) {\n return;\n }\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4);\n if (hideEvent.defaultPrevented) {\n return;\n }\n this._isShown = false;\n this._isTransitioning = true;\n this._focustrap.deactivate();\n this._element.classList.remove(CLASS_NAME_SHOW$4);\n this._queueCallback(() => this._hideModal(), this._element, this._isAnimated());\n }\n dispose() {\n EventHandler.off(window, EVENT_KEY$4);\n EventHandler.off(this._dialog, EVENT_KEY$4);\n this._backdrop.dispose();\n this._focustrap.deactivate();\n super.dispose();\n }\n handleUpdate() {\n this._adjustDialog();\n }\n\n // Private\n _initializeBackDrop() {\n return new Backdrop({\n isVisible: Boolean(this._config.backdrop),\n // 'static' option will be translated to true, and booleans will keep their value,\n isAnimated: this._isAnimated()\n });\n }\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n });\n }\n _showElement(relatedTarget) {\n // try to append dynamic modal\n if (!document.body.contains(this._element)) {\n document.body.append(this._element);\n }\n this._element.style.display = 'block';\n this._element.removeAttribute('aria-hidden');\n this._element.setAttribute('aria-modal', true);\n this._element.setAttribute('role', 'dialog');\n this._element.scrollTop = 0;\n const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n if (modalBody) {\n modalBody.scrollTop = 0;\n }\n reflow(this._element);\n this._element.classList.add(CLASS_NAME_SHOW$4);\n const transitionComplete = () => {\n if (this._config.focus) {\n this._focustrap.activate();\n }\n this._isTransitioning = false;\n EventHandler.trigger(this._element, EVENT_SHOWN$4, {\n relatedTarget\n });\n };\n this._queueCallback(transitionComplete, this._dialog, this._isAnimated());\n }\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n if (event.key !== ESCAPE_KEY$1) {\n return;\n }\n if (this._config.keyboard) {\n this.hide();\n return;\n }\n this._triggerBackdropTransition();\n });\n EventHandler.on(window, EVENT_RESIZE$1, () => {\n if (this._isShown && !this._isTransitioning) {\n this._adjustDialog();\n }\n });\n EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {\n // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks\n EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {\n if (this._element !== event.target || this._element !== event2.target) {\n return;\n }\n if (this._config.backdrop === 'static') {\n this._triggerBackdropTransition();\n return;\n }\n if (this._config.backdrop) {\n this.hide();\n }\n });\n });\n }\n _hideModal() {\n this._element.style.display = 'none';\n this._element.setAttribute('aria-hidden', true);\n this._element.removeAttribute('aria-modal');\n this._element.removeAttribute('role');\n this._isTransitioning = false;\n this._backdrop.hide(() => {\n document.body.classList.remove(CLASS_NAME_OPEN);\n this._resetAdjustments();\n this._scrollBar.reset();\n EventHandler.trigger(this._element, EVENT_HIDDEN$4);\n });\n }\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_FADE$3);\n }\n _triggerBackdropTransition() {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED$1);\n if (hideEvent.defaultPrevented) {\n return;\n }\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n const initialOverflowY = this._element.style.overflowY;\n // return if the following background transition hasn't yet completed\n if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {\n return;\n }\n if (!isModalOverflowing) {\n this._element.style.overflowY = 'hidden';\n }\n this._element.classList.add(CLASS_NAME_STATIC);\n this._queueCallback(() => {\n this._element.classList.remove(CLASS_NAME_STATIC);\n this._queueCallback(() => {\n this._element.style.overflowY = initialOverflowY;\n }, this._dialog);\n }, this._dialog);\n this._element.focus();\n }\n\n /**\n * The following methods are used to handle overflowing modals\n */\n\n _adjustDialog() {\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n const scrollbarWidth = this._scrollBar.getWidth();\n const isBodyOverflowing = scrollbarWidth > 0;\n if (isBodyOverflowing && !isModalOverflowing) {\n const property = isRTL() ? 'paddingLeft' : 'paddingRight';\n this._element.style[property] = `${scrollbarWidth}px`;\n }\n if (!isBodyOverflowing && isModalOverflowing) {\n const property = isRTL() ? 'paddingRight' : 'paddingLeft';\n this._element.style[property] = `${scrollbarWidth}px`;\n }\n }\n _resetAdjustments() {\n this._element.style.paddingLeft = '';\n this._element.style.paddingRight = '';\n }\n\n // Static\n static jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n const data = Modal.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config](relatedTarget);\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n const target = SelectorEngine.getElementFromSelector(this);\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault();\n }\n EventHandler.one(target, EVENT_SHOW$4, showEvent => {\n if (showEvent.defaultPrevented) {\n // only register focus restorer if modal will actually get shown\n return;\n }\n EventHandler.one(target, EVENT_HIDDEN$4, () => {\n if (isVisible(this)) {\n this.focus();\n }\n });\n });\n\n // avoid conflict when clicking modal toggler while another one is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR$1);\n if (alreadyOpen) {\n Modal.getInstance(alreadyOpen).hide();\n }\n const data = Modal.getOrCreateInstance(target);\n data.toggle(this);\n});\nenableDismissTrigger(Modal);\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Modal);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$6 = 'offcanvas';\nconst DATA_KEY$3 = 'bs.offcanvas';\nconst EVENT_KEY$3 = `.${DATA_KEY$3}`;\nconst DATA_API_KEY$1 = '.data-api';\nconst EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$3}${DATA_API_KEY$1}`;\nconst ESCAPE_KEY = 'Escape';\nconst CLASS_NAME_SHOW$3 = 'show';\nconst CLASS_NAME_SHOWING$1 = 'showing';\nconst CLASS_NAME_HIDING = 'hiding';\nconst CLASS_NAME_BACKDROP = 'offcanvas-backdrop';\nconst OPEN_SELECTOR = '.offcanvas.show';\nconst EVENT_SHOW$3 = `show${EVENT_KEY$3}`;\nconst EVENT_SHOWN$3 = `shown${EVENT_KEY$3}`;\nconst EVENT_HIDE$3 = `hide${EVENT_KEY$3}`;\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$3}`;\nconst EVENT_HIDDEN$3 = `hidden${EVENT_KEY$3}`;\nconst EVENT_RESIZE = `resize${EVENT_KEY$3}`;\nconst EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$3}${DATA_API_KEY$1}`;\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$3}`;\nconst SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\nconst Default$5 = {\n backdrop: true,\n keyboard: true,\n scroll: false\n};\nconst DefaultType$5 = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n scroll: 'boolean'\n};\n\n/**\n * Class definition\n */\n\nclass Offcanvas extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._isShown = false;\n this._backdrop = this._initializeBackDrop();\n this._focustrap = this._initializeFocusTrap();\n this._addEventListeners();\n }\n\n // Getters\n static get Default() {\n return Default$5;\n }\n static get DefaultType() {\n return DefaultType$5;\n }\n static get NAME() {\n return NAME$6;\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget);\n }\n show(relatedTarget) {\n if (this._isShown) {\n return;\n }\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n relatedTarget\n });\n if (showEvent.defaultPrevented) {\n return;\n }\n this._isShown = true;\n this._backdrop.show();\n if (!this._config.scroll) {\n new ScrollBarHelper().hide();\n }\n this._element.setAttribute('aria-modal', true);\n this._element.setAttribute('role', 'dialog');\n this._element.classList.add(CLASS_NAME_SHOWING$1);\n const completeCallBack = () => {\n if (!this._config.scroll || this._config.backdrop) {\n this._focustrap.activate();\n }\n this._element.classList.add(CLASS_NAME_SHOW$3);\n this._element.classList.remove(CLASS_NAME_SHOWING$1);\n EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n relatedTarget\n });\n };\n this._queueCallback(completeCallBack, this._element, true);\n }\n hide() {\n if (!this._isShown) {\n return;\n }\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n if (hideEvent.defaultPrevented) {\n return;\n }\n this._focustrap.deactivate();\n this._element.blur();\n this._isShown = false;\n this._element.classList.add(CLASS_NAME_HIDING);\n this._backdrop.hide();\n const completeCallback = () => {\n this._element.classList.remove(CLASS_NAME_SHOW$3, CLASS_NAME_HIDING);\n this._element.removeAttribute('aria-modal');\n this._element.removeAttribute('role');\n if (!this._config.scroll) {\n new ScrollBarHelper().reset();\n }\n EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n };\n this._queueCallback(completeCallback, this._element, true);\n }\n dispose() {\n this._backdrop.dispose();\n this._focustrap.deactivate();\n super.dispose();\n }\n\n // Private\n _initializeBackDrop() {\n const clickCallback = () => {\n if (this._config.backdrop === 'static') {\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n return;\n }\n this.hide();\n };\n\n // 'static' option will be translated to true, and booleans will keep their value\n const isVisible = Boolean(this._config.backdrop);\n return new Backdrop({\n className: CLASS_NAME_BACKDROP,\n isVisible,\n isAnimated: true,\n rootElement: this._element.parentNode,\n clickCallback: isVisible ? clickCallback : null\n });\n }\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n });\n }\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return;\n }\n if (this._config.keyboard) {\n this.hide();\n return;\n }\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n });\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Offcanvas.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config](this);\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n const target = SelectorEngine.getElementFromSelector(this);\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault();\n }\n if (isDisabled(this)) {\n return;\n }\n EventHandler.one(target, EVENT_HIDDEN$3, () => {\n // focus on trigger when it is closed\n if (isVisible(this)) {\n this.focus();\n }\n });\n\n // avoid conflict when clicking a toggler of an offcanvas, while another is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n if (alreadyOpen && alreadyOpen !== target) {\n Offcanvas.getInstance(alreadyOpen).hide();\n }\n const data = Offcanvas.getOrCreateInstance(target);\n data.toggle(this);\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {\n Offcanvas.getOrCreateInstance(selector).show();\n }\n});\nEventHandler.on(window, EVENT_RESIZE, () => {\n for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {\n if (getComputedStyle(element).position !== 'fixed') {\n Offcanvas.getOrCreateInstance(element).hide();\n }\n }\n});\nenableDismissTrigger(Offcanvas);\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Offcanvas);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n// js-docs-start allow-list\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\nconst DefaultAllowlist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n dd: [],\n div: [],\n dl: [],\n dt: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n};\n// js-docs-end allow-list\n\nconst uriAttributes = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\n\n/**\n * A pattern that recognizes URLs that are safe wrt. XSS in URL navigation\n * contexts.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/15.2.8/packages/core/src/sanitization/url_sanitizer.ts#L38\n */\n// eslint-disable-next-line unicorn/better-regex\nconst SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i;\nconst allowedAttribute = (attribute, allowedAttributeList) => {\n const attributeName = attribute.nodeName.toLowerCase();\n if (allowedAttributeList.includes(attributeName)) {\n if (uriAttributes.has(attributeName)) {\n return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue));\n }\n return true;\n }\n\n // Check if a regular expression validates the attribute.\n return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp).some(regex => regex.test(attributeName));\n};\nfunction sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {\n if (!unsafeHtml.length) {\n return unsafeHtml;\n }\n if (sanitizeFunction && typeof sanitizeFunction === 'function') {\n return sanitizeFunction(unsafeHtml);\n }\n const domParser = new window.DOMParser();\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n for (const element of elements) {\n const elementName = element.nodeName.toLowerCase();\n if (!Object.keys(allowList).includes(elementName)) {\n element.remove();\n continue;\n }\n const attributeList = [].concat(...element.attributes);\n const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []);\n for (const attribute of attributeList) {\n if (!allowedAttribute(attribute, allowedAttributes)) {\n element.removeAttribute(attribute.nodeName);\n }\n }\n }\n return createdDocument.body.innerHTML;\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/template-factory.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$5 = 'TemplateFactory';\nconst Default$4 = {\n allowList: DefaultAllowlist,\n content: {},\n // { selector : text , selector2 : text2 , }\n extraClass: '',\n html: false,\n sanitize: true,\n sanitizeFn: null,\n template: '
    '\n};\nconst DefaultType$4 = {\n allowList: 'object',\n content: 'object',\n extraClass: '(string|function)',\n html: 'boolean',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n template: 'string'\n};\nconst DefaultContentType = {\n entry: '(string|element|function|null)',\n selector: '(string|element)'\n};\n\n/**\n * Class definition\n */\n\nclass TemplateFactory extends Config {\n constructor(config) {\n super();\n this._config = this._getConfig(config);\n }\n\n // Getters\n static get Default() {\n return Default$4;\n }\n static get DefaultType() {\n return DefaultType$4;\n }\n static get NAME() {\n return NAME$5;\n }\n\n // Public\n getContent() {\n return Object.values(this._config.content).map(config => this._resolvePossibleFunction(config)).filter(Boolean);\n }\n hasContent() {\n return this.getContent().length > 0;\n }\n changeContent(content) {\n this._checkContent(content);\n this._config.content = {\n ...this._config.content,\n ...content\n };\n return this;\n }\n toHtml() {\n const templateWrapper = document.createElement('div');\n templateWrapper.innerHTML = this._maybeSanitize(this._config.template);\n for (const [selector, text] of Object.entries(this._config.content)) {\n this._setContent(templateWrapper, text, selector);\n }\n const template = templateWrapper.children[0];\n const extraClass = this._resolvePossibleFunction(this._config.extraClass);\n if (extraClass) {\n template.classList.add(...extraClass.split(' '));\n }\n return template;\n }\n\n // Private\n _typeCheckConfig(config) {\n super._typeCheckConfig(config);\n this._checkContent(config.content);\n }\n _checkContent(arg) {\n for (const [selector, content] of Object.entries(arg)) {\n super._typeCheckConfig({\n selector,\n entry: content\n }, DefaultContentType);\n }\n }\n _setContent(template, content, selector) {\n const templateElement = SelectorEngine.findOne(selector, template);\n if (!templateElement) {\n return;\n }\n content = this._resolvePossibleFunction(content);\n if (!content) {\n templateElement.remove();\n return;\n }\n if (isElement(content)) {\n this._putElementInTemplate(getElement(content), templateElement);\n return;\n }\n if (this._config.html) {\n templateElement.innerHTML = this._maybeSanitize(content);\n return;\n }\n templateElement.textContent = content;\n }\n _maybeSanitize(arg) {\n return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg;\n }\n _resolvePossibleFunction(arg) {\n return execute(arg, [this]);\n }\n _putElementInTemplate(element, templateElement) {\n if (this._config.html) {\n templateElement.innerHTML = '';\n templateElement.append(element);\n return;\n }\n templateElement.textContent = element.textContent;\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$4 = 'tooltip';\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\nconst CLASS_NAME_FADE$2 = 'fade';\nconst CLASS_NAME_MODAL = 'modal';\nconst CLASS_NAME_SHOW$2 = 'show';\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\nconst SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`;\nconst EVENT_MODAL_HIDE = 'hide.bs.modal';\nconst TRIGGER_HOVER = 'hover';\nconst TRIGGER_FOCUS = 'focus';\nconst TRIGGER_CLICK = 'click';\nconst TRIGGER_MANUAL = 'manual';\nconst EVENT_HIDE$2 = 'hide';\nconst EVENT_HIDDEN$2 = 'hidden';\nconst EVENT_SHOW$2 = 'show';\nconst EVENT_SHOWN$2 = 'shown';\nconst EVENT_INSERTED = 'inserted';\nconst EVENT_CLICK$1 = 'click';\nconst EVENT_FOCUSIN$1 = 'focusin';\nconst EVENT_FOCUSOUT$1 = 'focusout';\nconst EVENT_MOUSEENTER = 'mouseenter';\nconst EVENT_MOUSELEAVE = 'mouseleave';\nconst AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: isRTL() ? 'left' : 'right',\n BOTTOM: 'bottom',\n LEFT: isRTL() ? 'right' : 'left'\n};\nconst Default$3 = {\n allowList: DefaultAllowlist,\n animation: true,\n boundary: 'clippingParents',\n container: false,\n customClass: '',\n delay: 0,\n fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n html: false,\n offset: [0, 6],\n placement: 'top',\n popperConfig: null,\n sanitize: true,\n sanitizeFn: null,\n selector: false,\n template: '
    ' + '
    ' + '
    ' + '
    ',\n title: '',\n trigger: 'hover focus'\n};\nconst DefaultType$3 = {\n allowList: 'object',\n animation: 'boolean',\n boundary: '(string|element)',\n container: '(string|element|boolean)',\n customClass: '(string|function)',\n delay: '(number|object)',\n fallbackPlacements: 'array',\n html: 'boolean',\n offset: '(array|string|function)',\n placement: '(string|function)',\n popperConfig: '(null|object|function)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n selector: '(string|boolean)',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string'\n};\n\n/**\n * Class definition\n */\n\nclass Tooltip extends BaseComponent {\n constructor(element, config) {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n }\n super(element, config);\n\n // Private\n this._isEnabled = true;\n this._timeout = 0;\n this._isHovered = null;\n this._activeTrigger = {};\n this._popper = null;\n this._templateFactory = null;\n this._newContent = null;\n\n // Protected\n this.tip = null;\n this._setListeners();\n if (!this._config.selector) {\n this._fixTitle();\n }\n }\n\n // Getters\n static get Default() {\n return Default$3;\n }\n static get DefaultType() {\n return DefaultType$3;\n }\n static get NAME() {\n return NAME$4;\n }\n\n // Public\n enable() {\n this._isEnabled = true;\n }\n disable() {\n this._isEnabled = false;\n }\n toggleEnabled() {\n this._isEnabled = !this._isEnabled;\n }\n toggle() {\n if (!this._isEnabled) {\n return;\n }\n this._activeTrigger.click = !this._activeTrigger.click;\n if (this._isShown()) {\n this._leave();\n return;\n }\n this._enter();\n }\n dispose() {\n clearTimeout(this._timeout);\n EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);\n if (this._element.getAttribute('data-bs-original-title')) {\n this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'));\n }\n this._disposePopper();\n super.dispose();\n }\n show() {\n if (this._element.style.display === 'none') {\n throw new Error('Please use show on visible elements');\n }\n if (!(this._isWithContent() && this._isEnabled)) {\n return;\n }\n const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW$2));\n const shadowRoot = findShadowRoot(this._element);\n const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element);\n if (showEvent.defaultPrevented || !isInTheDom) {\n return;\n }\n\n // TODO: v6 remove this or make it optional\n this._disposePopper();\n const tip = this._getTipElement();\n this._element.setAttribute('aria-describedby', tip.getAttribute('id'));\n const {\n container\n } = this._config;\n if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n container.append(tip);\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED));\n }\n this._popper = this._createPopper(tip);\n tip.classList.add(CLASS_NAME_SHOW$2);\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop);\n }\n }\n const complete = () => {\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN$2));\n if (this._isHovered === false) {\n this._leave();\n }\n this._isHovered = false;\n };\n this._queueCallback(complete, this.tip, this._isAnimated());\n }\n hide() {\n if (!this._isShown()) {\n return;\n }\n const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE$2));\n if (hideEvent.defaultPrevented) {\n return;\n }\n const tip = this._getTipElement();\n tip.classList.remove(CLASS_NAME_SHOW$2);\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop);\n }\n }\n this._activeTrigger[TRIGGER_CLICK] = false;\n this._activeTrigger[TRIGGER_FOCUS] = false;\n this._activeTrigger[TRIGGER_HOVER] = false;\n this._isHovered = null; // it is a trick to support manual triggering\n\n const complete = () => {\n if (this._isWithActiveTrigger()) {\n return;\n }\n if (!this._isHovered) {\n this._disposePopper();\n }\n this._element.removeAttribute('aria-describedby');\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN$2));\n };\n this._queueCallback(complete, this.tip, this._isAnimated());\n }\n update() {\n if (this._popper) {\n this._popper.update();\n }\n }\n\n // Protected\n _isWithContent() {\n return Boolean(this._getTitle());\n }\n _getTipElement() {\n if (!this.tip) {\n this.tip = this._createTipElement(this._newContent || this._getContentForTemplate());\n }\n return this.tip;\n }\n _createTipElement(content) {\n const tip = this._getTemplateFactory(content).toHtml();\n\n // TODO: remove this check in v6\n if (!tip) {\n return null;\n }\n tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n // TODO: v6 the following can be achieved with CSS only\n tip.classList.add(`bs-${this.constructor.NAME}-auto`);\n const tipId = getUID(this.constructor.NAME).toString();\n tip.setAttribute('id', tipId);\n if (this._isAnimated()) {\n tip.classList.add(CLASS_NAME_FADE$2);\n }\n return tip;\n }\n setContent(content) {\n this._newContent = content;\n if (this._isShown()) {\n this._disposePopper();\n this.show();\n }\n }\n _getTemplateFactory(content) {\n if (this._templateFactory) {\n this._templateFactory.changeContent(content);\n } else {\n this._templateFactory = new TemplateFactory({\n ...this._config,\n // the `content` var has to be after `this._config`\n // to override config.content in case of popover\n content,\n extraClass: this._resolvePossibleFunction(this._config.customClass)\n });\n }\n return this._templateFactory;\n }\n _getContentForTemplate() {\n return {\n [SELECTOR_TOOLTIP_INNER]: this._getTitle()\n };\n }\n _getTitle() {\n return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title');\n }\n\n // Private\n _initializeOnDelegatedTarget(event) {\n return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig());\n }\n _isAnimated() {\n return this._config.animation || this.tip && this.tip.classList.contains(CLASS_NAME_FADE$2);\n }\n _isShown() {\n return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW$2);\n }\n _createPopper(tip) {\n const placement = execute(this._config.placement, [this, tip, this._element]);\n const attachment = AttachmentMap[placement.toUpperCase()];\n return Popper.createPopper(this._element, tip, this._getPopperConfig(attachment));\n }\n _getOffset() {\n const {\n offset\n } = this._config;\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10));\n }\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element);\n }\n return offset;\n }\n _resolvePossibleFunction(arg) {\n return execute(arg, [this._element]);\n }\n _getPopperConfig(attachment) {\n const defaultBsPopperConfig = {\n placement: attachment,\n modifiers: [{\n name: 'flip',\n options: {\n fallbackPlacements: this._config.fallbackPlacements\n }\n }, {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n }, {\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n }, {\n name: 'arrow',\n options: {\n element: `.${this.constructor.NAME}-arrow`\n }\n }, {\n name: 'preSetPlacement',\n enabled: true,\n phase: 'beforeMain',\n fn: data => {\n // Pre-set Popper's placement attribute in order to read the arrow sizes properly.\n // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement\n this._getTipElement().setAttribute('data-popper-placement', data.state.placement);\n }\n }]\n };\n return {\n ...defaultBsPopperConfig,\n ...execute(this._config.popperConfig, [defaultBsPopperConfig])\n };\n }\n _setListeners() {\n const triggers = this._config.trigger.split(' ');\n for (const trigger of triggers) {\n if (trigger === 'click') {\n EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK$1), this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event);\n context.toggle();\n });\n } else if (trigger !== TRIGGER_MANUAL) {\n const eventIn = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSEENTER) : this.constructor.eventName(EVENT_FOCUSIN$1);\n const eventOut = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSELEAVE) : this.constructor.eventName(EVENT_FOCUSOUT$1);\n EventHandler.on(this._element, eventIn, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event);\n context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n context._enter();\n });\n EventHandler.on(this._element, eventOut, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event);\n context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n context._leave();\n });\n }\n }\n this._hideModalHandler = () => {\n if (this._element) {\n this.hide();\n }\n };\n EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);\n }\n _fixTitle() {\n const title = this._element.getAttribute('title');\n if (!title) {\n return;\n }\n if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {\n this._element.setAttribute('aria-label', title);\n }\n this._element.setAttribute('data-bs-original-title', title); // DO NOT USE IT. Is only for backwards compatibility\n this._element.removeAttribute('title');\n }\n _enter() {\n if (this._isShown() || this._isHovered) {\n this._isHovered = true;\n return;\n }\n this._isHovered = true;\n this._setTimeout(() => {\n if (this._isHovered) {\n this.show();\n }\n }, this._config.delay.show);\n }\n _leave() {\n if (this._isWithActiveTrigger()) {\n return;\n }\n this._isHovered = false;\n this._setTimeout(() => {\n if (!this._isHovered) {\n this.hide();\n }\n }, this._config.delay.hide);\n }\n _setTimeout(handler, timeout) {\n clearTimeout(this._timeout);\n this._timeout = setTimeout(handler, timeout);\n }\n _isWithActiveTrigger() {\n return Object.values(this._activeTrigger).includes(true);\n }\n _getConfig(config) {\n const dataAttributes = Manipulator.getDataAttributes(this._element);\n for (const dataAttribute of Object.keys(dataAttributes)) {\n if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {\n delete dataAttributes[dataAttribute];\n }\n }\n config = {\n ...dataAttributes,\n ...(typeof config === 'object' && config ? config : {})\n };\n config = this._mergeConfigObj(config);\n config = this._configAfterMerge(config);\n this._typeCheckConfig(config);\n return config;\n }\n _configAfterMerge(config) {\n config.container = config.container === false ? document.body : getElement(config.container);\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n };\n }\n if (typeof config.title === 'number') {\n config.title = config.title.toString();\n }\n if (typeof config.content === 'number') {\n config.content = config.content.toString();\n }\n return config;\n }\n _getDelegateConfig() {\n const config = {};\n for (const [key, value] of Object.entries(this._config)) {\n if (this.constructor.Default[key] !== value) {\n config[key] = value;\n }\n }\n config.selector = false;\n config.trigger = 'manual';\n\n // In the future can be replaced with:\n // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n // `Object.fromEntries(keysWithDifferentValues)`\n return config;\n }\n _disposePopper() {\n if (this._popper) {\n this._popper.destroy();\n this._popper = null;\n }\n if (this.tip) {\n this.tip.remove();\n this.tip = null;\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tooltip.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n });\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tooltip);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$3 = 'popover';\nconst SELECTOR_TITLE = '.popover-header';\nconst SELECTOR_CONTENT = '.popover-body';\nconst Default$2 = {\n ...Tooltip.Default,\n content: '',\n offset: [0, 8],\n placement: 'right',\n template: '
    ' + '
    ' + '

    ' + '
    ' + '
    ',\n trigger: 'click'\n};\nconst DefaultType$2 = {\n ...Tooltip.DefaultType,\n content: '(null|string|element|function)'\n};\n\n/**\n * Class definition\n */\n\nclass Popover extends Tooltip {\n // Getters\n static get Default() {\n return Default$2;\n }\n static get DefaultType() {\n return DefaultType$2;\n }\n static get NAME() {\n return NAME$3;\n }\n\n // Overrides\n _isWithContent() {\n return this._getTitle() || this._getContent();\n }\n\n // Private\n _getContentForTemplate() {\n return {\n [SELECTOR_TITLE]: this._getTitle(),\n [SELECTOR_CONTENT]: this._getContent()\n };\n }\n _getContent() {\n return this._resolvePossibleFunction(this._config.content);\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Popover.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n });\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Popover);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$2 = 'scrollspy';\nconst DATA_KEY$2 = 'bs.scrollspy';\nconst EVENT_KEY$2 = `.${DATA_KEY$2}`;\nconst DATA_API_KEY = '.data-api';\nconst EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\nconst EVENT_CLICK = `click${EVENT_KEY$2}`;\nconst EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$2}${DATA_API_KEY}`;\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\nconst CLASS_NAME_ACTIVE$1 = 'active';\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\nconst SELECTOR_TARGET_LINKS = '[href]';\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\nconst SELECTOR_NAV_LINKS = '.nav-link';\nconst SELECTOR_NAV_ITEMS = '.nav-item';\nconst SELECTOR_LIST_ITEMS = '.list-group-item';\nconst SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`;\nconst SELECTOR_DROPDOWN = '.dropdown';\nconst SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\nconst Default$1 = {\n offset: null,\n // TODO: v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: '0px 0px -25%',\n smoothScroll: false,\n target: null,\n threshold: [0.1, 0.5, 1]\n};\nconst DefaultType$1 = {\n offset: '(number|null)',\n // TODO v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: 'string',\n smoothScroll: 'boolean',\n target: 'element',\n threshold: 'array'\n};\n\n/**\n * Class definition\n */\n\nclass ScrollSpy extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n\n // this._element is the observablesContainer and config.target the menu links wrapper\n this._targetLinks = new Map();\n this._observableSections = new Map();\n this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element;\n this._activeTarget = null;\n this._observer = null;\n this._previousScrollData = {\n visibleEntryTop: 0,\n parentScrollTop: 0\n };\n this.refresh(); // initialize\n }\n\n // Getters\n static get Default() {\n return Default$1;\n }\n static get DefaultType() {\n return DefaultType$1;\n }\n static get NAME() {\n return NAME$2;\n }\n\n // Public\n refresh() {\n this._initializeTargetsAndObservables();\n this._maybeEnableSmoothScroll();\n if (this._observer) {\n this._observer.disconnect();\n } else {\n this._observer = this._getNewObserver();\n }\n for (const section of this._observableSections.values()) {\n this._observer.observe(section);\n }\n }\n dispose() {\n this._observer.disconnect();\n super.dispose();\n }\n\n // Private\n _configAfterMerge(config) {\n // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case\n config.target = getElement(config.target) || document.body;\n\n // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin;\n if (typeof config.threshold === 'string') {\n config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value));\n }\n return config;\n }\n _maybeEnableSmoothScroll() {\n if (!this._config.smoothScroll) {\n return;\n }\n\n // unregister any previous listeners\n EventHandler.off(this._config.target, EVENT_CLICK);\n EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {\n const observableSection = this._observableSections.get(event.target.hash);\n if (observableSection) {\n event.preventDefault();\n const root = this._rootElement || window;\n const height = observableSection.offsetTop - this._element.offsetTop;\n if (root.scrollTo) {\n root.scrollTo({\n top: height,\n behavior: 'smooth'\n });\n return;\n }\n\n // Chrome 60 doesn't support `scrollTo`\n root.scrollTop = height;\n }\n });\n }\n _getNewObserver() {\n const options = {\n root: this._rootElement,\n threshold: this._config.threshold,\n rootMargin: this._config.rootMargin\n };\n return new IntersectionObserver(entries => this._observerCallback(entries), options);\n }\n\n // The logic of selection\n _observerCallback(entries) {\n const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`);\n const activate = entry => {\n this._previousScrollData.visibleEntryTop = entry.target.offsetTop;\n this._process(targetElement(entry));\n };\n const parentScrollTop = (this._rootElement || document.documentElement).scrollTop;\n const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop;\n this._previousScrollData.parentScrollTop = parentScrollTop;\n for (const entry of entries) {\n if (!entry.isIntersecting) {\n this._activeTarget = null;\n this._clearActiveClass(targetElement(entry));\n continue;\n }\n const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop;\n // if we are scrolling down, pick the bigger offsetTop\n if (userScrollsDown && entryIsLowerThanPrevious) {\n activate(entry);\n // if parent isn't scrolled, let's keep the first visible item, breaking the iteration\n if (!parentScrollTop) {\n return;\n }\n continue;\n }\n\n // if we are scrolling up, pick the smallest offsetTop\n if (!userScrollsDown && !entryIsLowerThanPrevious) {\n activate(entry);\n }\n }\n }\n _initializeTargetsAndObservables() {\n this._targetLinks = new Map();\n this._observableSections = new Map();\n const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target);\n for (const anchor of targetLinks) {\n // ensure that the anchor has an id and is not disabled\n if (!anchor.hash || isDisabled(anchor)) {\n continue;\n }\n const observableSection = SelectorEngine.findOne(decodeURI(anchor.hash), this._element);\n\n // ensure that the observableSection exists & is visible\n if (isVisible(observableSection)) {\n this._targetLinks.set(decodeURI(anchor.hash), anchor);\n this._observableSections.set(anchor.hash, observableSection);\n }\n }\n }\n _process(target) {\n if (this._activeTarget === target) {\n return;\n }\n this._clearActiveClass(this._config.target);\n this._activeTarget = target;\n target.classList.add(CLASS_NAME_ACTIVE$1);\n this._activateParents(target);\n EventHandler.trigger(this._element, EVENT_ACTIVATE, {\n relatedTarget: target\n });\n }\n _activateParents(target) {\n // Activate dropdown parents\n if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, target.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE$1);\n return;\n }\n for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {\n // Set triggered links parents as active\n // With both