Þ ¥bonds€¬cell_resultsÞ Ù$fff3fe40-b944-46ed-aea1-3d550ed5fbb0Š¦queuedÂ¤logs§runningÂ¦output†¤bodyÚ&<div class="pluto-docs-binding">
<span id="find_suboptimal_edge">find_suboptimal_edge</span>
<div class="markdown"><pre><code>find_suboptimal_edge&#40;f, g, C&#41;::Union&#123;Nothing,CartesianIndex&#125;</code></pre>
<p>Returns the position of an existing suboptimal edge.</p>


</div>
</div>
¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÙÃL.DY’°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$fff3fe40-b944-46ed-aea1-3d550ed5fbb0¹depends_on_disabled_cellsÂ§runtimeÎ aû‡µpublished_object_keys¸depends_on_skipped_cellsÂ§erroredÂÙ$3be07e02-b95f-44a2-9491-f39a1a1c2617Š¦queuedÂ¤logs§runningÂ¦output†¤body…¦prefix´BenchmarkTools.Trial¨elements’’’ÚÀBenchmarkTools.Trial: 10000 samples with 8 evaluations.
 Range (min â€¦ max):  3.822 Î¼s â€¦  1.625 ms  â”Š GC (min â€¦ max):  0.00% â€¦ 99.36%
 Time  (median):     4.031 Î¼s              â”Š GC (median):     0.00%
 Time  (mean Â± Ïƒ):   5.360 Î¼s Â± 28.269 Î¼s  â”Š GC (mean Â± Ïƒ):  10.37% Â±  1.98%

  â–‚â–ˆâ–ˆâ–‡â–„â–ƒâ–‚â–‚                                  â–â–â–ƒâ–‚â–ƒâ–„â–ƒâ–ƒâ–ƒâ–‚â–‚â–     â–‚
  â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–‡â–‡â–‡â–†â–†â–…â–„â–…â–…â–†â–†â–…â–…â–…â–…â–„â–„â–„â–ƒâ–ƒâ–ƒâ–„â–„â–ƒâ–„â–…â–„â–„â–‡â–†â–‡â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–‡â–† â–ˆ
  3.82 Î¼s      Histogram: log(frequency) by time     8.15 Î¼s <

 Memory estimate: 7.67 KiB, allocs estimate: 182.ªtext/plain’’Ú±BenchmarkTools.Trial: 10000 samples with 1 evaluation.
 Range (min â€¦ max):  12.102 Î¼s â€¦ 332.970 Î¼s  â”Š GC (min â€¦ max): 0.00% â€¦ 0.00%
 Time  (median):     19.005 Î¼s               â”Š GC (median):    0.00%
 Time  (mean Â± Ïƒ):   19.245 Î¼s Â±   4.400 Î¼s  â”Š GC (mean Â± Ïƒ):  0.00% Â± 0.00%

                 â–‚â–„   â–ƒâ–ˆâ–   â–ˆâ–†â–                                 
  â–â–â–‚â–‚â–‚â–ƒâ–‚â–‚â–‚â–‚â–â–â–â–â–‚â–ˆâ–ˆâ–‡â–ƒâ–…â–ˆâ–ˆâ–ˆâ–„â–ƒâ–‡â–ˆâ–ˆâ–ˆâ–„â–ƒâ–…â–‡â–†â–„â–‚â–‚â–‚â–‚â–‚â–â–â–â–‚â–â–â–â–â–â–â–â–â–â–â–â–â–â–â–â– â–ƒ
  12.1 Î¼s         Histogram: frequency by time         29.6 Î¼s <

 Memory estimate: 6.42 KiB, allocs estimate: 110.ªtext/plain¤type¥Array¬prefix_short ¨objectid°648e593c2c02d261¤mimeÙ!application/vnd.pluto.tree+object¬rootassigneeÀ²last_run_timestampËAÙÃL3¾þm°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$3be07e02-b95f-44a2-9491-f39a1a1c2617¹depends_on_disabled_cellsÂ§runtimeÏ   C×[$µpublished_object_keys¸depends_on_skipped_cellsÂ§erroredÂÙ$521f7c7a-823d-4873-8484-66c17825b966Š¦queuedÂ¤logs§runningÂ¦output†¤bodyÙ=<div class="markdown"><h2>OptimalTransport.jl API</h2>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÙÃL	£|l°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$521f7c7a-823d-4873-8484-66c17825b966¹depends_on_disabled_cellsÂ§runtimeÎ ¶äµpublished_object_keys¸depends_on_skipped_cellsÂ§erroredÂÙ$9bef5380-7275-42de-99cc-597aa72b0abcŠ¦queuedÂ¤logs§runningÂ¦output†¤bodyÙA<div class="markdown"><h1>Graph &amp; Cycle detection</h1>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÙÃL	£K{°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$9bef5380-7275-42de-99cc-597aa72b0abc¹depends_on_disabled_cellsÂ§runtimeÎ ½•µpublished_object_keys¸depends_on_skipped_cellsÂ§erroredÂÙ$a05afd19-3bae-4479-b8f0-86f373094113Š¦queuedÂ¤logs§runningÂ¦output†¤body ¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÙÃL/:ÎO°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$a05afd19-3bae-4479-b8f0-86f373094113¹depends_on_disabled_cellsÂ§runtimeÎu„´µpublished_object_keys¸depends_on_skipped_cellsÂ§erroredÂÙ$5584d358-eab9-48fa-a880-62080674df12Š¦queuedÂ¤logs§runningÂ¦output†¤bodyÚMŒ<script>
	
// Load the library for consistent smooth scrolling
const {default: scrollIntoView} = await import("data:text/javascript;base64,dmFyIFE9ZT0+Im9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT1lJiYxPT09ZS5ub2RlVHlwZSxVPShlLHQpPT4oIXR8fCJoaWRkZW4iIT09ZSkmJiJ2aXNpYmxlIiE9PWUmJiJjbGlwIiE9PWUsQT0oZSx0KT0+e2lmKGUuY2xpZW50SGVpZ2h0PGUuc2Nyb2xsSGVpZ2h0fHxlLmNsaWVudFdpZHRoPGUuc2Nyb2xsV2lkdGgpe2xldCBsPWdldENvbXB1dGVkU3R5bGUoZSxudWxsKTtyZXR1cm4gVShsLm92ZXJmbG93WSx0KXx8VShsLm92ZXJmbG93WCx0KXx8KGU9PntsZXQgdD0oZT0+e2lmKCFlLm93bmVyRG9jdW1lbnR8fCFlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcpcmV0dXJuIG51bGw7dHJ5e3JldHVybiBlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZnJhbWVFbGVtZW50fWNhdGNoe3JldHVybiBudWxsfX0pKGUpO3JldHVybiEhdCYmKHQuY2xpZW50SGVpZ2h0PGUuc2Nyb2xsSGVpZ2h0fHx0LmNsaWVudFdpZHRoPGUuc2Nyb2xsV2lkdGgpfSkoZSl9cmV0dXJuITF9LFg9KGUsdCxsLG8sbixyLGkscyk9PnI8ZSYmaT50fHxyPmUmJmk8dD8wOnI8PWUmJnM8PWx8fGk+PXQmJnM+PWw/ci1lLW86aT50JiZzPGx8fHI8ZSYmcz5sP2ktdCtuOjAsJD1lPT5lLnBhcmVudEVsZW1lbnQ/PyhlLmdldFJvb3ROb2RlKCkuaG9zdHx8bnVsbCksdHQ9KGUsdCk9Pnt2YXIgbCxvLG4scjtpZih0eXBlb2YgZG9jdW1lbnQ+InUiKXJldHVybltdO2xldHtzY3JvbGxNb2RlOmksYmxvY2s6cyxpbmxpbmU6YSxib3VuZGFyeTpoLHNraXBPdmVyZmxvd0hpZGRlbkVsZW1lbnRzOnV9PXQsZz0iZnVuY3Rpb24iPT10eXBlb2YgaD9oOmU9PmUhPT1oO2lmKCFRKGUpKXRocm93IFR5cGVFcnJvcigiSW52YWxpZCB0YXJnZXQiKTtsZXQgdj1kb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50fHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsbT1bXSx3PWU7Zm9yKDtRKHcpJiZnKHcpOyl7aWYoKHc9JCh3KSk9PT12KXttLnB1c2godyk7YnJlYWt9bnVsbCE9dyYmdz09PWRvY3VtZW50LmJvZHkmJkEodykmJiFBKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCl8fG51bGwhPXcmJkEodyx1KSYmbS5wdXNoKHcpfWxldCBXPW51bGwhPShvPW51bGw9PShsPXdpbmRvdy52aXN1YWxWaWV3cG9ydCk/dm9pZCAwOmwud2lkdGgpP286aW5uZXJXaWR0aCxIPW51bGwhPShyPW51bGw9PShuPXdpbmRvdy52aXN1YWxWaWV3cG9ydCk/dm9pZCAwOm4uaGVpZ2h0KT9yOmlubmVySGVpZ2h0LHtzY3JvbGxYOl8sc2Nyb2xsWTp4fT13aW5kb3cse2hlaWdodDpFLHdpZHRoOlQsdG9wOk4scmlnaHQ6TCxib3R0b206WSxsZWZ0OkN9PWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksUj0ic3RhcnQiPT09c3x8Im5lYXJlc3QiPT09cz9OOiJlbmQiPT09cz9ZOk4rRS8yLFY9ImNlbnRlciI9PT1hP0MrVC8yOiJlbmQiPT09YT9MOkMsQj1bXTtmb3IobGV0IEQ9MDtEPG0ubGVuZ3RoO0QrKyl7bGV0IE89bVtEXSx7aGVpZ2h0Omosd2lkdGg6SSx0b3A6UyxyaWdodDpxLGJvdHRvbTp6LGxlZnQ6Rn09Ty5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZigiaWYtbmVlZGVkIj09PWkmJk4+PTAmJkM+PTAmJlk8PUgmJkw8PVcmJk4+PVMmJlk8PXomJkM+PUYmJkw8PXEpYnJlYWs7bGV0IEc9Z2V0Q29tcHV0ZWRTdHlsZShPKSxKPXBhcnNlSW50KEcuYm9yZGVyTGVmdFdpZHRoLDEwKSxLPXBhcnNlSW50KEcuYm9yZGVyVG9wV2lkdGgsMTApLFA9cGFyc2VJbnQoRy5ib3JkZXJSaWdodFdpZHRoLDEwKSxaPXBhcnNlSW50KEcuYm9yZGVyQm90dG9tV2lkdGgsMTApLGVlPTAsZXQ9MCxlbD0ib2Zmc2V0V2lkdGgiaW4gTz9PLm9mZnNldFdpZHRoLU8uY2xpZW50V2lkdGgtSi1QOjAsZW89Im9mZnNldEhlaWdodCJpbiBPP08ub2Zmc2V0SGVpZ2h0LU8uY2xpZW50SGVpZ2h0LUstWjowLGVuPSJvZmZzZXRXaWR0aCJpbiBPPzA9PT1PLm9mZnNldFdpZHRoPzA6SS9PLm9mZnNldFdpZHRoOjAsZXI9Im9mZnNldEhlaWdodCJpbiBPPzA9PT1PLm9mZnNldEhlaWdodD8wOmovTy5vZmZzZXRIZWlnaHQ6MDtpZih2PT09TyllZT0ic3RhcnQiPT09cz9SOiJlbmQiPT09cz9SLUg6Im5lYXJlc3QiPT09cz9YKHgseCtILEgsSyxaLHgrUix4K1IrRSxFKTpSLUgvMixldD0ic3RhcnQiPT09YT9WOiJjZW50ZXIiPT09YT9WLVcvMjoiZW5kIj09PWE/Vi1XOlgoXyxfK1csVyxKLFAsXytWLF8rVitULFQpLGVlPU1hdGgubWF4KDAsZWUreCksZXQ9TWF0aC5tYXgoMCxldCtfKTtlbHNle2VlPSJzdGFydCI9PT1zP1ItUy1LOiJlbmQiPT09cz9SLXorWitlbzoibmVhcmVzdCI9PT1zP1goUyx6LGosSyxaK2VvLFIsUitFLEUpOlItKFMrai8yKStlby8yLGV0PSJzdGFydCI9PT1hP1YtRi1KOiJjZW50ZXIiPT09YT9WLShGK0kvMikrZWwvMjoiZW5kIj09PWE/Vi1xK1ArZWw6WChGLHEsSSxKLFArZWwsVixWK1QsVCk7bGV0e3Njcm9sbExlZnQ6ZWksc2Nyb2xsVG9wOmVkfT1PO2VlPU1hdGgubWF4KDAsTWF0aC5taW4oZWQrZWUvZXIsTy5zY3JvbGxIZWlnaHQtai9lcitlbykpLGV0PU1hdGgubWF4KDAsTWF0aC5taW4oZWkrZXQvZW4sTy5zY3JvbGxXaWR0aC1JL2VuK2VsKSksUis9ZWQtZWUsVis9ZWktZXR9Qi5wdXNoKHtlbDpPLHRvcDplZSxsZWZ0OmV0fSl9cmV0dXJuIEJ9LGY9ZT0+e3ZhciB0O3JldHVybiExPT09ZT97YmxvY2s6ImVuZCIsaW5saW5lOiJuZWFyZXN0In06KHQ9ZSk9PT1PYmplY3QodCkmJjAhPT1PYmplY3Qua2V5cyh0KS5sZW5ndGg/ZTp7YmxvY2s6InN0YXJ0IixpbmxpbmU6Im5lYXJlc3QifX07ZnVuY3Rpb24gYyhlLHQpe3ZhciBsO2lmKCFlLmlzQ29ubmVjdGVkfHwhKGU9PntsZXQgdD1lO2Zvcig7dCYmdC5wYXJlbnROb2RlOyl7aWYodC5wYXJlbnROb2RlPT09ZG9jdW1lbnQpcmV0dXJuITA7dD10LnBhcmVudE5vZGUgaW5zdGFuY2VvZiBTaGFkb3dSb290P3QucGFyZW50Tm9kZS5ob3N0OnQucGFyZW50Tm9kZX1yZXR1cm4hMX0pKGUpKXJldHVybjtpZigib2JqZWN0Ij09dHlwZW9mKGw9dCkmJiJmdW5jdGlvbiI9PXR5cGVvZiBsLmJlaGF2aW9yKXJldHVybiB0LmJlaGF2aW9yKHR0KGUsdCkpO2xldCBvPSJib29sZWFuIj09dHlwZW9mIHR8fG51bGw9PXQ/dm9pZCAwOnQuYmVoYXZpb3I7Zm9yKGxldHtlbDpuLHRvcDpyLGxlZnQ6aX1vZiB0dChlLGYodCkpKW4uc2Nyb2xsKHt0b3A6cixsZWZ0OmksYmVoYXZpb3I6b30pfXZhciBkLHA9KCk9PihkfHwoZD0icGVyZm9ybWFuY2UiaW4gd2luZG93P3BlcmZvcm1hbmNlLm5vdy5iaW5kKHBlcmZvcm1hbmNlKTpEYXRlLm5vdyksZCgpKTtmdW5jdGlvbiBiKGUpe2xldCB0PU1hdGgubWluKChwKCktZS5zdGFydFRpbWUpL2UuZHVyYXRpb24sMSksbD1lLmVhc2UodCksbz1lLnN0YXJ0WCsoZS54LWUuc3RhcnRYKSpsLG49ZS5zdGFydFkrKGUueS1lLnN0YXJ0WSkqbDtlLm1ldGhvZChvLG4sdCxsKSxvIT09ZS54fHxuIT09ZS55P3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+YihlKSk6ZS5jYigpfWZ1bmN0aW9uIHkoZSx0LGwpe2xldCBvPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTo2MDAsbj1hcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XT9hcmd1bWVudHNbNF06ZT0+MSstLWUqZSplKmUqZSxyPWFyZ3VtZW50cy5sZW5ndGg+NT9hcmd1bWVudHNbNV06dm9pZCAwLGk9YXJndW1lbnRzLmxlbmd0aD42P2FyZ3VtZW50c1s2XTp2b2lkIDAscz1lLnNjcm9sbExlZnQsYT1lLnNjcm9sbFRvcDtiKHtzY3JvbGxhYmxlOmUsbWV0aG9kKHQsbCxvLG4pe2xldCByPU1hdGguY2VpbCh0KSxzPU1hdGguY2VpbChsKTtlLnNjcm9sbExlZnQ9cixlLnNjcm9sbFRvcD1zLGk/Lih7dGFyZ2V0OmUsZWxhcHNlZDpvLHZhbHVlOm4sbGVmdDpyLHRvcDpzfSl9LHN0YXJ0VGltZTpwKCksc3RhcnRYOnMsc3RhcnRZOmEseDp0LHk6bCxkdXJhdGlvbjpvLGVhc2U6bixjYjpyfSl9dmFyIE09ZT0+ZSYmIWUuYmVoYXZpb3J8fCJzbW9vdGgiPT09ZS5iZWhhdmlvcixrPWZ1bmN0aW9uKGUsdCl7bGV0IGw9dHx8e307cmV0dXJuIE0obCk/YyhlLHtibG9jazpsLmJsb2NrLGlubGluZTpsLmlubGluZSxzY3JvbGxNb2RlOmwuc2Nyb2xsTW9kZSxib3VuZGFyeTpsLmJvdW5kYXJ5LHNraXBPdmVyZmxvd0hpZGRlbkVsZW1lbnRzOmwuc2tpcE92ZXJmbG93SGlkZGVuRWxlbWVudHMsYmVoYXZpb3I6ZT0+UHJvbWlzZS5hbGwoZS5yZWR1Y2UoKGUsdCk9PntsZXR7ZWw6byxsZWZ0Om4sdG9wOnJ9PXQsaT1vLnNjcm9sbExlZnQscz1vLnNjcm9sbFRvcDtyZXR1cm4gaT09PW4mJnM9PT1yP2U6Wy4uLmUsbmV3IFByb21pc2UoZT0+eShvLG4scixsLmR1cmF0aW9uLGwuZWFzZSwoKT0+ZSh7ZWw6byxsZWZ0OltpLG5dLHRvcDpbcyxyXX0pLGwub25TY3JvbGxDaGFuZ2UpKV19LFtdKSl9KTpQcm9taXNlLnJlc29sdmUoYyhlLHQpKX07ZXhwb3J0e2sgYXMgZGVmYXVsdH07")

const indent = true
const aside = true
const title_text = "Table of Contents"
const include_definitions = false


const tocNode = html`<nav class="plutoui-toc">
	<header>
	 <span class="toc-toggle open-toc"></span>
	 <span class="toc-toggle closed-toc"></span>
	 ${title_text}
	</header>
	<section></section>
</nav>`

tocNode.classList.toggle("aside", aside)
tocNode.classList.toggle("indent", indent)


const getParentCell = el => el.closest("pluto-cell")

const getHeaders = () => {
	const depth = Math.max(1, Math.min(6, 3)) // should be in range 1:6
	const range = Array.from({length: depth}, (x, i) => i+1) // [1, ..., depth]
	
	const selector = [
		...(include_definitions ? [
			`pluto-notebook pluto-cell .pluto-docs-binding`, 
			`pluto-notebook pluto-cell assignee:not(:empty)`, 
		] : []),
		...range.map(i => `pluto-notebook pluto-cell h${i}`)
	].join(",")
	return Array.from(document.querySelectorAll(selector)).filter(el => 
		// exclude headers inside of a pluto-docs-binding block
		!(el.nodeName.startsWith("H") && el.closest(".pluto-docs-binding"))
	)
}


const document_click_handler = (event) => {
	const path = (event.path || event.composedPath())
	const toc = path.find(elem => elem?.classList?.contains?.("toc-toggle"))
	if (toc) {
		event.stopImmediatePropagation()
		toc.closest(".plutoui-toc").classList.toggle("hide")
	}
}

document.addEventListener("click", document_click_handler)


const header_to_index_entry_map = new Map()
const currently_highlighted_set = new Set()

const last_toc_element_click_time = { current: 0 }

const intersection_callback = (ixs) => {
	let on_top = ixs.filter(ix => ix.intersectionRatio > 0 && ix.intersectionRect.y < ix.rootBounds.height / 2)
	if(on_top.length > 0){
		currently_highlighted_set.forEach(a => a.classList.remove("in-view"))
		currently_highlighted_set.clear()
		on_top.slice(0,1).forEach(i => {
			let div = header_to_index_entry_map.get(i.target)
			div.classList.add("in-view")
			currently_highlighted_set.add(div)
			
			/// scroll into view
			/*
			const toc_height = tocNode.offsetHeight
			const div_pos = div.offsetTop
			const div_height = div.offsetHeight
			const current_scroll = tocNode.scrollTop
			const header_height = tocNode.querySelector("header").offsetHeight
			
			const scroll_to_top = div_pos - header_height
			const scroll_to_bottom = div_pos + div_height - toc_height
			
			// if we set a scrollTop, then the browser will stop any currently ongoing smoothscroll animation. So let's only do this if you are not currently in a smoothscroll.
			if(Date.now() - last_toc_element_click_time.current >= 2000)
				if(current_scroll < scroll_to_bottom){
					tocNode.scrollTop = scroll_to_bottom
				} else if(current_scroll > scroll_to_top){
					tocNode.scrollTop = scroll_to_top
				}
			*/
		})
	}
}
let intersection_observer_1 = new IntersectionObserver(intersection_callback, {
	root: null, // i.e. the viewport
  	threshold: 1,
	rootMargin: "-15px", // slightly smaller than the viewport
	// delay: 100,
})
let intersection_observer_2 = new IntersectionObserver(intersection_callback, {
	root: null, // i.e. the viewport
  	threshold: 1,
	rootMargin: "15px", // slightly larger than the viewport
	// delay: 100,
})

const render = (elements) => {
	header_to_index_entry_map.clear()
	currently_highlighted_set.clear()
	intersection_observer_1.disconnect()
	intersection_observer_2.disconnect()

		let last_level = `H1`
	return html`${elements.map(h => {
	const parent_cell = getParentCell(h)

		let [className, title_el] = h.matches(`.pluto-docs-binding`) ? ["pluto-docs-binding-el", h.firstElementChild] : [h.nodeName, h]

	const a = html`<a 
		class="${className}" 
		title="${title_el.innerText}"
		href="#${parent_cell.id}"
	>${title_el.innerHTML}</a>`
	/* a.onmouseover=()=>{
		parent_cell.firstElementChild.classList.add(
			'highlight-pluto-cell-shoulder'
		)
	}
	a.onmouseout=() => {
		parent_cell.firstElementChild.classList.remove(
			'highlight-pluto-cell-shoulder'
		)
	} */
		
		
	a.onclick=(e) => {
		e.preventDefault();
		last_toc_element_click_time.current = Date.now()
		scrollIntoView(h, {
			behavior: 'smooth', 
			block: 'start',
		}).then(() => 
			// sometimes it doesn't scroll to the right place
			// solution: try a second time!
			scrollIntoView(h, {
				behavior: 'smooth', 
				block: 'start',
			})
	   )
	}

	const row =  html`<div class="toc-row ${className} after-${last_level}">${a}</div>`
		intersection_observer_1.observe(title_el)
		intersection_observer_2.observe(title_el)
		header_to_index_entry_map.set(title_el, row)

	if(className.startsWith("H"))
		last_level = className
		
	return row
})}`
}

const invalidated = { current: false }

const updateCallback = () => {
	if (!invalidated.current) {
		tocNode.querySelector("section").replaceWith(
			html`<section>${render(getHeaders())}</section>`
		)
	}
}
updateCallback()
setTimeout(updateCallback, 100)
setTimeout(updateCallback, 1000)
setTimeout(updateCallback, 5000)

const notebook = document.querySelector("pluto-notebook")


// We have a mutationobserver for each cell:
const mut_observers = {
	current: [],
}

const createCellObservers = () => {
	mut_observers.current.forEach((o) => o.disconnect())
	mut_observers.current = Array.from(notebook.querySelectorAll("pluto-cell")).map(el => {
		const o = new MutationObserver(updateCallback)
		o.observe(el, {attributeFilter: ["class"]})
		return o
	})
}
createCellObservers()

// And one for the notebook's child list, which updates our cell observers:
const notebookObserver = new MutationObserver(() => {
	updateCallback()
	createCellObservers()
})
notebookObserver.observe(notebook, {childList: true})

// And finally, an observer for the document.body classList, to make sure that the toc also works when it is loaded during notebook initialization
const bodyClassObserver = new MutationObserver(updateCallback)
bodyClassObserver.observe(document.body, {attributeFilter: ["class"]})

// Hide/show the ToC when the screen gets small
let match_listener = () => 
	tocNode.classList.toggle("hide", (tocNode.closest("pluto-editor") ?? document.body).scrollWidth < 1000)
for(let s of [1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000]) {
	let m = matchMedia(`(max-width: ${s}px)`)
	m.addListener(match_listener)
	invalidation.then(() => m.removeListener(match_listener))
}
match_listener()

invalidation.then(() => {
	invalidated.current = true
	intersection_observer_1.disconnect()
	intersection_observer_2.disconnect()
	notebookObserver.disconnect()
	bodyClassObserver.disconnect()
	mut_observers.current.forEach((o) => o.disconnect())
	document.removeEventListener("click", document_click_handler)
})

return tocNode
</script>
<style>
@media not print {

.plutoui-toc {
	font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Cantarell, "Apple Color Emoji",
		"Segoe UI Emoji", "Segoe UI Symbol", system-ui, sans-serif;
	--main-bg-color: #fafafa;
	--pluto-output-color: hsl(0, 0%, 36%);
	--pluto-output-h-color: hsl(0, 0%, 21%);
	--sidebar-li-active-bg: rgb(235, 235, 235);
	--icon-filter: unset;
}

@media (prefers-color-scheme: dark) {
	.plutoui-toc {
		--main-bg-color: #303030;
		--pluto-output-color: hsl(0, 0%, 90%);
		--pluto-output-h-color: hsl(0, 0%, 97%);
		--sidebar-li-active-bg: rgb(82, 82, 82);
		--icon-filter: invert(1);
	}
}

.plutoui-toc.aside {
	color: var(--pluto-output-color);
	position: fixed;
	right: 1rem;
	top: 5rem;
	width: min(80vw, 300px);
	padding: 0.5rem;
	padding-top: 0em;
	/* border: 3px solid rgba(0, 0, 0, 0.15); */
	border-radius: 10px;
	/* box-shadow: 0 0 11px 0px #00000010; */
	max-height: calc(100vh - 5rem - 90px);
	overflow: auto;
	z-index: 40;
	background-color: var(--main-bg-color);
	transition: transform 300ms cubic-bezier(0.18, 0.89, 0.45, 1.12);
}

.plutoui-toc.aside.hide {
	transform: translateX(calc(100% - 28px));
}
.plutoui-toc.aside.hide section {
	display: none;
}
.plutoui-toc.aside.hide header {
	margin-bottom: 0em;
	padding-bottom: 0em;
	border-bottom: none;
}
}  /* End of Media print query */
.plutoui-toc.aside.hide .open-toc,
.plutoui-toc.aside:not(.hide) .closed-toc,
.plutoui-toc:not(.aside) .closed-toc {
	display: none;
}

@media (prefers-reduced-motion) {
  .plutoui-toc.aside {
	transition-duration: 0s;
  }
}

.toc-toggle {
	cursor: pointer;
    padding: 1em;
    margin: -1em;
    margin-right: -0.7em;
    line-height: 1em;
    display: flex;
}

.toc-toggle::before {
    content: "";
    display: inline-block;
    height: 1em;
    width: 1em;
    background-image: url("https://cdn.jsdelivr.net/gh/ionic-team/ionicons@5.5.1/src/svg/list-outline.svg");
	/* generated using https://dopiaza.org/tools/datauri/index.php */
    background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiB2aWV3Qm94PSIwIDAgNTEyIDUxMiI+PHRpdGxlPmlvbmljb25zLXY1LW88L3RpdGxlPjxsaW5lIHgxPSIxNjAiIHkxPSIxNDQiIHgyPSI0NDgiIHkyPSIxNDQiIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDA7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS13aWR0aDozMnB4Ii8+PGxpbmUgeDE9IjE2MCIgeTE9IjI1NiIgeDI9IjQ0OCIgeTI9IjI1NiIgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLXdpZHRoOjMycHgiLz48bGluZSB4MT0iMTYwIiB5MT0iMzY4IiB4Mj0iNDQ4IiB5Mj0iMzY4IiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2Utd2lkdGg6MzJweCIvPjxjaXJjbGUgY3g9IjgwIiBjeT0iMTQ0IiByPSIxNiIgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLXdpZHRoOjMycHgiLz48Y2lyY2xlIGN4PSI4MCIgY3k9IjI1NiIgcj0iMTYiIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDA7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS13aWR0aDozMnB4Ii8+PGNpcmNsZSBjeD0iODAiIGN5PSIzNjgiIHI9IjE2IiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2Utd2lkdGg6MzJweCIvPjwvc3ZnPg==");
    background-size: 1em;
	filter: var(--icon-filter);
}

.aside .toc-toggle.open-toc:hover::before {
    background-image: url("https://cdn.jsdelivr.net/gh/ionic-team/ionicons@5.5.1/src/svg/arrow-forward-outline.svg");
	/* generated using https://dopiaza.org/tools/datauri/index.php */
    background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiB2aWV3Qm94PSIwIDAgNTEyIDUxMiI+PHRpdGxlPmlvbmljb25zLXY1LWE8L3RpdGxlPjxwb2x5bGluZSBwb2ludHM9IjI2OCAxMTIgNDEyIDI1NiAyNjggNDAwIiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2Utd2lkdGg6NDhweCIvPjxsaW5lIHgxPSIzOTIiIHkxPSIyNTYiIHgyPSIxMDAiIHkyPSIyNTYiIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDA7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS13aWR0aDo0OHB4Ii8+PC9zdmc+");
}
.aside .toc-toggle.closed-toc:hover::before {
    background-image: url("https://cdn.jsdelivr.net/gh/ionic-team/ionicons@5.5.1/src/svg/arrow-back-outline.svg");
	/* generated using https://dopiaza.org/tools/datauri/index.php */
    background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiB2aWV3Qm94PSIwIDAgNTEyIDUxMiI+PHRpdGxlPmlvbmljb25zLXY1LWE8L3RpdGxlPjxwb2x5bGluZSBwb2ludHM9IjI0NCA0MDAgMTAwIDI1NiAyNDQgMTEyIiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2Utd2lkdGg6NDhweCIvPjxsaW5lIHgxPSIxMjAiIHkxPSIyNTYiIHgyPSI0MTIiIHkyPSIyNTYiIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDA7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS13aWR0aDo0OHB4Ii8+PC9zdmc+");
}



.plutoui-toc header {
	display: flex;
	align-items: center;
	gap: .3em;
	font-size: 1.5em;
	/* margin-top: -0.1em; */
	margin-bottom: 0.4em;
	padding: 0.5rem;
	margin-left: 0;
	margin-right: 0;
	font-weight: bold;
	/* border-bottom: 2px solid rgba(0, 0, 0, 0.15); */
	position: sticky;
	top: 0px;
	background: var(--main-bg-color);
	z-index: 41;
}
.plutoui-toc.aside header {
	padding-left: 0;
	padding-right: 0;
}

.plutoui-toc section .toc-row {
	white-space: nowrap;
	overflow: hidden;
	text-overflow: ellipsis;
	padding: .1em;
	border-radius: .2em;
}

.plutoui-toc section .toc-row.H1 {
	margin-top: 1em;
}


.plutoui-toc.aside section .toc-row.in-view {
	background: var(--sidebar-li-active-bg);
}


	
.highlight-pluto-cell-shoulder {
	background: rgba(0, 0, 0, 0.05);
	background-clip: padding-box;
}

.plutoui-toc section a {
	text-decoration: none;
	font-weight: normal;
	color: var(--pluto-output-color);
}
.plutoui-toc section a:hover {
	color: var(--pluto-output-h-color);
}

.plutoui-toc.indent section a.H1 {
	font-weight: 700;
	line-height: 1em;
}

.plutoui-toc.indent section .after-H2 a { padding-left: 10px; }
.plutoui-toc.indent section .after-H3 a { padding-left: 20px; }
.plutoui-toc.indent section .after-H4 a { padding-left: 30px; }
.plutoui-toc.indent section .after-H5 a { padding-left: 40px; }
.plutoui-toc.indent section .after-H6 a { padding-left: 50px; }

.plutoui-toc.indent section a.H1 { padding-left: 0px; }
.plutoui-toc.indent section a.H2 { padding-left: 10px; }
.plutoui-toc.indent section a.H3 { padding-left: 20px; }
.plutoui-toc.indent section a.H4 { padding-left: 30px; }
.plutoui-toc.indent section a.H5 { padding-left: 40px; }
.plutoui-toc.indent section a.H6 { padding-left: 50px; }


.plutoui-toc.indent section a.pluto-docs-binding-el,
.plutoui-toc.indent section a.ASSIGNEE
	{
	font-family: JuliaMono, monospace;
	font-size: .8em;
	/* background: black; */
	font-weight: 700;
    font-style: italic;
	color: var(--cm-var-color); /* this is stealing a variable from Pluto, but it's fine if that doesnt work */
}
.plutoui-toc.indent section a.pluto-docs-binding-el::before,
.plutoui-toc.indent section a.ASSIGNEE::before
	{
	content: "> ";
	opacity: .3;
}
</style>
¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÙÃL3Ø²5°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$5584d358-eab9-48fa-a880-62080674df12¹depends_on_disabled_cellsÂ§runtimeÍ/(µpublished_object_keys¸depends_on_skipped_cellsÂ§erroredÂÙ$3e4a5f6d-d4ef-4372-9762-388b92f0755bŠ¦queuedÂ¤logs§runningÂ¦output†¤bodyÙN<div class="markdown"><h2>Obtaining a Dual Pair Complementary to P</h2>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÙÃL	£2'°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$3e4a5f6d-d4ef-4372-9762-388b92f0755b¹depends_on_disabled_cellsÂ§runtimeÎ º_µpublished_object_keys¸depends_on_skipped_cellsÂ§erroredÂÙ$e7aea362-3595-45d2-bb0a-512e241c17bcŠ¦queuedÂ¤logs§runningÂ¦output†¤bodyƒ¨elements’’’…¦prefix®CartesianIndex¨elements”’’´CartesianIndex(1, 3)ªtext/plain’’´CartesianIndex(3, 3)ªtext/plain’’´CartesianIndex(3, 1)ªtext/plain’’´CartesianIndex(1, 1)ªtext/plain¤type¥Array¬prefix_short ¨objectid°6cb57d2e3d154071Ù!application/vnd.pluto.tree+object’’…¦prefix§Float64¨elements”’’£1.2ªtext/plain’’£1.0ªtext/plain’’£1.0ªtext/plain’’£1.1ªtext/plain¤type¥Array¬prefix_short ¨objectid°e599978eaedd757cÙ!application/vnd.pluto.tree+object¤type¥Tuple¨objectid°f6f50a741cf897f9¤mimeÙ!application/vnd.pluto.tree+object¬rootassigneeÀ²last_run_timestampËAÙÃL.©îN°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$e7aea362-3595-45d2-bb0a-512e241c17bc¹depends_on_disabled_cellsÂ§runtimeÎØºµpublished_object_keys¸depends_on_skipped_cellsÂ§erroredÂÙ$32b4c5a4-f5e4-457d-b09d-531215fda61bŠ¦queuedÂ¤logs§runningÂ¦output†¤bodyÚØ<div class="pluto-docs-binding">
<span id="find_feasible_dual">find_feasible_dual</span>
<div class="markdown"><p>Tries to find a feasible solution <span class="tex">$&#40;f, g&#41;$</span> to the dual problem given a plan <span class="tex">$P$</span>.</p>
<ul>
<li><p><code>G</code> &#40;the graph associated with the transport plan&#41; is an adjacency matrix of the bi-partite network.</p>
</li>
<li><p><code>C</code> is the cost matrix</p>
</li>
</ul>


</div>
</div>
¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÙÃL.D×°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$32b4c5a4-f5e4-457d-b09d-531215fda61b¹depends_on_disabled_cellsÂ§runtimeÎ Fó+µpublished_object_keys¸depends_on_skipped_cellsÂ§erroredÂÙ$cb5ecc78-6ffc-44ea-94cd-d80d8b079423Š¦queuedÂ¤logs§runningÂ¦output†¤bodyÙ.<div class="markdown"><h4>Packages</h4>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÙÃL	¤¾­°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$cb5ecc78-6ffc-44ea-94cd-d80d8b079423¹depends_on_disabled_cellsÂ§runtimeÎ 6ÿµpublished_object_keys¸depends_on_skipped_cellsÂ§erroredÂÙ$c8cd4eff-8702-42a2-8b40-8a789ea4a37fŠ¦queuedÂ¤logs§runningÂ¦output†¤body ¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÙÃL-2¨T°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$c8cd4eff-8702-42a2-8b40-8a789ea4a37f¹depends_on_disabled_cellsÂ§runtimeÎ&c³µpublished_object_keys¸depends_on_skipped_cellsÂ§erroredÂÙ$187de006-8830-11ec-3fb7-297fcaedd55eŠ¦queuedÂ¤logs§runningÂ¦output†¤bodyÚ<div class="pluto-docs-binding">
<span id="north_west">north_west</span>
<div class="markdown"><pre><code>north_west&#40;Î¼, Î½&#41;</code></pre>
<p>Finds an initial transport plan that respect the marginal constraints <span class="tex">$&#40;\mu,\nu&#41;$</span>.</p>


</div>
</div>
¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÙÃL-œ¹¦°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$187de006-8830-11ec-3fb7-297fcaedd55e¹depends_on_disabled_cellsÂ§runtimeÎ N}›µpublished_object_keys¸depends_on_skipped_cellsÂ§erroredÂÙ$c147499e-bb03-428a-8acf-49722fd54c7eŠ¦queuedÂ¤logs§runningÂ¦output†¤bodyÙ@<div class="markdown"><h1>Putting it all together...</h1>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÙÃL	£cÐ°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$c147499e-bb03-428a-8acf-49722fd54c7e¹depends_on_disabled_cellsÂ§runtimeÎ ¶¼µpublished_object_keys¸depends_on_skipped_cellsÂ§erroredÂÙ$96ab200e-603d-4c87-9cc1-c37dbda6ace4Š¦queuedÂ¤logs§runningÂ¦output†¤bodyƒ¨elements’’’…¦prefix®CartesianIndex¨elements”’’´CartesianIndex(2, 3)ªtext/plain’’´CartesianIndex(3, 3)ªtext/plain’’´CartesianIndex(3, 1)ªtext/plain’’´CartesianIndex(2, 1)ªtext/plain¤type¥Array¬prefix_short ¨objectid°21b6f40cdab6cb7aÙ!application/vnd.pluto.tree+object’’…¦prefix§Float64¨elements”’’£0.0ªtext/plain’’¨0.333333ªtext/plain’’£0.0ªtext/plain’’¨0.333333ªtext/plain¤type¥Array¬prefix_short ¨objectid°94fa88b4413df2cfÙ!application/vnd.pluto.tree+object¤type¥Tuple¨objectid°5ca8dd86d8cac9ae¤mimeÙ!application/vnd.pluto.tree+object¬rootassigneeÀ²last_run_timestampËAÙÃL.»û/°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$96ab200e-603d-4c87-9cc1-c37dbda6ace4¹depends_on_disabled_cellsÂ§runtimeÎ M¿µpublished_object_keys¸depends_on_skipped_cellsÂ§erroredÂÙ$aa5810ed-b4a0-41fa-bdfd-95df64edf677Š¦queuedÂ¤logs§runningÂ¦output†¤bodyÙ$emd (generic function with 1 method)¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÙÃL/L‚0°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$aa5810ed-b4a0-41fa-bdfd-95df64edf677¹depends_on_disabled_cellsÂ§runtimeÎ>Äµpublished_object_keys¸depends_on_skipped_cellsÂ§erroredÂÙ$b73c42fd-7a52-45d0-b9a3-ede4dcc61e36Š¦queuedÂ¤logs§runningÂ¦output†¤bodyÙk3Ã—3 Matrix{Float64}:
 0.25       0.0        0.0
 0.0        0.25       0.0
 0.0833333  0.0833333  0.333333¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÙÃL/€‘ó°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$b73c42fd-7a52-45d0-b9a3-ede4dcc61e36¹depends_on_disabled_cellsÂ§runtimeÎÐðóµpublished_object_keys¸depends_on_skipped_cellsÂ§erroredÂÙ$4b2c7693-7873-42b3-85d3-79712fee730dŠ¦queuedÂ¤logs§runningÂ¦output†¤bodyÙ%emd2 (generic function with 1 method)¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÙÃL/‰Tz°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$4b2c7693-7873-42b3-85d3-79712fee730d¹depends_on_disabled_cellsÂ§runtimeÎ ÞIµpublished_object_keys¸depends_on_skipped_cellsÂ§erroredÂÙ$1030d263-d188-49d0-b9da-5d02810bba9bŠ¦queuedÂ¤logs§runningÂ¦output†¤bodyÚ{
<div class='pluto-test call correct pass infix-operator'>
	<script>
	
	const div = currentScript.parentElement
	div.addEventListener("click", (e) => {
		if(!div.classList.contains("expanded") || e.target.closest("pt-dot:not(.floating)") != null){
			div.classList.toggle("expanded")
			e.stopPropagation()
		}
	})
	
	const throttled = (f, delay) => {
		const waiting = { current: false }
		return () => {
			if (!waiting.current) {
				f()
				waiting.current = true
				setTimeout(() => {
					f()
					waiting.current = false
				}, delay)
			}
		}
	}
	
	const dot = div.querySelector("pt-dot")
	const dot_top = div.querySelector("pt-dot.top")
	const dot_bot = div.querySelector("pt-dot.bottom")
	
	const is_chrome = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor)
	const is_firefox = /Firefox/.test(navigator.userAgent) && /Mozilla/.test(navigator.userAgent)
	
	// safari is too slow
	
	if(is_chrome || is_firefox){

	const intersect = (r) => {
		const topdistance = r.top
		const botdistance = window.innerHeight - r.bottom
	
		
		const t = (x) => `translate(${2*Math.sqrt(Math.max(0,-50-x))}px,0)`
		dot_top.style.transform = t(topdistance)
		dot_bot.style.transform = t(botdistance)

		div.classList.toggle("show-top-float", topdistance < 4)
		div.classList.toggle("show-bottom-float", botdistance < 4)
	}
	
	intersect(dot.getBoundingClientRect())
	
	const scroll_listener = throttled(() => {
		intersect(dot.getBoundingClientRect())
	}, 200)
	
	window.addEventListener("scroll", scroll_listener)

	let observer = new IntersectionObserver((es) => {
		const e = es[0]
		intersect(e.boundingClientRect)
	},  {
	  rootMargin: '-4px',
	  threshold: 1.0
	});

	observer.observe(dot)
	invalidation.then(() => {
		window.removeEventListener("scroll", scroll_listener)
		observer.unobserve(dot)
	})
	
	Array.from(div.querySelectorAll("pt-dot.floating")).forEach(e => {
		e.addEventListener("click", () => dot.scrollIntoView({behavior: "smooth", block: "center", inline: "nearest"}))
	})
	
	}
	
	</script>
	<pt-dot></pt-dot>
	<pt-dot class="floating top"></pt-dot>
	<pt-dot class="floating bottom"></pt-dot>

	<p-frame-viewer>
	<p-frames>
	<slotted-code>
<line-like><pre-ish>(north_west(Î¼, Î½))[1] == P</pre-ish></line-like>
</slotted-code><slotted-code>
<line-like><pluto-display></pluto-display><script id=yoqbhbvtvubpkbfo>const body = /* See the documentation for AbstractPlutoDingetjes.Display.published_to_js */ getPublishedObject("eb27072a-8a3b-11ef-370b-812543c54790/e2bb37d017f82f33");const mime = "text/plain";const create_new = this == null || this._mime !== mime;const display = create_new ? currentScript.previousElementSibling : this;display.persist_js_state = true;display.sanitize_html = false;display.body = body;if(create_new) {        display.mime = mime;        display._mime = mime;}return display;</script><pre-ish> == P</pre-ish></line-like>
</slotted-code><slotted-code>
<line-like><pluto-display></pluto-display><script id=pzdffkcgelkphiop>const body = /* See the documentation for AbstractPlutoDingetjes.Display.published_to_js */ getPublishedObject("eb27072a-8a3b-11ef-370b-812543c54790/e2bb37d017f82f33");const mime = "text/plain";const create_new = this == null || this._mime !== mime;const display = create_new ? currentScript.previousElementSibling : this;display.persist_js_state = true;display.sanitize_html = false;display.body = body;if(create_new) {        display.mime = mime;        display._mime = mime;}return display;</script><pre-ish> == </pre-ish><pluto-display></pluto-display><script id=nosudjodvuejmfuy>const body = /* See the documentation for AbstractPlutoDingetjes.Display.published_to_js */ getPublishedObject("eb27072a-8a3b-11ef-370b-812543c54790/e2bb37d017f82f33");const mime = "text/plain";const create_new = this == null || this._mime !== mime;const display = create_new ? currentScript.previousElementSibling : this;display.persist_js_state = true;display.sanitize_html = false;display.body = body;if(create_new) {        display.mime = mime;        display._mime = mime;}return display;</script><pre-ish></pre-ish></line-like>
</slotted-code><slotted-code>
<line-like><pluto-display></pluto-display><script id=opctvgxzhbiwcwte>const body = /* See the documentation for AbstractPlutoDingetjes.Display.published_to_js */ getPublishedObject("eb27072a-8a3b-11ef-370b-812543c54790/eeaeaa7a973499cf");const mime = "text/plain";const create_new = this == null || this._mime !== mime;const display = create_new ? currentScript.previousElementSibling : this;display.persist_js_state = true;display.sanitize_html = false;display.body = body;if(create_new) {        display.mime = mime;        display._mime = mime;}return display;</script><pre-ish></pre-ish></line-like>
</slotted-code>
	</p-frames>
	
	<p-frame-controls>
		<img src="https://cdn.jsdelivr.net/gh/ionic-team/ionicons@5.5.1/src/svg/time-outline.svg" style="width: 1em; height: 1em; transform: scale(-1,1); opacity: .5; margin-left: 2em;">
		<input class="timescrub" style="filter: hue-rotate(149deg) grayscale(.9);" type=range min=1 max='4' value='1'>
	</p-frame-controls>
	
	
	<script>
	const div = currentScript.parentElement
	
	const input = div.querySelector(":scope > p-frame-controls > input.timescrub")
	const frames = div.querySelector(":scope > p-frames")
	
	const setviz = () => {
		Array.from(frames.children).forEach((f,i) => {
			f.style.display = i + 1 === input.valueAsNumber ? "inherit" : "none"
		})
	}
	
	setviz()
	
	input.addEventListener("input", setviz)
	</script>

	<style>
	PlutoTest.PlutoStylesheet("p-frame-viewer {\n\tdisplay: inline-flex;\n\tflex-direction: column;\n}\np-frames,\np-frame-controls {\n\tdisplay: inline-flex;\n}\n")
	</style>
</p-frame-viewer>
</div>
<style>
pt-dot {
	flex: 0 0 auto;
	background: grey;
	width: 1em;
	height: 1em;
	bottom: -.1em;
	border-radius: 100%;
	margin-right: .7em;
	display: block;
	position: relative;
	cursor: pointer;
}

pt-dot.floating {
	position: fixed;
	z-index: 60;
	visibility: hidden;
	transition: transform linear 240ms;
	opacity: .8;
}
.show-top-float > pt-dot.floating.top,
.show-bottom-float > pt-dot.floating.bottom {
	visibility: visible;
}

pt-dot.floating.top {
	top: 5px;
}
pt-dot.floating.bottom {
	bottom: 5px;
}


.fail > pt-dot {
	background: #f75d5d;

}
.pass > pt-dot {
	background: #56a038;
}

@keyframes fadeout {
    0% { opacity: 1;}
    100% { opacity: 0; pointer-events: none;}
}


.pass > pt-dot.floating {
    animation: fadeout 2s;

	animation-fill-mode: both;
	animation-delay: 2s;

	/*opacity: 0.4;*/
}


.pluto-test {
	font-family: "JuliaMono", monospace;
	font-size: 0.75rem;
	white-space: normal;
	padding: 4px;

	min-height: 25px;
}


.pluto-test.pass {
	color: rgba(0, 0, 0, 0.5);
}

@media (prefers-color-scheme: dark) {
	.pluto-test.pass {
		color: rgba(200, 200, 200, 0.5);
	}
}

.pluto-test.fail {
background: linear-gradient(90deg, #ff2e2e14, transparent);
border-radius: 7px;
}


.pluto-test>.arg_result {
	flex: 0 0 auto;
}

.pluto-test>.arg_result>div,
.pluto-test>.arg_result>div>pluto-display>div {
	display: inline-flex;
}


.pluto-test>.comma {
	margin-right: .5em;
}

.pluto-test.call>code {
	padding: 0px;
}

.pluto-test.call.infix-operator>div {
	overflow-x: auto;
}

.pluto-test {
	display: flex;
	align-items: baseline;
}

.pluto-test.call.infix-operator>.fname {
	margin: 0px .6em;
	/*color: darkred;*/
}


/* expanding */


.pluto-test:not(.expanded) {
	cursor: pointer;
}

.pluto-test:not(.expanded) > p-frame-viewer > p-frame-controls {
	display: none;
	
}

.pluto-test.expanded > p-frame-viewer {
    max-width: 100%;
}
.pluto-test.expanded > p-frame-viewer > p-frames > slotted-code > line-like {
	flex-wrap: wrap;
}
.pluto-test.expanded > p-frame-viewer > p-frames > slotted-code > line-like > pluto-display[mime="application/vnd.pluto.tree+object"] {
	/*flex-basis: 100%;*/
}

slotted-code {
	font-family: "JuliaMono", monospace;
	font-size: .75rem;
	display: flex;
	flex-direction: column;
}
pre-ish {
	white-space: pre;
}

line-like {
	display: flex;
	align-items: baseline;
}

</style>


¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÙÃL.A	Õ°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$1030d263-d188-49d0-b9da-5d02810bba9b¹depends_on_disabled_cellsÂ§runtimeÎ'>iµpublished_object_keys’Ù5eb27072a-8a3b-11ef-370b-812543c54790/e2bb37d017f82f33Ù5eb27072a-8a3b-11ef-370b-812543c54790/eeaeaa7a973499cf¸depends_on_skipped_cellsÂ§erroredÂÙ$1ba4e1d2-a260-4f48-866c-821e53c30506Š¦queuedÂ¤logs§runningÂ¦output†¤bodyÙ¾<div class="markdown"><h1>The Network Simplex</h1>
<p>This is a textbook implementation of the Network Simplex algorithm from the book &quot;Computational Optimal Transport&quot;.</p>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÙÃL	£ Å°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$1ba4e1d2-a260-4f48-866c-821e53c30506¹depends_on_disabled_cellsÂ§runtimeÎ Ù[µpublished_object_keys¸depends_on_skipped_cellsÂ§erroredÂÙ$aac9efe0-d6a1-4587-99ec-46e0f1411c85Š¦queuedÂ¤logs§runningÂ¦output†¤bodyÙ.collect_cycle (generic function with 1 method)¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÙÃL.Q³³°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$aac9efe0-d6a1-4587-99ec-46e0f1411c85¹depends_on_disabled_cellsÂ§runtimeÎ @)µpublished_object_keys¸depends_on_skipped_cellsÂ§erroredÂÙ$1ee92bf4-835f-4c62-9bd5-5d96a86e9d8bŠ¦queuedÂ¤logs§runningÂ¦output†¤bodyƒ¨elements–’’´CartesianIndex(1, 2)ªtext/plain’’…¦prefix§Float64¨elements“’’£0.0ªtext/plain’’£0.0ªtext/plain’’£0.0ªtext/plain¤type¥Array¬prefix_short ¨objectid°820e838415a0efc7Ù!application/vnd.pluto.tree+object’’…¦prefix§Float64¨elements“’’£1.0ªtext/plain’’£1.0ªtext/plain’’£1.0ªtext/plain¤type¥Array¬prefix_short ¨objectid°6e2ed4fc6de19374Ù!application/vnd.pluto.tree+object’’£0.0ªtext/plain’’£1.0ªtext/plain’’£0.0ªtext/plain¤type¥Tuple¨objectid°8a086e232e932865¤mimeÙ!application/vnd.pluto.tree+object¬rootassigneeÀ²last_run_timestampËAÙÃL.ºöˆ°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$1ee92bf4-835f-4c62-9bd5-5d96a86e9d8b¹depends_on_disabled_cellsÂ§runtimeÎ6µpublished_object_keys¸depends_on_skipped_cellsÂ§erroredÂÙ$d29bbd55-4b0c-4fa0-8bd7-d9b85d7d7a10Š¦queuedÂ¤logs§runningÂ¦output†¤body ¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÙÃL-UÚ°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$d29bbd55-4b0c-4fa0-8bd7-d9b85d7d7a10¹depends_on_disabled_cellsÂ§runtimeÎ µpublished_object_keys¸depends_on_skipped_cellsÂ§erroredÂÙ$616cfde6-190b-403b-8d1c-da2f4eb385adŠ¦queuedÂ¤logs§runningÂ¦output†¤body ¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÙÃL3Ãaž°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$616cfde6-190b-403b-8d1c-da2f4eb385ad¹depends_on_disabled_cellsÂ§runtimeÎÖd.µpublished_object_keys¸depends_on_skipped_cellsÂ§erroredÂÙ$65dd721e-20aa-4a2b-abb4-46f04d922aeeŠ¦queuedÂ¤logs§runningÂ¦output†¤bodyÙ@<div class="markdown"><h2>The North-West Corner rule</h2>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÙÃL	£Î°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$65dd721e-20aa-4a2b-abb4-46f04d922aee¹depends_on_disabled_cellsÂ§runtimeÎ Óµpublished_object_keys¸depends_on_skipped_cellsÂ§erroredÂ±cell_dependenciesÞ Ù$fff3fe40-b944-46ed-aea1-3d550ed5fbb0„´precedence_heuristic	§cell_idÙ$fff3fe40-b944-46ed-aea1-3d550ed5fbb0´downstream_cells_map´find_suboptimal_edge’Ù$1ee92bf4-835f-4c62-9bd5-5d96a86e9d8bÙ$aa5810ed-b4a0-41fa-bdfd-95df64edf677²upstream_cells_map¤@doc¥Tuple£pop¦isless®CartesianIndex©@inboundsº#___this_pluto_module_name¡>£Any§nothing¡<©eachindex¡-¡+¥UnionÙ$3be07e02-b95f-44a2-9491-f39a1a1c2617„´precedence_heuristic	§cell_idÙ$3be07e02-b95f-44a2-9491-f39a1a1c2617´downstream_cells_map€²upstream_cells_map…¥randn¤emd2‘Ù$4b2c7693-7873-42b3-85d3-79712fee730d¡/¤fill¹BenchmarkTools.@benchmarkÙ$521f7c7a-823d-4873-8484-66c17825b966„´precedence_heuristic	§cell_idÙ$521f7c7a-823d-4873-8484-66c17825b966´downstream_cells_map€²upstream_cells_map‚§@md_str¨getindexÙ$9bef5380-7275-42de-99cc-597aa72b0abc„´precedence_heuristic	§cell_idÙ$9bef5380-7275-42de-99cc-597aa72b0abc´downstream_cells_map€²upstream_cells_map‚§@md_str¨getindexÙ$a05afd19-3bae-4479-b8f0-86f373094113„´precedence_heuristic	§cell_idÙ$a05afd19-3bae-4479-b8f0-86f373094113´downstream_cells_mapƒ¤GLPK‘Ù$616cfde6-190b-403b-8d1c-da2f4eb385ad®BenchmarkTools°OptimalTransport‘Ù$616cfde6-190b-403b-8d1c-da2f4eb385ad²upstream_cells_map€Ù$5584d358-eab9-48fa-a880-62080674df12„´precedence_heuristic	§cell_idÙ$5584d358-eab9-48fa-a880-62080674df12´downstream_cells_map€²upstream_cells_map¯TableOfContentsÙ$3e4a5f6d-d4ef-4372-9762-388b92f0755b„´precedence_heuristic	§cell_idÙ$3e4a5f6d-d4ef-4372-9762-388b92f0755b´downstream_cells_map€²upstream_cells_map‚§@md_str¨getindexÙ$e7aea362-3595-45d2-bb0a-512e241c17bc„´precedence_heuristic	§cell_idÙ$e7aea362-3595-45d2-bb0a-512e241c17bc´downstream_cells_map€²upstream_cells_mapƒ­collect_cycle‘Ù$aac9efe0-d6a1-4587-99ec-46e0f1411c85®CartesianIndex¤BoolÙ$32b4c5a4-f5e4-457d-b09d-531215fda61b„´precedence_heuristic	§cell_idÙ$32b4c5a4-f5e4-457d-b09d-531215fda61b´downstream_cells_map²find_feasible_dual’Ù$1ee92bf4-835f-4c62-9bd5-5d96a86e9d8bÙ$aa5810ed-b4a0-41fa-bdfd-95df64edf677²upstream_cells_mapÞ ¤@doc¡:¥@view¥Tuple¡>¥zeros¦islessº#___this_pluto_module_name¤size£Any§findall¡<¡-¥push!£Int¦eltype¡+¥Union£âˆˆ¢in£SetÙ$cb5ecc78-6ffc-44ea-94cd-d80d8b079423„´precedence_heuristic	§cell_idÙ$cb5ecc78-6ffc-44ea-94cd-d80d8b079423´downstream_cells_map€²upstream_cells_map‚§@md_str¨getindexÙ$c8cd4eff-8702-42a2-8b40-8a789ea4a37f„´precedence_heuristic§cell_idÙ$c8cd4eff-8702-42a2-8b40-8a789ea4a37f´downstream_cells_map‚§PlutoUI©PlutoTest‘Ù$1030d263-d188-49d0-b9da-5d02810bba9b²upstream_cells_map€Ù$187de006-8830-11ec-3fb7-297fcaedd55e„´precedence_heuristic	§cell_idÙ$187de006-8830-11ec-3fb7-297fcaedd55e´downstream_cells_mapªnorth_west“Ù$1030d263-d188-49d0-b9da-5d02810bba9bÙ$1ee92bf4-835f-4c62-9bd5-5d96a86e9d8bÙ$aa5810ed-b4a0-41fa-bdfd-95df64edf677²upstream_cells_mapÞ ¤@doc¥Tuple¡>¥zeros¦islessº#___this_pluto_module_name£Any¦length¡<¢<=¡-¦falses£min¦eltype¡+¥Union¢==Ù$c147499e-bb03-428a-8acf-49722fd54c7e„´precedence_heuristic	§cell_idÙ$c147499e-bb03-428a-8acf-49722fd54c7e´downstream_cells_map€²upstream_cells_map‚§@md_str¨getindexÙ$96ab200e-603d-4c87-9cc1-c37dbda6ace4„´precedence_heuristic	§cell_idÙ$96ab200e-603d-4c87-9cc1-c37dbda6ace4´downstream_cells_map€²upstream_cells_mapƒ­collect_cycle‘Ù$aac9efe0-d6a1-4587-99ec-46e0f1411c85®CartesianIndex¤BoolÙ$aa5810ed-b4a0-41fa-bdfd-95df64edf677„´precedence_heuristic	§cell_idÙ$aa5810ed-b4a0-41fa-bdfd-95df64edf677´downstream_cells_map£emd’Ù$b73c42fd-7a52-45d0-b9a3-ede4dcc61e36Ù$4b2c7693-7873-42b3-85d3-79712fee730d²upstream_cells_mapÞ ¥@goto§@assert£rem´find_suboptimal_edge‘Ù$fff3fe40-b944-46ed-aea1-3d550ed5fbb0¤dual¢==©isnothing³Base.AssertionErrorªnorth_west‘Ù$187de006-8830-11ec-3fb7-297fcaedd55e¡:ªBase.throw¥@view¡%£end¥begin¤Base¦@label­collect_cycle‘Ù$aac9efe0-d6a1-4587-99ec-46e0f1411c85¦argmin¡-©enumerate¡+¡*²find_feasible_dual‘Ù$32b4c5a4-f5e4-457d-b09d-531215fda61bÙ$b73c42fd-7a52-45d0-b9a3-ede4dcc61e36„´precedence_heuristic	§cell_idÙ$b73c42fd-7a52-45d0-b9a3-ede4dcc61e36´downstream_cells_map€²upstream_cells_map‚¡/£emd‘Ù$aa5810ed-b4a0-41fa-bdfd-95df64edf677Ù$4b2c7693-7873-42b3-85d3-79712fee730d„´precedence_heuristic	§cell_idÙ$4b2c7693-7873-42b3-85d3-79712fee730d´downstream_cells_map¤emd2’Ù$3be07e02-b95f-44a2-9491-f39a1a1c2617Ù$616cfde6-190b-403b-8d1c-da2f4eb385ad²upstream_cells_mapƒ£sum¡*£emd‘Ù$aa5810ed-b4a0-41fa-bdfd-95df64edf677Ù$1030d263-d188-49d0-b9da-5d02810bba9b„´precedence_heuristic	§cell_idÙ$1030d263-d188-49d0-b9da-5d02810bba9b´downstream_cells_map€²upstream_cells_mapÞ ¤Core·PlutoTest.Test.Returned³PlutoTest.WrongCallºPlutoTest.Base.catch_stack±PlutoTest.rethrow¥@test¯PlutoTest.push!¹PlutoTest.catch_backtrace­PlutoTest.===³PlutoTest.ErrorCall´PlutoTest.Test.Threw¶PlutoTest.Test.do_test¹PlutoTest.unwrap_computed¢==ªnorth_west‘Ù$187de006-8830-11ec-3fb7-297fcaedd55e¯PlutoTest.throw»PlutoTest.CapturedException©PlutoTest‘Ù$c8cd4eff-8702-42a2-8b40-8a789ea4a37f²PlutoTest.ComputedµPlutoTest.CorrectCall´PlutoTest.stacktrace­PlutoTest.isaÙ#PlutoTest.PartialEvaluatedException®PlutoTest.lastªCore._exprÙ$1ba4e1d2-a260-4f48-866c-821e53c30506„´precedence_heuristic	§cell_idÙ$1ba4e1d2-a260-4f48-866c-821e53c30506´downstream_cells_map€²upstream_cells_map‚§@md_str¨getindexÙ$aac9efe0-d6a1-4587-99ec-46e0f1411c85„´precedence_heuristic	§cell_idÙ$aac9efe0-d6a1-4587-99ec-46e0f1411c85´downstream_cells_map­collect_cycle“Ù$e7aea362-3595-45d2-bb0a-512e241c17bcÙ$96ab200e-603d-4c87-9cc1-c37dbda6ace4Ù$aa5810ed-b4a0-41fa-bdfd-95df64edf677²upstream_cells_mapÞ ¡:¥@view¡>¤pop!¦isless®CartesianIndex§Float64¤size£end§nothing§findall¡<¡-¥push!£Int¡+£âˆˆ§isempty¢==¢in£SetÙ$1ee92bf4-835f-4c62-9bd5-5d96a86e9d8b„´precedence_heuristic	§cell_idÙ$1ee92bf4-835f-4c62-9bd5-5d96a86e9d8b´downstream_cells_map€²upstream_cells_mapˆ´find_suboptimal_edge‘Ù$fff3fe40-b944-46ed-aea1-3d550ed5fbb0ªnorth_west‘Ù$187de006-8830-11ec-3fb7-297fcaedd55e¡I¡/¦Matrix§Float64²find_feasible_dual‘Ù$32b4c5a4-f5e4-457d-b09d-531215fda61b¤fillÙ$d29bbd55-4b0c-4fa0-8bd7-d9b85d7d7a10„´precedence_heuristic§cell_idÙ$d29bbd55-4b0c-4fa0-8bd7-d9b85d7d7a10´downstream_cells_map­LinearAlgebra²upstream_cells_map€Ù$616cfde6-190b-403b-8d1c-da2f4eb385ad„´precedence_heuristic	§cell_idÙ$616cfde6-190b-403b-8d1c-da2f4eb385ad´downstream_cells_map€²upstream_cells_map£â‰ˆ¥randn¤emd2‘Ù$4b2c7693-7873-42b3-85d3-79712fee730d®GLPK.Optimizer¤GLPK‘Ù$a05afd19-3bae-4479-b8f0-86f373094113§@assert¡:µOptimalTransport.emd2¥throw¡/®AssertionError°OptimalTransport‘Ù$a05afd19-3bae-4479-b8f0-86f373094113¤fillÙ$65dd721e-20aa-4a2b-abb4-46f04d922aee„´precedence_heuristic	§cell_idÙ$65dd721e-20aa-4a2b-abb4-46f04d922aee´downstream_cells_map€²upstream_cells_map‚§@md_str¨getindex´cell_execution_orderÜ Ù$d29bbd55-4b0c-4fa0-8bd7-d9b85d7d7a10Ù$c8cd4eff-8702-42a2-8b40-8a789ea4a37fÙ$1ba4e1d2-a260-4f48-866c-821e53c30506Ù$65dd721e-20aa-4a2b-abb4-46f04d922aeeÙ$187de006-8830-11ec-3fb7-297fcaedd55eÙ$1030d263-d188-49d0-b9da-5d02810bba9bÙ$3e4a5f6d-d4ef-4372-9762-388b92f0755bÙ$32b4c5a4-f5e4-457d-b09d-531215fda61bÙ$fff3fe40-b944-46ed-aea1-3d550ed5fbb0Ù$9bef5380-7275-42de-99cc-597aa72b0abcÙ$aac9efe0-d6a1-4587-99ec-46e0f1411c85Ù$e7aea362-3595-45d2-bb0a-512e241c17bcÙ$1ee92bf4-835f-4c62-9bd5-5d96a86e9d8bÙ$96ab200e-603d-4c87-9cc1-c37dbda6ace4Ù$a05afd19-3bae-4479-b8f0-86f373094113Ù$c147499e-bb03-428a-8acf-49722fd54c7eÙ$aa5810ed-b4a0-41fa-bdfd-95df64edf677Ù$b73c42fd-7a52-45d0-b9a3-ede4dcc61e36Ù$521f7c7a-823d-4873-8484-66c17825b966Ù$4b2c7693-7873-42b3-85d3-79712fee730dÙ$3be07e02-b95f-44a2-9491-f39a1a1c2617Ù$616cfde6-190b-403b-8d1c-da2f4eb385adÙ$cb5ecc78-6ffc-44ea-94cd-d80d8b079423Ù$5584d358-eab9-48fa-a880-62080674df12´last_hot_reload_timeË        ©shortpath²network_simplex.jl®process_status¥ready¤pathÙ8/home/runner/work/Notebooks/Notebooks/network_simplex.jl­pluto_version¨v0.19.47®last_save_timeËAÙÃL	 ˜žªcell_orderÜ Ù$1ba4e1d2-a260-4f48-866c-821e53c30506Ù$65dd721e-20aa-4a2b-abb4-46f04d922aeeÙ$187de006-8830-11ec-3fb7-297fcaedd55eÙ$1030d263-d188-49d0-b9da-5d02810bba9bÙ$3e4a5f6d-d4ef-4372-9762-388b92f0755bÙ$32b4c5a4-f5e4-457d-b09d-531215fda61bÙ$fff3fe40-b944-46ed-aea1-3d550ed5fbb0Ù$9bef5380-7275-42de-99cc-597aa72b0abcÙ$e7aea362-3595-45d2-bb0a-512e241c17bcÙ$aac9efe0-d6a1-4587-99ec-46e0f1411c85Ù$1ee92bf4-835f-4c62-9bd5-5d96a86e9d8bÙ$96ab200e-603d-4c87-9cc1-c37dbda6ace4Ù$a05afd19-3bae-4479-b8f0-86f373094113Ù$3be07e02-b95f-44a2-9491-f39a1a1c2617Ù$616cfde6-190b-403b-8d1c-da2f4eb385adÙ$b73c42fd-7a52-45d0-b9a3-ede4dcc61e36Ù$c147499e-bb03-428a-8acf-49722fd54c7eÙ$aa5810ed-b4a0-41fa-bdfd-95df64edf677Ù$521f7c7a-823d-4873-8484-66c17825b966Ù$4b2c7693-7873-42b3-85d3-79712fee730dÙ$cb5ecc78-6ffc-44ea-94cd-d80d8b079423Ù$5584d358-eab9-48fa-a880-62080674df12Ù$d29bbd55-4b0c-4fa0-8bd7-d9b85d7d7a10Ù$c8cd4eff-8702-42a2-8b40-8a789ea4a37f±published_objects‚Ù5eb27072a-8a3b-11ef-370b-812543c54790/e2bb37d017f82f33ÙB3Ã—3 Matrix{Float64}:
 0.2  0.0  0.0
 0.3  0.1  0.1
 0.0  0.0  0.3Ù5eb27072a-8a3b-11ef-370b-812543c54790/eeaeaa7a973499cf¤true¥nbpkgŠ¯install_time_nsÏ   L‰­K¬instantiatedÃ²installed_versions†¤GLPK¥1.1.3­LinearAlgebra¦stdlib§PlutoUI¦0.7.60©PlutoTest¥0.2.2®BenchmarkTools¥1.3.2°OptimalTransport¦0.3.19°terminal_outputs‡¤GLPKÚ)§
[0m[1mInstantiating...[22m
[90m===[39m
[33m[1mâ”Œ [22m[39m[33m[1mWarning: [22m[39mThe active manifest file has dependencies that were resolved with a different julia version (1.8.2). Unexpected behavior may occur.
[33m[1mâ”” [22m[39m[90m@ /tmp/jl_oDhDHt/Manifest.toml:0[39m
[32m[1m   Installed[22m[39m DiffRules â”€â”€â”€â”€â”€â”€â”€â”€ v1.12.1
            Installed           Parsers â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ v2.5.0                     [32m[1m[22m[39m
            Installed           PlutoUI â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ v0.7.48                    [32m[1m[22m[39m
            Installed           ForwardDiff â”€â”€â”€â”€â”€â”€ v0.10.32                   [32m[1m[22m[39m
            Installed           NNlib â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ v0.8.10                    [32m[1m[22m[39m
            Installed           GLPK â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ v1.1.0                     [32m[1m[22m[39m
            Installed           Distributions â”€â”€â”€â”€ v0.25.77                   [32m[1m[22m[39m
            Installed           MathOptInterface â”€ v1.9.0                     [32m[1m[22m[39m
                                                                              
[0m[1mResolving...[22m
[90m===[39m
[36m[1mâ”Œ [22m[39m[36m[1mInfo: [22m[39mOperation failed. Updating registries and trying again...
[36m[1mâ”‚ [22m[39m  exception =
[36m[1mâ”‚ [22m[39m   Unsatisfiable requirements detected for package SortingAlgorithms [a2af1166]:
[36m[1mâ”‚ [22m[39m    SortingAlgorithms [a2af1166] log:
[36m[1mâ”‚ [22m[39m    â”œâ”€possible versions are: 0.3.0 - 1.2.1 or uninstalled
[36m[1mâ”‚ [22m[39m    â”œâ”€restricted to versions 1.0.1 by an explicit requirement, leaving only versions: 1.0.1
[36m[1mâ”” [22m[39m    â””â”€restricted by julia compatibility requirements to versions: 1.1.0 - 1.2.1 or uninstalled â€” no versions left

[0m[1mResolving...[22m
[90m===[39m
[33m[1mâ”Œ [22m[39m[33m[1mWarning: [22m[39mOperation failed. Removing Manifest and trying again...
[33m[1mâ”‚ [22m[39m  exception =
[33m[1mâ”‚ [22m[39m   Unsatisfiable requirements detected for package SortingAlgorithms [a2af1166]:
[33m[1mâ”‚ [22m[39m    SortingAlgorithms [a2af1166] log:
[33m[1mâ”‚ [22m[39m    â”œâ”€possible versions are: 0.3.0 - 1.2.1 or uninstalled
[33m[1mâ”‚ [22m[39m    â”œâ”€restricted to versions 1.0.1 by an explicit requirement, leaving only versions: 1.0.1
[33m[1mâ”‚ [22m[39m    â””â”€restricted by julia compatibility requirements to versions: 1.1.0 - 1.2.1 or uninstalled â€” no versions left
[33m[1mâ”” [22m[39m[90m@ Pluto ~/.julia/packages/Pluto/6smog/src/packages/Packages.jl:494[39m

[0m[1mResolving...[22m
[90m===[39m
[32m[1m   Installed[22m[39m GLPK â”€ v1.1.3
             Updating           `/tmp/jl_oDhDHt/Project.toml`                 [32m[1m[22m[39m
[33mâŒ…[39m [90m[6e4b80f9] [39m[92m+ BenchmarkTools v1.3.2[39m
[33mâŒ…[39m [90m[60bf3e95] [39m[92m+ GLPK v1.1.3[39m
  [90m[7e02d93a] [39m[92m+ OptimalTransport v0.3.19[39m
  [90m[cb4044da] [39m[92m+ PlutoTest v0.2.2[39m
  [90m[7f904dfe] [39m[92m+ PlutoUI v0.7.60[39m
  [90m[37e2e46d] [39m[93m~ LinearAlgebra â‡’ v1.11.0[39m
[32m[1m    Updating[22m[39m `/tmp/jl_oDhDHt/Manifest.toml`
  [90m[6e696c72] [39m[92m+ AbstractPlutoDingetjes v1.3.2[39m
[33mâŒ…[39m [90m[79e6a3ab] [39m[92m+ Adapt v3.7.2[39m
  [90m[66dad0bd] [39m[92m+ AliasTables v1.1.3[39m
  [90m[a9b6321e] [39m[92m+ Atomix v0.1.0[39m
[33mâŒ…[39m [90m[6e4b80f9] [39m[92m+ BenchmarkTools v1.3.2[39m
  [90m[fa961155] [39m[92m+ CEnum v0.5.0[39m
  [90m[d360d2e6] [39m[92m+ ChainRulesCore v1.25.0[39m
  [90m[523fee87] [39m[92m+ CodecBzip2 v0.8.4[39m
  [90m[944b1d66] [39m[92m+ CodecZlib v0.7.6[39m
  [90m[3da002f7] [39m[92m+ ColorTypes v0.11.5[39m
  [90m[bbf7d656] [39m[92m+ CommonSubexpressions v0.3.1[39m
  [90m[34da2185] [39m[92m+ Compat v4.16.0[39m
  [90m[9a962f9c] [39m[92m+ DataAPI v1.16.0[39m
  [90m[864edb3b] [39m[92m+ DataStructures v0.18.20[39m
  [90m[163ba53b] [39m[92m+ DiffResults v1.1.0[39m
  [90m[b552c78f] [39m[92m+ DiffRules v1.15.1[39m
  [90m[b4f34e82] [39m[92m+ Distances v0.10.11[39m
  [90m[31c24e10] [39m[92m+ Distributions v0.25.112[39m
  [90m[ffbed154] [39m[92m+ DocStringExtensions v0.9.3[39m
  [90m[24df6009] [39m[92m+ ExactOptimalTransport v0.2.5[39m
  [90m[1a297f60] [39m[92m+ FillArrays v1.13.0[39m
  [90m[53c48c17] [39m[92m+ FixedPointNumbers v0.8.5[39m
  [90m[f6369f11] [39m[92m+ ForwardDiff v0.10.36[39m
[33mâŒ…[39m [90m[60bf3e95] [39m[92m+ GLPK v1.1.3[39m
[32mâŒƒ[39m [90m[46192b85] [39m[92m+ GPUArraysCore v0.1.5[39m
  [90m[34004b35] [39m[92m+ HypergeometricFunctions v0.3.24[39m
  [90m[47d2ed2b] [39m[92m+ Hyperscript v0.0.5[39m
  [90m[ac1192a8] [39m[92m+ HypertextLiteral v0.9.5[39m
  [90m[b5f81e59] [39m[92m+ IOCapture v0.2.5[39m
  [90m[92d709cd] [39m[92m+ IrrationalConstants v0.2.2[39m
  [90m[42fd0dbc] [39m[92m+ IterativeSolvers v0.9.4[39m
  [90m[692b3bcd] [39m[92m+ JLLWrappers v1.6.1[39m
  [90m[682c06a0] [39m[92m+ JSON v0.21.4[39m
  [90m[63c18a36] [39m[92m+ KernelAbstractions v0.9.28[39m
  [90m[929cbde3] [39m[92m+ LLVM v9.1.2[39m
  [90m[2ab3a3ac] [39m[92m+ LogExpFunctions v0.3.28[39m
  [90m[6c6e2e6c] [39m[92m+ MIMEs v0.1.4[39m
  [90m[1914dd2f] [39m[92m+ MacroTools v0.5.13[39m
  [90m[b8f27783] [39m[92m+ MathOptInterface v1.31.2[39m
  [90m[e1d29d7a] [39m[92m+ Missings v1.2.0[39m
  [90m[d8a4904e] [39m[92m+ MutableArithmetics v1.5.1[39m
[33mâŒ…[39m [90m[872c559c] [39m[92m+ NNlib v0.8.21[39m
  [90m[77ba4419] [39m[92m+ NaNMath v1.0.2[39m
  [90m[7e02d93a] [39m[92m+ OptimalTransport v0.3.19[39m
  [90m[bac558e1] [39m[92m+ OrderedCollections v1.6.3[39m
  [90m[90014a1f] [39m[92m+ PDMats v0.11.31[39m
  [90m[69de0a69] [39m[92m+ Parsers v2.8.1[39m
  [90m[cb4044da] [39m[92m+ PlutoTest v0.2.2[39m
  [90m[7f904dfe] [39m[92m+ PlutoUI v0.7.60[39m
  [90m[aea7be01] [39m[92m+ PrecompileTools v1.2.1[39m
  [90m[21216c6a] [39m[92m+ Preferences v1.4.3[39m
  [90m[43287f4e] [39m[92m+ PtrArrays v1.2.1[39m
  [90m[1fd47b50] [39m[92m+ QuadGK v2.11.1[39m
  [90m[3cdcf5f2] [39m[92m+ RecipesBase v1.3.4[39m
  [90m[189a3867] [39m[92m+ Reexport v1.2.2[39m
  [90m[ae029012] [39m[92m+ Requires v1.3.0[39m
  [90m[79098fc4] [39m[92m+ Rmath v0.8.0[39m
  [90m[a2af1166] [39m[92m+ SortingAlgorithms v1.2.1[39m
  [90m[276daf66] [39m[92m+ SpecialFunctions v2.4.0[39m
  [90m[90137ffa] [39m[92m+ StaticArrays v1.9.7[39m
  [90m[1e83bf80] [39m[92m+ StaticArraysCore v1.4.3[39m
  [90m[10745b16] [39m[92m+ Statistics v1.11.1[39m
  [90m[82ae8749] [39m[92m+ StatsAPI v1.7.0[39m
  [90m[2913bbd2] [39m[92m+ StatsBase v0.34.3[39m
  [90m[4c63d2b9] [39m[92m+ StatsFuns v1.3.2[39m
  [90m[3bb67fe8] [39m[92m+ TranscodingStreams v0.11.3[39m
  [90m[410a4b4d] [39m[92m+ Tricks v0.1.9[39m
  [90m[5c2747f8] [39m[92m+ URIs v1.5.1[39m
  [90m[013be700] [39m[92m+ UnsafeAtomics v0.2.1[39m
  [90m[d80eeb9a] [39m[92m+ UnsafeAtomicsLLVM v0.2.1[39m
  [90m[6e34b625] [39m[92m+ Bzip2_jll v1.0.8+1[39m
  [90m[e8aa6df9] [39m[92m+ GLPK_jll v5.0.1+0[39m
  [90m[dad2f222] [39m[92m+ LLVMExtra_jll v0.0.34+0[39m
  [90m[efe28fd5] [39m[92m+ OpenSpecFun_jll v0.5.5+0[39m
  [90m[f50d1b31] [39m[92m+ Rmath_jll v0.5.1+0[39m
  [90m[0dad84c5] [39m[92m+ ArgTools v1.1.2[39m
  [90m[56f22d72] [39m[92m+ Artifacts v1.11.0[39m
  [90m[2a0f44e3] [39m[92m+ Base64 v1.11.0[39m
  [90m[ade2ca70] [39m[92m+ Dates v1.11.0[39m
  [90m[f43a241f] [39m[92m+ Downloads v1.6.0[39m
  [90m[7b1f6079] [39m[92m+ FileWatching v1.11.0[39m
  [90m[b77e0a4c] [39m[92m+ InteractiveUtils v1.11.0[39m
  [90m[4af54fe1] [39m[92m+ LazyArtifacts v1.11.0[39m
  [90m[b27032c2] [39m[92m+ LibCURL v0.6.4[39m
  [90m[76f85450] [39m[92m+ LibGit2 v1.11.0[39m
  [90m[8f399da3] [39m[92m+ Libdl v1.11.0[39m
  [90m[37e2e46d] [39m[92m+ LinearAlgebra v1.11.0[39m
  [90m[56ddb016] [39m[92m+ Logging v1.11.0[39m
  [90m[d6f4376e] [39m[92m+ Markdown v1.11.0[39m
  [90m[a63ad114] [39m[92m+ Mmap v1.11.0[39m
  [90m[ca575930] [39m[92m+ NetworkOptions v1.2.0[39m
  [90m[44cfe95a] [39m[92m+ Pkg v1.11.0[39m
  [90m[de0858da] [39m[92m+ Printf v1.11.0[39m
  [90m[9abbd945] [39m[92m+ Profile v1.11.0[39m
  [90m[9a3f8284] [39m[92m+ Random v1.11.0[39m
  [90m[ea8e919c] [39m[92m+ SHA v0.7.0[39m
  [90m[9e88b42a] [39m[92m+ Serialization v1.11.0[39m
  [90m[2f01184e] [39m[92m+ SparseArrays v1.11.0[39m
  [90m[4607b0f0] [39m[92m+ SuiteSparse[39m
  [90m[fa267f1f] [39m[92m+ TOML v1.0.3[39m
  [90m[a4e569a6] [39m[92m+ Tar v1.10.0[39m
  [90m[8dfed614] [39m[92m+ Test v1.11.0[39m
  [90m[cf7118a7] [39m[92m+ UUIDs v1.11.0[39m
  [90m[4ec0a83e] [39m[92m+ Unicode v1.11.0[39m
  [90m[e66e0078] [39m[92m+ CompilerSupportLibraries_jll v1.1.1+0[39m
  [90m[781609d7] [39m[92m+ GMP_jll v6.3.0+0[39m
  [90m[deac9b47] [39m[92m+ LibCURL_jll v8.6.0+0[39m
  [90m[e37daf67] [39m[92m+ LibGit2_jll v1.7.2+0[39m
  [90m[29816b5a] [39m[92m+ LibSSH2_jll v1.11.0+1[39m
  [90m[c8ffd9c3] [39m[92m+ MbedTLS_jll v2.28.6+0[39m
  [90m[14a3606d] [39m[92m+ MozillaCACerts_jll v2023.12.12[39m
  [90m[4536629a] [39m[92m+ OpenBLAS_jll v0.3.27+1[39m
  [90m[05823500] [39m[92m+ OpenLibm_jll v0.8.1+2[39m
  [90m[bea87d4a] [39m[92m+ SuiteSparse_jll v7.7.0+0[39m
  [90m[83775a58] [39m[92m+ Zlib_jll v1.2.13+1[39m
  [90m[8e850b90] [39m[92m+ libblastrampoline_jll v5.11.0+0[39m
  [90m[8e850ede] [39m[92m+ nghttp2_jll v1.59.0+0[39m
  [90m[3f19e933] [39m[92m+ p7zip_jll v17.4.0+2[39m
[36m[1m        Info[22m[39m Packages marked with [32mâŒƒ[39m and [33mâŒ…[39m have new versions available. Those with [32mâŒƒ[39m may be upgradable, but those with [33mâŒ…[39m are restricted by compatibility constraints from upgrading. To see why use `status --outdated -m`

[0m[1mInstantiating...[22m
[90m===[39m

[0m[1mPrecompiling...[22m
[90m===[39m
[32m[1m  Activating[22m[39m project at `/tmp/jl_oDhDHt`
[92m[1mPrecompiling[22m[39m project...
   2069.6 ms[32m  âœ“ [39mBenchmarkTools
   3026.9 ms[32m  âœ“ [39mPlutoTest
 114333.0 ms[32m  âœ“ [39m[90mMathOptInterface[39m
   3610.9 ms[32m  âœ“ [39m[90mExactOptimalTransport[39m
   5661.8 ms[32m  âœ“ [39mOptimalTransport
   9560.8 ms[32m  âœ“ [39mGLPK
  6 dependencies successfully precompiled in 127 seconds. 123 already precompiled.ªnbpkg_syncÚ)§
[0m[1mInstantiating...[22m
[90m===[39m
[33m[1mâ”Œ [22m[39m[33m[1mWarning: [22m[39mThe active manifest file has dependencies that were resolved with a different julia version (1.8.2). Unexpected behavior may occur.
[33m[1mâ”” [22m[39m[90m@ /tmp/jl_oDhDHt/Manifest.toml:0[39m
[32m[1m   Installed[22m[39m DiffRules â”€â”€â”€â”€â”€â”€â”€â”€ v1.12.1
            Installed           Parsers â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ v2.5.0                     [32m[1m[22m[39m
            Installed           PlutoUI â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ v0.7.48                    [32m[1m[22m[39m
            Installed           ForwardDiff â”€â”€â”€â”€â”€â”€ v0.10.32                   [32m[1m[22m[39m
            Installed           NNlib â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ v0.8.10                    [32m[1m[22m[39m
            Installed           GLPK â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ v1.1.0                     [32m[1m[22m[39m
            Installed           Distributions â”€â”€â”€â”€ v0.25.77                   [32m[1m[22m[39m
            Installed           MathOptInterface â”€ v1.9.0                     [32m[1m[22m[39m
                                                                              
[0m[1mResolving...[22m
[90m===[39m
[36m[1mâ”Œ [22m[39m[36m[1mInfo: [22m[39mOperation failed. Updating registries and trying again...
[36m[1mâ”‚ [22m[39m  exception =
[36m[1mâ”‚ [22m[39m   Unsatisfiable requirements detected for package SortingAlgorithms [a2af1166]:
[36m[1mâ”‚ [22m[39m    SortingAlgorithms [a2af1166] log:
[36m[1mâ”‚ [22m[39m    â”œâ”€possible versions are: 0.3.0 - 1.2.1 or uninstalled
[36m[1mâ”‚ [22m[39m    â”œâ”€restricted to versions 1.0.1 by an explicit requirement, leaving only versions: 1.0.1
[36m[1mâ”” [22m[39m    â””â”€restricted by julia compatibility requirements to versions: 1.1.0 - 1.2.1 or uninstalled â€” no versions left

[0m[1mResolving...[22m
[90m===[39m
[33m[1mâ”Œ [22m[39m[33m[1mWarning: [22m[39mOperation failed. Removing Manifest and trying again...
[33m[1mâ”‚ [22m[39m  exception =
[33m[1mâ”‚ [22m[39m   Unsatisfiable requirements detected for package SortingAlgorithms [a2af1166]:
[33m[1mâ”‚ [22m[39m    SortingAlgorithms [a2af1166] log:
[33m[1mâ”‚ [22m[39m    â”œâ”€possible versions are: 0.3.0 - 1.2.1 or uninstalled
[33m[1mâ”‚ [22m[39m    â”œâ”€restricted to versions 1.0.1 by an explicit requirement, leaving only versions: 1.0.1
[33m[1mâ”‚ [22m[39m    â””â”€restricted by julia compatibility requirements to versions: 1.1.0 - 1.2.1 or uninstalled â€” no versions left
[33m[1mâ”” [22m[39m[90m@ Pluto ~/.julia/packages/Pluto/6smog/src/packages/Packages.jl:494[39m

[0m[1mResolving...[22m
[90m===[39m
[32m[1m   Installed[22m[39m GLPK â”€ v1.1.3
             Updating           `/tmp/jl_oDhDHt/Project.toml`                 [32m[1m[22m[39m
[33mâŒ…[39m [90m[6e4b80f9] [39m[92m+ BenchmarkTools v1.3.2[39m
[33mâŒ…[39m [90m[60bf3e95] [39m[92m+ GLPK v1.1.3[39m
  [90m[7e02d93a] [39m[92m+ OptimalTransport v0.3.19[39m
  [90m[cb4044da] [39m[92m+ PlutoTest v0.2.2[39m
  [90m[7f904dfe] [39m[92m+ PlutoUI v0.7.60[39m
  [90m[37e2e46d] [39m[93m~ LinearAlgebra â‡’ v1.11.0[39m
[32m[1m    Updating[22m[39m `/tmp/jl_oDhDHt/Manifest.toml`
  [90m[6e696c72] [39m[92m+ AbstractPlutoDingetjes v1.3.2[39m
[33mâŒ…[39m [90m[79e6a3ab] [39m[92m+ Adapt v3.7.2[39m
  [90m[66dad0bd] [39m[92m+ AliasTables v1.1.3[39m
  [90m[a9b6321e] [39m[92m+ Atomix v0.1.0[39m
[33mâŒ…[39m [90m[6e4b80f9] [39m[92m+ BenchmarkTools v1.3.2[39m
  [90m[fa961155] [39m[92m+ CEnum v0.5.0[39m
  [90m[d360d2e6] [39m[92m+ ChainRulesCore v1.25.0[39m
  [90m[523fee87] [39m[92m+ CodecBzip2 v0.8.4[39m
  [90m[944b1d66] [39m[92m+ CodecZlib v0.7.6[39m
  [90m[3da002f7] [39m[92m+ ColorTypes v0.11.5[39m
  [90m[bbf7d656] [39m[92m+ CommonSubexpressions v0.3.1[39m
  [90m[34da2185] [39m[92m+ Compat v4.16.0[39m
  [90m[9a962f9c] [39m[92m+ DataAPI v1.16.0[39m
  [90m[864edb3b] [39m[92m+ DataStructures v0.18.20[39m
  [90m[163ba53b] [39m[92m+ DiffResults v1.1.0[39m
  [90m[b552c78f] [39m[92m+ DiffRules v1.15.1[39m
  [90m[b4f34e82] [39m[92m+ Distances v0.10.11[39m
  [90m[31c24e10] [39m[92m+ Distributions v0.25.112[39m
  [90m[ffbed154] [39m[92m+ DocStringExtensions v0.9.3[39m
  [90m[24df6009] [39m[92m+ ExactOptimalTransport v0.2.5[39m
  [90m[1a297f60] [39m[92m+ FillArrays v1.13.0[39m
  [90m[53c48c17] [39m[92m+ FixedPointNumbers v0.8.5[39m
  [90m[f6369f11] [39m[92m+ ForwardDiff v0.10.36[39m
[33mâŒ…[39m [90m[60bf3e95] [39m[92m+ GLPK v1.1.3[39m
[32mâŒƒ[39m [90m[46192b85] [39m[92m+ GPUArraysCore v0.1.5[39m
  [90m[34004b35] [39m[92m+ HypergeometricFunctions v0.3.24[39m
  [90m[47d2ed2b] [39m[92m+ Hyperscript v0.0.5[39m
  [90m[ac1192a8] [39m[92m+ HypertextLiteral v0.9.5[39m
  [90m[b5f81e59] [39m[92m+ IOCapture v0.2.5[39m
  [90m[92d709cd] [39m[92m+ IrrationalConstants v0.2.2[39m
  [90m[42fd0dbc] [39m[92m+ IterativeSolvers v0.9.4[39m
  [90m[692b3bcd] [39m[92m+ JLLWrappers v1.6.1[39m
  [90m[682c06a0] [39m[92m+ JSON v0.21.4[39m
  [90m[63c18a36] [39m[92m+ KernelAbstractions v0.9.28[39m
  [90m[929cbde3] [39m[92m+ LLVM v9.1.2[39m
  [90m[2ab3a3ac] [39m[92m+ LogExpFunctions v0.3.28[39m
  [90m[6c6e2e6c] [39m[92m+ MIMEs v0.1.4[39m
  [90m[1914dd2f] [39m[92m+ MacroTools v0.5.13[39m
  [90m[b8f27783] [39m[92m+ MathOptInterface v1.31.2[39m
  [90m[e1d29d7a] [39m[92m+ Missings v1.2.0[39m
  [90m[d8a4904e] [39m[92m+ MutableArithmetics v1.5.1[39m
[33mâŒ…[39m [90m[872c559c] [39m[92m+ NNlib v0.8.21[39m
  [90m[77ba4419] [39m[92m+ NaNMath v1.0.2[39m
  [90m[7e02d93a] [39m[92m+ OptimalTransport v0.3.19[39m
  [90m[bac558e1] [39m[92m+ OrderedCollections v1.6.3[39m
  [90m[90014a1f] [39m[92m+ PDMats v0.11.31[39m
  [90m[69de0a69] [39m[92m+ Parsers v2.8.1[39m
  [90m[cb4044da] [39m[92m+ PlutoTest v0.2.2[39m
  [90m[7f904dfe] [39m[92m+ PlutoUI v0.7.60[39m
  [90m[aea7be01] [39m[92m+ PrecompileTools v1.2.1[39m
  [90m[21216c6a] [39m[92m+ Preferences v1.4.3[39m
  [90m[43287f4e] [39m[92m+ PtrArrays v1.2.1[39m
  [90m[1fd47b50] [39m[92m+ QuadGK v2.11.1[39m
  [90m[3cdcf5f2] [39m[92m+ RecipesBase v1.3.4[39m
  [90m[189a3867] [39m[92m+ Reexport v1.2.2[39m
  [90m[ae029012] [39m[92m+ Requires v1.3.0[39m
  [90m[79098fc4] [39m[92m+ Rmath v0.8.0[39m
  [90m[a2af1166] [39m[92m+ SortingAlgorithms v1.2.1[39m
  [90m[276daf66] [39m[92m+ SpecialFunctions v2.4.0[39m
  [90m[90137ffa] [39m[92m+ StaticArrays v1.9.7[39m
  [90m[1e83bf80] [39m[92m+ StaticArraysCore v1.4.3[39m
  [90m[10745b16] [39m[92m+ Statistics v1.11.1[39m
  [90m[82ae8749] [39m[92m+ StatsAPI v1.7.0[39m
  [90m[2913bbd2] [39m[92m+ StatsBase v0.34.3[39m
  [90m[4c63d2b9] [39m[92m+ StatsFuns v1.3.2[39m
  [90m[3bb67fe8] [39m[92m+ TranscodingStreams v0.11.3[39m
  [90m[410a4b4d] [39m[92m+ Tricks v0.1.9[39m
  [90m[5c2747f8] [39m[92m+ URIs v1.5.1[39m
  [90m[013be700] [39m[92m+ UnsafeAtomics v0.2.1[39m
  [90m[d80eeb9a] [39m[92m+ UnsafeAtomicsLLVM v0.2.1[39m
  [90m[6e34b625] [39m[92m+ Bzip2_jll v1.0.8+1[39m
  [90m[e8aa6df9] [39m[92m+ GLPK_jll v5.0.1+0[39m
  [90m[dad2f222] [39m[92m+ LLVMExtra_jll v0.0.34+0[39m
  [90m[efe28fd5] [39m[92m+ OpenSpecFun_jll v0.5.5+0[39m
  [90m[f50d1b31] [39m[92m+ Rmath_jll v0.5.1+0[39m
  [90m[0dad84c5] [39m[92m+ ArgTools v1.1.2[39m
  [90m[56f22d72] [39m[92m+ Artifacts v1.11.0[39m
  [90m[2a0f44e3] [39m[92m+ Base64 v1.11.0[39m
  [90m[ade2ca70] [39m[92m+ Dates v1.11.0[39m
  [90m[f43a241f] [39m[92m+ Downloads v1.6.0[39m
  [90m[7b1f6079] [39m[92m+ FileWatching v1.11.0[39m
  [90m[b77e0a4c] [39m[92m+ InteractiveUtils v1.11.0[39m
  [90m[4af54fe1] [39m[92m+ LazyArtifacts v1.11.0[39m
  [90m[b27032c2] [39m[92m+ LibCURL v0.6.4[39m
  [90m[76f85450] [39m[92m+ LibGit2 v1.11.0[39m
  [90m[8f399da3] [39m[92m+ Libdl v1.11.0[39m
  [90m[37e2e46d] [39m[92m+ LinearAlgebra v1.11.0[39m
  [90m[56ddb016] [39m[92m+ Logging v1.11.0[39m
  [90m[d6f4376e] [39m[92m+ Markdown v1.11.0[39m
  [90m[a63ad114] [39m[92m+ Mmap v1.11.0[39m
  [90m[ca575930] [39m[92m+ NetworkOptions v1.2.0[39m
  [90m[44cfe95a] [39m[92m+ Pkg v1.11.0[39m
  [90m[de0858da] [39m[92m+ Printf v1.11.0[39m
  [90m[9abbd945] [39m[92m+ Profile v1.11.0[39m
  [90m[9a3f8284] [39m[92m+ Random v1.11.0[39m
  [90m[ea8e919c] [39m[92m+ SHA v0.7.0[39m
  [90m[9e88b42a] [39m[92m+ Serialization v1.11.0[39m
  [90m[2f01184e] [39m[92m+ SparseArrays v1.11.0[39m
  [90m[4607b0f0] [39m[92m+ SuiteSparse[39m
  [90m[fa267f1f] [39m[92m+ TOML v1.0.3[39m
  [90m[a4e569a6] [39m[92m+ Tar v1.10.0[39m
  [90m[8dfed614] [39m[92m+ Test v1.11.0[39m
  [90m[cf7118a7] [39m[92m+ UUIDs v1.11.0[39m
  [90m[4ec0a83e] [39m[92m+ Unicode v1.11.0[39m
  [90m[e66e0078] [39m[92m+ CompilerSupportLibraries_jll v1.1.1+0[39m
  [90m[781609d7] [39m[92m+ GMP_jll v6.3.0+0[39m
  [90m[deac9b47] [39m[92m+ LibCURL_jll v8.6.0+0[39m
  [90m[e37daf67] [39m[92m+ LibGit2_jll v1.7.2+0[39m
  [90m[29816b5a] [39m[92m+ LibSSH2_jll v1.11.0+1[39m
  [90m[c8ffd9c3] [39m[92m+ MbedTLS_jll v2.28.6+0[39m
  [90m[14a3606d] [39m[92m+ MozillaCACerts_jll v2023.12.12[39m
  [90m[4536629a] [39m[92m+ OpenBLAS_jll v0.3.27+1[39m
  [90m[05823500] [39m[92m+ OpenLibm_jll v0.8.1+2[39m
  [90m[bea87d4a] [39m[92m+ SuiteSparse_jll v7.7.0+0[39m
  [90m[83775a58] [39m[92m+ Zlib_jll v1.2.13+1[39m
  [90m[8e850b90] [39m[92m+ libblastrampoline_jll v5.11.0+0[39m
  [90m[8e850ede] [39m[92m+ nghttp2_jll v1.59.0+0[39m
  [90m[3f19e933] [39m[92m+ p7zip_jll v17.4.0+2[39m
[36m[1m        Info[22m[39m Packages marked with [32mâŒƒ[39m and [33mâŒ…[39m have new versions available. Those with [32mâŒƒ[39m may be upgradable, but those with [33mâŒ…[39m are restricted by compatibility constraints from upgrading. To see why use `status --outdated -m`

[0m[1mInstantiating...[22m
[90m===[39m

[0m[1mPrecompiling...[22m
[90m===[39m
[32m[1m  Activating[22m[39m project at `/tmp/jl_oDhDHt`
[92m[1mPrecompiling[22m[39m project...
   2069.6 ms[32m  âœ“ [39mBenchmarkTools
   3026.9 ms[32m  âœ“ [39mPlutoTest
 114333.0 ms[32m  âœ“ [39m[90mMathOptInterface[39m
   3610.9 ms[32m  âœ“ [39m[90mExactOptimalTransport[39m
   5661.8 ms[32m  âœ“ [39mOptimalTransport
   9560.8 ms[32m  âœ“ [39mGLPK
  6 dependencies successfully precompiled in 127 seconds. 123 already precompiled.­LinearAlgebraÚ)§
[0m[1mInstantiating...[22m
[90m===[39m
[33m[1mâ”Œ [22m[39m[33m[1mWarning: [22m[39mThe active manifest file has dependencies that were resolved with a different julia version (1.8.2). Unexpected behavior may occur.
[33m[1mâ”” [22m[39m[90m@ /tmp/jl_oDhDHt/Manifest.toml:0[39m
[32m[1m   Installed[22m[39m DiffRules â”€â”€â”€â”€â”€â”€â”€â”€ v1.12.1
            Installed           Parsers â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ v2.5.0                     [32m[1m[22m[39m
            Installed           PlutoUI â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ v0.7.48                    [32m[1m[22m[39m
            Installed           ForwardDiff â”€â”€â”€â”€â”€â”€ v0.10.32                   [32m[1m[22m[39m
            Installed           NNlib â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ v0.8.10                    [32m[1m[22m[39m
            Installed           GLPK â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ v1.1.0                     [32m[1m[22m[39m
            Installed           Distributions â”€â”€â”€â”€ v0.25.77                   [32m[1m[22m[39m
            Installed           MathOptInterface â”€ v1.9.0                     [32m[1m[22m[39m
                                                                              
[0m[1mResolving...[22m
[90m===[39m
[36m[1mâ”Œ [22m[39m[36m[1mInfo: [22m[39mOperation failed. Updating registries and trying again...
[36m[1mâ”‚ [22m[39m  exception =
[36m[1mâ”‚ [22m[39m   Unsatisfiable requirements detected for package SortingAlgorithms [a2af1166]:
[36m[1mâ”‚ [22m[39m    SortingAlgorithms [a2af1166] log:
[36m[1mâ”‚ [22m[39m    â”œâ”€possible versions are: 0.3.0 - 1.2.1 or uninstalled
[36m[1mâ”‚ [22m[39m    â”œâ”€restricted to versions 1.0.1 by an explicit requirement, leaving only versions: 1.0.1
[36m[1mâ”” [22m[39m    â””â”€restricted by julia compatibility requirements to versions: 1.1.0 - 1.2.1 or uninstalled â€” no versions left

[0m[1mResolving...[22m
[90m===[39m
[33m[1mâ”Œ [22m[39m[33m[1mWarning: [22m[39mOperation failed. Removing Manifest and trying again...
[33m[1mâ”‚ [22m[39m  exception =
[33m[1mâ”‚ [22m[39m   Unsatisfiable requirements detected for package SortingAlgorithms [a2af1166]:
[33m[1mâ”‚ [22m[39m    SortingAlgorithms [a2af1166] log:
[33m[1mâ”‚ [22m[39m    â”œâ”€possible versions are: 0.3.0 - 1.2.1 or uninstalled
[33m[1mâ”‚ [22m[39m    â”œâ”€restricted to versions 1.0.1 by an explicit requirement, leaving only versions: 1.0.1
[33m[1mâ”‚ [22m[39m    â””â”€restricted by julia compatibility requirements to versions: 1.1.0 - 1.2.1 or uninstalled â€” no versions left
[33m[1mâ”” [22m[39m[90m@ Pluto ~/.julia/packages/Pluto/6smog/src/packages/Packages.jl:494[39m

[0m[1mResolving...[22m
[90m===[39m
[32m[1m   Installed[22m[39m GLPK â”€ v1.1.3
             Updating           `/tmp/jl_oDhDHt/Project.toml`                 [32m[1m[22m[39m
[33mâŒ…[39m [90m[6e4b80f9] [39m[92m+ BenchmarkTools v1.3.2[39m
[33mâŒ…[39m [90m[60bf3e95] [39m[92m+ GLPK v1.1.3[39m
  [90m[7e02d93a] [39m[92m+ OptimalTransport v0.3.19[39m
  [90m[cb4044da] [39m[92m+ PlutoTest v0.2.2[39m
  [90m[7f904dfe] [39m[92m+ PlutoUI v0.7.60[39m
  [90m[37e2e46d] [39m[93m~ LinearAlgebra â‡’ v1.11.0[39m
[32m[1m    Updating[22m[39m `/tmp/jl_oDhDHt/Manifest.toml`
  [90m[6e696c72] [39m[92m+ AbstractPlutoDingetjes v1.3.2[39m
[33mâŒ…[39m [90m[79e6a3ab] [39m[92m+ Adapt v3.7.2[39m
  [90m[66dad0bd] [39m[92m+ AliasTables v1.1.3[39m
  [90m[a9b6321e] [39m[92m+ Atomix v0.1.0[39m
[33mâŒ…[39m [90m[6e4b80f9] [39m[92m+ BenchmarkTools v1.3.2[39m
  [90m[fa961155] [39m[92m+ CEnum v0.5.0[39m
  [90m[d360d2e6] [39m[92m+ ChainRulesCore v1.25.0[39m
  [90m[523fee87] [39m[92m+ CodecBzip2 v0.8.4[39m
  [90m[944b1d66] [39m[92m+ CodecZlib v0.7.6[39m
  [90m[3da002f7] [39m[92m+ ColorTypes v0.11.5[39m
  [90m[bbf7d656] [39m[92m+ CommonSubexpressions v0.3.1[39m
  [90m[34da2185] [39m[92m+ Compat v4.16.0[39m
  [90m[9a962f9c] [39m[92m+ DataAPI v1.16.0[39m
  [90m[864edb3b] [39m[92m+ DataStructures v0.18.20[39m
  [90m[163ba53b] [39m[92m+ DiffResults v1.1.0[39m
  [90m[b552c78f] [39m[92m+ DiffRules v1.15.1[39m
  [90m[b4f34e82] [39m[92m+ Distances v0.10.11[39m
  [90m[31c24e10] [39m[92m+ Distributions v0.25.112[39m
  [90m[ffbed154] [39m[92m+ DocStringExtensions v0.9.3[39m
  [90m[24df6009] [39m[92m+ ExactOptimalTransport v0.2.5[39m
  [90m[1a297f60] [39m[92m+ FillArrays v1.13.0[39m
  [90m[53c48c17] [39m[92m+ FixedPointNumbers v0.8.5[39m
  [90m[f6369f11] [39m[92m+ ForwardDiff v0.10.36[39m
[33mâŒ…[39m [90m[60bf3e95] [39m[92m+ GLPK v1.1.3[39m
[32mâŒƒ[39m [90m[46192b85] [39m[92m+ GPUArraysCore v0.1.5[39m
  [90m[34004b35] [39m[92m+ HypergeometricFunctions v0.3.24[39m
  [90m[47d2ed2b] [39m[92m+ Hyperscript v0.0.5[39m
  [90m[ac1192a8] [39m[92m+ HypertextLiteral v0.9.5[39m
  [90m[b5f81e59] [39m[92m+ IOCapture v0.2.5[39m
  [90m[92d709cd] [39m[92m+ IrrationalConstants v0.2.2[39m
  [90m[42fd0dbc] [39m[92m+ IterativeSolvers v0.9.4[39m
  [90m[692b3bcd] [39m[92m+ JLLWrappers v1.6.1[39m
  [90m[682c06a0] [39m[92m+ JSON v0.21.4[39m
  [90m[63c18a36] [39m[92m+ KernelAbstractions v0.9.28[39m
  [90m[929cbde3] [39m[92m+ LLVM v9.1.2[39m
  [90m[2ab3a3ac] [39m[92m+ LogExpFunctions v0.3.28[39m
  [90m[6c6e2e6c] [39m[92m+ MIMEs v0.1.4[39m
  [90m[1914dd2f] [39m[92m+ MacroTools v0.5.13[39m
  [90m[b8f27783] [39m[92m+ MathOptInterface v1.31.2[39m
  [90m[e1d29d7a] [39m[92m+ Missings v1.2.0[39m
  [90m[d8a4904e] [39m[92m+ MutableArithmetics v1.5.1[39m
[33mâŒ…[39m [90m[872c559c] [39m[92m+ NNlib v0.8.21[39m
  [90m[77ba4419] [39m[92m+ NaNMath v1.0.2[39m
  [90m[7e02d93a] [39m[92m+ OptimalTransport v0.3.19[39m
  [90m[bac558e1] [39m[92m+ OrderedCollections v1.6.3[39m
  [90m[90014a1f] [39m[92m+ PDMats v0.11.31[39m
  [90m[69de0a69] [39m[92m+ Parsers v2.8.1[39m
  [90m[cb4044da] [39m[92m+ PlutoTest v0.2.2[39m
  [90m[7f904dfe] [39m[92m+ PlutoUI v0.7.60[39m
  [90m[aea7be01] [39m[92m+ PrecompileTools v1.2.1[39m
  [90m[21216c6a] [39m[92m+ Preferences v1.4.3[39m
  [90m[43287f4e] [39m[92m+ PtrArrays v1.2.1[39m
  [90m[1fd47b50] [39m[92m+ QuadGK v2.11.1[39m
  [90m[3cdcf5f2] [39m[92m+ RecipesBase v1.3.4[39m
  [90m[189a3867] [39m[92m+ Reexport v1.2.2[39m
  [90m[ae029012] [39m[92m+ Requires v1.3.0[39m
  [90m[79098fc4] [39m[92m+ Rmath v0.8.0[39m
  [90m[a2af1166] [39m[92m+ SortingAlgorithms v1.2.1[39m
  [90m[276daf66] [39m[92m+ SpecialFunctions v2.4.0[39m
  [90m[90137ffa] [39m[92m+ StaticArrays v1.9.7[39m
  [90m[1e83bf80] [39m[92m+ StaticArraysCore v1.4.3[39m
  [90m[10745b16] [39m[92m+ Statistics v1.11.1[39m
  [90m[82ae8749] [39m[92m+ StatsAPI v1.7.0[39m
  [90m[2913bbd2] [39m[92m+ StatsBase v0.34.3[39m
  [90m[4c63d2b9] [39m[92m+ StatsFuns v1.3.2[39m
  [90m[3bb67fe8] [39m[92m+ TranscodingStreams v0.11.3[39m
  [90m[410a4b4d] [39m[92m+ Tricks v0.1.9[39m
  [90m[5c2747f8] [39m[92m+ URIs v1.5.1[39m
  [90m[013be700] [39m[92m+ UnsafeAtomics v0.2.1[39m
  [90m[d80eeb9a] [39m[92m+ UnsafeAtomicsLLVM v0.2.1[39m
  [90m[6e34b625] [39m[92m+ Bzip2_jll v1.0.8+1[39m
  [90m[e8aa6df9] [39m[92m+ GLPK_jll v5.0.1+0[39m
  [90m[dad2f222] [39m[92m+ LLVMExtra_jll v0.0.34+0[39m
  [90m[efe28fd5] [39m[92m+ OpenSpecFun_jll v0.5.5+0[39m
  [90m[f50d1b31] [39m[92m+ Rmath_jll v0.5.1+0[39m
  [90m[0dad84c5] [39m[92m+ ArgTools v1.1.2[39m
  [90m[56f22d72] [39m[92m+ Artifacts v1.11.0[39m
  [90m[2a0f44e3] [39m[92m+ Base64 v1.11.0[39m
  [90m[ade2ca70] [39m[92m+ Dates v1.11.0[39m
  [90m[f43a241f] [39m[92m+ Downloads v1.6.0[39m
  [90m[7b1f6079] [39m[92m+ FileWatching v1.11.0[39m
  [90m[b77e0a4c] [39m[92m+ InteractiveUtils v1.11.0[39m
  [90m[4af54fe1] [39m[92m+ LazyArtifacts v1.11.0[39m
  [90m[b27032c2] [39m[92m+ LibCURL v0.6.4[39m
  [90m[76f85450] [39m[92m+ LibGit2 v1.11.0[39m
  [90m[8f399da3] [39m[92m+ Libdl v1.11.0[39m
  [90m[37e2e46d] [39m[92m+ LinearAlgebra v1.11.0[39m
  [90m[56ddb016] [39m[92m+ Logging v1.11.0[39m
  [90m[d6f4376e] [39m[92m+ Markdown v1.11.0[39m
  [90m[a63ad114] [39m[92m+ Mmap v1.11.0[39m
  [90m[ca575930] [39m[92m+ NetworkOptions v1.2.0[39m
  [90m[44cfe95a] [39m[92m+ Pkg v1.11.0[39m
  [90m[de0858da] [39m[92m+ Printf v1.11.0[39m
  [90m[9abbd945] [39m[92m+ Profile v1.11.0[39m
  [90m[9a3f8284] [39m[92m+ Random v1.11.0[39m
  [90m[ea8e919c] [39m[92m+ SHA v0.7.0[39m
  [90m[9e88b42a] [39m[92m+ Serialization v1.11.0[39m
  [90m[2f01184e] [39m[92m+ SparseArrays v1.11.0[39m
  [90m[4607b0f0] [39m[92m+ SuiteSparse[39m
  [90m[fa267f1f] [39m[92m+ TOML v1.0.3[39m
  [90m[a4e569a6] [39m[92m+ Tar v1.10.0[39m
  [90m[8dfed614] [39m[92m+ Test v1.11.0[39m
  [90m[cf7118a7] [39m[92m+ UUIDs v1.11.0[39m
  [90m[4ec0a83e] [39m[92m+ Unicode v1.11.0[39m
  [90m[e66e0078] [39m[92m+ CompilerSupportLibraries_jll v1.1.1+0[39m
  [90m[781609d7] [39m[92m+ GMP_jll v6.3.0+0[39m
  [90m[deac9b47] [39m[92m+ LibCURL_jll v8.6.0+0[39m
  [90m[e37daf67] [39m[92m+ LibGit2_jll v1.7.2+0[39m
  [90m[29816b5a] [39m[92m+ LibSSH2_jll v1.11.0+1[39m
  [90m[c8ffd9c3] [39m[92m+ MbedTLS_jll v2.28.6+0[39m
  [90m[14a3606d] [39m[92m+ MozillaCACerts_jll v2023.12.12[39m
  [90m[4536629a] [39m[92m+ OpenBLAS_jll v0.3.27+1[39m
  [90m[05823500] [39m[92m+ OpenLibm_jll v0.8.1+2[39m
  [90m[bea87d4a] [39m[92m+ SuiteSparse_jll v7.7.0+0[39m
  [90m[83775a58] [39m[92m+ Zlib_jll v1.2.13+1[39m
  [90m[8e850b90] [39m[92m+ libblastrampoline_jll v5.11.0+0[39m
  [90m[8e850ede] [39m[92m+ nghttp2_jll v1.59.0+0[39m
  [90m[3f19e933] [39m[92m+ p7zip_jll v17.4.0+2[39m
[36m[1m        Info[22m[39m Packages marked with [32mâŒƒ[39m and [33mâŒ…[39m have new versions available. Those with [32mâŒƒ[39m may be upgradable, but those with [33mâŒ…[39m are restricted by compatibility constraints from upgrading. To see why use `status --outdated -m`

[0m[1mInstantiating...[22m
[90m===[39m

[0m[1mPrecompiling...[22m
[90m===[39m
[32m[1m  Activating[22m[39m project at `/tmp/jl_oDhDHt`
[92m[1mPrecompiling[22m[39m project...
   2069.6 ms[32m  âœ“ [39mBenchmarkTools
   3026.9 ms[32m  âœ“ [39mPlutoTest
 114333.0 ms[32m  âœ“ [39m[90mMathOptInterface[39m
   3610.9 ms[32m  âœ“ [39m[90mExactOptimalTransport[39m
   5661.8 ms[32m  âœ“ [39mOptimalTransport
   9560.8 ms[32m  âœ“ [39mGLPK
  6 dependencies successfully precompiled in 127 seconds. 123 already precompiled.§PlutoUIÚ)§
[0m[1mInstantiating...[22m
[90m===[39m
[33m[1mâ”Œ [22m[39m[33m[1mWarning: [22m[39mThe active manifest file has dependencies that were resolved with a different julia version (1.8.2). Unexpected behavior may occur.
[33m[1mâ”” [22m[39m[90m@ /tmp/jl_oDhDHt/Manifest.toml:0[39m
[32m[1m   Installed[22m[39m DiffRules â”€â”€â”€â”€â”€â”€â”€â”€ v1.12.1
            Installed           Parsers â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ v2.5.0                     [32m[1m[22m[39m
            Installed           PlutoUI â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ v0.7.48                    [32m[1m[22m[39m
            Installed           ForwardDiff â”€â”€â”€â”€â”€â”€ v0.10.32                   [32m[1m[22m[39m
            Installed           NNlib â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ v0.8.10                    [32m[1m[22m[39m
            Installed           GLPK â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ v1.1.0                     [32m[1m[22m[39m
            Installed           Distributions â”€â”€â”€â”€ v0.25.77                   [32m[1m[22m[39m
            Installed           MathOptInterface â”€ v1.9.0                     [32m[1m[22m[39m
                                                                              
[0m[1mResolving...[22m
[90m===[39m
[36m[1mâ”Œ [22m[39m[36m[1mInfo: [22m[39mOperation failed. Updating registries and trying again...
[36m[1mâ”‚ [22m[39m  exception =
[36m[1mâ”‚ [22m[39m   Unsatisfiable requirements detected for package SortingAlgorithms [a2af1166]:
[36m[1mâ”‚ [22m[39m    SortingAlgorithms [a2af1166] log:
[36m[1mâ”‚ [22m[39m    â”œâ”€possible versions are: 0.3.0 - 1.2.1 or uninstalled
[36m[1mâ”‚ [22m[39m    â”œâ”€restricted to versions 1.0.1 by an explicit requirement, leaving only versions: 1.0.1
[36m[1mâ”” [22m[39m    â””â”€restricted by julia compatibility requirements to versions: 1.1.0 - 1.2.1 or uninstalled â€” no versions left

[0m[1mResolving...[22m
[90m===[39m
[33m[1mâ”Œ [22m[39m[33m[1mWarning: [22m[39mOperation failed. Removing Manifest and trying again...
[33m[1mâ”‚ [22m[39m  exception =
[33m[1mâ”‚ [22m[39m   Unsatisfiable requirements detected for package SortingAlgorithms [a2af1166]:
[33m[1mâ”‚ [22m[39m    SortingAlgorithms [a2af1166] log:
[33m[1mâ”‚ [22m[39m    â”œâ”€possible versions are: 0.3.0 - 1.2.1 or uninstalled
[33m[1mâ”‚ [22m[39m    â”œâ”€restricted to versions 1.0.1 by an explicit requirement, leaving only versions: 1.0.1
[33m[1mâ”‚ [22m[39m    â””â”€restricted by julia compatibility requirements to versions: 1.1.0 - 1.2.1 or uninstalled â€” no versions left
[33m[1mâ”” [22m[39m[90m@ Pluto ~/.julia/packages/Pluto/6smog/src/packages/Packages.jl:494[39m

[0m[1mResolving...[22m
[90m===[39m
[32m[1m   Installed[22m[39m GLPK â”€ v1.1.3
             Updating           `/tmp/jl_oDhDHt/Project.toml`                 [32m[1m[22m[39m
[33mâŒ…[39m [90m[6e4b80f9] [39m[92m+ BenchmarkTools v1.3.2[39m
[33mâŒ…[39m [90m[60bf3e95] [39m[92m+ GLPK v1.1.3[39m
  [90m[7e02d93a] [39m[92m+ OptimalTransport v0.3.19[39m
  [90m[cb4044da] [39m[92m+ PlutoTest v0.2.2[39m
  [90m[7f904dfe] [39m[92m+ PlutoUI v0.7.60[39m
  [90m[37e2e46d] [39m[93m~ LinearAlgebra â‡’ v1.11.0[39m
[32m[1m    Updating[22m[39m `/tmp/jl_oDhDHt/Manifest.toml`
  [90m[6e696c72] [39m[92m+ AbstractPlutoDingetjes v1.3.2[39m
[33mâŒ…[39m [90m[79e6a3ab] [39m[92m+ Adapt v3.7.2[39m
  [90m[66dad0bd] [39m[92m+ AliasTables v1.1.3[39m
  [90m[a9b6321e] [39m[92m+ Atomix v0.1.0[39m
[33mâŒ…[39m [90m[6e4b80f9] [39m[92m+ BenchmarkTools v1.3.2[39m
  [90m[fa961155] [39m[92m+ CEnum v0.5.0[39m
  [90m[d360d2e6] [39m[92m+ ChainRulesCore v1.25.0[39m
  [90m[523fee87] [39m[92m+ CodecBzip2 v0.8.4[39m
  [90m[944b1d66] [39m[92m+ CodecZlib v0.7.6[39m
  [90m[3da002f7] [39m[92m+ ColorTypes v0.11.5[39m
  [90m[bbf7d656] [39m[92m+ CommonSubexpressions v0.3.1[39m
  [90m[34da2185] [39m[92m+ Compat v4.16.0[39m
  [90m[9a962f9c] [39m[92m+ DataAPI v1.16.0[39m
  [90m[864edb3b] [39m[92m+ DataStructures v0.18.20[39m
  [90m[163ba53b] [39m[92m+ DiffResults v1.1.0[39m
  [90m[b552c78f] [39m[92m+ DiffRules v1.15.1[39m
  [90m[b4f34e82] [39m[92m+ Distances v0.10.11[39m
  [90m[31c24e10] [39m[92m+ Distributions v0.25.112[39m
  [90m[ffbed154] [39m[92m+ DocStringExtensions v0.9.3[39m
  [90m[24df6009] [39m[92m+ ExactOptimalTransport v0.2.5[39m
  [90m[1a297f60] [39m[92m+ FillArrays v1.13.0[39m
  [90m[53c48c17] [39m[92m+ FixedPointNumbers v0.8.5[39m
  [90m[f6369f11] [39m[92m+ ForwardDiff v0.10.36[39m
[33mâŒ…[39m [90m[60bf3e95] [39m[92m+ GLPK v1.1.3[39m
[32mâŒƒ[39m [90m[46192b85] [39m[92m+ GPUArraysCore v0.1.5[39m
  [90m[34004b35] [39m[92m+ HypergeometricFunctions v0.3.24[39m
  [90m[47d2ed2b] [39m[92m+ Hyperscript v0.0.5[39m
  [90m[ac1192a8] [39m[92m+ HypertextLiteral v0.9.5[39m
  [90m[b5f81e59] [39m[92m+ IOCapture v0.2.5[39m
  [90m[92d709cd] [39m[92m+ IrrationalConstants v0.2.2[39m
  [90m[42fd0dbc] [39m[92m+ IterativeSolvers v0.9.4[39m
  [90m[692b3bcd] [39m[92m+ JLLWrappers v1.6.1[39m
  [90m[682c06a0] [39m[92m+ JSON v0.21.4[39m
  [90m[63c18a36] [39m[92m+ KernelAbstractions v0.9.28[39m
  [90m[929cbde3] [39m[92m+ LLVM v9.1.2[39m
  [90m[2ab3a3ac] [39m[92m+ LogExpFunctions v0.3.28[39m
  [90m[6c6e2e6c] [39m[92m+ MIMEs v0.1.4[39m
  [90m[1914dd2f] [39m[92m+ MacroTools v0.5.13[39m
  [90m[b8f27783] [39m[92m+ MathOptInterface v1.31.2[39m
  [90m[e1d29d7a] [39m[92m+ Missings v1.2.0[39m
  [90m[d8a4904e] [39m[92m+ MutableArithmetics v1.5.1[39m
[33mâŒ…[39m [90m[872c559c] [39m[92m+ NNlib v0.8.21[39m
  [90m[77ba4419] [39m[92m+ NaNMath v1.0.2[39m
  [90m[7e02d93a] [39m[92m+ OptimalTransport v0.3.19[39m
  [90m[bac558e1] [39m[92m+ OrderedCollections v1.6.3[39m
  [90m[90014a1f] [39m[92m+ PDMats v0.11.31[39m
  [90m[69de0a69] [39m[92m+ Parsers v2.8.1[39m
  [90m[cb4044da] [39m[92m+ PlutoTest v0.2.2[39m
  [90m[7f904dfe] [39m[92m+ PlutoUI v0.7.60[39m
  [90m[aea7be01] [39m[92m+ PrecompileTools v1.2.1[39m
  [90m[21216c6a] [39m[92m+ Preferences v1.4.3[39m
  [90m[43287f4e] [39m[92m+ PtrArrays v1.2.1[39m
  [90m[1fd47b50] [39m[92m+ QuadGK v2.11.1[39m
  [90m[3cdcf5f2] [39m[92m+ RecipesBase v1.3.4[39m
  [90m[189a3867] [39m[92m+ Reexport v1.2.2[39m
  [90m[ae029012] [39m[92m+ Requires v1.3.0[39m
  [90m[79098fc4] [39m[92m+ Rmath v0.8.0[39m
  [90m[a2af1166] [39m[92m+ SortingAlgorithms v1.2.1[39m
  [90m[276daf66] [39m[92m+ SpecialFunctions v2.4.0[39m
  [90m[90137ffa] [39m[92m+ StaticArrays v1.9.7[39m
  [90m[1e83bf80] [39m[92m+ StaticArraysCore v1.4.3[39m
  [90m[10745b16] [39m[92m+ Statistics v1.11.1[39m
  [90m[82ae8749] [39m[92m+ StatsAPI v1.7.0[39m
  [90m[2913bbd2] [39m[92m+ StatsBase v0.34.3[39m
  [90m[4c63d2b9] [39m[92m+ StatsFuns v1.3.2[39m
  [90m[3bb67fe8] [39m[92m+ TranscodingStreams v0.11.3[39m
  [90m[410a4b4d] [39m[92m+ Tricks v0.1.9[39m
  [90m[5c2747f8] [39m[92m+ URIs v1.5.1[39m
  [90m[013be700] [39m[92m+ UnsafeAtomics v0.2.1[39m
  [90m[d80eeb9a] [39m[92m+ UnsafeAtomicsLLVM v0.2.1[39m
  [90m[6e34b625] [39m[92m+ Bzip2_jll v1.0.8+1[39m
  [90m[e8aa6df9] [39m[92m+ GLPK_jll v5.0.1+0[39m
  [90m[dad2f222] [39m[92m+ LLVMExtra_jll v0.0.34+0[39m
  [90m[efe28fd5] [39m[92m+ OpenSpecFun_jll v0.5.5+0[39m
  [90m[f50d1b31] [39m[92m+ Rmath_jll v0.5.1+0[39m
  [90m[0dad84c5] [39m[92m+ ArgTools v1.1.2[39m
  [90m[56f22d72] [39m[92m+ Artifacts v1.11.0[39m
  [90m[2a0f44e3] [39m[92m+ Base64 v1.11.0[39m
  [90m[ade2ca70] [39m[92m+ Dates v1.11.0[39m
  [90m[f43a241f] [39m[92m+ Downloads v1.6.0[39m
  [90m[7b1f6079] [39m[92m+ FileWatching v1.11.0[39m
  [90m[b77e0a4c] [39m[92m+ InteractiveUtils v1.11.0[39m
  [90m[4af54fe1] [39m[92m+ LazyArtifacts v1.11.0[39m
  [90m[b27032c2] [39m[92m+ LibCURL v0.6.4[39m
  [90m[76f85450] [39m[92m+ LibGit2 v1.11.0[39m
  [90m[8f399da3] [39m[92m+ Libdl v1.11.0[39m
  [90m[37e2e46d] [39m[92m+ LinearAlgebra v1.11.0[39m
  [90m[56ddb016] [39m[92m+ Logging v1.11.0[39m
  [90m[d6f4376e] [39m[92m+ Markdown v1.11.0[39m
  [90m[a63ad114] [39m[92m+ Mmap v1.11.0[39m
  [90m[ca575930] [39m[92m+ NetworkOptions v1.2.0[39m
  [90m[44cfe95a] [39m[92m+ Pkg v1.11.0[39m
  [90m[de0858da] [39m[92m+ Printf v1.11.0[39m
  [90m[9abbd945] [39m[92m+ Profile v1.11.0[39m
  [90m[9a3f8284] [39m[92m+ Random v1.11.0[39m
  [90m[ea8e919c] [39m[92m+ SHA v0.7.0[39m
  [90m[9e88b42a] [39m[92m+ Serialization v1.11.0[39m
  [90m[2f01184e] [39m[92m+ SparseArrays v1.11.0[39m
  [90m[4607b0f0] [39m[92m+ SuiteSparse[39m
  [90m[fa267f1f] [39m[92m+ TOML v1.0.3[39m
  [90m[a4e569a6] [39m[92m+ Tar v1.10.0[39m
  [90m[8dfed614] [39m[92m+ Test v1.11.0[39m
  [90m[cf7118a7] [39m[92m+ UUIDs v1.11.0[39m
  [90m[4ec0a83e] [39m[92m+ Unicode v1.11.0[39m
  [90m[e66e0078] [39m[92m+ CompilerSupportLibraries_jll v1.1.1+0[39m
  [90m[781609d7] [39m[92m+ GMP_jll v6.3.0+0[39m
  [90m[deac9b47] [39m[92m+ LibCURL_jll v8.6.0+0[39m
  [90m[e37daf67] [39m[92m+ LibGit2_jll v1.7.2+0[39m
  [90m[29816b5a] [39m[92m+ LibSSH2_jll v1.11.0+1[39m
  [90m[c8ffd9c3] [39m[92m+ MbedTLS_jll v2.28.6+0[39m
  [90m[14a3606d] [39m[92m+ MozillaCACerts_jll v2023.12.12[39m
  [90m[4536629a] [39m[92m+ OpenBLAS_jll v0.3.27+1[39m
  [90m[05823500] [39m[92m+ OpenLibm_jll v0.8.1+2[39m
  [90m[bea87d4a] [39m[92m+ SuiteSparse_jll v7.7.0+0[39m
  [90m[83775a58] [39m[92m+ Zlib_jll v1.2.13+1[39m
  [90m[8e850b90] [39m[92m+ libblastrampoline_jll v5.11.0+0[39m
  [90m[8e850ede] [39m[92m+ nghttp2_jll v1.59.0+0[39m
  [90m[3f19e933] [39m[92m+ p7zip_jll v17.4.0+2[39m
[36m[1m        Info[22m[39m Packages marked with [32mâŒƒ[39m and [33mâŒ…[39m have new versions available. Those with [32mâŒƒ[39m may be upgradable, but those with [33mâŒ…[39m are restricted by compatibility constraints from upgrading. To see why use `status --outdated -m`

[0m[1mInstantiating...[22m
[90m===[39m

[0m[1mPrecompiling...[22m
[90m===[39m
[32m[1m  Activating[22m[39m project at `/tmp/jl_oDhDHt`
[92m[1mPrecompiling[22m[39m project...
   2069.6 ms[32m  âœ“ [39mBenchmarkTools
   3026.9 ms[32m  âœ“ [39mPlutoTest
 114333.0 ms[32m  âœ“ [39m[90mMathOptInterface[39m
   3610.9 ms[32m  âœ“ [39m[90mExactOptimalTransport[39m
   5661.8 ms[32m  âœ“ [39mOptimalTransport
   9560.8 ms[32m  âœ“ [39mGLPK
  6 dependencies successfully precompiled in 127 seconds. 123 already precompiled.©PlutoTestÚ)§
[0m[1mInstantiating...[22m
[90m===[39m
[33m[1mâ”Œ [22m[39m[33m[1mWarning: [22m[39mThe active manifest file has dependencies that were resolved with a different julia version (1.8.2). Unexpected behavior may occur.
[33m[1mâ”” [22m[39m[90m@ /tmp/jl_oDhDHt/Manifest.toml:0[39m
[32m[1m   Installed[22m[39m DiffRules â”€â”€â”€â”€â”€â”€â”€â”€ v1.12.1
            Installed           Parsers â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ v2.5.0                     [32m[1m[22m[39m
            Installed           PlutoUI â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ v0.7.48                    [32m[1m[22m[39m
            Installed           ForwardDiff â”€â”€â”€â”€â”€â”€ v0.10.32                   [32m[1m[22m[39m
            Installed           NNlib â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ v0.8.10                    [32m[1m[22m[39m
            Installed           GLPK â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ v1.1.0                     [32m[1m[22m[39m
            Installed           Distributions â”€â”€â”€â”€ v0.25.77                   [32m[1m[22m[39m
            Installed           MathOptInterface â”€ v1.9.0                     [32m[1m[22m[39m
                                                                              
[0m[1mResolving...[22m
[90m===[39m
[36m[1mâ”Œ [22m[39m[36m[1mInfo: [22m[39mOperation failed. Updating registries and trying again...
[36m[1mâ”‚ [22m[39m  exception =
[36m[1mâ”‚ [22m[39m   Unsatisfiable requirements detected for package SortingAlgorithms [a2af1166]:
[36m[1mâ”‚ [22m[39m    SortingAlgorithms [a2af1166] log:
[36m[1mâ”‚ [22m[39m    â”œâ”€possible versions are: 0.3.0 - 1.2.1 or uninstalled
[36m[1mâ”‚ [22m[39m    â”œâ”€restricted to versions 1.0.1 by an explicit requirement, leaving only versions: 1.0.1
[36m[1mâ”” [22m[39m    â””â”€restricted by julia compatibility requirements to versions: 1.1.0 - 1.2.1 or uninstalled â€” no versions left

[0m[1mResolving...[22m
[90m===[39m
[33m[1mâ”Œ [22m[39m[33m[1mWarning: [22m[39mOperation failed. Removing Manifest and trying again...
[33m[1mâ”‚ [22m[39m  exception =
[33m[1mâ”‚ [22m[39m   Unsatisfiable requirements detected for package SortingAlgorithms [a2af1166]:
[33m[1mâ”‚ [22m[39m    SortingAlgorithms [a2af1166] log:
[33m[1mâ”‚ [22m[39m    â”œâ”€possible versions are: 0.3.0 - 1.2.1 or uninstalled
[33m[1mâ”‚ [22m[39m    â”œâ”€restricted to versions 1.0.1 by an explicit requirement, leaving only versions: 1.0.1
[33m[1mâ”‚ [22m[39m    â””â”€restricted by julia compatibility requirements to versions: 1.1.0 - 1.2.1 or uninstalled â€” no versions left
[33m[1mâ”” [22m[39m[90m@ Pluto ~/.julia/packages/Pluto/6smog/src/packages/Packages.jl:494[39m

[0m[1mResolving...[22m
[90m===[39m
[32m[1m   Installed[22m[39m GLPK â”€ v1.1.3
             Updating           `/tmp/jl_oDhDHt/Project.toml`                 [32m[1m[22m[39m
[33mâŒ…[39m [90m[6e4b80f9] [39m[92m+ BenchmarkTools v1.3.2[39m
[33mâŒ…[39m [90m[60bf3e95] [39m[92m+ GLPK v1.1.3[39m
  [90m[7e02d93a] [39m[92m+ OptimalTransport v0.3.19[39m
  [90m[cb4044da] [39m[92m+ PlutoTest v0.2.2[39m
  [90m[7f904dfe] [39m[92m+ PlutoUI v0.7.60[39m
  [90m[37e2e46d] [39m[93m~ LinearAlgebra â‡’ v1.11.0[39m
[32m[1m    Updating[22m[39m `/tmp/jl_oDhDHt/Manifest.toml`
  [90m[6e696c72] [39m[92m+ AbstractPlutoDingetjes v1.3.2[39m
[33mâŒ…[39m [90m[79e6a3ab] [39m[92m+ Adapt v3.7.2[39m
  [90m[66dad0bd] [39m[92m+ AliasTables v1.1.3[39m
  [90m[a9b6321e] [39m[92m+ Atomix v0.1.0[39m
[33mâŒ…[39m [90m[6e4b80f9] [39m[92m+ BenchmarkTools v1.3.2[39m
  [90m[fa961155] [39m[92m+ CEnum v0.5.0[39m
  [90m[d360d2e6] [39m[92m+ ChainRulesCore v1.25.0[39m
  [90m[523fee87] [39m[92m+ CodecBzip2 v0.8.4[39m
  [90m[944b1d66] [39m[92m+ CodecZlib v0.7.6[39m
  [90m[3da002f7] [39m[92m+ ColorTypes v0.11.5[39m
  [90m[bbf7d656] [39m[92m+ CommonSubexpressions v0.3.1[39m
  [90m[34da2185] [39m[92m+ Compat v4.16.0[39m
  [90m[9a962f9c] [39m[92m+ DataAPI v1.16.0[39m
  [90m[864edb3b] [39m[92m+ DataStructures v0.18.20[39m
  [90m[163ba53b] [39m[92m+ DiffResults v1.1.0[39m
  [90m[b552c78f] [39m[92m+ DiffRules v1.15.1[39m
  [90m[b4f34e82] [39m[92m+ Distances v0.10.11[39m
  [90m[31c24e10] [39m[92m+ Distributions v0.25.112[39m
  [90m[ffbed154] [39m[92m+ DocStringExtensions v0.9.3[39m
  [90m[24df6009] [39m[92m+ ExactOptimalTransport v0.2.5[39m
  [90m[1a297f60] [39m[92m+ FillArrays v1.13.0[39m
  [90m[53c48c17] [39m[92m+ FixedPointNumbers v0.8.5[39m
  [90m[f6369f11] [39m[92m+ ForwardDiff v0.10.36[39m
[33mâŒ…[39m [90m[60bf3e95] [39m[92m+ GLPK v1.1.3[39m
[32mâŒƒ[39m [90m[46192b85] [39m[92m+ GPUArraysCore v0.1.5[39m
  [90m[34004b35] [39m[92m+ HypergeometricFunctions v0.3.24[39m
  [90m[47d2ed2b] [39m[92m+ Hyperscript v0.0.5[39m
  [90m[ac1192a8] [39m[92m+ HypertextLiteral v0.9.5[39m
  [90m[b5f81e59] [39m[92m+ IOCapture v0.2.5[39m
  [90m[92d709cd] [39m[92m+ IrrationalConstants v0.2.2[39m
  [90m[42fd0dbc] [39m[92m+ IterativeSolvers v0.9.4[39m
  [90m[692b3bcd] [39m[92m+ JLLWrappers v1.6.1[39m
  [90m[682c06a0] [39m[92m+ JSON v0.21.4[39m
  [90m[63c18a36] [39m[92m+ KernelAbstractions v0.9.28[39m
  [90m[929cbde3] [39m[92m+ LLVM v9.1.2[39m
  [90m[2ab3a3ac] [39m[92m+ LogExpFunctions v0.3.28[39m
  [90m[6c6e2e6c] [39m[92m+ MIMEs v0.1.4[39m
  [90m[1914dd2f] [39m[92m+ MacroTools v0.5.13[39m
  [90m[b8f27783] [39m[92m+ MathOptInterface v1.31.2[39m
  [90m[e1d29d7a] [39m[92m+ Missings v1.2.0[39m
  [90m[d8a4904e] [39m[92m+ MutableArithmetics v1.5.1[39m
[33mâŒ…[39m [90m[872c559c] [39m[92m+ NNlib v0.8.21[39m
  [90m[77ba4419] [39m[92m+ NaNMath v1.0.2[39m
  [90m[7e02d93a] [39m[92m+ OptimalTransport v0.3.19[39m
  [90m[bac558e1] [39m[92m+ OrderedCollections v1.6.3[39m
  [90m[90014a1f] [39m[92m+ PDMats v0.11.31[39m
  [90m[69de0a69] [39m[92m+ Parsers v2.8.1[39m
  [90m[cb4044da] [39m[92m+ PlutoTest v0.2.2[39m
  [90m[7f904dfe] [39m[92m+ PlutoUI v0.7.60[39m
  [90m[aea7be01] [39m[92m+ PrecompileTools v1.2.1[39m
  [90m[21216c6a] [39m[92m+ Preferences v1.4.3[39m
  [90m[43287f4e] [39m[92m+ PtrArrays v1.2.1[39m
  [90m[1fd47b50] [39m[92m+ QuadGK v2.11.1[39m
  [90m[3cdcf5f2] [39m[92m+ RecipesBase v1.3.4[39m
  [90m[189a3867] [39m[92m+ Reexport v1.2.2[39m
  [90m[ae029012] [39m[92m+ Requires v1.3.0[39m
  [90m[79098fc4] [39m[92m+ Rmath v0.8.0[39m
  [90m[a2af1166] [39m[92m+ SortingAlgorithms v1.2.1[39m
  [90m[276daf66] [39m[92m+ SpecialFunctions v2.4.0[39m
  [90m[90137ffa] [39m[92m+ StaticArrays v1.9.7[39m
  [90m[1e83bf80] [39m[92m+ StaticArraysCore v1.4.3[39m
  [90m[10745b16] [39m[92m+ Statistics v1.11.1[39m
  [90m[82ae8749] [39m[92m+ StatsAPI v1.7.0[39m
  [90m[2913bbd2] [39m[92m+ StatsBase v0.34.3[39m
  [90m[4c63d2b9] [39m[92m+ StatsFuns v1.3.2[39m
  [90m[3bb67fe8] [39m[92m+ TranscodingStreams v0.11.3[39m
  [90m[410a4b4d] [39m[92m+ Tricks v0.1.9[39m
  [90m[5c2747f8] [39m[92m+ URIs v1.5.1[39m
  [90m[013be700] [39m[92m+ UnsafeAtomics v0.2.1[39m
  [90m[d80eeb9a] [39m[92m+ UnsafeAtomicsLLVM v0.2.1[39m
  [90m[6e34b625] [39m[92m+ Bzip2_jll v1.0.8+1[39m
  [90m[e8aa6df9] [39m[92m+ GLPK_jll v5.0.1+0[39m
  [90m[dad2f222] [39m[92m+ LLVMExtra_jll v0.0.34+0[39m
  [90m[efe28fd5] [39m[92m+ OpenSpecFun_jll v0.5.5+0[39m
  [90m[f50d1b31] [39m[92m+ Rmath_jll v0.5.1+0[39m
  [90m[0dad84c5] [39m[92m+ ArgTools v1.1.2[39m
  [90m[56f22d72] [39m[92m+ Artifacts v1.11.0[39m
  [90m[2a0f44e3] [39m[92m+ Base64 v1.11.0[39m
  [90m[ade2ca70] [39m[92m+ Dates v1.11.0[39m
  [90m[f43a241f] [39m[92m+ Downloads v1.6.0[39m
  [90m[7b1f6079] [39m[92m+ FileWatching v1.11.0[39m
  [90m[b77e0a4c] [39m[92m+ InteractiveUtils v1.11.0[39m
  [90m[4af54fe1] [39m[92m+ LazyArtifacts v1.11.0[39m
  [90m[b27032c2] [39m[92m+ LibCURL v0.6.4[39m
  [90m[76f85450] [39m[92m+ LibGit2 v1.11.0[39m
  [90m[8f399da3] [39m[92m+ Libdl v1.11.0[39m
  [90m[37e2e46d] [39m[92m+ LinearAlgebra v1.11.0[39m
  [90m[56ddb016] [39m[92m+ Logging v1.11.0[39m
  [90m[d6f4376e] [39m[92m+ Markdown v1.11.0[39m
  [90m[a63ad114] [39m[92m+ Mmap v1.11.0[39m
  [90m[ca575930] [39m[92m+ NetworkOptions v1.2.0[39m
  [90m[44cfe95a] [39m[92m+ Pkg v1.11.0[39m
  [90m[de0858da] [39m[92m+ Printf v1.11.0[39m
  [90m[9abbd945] [39m[92m+ Profile v1.11.0[39m
  [90m[9a3f8284] [39m[92m+ Random v1.11.0[39m
  [90m[ea8e919c] [39m[92m+ SHA v0.7.0[39m
  [90m[9e88b42a] [39m[92m+ Serialization v1.11.0[39m
  [90m[2f01184e] [39m[92m+ SparseArrays v1.11.0[39m
  [90m[4607b0f0] [39m[92m+ SuiteSparse[39m
  [90m[fa267f1f] [39m[92m+ TOML v1.0.3[39m
  [90m[a4e569a6] [39m[92m+ Tar v1.10.0[39m
  [90m[8dfed614] [39m[92m+ Test v1.11.0[39m
  [90m[cf7118a7] [39m[92m+ UUIDs v1.11.0[39m
  [90m[4ec0a83e] [39m[92m+ Unicode v1.11.0[39m
  [90m[e66e0078] [39m[92m+ CompilerSupportLibraries_jll v1.1.1+0[39m
  [90m[781609d7] [39m[92m+ GMP_jll v6.3.0+0[39m
  [90m[deac9b47] [39m[92m+ LibCURL_jll v8.6.0+0[39m
  [90m[e37daf67] [39m[92m+ LibGit2_jll v1.7.2+0[39m
  [90m[29816b5a] [39m[92m+ LibSSH2_jll v1.11.0+1[39m
  [90m[c8ffd9c3] [39m[92m+ MbedTLS_jll v2.28.6+0[39m
  [90m[14a3606d] [39m[92m+ MozillaCACerts_jll v2023.12.12[39m
  [90m[4536629a] [39m[92m+ OpenBLAS_jll v0.3.27+1[39m
  [90m[05823500] [39m[92m+ OpenLibm_jll v0.8.1+2[39m
  [90m[bea87d4a] [39m[92m+ SuiteSparse_jll v7.7.0+0[39m
  [90m[83775a58] [39m[92m+ Zlib_jll v1.2.13+1[39m
  [90m[8e850b90] [39m[92m+ libblastrampoline_jll v5.11.0+0[39m
  [90m[8e850ede] [39m[92m+ nghttp2_jll v1.59.0+0[39m
  [90m[3f19e933] [39m[92m+ p7zip_jll v17.4.0+2[39m
[36m[1m        Info[22m[39m Packages marked with [32mâŒƒ[39m and [33mâŒ…[39m have new versions available. Those with [32mâŒƒ[39m may be upgradable, but those with [33mâŒ…[39m are restricted by compatibility constraints from upgrading. To see why use `status --outdated -m`

[0m[1mInstantiating...[22m
[90m===[39m

[0m[1mPrecompiling...[22m
[90m===[39m
[32m[1m  Activating[22m[39m project at `/tmp/jl_oDhDHt`
[92m[1mPrecompiling[22m[39m project...
   2069.6 ms[32m  âœ“ [39mBenchmarkTools
   3026.9 ms[32m  âœ“ [39mPlutoTest
 114333.0 ms[32m  âœ“ [39m[90mMathOptInterface[39m
   3610.9 ms[32m  âœ“ [39m[90mExactOptimalTransport[39m
   5661.8 ms[32m  âœ“ [39mOptimalTransport
   9560.8 ms[32m  âœ“ [39mGLPK
  6 dependencies successfully precompiled in 127 seconds. 123 already precompiled.®BenchmarkToolsÚ)§
[0m[1mInstantiating...[22m
[90m===[39m
[33m[1mâ”Œ [22m[39m[33m[1mWarning: [22m[39mThe active manifest file has dependencies that were resolved with a different julia version (1.8.2). Unexpected behavior may occur.
[33m[1mâ”” [22m[39m[90m@ /tmp/jl_oDhDHt/Manifest.toml:0[39m
[32m[1m   Installed[22m[39m DiffRules â”€â”€â”€â”€â”€â”€â”€â”€ v1.12.1
            Installed           Parsers â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ v2.5.0                     [32m[1m[22m[39m
            Installed           PlutoUI â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ v0.7.48                    [32m[1m[22m[39m
            Installed           ForwardDiff â”€â”€â”€â”€â”€â”€ v0.10.32                   [32m[1m[22m[39m
            Installed           NNlib â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ v0.8.10                    [32m[1m[22m[39m
            Installed           GLPK â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ v1.1.0                     [32m[1m[22m[39m
            Installed           Distributions â”€â”€â”€â”€ v0.25.77                   [32m[1m[22m[39m
            Installed           MathOptInterface â”€ v1.9.0                     [32m[1m[22m[39m
                                                                              
[0m[1mResolving...[22m
[90m===[39m
[36m[1mâ”Œ [22m[39m[36m[1mInfo: [22m[39mOperation failed. Updating registries and trying again...
[36m[1mâ”‚ [22m[39m  exception =
[36m[1mâ”‚ [22m[39m   Unsatisfiable requirements detected for package SortingAlgorithms [a2af1166]:
[36m[1mâ”‚ [22m[39m    SortingAlgorithms [a2af1166] log:
[36m[1mâ”‚ [22m[39m    â”œâ”€possible versions are: 0.3.0 - 1.2.1 or uninstalled
[36m[1mâ”‚ [22m[39m    â”œâ”€restricted to versions 1.0.1 by an explicit requirement, leaving only versions: 1.0.1
[36m[1mâ”” [22m[39m    â””â”€restricted by julia compatibility requirements to versions: 1.1.0 - 1.2.1 or uninstalled â€” no versions left

[0m[1mResolving...[22m
[90m===[39m
[33m[1mâ”Œ [22m[39m[33m[1mWarning: [22m[39mOperation failed. Removing Manifest and trying again...
[33m[1mâ”‚ [22m[39m  exception =
[33m[1mâ”‚ [22m[39m   Unsatisfiable requirements detected for package SortingAlgorithms [a2af1166]:
[33m[1mâ”‚ [22m[39m    SortingAlgorithms [a2af1166] log:
[33m[1mâ”‚ [22m[39m    â”œâ”€possible versions are: 0.3.0 - 1.2.1 or uninstalled
[33m[1mâ”‚ [22m[39m    â”œâ”€restricted to versions 1.0.1 by an explicit requirement, leaving only versions: 1.0.1
[33m[1mâ”‚ [22m[39m    â””â”€restricted by julia compatibility requirements to versions: 1.1.0 - 1.2.1 or uninstalled â€” no versions left
[33m[1mâ”” [22m[39m[90m@ Pluto ~/.julia/packages/Pluto/6smog/src/packages/Packages.jl:494[39m

[0m[1mResolving...[22m
[90m===[39m
[32m[1m   Installed[22m[39m GLPK â”€ v1.1.3
             Updating           `/tmp/jl_oDhDHt/Project.toml`                 [32m[1m[22m[39m
[33mâŒ…[39m [90m[6e4b80f9] [39m[92m+ BenchmarkTools v1.3.2[39m
[33mâŒ…[39m [90m[60bf3e95] [39m[92m+ GLPK v1.1.3[39m
  [90m[7e02d93a] [39m[92m+ OptimalTransport v0.3.19[39m
  [90m[cb4044da] [39m[92m+ PlutoTest v0.2.2[39m
  [90m[7f904dfe] [39m[92m+ PlutoUI v0.7.60[39m
  [90m[37e2e46d] [39m[93m~ LinearAlgebra â‡’ v1.11.0[39m
[32m[1m    Updating[22m[39m `/tmp/jl_oDhDHt/Manifest.toml`
  [90m[6e696c72] [39m[92m+ AbstractPlutoDingetjes v1.3.2[39m
[33mâŒ…[39m [90m[79e6a3ab] [39m[92m+ Adapt v3.7.2[39m
  [90m[66dad0bd] [39m[92m+ AliasTables v1.1.3[39m
  [90m[a9b6321e] [39m[92m+ Atomix v0.1.0[39m
[33mâŒ…[39m [90m[6e4b80f9] [39m[92m+ BenchmarkTools v1.3.2[39m
  [90m[fa961155] [39m[92m+ CEnum v0.5.0[39m
  [90m[d360d2e6] [39m[92m+ ChainRulesCore v1.25.0[39m
  [90m[523fee87] [39m[92m+ CodecBzip2 v0.8.4[39m
  [90m[944b1d66] [39m[92m+ CodecZlib v0.7.6[39m
  [90m[3da002f7] [39m[92m+ ColorTypes v0.11.5[39m
  [90m[bbf7d656] [39m[92m+ CommonSubexpressions v0.3.1[39m
  [90m[34da2185] [39m[92m+ Compat v4.16.0[39m
  [90m[9a962f9c] [39m[92m+ DataAPI v1.16.0[39m
  [90m[864edb3b] [39m[92m+ DataStructures v0.18.20[39m
  [90m[163ba53b] [39m[92m+ DiffResults v1.1.0[39m
  [90m[b552c78f] [39m[92m+ DiffRules v1.15.1[39m
  [90m[b4f34e82] [39m[92m+ Distances v0.10.11[39m
  [90m[31c24e10] [39m[92m+ Distributions v0.25.112[39m
  [90m[ffbed154] [39m[92m+ DocStringExtensions v0.9.3[39m
  [90m[24df6009] [39m[92m+ ExactOptimalTransport v0.2.5[39m
  [90m[1a297f60] [39m[92m+ FillArrays v1.13.0[39m
  [90m[53c48c17] [39m[92m+ FixedPointNumbers v0.8.5[39m
  [90m[f6369f11] [39m[92m+ ForwardDiff v0.10.36[39m
[33mâŒ…[39m [90m[60bf3e95] [39m[92m+ GLPK v1.1.3[39m
[32mâŒƒ[39m [90m[46192b85] [39m[92m+ GPUArraysCore v0.1.5[39m
  [90m[34004b35] [39m[92m+ HypergeometricFunctions v0.3.24[39m
  [90m[47d2ed2b] [39m[92m+ Hyperscript v0.0.5[39m
  [90m[ac1192a8] [39m[92m+ HypertextLiteral v0.9.5[39m
  [90m[b5f81e59] [39m[92m+ IOCapture v0.2.5[39m
  [90m[92d709cd] [39m[92m+ IrrationalConstants v0.2.2[39m
  [90m[42fd0dbc] [39m[92m+ IterativeSolvers v0.9.4[39m
  [90m[692b3bcd] [39m[92m+ JLLWrappers v1.6.1[39m
  [90m[682c06a0] [39m[92m+ JSON v0.21.4[39m
  [90m[63c18a36] [39m[92m+ KernelAbstractions v0.9.28[39m
  [90m[929cbde3] [39m[92m+ LLVM v9.1.2[39m
  [90m[2ab3a3ac] [39m[92m+ LogExpFunctions v0.3.28[39m
  [90m[6c6e2e6c] [39m[92m+ MIMEs v0.1.4[39m
  [90m[1914dd2f] [39m[92m+ MacroTools v0.5.13[39m
  [90m[b8f27783] [39m[92m+ MathOptInterface v1.31.2[39m
  [90m[e1d29d7a] [39m[92m+ Missings v1.2.0[39m
  [90m[d8a4904e] [39m[92m+ MutableArithmetics v1.5.1[39m
[33mâŒ…[39m [90m[872c559c] [39m[92m+ NNlib v0.8.21[39m
  [90m[77ba4419] [39m[92m+ NaNMath v1.0.2[39m
  [90m[7e02d93a] [39m[92m+ OptimalTransport v0.3.19[39m
  [90m[bac558e1] [39m[92m+ OrderedCollections v1.6.3[39m
  [90m[90014a1f] [39m[92m+ PDMats v0.11.31[39m
  [90m[69de0a69] [39m[92m+ Parsers v2.8.1[39m
  [90m[cb4044da] [39m[92m+ PlutoTest v0.2.2[39m
  [90m[7f904dfe] [39m[92m+ PlutoUI v0.7.60[39m
  [90m[aea7be01] [39m[92m+ PrecompileTools v1.2.1[39m
  [90m[21216c6a] [39m[92m+ Preferences v1.4.3[39m
  [90m[43287f4e] [39m[92m+ PtrArrays v1.2.1[39m
  [90m[1fd47b50] [39m[92m+ QuadGK v2.11.1[39m
  [90m[3cdcf5f2] [39m[92m+ RecipesBase v1.3.4[39m
  [90m[189a3867] [39m[92m+ Reexport v1.2.2[39m
  [90m[ae029012] [39m[92m+ Requires v1.3.0[39m
  [90m[79098fc4] [39m[92m+ Rmath v0.8.0[39m
  [90m[a2af1166] [39m[92m+ SortingAlgorithms v1.2.1[39m
  [90m[276daf66] [39m[92m+ SpecialFunctions v2.4.0[39m
  [90m[90137ffa] [39m[92m+ StaticArrays v1.9.7[39m
  [90m[1e83bf80] [39m[92m+ StaticArraysCore v1.4.3[39m
  [90m[10745b16] [39m[92m+ Statistics v1.11.1[39m
  [90m[82ae8749] [39m[92m+ StatsAPI v1.7.0[39m
  [90m[2913bbd2] [39m[92m+ StatsBase v0.34.3[39m
  [90m[4c63d2b9] [39m[92m+ StatsFuns v1.3.2[39m
  [90m[3bb67fe8] [39m[92m+ TranscodingStreams v0.11.3[39m
  [90m[410a4b4d] [39m[92m+ Tricks v0.1.9[39m
  [90m[5c2747f8] [39m[92m+ URIs v1.5.1[39m
  [90m[013be700] [39m[92m+ UnsafeAtomics v0.2.1[39m
  [90m[d80eeb9a] [39m[92m+ UnsafeAtomicsLLVM v0.2.1[39m
  [90m[6e34b625] [39m[92m+ Bzip2_jll v1.0.8+1[39m
  [90m[e8aa6df9] [39m[92m+ GLPK_jll v5.0.1+0[39m
  [90m[dad2f222] [39m[92m+ LLVMExtra_jll v0.0.34+0[39m
  [90m[efe28fd5] [39m[92m+ OpenSpecFun_jll v0.5.5+0[39m
  [90m[f50d1b31] [39m[92m+ Rmath_jll v0.5.1+0[39m
  [90m[0dad84c5] [39m[92m+ ArgTools v1.1.2[39m
  [90m[56f22d72] [39m[92m+ Artifacts v1.11.0[39m
  [90m[2a0f44e3] [39m[92m+ Base64 v1.11.0[39m
  [90m[ade2ca70] [39m[92m+ Dates v1.11.0[39m
  [90m[f43a241f] [39m[92m+ Downloads v1.6.0[39m
  [90m[7b1f6079] [39m[92m+ FileWatching v1.11.0[39m
  [90m[b77e0a4c] [39m[92m+ InteractiveUtils v1.11.0[39m
  [90m[4af54fe1] [39m[92m+ LazyArtifacts v1.11.0[39m
  [90m[b27032c2] [39m[92m+ LibCURL v0.6.4[39m
  [90m[76f85450] [39m[92m+ LibGit2 v1.11.0[39m
  [90m[8f399da3] [39m[92m+ Libdl v1.11.0[39m
  [90m[37e2e46d] [39m[92m+ LinearAlgebra v1.11.0[39m
  [90m[56ddb016] [39m[92m+ Logging v1.11.0[39m
  [90m[d6f4376e] [39m[92m+ Markdown v1.11.0[39m
  [90m[a63ad114] [39m[92m+ Mmap v1.11.0[39m
  [90m[ca575930] [39m[92m+ NetworkOptions v1.2.0[39m
  [90m[44cfe95a] [39m[92m+ Pkg v1.11.0[39m
  [90m[de0858da] [39m[92m+ Printf v1.11.0[39m
  [90m[9abbd945] [39m[92m+ Profile v1.11.0[39m
  [90m[9a3f8284] [39m[92m+ Random v1.11.0[39m
  [90m[ea8e919c] [39m[92m+ SHA v0.7.0[39m
  [90m[9e88b42a] [39m[92m+ Serialization v1.11.0[39m
  [90m[2f01184e] [39m[92m+ SparseArrays v1.11.0[39m
  [90m[4607b0f0] [39m[92m+ SuiteSparse[39m
  [90m[fa267f1f] [39m[92m+ TOML v1.0.3[39m
  [90m[a4e569a6] [39m[92m+ Tar v1.10.0[39m
  [90m[8dfed614] [39m[92m+ Test v1.11.0[39m
  [90m[cf7118a7] [39m[92m+ UUIDs v1.11.0[39m
  [90m[4ec0a83e] [39m[92m+ Unicode v1.11.0[39m
  [90m[e66e0078] [39m[92m+ CompilerSupportLibraries_jll v1.1.1+0[39m
  [90m[781609d7] [39m[92m+ GMP_jll v6.3.0+0[39m
  [90m[deac9b47] [39m[92m+ LibCURL_jll v8.6.0+0[39m
  [90m[e37daf67] [39m[92m+ LibGit2_jll v1.7.2+0[39m
  [90m[29816b5a] [39m[92m+ LibSSH2_jll v1.11.0+1[39m
  [90m[c8ffd9c3] [39m[92m+ MbedTLS_jll v2.28.6+0[39m
  [90m[14a3606d] [39m[92m+ MozillaCACerts_jll v2023.12.12[39m
  [90m[4536629a] [39m[92m+ OpenBLAS_jll v0.3.27+1[39m
  [90m[05823500] [39m[92m+ OpenLibm_jll v0.8.1+2[39m
  [90m[bea87d4a] [39m[92m+ SuiteSparse_jll v7.7.0+0[39m
  [90m[83775a58] [39m[92m+ Zlib_jll v1.2.13+1[39m
  [90m[8e850b90] [39m[92m+ libblastrampoline_jll v5.11.0+0[39m
  [90m[8e850ede] [39m[92m+ nghttp2_jll v1.59.0+0[39m
  [90m[3f19e933] [39m[92m+ p7zip_jll v17.4.0+2[39m
[36m[1m        Info[22m[39m Packages marked with [32mâŒƒ[39m and [33mâŒ…[39m have new versions available. Those with [32mâŒƒ[39m may be upgradable, but those with [33mâŒ…[39m are restricted by compatibility constraints from upgrading. To see why use `status --outdated -m`

[0m[1mInstantiating...[22m
[90m===[39m

[0m[1mPrecompiling...[22m
[90m===[39m
[32m[1m  Activating[22m[39m project at `/tmp/jl_oDhDHt`
[92m[1mPrecompiling[22m[39m project...
   2069.6 ms[32m  âœ“ [39mBenchmarkTools
   3026.9 ms[32m  âœ“ [39mPlutoTest
 114333.0 ms[32m  âœ“ [39m[90mMathOptInterface[39m
   3610.9 ms[32m  âœ“ [39m[90mExactOptimalTransport[39m
   5661.8 ms[32m  âœ“ [39mOptimalTransport
   9560.8 ms[32m  âœ“ [39mGLPK
  6 dependencies successfully precompiled in 127 seconds. 123 already precompiled.°OptimalTransportÚ)§
[0m[1mInstantiating...[22m
[90m===[39m
[33m[1mâ”Œ [22m[39m[33m[1mWarning: [22m[39mThe active manifest file has dependencies that were resolved with a different julia version (1.8.2). Unexpected behavior may occur.
[33m[1mâ”” [22m[39m[90m@ /tmp/jl_oDhDHt/Manifest.toml:0[39m
[32m[1m   Installed[22m[39m DiffRules â”€â”€â”€â”€â”€â”€â”€â”€ v1.12.1
            Installed           Parsers â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ v2.5.0                     [32m[1m[22m[39m
            Installed           PlutoUI â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ v0.7.48                    [32m[1m[22m[39m
            Installed           ForwardDiff â”€â”€â”€â”€â”€â”€ v0.10.32                   [32m[1m[22m[39m
            Installed           NNlib â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ v0.8.10                    [32m[1m[22m[39m
            Installed           GLPK â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ v1.1.0                     [32m[1m[22m[39m
            Installed           Distributions â”€â”€â”€â”€ v0.25.77                   [32m[1m[22m[39m
            Installed           MathOptInterface â”€ v1.9.0                     [32m[1m[22m[39m
                                                                              
[0m[1mResolving...[22m
[90m===[39m
[36m[1mâ”Œ [22m[39m[36m[1mInfo: [22m[39mOperation failed. Updating registries and trying again...
[36m[1mâ”‚ [22m[39m  exception =
[36m[1mâ”‚ [22m[39m   Unsatisfiable requirements detected for package SortingAlgorithms [a2af1166]:
[36m[1mâ”‚ [22m[39m    SortingAlgorithms [a2af1166] log:
[36m[1mâ”‚ [22m[39m    â”œâ”€possible versions are: 0.3.0 - 1.2.1 or uninstalled
[36m[1mâ”‚ [22m[39m    â”œâ”€restricted to versions 1.0.1 by an explicit requirement, leaving only versions: 1.0.1
[36m[1mâ”” [22m[39m    â””â”€restricted by julia compatibility requirements to versions: 1.1.0 - 1.2.1 or uninstalled â€” no versions left

[0m[1mResolving...[22m
[90m===[39m
[33m[1mâ”Œ [22m[39m[33m[1mWarning: [22m[39mOperation failed. Removing Manifest and trying again...
[33m[1mâ”‚ [22m[39m  exception =
[33m[1mâ”‚ [22m[39m   Unsatisfiable requirements detected for package SortingAlgorithms [a2af1166]:
[33m[1mâ”‚ [22m[39m    SortingAlgorithms [a2af1166] log:
[33m[1mâ”‚ [22m[39m    â”œâ”€possible versions are: 0.3.0 - 1.2.1 or uninstalled
[33m[1mâ”‚ [22m[39m    â”œâ”€restricted to versions 1.0.1 by an explicit requirement, leaving only versions: 1.0.1
[33m[1mâ”‚ [22m[39m    â””â”€restricted by julia compatibility requirements to versions: 1.1.0 - 1.2.1 or uninstalled â€” no versions left
[33m[1mâ”” [22m[39m[90m@ Pluto ~/.julia/packages/Pluto/6smog/src/packages/Packages.jl:494[39m

[0m[1mResolving...[22m
[90m===[39m
[32m[1m   Installed[22m[39m GLPK â”€ v1.1.3
             Updating           `/tmp/jl_oDhDHt/Project.toml`                 [32m[1m[22m[39m
[33mâŒ…[39m [90m[6e4b80f9] [39m[92m+ BenchmarkTools v1.3.2[39m
[33mâŒ…[39m [90m[60bf3e95] [39m[92m+ GLPK v1.1.3[39m
  [90m[7e02d93a] [39m[92m+ OptimalTransport v0.3.19[39m
  [90m[cb4044da] [39m[92m+ PlutoTest v0.2.2[39m
  [90m[7f904dfe] [39m[92m+ PlutoUI v0.7.60[39m
  [90m[37e2e46d] [39m[93m~ LinearAlgebra â‡’ v1.11.0[39m
[32m[1m    Updating[22m[39m `/tmp/jl_oDhDHt/Manifest.toml`
  [90m[6e696c72] [39m[92m+ AbstractPlutoDingetjes v1.3.2[39m
[33mâŒ…[39m [90m[79e6a3ab] [39m[92m+ Adapt v3.7.2[39m
  [90m[66dad0bd] [39m[92m+ AliasTables v1.1.3[39m
  [90m[a9b6321e] [39m[92m+ Atomix v0.1.0[39m
[33mâŒ…[39m [90m[6e4b80f9] [39m[92m+ BenchmarkTools v1.3.2[39m
  [90m[fa961155] [39m[92m+ CEnum v0.5.0[39m
  [90m[d360d2e6] [39m[92m+ ChainRulesCore v1.25.0[39m
  [90m[523fee87] [39m[92m+ CodecBzip2 v0.8.4[39m
  [90m[944b1d66] [39m[92m+ CodecZlib v0.7.6[39m
  [90m[3da002f7] [39m[92m+ ColorTypes v0.11.5[39m
  [90m[bbf7d656] [39m[92m+ CommonSubexpressions v0.3.1[39m
  [90m[34da2185] [39m[92m+ Compat v4.16.0[39m
  [90m[9a962f9c] [39m[92m+ DataAPI v1.16.0[39m
  [90m[864edb3b] [39m[92m+ DataStructures v0.18.20[39m
  [90m[163ba53b] [39m[92m+ DiffResults v1.1.0[39m
  [90m[b552c78f] [39m[92m+ DiffRules v1.15.1[39m
  [90m[b4f34e82] [39m[92m+ Distances v0.10.11[39m
  [90m[31c24e10] [39m[92m+ Distributions v0.25.112[39m
  [90m[ffbed154] [39m[92m+ DocStringExtensions v0.9.3[39m
  [90m[24df6009] [39m[92m+ ExactOptimalTransport v0.2.5[39m
  [90m[1a297f60] [39m[92m+ FillArrays v1.13.0[39m
  [90m[53c48c17] [39m[92m+ FixedPointNumbers v0.8.5[39m
  [90m[f6369f11] [39m[92m+ ForwardDiff v0.10.36[39m
[33mâŒ…[39m [90m[60bf3e95] [39m[92m+ GLPK v1.1.3[39m
[32mâŒƒ[39m [90m[46192b85] [39m[92m+ GPUArraysCore v0.1.5[39m
  [90m[34004b35] [39m[92m+ HypergeometricFunctions v0.3.24[39m
  [90m[47d2ed2b] [39m[92m+ Hyperscript v0.0.5[39m
  [90m[ac1192a8] [39m[92m+ HypertextLiteral v0.9.5[39m
  [90m[b5f81e59] [39m[92m+ IOCapture v0.2.5[39m
  [90m[92d709cd] [39m[92m+ IrrationalConstants v0.2.2[39m
  [90m[42fd0dbc] [39m[92m+ IterativeSolvers v0.9.4[39m
  [90m[692b3bcd] [39m[92m+ JLLWrappers v1.6.1[39m
  [90m[682c06a0] [39m[92m+ JSON v0.21.4[39m
  [90m[63c18a36] [39m[92m+ KernelAbstractions v0.9.28[39m
  [90m[929cbde3] [39m[92m+ LLVM v9.1.2[39m
  [90m[2ab3a3ac] [39m[92m+ LogExpFunctions v0.3.28[39m
  [90m[6c6e2e6c] [39m[92m+ MIMEs v0.1.4[39m
  [90m[1914dd2f] [39m[92m+ MacroTools v0.5.13[39m
  [90m[b8f27783] [39m[92m+ MathOptInterface v1.31.2[39m
  [90m[e1d29d7a] [39m[92m+ Missings v1.2.0[39m
  [90m[d8a4904e] [39m[92m+ MutableArithmetics v1.5.1[39m
[33mâŒ…[39m [90m[872c559c] [39m[92m+ NNlib v0.8.21[39m
  [90m[77ba4419] [39m[92m+ NaNMath v1.0.2[39m
  [90m[7e02d93a] [39m[92m+ OptimalTransport v0.3.19[39m
  [90m[bac558e1] [39m[92m+ OrderedCollections v1.6.3[39m
  [90m[90014a1f] [39m[92m+ PDMats v0.11.31[39m
  [90m[69de0a69] [39m[92m+ Parsers v2.8.1[39m
  [90m[cb4044da] [39m[92m+ PlutoTest v0.2.2[39m
  [90m[7f904dfe] [39m[92m+ PlutoUI v0.7.60[39m
  [90m[aea7be01] [39m[92m+ PrecompileTools v1.2.1[39m
  [90m[21216c6a] [39m[92m+ Preferences v1.4.3[39m
  [90m[43287f4e] [39m[92m+ PtrArrays v1.2.1[39m
  [90m[1fd47b50] [39m[92m+ QuadGK v2.11.1[39m
  [90m[3cdcf5f2] [39m[92m+ RecipesBase v1.3.4[39m
  [90m[189a3867] [39m[92m+ Reexport v1.2.2[39m
  [90m[ae029012] [39m[92m+ Requires v1.3.0[39m
  [90m[79098fc4] [39m[92m+ Rmath v0.8.0[39m
  [90m[a2af1166] [39m[92m+ SortingAlgorithms v1.2.1[39m
  [90m[276daf66] [39m[92m+ SpecialFunctions v2.4.0[39m
  [90m[90137ffa] [39m[92m+ StaticArrays v1.9.7[39m
  [90m[1e83bf80] [39m[92m+ StaticArraysCore v1.4.3[39m
  [90m[10745b16] [39m[92m+ Statistics v1.11.1[39m
  [90m[82ae8749] [39m[92m+ StatsAPI v1.7.0[39m
  [90m[2913bbd2] [39m[92m+ StatsBase v0.34.3[39m
  [90m[4c63d2b9] [39m[92m+ StatsFuns v1.3.2[39m
  [90m[3bb67fe8] [39m[92m+ TranscodingStreams v0.11.3[39m
  [90m[410a4b4d] [39m[92m+ Tricks v0.1.9[39m
  [90m[5c2747f8] [39m[92m+ URIs v1.5.1[39m
  [90m[013be700] [39m[92m+ UnsafeAtomics v0.2.1[39m
  [90m[d80eeb9a] [39m[92m+ UnsafeAtomicsLLVM v0.2.1[39m
  [90m[6e34b625] [39m[92m+ Bzip2_jll v1.0.8+1[39m
  [90m[e8aa6df9] [39m[92m+ GLPK_jll v5.0.1+0[39m
  [90m[dad2f222] [39m[92m+ LLVMExtra_jll v0.0.34+0[39m
  [90m[efe28fd5] [39m[92m+ OpenSpecFun_jll v0.5.5+0[39m
  [90m[f50d1b31] [39m[92m+ Rmath_jll v0.5.1+0[39m
  [90m[0dad84c5] [39m[92m+ ArgTools v1.1.2[39m
  [90m[56f22d72] [39m[92m+ Artifacts v1.11.0[39m
  [90m[2a0f44e3] [39m[92m+ Base64 v1.11.0[39m
  [90m[ade2ca70] [39m[92m+ Dates v1.11.0[39m
  [90m[f43a241f] [39m[92m+ Downloads v1.6.0[39m
  [90m[7b1f6079] [39m[92m+ FileWatching v1.11.0[39m
  [90m[b77e0a4c] [39m[92m+ InteractiveUtils v1.11.0[39m
  [90m[4af54fe1] [39m[92m+ LazyArtifacts v1.11.0[39m
  [90m[b27032c2] [39m[92m+ LibCURL v0.6.4[39m
  [90m[76f85450] [39m[92m+ LibGit2 v1.11.0[39m
  [90m[8f399da3] [39m[92m+ Libdl v1.11.0[39m
  [90m[37e2e46d] [39m[92m+ LinearAlgebra v1.11.0[39m
  [90m[56ddb016] [39m[92m+ Logging v1.11.0[39m
  [90m[d6f4376e] [39m[92m+ Markdown v1.11.0[39m
  [90m[a63ad114] [39m[92m+ Mmap v1.11.0[39m
  [90m[ca575930] [39m[92m+ NetworkOptions v1.2.0[39m
  [90m[44cfe95a] [39m[92m+ Pkg v1.11.0[39m
  [90m[de0858da] [39m[92m+ Printf v1.11.0[39m
  [90m[9abbd945] [39m[92m+ Profile v1.11.0[39m
  [90m[9a3f8284] [39m[92m+ Random v1.11.0[39m
  [90m[ea8e919c] [39m[92m+ SHA v0.7.0[39m
  [90m[9e88b42a] [39m[92m+ Serialization v1.11.0[39m
  [90m[2f01184e] [39m[92m+ SparseArrays v1.11.0[39m
  [90m[4607b0f0] [39m[92m+ SuiteSparse[39m
  [90m[fa267f1f] [39m[92m+ TOML v1.0.3[39m
  [90m[a4e569a6] [39m[92m+ Tar v1.10.0[39m
  [90m[8dfed614] [39m[92m+ Test v1.11.0[39m
  [90m[cf7118a7] [39m[92m+ UUIDs v1.11.0[39m
  [90m[4ec0a83e] [39m[92m+ Unicode v1.11.0[39m
  [90m[e66e0078] [39m[92m+ CompilerSupportLibraries_jll v1.1.1+0[39m
  [90m[781609d7] [39m[92m+ GMP_jll v6.3.0+0[39m
  [90m[deac9b47] [39m[92m+ LibCURL_jll v8.6.0+0[39m
  [90m[e37daf67] [39m[92m+ LibGit2_jll v1.7.2+0[39m
  [90m[29816b5a] [39m[92m+ LibSSH2_jll v1.11.0+1[39m
  [90m[c8ffd9c3] [39m[92m+ MbedTLS_jll v2.28.6+0[39m
  [90m[14a3606d] [39m[92m+ MozillaCACerts_jll v2023.12.12[39m
  [90m[4536629a] [39m[92m+ OpenBLAS_jll v0.3.27+1[39m
  [90m[05823500] [39m[92m+ OpenLibm_jll v0.8.1+2[39m
  [90m[bea87d4a] [39m[92m+ SuiteSparse_jll v7.7.0+0[39m
  [90m[83775a58] [39m[92m+ Zlib_jll v1.2.13+1[39m
  [90m[8e850b90] [39m[92m+ libblastrampoline_jll v5.11.0+0[39m
  [90m[8e850ede] [39m[92m+ nghttp2_jll v1.59.0+0[39m
  [90m[3f19e933] [39m[92m+ p7zip_jll v17.4.0+2[39m
[36m[1m        Info[22m[39m Packages marked with [32mâŒƒ[39m and [33mâŒ…[39m have new versions available. Those with [32mâŒƒ[39m may be upgradable, but those with [33mâŒ…[39m are restricted by compatibility constraints from upgrading. To see why use `status --outdated -m`

[0m[1mInstantiating...[22m
[90m===[39m

[0m[1mPrecompiling...[22m
[90m===[39m
[32m[1m  Activating[22m[39m project at `/tmp/jl_oDhDHt`
[92m[1mPrecompiling[22m[39m project...
   2069.6 ms[32m  âœ“ [39mBenchmarkTools
   3026.9 ms[32m  âœ“ [39mPlutoTest
 114333.0 ms[32m  âœ“ [39m[90mMathOptInterface[39m
   3610.9 ms[32m  âœ“ [39m[90mExactOptimalTransport[39m
   5661.8 ms[32m  âœ“ [39mOptimalTransport
   9560.8 ms[32m  âœ“ [39mGLPK
  6 dependencies successfully precompiled in 127 seconds. 123 already precompiled.§enabledÃ·restart_recommended_msgÀ´restart_required_msgÀ­busy_packages¶waiting_for_permissionÂÙ,waiting_for_permission_but_probably_disabledÂ«cell_inputsÞ Ù$fff3fe40-b944-46ed-aea1-3d550ed5fbb0„§cell_idÙ$fff3fe40-b944-46ed-aea1-3d550ed5fbb0¤codeÚ3"""
	find_suboptimal_edge(f, g, C)::Union{Nothing,CartesianIndex}

Returns the position of an existing suboptimal edge.
"""
function find_suboptimal_edge(f, g, C)
	for i in eachindex(f),
		j in eachindex(g)

		@inbounds if f[i] + g[j] - C[i, j] > 1e-14
			return CartesianIndex(i, j)
		end
	end
	nothing
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$3be07e02-b95f-44a2-9491-f39a1a1c2617„§cell_idÙ$3be07e02-b95f-44a2-9491-f39a1a1c2617¤codeÙêlet
	na = 3
	nb = 3
		
	a = fill(1/na, na)
	b = fill(1/nb, nb)
	C = randn(na, nb)

	emd2
	b1 = @BenchmarkTools.benchmark emd2($a,$b,$C)
	b2 = @BenchmarkTools.benchmark OptimalTransport.emd2($a, $b, $C, GLPK.Optimizer())
	
	[b1,b2]
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$521f7c7a-823d-4873-8484-66c17825b966„§cell_idÙ$521f7c7a-823d-4873-8484-66c17825b966¤codeÙ$md"""
## OptimalTransport.jl API
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$9bef5380-7275-42de-99cc-597aa72b0abc„§cell_idÙ$9bef5380-7275-42de-99cc-597aa72b0abc¤codeÙ#md"""
# Graph & Cycle detection
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$a05afd19-3bae-4479-b8f0-86f373094113„§cell_idÙ$a05afd19-3bae-4479-b8f0-86f373094113¤codeÙ-import OptimalTransport, GLPK, BenchmarkTools¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$5584d358-eab9-48fa-a880-62080674df12„§cell_idÙ$5584d358-eab9-48fa-a880-62080674df12¤code±TableOfContents()¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$3e4a5f6d-d4ef-4372-9762-388b92f0755b„§cell_idÙ$3e4a5f6d-d4ef-4372-9762-388b92f0755b¤codeÙ5md"""
## Obtaining a Dual Pair Complementary to P
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$e7aea362-3595-45d2-bb0a-512e241c17bc„§cell_idÙ$e7aea362-3595-45d2-bb0a-512e241c17bc¤codeÙpcollect_cycle(
	Bool.([
		1 0 1
		0 0 0
		1 0 1
	]),
	[
		1.1 0 1.2
		0 0 0
		1 0 1
	],
	CartesianIndex(1, 1),
)¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$32b4c5a4-f5e4-457d-b09d-531215fda61b„§cell_idÙ$32b4c5a4-f5e4-457d-b09d-531215fda61b¤codeÚ@"""
Tries to find a feasible solution \$(f, g)\$ to the dual problem given a plan \$P\$.

 - `G` (the graph associated with the transport plan) is an adjacency matrix of the bi-partite network.
 - `C` is the cost matrix
"""
function find_feasible_dual(G, C)
	f = zeros(eltype(C), size(C, 1))
	g = zeros(eltype(C), size(C, 2))

	explored = Set{Int}()

	nÎ¼ = size(C, 1)
	function dfs(i)
		i âˆˆ explored && return
		push!(explored, i)

		if i > nÎ¼ # i is in g
			i -= nÎ¼
			neighbors = findall(@view G[:,i])
			for j in neighbors
				j âˆˆ explored && continue
				
				f[j] = C[j,i] - g[i]
				dfs(j)
			end
		else # i is in f
			neighbors = findall(@view G[i,:])
			for j in neighbors
				(j + nÎ¼) âˆˆ explored && continue

				g[j] = C[i,j] - f[i] 
				dfs(j + nÎ¼)
			end
		end
	end

	for i in 1:nÎ¼
		dfs(i)
	end
		
	f, g
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$cb5ecc78-6ffc-44ea-94cd-d80d8b079423„§cell_idÙ$cb5ecc78-6ffc-44ea-94cd-d80d8b079423¤code·md"""
#### Packages
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$c8cd4eff-8702-42a2-8b40-8a789ea4a37f„§cell_idÙ$c8cd4eff-8702-42a2-8b40-8a789ea4a37f¤code¸using PlutoTest, PlutoUI¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$187de006-8830-11ec-3fb7-297fcaedd55e„§cell_idÙ$187de006-8830-11ec-3fb7-297fcaedd55e¤codeÚ"""
	north_west(Î¼, Î½)

Finds an initial transport plan that respect the marginal constraints \$(\\mu,\\nu)\$.
"""
function north_west(Î¼, Î½)
	P = zeros(eltype(Î¼), (length(Î¼), length(Î½)))
	G = falses((length(Î¼), length(Î½)))
	i, j = 1, 1
	r, c = Î¼[i], Î½[j]
	while i <= length(Î¼) && j <= length(Î½)
		P[i, j] = t = min(r, c)
		G[i, j] = t > 0
		r -= t
		c -= t
		if r == 0
			i += 1
			if i <= length(Î¼)
				r = Î¼[i]
			end
		elseif c == 0
			j += 1
			if j <= length(Î½)
				c = Î½[j]
			end
		end
	end
	P, G
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$c147499e-bb03-428a-8acf-49722fd54c7e„§cell_idÙ$c147499e-bb03-428a-8acf-49722fd54c7e¤codeÙ&md"""
# Putting it all together...
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$96ab200e-603d-4c87-9cc1-c37dbda6ace4„§cell_idÙ$96ab200e-603d-4c87-9cc1-c37dbda6ace4¤codeÙÅlet
	G = Bool.([
		 0  1  1
		 1  0  1
		 1  0  1
	])
	P = [
		 0.0       0.333333  0.0
		 0.333333  0.0       0.0
		 0.0       0.0       0.333333
	]

	collect_cycle(G, P, CartesianIndex(2, 3))
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$aa5810ed-b4a0-41fa-bdfd-95df64edf677„§cell_idÙ$aa5810ed-b4a0-41fa-bdfd-95df64edf677¤codeÚ†function emd(a, b, C)
	# Initialize
	P, G = north_west(a, b)

@label dual

	# Find feasible dual pair
	f, g = find_feasible_dual(G, C)

	# Is there a sub-optimal edge ?
	edge = find_suboptimal_edge(f, g, C)

	# 3.5.2 Network Simplex update

	# We have reached the optimum
	if isnothing(edge)
		return P
	end

	# Add the violating edge
	G[edge] = true

	cycle = collect_cycle(G, P, edge)
		
	# Two cases can then arise:
	if isnothing(cycle)
		# (a) G is (still) a forest
		@goto dual
	else
		# (b) G now has a cycle
		indices, costs = cycle

		# Sub-optimal edge is either at the beginning or end of the
		# cycle.
		@assert indices[end] == edge || indices[begin] == edge

		kâƒ° = if indices[end] == edge
			k = argmin(@view costs[begin:2:end])
			1 + (k - 1) * 2
		elseif indices[begin] == edge
			k = argmin(@view costs[begin+1:2:end])
			2k
		end
		Î¸ = costs[kâƒ°]

		arity = kâƒ° % 2
		for (i, idx) in enumerate(indices)
			if i % 2 == arity
				P[idx] -= Î¸
			else
				P[idx] += Î¸
			end
		end

		# We then close the update by removing (iâ‚–â­‘â‚Šâ‚, jâ‚–â­‘) from G
		G[indices[kâƒ°]] = false
		@assert P[indices[kâƒ°]] == 0.

		@goto dual
	end
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$b73c42fd-7a52-45d0-b9a3-ede4dcc61e36„§cell_idÙ$b73c42fd-7a52-45d0-b9a3-ede4dcc61e36¤codeÙSlet
	C = [
		0 1 1
		1 0 1
		1 1 2
	]
	emd([1/4, 1/4, 1/2], [1/3, 1/3, 1/3], C)
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$4b2c7693-7873-42b3-85d3-79712fee730d„§cell_idÙ$4b2c7693-7873-42b3-85d3-79712fee730d¤codeÙ?function emd2(Î¼, Î½, C)
	Î³ = emd(Î¼, Î½, C)
	sum(Î³ .* C)
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$1030d263-d188-49d0-b9da-5d02810bba9b„§cell_idÙ$1030d263-d188-49d0-b9da-5d02810bba9b¤codeÙxlet
	P = [
		.2 0. 0.
		.3 .1 .1
		0. 0. .3
	]
	Î¼, Î½ = [.2, .5, .3], [.5, .1, 4]
	@test north_west(Î¼, Î½)[1] == P
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$1ba4e1d2-a260-4f48-866c-821e53c30506„§cell_idÙ$1ba4e1d2-a260-4f48-866c-821e53c30506¤codeÙ”md"""
# The Network Simplex

This is a textbook implementation of the Network Simplex algorithm from the book "Computational Optimal Transport".
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$aac9efe0-d6a1-4587-99ec-46e0f1411c85„§cell_idÙ$aac9efe0-d6a1-4587-99ec-46e0f1411c85¤codeÚVfunction collect_cycle(G, P, edge)
	n = size(G, 1)

	costs = Float64[]
	indices = CartesianIndex[]

	stack = Int[]
	explored = Set{Int}()
	
	function dfs(i)
		if false && i âˆˆ explored
			return false
		end
		if i âˆˆ stack
			return true
		end

		parent = isempty(stack) ? -1 : stack[end]
		push!(stack, i)

		if i > n
			for j in findall(@view G[:,i-n])
				if j == parent
					# pass
				elseif dfs(j)
					idx = CartesianIndex(j,i-n)
					push!(indices, idx)
					push!(costs, P[idx])
					return true
				end
			end
		else
			for j in findall(@view G[i,:])
				if j+n == parent
					# pass
				elseif dfs(j + n)
					idx = CartesianIndex(i,j)
					push!(indices, idx)
					push!(costs, P[idx])
					return true
				end
			end
		end

		pop!(stack)
		push!(explored, i)

		return false
	end

	if dfs(edge[1])
		indices, costs
	else
		nothing
	end
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$1ee92bf4-835f-4c62-9bd5-5d96a86e9d8b„§cell_idÙ$1ee92bf4-835f-4c62-9bd5-5d96a86e9d8b¤codeÙólet
	na = 2
	nb = na = 3
	a = fill(1/na, na)
	b = fill(1/nb, nb)
	C = Matrix{Float64}(I, na, nb)

	P, G = north_west(a, b)
	f, g = find_feasible_dual(G, C)

	edge = find_suboptimal_edge(f, g, C)
	edge, f, g, f[edge[1]], g[edge[2]], C[edge]
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$d29bbd55-4b0c-4fa0-8bd7-d9b85d7d7a10„§cell_idÙ$d29bbd55-4b0c-4fa0-8bd7-d9b85d7d7a10¤code³using LinearAlgebra¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$616cfde6-190b-403b-8d1c-da2f4eb385ad„§cell_idÙ$616cfde6-190b-403b-8d1c-da2f4eb385ad¤codeÙ»for _ in 1:3
	na = 20
	nb = 20
	a = fill(1/na, na)
	b = fill(1/nb, nb)
	C = randn(na, nb)

	c1 = emd2(a,b,C)
	c2 = OptimalTransport.emd2(a, b, C, GLPK.Optimizer())

	@assert c1 â‰ˆ c2
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$65dd721e-20aa-4a2b-abb4-46f04d922aee„§cell_idÙ$65dd721e-20aa-4a2b-abb4-46f04d922aee¤codeÙ'md"""
## The North-West Corner rule
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃ«notebook_idÙ$eb27072a-8a3b-11ef-370b-812543c54790«in_temp_dirÂ¨metadata€