940 lines
No EOL
42 KiB
HTML
940 lines
No EOL
42 KiB
HTML
<!DOCTYPE html>
|
||
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head>
|
||
|
||
<meta charset="utf-8">
|
||
<meta name="generator" content="quarto-1.7.22">
|
||
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
|
||
|
||
<meta name="author" content="Louis Lacoste">
|
||
|
||
<title>Bilan semaine 24 2025 : 10 juin - 13 juin – Suivi de la thèse</title>
|
||
<style>
|
||
code{white-space: pre-wrap;}
|
||
span.smallcaps{font-variant: small-caps;}
|
||
div.columns{display: flex; gap: min(4vw, 1.5em);}
|
||
div.column{flex: auto; overflow-x: auto;}
|
||
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
|
||
ul.task-list{list-style: none;}
|
||
ul.task-list li input[type="checkbox"] {
|
||
width: 0.8em;
|
||
margin: 0 0.8em 0.2em -1em; /* quarto-specific, see https://github.com/quarto-dev/quarto-cli/issues/4556 */
|
||
vertical-align: middle;
|
||
}
|
||
/* CSS for citations */
|
||
div.csl-bib-body { }
|
||
div.csl-entry {
|
||
clear: both;
|
||
margin-bottom: 0em;
|
||
}
|
||
.hanging-indent div.csl-entry {
|
||
margin-left:2em;
|
||
text-indent:-2em;
|
||
}
|
||
div.csl-left-margin {
|
||
min-width:2em;
|
||
float:left;
|
||
}
|
||
div.csl-right-inline {
|
||
margin-left:2em;
|
||
padding-left:1em;
|
||
}
|
||
div.csl-indent {
|
||
margin-left: 2em;
|
||
}</style>
|
||
|
||
|
||
<script src="../../site_libs/quarto-nav/quarto-nav.js"></script>
|
||
<script src="../../site_libs/quarto-nav/headroom.min.js"></script>
|
||
<script src="../../site_libs/clipboard/clipboard.min.js"></script>
|
||
<script src="../../site_libs/quarto-search/autocomplete.umd.js"></script>
|
||
<script src="../../site_libs/quarto-search/fuse.min.js"></script>
|
||
<script src="../../site_libs/quarto-search/quarto-search.js"></script>
|
||
<meta name="quarto:offset" content="../../">
|
||
<script src="../../site_libs/quarto-html/quarto.js" type="module"></script>
|
||
<script src="../../site_libs/quarto-html/tabsets/tabsets.js" type="module"></script>
|
||
<script src="../../site_libs/quarto-html/popper.min.js"></script>
|
||
<script src="../../site_libs/quarto-html/tippy.umd.min.js"></script>
|
||
<script src="../../site_libs/quarto-html/anchor.min.js"></script>
|
||
<link href="../../site_libs/quarto-html/tippy.css" rel="stylesheet">
|
||
<link href="../../site_libs/quarto-html/quarto-syntax-highlighting-7b4406b7675125bc2ba204020e191172.css" rel="stylesheet" id="quarto-text-highlighting-styles">
|
||
<script src="../../site_libs/bootstrap/bootstrap.min.js"></script>
|
||
<link href="../../site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet">
|
||
<link href="../../site_libs/bootstrap/bootstrap-c3e95e02e727cc1eb63534e29640e14d.min.css" rel="stylesheet" append-hash="true" id="quarto-bootstrap" data-mode="light">
|
||
<script src="../../site_libs/quarto-contrib/glightbox/glightbox.min.js"></script>
|
||
<link href="../../site_libs/quarto-contrib/glightbox/glightbox.min.css" rel="stylesheet">
|
||
<link href="../../site_libs/quarto-contrib/glightbox/lightbox.css" rel="stylesheet">
|
||
<script id="quarto-search-options" type="application/json">{
|
||
"location": "navbar",
|
||
"copy-button": false,
|
||
"collapse-after": 3,
|
||
"panel-placement": "end",
|
||
"type": "overlay",
|
||
"limit": 50,
|
||
"keyboard-shortcut": [
|
||
"f",
|
||
"/",
|
||
"s"
|
||
],
|
||
"show-item-context": false,
|
||
"language": {
|
||
"search-no-results-text": "Pas de résultats",
|
||
"search-matching-documents-text": "documents trouvés",
|
||
"search-copy-link-title": "Copier le lien vers la recherche",
|
||
"search-hide-matches-text": "Cacher les correspondances additionnelles",
|
||
"search-more-match-text": "correspondance de plus dans ce document",
|
||
"search-more-matches-text": "correspondances de plus dans ce document",
|
||
"search-clear-button-title": "Effacer",
|
||
"search-text-placeholder": "",
|
||
"search-detached-cancel-button-title": "Annuler",
|
||
"search-submit-button-title": "Envoyer",
|
||
"search-label": "Recherche"
|
||
}
|
||
}</script>
|
||
|
||
<script>window.backupDefine = window.define; window.define = undefined;</script><script src="https://cdn.jsdelivr.net/npm/katex@latest/dist/katex.min.js"></script>
|
||
<script>document.addEventListener("DOMContentLoaded", function () {
|
||
var mathElements = document.getElementsByClassName("math");
|
||
var macros = [];
|
||
for (var i = 0; i < mathElements.length; i++) {
|
||
var texText = mathElements[i].firstChild;
|
||
if (mathElements[i].tagName == "SPAN") {
|
||
katex.render(texText.data, mathElements[i], {
|
||
displayMode: mathElements[i].classList.contains('display'),
|
||
throwOnError: false,
|
||
macros: macros,
|
||
fleqn: false
|
||
});
|
||
}}});
|
||
</script>
|
||
<script>window.define = window.backupDefine; window.backupDefine = undefined;</script><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@latest/dist/katex.min.css">
|
||
|
||
<script type="text/javascript">
|
||
const typesetMath = (el) => {
|
||
if (window.MathJax) {
|
||
// MathJax Typeset
|
||
window.MathJax.typeset([el]);
|
||
} else if (window.katex) {
|
||
// KaTeX Render
|
||
var mathElements = el.getElementsByClassName("math");
|
||
var macros = [];
|
||
for (var i = 0; i < mathElements.length; i++) {
|
||
var texText = mathElements[i].firstChild;
|
||
if (mathElements[i].tagName == "SPAN") {
|
||
window.katex.render(texText.data, mathElements[i], {
|
||
displayMode: mathElements[i].classList.contains('display'),
|
||
throwOnError: false,
|
||
macros: macros,
|
||
fleqn: false
|
||
});
|
||
}
|
||
}
|
||
}
|
||
}
|
||
window.Quarto = {
|
||
typesetMath
|
||
};
|
||
</script>
|
||
|
||
</head>
|
||
|
||
<body class="nav-fixed quarto-light">
|
||
|
||
<div id="quarto-search-results"></div>
|
||
<header id="quarto-header" class="headroom fixed-top quarto-banner">
|
||
<nav class="navbar navbar-expand-lg " data-bs-theme="dark">
|
||
<div class="navbar-container container-fluid">
|
||
<div class="navbar-brand-container mx-auto">
|
||
<a class="navbar-brand" href="../../index.html">
|
||
<span class="navbar-title">Suivi de la thèse</span>
|
||
</a>
|
||
</div>
|
||
<div id="quarto-search" class="" title="Recherche"></div>
|
||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" role="menu" aria-expanded="false" aria-label="Basculer la navigation" onclick="if (window.quartoToggleHeadroom) { window.quartoToggleHeadroom(); }">
|
||
<span class="navbar-toggler-icon"></span>
|
||
</button>
|
||
<div class="collapse navbar-collapse" id="navbarCollapse">
|
||
<ul class="navbar-nav navbar-nav-scroll me-auto">
|
||
<li class="nav-item">
|
||
<a class="nav-link" href="../../index.html"> <i class="bi bi-journals" role="img">
|
||
</i>
|
||
<span class="menu-text">Liste des semaines</span></a>
|
||
</li>
|
||
</ul>
|
||
<ul class="navbar-nav navbar-nav-scroll ms-auto">
|
||
<li class="nav-item compact">
|
||
<a class="nav-link" href="https://git.polarolouis.fr/polarolouis/these-recap-hebdo"> <i class="bi bi-git" role="img" aria-label="Dépôt Git du journal">
|
||
</i>
|
||
<span class="menu-text"></span></a>
|
||
</li>
|
||
</ul>
|
||
</div> <!-- /navcollapse -->
|
||
<div class="quarto-navbar-tools">
|
||
</div>
|
||
</div> <!-- /container-fluid -->
|
||
</nav>
|
||
</header>
|
||
<!-- content -->
|
||
<header id="title-block-header" class="quarto-title-block default page-columns page-full">
|
||
<div class="quarto-title-banner page-columns page-full">
|
||
<div class="quarto-title column-body">
|
||
<h1 class="title">Bilan semaine 24 2025 : 10 juin - 13 juin</h1>
|
||
<div class="quarto-categories">
|
||
<div class="quarto-category">colBiSBM</div>
|
||
<div class="quarto-category">inférence</div>
|
||
<div class="quarto-category">GNN</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="quarto-title-meta-author">
|
||
<div class="quarto-title-meta-heading">Auteur·rice</div>
|
||
<div class="quarto-title-meta-heading">Affiliation</div>
|
||
|
||
<div class="quarto-title-meta-contents">
|
||
<p class="author">Louis Lacoste <a href="mailto:louis.lacoste@agroparistech.fr" class="quarto-title-author-email"><i class="bi bi-envelope"></i></a> <a href="https://orcid.org/0009-0004-0178-9821" class="quarto-title-author-orcid"> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1N0NEMjA4MDI1MjA2ODExOTk0QzkzNTEzRjZEQTg1NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDozM0NDOEJGNEZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozM0NDOEJGM0ZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkZDN0YxMTc0MDcyMDY4MTE5NUZFRDc5MUM2MUUwNEREIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU3Q0QyMDgwMjUyMDY4MTE5OTRDOTM1MTNGNkRBODU3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+84NovQAAAR1JREFUeNpiZEADy85ZJgCpeCB2QJM6AMQLo4yOL0AWZETSqACk1gOxAQN+cAGIA4EGPQBxmJA0nwdpjjQ8xqArmczw5tMHXAaALDgP1QMxAGqzAAPxQACqh4ER6uf5MBlkm0X4EGayMfMw/Pr7Bd2gRBZogMFBrv01hisv5jLsv9nLAPIOMnjy8RDDyYctyAbFM2EJbRQw+aAWw/LzVgx7b+cwCHKqMhjJFCBLOzAR6+lXX84xnHjYyqAo5IUizkRCwIENQQckGSDGY4TVgAPEaraQr2a4/24bSuoExcJCfAEJihXkWDj3ZAKy9EJGaEo8T0QSxkjSwORsCAuDQCD+QILmD1A9kECEZgxDaEZhICIzGcIyEyOl2RkgwAAhkmC+eAm0TAAAAABJRU5ErkJggg=="></a></p>
|
||
</div>
|
||
<div class="quarto-title-meta-contents">
|
||
<p class="affiliation">
|
||
MIA Paris-Saclay, INRAE, AgroParisTech, Université Paris-Saclay
|
||
</p>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="quarto-title-meta">
|
||
|
||
|
||
<div>
|
||
<div class="quarto-title-meta-heading">Date de publication</div>
|
||
<div class="quarto-title-meta-contents">
|
||
<p class="date">13 juin 2025</p>
|
||
</div>
|
||
</div>
|
||
|
||
<div>
|
||
<div class="quarto-title-meta-heading">Modifié</div>
|
||
<div class="quarto-title-meta-contents">
|
||
<p class="date-modified">6 février 2026</p>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
|
||
</header><div id="quarto-content" class="quarto-container page-columns page-rows-contents page-layout-article page-navbar">
|
||
<!-- sidebar -->
|
||
<!-- margin-sidebar -->
|
||
<div id="quarto-margin-sidebar" class="sidebar margin-sidebar">
|
||
<nav id="TOC" role="doc-toc" class="toc-active">
|
||
<h2 id="toc-title">Sur cette page</h2>
|
||
|
||
<ul>
|
||
<li><a href="#todo-list" id="toc-todo-list" class="nav-link active" data-scroll-target="#todo-list">TODO List</a>
|
||
<ul class="collapse">
|
||
<li><a href="#applications" id="toc-applications" class="nav-link" data-scroll-target="#applications">Applications</a></li>
|
||
<li><a href="#inférence-et-microbes" id="toc-inférence-et-microbes" class="nav-link" data-scroll-target="#inférence-et-microbes">Inférence et microbes</a></li>
|
||
</ul></li>
|
||
<li><a href="#lecture-en-cours" id="toc-lecture-en-cours" class="nav-link" data-scroll-target="#lecture-en-cours">Lecture en cours</a>
|
||
<ul class="collapse">
|
||
<li><a href="#ot" id="toc-ot" class="nav-link" data-scroll-target="#ot">OT</a></li>
|
||
</ul></li>
|
||
<li><a href="#a-discuter" id="toc-a-discuter" class="nav-link" data-scroll-target="#a-discuter">A discuter</a>
|
||
<ul class="collapse">
|
||
<li><a href="#inférence" id="toc-inférence" class="nav-link" data-scroll-target="#inférence">Inférence</a></li>
|
||
<li><a href="#rédaction-article" id="toc-rédaction-article" class="nav-link" data-scroll-target="#rédaction-article">Rédaction article</a></li>
|
||
</ul></li>
|
||
<li><a href="#a-continuer" id="toc-a-continuer" class="nav-link" data-scroll-target="#a-continuer">A continuer</a>
|
||
<ul class="collapse">
|
||
<li><a href="#applications-1" id="toc-applications-1" class="nav-link" data-scroll-target="#applications-1">Applications</a></li>
|
||
<li><a href="#axe-inférence" id="toc-axe-inférence" class="nav-link" data-scroll-target="#axe-inférence">Axe inférence</a></li>
|
||
</ul></li>
|
||
<li><a href="#repoussés-ou-abandonnés" id="toc-repoussés-ou-abandonnés" class="nav-link" data-scroll-target="#repoussés-ou-abandonnés">Repoussés ou abandonnés</a></li>
|
||
</ul>
|
||
</nav>
|
||
</div>
|
||
<!-- main -->
|
||
<main class="content quarto-banner-title-block" id="quarto-document-content">
|
||
|
||
|
||
|
||
|
||
|
||
<section id="todo-list" class="level2">
|
||
<h2 class="anchored" data-anchor-id="todo-list">TODO List</h2>
|
||
<ul>
|
||
<li>✅ Préparer la séance intro à Git pour le 13 juin. <strong>La séance s’est très bien passée</strong></li>
|
||
<li>Pour clustering de collections sur données réelles :<br>
|
||
→ L’intuition de Pierre semble être confirmé, les dissimilarités semblent arrêter de varier sensiblement pour de grandes valeurs <span class="math inline">(Q_1,Q_2)</span>.
|
||
<ul>
|
||
<li>Faire le <code>hclust</code> avec diverses distances et voir si les coupes proposées diffèrent sensiblement</li>
|
||
<li>Si plusieurs clustering possibles les tester et sélectionner le meilleur</li>
|
||
<li>Ré-ajuster les bonnes partitions.</li>
|
||
<li>✅ C’est bon j’ai une fonction qui tourne, mais lentement ⌛</li>
|
||
<li>⏳Simulations en train de tourner</li>
|
||
<li>❗L’approche que j’ai en mettant la pénalité à 0 peut favoriser de séparer trop les réseaux et donc il faudrait refusionner. ➡️ mais le d&a ne fonctionne qu’en <em>iid</em></li>
|
||
</ul></li>
|
||
<li>✅ Idée de Sophie : alterner descendant et ascendant → prometteur aussi. J’ai codé le fichier de simulations et débugguer le vecteur de clustering ▶️ à voir les performances. ➡️ la simu à 9 réseaux (bcp de variabilité a priori) est lancée attente résultats ➡️ Je tombe sur un bug déjà rencontré dans les simus d’inférence. j’ai lancé sans parallélisation pour essayer de comprendre le bug.</li>
|
||
</ul>
|
||
<p>✅ Il y avait un bug dans la fenêtre glissant où la condition d’arrêt quand le BICL n’augmentait plus était mal détectée. Corrigé</p>
|
||
<div class="quarto-figure quarto-figure-center">
|
||
<figure class="figure">
|
||
<p><a href="figs/ari-clustering-desc&asc9.png" class="lightbox" data-gallery="quarto-lightbox-gallery-1" title="9 réseaux - ARI pour le clustering avec modèles iid, procédure descendante et descendante&ascendante"><img src="figs/ari-clustering-desc&asc9.png" class="img-fluid figure-img" alt="9 réseaux - ARI pour le clustering avec modèles iid, procédure descendante et descendante&ascendante"></a></p>
|
||
<figcaption>9 réseaux - ARI pour le clustering avec modèles iid, procédure descendante et descendante&ascendante</figcaption>
|
||
</figure>
|
||
</div>
|
||
<div class="quarto-layout-panel" data-layout-ncol="2">
|
||
<div class="quarto-layout-row">
|
||
<div class="quarto-layout-cell" style="flex-basis: 50.0%;justify-content: flex-start;">
|
||
<div class="quarto-figure quarto-figure-center">
|
||
<figure class="figure">
|
||
<p><a href="figs/ari-clustering-desc&asc30.png" class="lightbox" data-gallery="quarto-lightbox-gallery-2" title="30 réseaux - ARI pour le clustering avec modèles iid, procédure descendante et descendante&ascendante"><img src="figs/ari-clustering-desc&asc30.png" class="img-fluid figure-img" alt="30 réseaux - ARI pour le clustering avec modèles iid, procédure descendante et descendante&ascendante"></a></p>
|
||
<figcaption>30 réseaux - ARI pour le clustering avec modèles iid, procédure descendante et descendante&ascendante</figcaption>
|
||
</figure>
|
||
</div>
|
||
</div>
|
||
<div class="quarto-layout-cell" style="flex-basis: 50.0%;justify-content: flex-start;">
|
||
<div class="quarto-figure quarto-figure-center">
|
||
<figure class="figure">
|
||
<p><a href="figs/nbcollections-clustering-descending.png" class="lightbox" data-gallery="quarto-lightbox-gallery-3" title="30 réseaux - # collections à la fin du clustering. La vraie valeur 3 est en rouge pointillés"><img src="figs/nbcollections-clustering-descending.png" class="img-fluid figure-img" alt="30 réseaux - # collections à la fin du clustering. La vraie valeur 3 est en rouge pointillés"></a></p>
|
||
<figcaption>30 réseaux - # collections à la fin du clustering. La vraie valeur 3 est en rouge pointillés</figcaption>
|
||
</figure>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<ul>
|
||
<li><p>Pour les deux propositions données simulées tester diverses distances.</p></li>
|
||
<li><p>Dé-bugger les simulations :</p>
|
||
<ul>
|
||
<li>Inférence : Relancer simus d’inférence avec n = 240 pour voir si la qualité augmenter (se rassurer). En fait on est déjà à 240, j’ai relancé avec M = 4 au lieu de M = 2. En attente résultats MIGALE -> BUG, dois creuser mais juste des problèmes techniques -> Visiblement il y a d’autres problèmes que juste le plan de parallélisation.</li>
|
||
</ul></li>
|
||
<li><p>Vérifier si problème de version tidyverse pour vapply sur l’<strong>inférence</strong>.</p></li>
|
||
<li><p>Si problème de parallélisation vient de pb de version <em>future.callr</em> le signaler à MIGALE.</p></li>
|
||
<li><p>✅ Réparé mauvais placement des légendes, des valeurs etc.</p></li>
|
||
</ul>
|
||
<section id="applications" class="level3">
|
||
<h3 class="anchored" data-anchor-id="applications">Applications</h3>
|
||
<ul>
|
||
<li>Kmeans sur la densité des réseaux subdoré pour pré-partitionner et <em>clusteriser</em>. Car densités déséquilibrées.</li>
|
||
</ul>
|
||
<div id="ref-kmeans-vae" class="quarto-float quarto-figure quarto-figure-center anchored">
|
||
<figure class="quarto-float quarto-float-ref figure">
|
||
<div aria-describedby="ref-kmeans-vae-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
|
||
<ul>
|
||
<li>Faire GNN-VAE Doré et sub-Doré avec kmeans et clustering sur l’espace latent J’ai commencé à regarder un peu</li>
|
||
</ul>
|
||
</div>
|
||
<figcaption class="quarto-float-caption-bottom quarto-float-caption quarto-float-ref quarto-uncaptioned" id="ref-kmeans-vae-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
|
||
Reference 1
|
||
</figcaption>
|
||
</figure>
|
||
</div>
|
||
<ul>
|
||
<li>Comparer les perfs du VAE sur Baldock avec colBiSBM par exemple</li>
|
||
</ul>
|
||
</section>
|
||
<section id="inférence-et-microbes" class="level3">
|
||
<h3 class="anchored" data-anchor-id="inférence-et-microbes">Inférence et microbes</h3>
|
||
<ul>
|
||
<li>Lancer <em>colBiSBM</em> sur <span class="math inline">OTU\times Sample</span> → problème du chargement en mémoire des données à voir</li>
|
||
<li>Se renseigner techniques d’inférence de réseaux :
|
||
<ul>
|
||
<li>covariance (base corrélation et seuil)</li>
|
||
<li>GraphicalLASSO</li>
|
||
<li>Co-occurence</li>
|
||
</ul></li>
|
||
<li>Lancer <em>colSBM</em> sur <span class="math inline">OTU\times OTU</span></li>
|
||
<li>Creuser <a href="https://raw.githubusercontent.com/cregouby/R-toulouse-tabnet/main/Tabnet_RR2023_fr_pdf.pdf">TabNet</a> de Christophe Regouby et les <a href="https://github.com/cregouby/Tutoriel_torch">exercices</a></li>
|
||
<li>Regarder <strong>SPARTA</strong> Rennes</li>
|
||
<li>Lire Papiers compositional data (Aitchison et al. intro)</li>
|
||
<li>Lire article multi-niveaux Saint-Clair</li>
|
||
<li>Demander à JA si elle connaît des réseaux d’interactions connus par les experts (idée d’intégrer une connaissance experte et de voir les différences de structure par rapport à celle attendue)</li>
|
||
<li>Ecrire et étudier les modèles pour différents niveaux taxonomiques. <span class="math display">\begin{align*}
|
||
i \rightarrow &~N^1_i \subseteq N^2_i \subseteq N^3_i & \text{Taxonomie}\\
|
||
Z^0_i \overset{?}{=} & Z^1_i \overset{?}{=} Z^2_i \overset{?}{=} Z^3_i & \text{Groupes fonctionnels}
|
||
\end{align*}</span></li>
|
||
</ul>
|
||
</section>
|
||
</section>
|
||
<section id="lecture-en-cours" class="level2">
|
||
<h2 class="anchored" data-anchor-id="lecture-en-cours">Lecture en cours</h2>
|
||
<section id="ot" class="level3">
|
||
<h3 class="anchored" data-anchor-id="ot">OT</h3>
|
||
<ul>
|
||
<li><span class="citation" data-cites="mazeletUnsupervisedLearningOptimal">Mazelet, Flamary, et Thirion (<a href="#ref-mazeletUnsupervisedLearningOptimal" role="doc-biblioref">s. d.</a>)</span> Intéressant pour le transport optimal entre graphes de tailles différentes
|
||
<ul>
|
||
<li><span class="citation" data-cites="nennaLecture2Entropic">Nenna (<a href="#ref-nennaLecture2Entropic" role="doc-biblioref">s. d.</a>)</span> Pour comprendre le problème d’OT régularisé pour l’entropie.</li>
|
||
</ul></li>
|
||
</ul>
|
||
</section>
|
||
</section>
|
||
<section id="a-discuter" class="level2">
|
||
<h2 class="anchored" data-anchor-id="a-discuter">A discuter</h2>
|
||
<section id="inférence" class="level3">
|
||
<h3 class="anchored" data-anchor-id="inférence">Inférence</h3>
|
||
<ul>
|
||
<li>Papier pour comprendre données
|
||
<ul>
|
||
<li><del>Faust et al.</del></li>
|
||
<li>Abdill et al.</li>
|
||
<li>Bashan et al.</li>
|
||
</ul></li>
|
||
<li>pbs : variance, bcp de zero, covariables, offset et taxonomie (Reseaux arretes differents niveaux : Genre, OTU …)</li>
|
||
</ul>
|
||
<blockquote class="blockquote">
|
||
<p>Combine networks at different taxonomic levels</p>
|
||
</blockquote>
|
||
<ul>
|
||
<li>Inférence + GREMLINS</li>
|
||
</ul>
|
||
</section>
|
||
<section id="rédaction-article" class="level3">
|
||
<h3 class="anchored" data-anchor-id="rédaction-article">Rédaction article</h3>
|
||
<ul>
|
||
<li>Relire intro St Clair</li>
|
||
<li>S’inspirer structure pour mon intro</li>
|
||
<li>Trouver biblio intro</li>
|
||
<li>Rédiger l’intro</li>
|
||
<li>Dire résultats nettement meilleurs et variabilités inférieures.</li>
|
||
</ul>
|
||
</section>
|
||
</section>
|
||
<section id="a-continuer" class="level2">
|
||
<h2 class="anchored" data-anchor-id="a-continuer">A continuer</h2>
|
||
<section id="applications-1" class="level3">
|
||
<h3 class="anchored" data-anchor-id="applications-1">Applications</h3>
|
||
<ul>
|
||
<li>Idée Sophie: Regarder clustering de données plantes-pollinisateur selon gradient d’urbanisation</li>
|
||
</ul>
|
||
<blockquote class="blockquote">
|
||
<p>Sophie a fait une appli qui marche bien et va dans le sens de l’analyse faite (à savoir pas d’effet du gradien d’urbanisation). À continuer pour l’intégrer dans l’article !</p>
|
||
</blockquote>
|
||
</section>
|
||
<section id="axe-inférence" class="level3">
|
||
<h3 class="anchored" data-anchor-id="axe-inférence">Axe inférence</h3>
|
||
<ul>
|
||
<li>Lire biblio fournie Julie, Inférence de réseaux : co-occurence</li>
|
||
</ul>
|
||
<blockquote class="blockquote">
|
||
<p>J’ai lu Faust et al. Je lis Abdill et al.</p>
|
||
</blockquote>
|
||
</section>
|
||
</section>
|
||
<section id="repoussés-ou-abandonnés" class="level2">
|
||
<h2 class="anchored" data-anchor-id="repoussés-ou-abandonnés">Repoussés ou abandonnés</h2>
|
||
<div class="callout callout-style-default callout-note callout-titled">
|
||
<div class="callout-header d-flex align-content-center" data-bs-toggle="collapse" data-bs-target=".callout-1-contents" aria-controls="callout-1" aria-expanded="false" aria-label="Toggle callout">
|
||
<div class="callout-icon-container">
|
||
<i class="callout-icon"></i>
|
||
</div>
|
||
<div class="callout-title-container flex-fill">
|
||
Déplier pour voir
|
||
</div>
|
||
<div class="callout-btn-toggle d-inline-block border-0 py-1 ps-1 pe-0 float-end"><i class="callout-toggle"></i></div>
|
||
</div>
|
||
<div id="callout-1" class="callout-1-contents callout-collapse collapse">
|
||
<div class="callout-body-container callout-body">
|
||
<ul>
|
||
<li>Résultats simus NA <strong>Erreur pour certaines conditions</strong> : Pour NA robustness générer <code>nb_rep</code> collections de taille <span class="math inline">M=2</span> et prélever <span class="math inline">\epsilon_{max}n_r n_c</span> liens à retirer puis pour les <span class="math inline">\epsilon < \epsilon_{max}</span> prélever dans la liste des indices afin d’avoir des perturbations emboitées. Il faut que j’ajoute un mécanisme pour reprendre des conditions qui ont plantés et que je skip dans le future_lapply les conditions déjà traitées (pour avoir la même seed quand je vais exécuter le code). Implémenté les missing steps.</li>
|
||
</ul>
|
||
<blockquote class="blockquote">
|
||
<p>Je n’arrive pas à comprendre les erreurs qui arrivent</p>
|
||
</blockquote>
|
||
<ul>
|
||
<li><p>Lire Biological Networks - François Képès</p></li>
|
||
<li><p>Regarder les applications pour les collections de réseaux recommender system <em>Pas pertinents et trop gros</em></p></li>
|
||
</ul>
|
||
<div id="lst-reco-systems" class="listing quarto-float quarto-figure quarto-figure-left anchored">
|
||
<figure class="quarto-float quarto-float-lst figure">
|
||
<figcaption class="quarto-float-caption-top quarto-float-caption quarto-float-lst" id="lst-reco-systems-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
|
||
Listing 1: Recommender systems data
|
||
</figcaption>
|
||
<div aria-describedby="lst-reco-systems-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
|
||
<p>Par exemple :</p>
|
||
<ul>
|
||
<li><a href="https://cseweb.ucsd.edu/~jmcauley/datasets.html">Liste de recommendation data</a></li>
|
||
</ul>
|
||
</div>
|
||
</figure>
|
||
</div>
|
||
<section id="papier-plus-multi-applications" class="level3">
|
||
<h3 class="anchored" data-anchor-id="papier-plus-multi-applications">Papier plus multi-applications</h3>
|
||
<ul>
|
||
<li>Données d’Elisa herbivore ?</li>
|
||
<li>Données urbanisations ?</li>
|
||
</ul>
|
||
</section>
|
||
<section id="autour-de-larticle-et-du-package" class="level3">
|
||
<h3 class="anchored" data-anchor-id="autour-de-larticle-et-du-package">Autour de l’article et du package</h3>
|
||
<ul>
|
||
<li>Créer des vignettes illustrant par exemple des cas de simulations. <strong>Possible de mettre l’exemple d’application de Sophie sur les réseaux avec gradient d’urbanisation</strong>.</li>
|
||
</ul>
|
||
</section>
|
||
<section id="simulations-article" class="level3">
|
||
<h3 class="anchored" data-anchor-id="simulations-article">Simulations article</h3>
|
||
<ul>
|
||
<li><p>Comparer sur clustering unipartite avec versions symétriser des par blocs des matrices d’adjacences.</p></li>
|
||
<li><p>Corriger structure de simus :</p>
|
||
<ul>
|
||
<li>Pour noisy <span class="math inline">\alpha</span> :
|
||
<ul>
|
||
<li>Logit pour envoyer la gaussienne vers (0,1)</li>
|
||
<li>Beta contrainte dans (0,1)</li>
|
||
</ul></li>
|
||
<li>Pour noisy links : Générer <code>nb_clustering</code> collections de taille M puis prélever <span class="math inline">\epsilon_{max}n_r n_c</span> liens à inverser puis pour les <span class="math inline">\epsilon < \epsilon_{max}</span> prélever dans la liste des indices afin d’avoir des perturbations emboitées.</li>
|
||
</ul></li>
|
||
</ul>
|
||
</section>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
|
||
</section>
|
||
|
||
<div id="quarto-appendix" class="default"><section class="quarto-appendix-contents" role="doc-bibliography" id="quarto-bibliography"><h2 class="anchored quarto-appendix-heading">Les références</h2><div id="refs" class="references csl-bib-body hanging-indent" data-entry-spacing="0" role="list">
|
||
<div id="ref-mazeletUnsupervisedLearningOptimal" class="csl-entry" role="listitem">
|
||
Mazelet, Sonia, Rémi Flamary, et Bertrand Thirion. s. d. <span>« Unsupervised <span>Learning</span> for <span>Optimal Transport</span> Plan Prediction Between Unbalanced Graphs »</span>.
|
||
</div>
|
||
<div id="ref-nennaLecture2Entropic" class="csl-entry" role="listitem">
|
||
Nenna, Luca. s. d. <span>« Lecture 2: <span>Entropic Optimal Transport</span> »</span>.
|
||
</div>
|
||
</div></section></div></main> <!-- /main -->
|
||
<script id="quarto-html-after-body" type="application/javascript">
|
||
window.document.addEventListener("DOMContentLoaded", function (event) {
|
||
const icon = "";
|
||
const anchorJS = new window.AnchorJS();
|
||
anchorJS.options = {
|
||
placement: 'right',
|
||
icon: icon
|
||
};
|
||
anchorJS.add('.anchored');
|
||
const isCodeAnnotation = (el) => {
|
||
for (const clz of el.classList) {
|
||
if (clz.startsWith('code-annotation-')) {
|
||
return true;
|
||
}
|
||
}
|
||
return false;
|
||
}
|
||
const onCopySuccess = function(e) {
|
||
// button target
|
||
const button = e.trigger;
|
||
// don't keep focus
|
||
button.blur();
|
||
// flash "checked"
|
||
button.classList.add('code-copy-button-checked');
|
||
var currentTitle = button.getAttribute("title");
|
||
button.setAttribute("title", "Copié");
|
||
let tooltip;
|
||
if (window.bootstrap) {
|
||
button.setAttribute("data-bs-toggle", "tooltip");
|
||
button.setAttribute("data-bs-placement", "left");
|
||
button.setAttribute("data-bs-title", "Copié");
|
||
tooltip = new bootstrap.Tooltip(button,
|
||
{ trigger: "manual",
|
||
customClass: "code-copy-button-tooltip",
|
||
offset: [0, -8]});
|
||
tooltip.show();
|
||
}
|
||
setTimeout(function() {
|
||
if (tooltip) {
|
||
tooltip.hide();
|
||
button.removeAttribute("data-bs-title");
|
||
button.removeAttribute("data-bs-toggle");
|
||
button.removeAttribute("data-bs-placement");
|
||
}
|
||
button.setAttribute("title", currentTitle);
|
||
button.classList.remove('code-copy-button-checked');
|
||
}, 1000);
|
||
// clear code selection
|
||
e.clearSelection();
|
||
}
|
||
const getTextToCopy = function(trigger) {
|
||
const codeEl = trigger.previousElementSibling.cloneNode(true);
|
||
for (const childEl of codeEl.children) {
|
||
if (isCodeAnnotation(childEl)) {
|
||
childEl.remove();
|
||
}
|
||
}
|
||
return codeEl.innerText;
|
||
}
|
||
const clipboard = new window.ClipboardJS('.code-copy-button:not([data-in-quarto-modal])', {
|
||
text: getTextToCopy
|
||
});
|
||
clipboard.on('success', onCopySuccess);
|
||
if (window.document.getElementById('quarto-embedded-source-code-modal')) {
|
||
const clipboardModal = new window.ClipboardJS('.code-copy-button[data-in-quarto-modal]', {
|
||
text: getTextToCopy,
|
||
container: window.document.getElementById('quarto-embedded-source-code-modal')
|
||
});
|
||
clipboardModal.on('success', onCopySuccess);
|
||
}
|
||
var localhostRegex = new RegExp(/^(?:http|https):\/\/localhost\:?[0-9]*\//);
|
||
var mailtoRegex = new RegExp(/^mailto:/);
|
||
var filterRegex = new RegExp('/' + window.location.host + '/');
|
||
var isInternal = (href) => {
|
||
return filterRegex.test(href) || localhostRegex.test(href) || mailtoRegex.test(href);
|
||
}
|
||
// Inspect non-navigation links and adorn them if external
|
||
var links = window.document.querySelectorAll('a[href]:not(.nav-link):not(.navbar-brand):not(.toc-action):not(.sidebar-link):not(.sidebar-item-toggle):not(.pagination-link):not(.no-external):not([aria-hidden]):not(.dropdown-item):not(.quarto-navigation-tool):not(.about-link)');
|
||
for (var i=0; i<links.length; i++) {
|
||
const link = links[i];
|
||
if (!isInternal(link.href)) {
|
||
// undo the damage that might have been done by quarto-nav.js in the case of
|
||
// links that we want to consider external
|
||
if (link.dataset.originalHref !== undefined) {
|
||
link.href = link.dataset.originalHref;
|
||
}
|
||
}
|
||
}
|
||
function tippyHover(el, contentFn, onTriggerFn, onUntriggerFn) {
|
||
const config = {
|
||
allowHTML: true,
|
||
maxWidth: 500,
|
||
delay: 100,
|
||
arrow: false,
|
||
appendTo: function(el) {
|
||
return el.parentElement;
|
||
},
|
||
interactive: true,
|
||
interactiveBorder: 10,
|
||
theme: 'quarto',
|
||
placement: 'bottom-start',
|
||
};
|
||
if (contentFn) {
|
||
config.content = contentFn;
|
||
}
|
||
if (onTriggerFn) {
|
||
config.onTrigger = onTriggerFn;
|
||
}
|
||
if (onUntriggerFn) {
|
||
config.onUntrigger = onUntriggerFn;
|
||
}
|
||
window.tippy(el, config);
|
||
}
|
||
const noterefs = window.document.querySelectorAll('a[role="doc-noteref"]');
|
||
for (var i=0; i<noterefs.length; i++) {
|
||
const ref = noterefs[i];
|
||
tippyHover(ref, function() {
|
||
// use id or data attribute instead here
|
||
let href = ref.getAttribute('data-footnote-href') || ref.getAttribute('href');
|
||
try { href = new URL(href).hash; } catch {}
|
||
const id = href.replace(/^#\/?/, "");
|
||
const note = window.document.getElementById(id);
|
||
if (note) {
|
||
return note.innerHTML;
|
||
} else {
|
||
return "";
|
||
}
|
||
});
|
||
}
|
||
const xrefs = window.document.querySelectorAll('a.quarto-xref');
|
||
const processXRef = (id, note) => {
|
||
// Strip column container classes
|
||
const stripColumnClz = (el) => {
|
||
el.classList.remove("page-full", "page-columns");
|
||
if (el.children) {
|
||
for (const child of el.children) {
|
||
stripColumnClz(child);
|
||
}
|
||
}
|
||
}
|
||
stripColumnClz(note)
|
||
if (id === null || id.startsWith('sec-')) {
|
||
// Special case sections, only their first couple elements
|
||
const container = document.createElement("div");
|
||
if (note.children && note.children.length > 2) {
|
||
container.appendChild(note.children[0].cloneNode(true));
|
||
for (let i = 1; i < note.children.length; i++) {
|
||
const child = note.children[i];
|
||
if (child.tagName === "P" && child.innerText === "") {
|
||
continue;
|
||
} else {
|
||
container.appendChild(child.cloneNode(true));
|
||
break;
|
||
}
|
||
}
|
||
if (window.Quarto?.typesetMath) {
|
||
window.Quarto.typesetMath(container);
|
||
}
|
||
return container.innerHTML
|
||
} else {
|
||
if (window.Quarto?.typesetMath) {
|
||
window.Quarto.typesetMath(note);
|
||
}
|
||
return note.innerHTML;
|
||
}
|
||
} else {
|
||
// Remove any anchor links if they are present
|
||
const anchorLink = note.querySelector('a.anchorjs-link');
|
||
if (anchorLink) {
|
||
anchorLink.remove();
|
||
}
|
||
if (window.Quarto?.typesetMath) {
|
||
window.Quarto.typesetMath(note);
|
||
}
|
||
if (note.classList.contains("callout")) {
|
||
return note.outerHTML;
|
||
} else {
|
||
return note.innerHTML;
|
||
}
|
||
}
|
||
}
|
||
for (var i=0; i<xrefs.length; i++) {
|
||
const xref = xrefs[i];
|
||
tippyHover(xref, undefined, function(instance) {
|
||
instance.disable();
|
||
let url = xref.getAttribute('href');
|
||
let hash = undefined;
|
||
if (url.startsWith('#')) {
|
||
hash = url;
|
||
} else {
|
||
try { hash = new URL(url).hash; } catch {}
|
||
}
|
||
if (hash) {
|
||
const id = hash.replace(/^#\/?/, "");
|
||
const note = window.document.getElementById(id);
|
||
if (note !== null) {
|
||
try {
|
||
const html = processXRef(id, note.cloneNode(true));
|
||
instance.setContent(html);
|
||
} finally {
|
||
instance.enable();
|
||
instance.show();
|
||
}
|
||
} else {
|
||
// See if we can fetch this
|
||
fetch(url.split('#')[0])
|
||
.then(res => res.text())
|
||
.then(html => {
|
||
const parser = new DOMParser();
|
||
const htmlDoc = parser.parseFromString(html, "text/html");
|
||
const note = htmlDoc.getElementById(id);
|
||
if (note !== null) {
|
||
const html = processXRef(id, note);
|
||
instance.setContent(html);
|
||
}
|
||
}).finally(() => {
|
||
instance.enable();
|
||
instance.show();
|
||
});
|
||
}
|
||
} else {
|
||
// See if we can fetch a full url (with no hash to target)
|
||
// This is a special case and we should probably do some content thinning / targeting
|
||
fetch(url)
|
||
.then(res => res.text())
|
||
.then(html => {
|
||
const parser = new DOMParser();
|
||
const htmlDoc = parser.parseFromString(html, "text/html");
|
||
const note = htmlDoc.querySelector('main.content');
|
||
if (note !== null) {
|
||
// This should only happen for chapter cross references
|
||
// (since there is no id in the URL)
|
||
// remove the first header
|
||
if (note.children.length > 0 && note.children[0].tagName === "HEADER") {
|
||
note.children[0].remove();
|
||
}
|
||
const html = processXRef(null, note);
|
||
instance.setContent(html);
|
||
}
|
||
}).finally(() => {
|
||
instance.enable();
|
||
instance.show();
|
||
});
|
||
}
|
||
}, function(instance) {
|
||
});
|
||
}
|
||
let selectedAnnoteEl;
|
||
const selectorForAnnotation = ( cell, annotation) => {
|
||
let cellAttr = 'data-code-cell="' + cell + '"';
|
||
let lineAttr = 'data-code-annotation="' + annotation + '"';
|
||
const selector = 'span[' + cellAttr + '][' + lineAttr + ']';
|
||
return selector;
|
||
}
|
||
const selectCodeLines = (annoteEl) => {
|
||
const doc = window.document;
|
||
const targetCell = annoteEl.getAttribute("data-target-cell");
|
||
const targetAnnotation = annoteEl.getAttribute("data-target-annotation");
|
||
const annoteSpan = window.document.querySelector(selectorForAnnotation(targetCell, targetAnnotation));
|
||
const lines = annoteSpan.getAttribute("data-code-lines").split(",");
|
||
const lineIds = lines.map((line) => {
|
||
return targetCell + "-" + line;
|
||
})
|
||
let top = null;
|
||
let height = null;
|
||
let parent = null;
|
||
if (lineIds.length > 0) {
|
||
//compute the position of the single el (top and bottom and make a div)
|
||
const el = window.document.getElementById(lineIds[0]);
|
||
top = el.offsetTop;
|
||
height = el.offsetHeight;
|
||
parent = el.parentElement.parentElement;
|
||
if (lineIds.length > 1) {
|
||
const lastEl = window.document.getElementById(lineIds[lineIds.length - 1]);
|
||
const bottom = lastEl.offsetTop + lastEl.offsetHeight;
|
||
height = bottom - top;
|
||
}
|
||
if (top !== null && height !== null && parent !== null) {
|
||
// cook up a div (if necessary) and position it
|
||
let div = window.document.getElementById("code-annotation-line-highlight");
|
||
if (div === null) {
|
||
div = window.document.createElement("div");
|
||
div.setAttribute("id", "code-annotation-line-highlight");
|
||
div.style.position = 'absolute';
|
||
parent.appendChild(div);
|
||
}
|
||
div.style.top = top - 2 + "px";
|
||
div.style.height = height + 4 + "px";
|
||
div.style.left = 0;
|
||
let gutterDiv = window.document.getElementById("code-annotation-line-highlight-gutter");
|
||
if (gutterDiv === null) {
|
||
gutterDiv = window.document.createElement("div");
|
||
gutterDiv.setAttribute("id", "code-annotation-line-highlight-gutter");
|
||
gutterDiv.style.position = 'absolute';
|
||
const codeCell = window.document.getElementById(targetCell);
|
||
const gutter = codeCell.querySelector('.code-annotation-gutter');
|
||
gutter.appendChild(gutterDiv);
|
||
}
|
||
gutterDiv.style.top = top - 2 + "px";
|
||
gutterDiv.style.height = height + 4 + "px";
|
||
}
|
||
selectedAnnoteEl = annoteEl;
|
||
}
|
||
};
|
||
const unselectCodeLines = () => {
|
||
const elementsIds = ["code-annotation-line-highlight", "code-annotation-line-highlight-gutter"];
|
||
elementsIds.forEach((elId) => {
|
||
const div = window.document.getElementById(elId);
|
||
if (div) {
|
||
div.remove();
|
||
}
|
||
});
|
||
selectedAnnoteEl = undefined;
|
||
};
|
||
// Handle positioning of the toggle
|
||
window.addEventListener(
|
||
"resize",
|
||
throttle(() => {
|
||
elRect = undefined;
|
||
if (selectedAnnoteEl) {
|
||
selectCodeLines(selectedAnnoteEl);
|
||
}
|
||
}, 10)
|
||
);
|
||
function throttle(fn, ms) {
|
||
let throttle = false;
|
||
let timer;
|
||
return (...args) => {
|
||
if(!throttle) { // first call gets through
|
||
fn.apply(this, args);
|
||
throttle = true;
|
||
} else { // all the others get throttled
|
||
if(timer) clearTimeout(timer); // cancel #2
|
||
timer = setTimeout(() => {
|
||
fn.apply(this, args);
|
||
timer = throttle = false;
|
||
}, ms);
|
||
}
|
||
};
|
||
}
|
||
// Attach click handler to the DT
|
||
const annoteDls = window.document.querySelectorAll('dt[data-target-cell]');
|
||
for (const annoteDlNode of annoteDls) {
|
||
annoteDlNode.addEventListener('click', (event) => {
|
||
const clickedEl = event.target;
|
||
if (clickedEl !== selectedAnnoteEl) {
|
||
unselectCodeLines();
|
||
const activeEl = window.document.querySelector('dt[data-target-cell].code-annotation-active');
|
||
if (activeEl) {
|
||
activeEl.classList.remove('code-annotation-active');
|
||
}
|
||
selectCodeLines(clickedEl);
|
||
clickedEl.classList.add('code-annotation-active');
|
||
} else {
|
||
// Unselect the line
|
||
unselectCodeLines();
|
||
clickedEl.classList.remove('code-annotation-active');
|
||
}
|
||
});
|
||
}
|
||
const findCites = (el) => {
|
||
const parentEl = el.parentElement;
|
||
if (parentEl) {
|
||
const cites = parentEl.dataset.cites;
|
||
if (cites) {
|
||
return {
|
||
el,
|
||
cites: cites.split(' ')
|
||
};
|
||
} else {
|
||
return findCites(el.parentElement)
|
||
}
|
||
} else {
|
||
return undefined;
|
||
}
|
||
};
|
||
var bibliorefs = window.document.querySelectorAll('a[role="doc-biblioref"]');
|
||
for (var i=0; i<bibliorefs.length; i++) {
|
||
const ref = bibliorefs[i];
|
||
const citeInfo = findCites(ref);
|
||
if (citeInfo) {
|
||
tippyHover(citeInfo.el, function() {
|
||
var popup = window.document.createElement('div');
|
||
citeInfo.cites.forEach(function(cite) {
|
||
var citeDiv = window.document.createElement('div');
|
||
citeDiv.classList.add('hanging-indent');
|
||
citeDiv.classList.add('csl-entry');
|
||
var biblioDiv = window.document.getElementById('ref-' + cite);
|
||
if (biblioDiv) {
|
||
citeDiv.innerHTML = biblioDiv.innerHTML;
|
||
}
|
||
popup.appendChild(citeDiv);
|
||
});
|
||
return popup.innerHTML;
|
||
});
|
||
}
|
||
}
|
||
});
|
||
</script>
|
||
</div> <!-- /content -->
|
||
<script>var lightboxQuarto = GLightbox({"closeEffect":"zoom","descPosition":"bottom","loop":false,"openEffect":"zoom","selector":".lightbox"});
|
||
(function() {
|
||
let previousOnload = window.onload;
|
||
window.onload = () => {
|
||
if (previousOnload) {
|
||
previousOnload();
|
||
}
|
||
lightboxQuarto.on('slide_before_load', (data) => {
|
||
const { slideIndex, slideNode, slideConfig, player, trigger } = data;
|
||
const href = trigger.getAttribute('href');
|
||
if (href !== null) {
|
||
const imgEl = window.document.querySelector(`a[href="${href}"] img`);
|
||
if (imgEl !== null) {
|
||
const srcAttr = imgEl.getAttribute("src");
|
||
if (srcAttr && srcAttr.startsWith("data:")) {
|
||
slideConfig.href = srcAttr;
|
||
}
|
||
}
|
||
}
|
||
});
|
||
|
||
lightboxQuarto.on('slide_after_load', (data) => {
|
||
const { slideIndex, slideNode, slideConfig, player, trigger } = data;
|
||
if (window.Quarto?.typesetMath) {
|
||
window.Quarto.typesetMath(slideNode);
|
||
}
|
||
});
|
||
|
||
};
|
||
|
||
})();
|
||
</script>
|
||
|
||
|
||
|
||
|
||
</body></html> |