Deploy site [CI SKIP]
|
|
@ -1,12 +0,0 @@
|
||||||
[
|
|
||||||
{
|
|
||||||
"listing": "/index.html",
|
|
||||||
"items": [
|
|
||||||
"/suivi/2025-17/2025-17.html",
|
|
||||||
"/suivi/2025-16/2025-16.html",
|
|
||||||
"/suivi/2025-15/2025-15.html",
|
|
||||||
"/suivi/2025-14/2025-14.html",
|
|
||||||
"/suivi/2025-13/2025-13.html"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
|
|
@ -1,8 +0,0 @@
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
||||||
<head>
|
|
||||||
<title>Redirect to template.html</title>
|
|
||||||
<meta http-equiv="refresh" content="0;URL='template.html'" />
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
|
|
@ -1,44 +0,0 @@
|
||||||
[
|
|
||||||
{
|
|
||||||
"objectID": "template.html#jai-fait",
|
|
||||||
"href": "template.html#jai-fait",
|
|
||||||
"title": "Bilan semaine MM YYYY : dd-dd mois",
|
|
||||||
"section": "J’ai fait",
|
|
||||||
"text": "J’ai fait"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"objectID": "template.html#a-continuer",
|
|
||||||
"href": "template.html#a-continuer",
|
|
||||||
"title": "Bilan semaine MM YYYY : dd-dd mois",
|
|
||||||
"section": "A continuer",
|
|
||||||
"text": "A continuer"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"objectID": "suivi/2025-17/2025-17.html",
|
|
||||||
"href": "suivi/2025-17/2025-17.html",
|
|
||||||
"title": "Bilan semaine 17 2025 : 24 avril - 25 avril",
|
|
||||||
"section": "",
|
|
||||||
"text": "Relire intro St Clair\nS’inspirer structure pour mon intro\nTrouver biblio intro\nRédiger l’intro\nRegarder les applications pour les collections de réseaux recommender system\nLire les papiers de Baldock Traveset Souza Cordeniz Trojelsgaard et Gibson\nDire résultats nettement meilleurs et variabilités inférieures.\n\n\n\n\n\nRelancer simus clustering avec VEM steps = 10 000 et plus nombreux init pour spectral\nAjouter simu clustering métriques nb sous-collections obtenues. Vérifier les résultats obtenus si ARI = 0. Et augmenter la taille M = 30 avec M_1 = M_2 = M_3 = 10.\nComparer sur clustering unipartite avec versions symétriser des par blocs des matrices d’adjacences.\nCorriger structure de simus :\n\nPour noisy \\alpha :\n\nLogit pour envoyer la gaussienne vers (0,1)\nBeta contrainte dans (0,1)\n\nPour noisy links : Générer nb_clustering collections de taille M puis prélever \\epsilon_{max}n_r n_c liens à inverser puis pour les \\epsilon < \\epsilon_{max} prélever dans la liste des indices afin d’avoir des perturbations emboitées.\n\n\n\n\n\n\nKmeans sur la densité des réseaux subdoré pour pré-partitionner et clusteriser.\n\n\n\n\n\nCréer des vignettes illustrant par exemple des cas de simulations. Possible de mettre l’exemple d’application de Sophie sur les réseaux avec gradient d’urbanisation."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"objectID": "suivi/2025-17/2025-17.html#a-faire",
|
|
||||||
"href": "suivi/2025-17/2025-17.html#a-faire",
|
|
||||||
"title": "Bilan semaine 17 2025 : 24 avril - 25 avril",
|
|
||||||
"section": "",
|
|
||||||
"text": "Relire intro St Clair\nS’inspirer structure pour mon intro\nTrouver biblio intro\nRédiger l’intro\nRegarder les applications pour les collections de réseaux recommender system\nLire les papiers de Baldock Traveset Souza Cordeniz Trojelsgaard et Gibson\nDire résultats nettement meilleurs et variabilités inférieures.\n\n\n\n\n\nRelancer simus clustering avec VEM steps = 10 000 et plus nombreux init pour spectral\nAjouter simu clustering métriques nb sous-collections obtenues. Vérifier les résultats obtenus si ARI = 0. Et augmenter la taille M = 30 avec M_1 = M_2 = M_3 = 10.\nComparer sur clustering unipartite avec versions symétriser des par blocs des matrices d’adjacences.\nCorriger structure de simus :\n\nPour noisy \\alpha :\n\nLogit pour envoyer la gaussienne vers (0,1)\nBeta contrainte dans (0,1)\n\nPour noisy links : Générer nb_clustering collections de taille M puis prélever \\epsilon_{max}n_r n_c liens à inverser puis pour les \\epsilon < \\epsilon_{max} prélever dans la liste des indices afin d’avoir des perturbations emboitées.\n\n\n\n\n\n\nKmeans sur la densité des réseaux subdoré pour pré-partitionner et clusteriser.\n\n\n\n\n\nCréer des vignettes illustrant par exemple des cas de simulations. Possible de mettre l’exemple d’application de Sophie sur les réseaux avec gradient d’urbanisation."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"objectID": "suivi/2025-17/2025-17.html#jai-fait",
|
|
||||||
"href": "suivi/2025-17/2025-17.html#jai-fait",
|
|
||||||
"title": "Bilan semaine 17 2025 : 24 avril - 25 avril",
|
|
||||||
"section": "J’ai fait",
|
|
||||||
"text": "J’ai fait\n\nCréer un README descriptif du dépôt des codes pour l’article.\nRemonter figure sélection de modèle dans le corps de l’article\nEnrichir légende de la figure 7 et 8\nSupprimer p_NA des autres cadrans des proportions de NA\nBasculer le code du clustering pour utiliser hclust et mis l’argument method de hclust avec single par défaut\nAjouter pipeline qui knit README.Rmd à chaque merge dans main colSBM"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"objectID": "suivi/2025-17/2025-17.html#a-continuer",
|
|
||||||
"href": "suivi/2025-17/2025-17.html#a-continuer",
|
|
||||||
"title": "Bilan semaine 17 2025 : 24 avril - 25 avril",
|
|
||||||
"section": "A continuer",
|
|
||||||
"text": "A continuer\n\nRésultats simus NA Erreur pour certaines conditions : Pour NA robustness générer nb_rep collections de taille M=2 et prélever \\epsilon_{max}n_r n_c liens à retirer puis pour les \\epsilon < \\epsilon_{max} 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 en attente des résultats MIGALE.\nLire Biological Networks - François Képès\nJ’ai esquissé des bouts d’intro\nRelancer 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\n\n\nCorrection méthodo\n\nIdée Pierre : Regarder la contribution au BICL de la collection des réseaux et comparer au sep BICL pour essayer de repérer les outliers. En regardant la vbound (pas la pénalité) de chaque réseau dans le joint vs sa vbound dans le sep -> Résultats : pas de différences majeures entre les réseaux avec le rapport vbound_joint/vbound_sep, les outliers ne sont pas marqués.\nRegarder si plutôt que k médioid possible meilleurs résultats avec d’autres distances hclust avec min, max etc… -> L’algo PAM donne des clusters équilibrés sans séparer les outliers Je regarde avec plutôt des hclust avec métrique single pour séparer les outliers.\nVoir si in fine possible de repérer des outliers à partir de ces nouvelles métriques\nRegarder la répartition de densité dans les réseaux sub-doré -> déséquilibrée\n\n\nEn faisant des clusterings par densité on constate qu'avec un modèle iid pour des réseaux dont la densité est entre :\n- 0 et 0.05 : Baldock et Souza tout le monde se retrouvait ensemble avec *Partitioning around medoids*\n\n\nApplications\n\nIdée Sophie: Regarder clustering de données plantes-pollinisateur selon gradient d’urbanisation\n\n\nSophie 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 !\n\n\n\nLancer clustering auteur par auteur du sub-Doré : 5 collections différentes dans l’idée.\nUne fois fait, Sophie ne trouve pas que ce soit le plus pertinent pour illustrer le clustering. Plus intéressant de garder le clustering de données simulées (M = 30) et se servir des exemples dessous et des parcours exhaustif des possibilités de partitionnement comme comparatif.\n\nBaldock\n\n\n\nAlluvial Baldock\n\n\n\n\nGibson\n\n\n\nAlluvial Gibson\n\n\n\n\nSouza\n\n\n\nAlluvial Souza\n\n\n\n\nTraveset\n\n\n\nAlluvial Traveset\n\n\n\n\nTrojelsgaard\n\n\n\nAlluvial Trojelgaard"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
2078
public/site_libs/bootstrap/bootstrap-icons.css
vendored
12
public/site_libs/bootstrap/bootstrap.min.css
vendored
7
public/site_libs/bootstrap/bootstrap.min.js
vendored
7
public/site_libs/clipboard/clipboard.min.js
vendored
9
public/site_libs/quarto-html/anchor.min.js
vendored
6
public/site_libs/quarto-html/popper.min.js
vendored
|
|
@ -1,205 +0,0 @@
|
||||||
/* quarto syntax highlight colors */
|
|
||||||
:root {
|
|
||||||
--quarto-hl-ot-color: #003B4F;
|
|
||||||
--quarto-hl-at-color: #657422;
|
|
||||||
--quarto-hl-ss-color: #20794D;
|
|
||||||
--quarto-hl-an-color: #5E5E5E;
|
|
||||||
--quarto-hl-fu-color: #4758AB;
|
|
||||||
--quarto-hl-st-color: #20794D;
|
|
||||||
--quarto-hl-cf-color: #003B4F;
|
|
||||||
--quarto-hl-op-color: #5E5E5E;
|
|
||||||
--quarto-hl-er-color: #AD0000;
|
|
||||||
--quarto-hl-bn-color: #AD0000;
|
|
||||||
--quarto-hl-al-color: #AD0000;
|
|
||||||
--quarto-hl-va-color: #111111;
|
|
||||||
--quarto-hl-bu-color: inherit;
|
|
||||||
--quarto-hl-ex-color: inherit;
|
|
||||||
--quarto-hl-pp-color: #AD0000;
|
|
||||||
--quarto-hl-in-color: #5E5E5E;
|
|
||||||
--quarto-hl-vs-color: #20794D;
|
|
||||||
--quarto-hl-wa-color: #5E5E5E;
|
|
||||||
--quarto-hl-do-color: #5E5E5E;
|
|
||||||
--quarto-hl-im-color: #00769E;
|
|
||||||
--quarto-hl-ch-color: #20794D;
|
|
||||||
--quarto-hl-dt-color: #AD0000;
|
|
||||||
--quarto-hl-fl-color: #AD0000;
|
|
||||||
--quarto-hl-co-color: #5E5E5E;
|
|
||||||
--quarto-hl-cv-color: #5E5E5E;
|
|
||||||
--quarto-hl-cn-color: #8f5902;
|
|
||||||
--quarto-hl-sc-color: #5E5E5E;
|
|
||||||
--quarto-hl-dv-color: #AD0000;
|
|
||||||
--quarto-hl-kw-color: #003B4F;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* other quarto variables */
|
|
||||||
:root {
|
|
||||||
--quarto-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
|
|
||||||
}
|
|
||||||
|
|
||||||
pre > code.sourceCode > span {
|
|
||||||
color: #003B4F;
|
|
||||||
}
|
|
||||||
|
|
||||||
code span {
|
|
||||||
color: #003B4F;
|
|
||||||
}
|
|
||||||
|
|
||||||
code.sourceCode > span {
|
|
||||||
color: #003B4F;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.sourceCode,
|
|
||||||
div.sourceCode pre.sourceCode {
|
|
||||||
color: #003B4F;
|
|
||||||
}
|
|
||||||
|
|
||||||
code span.ot {
|
|
||||||
color: #003B4F;
|
|
||||||
font-style: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
code span.at {
|
|
||||||
color: #657422;
|
|
||||||
font-style: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
code span.ss {
|
|
||||||
color: #20794D;
|
|
||||||
font-style: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
code span.an {
|
|
||||||
color: #5E5E5E;
|
|
||||||
font-style: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
code span.fu {
|
|
||||||
color: #4758AB;
|
|
||||||
font-style: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
code span.st {
|
|
||||||
color: #20794D;
|
|
||||||
font-style: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
code span.cf {
|
|
||||||
color: #003B4F;
|
|
||||||
font-weight: bold;
|
|
||||||
font-style: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
code span.op {
|
|
||||||
color: #5E5E5E;
|
|
||||||
font-style: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
code span.er {
|
|
||||||
color: #AD0000;
|
|
||||||
font-style: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
code span.bn {
|
|
||||||
color: #AD0000;
|
|
||||||
font-style: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
code span.al {
|
|
||||||
color: #AD0000;
|
|
||||||
font-style: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
code span.va {
|
|
||||||
color: #111111;
|
|
||||||
font-style: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
code span.bu {
|
|
||||||
font-style: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
code span.ex {
|
|
||||||
font-style: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
code span.pp {
|
|
||||||
color: #AD0000;
|
|
||||||
font-style: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
code span.in {
|
|
||||||
color: #5E5E5E;
|
|
||||||
font-style: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
code span.vs {
|
|
||||||
color: #20794D;
|
|
||||||
font-style: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
code span.wa {
|
|
||||||
color: #5E5E5E;
|
|
||||||
font-style: italic;
|
|
||||||
}
|
|
||||||
|
|
||||||
code span.do {
|
|
||||||
color: #5E5E5E;
|
|
||||||
font-style: italic;
|
|
||||||
}
|
|
||||||
|
|
||||||
code span.im {
|
|
||||||
color: #00769E;
|
|
||||||
font-style: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
code span.ch {
|
|
||||||
color: #20794D;
|
|
||||||
font-style: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
code span.dt {
|
|
||||||
color: #AD0000;
|
|
||||||
font-style: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
code span.fl {
|
|
||||||
color: #AD0000;
|
|
||||||
font-style: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
code span.co {
|
|
||||||
color: #5E5E5E;
|
|
||||||
font-style: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
code span.cv {
|
|
||||||
color: #5E5E5E;
|
|
||||||
font-style: italic;
|
|
||||||
}
|
|
||||||
|
|
||||||
code span.cn {
|
|
||||||
color: #8f5902;
|
|
||||||
font-style: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
code span.sc {
|
|
||||||
color: #5E5E5E;
|
|
||||||
font-style: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
code span.dv {
|
|
||||||
color: #AD0000;
|
|
||||||
font-style: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
code span.kw {
|
|
||||||
color: #003B4F;
|
|
||||||
font-weight: bold;
|
|
||||||
font-style: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
.prevent-inlining {
|
|
||||||
content: "</";
|
|
||||||
}
|
|
||||||
|
|
||||||
/*# sourceMappingURL=debc5d5d77c3f9108843748ff7464032.css.map */
|
|
||||||
|
|
@ -1,908 +0,0 @@
|
||||||
const sectionChanged = new CustomEvent("quarto-sectionChanged", {
|
|
||||||
detail: {},
|
|
||||||
bubbles: true,
|
|
||||||
cancelable: false,
|
|
||||||
composed: false,
|
|
||||||
});
|
|
||||||
|
|
||||||
const layoutMarginEls = () => {
|
|
||||||
// Find any conflicting margin elements and add margins to the
|
|
||||||
// top to prevent overlap
|
|
||||||
const marginChildren = window.document.querySelectorAll(
|
|
||||||
".column-margin.column-container > *, .margin-caption, .aside"
|
|
||||||
);
|
|
||||||
|
|
||||||
let lastBottom = 0;
|
|
||||||
for (const marginChild of marginChildren) {
|
|
||||||
if (marginChild.offsetParent !== null) {
|
|
||||||
// clear the top margin so we recompute it
|
|
||||||
marginChild.style.marginTop = null;
|
|
||||||
const top = marginChild.getBoundingClientRect().top + window.scrollY;
|
|
||||||
if (top < lastBottom) {
|
|
||||||
const marginChildStyle = window.getComputedStyle(marginChild);
|
|
||||||
const marginBottom = parseFloat(marginChildStyle["marginBottom"]);
|
|
||||||
const margin = lastBottom - top + marginBottom;
|
|
||||||
marginChild.style.marginTop = `${margin}px`;
|
|
||||||
}
|
|
||||||
const styles = window.getComputedStyle(marginChild);
|
|
||||||
const marginTop = parseFloat(styles["marginTop"]);
|
|
||||||
lastBottom = top + marginChild.getBoundingClientRect().height + marginTop;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
window.document.addEventListener("DOMContentLoaded", function (_event) {
|
|
||||||
// Recompute the position of margin elements anytime the body size changes
|
|
||||||
if (window.ResizeObserver) {
|
|
||||||
const resizeObserver = new window.ResizeObserver(
|
|
||||||
throttle(() => {
|
|
||||||
layoutMarginEls();
|
|
||||||
if (
|
|
||||||
window.document.body.getBoundingClientRect().width < 990 &&
|
|
||||||
isReaderMode()
|
|
||||||
) {
|
|
||||||
quartoToggleReader();
|
|
||||||
}
|
|
||||||
}, 50)
|
|
||||||
);
|
|
||||||
resizeObserver.observe(window.document.body);
|
|
||||||
}
|
|
||||||
|
|
||||||
const tocEl = window.document.querySelector('nav.toc-active[role="doc-toc"]');
|
|
||||||
const sidebarEl = window.document.getElementById("quarto-sidebar");
|
|
||||||
const leftTocEl = window.document.getElementById("quarto-sidebar-toc-left");
|
|
||||||
const marginSidebarEl = window.document.getElementById(
|
|
||||||
"quarto-margin-sidebar"
|
|
||||||
);
|
|
||||||
// function to determine whether the element has a previous sibling that is active
|
|
||||||
const prevSiblingIsActiveLink = (el) => {
|
|
||||||
const sibling = el.previousElementSibling;
|
|
||||||
if (sibling && sibling.tagName === "A") {
|
|
||||||
return sibling.classList.contains("active");
|
|
||||||
} else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// fire slideEnter for bootstrap tab activations (for htmlwidget resize behavior)
|
|
||||||
function fireSlideEnter(e) {
|
|
||||||
const event = window.document.createEvent("Event");
|
|
||||||
event.initEvent("slideenter", true, true);
|
|
||||||
window.document.dispatchEvent(event);
|
|
||||||
}
|
|
||||||
const tabs = window.document.querySelectorAll('a[data-bs-toggle="tab"]');
|
|
||||||
tabs.forEach((tab) => {
|
|
||||||
tab.addEventListener("shown.bs.tab", fireSlideEnter);
|
|
||||||
});
|
|
||||||
|
|
||||||
// fire slideEnter for tabby tab activations (for htmlwidget resize behavior)
|
|
||||||
document.addEventListener("tabby", fireSlideEnter, false);
|
|
||||||
|
|
||||||
// Track scrolling and mark TOC links as active
|
|
||||||
// get table of contents and sidebar (bail if we don't have at least one)
|
|
||||||
const tocLinks = tocEl
|
|
||||||
? [...tocEl.querySelectorAll("a[data-scroll-target]")]
|
|
||||||
: [];
|
|
||||||
const makeActive = (link) => tocLinks[link].classList.add("active");
|
|
||||||
const removeActive = (link) => tocLinks[link].classList.remove("active");
|
|
||||||
const removeAllActive = () =>
|
|
||||||
[...Array(tocLinks.length).keys()].forEach((link) => removeActive(link));
|
|
||||||
|
|
||||||
// activate the anchor for a section associated with this TOC entry
|
|
||||||
tocLinks.forEach((link) => {
|
|
||||||
link.addEventListener("click", () => {
|
|
||||||
if (link.href.indexOf("#") !== -1) {
|
|
||||||
const anchor = link.href.split("#")[1];
|
|
||||||
const heading = window.document.querySelector(
|
|
||||||
`[data-anchor-id="${anchor}"]`
|
|
||||||
);
|
|
||||||
if (heading) {
|
|
||||||
// Add the class
|
|
||||||
heading.classList.add("reveal-anchorjs-link");
|
|
||||||
|
|
||||||
// function to show the anchor
|
|
||||||
const handleMouseout = () => {
|
|
||||||
heading.classList.remove("reveal-anchorjs-link");
|
|
||||||
heading.removeEventListener("mouseout", handleMouseout);
|
|
||||||
};
|
|
||||||
|
|
||||||
// add a function to clear the anchor when the user mouses out of it
|
|
||||||
heading.addEventListener("mouseout", handleMouseout);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
const sections = tocLinks.map((link) => {
|
|
||||||
const target = link.getAttribute("data-scroll-target");
|
|
||||||
if (target.startsWith("#")) {
|
|
||||||
return window.document.getElementById(decodeURI(`${target.slice(1)}`));
|
|
||||||
} else {
|
|
||||||
return window.document.querySelector(decodeURI(`${target}`));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
const sectionMargin = 200;
|
|
||||||
let currentActive = 0;
|
|
||||||
// track whether we've initialized state the first time
|
|
||||||
let init = false;
|
|
||||||
|
|
||||||
const updateActiveLink = () => {
|
|
||||||
// The index from bottom to top (e.g. reversed list)
|
|
||||||
let sectionIndex = -1;
|
|
||||||
if (
|
|
||||||
window.innerHeight + window.pageYOffset >=
|
|
||||||
window.document.body.offsetHeight
|
|
||||||
) {
|
|
||||||
// This is the no-scroll case where last section should be the active one
|
|
||||||
sectionIndex = 0;
|
|
||||||
} else {
|
|
||||||
// This finds the last section visible on screen that should be made active
|
|
||||||
sectionIndex = [...sections].reverse().findIndex((section) => {
|
|
||||||
if (section) {
|
|
||||||
return window.pageYOffset >= section.offsetTop - sectionMargin;
|
|
||||||
} else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (sectionIndex > -1) {
|
|
||||||
const current = sections.length - sectionIndex - 1;
|
|
||||||
if (current !== currentActive) {
|
|
||||||
removeAllActive();
|
|
||||||
currentActive = current;
|
|
||||||
makeActive(current);
|
|
||||||
if (init) {
|
|
||||||
window.dispatchEvent(sectionChanged);
|
|
||||||
}
|
|
||||||
init = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const inHiddenRegion = (top, bottom, hiddenRegions) => {
|
|
||||||
for (const region of hiddenRegions) {
|
|
||||||
if (top <= region.bottom && bottom >= region.top) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
};
|
|
||||||
|
|
||||||
const categorySelector = "header.quarto-title-block .quarto-category";
|
|
||||||
const activateCategories = (href) => {
|
|
||||||
// Find any categories
|
|
||||||
// Surround them with a link pointing back to:
|
|
||||||
// #category=Authoring
|
|
||||||
try {
|
|
||||||
const categoryEls = window.document.querySelectorAll(categorySelector);
|
|
||||||
for (const categoryEl of categoryEls) {
|
|
||||||
const categoryText = categoryEl.textContent;
|
|
||||||
if (categoryText) {
|
|
||||||
const link = `${href}#category=${encodeURIComponent(categoryText)}`;
|
|
||||||
const linkEl = window.document.createElement("a");
|
|
||||||
linkEl.setAttribute("href", link);
|
|
||||||
for (const child of categoryEl.childNodes) {
|
|
||||||
linkEl.append(child);
|
|
||||||
}
|
|
||||||
categoryEl.appendChild(linkEl);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch {
|
|
||||||
// Ignore errors
|
|
||||||
}
|
|
||||||
};
|
|
||||||
function hasTitleCategories() {
|
|
||||||
return window.document.querySelector(categorySelector) !== null;
|
|
||||||
}
|
|
||||||
|
|
||||||
function offsetRelativeUrl(url) {
|
|
||||||
const offset = getMeta("quarto:offset");
|
|
||||||
return offset ? offset + url : url;
|
|
||||||
}
|
|
||||||
|
|
||||||
function offsetAbsoluteUrl(url) {
|
|
||||||
const offset = getMeta("quarto:offset");
|
|
||||||
const baseUrl = new URL(offset, window.location);
|
|
||||||
|
|
||||||
const projRelativeUrl = url.replace(baseUrl, "");
|
|
||||||
if (projRelativeUrl.startsWith("/")) {
|
|
||||||
return projRelativeUrl;
|
|
||||||
} else {
|
|
||||||
return "/" + projRelativeUrl;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// read a meta tag value
|
|
||||||
function getMeta(metaName) {
|
|
||||||
const metas = window.document.getElementsByTagName("meta");
|
|
||||||
for (let i = 0; i < metas.length; i++) {
|
|
||||||
if (metas[i].getAttribute("name") === metaName) {
|
|
||||||
return metas[i].getAttribute("content");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
|
|
||||||
async function findAndActivateCategories() {
|
|
||||||
const currentPagePath = offsetAbsoluteUrl(window.location.href);
|
|
||||||
const response = await fetch(offsetRelativeUrl("listings.json"));
|
|
||||||
if (response.status == 200) {
|
|
||||||
return response.json().then(function (listingPaths) {
|
|
||||||
const listingHrefs = [];
|
|
||||||
for (const listingPath of listingPaths) {
|
|
||||||
const pathWithoutLeadingSlash = listingPath.listing.substring(1);
|
|
||||||
for (const item of listingPath.items) {
|
|
||||||
if (
|
|
||||||
item === currentPagePath ||
|
|
||||||
item === currentPagePath + "index.html"
|
|
||||||
) {
|
|
||||||
// Resolve this path against the offset to be sure
|
|
||||||
// we already are using the correct path to the listing
|
|
||||||
// (this adjusts the listing urls to be rooted against
|
|
||||||
// whatever root the page is actually running against)
|
|
||||||
const relative = offsetRelativeUrl(pathWithoutLeadingSlash);
|
|
||||||
const baseUrl = window.location;
|
|
||||||
const resolvedPath = new URL(relative, baseUrl);
|
|
||||||
listingHrefs.push(resolvedPath.pathname);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Look up the tree for a nearby linting and use that if we find one
|
|
||||||
const nearestListing = findNearestParentListing(
|
|
||||||
offsetAbsoluteUrl(window.location.pathname),
|
|
||||||
listingHrefs
|
|
||||||
);
|
|
||||||
if (nearestListing) {
|
|
||||||
activateCategories(nearestListing);
|
|
||||||
} else {
|
|
||||||
// See if the referrer is a listing page for this item
|
|
||||||
const referredRelativePath = offsetAbsoluteUrl(document.referrer);
|
|
||||||
const referrerListing = listingHrefs.find((listingHref) => {
|
|
||||||
const isListingReferrer =
|
|
||||||
listingHref === referredRelativePath ||
|
|
||||||
listingHref === referredRelativePath + "index.html";
|
|
||||||
return isListingReferrer;
|
|
||||||
});
|
|
||||||
|
|
||||||
if (referrerListing) {
|
|
||||||
// Try to use the referrer if possible
|
|
||||||
activateCategories(referrerListing);
|
|
||||||
} else if (listingHrefs.length > 0) {
|
|
||||||
// Otherwise, just fall back to the first listing
|
|
||||||
activateCategories(listingHrefs[0]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (hasTitleCategories()) {
|
|
||||||
findAndActivateCategories();
|
|
||||||
}
|
|
||||||
|
|
||||||
const findNearestParentListing = (href, listingHrefs) => {
|
|
||||||
if (!href || !listingHrefs) {
|
|
||||||
return undefined;
|
|
||||||
}
|
|
||||||
// Look up the tree for a nearby linting and use that if we find one
|
|
||||||
const relativeParts = href.substring(1).split("/");
|
|
||||||
while (relativeParts.length > 0) {
|
|
||||||
const path = relativeParts.join("/");
|
|
||||||
for (const listingHref of listingHrefs) {
|
|
||||||
if (listingHref.startsWith(path)) {
|
|
||||||
return listingHref;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
relativeParts.pop();
|
|
||||||
}
|
|
||||||
|
|
||||||
return undefined;
|
|
||||||
};
|
|
||||||
|
|
||||||
const manageSidebarVisiblity = (el, placeholderDescriptor) => {
|
|
||||||
let isVisible = true;
|
|
||||||
let elRect;
|
|
||||||
|
|
||||||
return (hiddenRegions) => {
|
|
||||||
if (el === null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Find the last element of the TOC
|
|
||||||
const lastChildEl = el.lastElementChild;
|
|
||||||
|
|
||||||
if (lastChildEl) {
|
|
||||||
// Converts the sidebar to a menu
|
|
||||||
const convertToMenu = () => {
|
|
||||||
for (const child of el.children) {
|
|
||||||
child.style.opacity = 0;
|
|
||||||
child.style.overflow = "hidden";
|
|
||||||
child.style.pointerEvents = "none";
|
|
||||||
}
|
|
||||||
|
|
||||||
nexttick(() => {
|
|
||||||
const toggleContainer = window.document.createElement("div");
|
|
||||||
toggleContainer.style.width = "100%";
|
|
||||||
toggleContainer.classList.add("zindex-over-content");
|
|
||||||
toggleContainer.classList.add("quarto-sidebar-toggle");
|
|
||||||
toggleContainer.classList.add("headroom-target"); // Marks this to be managed by headeroom
|
|
||||||
toggleContainer.id = placeholderDescriptor.id;
|
|
||||||
toggleContainer.style.position = "fixed";
|
|
||||||
|
|
||||||
const toggleIcon = window.document.createElement("i");
|
|
||||||
toggleIcon.classList.add("quarto-sidebar-toggle-icon");
|
|
||||||
toggleIcon.classList.add("bi");
|
|
||||||
toggleIcon.classList.add("bi-caret-down-fill");
|
|
||||||
|
|
||||||
const toggleTitle = window.document.createElement("div");
|
|
||||||
const titleEl = window.document.body.querySelector(
|
|
||||||
placeholderDescriptor.titleSelector
|
|
||||||
);
|
|
||||||
if (titleEl) {
|
|
||||||
toggleTitle.append(
|
|
||||||
titleEl.textContent || titleEl.innerText,
|
|
||||||
toggleIcon
|
|
||||||
);
|
|
||||||
}
|
|
||||||
toggleTitle.classList.add("zindex-over-content");
|
|
||||||
toggleTitle.classList.add("quarto-sidebar-toggle-title");
|
|
||||||
toggleContainer.append(toggleTitle);
|
|
||||||
|
|
||||||
const toggleContents = window.document.createElement("div");
|
|
||||||
toggleContents.classList = el.classList;
|
|
||||||
toggleContents.classList.add("zindex-over-content");
|
|
||||||
toggleContents.classList.add("quarto-sidebar-toggle-contents");
|
|
||||||
for (const child of el.children) {
|
|
||||||
if (child.id === "toc-title") {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
const clone = child.cloneNode(true);
|
|
||||||
clone.style.opacity = 1;
|
|
||||||
clone.style.pointerEvents = null;
|
|
||||||
clone.style.display = null;
|
|
||||||
toggleContents.append(clone);
|
|
||||||
}
|
|
||||||
toggleContents.style.height = "0px";
|
|
||||||
const positionToggle = () => {
|
|
||||||
// position the element (top left of parent, same width as parent)
|
|
||||||
if (!elRect) {
|
|
||||||
elRect = el.getBoundingClientRect();
|
|
||||||
}
|
|
||||||
toggleContainer.style.left = `${elRect.left}px`;
|
|
||||||
toggleContainer.style.top = `${elRect.top}px`;
|
|
||||||
toggleContainer.style.width = `${elRect.width}px`;
|
|
||||||
};
|
|
||||||
positionToggle();
|
|
||||||
|
|
||||||
toggleContainer.append(toggleContents);
|
|
||||||
el.parentElement.prepend(toggleContainer);
|
|
||||||
|
|
||||||
// Process clicks
|
|
||||||
let tocShowing = false;
|
|
||||||
// Allow the caller to control whether this is dismissed
|
|
||||||
// when it is clicked (e.g. sidebar navigation supports
|
|
||||||
// opening and closing the nav tree, so don't dismiss on click)
|
|
||||||
const clickEl = placeholderDescriptor.dismissOnClick
|
|
||||||
? toggleContainer
|
|
||||||
: toggleTitle;
|
|
||||||
|
|
||||||
const closeToggle = () => {
|
|
||||||
if (tocShowing) {
|
|
||||||
toggleContainer.classList.remove("expanded");
|
|
||||||
toggleContents.style.height = "0px";
|
|
||||||
tocShowing = false;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Get rid of any expanded toggle if the user scrolls
|
|
||||||
window.document.addEventListener(
|
|
||||||
"scroll",
|
|
||||||
throttle(() => {
|
|
||||||
closeToggle();
|
|
||||||
}, 50)
|
|
||||||
);
|
|
||||||
|
|
||||||
// Handle positioning of the toggle
|
|
||||||
window.addEventListener(
|
|
||||||
"resize",
|
|
||||||
throttle(() => {
|
|
||||||
elRect = undefined;
|
|
||||||
positionToggle();
|
|
||||||
}, 50)
|
|
||||||
);
|
|
||||||
|
|
||||||
window.addEventListener("quarto-hrChanged", () => {
|
|
||||||
elRect = undefined;
|
|
||||||
});
|
|
||||||
|
|
||||||
// Process the click
|
|
||||||
clickEl.onclick = () => {
|
|
||||||
if (!tocShowing) {
|
|
||||||
toggleContainer.classList.add("expanded");
|
|
||||||
toggleContents.style.height = null;
|
|
||||||
tocShowing = true;
|
|
||||||
} else {
|
|
||||||
closeToggle();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
// Converts a sidebar from a menu back to a sidebar
|
|
||||||
const convertToSidebar = () => {
|
|
||||||
for (const child of el.children) {
|
|
||||||
child.style.opacity = 1;
|
|
||||||
child.style.overflow = null;
|
|
||||||
child.style.pointerEvents = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
const placeholderEl = window.document.getElementById(
|
|
||||||
placeholderDescriptor.id
|
|
||||||
);
|
|
||||||
if (placeholderEl) {
|
|
||||||
placeholderEl.remove();
|
|
||||||
}
|
|
||||||
|
|
||||||
el.classList.remove("rollup");
|
|
||||||
};
|
|
||||||
|
|
||||||
if (isReaderMode()) {
|
|
||||||
convertToMenu();
|
|
||||||
isVisible = false;
|
|
||||||
} else {
|
|
||||||
// Find the top and bottom o the element that is being managed
|
|
||||||
const elTop = el.offsetTop;
|
|
||||||
const elBottom =
|
|
||||||
elTop + lastChildEl.offsetTop + lastChildEl.offsetHeight;
|
|
||||||
|
|
||||||
if (!isVisible) {
|
|
||||||
// If the element is current not visible reveal if there are
|
|
||||||
// no conflicts with overlay regions
|
|
||||||
if (!inHiddenRegion(elTop, elBottom, hiddenRegions)) {
|
|
||||||
convertToSidebar();
|
|
||||||
isVisible = true;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// If the element is visible, hide it if it conflicts with overlay regions
|
|
||||||
// and insert a placeholder toggle (or if we're in reader mode)
|
|
||||||
if (inHiddenRegion(elTop, elBottom, hiddenRegions)) {
|
|
||||||
convertToMenu();
|
|
||||||
isVisible = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
const tabEls = document.querySelectorAll('a[data-bs-toggle="tab"]');
|
|
||||||
for (const tabEl of tabEls) {
|
|
||||||
const id = tabEl.getAttribute("data-bs-target");
|
|
||||||
if (id) {
|
|
||||||
const columnEl = document.querySelector(
|
|
||||||
`${id} .column-margin, .tabset-margin-content`
|
|
||||||
);
|
|
||||||
if (columnEl)
|
|
||||||
tabEl.addEventListener("shown.bs.tab", function (event) {
|
|
||||||
const el = event.srcElement;
|
|
||||||
if (el) {
|
|
||||||
const visibleCls = `${el.id}-margin-content`;
|
|
||||||
// walk up until we find a parent tabset
|
|
||||||
let panelTabsetEl = el.parentElement;
|
|
||||||
while (panelTabsetEl) {
|
|
||||||
if (panelTabsetEl.classList.contains("panel-tabset")) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
panelTabsetEl = panelTabsetEl.parentElement;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (panelTabsetEl) {
|
|
||||||
const prevSib = panelTabsetEl.previousElementSibling;
|
|
||||||
if (
|
|
||||||
prevSib &&
|
|
||||||
prevSib.classList.contains("tabset-margin-container")
|
|
||||||
) {
|
|
||||||
const childNodes = prevSib.querySelectorAll(
|
|
||||||
".tabset-margin-content"
|
|
||||||
);
|
|
||||||
for (const childEl of childNodes) {
|
|
||||||
if (childEl.classList.contains(visibleCls)) {
|
|
||||||
childEl.classList.remove("collapse");
|
|
||||||
} else {
|
|
||||||
childEl.classList.add("collapse");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
layoutMarginEls();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Manage the visibility of the toc and the sidebar
|
|
||||||
const marginScrollVisibility = manageSidebarVisiblity(marginSidebarEl, {
|
|
||||||
id: "quarto-toc-toggle",
|
|
||||||
titleSelector: "#toc-title",
|
|
||||||
dismissOnClick: true,
|
|
||||||
});
|
|
||||||
const sidebarScrollVisiblity = manageSidebarVisiblity(sidebarEl, {
|
|
||||||
id: "quarto-sidebarnav-toggle",
|
|
||||||
titleSelector: ".title",
|
|
||||||
dismissOnClick: false,
|
|
||||||
});
|
|
||||||
let tocLeftScrollVisibility;
|
|
||||||
if (leftTocEl) {
|
|
||||||
tocLeftScrollVisibility = manageSidebarVisiblity(leftTocEl, {
|
|
||||||
id: "quarto-lefttoc-toggle",
|
|
||||||
titleSelector: "#toc-title",
|
|
||||||
dismissOnClick: true,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// Find the first element that uses formatting in special columns
|
|
||||||
const conflictingEls = window.document.body.querySelectorAll(
|
|
||||||
'[class^="column-"], [class*=" column-"], aside, [class*="margin-caption"], [class*=" margin-caption"], [class*="margin-ref"], [class*=" margin-ref"]'
|
|
||||||
);
|
|
||||||
|
|
||||||
// Filter all the possibly conflicting elements into ones
|
|
||||||
// the do conflict on the left or ride side
|
|
||||||
const arrConflictingEls = Array.from(conflictingEls);
|
|
||||||
const leftSideConflictEls = arrConflictingEls.filter((el) => {
|
|
||||||
if (el.tagName === "ASIDE") {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return Array.from(el.classList).find((className) => {
|
|
||||||
return (
|
|
||||||
className !== "column-body" &&
|
|
||||||
className.startsWith("column-") &&
|
|
||||||
!className.endsWith("right") &&
|
|
||||||
!className.endsWith("container") &&
|
|
||||||
className !== "column-margin"
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
const rightSideConflictEls = arrConflictingEls.filter((el) => {
|
|
||||||
if (el.tagName === "ASIDE") {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
const hasMarginCaption = Array.from(el.classList).find((className) => {
|
|
||||||
return className == "margin-caption";
|
|
||||||
});
|
|
||||||
if (hasMarginCaption) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return Array.from(el.classList).find((className) => {
|
|
||||||
return (
|
|
||||||
className !== "column-body" &&
|
|
||||||
!className.endsWith("container") &&
|
|
||||||
className.startsWith("column-") &&
|
|
||||||
!className.endsWith("left")
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
const kOverlapPaddingSize = 10;
|
|
||||||
function toRegions(els) {
|
|
||||||
return els.map((el) => {
|
|
||||||
const boundRect = el.getBoundingClientRect();
|
|
||||||
const top =
|
|
||||||
boundRect.top +
|
|
||||||
document.documentElement.scrollTop -
|
|
||||||
kOverlapPaddingSize;
|
|
||||||
return {
|
|
||||||
top,
|
|
||||||
bottom: top + el.scrollHeight + 2 * kOverlapPaddingSize,
|
|
||||||
};
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
let hasObserved = false;
|
|
||||||
const visibleItemObserver = (els) => {
|
|
||||||
let visibleElements = [...els];
|
|
||||||
const intersectionObserver = new IntersectionObserver(
|
|
||||||
(entries, _observer) => {
|
|
||||||
entries.forEach((entry) => {
|
|
||||||
if (entry.isIntersecting) {
|
|
||||||
if (visibleElements.indexOf(entry.target) === -1) {
|
|
||||||
visibleElements.push(entry.target);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
visibleElements = visibleElements.filter((visibleEntry) => {
|
|
||||||
return visibleEntry !== entry;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
if (!hasObserved) {
|
|
||||||
hideOverlappedSidebars();
|
|
||||||
}
|
|
||||||
hasObserved = true;
|
|
||||||
},
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
els.forEach((el) => {
|
|
||||||
intersectionObserver.observe(el);
|
|
||||||
});
|
|
||||||
|
|
||||||
return {
|
|
||||||
getVisibleEntries: () => {
|
|
||||||
return visibleElements;
|
|
||||||
},
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
const rightElementObserver = visibleItemObserver(rightSideConflictEls);
|
|
||||||
const leftElementObserver = visibleItemObserver(leftSideConflictEls);
|
|
||||||
|
|
||||||
const hideOverlappedSidebars = () => {
|
|
||||||
marginScrollVisibility(toRegions(rightElementObserver.getVisibleEntries()));
|
|
||||||
sidebarScrollVisiblity(toRegions(leftElementObserver.getVisibleEntries()));
|
|
||||||
if (tocLeftScrollVisibility) {
|
|
||||||
tocLeftScrollVisibility(
|
|
||||||
toRegions(leftElementObserver.getVisibleEntries())
|
|
||||||
);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
window.quartoToggleReader = () => {
|
|
||||||
// Applies a slow class (or removes it)
|
|
||||||
// to update the transition speed
|
|
||||||
const slowTransition = (slow) => {
|
|
||||||
const manageTransition = (id, slow) => {
|
|
||||||
const el = document.getElementById(id);
|
|
||||||
if (el) {
|
|
||||||
if (slow) {
|
|
||||||
el.classList.add("slow");
|
|
||||||
} else {
|
|
||||||
el.classList.remove("slow");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
manageTransition("TOC", slow);
|
|
||||||
manageTransition("quarto-sidebar", slow);
|
|
||||||
};
|
|
||||||
const readerMode = !isReaderMode();
|
|
||||||
setReaderModeValue(readerMode);
|
|
||||||
|
|
||||||
// If we're entering reader mode, slow the transition
|
|
||||||
if (readerMode) {
|
|
||||||
slowTransition(readerMode);
|
|
||||||
}
|
|
||||||
highlightReaderToggle(readerMode);
|
|
||||||
hideOverlappedSidebars();
|
|
||||||
|
|
||||||
// If we're exiting reader mode, restore the non-slow transition
|
|
||||||
if (!readerMode) {
|
|
||||||
slowTransition(!readerMode);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const highlightReaderToggle = (readerMode) => {
|
|
||||||
const els = document.querySelectorAll(".quarto-reader-toggle");
|
|
||||||
if (els) {
|
|
||||||
els.forEach((el) => {
|
|
||||||
if (readerMode) {
|
|
||||||
el.classList.add("reader");
|
|
||||||
} else {
|
|
||||||
el.classList.remove("reader");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const setReaderModeValue = (val) => {
|
|
||||||
if (window.location.protocol !== "file:") {
|
|
||||||
window.localStorage.setItem("quarto-reader-mode", val);
|
|
||||||
} else {
|
|
||||||
localReaderMode = val;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const isReaderMode = () => {
|
|
||||||
if (window.location.protocol !== "file:") {
|
|
||||||
return window.localStorage.getItem("quarto-reader-mode") === "true";
|
|
||||||
} else {
|
|
||||||
return localReaderMode;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
let localReaderMode = null;
|
|
||||||
|
|
||||||
const tocOpenDepthStr = tocEl?.getAttribute("data-toc-expanded");
|
|
||||||
const tocOpenDepth = tocOpenDepthStr ? Number(tocOpenDepthStr) : 1;
|
|
||||||
|
|
||||||
// Walk the TOC and collapse/expand nodes
|
|
||||||
// Nodes are expanded if:
|
|
||||||
// - they are top level
|
|
||||||
// - they have children that are 'active' links
|
|
||||||
// - they are directly below an link that is 'active'
|
|
||||||
const walk = (el, depth) => {
|
|
||||||
// Tick depth when we enter a UL
|
|
||||||
if (el.tagName === "UL") {
|
|
||||||
depth = depth + 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// It this is active link
|
|
||||||
let isActiveNode = false;
|
|
||||||
if (el.tagName === "A" && el.classList.contains("active")) {
|
|
||||||
isActiveNode = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// See if there is an active child to this element
|
|
||||||
let hasActiveChild = false;
|
|
||||||
for (child of el.children) {
|
|
||||||
hasActiveChild = walk(child, depth) || hasActiveChild;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Process the collapse state if this is an UL
|
|
||||||
if (el.tagName === "UL") {
|
|
||||||
if (tocOpenDepth === -1 && depth > 1) {
|
|
||||||
// toc-expand: false
|
|
||||||
el.classList.add("collapse");
|
|
||||||
} else if (
|
|
||||||
depth <= tocOpenDepth ||
|
|
||||||
hasActiveChild ||
|
|
||||||
prevSiblingIsActiveLink(el)
|
|
||||||
) {
|
|
||||||
el.classList.remove("collapse");
|
|
||||||
} else {
|
|
||||||
el.classList.add("collapse");
|
|
||||||
}
|
|
||||||
|
|
||||||
// untick depth when we leave a UL
|
|
||||||
depth = depth - 1;
|
|
||||||
}
|
|
||||||
return hasActiveChild || isActiveNode;
|
|
||||||
};
|
|
||||||
|
|
||||||
// walk the TOC and expand / collapse any items that should be shown
|
|
||||||
if (tocEl) {
|
|
||||||
updateActiveLink();
|
|
||||||
walk(tocEl, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Throttle the scroll event and walk peridiocally
|
|
||||||
window.document.addEventListener(
|
|
||||||
"scroll",
|
|
||||||
throttle(() => {
|
|
||||||
if (tocEl) {
|
|
||||||
updateActiveLink();
|
|
||||||
walk(tocEl, 0);
|
|
||||||
}
|
|
||||||
if (!isReaderMode()) {
|
|
||||||
hideOverlappedSidebars();
|
|
||||||
}
|
|
||||||
}, 5)
|
|
||||||
);
|
|
||||||
window.addEventListener(
|
|
||||||
"resize",
|
|
||||||
throttle(() => {
|
|
||||||
if (tocEl) {
|
|
||||||
updateActiveLink();
|
|
||||||
walk(tocEl, 0);
|
|
||||||
}
|
|
||||||
if (!isReaderMode()) {
|
|
||||||
hideOverlappedSidebars();
|
|
||||||
}
|
|
||||||
}, 10)
|
|
||||||
);
|
|
||||||
hideOverlappedSidebars();
|
|
||||||
highlightReaderToggle(isReaderMode());
|
|
||||||
});
|
|
||||||
|
|
||||||
// grouped tabsets
|
|
||||||
window.addEventListener("pageshow", (_event) => {
|
|
||||||
function getTabSettings() {
|
|
||||||
const data = localStorage.getItem("quarto-persistent-tabsets-data");
|
|
||||||
if (!data) {
|
|
||||||
localStorage.setItem("quarto-persistent-tabsets-data", "{}");
|
|
||||||
return {};
|
|
||||||
}
|
|
||||||
if (data) {
|
|
||||||
return JSON.parse(data);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function setTabSettings(data) {
|
|
||||||
localStorage.setItem(
|
|
||||||
"quarto-persistent-tabsets-data",
|
|
||||||
JSON.stringify(data)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
function setTabState(groupName, groupValue) {
|
|
||||||
const data = getTabSettings();
|
|
||||||
data[groupName] = groupValue;
|
|
||||||
setTabSettings(data);
|
|
||||||
}
|
|
||||||
|
|
||||||
function toggleTab(tab, active) {
|
|
||||||
const tabPanelId = tab.getAttribute("aria-controls");
|
|
||||||
const tabPanel = document.getElementById(tabPanelId);
|
|
||||||
if (active) {
|
|
||||||
tab.classList.add("active");
|
|
||||||
tabPanel.classList.add("active");
|
|
||||||
} else {
|
|
||||||
tab.classList.remove("active");
|
|
||||||
tabPanel.classList.remove("active");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function toggleAll(selectedGroup, selectorsToSync) {
|
|
||||||
for (const [thisGroup, tabs] of Object.entries(selectorsToSync)) {
|
|
||||||
const active = selectedGroup === thisGroup;
|
|
||||||
for (const tab of tabs) {
|
|
||||||
toggleTab(tab, active);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function findSelectorsToSyncByLanguage() {
|
|
||||||
const result = {};
|
|
||||||
const tabs = Array.from(
|
|
||||||
document.querySelectorAll(`div[data-group] a[id^='tabset-']`)
|
|
||||||
);
|
|
||||||
for (const item of tabs) {
|
|
||||||
const div = item.parentElement.parentElement.parentElement;
|
|
||||||
const group = div.getAttribute("data-group");
|
|
||||||
if (!result[group]) {
|
|
||||||
result[group] = {};
|
|
||||||
}
|
|
||||||
const selectorsToSync = result[group];
|
|
||||||
const value = item.innerHTML;
|
|
||||||
if (!selectorsToSync[value]) {
|
|
||||||
selectorsToSync[value] = [];
|
|
||||||
}
|
|
||||||
selectorsToSync[value].push(item);
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
function setupSelectorSync() {
|
|
||||||
const selectorsToSync = findSelectorsToSyncByLanguage();
|
|
||||||
Object.entries(selectorsToSync).forEach(([group, tabSetsByValue]) => {
|
|
||||||
Object.entries(tabSetsByValue).forEach(([value, items]) => {
|
|
||||||
items.forEach((item) => {
|
|
||||||
item.addEventListener("click", (_event) => {
|
|
||||||
setTabState(group, value);
|
|
||||||
toggleAll(value, selectorsToSync[group]);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
return selectorsToSync;
|
|
||||||
}
|
|
||||||
|
|
||||||
const selectorsToSync = setupSelectorSync();
|
|
||||||
for (const [group, selectedName] of Object.entries(getTabSettings())) {
|
|
||||||
const selectors = selectorsToSync[group];
|
|
||||||
// it's possible that stale state gives us empty selections, so we explicitly check here.
|
|
||||||
if (selectors) {
|
|
||||||
toggleAll(selectedName, selectors);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
function throttle(func, wait) {
|
|
||||||
let waiting = false;
|
|
||||||
return function () {
|
|
||||||
if (!waiting) {
|
|
||||||
func.apply(this, arguments);
|
|
||||||
waiting = true;
|
|
||||||
setTimeout(function () {
|
|
||||||
waiting = false;
|
|
||||||
}, wait);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
function nexttick(func) {
|
|
||||||
return setTimeout(func, 0);
|
|
||||||
}
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
.tippy-box[data-animation=fade][data-state=hidden]{opacity:0}[data-tippy-root]{max-width:calc(100vw - 10px)}.tippy-box{position:relative;background-color:#333;color:#fff;border-radius:4px;font-size:14px;line-height:1.4;white-space:normal;outline:0;transition-property:transform,visibility,opacity}.tippy-box[data-placement^=top]>.tippy-arrow{bottom:0}.tippy-box[data-placement^=top]>.tippy-arrow:before{bottom:-7px;left:0;border-width:8px 8px 0;border-top-color:initial;transform-origin:center top}.tippy-box[data-placement^=bottom]>.tippy-arrow{top:0}.tippy-box[data-placement^=bottom]>.tippy-arrow:before{top:-7px;left:0;border-width:0 8px 8px;border-bottom-color:initial;transform-origin:center bottom}.tippy-box[data-placement^=left]>.tippy-arrow{right:0}.tippy-box[data-placement^=left]>.tippy-arrow:before{border-width:8px 0 8px 8px;border-left-color:initial;right:-7px;transform-origin:center left}.tippy-box[data-placement^=right]>.tippy-arrow{left:0}.tippy-box[data-placement^=right]>.tippy-arrow:before{left:-7px;border-width:8px 8px 8px 0;border-right-color:initial;transform-origin:center right}.tippy-box[data-inertia][data-state=visible]{transition-timing-function:cubic-bezier(.54,1.5,.38,1.11)}.tippy-arrow{width:16px;height:16px;color:#333}.tippy-arrow:before{content:"";position:absolute;border-color:transparent;border-style:solid}.tippy-content{position:relative;padding:5px 9px;z-index:1}
|
|
||||||
7
public/site_libs/quarto-nav/headroom.min.js
vendored
|
|
@ -1,7 +0,0 @@
|
||||||
/*!
|
|
||||||
* headroom.js v0.12.0 - Give your page some headroom. Hide your header until you need it
|
|
||||||
* Copyright (c) 2020 Nick Williams - http://wicky.nillia.ms/headroom.js
|
|
||||||
* License: MIT
|
|
||||||
*/
|
|
||||||
|
|
||||||
!function(t,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):(t=t||self).Headroom=n()}(this,function(){"use strict";function t(){return"undefined"!=typeof window}function d(t){return function(t){return t&&t.document&&function(t){return 9===t.nodeType}(t.document)}(t)?function(t){var n=t.document,o=n.body,s=n.documentElement;return{scrollHeight:function(){return Math.max(o.scrollHeight,s.scrollHeight,o.offsetHeight,s.offsetHeight,o.clientHeight,s.clientHeight)},height:function(){return t.innerHeight||s.clientHeight||o.clientHeight},scrollY:function(){return void 0!==t.pageYOffset?t.pageYOffset:(s||o.parentNode||o).scrollTop}}}(t):function(t){return{scrollHeight:function(){return Math.max(t.scrollHeight,t.offsetHeight,t.clientHeight)},height:function(){return Math.max(t.offsetHeight,t.clientHeight)},scrollY:function(){return t.scrollTop}}}(t)}function n(t,s,e){var n,o=function(){var n=!1;try{var t={get passive(){n=!0}};window.addEventListener("test",t,t),window.removeEventListener("test",t,t)}catch(t){n=!1}return n}(),i=!1,r=d(t),l=r.scrollY(),a={};function c(){var t=Math.round(r.scrollY()),n=r.height(),o=r.scrollHeight();a.scrollY=t,a.lastScrollY=l,a.direction=l<t?"down":"up",a.distance=Math.abs(t-l),a.isOutOfBounds=t<0||o<t+n,a.top=t<=s.offset[a.direction],a.bottom=o<=t+n,a.toleranceExceeded=a.distance>s.tolerance[a.direction],e(a),l=t,i=!1}function h(){i||(i=!0,n=requestAnimationFrame(c))}var u=!!o&&{passive:!0,capture:!1};return t.addEventListener("scroll",h,u),c(),{destroy:function(){cancelAnimationFrame(n),t.removeEventListener("scroll",h,u)}}}function o(t){return t===Object(t)?t:{down:t,up:t}}function s(t,n){n=n||{},Object.assign(this,s.options,n),this.classes=Object.assign({},s.options.classes,n.classes),this.elem=t,this.tolerance=o(this.tolerance),this.offset=o(this.offset),this.initialised=!1,this.frozen=!1}return s.prototype={constructor:s,init:function(){return s.cutsTheMustard&&!this.initialised&&(this.addClass("initial"),this.initialised=!0,setTimeout(function(t){t.scrollTracker=n(t.scroller,{offset:t.offset,tolerance:t.tolerance},t.update.bind(t))},100,this)),this},destroy:function(){this.initialised=!1,Object.keys(this.classes).forEach(this.removeClass,this),this.scrollTracker.destroy()},unpin:function(){!this.hasClass("pinned")&&this.hasClass("unpinned")||(this.addClass("unpinned"),this.removeClass("pinned"),this.onUnpin&&this.onUnpin.call(this))},pin:function(){this.hasClass("unpinned")&&(this.addClass("pinned"),this.removeClass("unpinned"),this.onPin&&this.onPin.call(this))},freeze:function(){this.frozen=!0,this.addClass("frozen")},unfreeze:function(){this.frozen=!1,this.removeClass("frozen")},top:function(){this.hasClass("top")||(this.addClass("top"),this.removeClass("notTop"),this.onTop&&this.onTop.call(this))},notTop:function(){this.hasClass("notTop")||(this.addClass("notTop"),this.removeClass("top"),this.onNotTop&&this.onNotTop.call(this))},bottom:function(){this.hasClass("bottom")||(this.addClass("bottom"),this.removeClass("notBottom"),this.onBottom&&this.onBottom.call(this))},notBottom:function(){this.hasClass("notBottom")||(this.addClass("notBottom"),this.removeClass("bottom"),this.onNotBottom&&this.onNotBottom.call(this))},shouldUnpin:function(t){return"down"===t.direction&&!t.top&&t.toleranceExceeded},shouldPin:function(t){return"up"===t.direction&&t.toleranceExceeded||t.top},addClass:function(t){this.elem.classList.add.apply(this.elem.classList,this.classes[t].split(" "))},removeClass:function(t){this.elem.classList.remove.apply(this.elem.classList,this.classes[t].split(" "))},hasClass:function(t){return this.classes[t].split(" ").every(function(t){return this.classList.contains(t)},this.elem)},update:function(t){t.isOutOfBounds||!0!==this.frozen&&(t.top?this.top():this.notTop(),t.bottom?this.bottom():this.notBottom(),this.shouldUnpin(t)?this.unpin():this.shouldPin(t)&&this.pin())}},s.options={tolerance:{up:0,down:0},offset:0,scroller:t()?window:null,classes:{frozen:"headroom--frozen",pinned:"headroom--pinned",unpinned:"headroom--unpinned",top:"headroom--top",notTop:"headroom--not-top",bottom:"headroom--bottom",notBottom:"headroom--not-bottom",initial:"headroom"}},s.cutsTheMustard=!!(t()&&function(){}.bind&&"classList"in document.documentElement&&Object.assign&&Object.keys&&requestAnimationFrame),s});
|
|
||||||
|
|
@ -1,325 +0,0 @@
|
||||||
const headroomChanged = new CustomEvent("quarto-hrChanged", {
|
|
||||||
detail: {},
|
|
||||||
bubbles: true,
|
|
||||||
cancelable: false,
|
|
||||||
composed: false,
|
|
||||||
});
|
|
||||||
|
|
||||||
const announceDismiss = () => {
|
|
||||||
const annEl = window.document.getElementById("quarto-announcement");
|
|
||||||
if (annEl) {
|
|
||||||
annEl.remove();
|
|
||||||
|
|
||||||
const annId = annEl.getAttribute("data-announcement-id");
|
|
||||||
window.localStorage.setItem(`quarto-announce-${annId}`, "true");
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const announceRegister = () => {
|
|
||||||
const annEl = window.document.getElementById("quarto-announcement");
|
|
||||||
if (annEl) {
|
|
||||||
const annId = annEl.getAttribute("data-announcement-id");
|
|
||||||
const isDismissed =
|
|
||||||
window.localStorage.getItem(`quarto-announce-${annId}`) || false;
|
|
||||||
if (isDismissed) {
|
|
||||||
announceDismiss();
|
|
||||||
return;
|
|
||||||
} else {
|
|
||||||
annEl.classList.remove("hidden");
|
|
||||||
}
|
|
||||||
|
|
||||||
const actionEl = annEl.querySelector(".quarto-announcement-action");
|
|
||||||
if (actionEl) {
|
|
||||||
actionEl.addEventListener("click", function (e) {
|
|
||||||
e.preventDefault();
|
|
||||||
// Hide the bar immediately
|
|
||||||
announceDismiss();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
window.document.addEventListener("DOMContentLoaded", function () {
|
|
||||||
let init = false;
|
|
||||||
|
|
||||||
announceRegister();
|
|
||||||
|
|
||||||
// Manage the back to top button, if one is present.
|
|
||||||
let lastScrollTop = window.pageYOffset || document.documentElement.scrollTop;
|
|
||||||
const scrollDownBuffer = 5;
|
|
||||||
const scrollUpBuffer = 35;
|
|
||||||
const btn = document.getElementById("quarto-back-to-top");
|
|
||||||
const hideBackToTop = () => {
|
|
||||||
btn.style.display = "none";
|
|
||||||
};
|
|
||||||
const showBackToTop = () => {
|
|
||||||
btn.style.display = "inline-block";
|
|
||||||
};
|
|
||||||
if (btn) {
|
|
||||||
window.document.addEventListener(
|
|
||||||
"scroll",
|
|
||||||
function () {
|
|
||||||
const currentScrollTop =
|
|
||||||
window.pageYOffset || document.documentElement.scrollTop;
|
|
||||||
|
|
||||||
// Shows and hides the button 'intelligently' as the user scrolls
|
|
||||||
if (currentScrollTop - scrollDownBuffer > lastScrollTop) {
|
|
||||||
hideBackToTop();
|
|
||||||
lastScrollTop = currentScrollTop <= 0 ? 0 : currentScrollTop;
|
|
||||||
} else if (currentScrollTop < lastScrollTop - scrollUpBuffer) {
|
|
||||||
showBackToTop();
|
|
||||||
lastScrollTop = currentScrollTop <= 0 ? 0 : currentScrollTop;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Show the button at the bottom, hides it at the top
|
|
||||||
if (currentScrollTop <= 0) {
|
|
||||||
hideBackToTop();
|
|
||||||
} else if (
|
|
||||||
window.innerHeight + currentScrollTop >=
|
|
||||||
document.body.offsetHeight
|
|
||||||
) {
|
|
||||||
showBackToTop();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
false
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
function throttle(func, wait) {
|
|
||||||
var timeout;
|
|
||||||
return function () {
|
|
||||||
const context = this;
|
|
||||||
const args = arguments;
|
|
||||||
const later = function () {
|
|
||||||
clearTimeout(timeout);
|
|
||||||
timeout = null;
|
|
||||||
func.apply(context, args);
|
|
||||||
};
|
|
||||||
|
|
||||||
if (!timeout) {
|
|
||||||
timeout = setTimeout(later, wait);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
function headerOffset() {
|
|
||||||
// Set an offset if there is are fixed top navbar
|
|
||||||
const headerEl = window.document.querySelector("header.fixed-top");
|
|
||||||
if (headerEl) {
|
|
||||||
return headerEl.clientHeight;
|
|
||||||
} else {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function footerOffset() {
|
|
||||||
const footerEl = window.document.querySelector("footer.footer");
|
|
||||||
if (footerEl) {
|
|
||||||
return footerEl.clientHeight;
|
|
||||||
} else {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function dashboardOffset() {
|
|
||||||
const dashboardNavEl = window.document.getElementById(
|
|
||||||
"quarto-dashboard-header"
|
|
||||||
);
|
|
||||||
if (dashboardNavEl !== null) {
|
|
||||||
return dashboardNavEl.clientHeight;
|
|
||||||
} else {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function updateDocumentOffsetWithoutAnimation() {
|
|
||||||
updateDocumentOffset(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
function updateDocumentOffset(animated) {
|
|
||||||
// set body offset
|
|
||||||
const topOffset = headerOffset();
|
|
||||||
const bodyOffset = topOffset + footerOffset() + dashboardOffset();
|
|
||||||
const bodyEl = window.document.body;
|
|
||||||
bodyEl.setAttribute("data-bs-offset", topOffset);
|
|
||||||
bodyEl.style.paddingTop = topOffset + "px";
|
|
||||||
|
|
||||||
// deal with sidebar offsets
|
|
||||||
const sidebars = window.document.querySelectorAll(
|
|
||||||
".sidebar, .headroom-target"
|
|
||||||
);
|
|
||||||
sidebars.forEach((sidebar) => {
|
|
||||||
if (!animated) {
|
|
||||||
sidebar.classList.add("notransition");
|
|
||||||
// Remove the no transition class after the animation has time to complete
|
|
||||||
setTimeout(function () {
|
|
||||||
sidebar.classList.remove("notransition");
|
|
||||||
}, 201);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (window.Headroom && sidebar.classList.contains("sidebar-unpinned")) {
|
|
||||||
sidebar.style.top = "0";
|
|
||||||
sidebar.style.maxHeight = "100vh";
|
|
||||||
} else {
|
|
||||||
sidebar.style.top = topOffset + "px";
|
|
||||||
sidebar.style.maxHeight = "calc(100vh - " + topOffset + "px)";
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// allow space for footer
|
|
||||||
const mainContainer = window.document.querySelector(".quarto-container");
|
|
||||||
if (mainContainer) {
|
|
||||||
mainContainer.style.minHeight = "calc(100vh - " + bodyOffset + "px)";
|
|
||||||
}
|
|
||||||
|
|
||||||
// link offset
|
|
||||||
let linkStyle = window.document.querySelector("#quarto-target-style");
|
|
||||||
if (!linkStyle) {
|
|
||||||
linkStyle = window.document.createElement("style");
|
|
||||||
linkStyle.setAttribute("id", "quarto-target-style");
|
|
||||||
window.document.head.appendChild(linkStyle);
|
|
||||||
}
|
|
||||||
while (linkStyle.firstChild) {
|
|
||||||
linkStyle.removeChild(linkStyle.firstChild);
|
|
||||||
}
|
|
||||||
if (topOffset > 0) {
|
|
||||||
linkStyle.appendChild(
|
|
||||||
window.document.createTextNode(`
|
|
||||||
section:target::before {
|
|
||||||
content: "";
|
|
||||||
display: block;
|
|
||||||
height: ${topOffset}px;
|
|
||||||
margin: -${topOffset}px 0 0;
|
|
||||||
}`)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
if (init) {
|
|
||||||
window.dispatchEvent(headroomChanged);
|
|
||||||
}
|
|
||||||
init = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// initialize headroom
|
|
||||||
var header = window.document.querySelector("#quarto-header");
|
|
||||||
if (header && window.Headroom) {
|
|
||||||
const headroom = new window.Headroom(header, {
|
|
||||||
tolerance: 5,
|
|
||||||
onPin: function () {
|
|
||||||
const sidebars = window.document.querySelectorAll(
|
|
||||||
".sidebar, .headroom-target"
|
|
||||||
);
|
|
||||||
sidebars.forEach((sidebar) => {
|
|
||||||
sidebar.classList.remove("sidebar-unpinned");
|
|
||||||
});
|
|
||||||
updateDocumentOffset();
|
|
||||||
},
|
|
||||||
onUnpin: function () {
|
|
||||||
const sidebars = window.document.querySelectorAll(
|
|
||||||
".sidebar, .headroom-target"
|
|
||||||
);
|
|
||||||
sidebars.forEach((sidebar) => {
|
|
||||||
sidebar.classList.add("sidebar-unpinned");
|
|
||||||
});
|
|
||||||
updateDocumentOffset();
|
|
||||||
},
|
|
||||||
});
|
|
||||||
headroom.init();
|
|
||||||
|
|
||||||
let frozen = false;
|
|
||||||
window.quartoToggleHeadroom = function () {
|
|
||||||
if (frozen) {
|
|
||||||
headroom.unfreeze();
|
|
||||||
frozen = false;
|
|
||||||
} else {
|
|
||||||
headroom.freeze();
|
|
||||||
frozen = true;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
window.addEventListener(
|
|
||||||
"hashchange",
|
|
||||||
function (e) {
|
|
||||||
if (
|
|
||||||
getComputedStyle(document.documentElement).scrollBehavior !== "smooth"
|
|
||||||
) {
|
|
||||||
window.scrollTo(0, window.pageYOffset - headerOffset());
|
|
||||||
}
|
|
||||||
},
|
|
||||||
false
|
|
||||||
);
|
|
||||||
|
|
||||||
// Observe size changed for the header
|
|
||||||
const headerEl = window.document.querySelector("header.fixed-top");
|
|
||||||
if (headerEl && window.ResizeObserver) {
|
|
||||||
const observer = new window.ResizeObserver(() => {
|
|
||||||
setTimeout(updateDocumentOffsetWithoutAnimation, 0);
|
|
||||||
});
|
|
||||||
observer.observe(headerEl, {
|
|
||||||
attributes: true,
|
|
||||||
childList: true,
|
|
||||||
characterData: true,
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
window.addEventListener(
|
|
||||||
"resize",
|
|
||||||
throttle(updateDocumentOffsetWithoutAnimation, 50)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
setTimeout(updateDocumentOffsetWithoutAnimation, 250);
|
|
||||||
|
|
||||||
// fixup index.html links if we aren't on the filesystem
|
|
||||||
if (window.location.protocol !== "file:") {
|
|
||||||
const links = window.document.querySelectorAll("a");
|
|
||||||
for (let i = 0; i < links.length; i++) {
|
|
||||||
if (links[i].href) {
|
|
||||||
links[i].dataset.originalHref = links[i].href;
|
|
||||||
links[i].href = links[i].href.replace(/\/index\.html/, "/");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Fixup any sharing links that require urls
|
|
||||||
// Append url to any sharing urls
|
|
||||||
const sharingLinks = window.document.querySelectorAll(
|
|
||||||
"a.sidebar-tools-main-item, a.quarto-navigation-tool, a.quarto-navbar-tools, a.quarto-navbar-tools-item"
|
|
||||||
);
|
|
||||||
for (let i = 0; i < sharingLinks.length; i++) {
|
|
||||||
const sharingLink = sharingLinks[i];
|
|
||||||
const href = sharingLink.getAttribute("href");
|
|
||||||
if (href) {
|
|
||||||
sharingLink.setAttribute(
|
|
||||||
"href",
|
|
||||||
href.replace("|url|", window.location.href)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Scroll the active navigation item into view, if necessary
|
|
||||||
const navSidebar = window.document.querySelector("nav#quarto-sidebar");
|
|
||||||
if (navSidebar) {
|
|
||||||
// Find the active item
|
|
||||||
const activeItem = navSidebar.querySelector("li.sidebar-item a.active");
|
|
||||||
if (activeItem) {
|
|
||||||
// Wait for the scroll height and height to resolve by observing size changes on the
|
|
||||||
// nav element that is scrollable
|
|
||||||
const resizeObserver = new ResizeObserver((_entries) => {
|
|
||||||
// The bottom of the element
|
|
||||||
const elBottom = activeItem.offsetTop;
|
|
||||||
const viewBottom = navSidebar.scrollTop + navSidebar.clientHeight;
|
|
||||||
|
|
||||||
// The element height and scroll height are the same, then we are still loading
|
|
||||||
if (viewBottom !== navSidebar.scrollHeight) {
|
|
||||||
// Determine if the item isn't visible and scroll to it
|
|
||||||
if (elBottom >= viewBottom) {
|
|
||||||
navSidebar.scrollTop = elBottom;
|
|
||||||
}
|
|
||||||
|
|
||||||
// stop observing now since we've completed the scroll
|
|
||||||
resizeObserver.unobserve(navSidebar);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
resizeObserver.observe(navSidebar);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
9
public/site_libs/quarto-search/fuse.min.js
vendored
|
|
@ -1,779 +0,0 @@
|
||||||
<!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.5.57">
|
|
||||||
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
|
|
||||||
|
|
||||||
<meta name="author" content="Louis Lacoste">
|
|
||||||
|
|
||||||
<title>Bilan semaine 17 2025 : 24 avril - 25 avril – 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;
|
|
||||||
}
|
|
||||||
</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"></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.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.min.css" rel="stylesheet" id="quarto-bootstrap" data-mode="light">
|
|
||||||
<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">
|
|
||||||
|
|
||||||
<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">
|
|
||||||
<span class="menu-text">Liste des semaines</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 17 2025 : 24 avril - 25 avril</h1>
|
|
||||||
<div class="quarto-categories">
|
|
||||||
<div class="quarto-category">colBiSBM</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">25 avril 2025</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="#a-faire" id="toc-a-faire" class="nav-link active" data-scroll-target="#a-faire">A faire</a>
|
|
||||||
<ul class="collapse">
|
|
||||||
<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>
|
|
||||||
<li><a href="#simulations-article" id="toc-simulations-article" class="nav-link" data-scroll-target="#simulations-article">Simulations article</a></li>
|
|
||||||
<li><a href="#applications" id="toc-applications" class="nav-link" data-scroll-target="#applications">Applications</a></li>
|
|
||||||
<li><a href="#autour-de-larticle-et-du-package" id="toc-autour-de-larticle-et-du-package" class="nav-link" data-scroll-target="#autour-de-larticle-et-du-package">Autour de l’article et du package</a></li>
|
|
||||||
</ul></li>
|
|
||||||
<li><a href="#jai-fait" id="toc-jai-fait" class="nav-link" data-scroll-target="#jai-fait">J’ai fait</a></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="#correction-méthodo" id="toc-correction-méthodo" class="nav-link" data-scroll-target="#correction-méthodo">Correction méthodo</a></li>
|
|
||||||
<li><a href="#applications-1" id="toc-applications-1" class="nav-link" data-scroll-target="#applications-1">Applications</a></li>
|
|
||||||
<li><a href="#lancer-clustering-auteur-par-auteur-du-sub-doré-5-collections-différentes-dans-lidée." id="toc-lancer-clustering-auteur-par-auteur-du-sub-doré-5-collections-différentes-dans-lidée." class="nav-link" data-scroll-target="#lancer-clustering-auteur-par-auteur-du-sub-doré-5-collections-différentes-dans-lidée.">Lancer clustering auteur par auteur du sub-Doré : 5 collections différentes dans l’idée.</a></li>
|
|
||||||
</ul></li>
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
</div>
|
|
||||||
<!-- main -->
|
|
||||||
<main class="content quarto-banner-title-block" id="quarto-document-content">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<section id="a-faire" class="level2">
|
|
||||||
<h2 class="anchored" data-anchor-id="a-faire">A faire</h2>
|
|
||||||
<section id="rédaction-article" class="level3">
|
|
||||||
<h3 class="anchored" data-anchor-id="rédaction-article">Rédaction article</h3>
|
|
||||||
<ul>
|
|
||||||
<li><p>Relire intro St Clair</p></li>
|
|
||||||
<li><p>S’inspirer structure pour mon intro</p></li>
|
|
||||||
<li><p>Trouver biblio intro</p></li>
|
|
||||||
<li><p>Rédiger l’intro</p></li>
|
|
||||||
<li><p>Regarder les applications pour les collections de réseaux recommender system</p></li>
|
|
||||||
<li><p>Lire les papiers de Baldock Traveset Souza Cordeniz Trojelsgaard et Gibson</p></li>
|
|
||||||
<li><p>Dire résultats nettement meilleurs et variabilités inférieures.</p></li>
|
|
||||||
</ul>
|
|
||||||
</section>
|
|
||||||
<section id="simulations-article" class="level3">
|
|
||||||
<h3 class="anchored" data-anchor-id="simulations-article">Simulations article</h3>
|
|
||||||
<ul>
|
|
||||||
<li><p>Relancer simus clustering avec VEM steps = 10 000 et plus nombreux init pour spectral</p></li>
|
|
||||||
<li><p>Ajouter simu clustering métriques nb sous-collections obtenues. Vérifier les résultats obtenus si ARI = 0. Et augmenter la taille <span class="math inline">M = 30</span> avec <span class="math inline">M_1 = M_2 = M_3 = 10</span>.</p></li>
|
|
||||||
<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>
|
|
||||||
<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>.</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>
|
|
||||||
<section id="jai-fait" class="level2">
|
|
||||||
<h2 class="anchored" data-anchor-id="jai-fait">J’ai fait</h2>
|
|
||||||
<ul>
|
|
||||||
<li><p>Créer un README descriptif du dépôt des codes pour l’article.</p></li>
|
|
||||||
<li><p>Remonter figure sélection de modèle dans le corps de l’article</p></li>
|
|
||||||
<li><p>Enrichir légende de la figure 7 et 8</p></li>
|
|
||||||
<li><p>Supprimer p_NA des autres cadrans des proportions de NA</p></li>
|
|
||||||
<li><p>Basculer le code du clustering pour utiliser hclust et mis l’argument method de hclust avec single par défaut</p></li>
|
|
||||||
<li><p>Ajouter pipeline qui knit README.Rmd à chaque merge dans main colSBM</p></li>
|
|
||||||
</ul>
|
|
||||||
</section>
|
|
||||||
<section id="a-continuer" class="level2">
|
|
||||||
<h2 class="anchored" data-anchor-id="a-continuer">A continuer</h2>
|
|
||||||
<ul>
|
|
||||||
<li><p>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 <em>en attente des résultats MIGALE</em>.</p></li>
|
|
||||||
<li><p>Lire Biological Networks - François Képès</p></li>
|
|
||||||
<li><p>J’ai esquissé des bouts d’intro</p></li>
|
|
||||||
<li><p>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</p></li>
|
|
||||||
</ul>
|
|
||||||
<section id="correction-méthodo" class="level3">
|
|
||||||
<h3 class="anchored" data-anchor-id="correction-méthodo">Correction méthodo</h3>
|
|
||||||
<ul>
|
|
||||||
<li><p>Idée Pierre : Regarder la contribution au BICL de la collection des réseaux et comparer au sep BICL pour essayer de repérer les outliers. En regardant la vbound (pas la pénalité) de chaque réseau dans le joint vs sa vbound dans le sep -> Résultats : pas de différences majeures entre les réseaux avec le rapport vbound_joint/vbound_sep, les outliers ne sont pas marqués.</p></li>
|
|
||||||
<li><p>Regarder si plutôt que k médioid possible meilleurs résultats avec d’autres distances hclust avec min, max etc… -> L’algo PAM donne des clusters équilibrés sans séparer les outliers Je regarde avec plutôt des hclust avec métrique single pour séparer les outliers.</p></li>
|
|
||||||
<li><p>Voir si in fine possible de repérer des outliers à partir de ces nouvelles métriques</p></li>
|
|
||||||
<li><p>Regarder la répartition de densité dans les réseaux sub-doré -> déséquilibrée</p></li>
|
|
||||||
</ul>
|
|
||||||
<p><img src="figs/density-subdore.png" class="img-fluid"></p>
|
|
||||||
<pre><code>En faisant des clusterings par densité on constate qu'avec un modèle iid pour des réseaux dont la densité est entre :
|
|
||||||
- 0 et 0.05 : Baldock et Souza tout le monde se retrouvait ensemble avec *Partitioning around medoids*</code></pre>
|
|
||||||
</section>
|
|
||||||
<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="lancer-clustering-auteur-par-auteur-du-sub-doré-5-collections-différentes-dans-lidée." class="level3">
|
|
||||||
<h3 class="anchored" data-anchor-id="lancer-clustering-auteur-par-auteur-du-sub-doré-5-collections-différentes-dans-lidée.">Lancer clustering auteur par auteur du sub-Doré : 5 collections différentes dans l’idée.</h3>
|
|
||||||
<p>Une fois fait, Sophie ne trouve pas que ce soit le plus pertinent pour illustrer le clustering. Plus intéressant de garder le clustering de données simulées (<span class="math inline">M = 30</span>) et se servir des exemples dessous et des parcours exhaustif des possibilités de partitionnement comme comparatif.</p>
|
|
||||||
<section id="baldock" class="level4">
|
|
||||||
<h4 class="anchored" data-anchor-id="baldock">Baldock</h4>
|
|
||||||
<div class="quarto-figure quarto-figure-center">
|
|
||||||
<figure class="figure">
|
|
||||||
<p><img src="figs/subdore-per-author/subdore_baldock_alluvial_clusterings.png" class="img-fluid figure-img"></p>
|
|
||||||
<figcaption>Alluvial Baldock</figcaption>
|
|
||||||
</figure>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
<section id="gibson" class="level4">
|
|
||||||
<h4 class="anchored" data-anchor-id="gibson">Gibson</h4>
|
|
||||||
<div class="quarto-figure quarto-figure-center">
|
|
||||||
<figure class="figure">
|
|
||||||
<p><img src="figs/subdore-per-author/subdore_gibson_alluvial_clusterings.png" class="img-fluid figure-img"></p>
|
|
||||||
<figcaption>Alluvial Gibson</figcaption>
|
|
||||||
</figure>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
<section id="souza" class="level4">
|
|
||||||
<h4 class="anchored" data-anchor-id="souza">Souza</h4>
|
|
||||||
<div class="quarto-figure quarto-figure-center">
|
|
||||||
<figure class="figure">
|
|
||||||
<p><img src="figs/subdore-per-author/subdore_souza_alluvial_clusterings.png" class="img-fluid figure-img"></p>
|
|
||||||
<figcaption>Alluvial Souza</figcaption>
|
|
||||||
</figure>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
<section id="traveset" class="level4">
|
|
||||||
<h4 class="anchored" data-anchor-id="traveset">Traveset</h4>
|
|
||||||
<div class="quarto-figure quarto-figure-center">
|
|
||||||
<figure class="figure">
|
|
||||||
<p><img src="figs/subdore-per-author/subdore_traveset_alluvial_clusterings.png" class="img-fluid figure-img"></p>
|
|
||||||
<figcaption>Alluvial Traveset</figcaption>
|
|
||||||
</figure>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
<section id="trojelsgaard" class="level4">
|
|
||||||
<h4 class="anchored" data-anchor-id="trojelsgaard">Trojelsgaard</h4>
|
|
||||||
<div class="quarto-figure quarto-figure-center">
|
|
||||||
<figure class="figure">
|
|
||||||
<p><img src="figs/subdore-per-author/subdore_trojelsgaard_alluvial_clusterings.png" class="img-fluid figure-img"></p>
|
|
||||||
<figcaption>Alluvial Trojelgaard</figcaption>
|
|
||||||
</figure>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</section>
|
|
||||||
</section>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
</main> <!-- /main -->
|
|
||||||
<script id="quarto-html-after-body" type="application/javascript">
|
|
||||||
window.document.addEventListener("DOMContentLoaded", function (event) {
|
|
||||||
const toggleBodyColorMode = (bsSheetEl) => {
|
|
||||||
const mode = bsSheetEl.getAttribute("data-mode");
|
|
||||||
const bodyEl = window.document.querySelector("body");
|
|
||||||
if (mode === "dark") {
|
|
||||||
bodyEl.classList.add("quarto-dark");
|
|
||||||
bodyEl.classList.remove("quarto-light");
|
|
||||||
} else {
|
|
||||||
bodyEl.classList.add("quarto-light");
|
|
||||||
bodyEl.classList.remove("quarto-dark");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const toggleBodyColorPrimary = () => {
|
|
||||||
const bsSheetEl = window.document.querySelector("link#quarto-bootstrap");
|
|
||||||
if (bsSheetEl) {
|
|
||||||
toggleBodyColorMode(bsSheetEl);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
toggleBodyColorPrimary();
|
|
||||||
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')) {
|
|
||||||
// For code content inside modals, clipBoardJS needs to be initialized with a container option
|
|
||||||
// TODO: Check when it could be a function (https://github.com/zenorocha/clipboard.js/issues/860)
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
// TODO in 1.5, we should make sure this works without a callout special case
|
|
||||||
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 -->
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</body></html>
|
|
||||||
|
Before Width: | Height: | Size: 55 KiB |
|
Before Width: | Height: | Size: 252 KiB |
|
Before Width: | Height: | Size: 236 KiB |
|
Before Width: | Height: | Size: 222 KiB |
|
Before Width: | Height: | Size: 240 KiB |
|
Before Width: | Height: | Size: 273 KiB |
5236
public/template.html
98
search.json
|
|
@ -1,74 +1,4 @@
|
||||||
[
|
[
|
||||||
{
|
|
||||||
"objectID": "suivi/2025-16/2025-16.html",
|
|
||||||
"href": "suivi/2025-16/2025-16.html",
|
|
||||||
"title": "Bilan semaine 16 2025",
|
|
||||||
"section": "",
|
|
||||||
"text": "Relire intro St Clair\nS’inspirer structure pour mon intro\nTrouver biblio intro\nRédiger l’intro\nLire les papiers de Baldock Traveset Souza Cordeniz Trojelsgaard et Gibson\nCorriger structure de simus :\n\nPour noisy \\alpha :\n\nLogit pour envoyer la gaussienne vers (0,1)\nBeta contrainte dans (0,1)\n\nPour noisy links : Générer nb_clustering collections de taille M puis prélever \\epsilon_{max}n_r n_c liens à inverser puis pour les \\epsilon < \\epsilon_{max} prélever dans la liste des indices afin d’avoir des perturbations emboitées.\n\nIdée Sophie: Regarder clustering de données plantes-pollinisateur selon gradient d’urbanisation\nIdée Pierre : Regarder la contribution au BICL de la collection des réseaux et comparer au sep BICL pour essayer de repérer les outliers."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"objectID": "suivi/2025-16/2025-16.html#a-faire",
|
|
||||||
"href": "suivi/2025-16/2025-16.html#a-faire",
|
|
||||||
"title": "Bilan semaine 16 2025",
|
|
||||||
"section": "",
|
|
||||||
"text": "Relire intro St Clair\nS’inspirer structure pour mon intro\nTrouver biblio intro\nRédiger l’intro\nLire les papiers de Baldock Traveset Souza Cordeniz Trojelsgaard et Gibson\nCorriger structure de simus :\n\nPour noisy \\alpha :\n\nLogit pour envoyer la gaussienne vers (0,1)\nBeta contrainte dans (0,1)\n\nPour noisy links : Générer nb_clustering collections de taille M puis prélever \\epsilon_{max}n_r n_c liens à inverser puis pour les \\epsilon < \\epsilon_{max} prélever dans la liste des indices afin d’avoir des perturbations emboitées.\n\nIdée Sophie: Regarder clustering de données plantes-pollinisateur selon gradient d’urbanisation\nIdée Pierre : Regarder la contribution au BICL de la collection des réseaux et comparer au sep BICL pour essayer de repérer les outliers."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"objectID": "suivi/2025-16/2025-16.html#jai-fait",
|
|
||||||
"href": "suivi/2025-16/2025-16.html#jai-fait",
|
|
||||||
"title": "Bilan semaine 16 2025",
|
|
||||||
"section": "J’ai fait",
|
|
||||||
"text": "J’ai fait\n\nJ’ai lancé le clustering iid ascendant sur données sub-Doré. Résultats stables mais 27 collections formées donc pas de mise en commun des structures…\nRédiger et modifier les cadres de simulations dans le papier pour qu’ils soient raccord avec les données obtenues.\nÉtoffer la partie simulations studies en mettant plusieurs points pour présenter les simus et les résultats succintement.\n\n\nje pense qu’il faudrait étoffer en mettrant plusieurs points répartis en paragraphe. genre vérif selection de modèle verif clustering réseau, verif transfer leraning et de dire les résultats en qq mots\n\n\nComment faire pour l’inscription JdS (paiement, coldem …) : voir avec Christelle\nCSI : St Clair, Sonia ou Elisa et Pierre Gérard"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"objectID": "suivi/2025-16/2025-16.html#a-continuer",
|
|
||||||
"href": "suivi/2025-16/2025-16.html#a-continuer",
|
|
||||||
"title": "Bilan semaine 16 2025",
|
|
||||||
"section": "A continuer",
|
|
||||||
"text": "A continuer\n\nRésultats simus NA Erreur pour certaines conditions : Pour NA robustness générer nb_rep collections de taille M=2 et prélever \\epsilon_{max}n_r n_c liens à retirer puis pour les \\epsilon < \\epsilon_{max} 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 en attente des résultats MIGALE.\nLire Biological Networks - François Képès\nJ’ai esquissé des bouts d’intro"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"objectID": "suivi/2025-15/2025-15.html",
|
|
||||||
"href": "suivi/2025-15/2025-15.html",
|
|
||||||
"title": "Bilan semaine 15 2025 : 31 mars-4 avril",
|
|
||||||
"section": "",
|
|
||||||
"text": "Relire intro St Clair\nS’inspirer structure pour mon intro\nTrouver biblio intro\nRédiger l’intro\nLire les papiers de Baldock Traveset Souza Cordeniz Trojelsgaard et Gibson\nCorriger structure de simus :\n\nPour noisy \\alpha :\n\nLogit pour envoyer la gaussienne vers (0,1)\nBeta contrainte dans (0,1)\n\nPour noisy links : Générer nb_clustering collections de taille M puis prélever \\epsilon_{max}n_r n_c liens à inverser puis pour les \\epsilon < \\epsilon_{max} prélever dans la liste des indices afin d’avoir des perturbations emboitées.\n\nExtraire les nombres de liens communs et déplacer le tableau en annexes en faisant juste un paragraphe dans le corps de texte.\n\nPour VENDREDI\n\nRédiger et modifier les cadres de simulations dans le papier pour qu’ils soient raccord avec les données obtenues.\nÉtoffer la partie simulations studies en mettant plusieurs points pour présenter les simus et les résultats succintement.\n\n\nje pense qu’il faudrait étoffer en mettrant plusieurs points répartis en paragraphe. genre vérif selection de modèle verif clustering réseau, verif transfer leraning et de dire les résultats en qq mots\n\n\nIdée Sophie: Regarder clustering de données plantes-pollinisateur selon gradient d’urbanisation"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"objectID": "suivi/2025-15/2025-15.html#a-faire",
|
|
||||||
"href": "suivi/2025-15/2025-15.html#a-faire",
|
|
||||||
"title": "Bilan semaine 15 2025 : 31 mars-4 avril",
|
|
||||||
"section": "",
|
|
||||||
"text": "Relire intro St Clair\nS’inspirer structure pour mon intro\nTrouver biblio intro\nRédiger l’intro\nLire les papiers de Baldock Traveset Souza Cordeniz Trojelsgaard et Gibson\nCorriger structure de simus :\n\nPour noisy \\alpha :\n\nLogit pour envoyer la gaussienne vers (0,1)\nBeta contrainte dans (0,1)\n\nPour noisy links : Générer nb_clustering collections de taille M puis prélever \\epsilon_{max}n_r n_c liens à inverser puis pour les \\epsilon < \\epsilon_{max} prélever dans la liste des indices afin d’avoir des perturbations emboitées.\n\nExtraire les nombres de liens communs et déplacer le tableau en annexes en faisant juste un paragraphe dans le corps de texte.\n\nPour VENDREDI\n\nRédiger et modifier les cadres de simulations dans le papier pour qu’ils soient raccord avec les données obtenues.\nÉtoffer la partie simulations studies en mettant plusieurs points pour présenter les simus et les résultats succintement.\n\n\nje pense qu’il faudrait étoffer en mettrant plusieurs points répartis en paragraphe. genre vérif selection de modèle verif clustering réseau, verif transfer leraning et de dire les résultats en qq mots\n\n\nIdée Sophie: Regarder clustering de données plantes-pollinisateur selon gradient d’urbanisation"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"objectID": "suivi/2025-15/2025-15.html#jai-fait",
|
|
||||||
"href": "suivi/2025-15/2025-15.html#jai-fait",
|
|
||||||
"title": "Bilan semaine 15 2025 : 31 mars-4 avril",
|
|
||||||
"section": "J’ai fait",
|
|
||||||
"text": "J’ai fait\n\nClustering sub-doré pas de stabilité à la répétition malheureusement \nVérifier si les Baldock anglais ont des espèces en communs “Do they involve common species?”. Oui environ 70/250 soit plus de 20%.\nPrésenter le réseau Afrique du Sud dès l’intro des réseaux anglais de Baldock"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"objectID": "suivi/2025-15/2025-15.html#a-continuer",
|
|
||||||
"href": "suivi/2025-15/2025-15.html#a-continuer",
|
|
||||||
"title": "Bilan semaine 15 2025 : 31 mars-4 avril",
|
|
||||||
"section": "A continuer",
|
|
||||||
"text": "A continuer\n\nRésultats simus NA Erreur pour certaines conditions : Pour NA robustness générer nb_rep collections de taille M=2 et prélever \\epsilon_{max}n_r n_c liens à retirer puis pour les \\epsilon < \\epsilon_{max} 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 en attente des résultats MIGALE.\nJ’ai lancé le clustering iid ascendant sur données sub-Doré. en attente des résultats MIGALE"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"objectID": "suivi/2025-13/2025-13.html",
|
|
||||||
"href": "suivi/2025-13/2025-13.html",
|
|
||||||
"title": "Bilan semaine 13 2025 : 17-21 mars",
|
|
||||||
"section": "",
|
|
||||||
"text": "Cette semaine j’ai :\n\nFini d’intégrer à colSBM tous les changements (clustering dérecursifier pour uni et bipartites& cli …) et contacter Saint-Clair pour passer colSBM sous GrossSBM.\nRelancer et obtenus les résultats pour le clustering sur les réseaux Baldock\n\n\n\n\nBaldock iid\n\n\n\n\n\nBaldock pi\n\n\n\n\n\nBaldock rho\n\n\n\n\n\nBaldock pirho\n\n\n\nRelancer et obtenus les résultats pour les simus ajoutant du bruits sur les structures et liens\n\nPour noisy \\alpha:\n\nPlan de simulation 2 collections (d\\in (1,2)) avec M = 30 soit 15 réseaux par type. n_r = n_c = 120 et \\pi_1 = \\begin{pmatrix} 0.5, 0.3, 0.2\\end{pmatrix},~\n \\rho_1 = \\begin{pmatrix}0.4, 0.3, 0.2, 0.1\\end{pmatrix},~\n \\alpha_1 = \\begin{pmatrix}\n 0.85& 0.4& 0.2& 0.15\\\\\n 0.6& 0.2& 0.15& 0.15\\\\\n 0.2& 0.15& 0.15& 0.7\n \\end{pmatrix}\n \\pi_2 = (0.5, 0.3, 0.2),~\n \\rho_2 = (0.45, 0.3, 0.25),~\n \\alpha_2 = \\begin{pmatrix}\n 0.65& 0.15& 0.15\\\\\n 0.15& 0.8& 0.15\\\\\n 0.15& 0.15& 0.4\n \\end{pmatrix}\n\\epsilon \\in (0, 0.01, \\dots 0.05) qui est l’écart-type d’une \\mathcal{N}_{Q_1^d \\times Q_2^d}(0,\\epsilon^2) = vec(N^m), \\forall m \\in (1,\\dots, M). Et \\forall m, X^m \\sim LBM_{n_r,n_c}(Q_1^d, Q_2^d, \\alpha_d + N^m, \\pi_d, \\rho_d)\nRésultats : \n\nPour noisy links:\n\nPlan de simu M = 30, n_r = n_c = 120. \\pi_1 = \\begin{pmatrix} 0.5, 0.3, 0.2\\end{pmatrix},~\n \\rho_1 = \\begin{pmatrix}0.4, 0.3, 0.2, 0.1\\end{pmatrix},~\n \\alpha_1 = \\begin{pmatrix}\n 0.85& 0.4& 0.2& 0.05\\\\\n 0.6& 0.2& 0.05& 0.05\\\\\n 0.2& 0.05& 0.05& 0.7\n \\end{pmatrix}\n \\pi_2 = (0.5, 0.3, 0.2),~\n \\rho_2 = (0.45, 0.3, 0.25),~\n \\alpha_2 = \\begin{pmatrix}\n 0.65& 0.05& 0.05\\\\\n 0.05& 0.8& 0.05\\\\\n 0.05& 0.05& 0.4\n \\end{pmatrix}\n\\epsilon \\in (0, 0.05, \\dots 0.5), indices de la matrice = sample.int(n_r \\times n_c, size = n_r \\times n_c \\times \\epsilon). Les indices tirés inverse la valeur du lien (1 -> 0, 0 -> 1)\n\n\n\n\n\n\n\n\n\nClear links\n\n\n\n\n\n\n\nNoisy links\n\n\n\n\n\n\nFigure 1\n\n\n\n\nRelancer simulations robustesse aux NAs\nChanger les plots résultats NAs pour faire sous-plots comparant sep vs model."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"objectID": "index.html",
|
|
||||||
"href": "index.html",
|
|
||||||
"title": "Journal suivi de la thèse",
|
|
||||||
"section": "",
|
|
||||||
"text": "Bilan semaine 17 2025 : 24 avril - 25 avril\n\n\n\ncolBiSBM\n\n\n\n\n\n\n\n\n\n25 avr. 2025\n\n\nLouis Lacoste\n\n\n\n\n\n\n\n\n\n\n\n\nBilan semaine 16 2025\n\n\n\ncolBiSBM\n\n\n\n\n\n\n\n\n\n18 avr. 2025\n\n\nLouis Lacoste\n\n\n\n\n\n\n\n\n\n\n\n\nBilan semaine 15 2025 : 31 mars-4 avril\n\n\n\ncolBiSBM\n\n\n\n\n\n\n\n\n\n4 avr. 2025\n\n\nLouis Lacoste\n\n\n\n\n\n\n\n\n\n\n\n\nBilan semaine 14 2025 : 24-28 mars\n\n\n\ncolBiSBM\n\n\n\n\n\n\n\n\n\n28 mars 2025\n\n\nLouis Lacoste\n\n\n\n\n\n\n\n\n\n\n\n\nBilan semaine 13 2025 : 17-21 mars\n\n\n\ncolBiSBM\n\n\n\n\n\n\n\n\n\n17 mars 2025\n\n\nLouis Lacoste\n\n\n\n\n\nAucun article correspondant"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"objectID": "suivi/2025-17/2025-17.html",
|
"objectID": "suivi/2025-17/2025-17.html",
|
||||||
"href": "suivi/2025-17/2025-17.html",
|
"href": "suivi/2025-17/2025-17.html",
|
||||||
|
|
@ -96,33 +26,5 @@
|
||||||
"title": "Bilan semaine 17 2025 : 24 avril - 25 avril",
|
"title": "Bilan semaine 17 2025 : 24 avril - 25 avril",
|
||||||
"section": "A continuer",
|
"section": "A continuer",
|
||||||
"text": "A continuer\n\nRésultats simus NA Erreur pour certaines conditions : Pour NA robustness générer nb_rep collections de taille M=2 et prélever \\epsilon_{max}n_r n_c liens à retirer puis pour les \\epsilon < \\epsilon_{max} 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 en attente des résultats MIGALE.\nLire Biological Networks - François Képès\nJ’ai esquissé des bouts d’intro\nRelancer 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\n\n\nCorrection méthodo\n\nIdée Pierre : Regarder la contribution au BICL de la collection des réseaux et comparer au sep BICL pour essayer de repérer les outliers. En regardant la vbound (pas la pénalité) de chaque réseau dans le joint vs sa vbound dans le sep -> Résultats : pas de différences majeures entre les réseaux avec le rapport vbound_joint/vbound_sep, les outliers ne sont pas marqués.\nRegarder si plutôt que k médioid possible meilleurs résultats avec d’autres distances hclust avec min, max etc… -> L’algo PAM donne des clusters équilibrés sans séparer les outliers Je regarde avec plutôt des hclust avec métrique single pour séparer les outliers.\nVoir si in fine possible de repérer des outliers à partir de ces nouvelles métriques\nRegarder la répartition de densité dans les réseaux sub-doré -> déséquilibrée\n\n\nEn faisant des clusterings par densité on constate qu'avec un modèle iid pour des réseaux dont la densité est entre :\n- 0 et 0.05 : Baldock et Souza tout le monde se retrouvait ensemble avec *Partitioning around medoids*\n\n\nApplications\n\nIdée Sophie: Regarder clustering de données plantes-pollinisateur selon gradient d’urbanisation\n\n\nSophie 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 !\n\n\n\nLancer clustering auteur par auteur du sub-Doré : 5 collections différentes dans l’idée.\nUne fois fait, Sophie ne trouve pas que ce soit le plus pertinent pour illustrer le clustering. Plus intéressant de garder le clustering de données simulées (M = 30) et se servir des exemples dessous et des parcours exhaustif des possibilités de partitionnement comme comparatif.\n\nBaldock\n\n\n\nAlluvial Baldock\n\n\n\n\nGibson\n\n\n\nAlluvial Gibson\n\n\n\n\nSouza\n\n\n\nAlluvial Souza\n\n\n\n\nTraveset\n\n\n\nAlluvial Traveset\n\n\n\n\nTrojelsgaard\n\n\n\nAlluvial Trojelgaard"
|
"text": "A continuer\n\nRésultats simus NA Erreur pour certaines conditions : Pour NA robustness générer nb_rep collections de taille M=2 et prélever \\epsilon_{max}n_r n_c liens à retirer puis pour les \\epsilon < \\epsilon_{max} 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 en attente des résultats MIGALE.\nLire Biological Networks - François Képès\nJ’ai esquissé des bouts d’intro\nRelancer 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\n\n\nCorrection méthodo\n\nIdée Pierre : Regarder la contribution au BICL de la collection des réseaux et comparer au sep BICL pour essayer de repérer les outliers. En regardant la vbound (pas la pénalité) de chaque réseau dans le joint vs sa vbound dans le sep -> Résultats : pas de différences majeures entre les réseaux avec le rapport vbound_joint/vbound_sep, les outliers ne sont pas marqués.\nRegarder si plutôt que k médioid possible meilleurs résultats avec d’autres distances hclust avec min, max etc… -> L’algo PAM donne des clusters équilibrés sans séparer les outliers Je regarde avec plutôt des hclust avec métrique single pour séparer les outliers.\nVoir si in fine possible de repérer des outliers à partir de ces nouvelles métriques\nRegarder la répartition de densité dans les réseaux sub-doré -> déséquilibrée\n\n\nEn faisant des clusterings par densité on constate qu'avec un modèle iid pour des réseaux dont la densité est entre :\n- 0 et 0.05 : Baldock et Souza tout le monde se retrouvait ensemble avec *Partitioning around medoids*\n\n\nApplications\n\nIdée Sophie: Regarder clustering de données plantes-pollinisateur selon gradient d’urbanisation\n\n\nSophie 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 !\n\n\n\nLancer clustering auteur par auteur du sub-Doré : 5 collections différentes dans l’idée.\nUne fois fait, Sophie ne trouve pas que ce soit le plus pertinent pour illustrer le clustering. Plus intéressant de garder le clustering de données simulées (M = 30) et se servir des exemples dessous et des parcours exhaustif des possibilités de partitionnement comme comparatif.\n\nBaldock\n\n\n\nAlluvial Baldock\n\n\n\n\nGibson\n\n\n\nAlluvial Gibson\n\n\n\n\nSouza\n\n\n\nAlluvial Souza\n\n\n\n\nTraveset\n\n\n\nAlluvial Traveset\n\n\n\n\nTrojelsgaard\n\n\n\nAlluvial Trojelgaard"
|
||||||
},
|
|
||||||
{
|
|
||||||
"objectID": "suivi/2025-14/2025-14.html",
|
|
||||||
"href": "suivi/2025-14/2025-14.html",
|
|
||||||
"title": "Bilan semaine 14 2025 : 24-28 mars",
|
|
||||||
"section": "",
|
|
||||||
"text": "Relire intro St Clair\nS’inspirer structure pour mon intro\nTrouver biblio intro\nRédiger l’intro\nAgrandir la collection d’application, pas seulement Baldock mais aussi Trojelsgaard par ex\nLire les papiers de Baldock Traveset Souza Cordeniz Trojelsgaard et Gibson\nPrésenter le réseau Afrique du Sud dès l’intro des réseaux anglais de Baldock\nCorriger structure de simus :\n\nPour noisy \\alpha :\n\nLogit pour envoyer la gaussienne vers (0,1)\nBeta contrainte dans (0,1)\n\nPour noisy links : Générer nb_clustering collections de taille M puis prélever \\epsilon_{max}n_r n_c liens à inverser puis pour les \\epsilon < \\epsilon_{max} prélever dans la liste des indices afin d’avoir des perturbations emboitées.\n\nRédiger et modifier les cadres de simulations dans le papier pour qu’ils soient raccord avec les données obtenues.\nLancer clustering iid ascendant sur données sub-Doré.\nVérifier si les Baldock anglais ont des espèces en communs “Do they involve common species?”."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"objectID": "suivi/2025-14/2025-14.html#a-faire",
|
|
||||||
"href": "suivi/2025-14/2025-14.html#a-faire",
|
|
||||||
"title": "Bilan semaine 14 2025 : 24-28 mars",
|
|
||||||
"section": "",
|
|
||||||
"text": "Relire intro St Clair\nS’inspirer structure pour mon intro\nTrouver biblio intro\nRédiger l’intro\nAgrandir la collection d’application, pas seulement Baldock mais aussi Trojelsgaard par ex\nLire les papiers de Baldock Traveset Souza Cordeniz Trojelsgaard et Gibson\nPrésenter le réseau Afrique du Sud dès l’intro des réseaux anglais de Baldock\nCorriger structure de simus :\n\nPour noisy \\alpha :\n\nLogit pour envoyer la gaussienne vers (0,1)\nBeta contrainte dans (0,1)\n\nPour noisy links : Générer nb_clustering collections de taille M puis prélever \\epsilon_{max}n_r n_c liens à inverser puis pour les \\epsilon < \\epsilon_{max} prélever dans la liste des indices afin d’avoir des perturbations emboitées.\n\nRédiger et modifier les cadres de simulations dans le papier pour qu’ils soient raccord avec les données obtenues.\nLancer clustering iid ascendant sur données sub-Doré.\nVérifier si les Baldock anglais ont des espèces en communs “Do they involve common species?”."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"objectID": "suivi/2025-14/2025-14.html#jai-fait",
|
|
||||||
"href": "suivi/2025-14/2025-14.html#jai-fait",
|
|
||||||
"title": "Bilan semaine 14 2025 : 24-28 mars",
|
|
||||||
"section": "J’ai fait",
|
|
||||||
"text": "J’ai fait\n\nCorriger structure de simus :\n\nPour NA robustness\n\nDéfinir dans la section 3 :\n\n\nRemark that for iid-colBiSBM, \\pi_q, \\rho_r > 0, and thus the blocks exist and are represented in all networks. For the other models, some blocks may not exist in some networks and this is why \\pi_q^m, \\rho_r^m \\geq 0. Using S^{(1)} and S^{(2)} we can define the restricted parameters for each network and we denote them as \\widetilde{\\bm{\\pi}}^m, \\widetilde{\\bm{\\rho}}^m and \\widetilde{\\bm{\\alpha}}^m. The restrictions thus indicate the blocks that are represented in the network m.\n\n\nÉcrire la partie preuve pour identif \\pi-colBiSBM et \\rho-colBiSBM. Identif : \\pi et \\rho en attente retours Pierre et Sophie\nSaint-Clair va passer colSBM sous GrossSBM\nAgrandir la collection d’application, pas seulement Baldock mais aussi Trojelsgaard par ex : Collection agrandie avec Baldock Traveset Souza Cordeniz Trojelsgaard et Gibson, en attente MIGALE. Clustering instable"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"objectID": "suivi/2025-14/2025-14.html#a-continuer",
|
|
||||||
"href": "suivi/2025-14/2025-14.html#a-continuer",
|
|
||||||
"title": "Bilan semaine 14 2025 : 24-28 mars",
|
|
||||||
"section": "A continuer",
|
|
||||||
"text": "A continuer\n\nRésultats simus NA Erreur pour certaines conditions : Pour NA robustness générer nb_rep collections de taille M=2 et prélever \\epsilon_{max}n_r n_c liens à retirer puis pour les \\epsilon < \\epsilon_{max} 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 en attente des résultats MIGALE.\nPour sub doré en attente MIGALE augmenter le nbre de répèt de la procédure."
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
@ -1,706 +0,0 @@
|
||||||
<!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 13 2025 : 17-21 mars – 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;
|
|
||||||
}
|
|
||||||
</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-b7709e3ceabf99e2647fc5ea1b9a158c.min.css" rel="stylesheet" append-hash="true" id="quarto-bootstrap" data-mode="light">
|
|
||||||
<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">
|
|
||||||
<span class="menu-text">Liste des semaines</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 13 2025 : 17-21 mars</h1>
|
|
||||||
<div class="quarto-categories">
|
|
||||||
<div class="quarto-category">colBiSBM</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">17 mars 2025</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 zindex-bottom">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<!-- main -->
|
|
||||||
<main class="content quarto-banner-title-block" id="quarto-document-content">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<p>Cette semaine j’ai :</p>
|
|
||||||
<ul>
|
|
||||||
<li>Fini d’intégrer à colSBM tous les changements (clustering dérecursifier pour uni et bipartites& cli …) et contacter Saint-Clair pour passer colSBM sous GrossSBM.</li>
|
|
||||||
<li>Relancer et obtenus les résultats pour le clustering sur les réseaux Baldock</li>
|
|
||||||
</ul>
|
|
||||||
<div class="quarto-figure quarto-figure-center">
|
|
||||||
<figure class="figure">
|
|
||||||
<p><img src="figs/baldock_meso_iid.png" class="img-fluid figure-img"></p>
|
|
||||||
<figcaption>Baldock iid</figcaption>
|
|
||||||
</figure>
|
|
||||||
</div>
|
|
||||||
<div class="quarto-figure quarto-figure-center">
|
|
||||||
<figure class="figure">
|
|
||||||
<p><img src="figs/baldock_meso_pi.png" class="img-fluid figure-img"></p>
|
|
||||||
<figcaption>Baldock pi</figcaption>
|
|
||||||
</figure>
|
|
||||||
</div>
|
|
||||||
<div class="quarto-figure quarto-figure-center">
|
|
||||||
<figure class="figure">
|
|
||||||
<p><img src="figs/baldock_meso_rho.png" class="img-fluid figure-img"></p>
|
|
||||||
<figcaption>Baldock rho</figcaption>
|
|
||||||
</figure>
|
|
||||||
</div>
|
|
||||||
<div class="quarto-figure quarto-figure-center">
|
|
||||||
<figure class="figure">
|
|
||||||
<p><img src="figs/baldock_meso_pirho.png" class="img-fluid figure-img"></p>
|
|
||||||
<figcaption>Baldock pirho</figcaption>
|
|
||||||
</figure>
|
|
||||||
</div>
|
|
||||||
<ul>
|
|
||||||
<li><p>Relancer et obtenus les résultats pour les simus ajoutant du bruits sur les structures et liens</p>
|
|
||||||
<ul>
|
|
||||||
<li>Pour <em>noisy <span class="math inline">\alpha</span></em>:</li>
|
|
||||||
</ul>
|
|
||||||
<p>Plan de simulation 2 collections (<span class="math inline">d\in (1,2)</span>) avec <span class="math inline">M = 30</span> soit 15 réseaux par type. <span class="math inline">n_r = n_c = 120</span> et <span class="math display">\pi_1 = \begin{pmatrix} 0.5, 0.3, 0.2\end{pmatrix},~
|
|
||||||
\rho_1 = \begin{pmatrix}0.4, 0.3, 0.2, 0.1\end{pmatrix},~
|
|
||||||
\alpha_1 = \begin{pmatrix}
|
|
||||||
0.85& 0.4& 0.2& 0.15\\
|
|
||||||
0.6& 0.2& 0.15& 0.15\\
|
|
||||||
0.2& 0.15& 0.15& 0.7
|
|
||||||
\end{pmatrix}</span></p>
|
|
||||||
<p><span class="math display"> \pi_2 = (0.5, 0.3, 0.2),~
|
|
||||||
\rho_2 = (0.45, 0.3, 0.25),~
|
|
||||||
\alpha_2 = \begin{pmatrix}
|
|
||||||
0.65& 0.15& 0.15\\
|
|
||||||
0.15& 0.8& 0.15\\
|
|
||||||
0.15& 0.15& 0.4
|
|
||||||
\end{pmatrix}</span></p>
|
|
||||||
<p><span class="math inline">\epsilon \in (0, 0.01, \dots 0.05)</span> qui est l’écart-type d’une <span class="math inline">\mathcal{N}_{Q_1^d \times Q_2^d}(0,\epsilon^2) = vec(N^m), \forall m \in (1,\dots, M)</span>. Et <span class="math inline">\forall m, X^m \sim LBM_{n_r,n_c}(Q_1^d, Q_2^d, \alpha_d + N^m, \pi_d, \rho_d)</span></p>
|
|
||||||
<p>Résultats : <img src="figs/noisy_alpha.png" class="img-fluid" alt="alt"></p>
|
|
||||||
<ul>
|
|
||||||
<li>Pour <em>noisy links</em>:</li>
|
|
||||||
</ul>
|
|
||||||
<p>Plan de simu <span class="math inline">M = 30</span>, <span class="math inline">n_r = n_c = 120</span>. <span class="math display">\pi_1 = \begin{pmatrix} 0.5, 0.3, 0.2\end{pmatrix},~
|
|
||||||
\rho_1 = \begin{pmatrix}0.4, 0.3, 0.2, 0.1\end{pmatrix},~
|
|
||||||
\alpha_1 = \begin{pmatrix}
|
|
||||||
0.85& 0.4& 0.2& 0.05\\
|
|
||||||
0.6& 0.2& 0.05& 0.05\\
|
|
||||||
0.2& 0.05& 0.05& 0.7
|
|
||||||
\end{pmatrix}</span></p>
|
|
||||||
<p><span class="math display"> \pi_2 = (0.5, 0.3, 0.2),~
|
|
||||||
\rho_2 = (0.45, 0.3, 0.25),~
|
|
||||||
\alpha_2 = \begin{pmatrix}
|
|
||||||
0.65& 0.05& 0.05\\
|
|
||||||
0.05& 0.8& 0.05\\
|
|
||||||
0.05& 0.05& 0.4
|
|
||||||
\end{pmatrix}</span></p>
|
|
||||||
<p><span class="math inline">\epsilon \in (0, 0.05, \dots 0.5)</span>, indices de la matrice = sample.int(<span class="math inline">n_r \times n_c</span>, size = <span class="math inline">n_r \times n_c \times \epsilon</span>). Les indices tirés inverse la valeur du lien (1 -> 0, 0 -> 1)</p></li>
|
|
||||||
</ul>
|
|
||||||
<div id="fig-results-linsk" class="quarto-layout-panel">
|
|
||||||
<figure class="quarto-float quarto-float-fig figure">
|
|
||||||
<div aria-describedby="fig-results-linsk-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
|
|
||||||
<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><img src="figs/clear_links.png" class="img-fluid figure-img"></p>
|
|
||||||
<figcaption>Clear links</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><img src="figs/noisy_links.png" class="img-fluid figure-img"></p>
|
|
||||||
<figcaption>Noisy links</figcaption>
|
|
||||||
</figure>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<figcaption class="quarto-float-caption-bottom quarto-float-caption quarto-float-fig quarto-uncaptioned" id="fig-results-linsk-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
|
|
||||||
Figure 1
|
|
||||||
</figcaption>
|
|
||||||
</figure>
|
|
||||||
</div>
|
|
||||||
<ul>
|
|
||||||
<li><p>Relancer simulations robustesse aux NAs</p></li>
|
|
||||||
<li><p>Changer les plots résultats NAs pour faire sous-plots comparant sep vs model.</p></li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</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 -->
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</body></html>
|
|
||||||
|
Before Width: | Height: | Size: 206 KiB |
|
Before Width: | Height: | Size: 228 KiB |
|
Before Width: | Height: | Size: 139 KiB |
|
Before Width: | Height: | Size: 241 KiB |
|
Before Width: | Height: | Size: 89 KiB |
|
Before Width: | Height: | Size: 72 KiB |
|
Before Width: | Height: | Size: 86 KiB |
|
|
@ -1,663 +0,0 @@
|
||||||
<!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 14 2025 : 24-28 mars – 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;
|
|
||||||
}
|
|
||||||
</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-b7709e3ceabf99e2647fc5ea1b9a158c.min.css" rel="stylesheet" append-hash="true" id="quarto-bootstrap" data-mode="light">
|
|
||||||
<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">
|
|
||||||
<span class="menu-text">Liste des semaines</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 14 2025 : 24-28 mars</h1>
|
|
||||||
<div class="quarto-categories">
|
|
||||||
<div class="quarto-category">colBiSBM</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">28 mars 2025</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="#a-faire" id="toc-a-faire" class="nav-link active" data-scroll-target="#a-faire">A faire</a></li>
|
|
||||||
<li><a href="#jai-fait" id="toc-jai-fait" class="nav-link" data-scroll-target="#jai-fait">J’ai fait</a></li>
|
|
||||||
<li><a href="#a-continuer" id="toc-a-continuer" class="nav-link" data-scroll-target="#a-continuer">A continuer</a></li>
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
</div>
|
|
||||||
<!-- main -->
|
|
||||||
<main class="content quarto-banner-title-block" id="quarto-document-content">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<section id="a-faire" class="level2">
|
|
||||||
<h2 class="anchored" data-anchor-id="a-faire">A faire</h2>
|
|
||||||
<ul>
|
|
||||||
<li><p>Relire intro St Clair</p></li>
|
|
||||||
<li><p>S’inspirer structure pour mon intro</p></li>
|
|
||||||
<li><p>Trouver biblio intro</p></li>
|
|
||||||
<li><p>Rédiger l’intro</p></li>
|
|
||||||
<li><p>Agrandir la collection d’application, pas seulement Baldock mais aussi Trojelsgaard par ex</p></li>
|
|
||||||
<li><p>Lire les papiers de Baldock Traveset Souza Cordeniz Trojelsgaard et Gibson</p></li>
|
|
||||||
<li><p>Présenter le réseau Afrique du Sud dès l’intro des réseaux anglais de Baldock</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>
|
|
||||||
<li><p>Rédiger et modifier les cadres de simulations dans le papier pour qu’ils soient raccord avec les données obtenues.</p></li>
|
|
||||||
<li><p>Lancer clustering iid ascendant sur données sub-Doré.</p></li>
|
|
||||||
<li><p>Vérifier si les Baldock anglais ont des espèces en communs “Do they involve common species?”.</p></li>
|
|
||||||
</ul>
|
|
||||||
</section>
|
|
||||||
<section id="jai-fait" class="level2">
|
|
||||||
<h2 class="anchored" data-anchor-id="jai-fait">J’ai fait</h2>
|
|
||||||
<ul>
|
|
||||||
<li>Corriger structure de simus :
|
|
||||||
<ul>
|
|
||||||
<li>Pour NA robustness</li>
|
|
||||||
</ul></li>
|
|
||||||
<li>Définir dans la section 3 :</li>
|
|
||||||
</ul>
|
|
||||||
<blockquote class="blockquote">
|
|
||||||
<p>Remark that for iid-colBiSBM, <span class="math inline">\pi_q, \rho_r > 0</span>, and thus the blocks exist and are represented in all networks. For the other models, some blocks may not exist in some networks and this is why <span class="math inline">\pi_q^m, \rho_r^m \geq 0</span>. Using <span class="math inline">S^{(1)}</span> and <span class="math inline">S^{(2)}</span> we can define the restricted parameters for each network and we denote them as <span class="math inline">\widetilde{\bm{\pi}}^m</span>, <span class="math inline">\widetilde{\bm{\rho}}^m</span> and <span class="math inline">\widetilde{\bm{\alpha}}^m</span>. The restrictions thus indicate the blocks that are represented in the network <span class="math inline">m</span>.</p>
|
|
||||||
</blockquote>
|
|
||||||
<ul>
|
|
||||||
<li><p>Écrire la partie preuve pour identif <span class="math inline">\pi</span>-colBiSBM et <span class="math inline">\rho</span>-colBiSBM. Identif : <span class="math inline">\pi</span> et <span class="math inline">\rho</span> en attente retours Pierre et Sophie</p></li>
|
|
||||||
<li><p>Saint-Clair va passer colSBM sous GrossSBM</p></li>
|
|
||||||
<li><p>Agrandir la collection d’application, pas seulement Baldock mais aussi Trojelsgaard par ex : <em>Collection agrandie avec Baldock Traveset Souza Cordeniz Trojelsgaard et Gibson, en attente MIGALE</em>. Clustering instable</p></li>
|
|
||||||
</ul>
|
|
||||||
</section>
|
|
||||||
<section id="a-continuer" class="level2">
|
|
||||||
<h2 class="anchored" data-anchor-id="a-continuer">A continuer</h2>
|
|
||||||
<ul>
|
|
||||||
<li><p>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 <em>en attente des résultats MIGALE</em>.</p></li>
|
|
||||||
<li><p>Pour sub doré <em>en attente MIGALE</em> augmenter le nbre de répèt de la procédure.</p></li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
|
|
||||||
</section>
|
|
||||||
|
|
||||||
</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 -->
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</body></html>
|
|
||||||
|
|
@ -1,660 +0,0 @@
|
||||||
<!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 15 2025 : 31 mars-4 avril – 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;
|
|
||||||
}
|
|
||||||
</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-b7709e3ceabf99e2647fc5ea1b9a158c.min.css" rel="stylesheet" append-hash="true" id="quarto-bootstrap" data-mode="light">
|
|
||||||
<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">
|
|
||||||
<span class="menu-text">Liste des semaines</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 15 2025 : 31 mars-4 avril</h1>
|
|
||||||
<div class="quarto-categories">
|
|
||||||
<div class="quarto-category">colBiSBM</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">4 avril 2025</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="#a-faire" id="toc-a-faire" class="nav-link active" data-scroll-target="#a-faire">A faire</a></li>
|
|
||||||
<li><a href="#jai-fait" id="toc-jai-fait" class="nav-link" data-scroll-target="#jai-fait">J’ai fait</a></li>
|
|
||||||
<li><a href="#a-continuer" id="toc-a-continuer" class="nav-link" data-scroll-target="#a-continuer">A continuer</a></li>
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
</div>
|
|
||||||
<!-- main -->
|
|
||||||
<main class="content quarto-banner-title-block" id="quarto-document-content">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<section id="a-faire" class="level2">
|
|
||||||
<h2 class="anchored" data-anchor-id="a-faire">A faire</h2>
|
|
||||||
<ul>
|
|
||||||
<li><p>Relire intro St Clair</p></li>
|
|
||||||
<li><p>S’inspirer structure pour mon intro</p></li>
|
|
||||||
<li><p>Trouver biblio intro</p></li>
|
|
||||||
<li><p>Rédiger l’intro</p></li>
|
|
||||||
<li><p>Lire les papiers de Baldock Traveset Souza Cordeniz Trojelsgaard et Gibson</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>
|
|
||||||
<li><p>Extraire les nombres de liens communs et déplacer le tableau en annexes en faisant juste un paragraphe dans le corps de texte.</p></li>
|
|
||||||
</ul>
|
|
||||||
<p><strong>Pour VENDREDI</strong></p>
|
|
||||||
<ul>
|
|
||||||
<li><p>Rédiger et modifier les cadres de simulations dans le papier pour qu’ils soient raccord avec les données obtenues.</p></li>
|
|
||||||
<li><p>Étoffer la partie simulations studies en mettant plusieurs points pour présenter les simus et les résultats succintement.</p></li>
|
|
||||||
</ul>
|
|
||||||
<blockquote class="blockquote">
|
|
||||||
<p>je pense qu’il faudrait étoffer en mettrant plusieurs points répartis en paragraphe. genre vérif selection de modèle verif clustering réseau, verif transfer leraning et de dire les résultats en qq mots</p>
|
|
||||||
</blockquote>
|
|
||||||
<ul>
|
|
||||||
<li>Idée Sophie: Regarder clustering de données plantes-pollinisateur selon gradient d’urbanisation</li>
|
|
||||||
</ul>
|
|
||||||
</section>
|
|
||||||
<section id="jai-fait" class="level2">
|
|
||||||
<h2 class="anchored" data-anchor-id="jai-fait">J’ai fait</h2>
|
|
||||||
<ul>
|
|
||||||
<li><p>Clustering sub-doré pas de stabilité à la répétition malheureusement <img src="figs/alluvial-clusterings.png" class="img-fluid"></p></li>
|
|
||||||
<li><p>Vérifier si les Baldock anglais ont des espèces en communs “Do they involve common species?”. Oui environ 70/250 soit plus de 20%.</p></li>
|
|
||||||
<li><p>Présenter le réseau Afrique du Sud dès l’intro des réseaux anglais de Baldock</p></li>
|
|
||||||
</ul>
|
|
||||||
</section>
|
|
||||||
<section id="a-continuer" class="level2">
|
|
||||||
<h2 class="anchored" data-anchor-id="a-continuer">A continuer</h2>
|
|
||||||
<ul>
|
|
||||||
<li><p>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 <em>en attente des résultats MIGALE</em>.</p></li>
|
|
||||||
<li><p>J’ai lancé le clustering iid ascendant sur données sub-Doré. <em>en attente des résultats MIGALE</em></p></li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
|
|
||||||
</section>
|
|
||||||
|
|
||||||
</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 -->
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</body></html>
|
|
||||||
|
Before Width: | Height: | Size: 281 KiB |
|
|
@ -1,658 +0,0 @@
|
||||||
<!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 16 2025 – 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;
|
|
||||||
}
|
|
||||||
</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-b7709e3ceabf99e2647fc5ea1b9a158c.min.css" rel="stylesheet" append-hash="true" id="quarto-bootstrap" data-mode="light">
|
|
||||||
<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">
|
|
||||||
<span class="menu-text">Liste des semaines</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 16 2025</h1>
|
|
||||||
<div class="quarto-categories">
|
|
||||||
<div class="quarto-category">colBiSBM</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">18 avril 2025</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="#a-faire" id="toc-a-faire" class="nav-link active" data-scroll-target="#a-faire">A faire</a></li>
|
|
||||||
<li><a href="#jai-fait" id="toc-jai-fait" class="nav-link" data-scroll-target="#jai-fait">J’ai fait</a></li>
|
|
||||||
<li><a href="#a-continuer" id="toc-a-continuer" class="nav-link" data-scroll-target="#a-continuer">A continuer</a></li>
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
</div>
|
|
||||||
<!-- main -->
|
|
||||||
<main class="content quarto-banner-title-block" id="quarto-document-content">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<section id="a-faire" class="level2">
|
|
||||||
<h2 class="anchored" data-anchor-id="a-faire">A faire</h2>
|
|
||||||
<ul>
|
|
||||||
<li><p>Relire intro St Clair</p></li>
|
|
||||||
<li><p>S’inspirer structure pour mon intro</p></li>
|
|
||||||
<li><p>Trouver biblio intro</p></li>
|
|
||||||
<li><p>Rédiger l’intro</p></li>
|
|
||||||
<li><p>Lire les papiers de Baldock Traveset Souza Cordeniz Trojelsgaard et Gibson</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>
|
|
||||||
<li><p>Idée Sophie: Regarder clustering de données plantes-pollinisateur selon gradient d’urbanisation</p></li>
|
|
||||||
<li><p>Idée Pierre : Regarder la contribution au BICL de la collection des réseaux et comparer au sep BICL pour essayer de repérer les outliers.</p></li>
|
|
||||||
</ul>
|
|
||||||
</section>
|
|
||||||
<section id="jai-fait" class="level2">
|
|
||||||
<h2 class="anchored" data-anchor-id="jai-fait">J’ai fait</h2>
|
|
||||||
<ul>
|
|
||||||
<li><p>J’ai lancé le clustering iid ascendant sur données sub-Doré. Résultats stables mais 27 collections formées donc pas de mise en commun des structures…</p></li>
|
|
||||||
<li><p>Rédiger et modifier les cadres de simulations dans le papier pour qu’ils soient raccord avec les données obtenues.</p></li>
|
|
||||||
<li><p>Étoffer la partie simulations studies en mettant plusieurs points pour présenter les simus et les résultats succintement.</p></li>
|
|
||||||
</ul>
|
|
||||||
<blockquote class="blockquote">
|
|
||||||
<p>je pense qu’il faudrait étoffer en mettrant plusieurs points répartis en paragraphe. genre vérif selection de modèle verif clustering réseau, verif transfer leraning et de dire les résultats en qq mots</p>
|
|
||||||
</blockquote>
|
|
||||||
<ul>
|
|
||||||
<li>Comment faire pour l’inscription JdS (paiement, coldem …) : voir avec Christelle</li>
|
|
||||||
<li>CSI : St Clair, Sonia ou Elisa et Pierre Gérard</li>
|
|
||||||
</ul>
|
|
||||||
</section>
|
|
||||||
<section id="a-continuer" class="level2">
|
|
||||||
<h2 class="anchored" data-anchor-id="a-continuer">A continuer</h2>
|
|
||||||
<ul>
|
|
||||||
<li><p>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 <em>en attente des résultats MIGALE</em>.</p></li>
|
|
||||||
<li><p>Lire Biological Networks - François Képès</p></li>
|
|
||||||
<li><p>J’ai esquissé des bouts d’intro</p></li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
|
|
||||||
</section>
|
|
||||||
|
|
||||||
</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 -->
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</body></html>
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
|
||||||
|
|
||||||
<meta name="author" content="Louis Lacoste">
|
<meta name="author" content="Louis LACOSTE">
|
||||||
|
|
||||||
<title>Bilan semaine 17 2025 : 24 avril - 25 avril – Suivi de la thèse</title>
|
<title>Bilan semaine 17 2025 : 24 avril - 25 avril – Suivi de la thèse</title>
|
||||||
<style>
|
<style>
|
||||||
|
|
@ -118,7 +118,7 @@ window.Quarto = {
|
||||||
<body class="nav-fixed quarto-light">
|
<body class="nav-fixed quarto-light">
|
||||||
|
|
||||||
<div id="quarto-search-results"></div>
|
<div id="quarto-search-results"></div>
|
||||||
<header id="quarto-header" class="headroom fixed-top quarto-banner">
|
<header id="quarto-header" class="headroom fixed-top">
|
||||||
<nav class="navbar navbar-expand-lg " data-bs-theme="dark">
|
<nav class="navbar navbar-expand-lg " data-bs-theme="dark">
|
||||||
<div class="navbar-container container-fluid">
|
<div class="navbar-container container-fluid">
|
||||||
<div class="navbar-brand-container mx-auto">
|
<div class="navbar-brand-container mx-auto">
|
||||||
|
|
@ -133,7 +133,7 @@ window.Quarto = {
|
||||||
<div class="collapse navbar-collapse" id="navbarCollapse">
|
<div class="collapse navbar-collapse" id="navbarCollapse">
|
||||||
<ul class="navbar-nav navbar-nav-scroll me-auto">
|
<ul class="navbar-nav navbar-nav-scroll me-auto">
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link" href="../../index.html">
|
<a class="nav-link" href="../../index.qmd">
|
||||||
<span class="menu-text">Liste des semaines</span></a>
|
<span class="menu-text">Liste des semaines</span></a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
@ -144,45 +144,7 @@ window.Quarto = {
|
||||||
</nav>
|
</nav>
|
||||||
</header>
|
</header>
|
||||||
<!-- content -->
|
<!-- content -->
|
||||||
<header id="title-block-header" class="quarto-title-block default page-columns page-full">
|
<div id="quarto-content" class="quarto-container page-columns page-rows-contents page-layout-article page-navbar">
|
||||||
<div class="quarto-title-banner page-columns page-full">
|
|
||||||
<div class="quarto-title column-body">
|
|
||||||
<h1 class="title">Bilan semaine 17 2025 : 24 avril - 25 avril</h1>
|
|
||||||
<div class="quarto-categories">
|
|
||||||
<div class="quarto-category">colBiSBM</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">25 avril 2025</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</header><div id="quarto-content" class="quarto-container page-columns page-rows-contents page-layout-article page-navbar">
|
|
||||||
<!-- sidebar -->
|
<!-- sidebar -->
|
||||||
<!-- margin-sidebar -->
|
<!-- margin-sidebar -->
|
||||||
<div id="quarto-margin-sidebar" class="sidebar margin-sidebar">
|
<div id="quarto-margin-sidebar" class="sidebar margin-sidebar">
|
||||||
|
|
@ -208,10 +170,40 @@ window.Quarto = {
|
||||||
</nav>
|
</nav>
|
||||||
</div>
|
</div>
|
||||||
<!-- main -->
|
<!-- main -->
|
||||||
<main class="content quarto-banner-title-block" id="quarto-document-content">
|
<main class="content" id="quarto-document-content">
|
||||||
|
|
||||||
|
<header id="title-block-header" class="quarto-title-block default">
|
||||||
|
<div class="quarto-title">
|
||||||
|
<h1 class="title">Bilan semaine 17 2025 : 24 avril - 25 avril</h1>
|
||||||
|
<div class="quarto-categories">
|
||||||
|
<div class="quarto-category">colBiSBM</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="quarto-title-meta">
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<div class="quarto-title-meta-heading">Auteur·rice</div>
|
||||||
|
<div class="quarto-title-meta-contents">
|
||||||
|
<p>Louis LACOSTE <a href="mailto:louis.lacoste@agroparistech.fr" class="quarto-title-author-email"><i class="bi bi-envelope"></i></a> </p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<div class="quarto-title-meta-heading">Date de publication</div>
|
||||||
|
<div class="quarto-title-meta-contents">
|
||||||
|
<p class="date">25 avril 2025</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</header>
|
||||||
|
|
||||||
|
|
||||||
<section id="a-faire" class="level2">
|
<section id="a-faire" class="level2">
|
||||||
|
|
|
||||||