<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Julia Community 🟣: Interdisciplinary Physics Team</title>
    <description>The latest articles on Julia Community 🟣 by Interdisciplinary Physics Team (@inphyt).</description>
    <link>https://forem.julialang.org/inphyt</link>
    <image>
      <url>https://forem.julialang.org/images/uaAna2Q8GmDGqXHU2c6Bm5tRHVaM8b3BhaAM9o1c0R4/rs:fill:90:90/g:sm/mb:500000/ar:1/aHR0cHM6Ly9mb3Jl/bS5qdWxpYWxhbmcu/b3JnL3JlbW90ZWlt/YWdlcy91cGxvYWRz/L3VzZXIvcHJvZmls/ZV9pbWFnZS80Mi81/OGI3ZjBkOS1mMTIx/LTQ1YmEtYTFlZi05/ZDY1N2ZhMjg4M2Eu/anBn</url>
      <title>Julia Community 🟣: Interdisciplinary Physics Team</title>
      <link>https://forem.julialang.org/inphyt</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.julialang.org/feed/inphyt"/>
    <language>en</language>
    <item>
      <title>[ANN] MultilayerGraphs.jl (v1.1): Multilayer Network Science in Julia</title>
      <dc:creator>Interdisciplinary Physics Team</dc:creator>
      <pubDate>Sun, 08 Jan 2023 17:09:30 +0000</pubDate>
      <link>https://forem.julialang.org/inphyt/ann-multilayergraphsjl-v11-multilayer-network-science-in-julia-2oa3</link>
      <guid>https://forem.julialang.org/inphyt/ann-multilayergraphsjl-v11-multilayer-network-science-in-julia-2oa3</guid>
      <description>&lt;p&gt;We (&lt;a class="mentioned-user" href="https://forem.julialang.org/claudio_moroni"&gt;@claudio_moroni&lt;/a&gt; and &lt;a class="mentioned-user" href="https://forem.julialang.org/pitmonticone"&gt;@pitmonticone&lt;/a&gt;) are excited to announce the new version of &lt;a href="https://github.com/JuliaGraphs/MultilayerGraphs.jl"&gt;&lt;strong&gt;MultilayerGraphs.jl&lt;/strong&gt;&lt;/a&gt;: a Julia package for the creation, manipulation and analysis of the structure, dynamics and functions of multilayer graphs. &lt;/p&gt;

&lt;h2&gt;
  
  
  Main Changes
&lt;/h2&gt;

&lt;p&gt;Here we list the main changes since the &lt;a href="https://discourse.julialang.org/t/ann-multilayergraphs-jl-a-package-to-construct-handle-and-analyse-multilayer-graphs/85988"&gt;previous announcement post&lt;/a&gt;: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We have integrated the package within the &lt;a href="https://github.com/JuliaGraphs"&gt;JuliaGraphs&lt;/a&gt; ecosystem;&lt;/li&gt;
&lt;li&gt;We have integrated the package within the &lt;a href="https://github.com/JuliaDynamics"&gt;JuliaDynamics&lt;/a&gt; ecosystem so that any &lt;code&gt;Multilayer(Di)Graph&lt;/code&gt; can be utilised as an argument to the &lt;code&gt;GraphSpace&lt;/code&gt; constructor in &lt;a href="https://github.com/JuliaDynamics/Agents.jl"&gt;Agents.jl&lt;/a&gt; (see the related closed &lt;a href="https://github.com/JuliaGraphs/MultilayerGraphs.jl/issues/26"&gt;issue&lt;/a&gt;); &lt;/li&gt;
&lt;li&gt;We have implemented a general multilayer graph removing the requirement for each layer to have the same vertices (see the related closed &lt;a href="https://github.com/JuliaGraphs/MultilayerGraphs.jl/issues/25"&gt;issue&lt;/a&gt;); &lt;/li&gt;
&lt;li&gt;We have implemented the weight tensor, the metadata tensor and the supra weight matrix (see the related closed &lt;a href="https://github.com/JuliaGraphs/MultilayerGraphs.jl/issues/28"&gt;issue&lt;/a&gt;); &lt;/li&gt;
&lt;li&gt;We have implemented a concrete &lt;code&gt;MultilayerGraph&lt;/code&gt; and &lt;code&gt;MultilayerDiGraph&lt;/code&gt;, which are not graph wrappers in order to greatly simplify the library, since modifications to edges, vertices, etc. shall no longer be applied twice (see the related closed &lt;a href="https://github.com/JuliaGraphs/MultilayerGraphs.jl/issues/29"&gt;issue&lt;/a&gt;); &lt;/li&gt;
&lt;li&gt;We have implemented multiple interfaces for layer and interlayers called "uniform", "standard" and "transparent" (see the related closed &lt;a href="https://github.com/JuliaGraphs/MultilayerGraphs.jl/issues/30"&gt;issue&lt;/a&gt;); &lt;/li&gt;
&lt;li&gt;We have implemented faster graph realization algorithms such as the Havel-Hakimi algorithm for undirected graphs (&lt;a href="https://doi.org/10.1137/0110037"&gt;Hakimi (1962)&lt;/a&gt;) and the Kleitman-Wang algorithm for directed ones (&lt;a href="https://doi.org/10.1016/0012-365x(73)90037-x"&gt;Kleitman and Wang (1973)&lt;/a&gt;) (see the related closed &lt;a href="https://github.com/JuliaGraphs/MultilayerGraphs.jl/issues/32"&gt;issue&lt;/a&gt;); &lt;/li&gt;
&lt;li&gt;We have implemented more general graph generators ("configuration models") capable of using a different distribution for each dimension of multiplexity (see the related closed &lt;a href="https://github.com/JuliaGraphs/MultilayerGraphs.jl/issues/33"&gt;issue&lt;/a&gt;);&lt;/li&gt;
&lt;li&gt;We have implemented graph generators ("configuration models") for layers (see the related closed &lt;a href="https://github.com/JuliaGraphs/MultilayerGraphs.jl/issues/47"&gt;issue&lt;/a&gt;); &lt;/li&gt;
&lt;li&gt;We have improved the readability of console print of custom structs (see the related closed &lt;a href="https://github.com/JuliaGraphs/MultilayerGraphs.jl/issues/43"&gt;issue&lt;/a&gt;);&lt;/li&gt;
&lt;li&gt;We have implemented more user-friendly constructors for layers and interlayers (see the related closed &lt;a href="https://github.com/JuliaGraphs/MultilayerGraphs.jl/issues/52"&gt;issue&lt;/a&gt;). &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a more comprehensive exploration of the package features and functionalities we strongly recommend consulting the package &lt;a href="https://github.com/JuliaGraphs/MultilayerGraphs.jl/blob/main/README.md"&gt;README&lt;/a&gt; and &lt;a href="https://juliagraphs.org/MultilayerGraphs.jl"&gt;documentation&lt;/a&gt;.  &lt;/p&gt;

&lt;h2&gt;
  
  
  Usage
&lt;/h2&gt;

&lt;p&gt;Here we are going to synthetically showcase some of the main features of MultilayerGraphs.jl (v1.1) such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;how to define &lt;strong&gt;layers&lt;/strong&gt; and &lt;strong&gt;interlayers&lt;/strong&gt; with a variety of constructors and underlying graphs;&lt;/li&gt;
&lt;li&gt;how to construct a &lt;strong&gt;directed multilayer graph&lt;/strong&gt; with those layers and interlayers;&lt;/li&gt;
&lt;li&gt;how to add nodes, vertices and edges to the multilayer graph;&lt;/li&gt;
&lt;li&gt;how to compute some multilayer metrics as presented in &lt;a href="https://doi.org/10.1103/physrevx.3.041022"&gt;De Domenico  et al. (2013)&lt;/a&gt;. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let's begin by importing the necessary dependencies and setting the relevant constants.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight julia"&gt;&lt;code&gt;&lt;span class="c"&gt;# Import necessary dependencies&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="n"&gt;Distributions&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Graphs&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="n"&gt;SimpleValueGraphs&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="n"&gt;MultilayerGraphs&lt;/span&gt;
&lt;span class="c"&gt;# Set the number of nodes&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="n"&gt;n_nodes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt; 
&lt;span class="c"&gt;# Create a list of nodes&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="n"&gt;node_list&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="x"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Node&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"node_&lt;/span&gt;&lt;span class="si"&gt;$&lt;/span&gt;&lt;span class="s"&gt;i"&lt;/span&gt;&lt;span class="x"&gt;)&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;n_nodes&lt;/span&gt;&lt;span class="x"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Layers and Interlayers
&lt;/h3&gt;

&lt;p&gt;We will instantiate layers and interlayers with randomly-selected edges and vertices adopting a variety of techniques. Layers and Interlayers are not immutable, and mostly behave like normal graphs. The user is invited to consult the &lt;a href="https://juliagraphs.org/MultilayerGraphs.jl/stable/API/"&gt;API&lt;/a&gt; for further details.&lt;/p&gt;

&lt;p&gt;Here we define a layer with an underlying simple directed graph using a graph generator-like (or "configuration model"-like) constructor which allows us to specify both the &lt;strong&gt;indegree&lt;/strong&gt; and the &lt;strong&gt;outdegree sequences&lt;/strong&gt;. Before instantiating each layer we sample the number of its vertices and, optionally, of its edges.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight julia"&gt;&lt;code&gt;&lt;span class="c"&gt;# Create a simple directed layer&lt;/span&gt;
&lt;span class="n"&gt;n_vertices&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;rand&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="x"&gt;)&lt;/span&gt;                          &lt;span class="c"&gt;# Number of vertices &lt;/span&gt;
&lt;span class="n"&gt;layer_simple_directed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;layer_simpledigraph&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;      &lt;span class="c"&gt;# Layer constructor &lt;/span&gt;
    &lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;layer_simple_directed&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt;                       &lt;span class="c"&gt;# Layer name&lt;/span&gt;
    &lt;span class="n"&gt;sample&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;node_list&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="n"&gt;n_vertices&lt;/span&gt;&lt;span class="x"&gt;;&lt;/span&gt; &lt;span class="n"&gt;replace&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;false&lt;/span&gt;&lt;span class="x"&gt;),&lt;/span&gt; &lt;span class="c"&gt;# Nodes represented in the layer&lt;/span&gt;
    &lt;span class="n"&gt;Truncated&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Normal&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="x"&gt;),&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="x"&gt;),&lt;/span&gt; &lt;span class="c"&gt;# Indegree sequence distribution &lt;/span&gt;
    &lt;span class="n"&gt;Truncated&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Normal&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="x"&gt;),&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="x"&gt;)&lt;/span&gt;  &lt;span class="c"&gt;# Outdegree sequence distribution&lt;/span&gt;
&lt;span class="x"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then we define a layer with an underlying simple weighted directed graph. This is another kind of constructor that allows the user to specify the number of edges to be randomly distributed among vertices.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight julia"&gt;&lt;code&gt;&lt;span class="c"&gt;# Create a simple directed weighted layer&lt;/span&gt;
&lt;span class="n"&gt;n_vertices&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;rand&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;n_nodes&lt;/span&gt;&lt;span class="x"&gt;)&lt;/span&gt;                                   &lt;span class="c"&gt;# Number of vertices &lt;/span&gt;
&lt;span class="n"&gt;n_edges&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;rand&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n_vertices&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n_vertices&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n_vertices&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="x"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="x"&gt;))&lt;/span&gt; &lt;span class="c"&gt;# Number of edges &lt;/span&gt;
&lt;span class="n"&gt;layer_simple_directed_weighted&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;layer_simpleweighteddigraph&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;  &lt;span class="c"&gt;# Layer constructor &lt;/span&gt;
    &lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;layer_simple_directed_weighted&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt;                           &lt;span class="c"&gt;# Layer name&lt;/span&gt;
    &lt;span class="n"&gt;sample&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;node_list&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="n"&gt;n_vertices&lt;/span&gt;&lt;span class="x"&gt;;&lt;/span&gt; &lt;span class="n"&gt;replace&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;false&lt;/span&gt;&lt;span class="x"&gt;),&lt;/span&gt; &lt;span class="c"&gt;# Nodes represented in the layer&lt;/span&gt;
    &lt;span class="n"&gt;n_edges&lt;/span&gt;&lt;span class="x"&gt;;&lt;/span&gt;                                 &lt;span class="c"&gt;# Number of randomly distributed edges&lt;/span&gt;
    &lt;span class="n"&gt;default_edge_weight&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dst&lt;/span&gt;&lt;span class="x"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;rand&lt;/span&gt;&lt;span class="x"&gt;()&lt;/span&gt; &lt;span class="c"&gt;# Function assigning weights to edges &lt;/span&gt;
&lt;span class="x"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Similar constructors, more flexible at the cost of ease of use, enable a finer tuning. The constructor we use below should be necessary only in rare circumstances, e.g. if the equivalent simplified constructor &lt;code&gt;layer_simplevaldigraph&lt;/code&gt; is not able to infer the correct return types of &lt;code&gt;default_vertex_metadata&lt;/code&gt; or &lt;code&gt;default_edge_metadata&lt;/code&gt;, or to use and underlying graph structure that isn't currently supported.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight julia"&gt;&lt;code&gt;&lt;span class="c"&gt;# Create a simple directed value layer&lt;/span&gt;
&lt;span class="n"&gt;n_vertices&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;rand&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;n_nodes&lt;/span&gt;&lt;span class="x"&gt;)&lt;/span&gt;                                   &lt;span class="c"&gt;# Number of vertices &lt;/span&gt;
&lt;span class="n"&gt;n_edges&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;rand&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n_vertices&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n_vertices&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n_vertices&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="x"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="x"&gt;))&lt;/span&gt; &lt;span class="c"&gt;# Number of edges &lt;/span&gt;
&lt;span class="n"&gt;default_vertex_metadata&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"vertex_&lt;/span&gt;&lt;span class="si"&gt;$(v)&lt;/span&gt;&lt;span class="s"&gt;_metadata"&lt;/span&gt;&lt;span class="x"&gt;)&lt;/span&gt;        &lt;span class="c"&gt;# Vertex metadata &lt;/span&gt;
&lt;span class="n"&gt;default_edge_metadata&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="x"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rand&lt;/span&gt;&lt;span class="x"&gt;(),)&lt;/span&gt;                    &lt;span class="c"&gt;# Edge metadata &lt;/span&gt;
&lt;span class="n"&gt;layer_simple_directed_value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Layer&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;                           &lt;span class="c"&gt;# Layer constructor&lt;/span&gt;
    &lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;layer_simple_directed_value&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt;                              &lt;span class="c"&gt;# Layer name&lt;/span&gt;
    &lt;span class="n"&gt;sample&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;node_list&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="n"&gt;n_vertices&lt;/span&gt;&lt;span class="x"&gt;;&lt;/span&gt; &lt;span class="n"&gt;replace&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;false&lt;/span&gt;&lt;span class="x"&gt;),&lt;/span&gt; &lt;span class="c"&gt;# Nodes represented in the layer&lt;/span&gt;
    &lt;span class="n"&gt;n_edges&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt;                                      &lt;span class="c"&gt;# Number of randomly distributed edges&lt;/span&gt;
    &lt;span class="n"&gt;ValDiGraph&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;                                                
        &lt;span class="n"&gt;SimpleDiGraph&lt;/span&gt;&lt;span class="x"&gt;{&lt;/span&gt;&lt;span class="kt"&gt;Int64&lt;/span&gt;&lt;span class="x"&gt;}();&lt;/span&gt; 
        &lt;span class="n"&gt;vertexval_types&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;String&lt;/span&gt;&lt;span class="x"&gt;,),&lt;/span&gt;
        &lt;span class="n"&gt;vertexval_init&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;default_vertex_metadata&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;edgeval_types&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;Float64&lt;/span&gt;&lt;span class="x"&gt;,),&lt;/span&gt;
        &lt;span class="n"&gt;edgeval_init&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;default_edge_metadata&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt;
    &lt;span class="x"&gt;),&lt;/span&gt;
    &lt;span class="kt"&gt;Float64&lt;/span&gt;&lt;span class="x"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;default_vertex_metadata&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;default_vertex_metadata&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="c"&gt;# Vertex metadata &lt;/span&gt;
    &lt;span class="n"&gt;default_edge_metadata&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;default_edge_metadata&lt;/span&gt;      &lt;span class="c"&gt;# Edge metadata &lt;/span&gt;
&lt;span class="x"&gt;)&lt;/span&gt;

&lt;span class="c"&gt;# Create a list of layers &lt;/span&gt;
&lt;span class="n"&gt;layers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="x"&gt;[&lt;/span&gt;&lt;span class="n"&gt;layer_simple_directed&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="n"&gt;layer_simple_directed_weighted&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="n"&gt;layer_simple_directed_value&lt;/span&gt;&lt;span class="x"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There are many more constructors the user is encouraged to explore in the package &lt;a href="https://juliagraphs.org/MultilayerGraphs.jl"&gt;documentation&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The interface of interlayers is very similar to that of layers. It is very important to notice that, in order to define a &lt;code&gt;Multilayer(Di)Graph&lt;/code&gt;, interlayers don't need to be explicitly constructed by the user since they are automatically identified by the &lt;code&gt;Multilayer(Di)Graph&lt;/code&gt; constructor, but for more complex interlayers the manual instantiation is required.&lt;/p&gt;

&lt;p&gt;Here we define an interlayer with an underlying simple directed graph.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight julia"&gt;&lt;code&gt;&lt;span class="c"&gt;# Create a simple directed interlayer&lt;/span&gt;
&lt;span class="n"&gt;n_vertices_1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;nv&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;layer_simple_directed&lt;/span&gt;&lt;span class="x"&gt;)&lt;/span&gt;               &lt;span class="c"&gt;# Number of vertices of layer 1&lt;/span&gt;
&lt;span class="n"&gt;n_vertices_2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;nv&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;layer_simple_directed_weighted&lt;/span&gt;&lt;span class="x"&gt;)&lt;/span&gt;      &lt;span class="c"&gt;# Number of vertices of layer 2&lt;/span&gt;
&lt;span class="n"&gt;n_edges&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;rand&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n_vertices_1&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;n_vertices_2&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="x"&gt;))&lt;/span&gt;    &lt;span class="c"&gt;# Number of interlayer edges &lt;/span&gt;
&lt;span class="n"&gt;interlayer_simple_directed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;interlayer_simpledigraph&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt; &lt;span class="c"&gt;# Interlayer constructor &lt;/span&gt;
    &lt;span class="n"&gt;layer_simple_directed&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt;                             &lt;span class="c"&gt;# Layer 1 &lt;/span&gt;
    &lt;span class="n"&gt;layer_simple_directed_weighted&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt;                    &lt;span class="c"&gt;# Layer 2 &lt;/span&gt;
    &lt;span class="n"&gt;n_edges&lt;/span&gt;                                            &lt;span class="c"&gt;# Number of edges &lt;/span&gt;
&lt;span class="x"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The interlayer exports a more flexible constructor too.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight julia"&gt;&lt;code&gt;&lt;span class="c"&gt;# Create a simple directed meta interlayer &lt;/span&gt;
&lt;span class="n"&gt;n_vertices_1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;nv&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;layer_simple_directed_weighted&lt;/span&gt;&lt;span class="x"&gt;)&lt;/span&gt;   &lt;span class="c"&gt;# Number of vertices of layer 1&lt;/span&gt;
&lt;span class="n"&gt;n_vertices_2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;nv&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;layer_simple_directed_value&lt;/span&gt;&lt;span class="x"&gt;)&lt;/span&gt;      &lt;span class="c"&gt;# Number of vertices of layer 2&lt;/span&gt;
&lt;span class="n"&gt;n_edges&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;rand&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n_vertices_1&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;n_vertices_2&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="x"&gt;))&lt;/span&gt; &lt;span class="c"&gt;# Number of interlayer edges &lt;/span&gt;
&lt;span class="n"&gt;interlayer_simple_directed_meta&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;interlayer_metadigraph&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt; &lt;span class="c"&gt;# Interlayer constructor&lt;/span&gt;
    &lt;span class="n"&gt;layer_simple_directed_weighted&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt;                       &lt;span class="c"&gt;# Layer 1 &lt;/span&gt;
    &lt;span class="n"&gt;layer_simple_directed_value&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt;                          &lt;span class="c"&gt;# Layer 2&lt;/span&gt;
    &lt;span class="n"&gt;n_edges&lt;/span&gt;&lt;span class="x"&gt;;&lt;/span&gt;                                              &lt;span class="c"&gt;# Number of edges&lt;/span&gt;
    &lt;span class="n"&gt;default_edge_metadata&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dst&lt;/span&gt;&lt;span class="x"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;                   &lt;span class="c"&gt;# Edge metadata &lt;/span&gt;
        &lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;edge_metadata&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"metadata_of_edge_from_&lt;/span&gt;&lt;span class="si"&gt;$(src)&lt;/span&gt;&lt;span class="s"&gt;_to_&lt;/span&gt;&lt;span class="si"&gt;$(dst)&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="x"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;transfer_vertex_metadata&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt; &lt;span class="c"&gt;# Boolean deciding layer vertex metadata inheritance&lt;/span&gt;
&lt;span class="x"&gt;)&lt;/span&gt;

&lt;span class="c"&gt;# Create a list of interlayers &lt;/span&gt;
&lt;span class="n"&gt;interlayers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="x"&gt;[&lt;/span&gt;&lt;span class="n"&gt;interlayer_simple_directed&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="n"&gt;interlayer_simple_directed_meta&lt;/span&gt;&lt;span class="x"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Multilayer Graphs
&lt;/h3&gt;

&lt;p&gt;Let's construct a directed multilayer graph (&lt;code&gt;MultilayerDiGraph&lt;/code&gt;).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight julia"&gt;&lt;code&gt;&lt;span class="c"&gt;# Create a simple directed multilayer graph&lt;/span&gt;
&lt;span class="n"&gt;multilayerdigraph&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;MultilayerDiGraph&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt; &lt;span class="c"&gt;# Constructor &lt;/span&gt;
    &lt;span class="n"&gt;layers&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt;                     &lt;span class="c"&gt;# The (ordered) collection of layers&lt;/span&gt;
    &lt;span class="n"&gt;interlayers&lt;/span&gt;&lt;span class="x"&gt;;&lt;/span&gt;                &lt;span class="c"&gt;# The manually specified interlayers&lt;/span&gt;
                                &lt;span class="c"&gt;# The interlayers that are left unspecified &lt;/span&gt;
                                &lt;span class="c"&gt;# will be automatically inserted according &lt;/span&gt;
                                &lt;span class="c"&gt;# to the keyword argument below&lt;/span&gt;
    &lt;span class="n"&gt;default_interlayers_structure&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"multiplex"&lt;/span&gt; 
    &lt;span class="c"&gt;# The automatically specified interlayers will have only diagonal couplings&lt;/span&gt;
&lt;span class="x"&gt;)&lt;/span&gt;

&lt;span class="c"&gt;# Layers and interlayer can be accessed as properties using their names&lt;/span&gt;
&lt;span class="n"&gt;multilayerdigraph&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;layer_simplevaldigraph&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then we proceed by showing how to add nodes, vertices and edges to a directed multilayer graph. The user may add vertices that do or do not represent nodes which are already present in the multilayer graph. In the latter case, we have to create a node first and then add the vertex representing such node to the multilayer graph. The vertex-level metadata are effectively considered only if the graph underlying the relevant layer or interlayer supports them, otherwise they are discarded. The same holds for edge-level metadata and/or weight.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight julia"&gt;&lt;code&gt;&lt;span class="c"&gt;# Create a node &lt;/span&gt;
&lt;span class="n"&gt;new_node_1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Node&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"new_node_1"&lt;/span&gt;&lt;span class="x"&gt;)&lt;/span&gt;
&lt;span class="c"&gt;# Add the node to the multilayer graph &lt;/span&gt;
&lt;span class="n"&gt;add_node!&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;multilayerdigraph&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="n"&gt;new_node_1&lt;/span&gt;&lt;span class="x"&gt;)&lt;/span&gt;
&lt;span class="c"&gt;# Create a vertex representing the node &lt;/span&gt;
&lt;span class="n"&gt;new_vertex_1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;MV&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;           &lt;span class="c"&gt;# Constructor (alias for "MultilayerVertex")&lt;/span&gt;
    &lt;span class="n"&gt;new_node_1&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt;              &lt;span class="c"&gt;# Node represented by the vertex&lt;/span&gt;
    &lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;layer_simplevaldigraph&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="c"&gt;# Layer containing the vertex &lt;/span&gt;
    &lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"new_metadata"&lt;/span&gt;&lt;span class="x"&gt;)&lt;/span&gt;         &lt;span class="c"&gt;# Vertex metadata &lt;/span&gt;
&lt;span class="x"&gt;)&lt;/span&gt;
&lt;span class="c"&gt;# Add the vertex &lt;/span&gt;
&lt;span class="n"&gt;add_vertex!&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;multilayerdigraph&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="c"&gt;# MultilayerDiGraph the vertex will be added to&lt;/span&gt;
    &lt;span class="n"&gt;new_vertex_1&lt;/span&gt;       &lt;span class="c"&gt;# MultilayerVertex to add&lt;/span&gt;
&lt;span class="x"&gt;)&lt;/span&gt;

&lt;span class="c"&gt;# Create another node in another layer &lt;/span&gt;
&lt;span class="n"&gt;new_node_2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Node&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"new_node_2"&lt;/span&gt;&lt;span class="x"&gt;)&lt;/span&gt;
&lt;span class="c"&gt;# Create another vertex representing the new node&lt;/span&gt;
&lt;span class="n"&gt;new_vertex_2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;MV&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;new_node_2&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;layer_simpledigraph&lt;/span&gt;&lt;span class="x"&gt;)&lt;/span&gt;
&lt;span class="c"&gt;# Add the new vertex&lt;/span&gt;
&lt;span class="n"&gt;add_vertex!&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;multilayerdigraph&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;new_vertex_2&lt;/span&gt;&lt;span class="x"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;add_node&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt; &lt;span class="c"&gt;# Add the associated node before adding the vertex&lt;/span&gt;
&lt;span class="x"&gt;)&lt;/span&gt;
&lt;span class="c"&gt;# Create an edge &lt;/span&gt;
&lt;span class="n"&gt;new_edge&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;MultilayerEdge&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt; &lt;span class="c"&gt;# Constructor &lt;/span&gt;
    &lt;span class="n"&gt;new_vertex_1&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt;          &lt;span class="c"&gt;# Source vertex&lt;/span&gt;
    &lt;span class="n"&gt;new_vertex_2&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt;          &lt;span class="c"&gt;# Destination vertex &lt;/span&gt;
    &lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"some_edge_metadata"&lt;/span&gt;&lt;span class="x"&gt;)&lt;/span&gt; &lt;span class="c"&gt;# Edge metadata &lt;/span&gt;
&lt;span class="x"&gt;)&lt;/span&gt;
&lt;span class="c"&gt;# Add the edge &lt;/span&gt;
&lt;span class="n"&gt;add_edge!&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;multilayerdigraph&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="c"&gt;# MultilayerDiGraph the edge will be added to&lt;/span&gt;
    &lt;span class="n"&gt;new_edge&lt;/span&gt;           &lt;span class="c"&gt;# MultilayerVertex to add&lt;/span&gt;
&lt;span class="x"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finally we illustrate how to compute a few multilayer metrics such as the global clustering coefficient, the overlay clustering coefficient, the multilayer eigenvector centrality, and the multilayer modularity as defined in &lt;a href="https://doi.org/10.1103/physrevx.3.041022"&gt;De Domenico  et al. (2013)&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight julia"&gt;&lt;code&gt;&lt;span class="c"&gt;# Compute the global clustering coefficient&lt;/span&gt;
&lt;span class="n"&gt;multilayer_global_clustering_coefficient&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;multilayerdigraph&lt;/span&gt;&lt;span class="x"&gt;)&lt;/span&gt; 
&lt;span class="c"&gt;# Compute the overlay clustering coefficient&lt;/span&gt;
&lt;span class="n"&gt;overlay_clustering_coefficient&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;multilayerdigraph&lt;/span&gt;&lt;span class="x"&gt;)&lt;/span&gt;
&lt;span class="c"&gt;# Compute the multilayer eigenvector centrality &lt;/span&gt;
&lt;span class="n"&gt;eigenvector_centrality&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;multilayerdigraph&lt;/span&gt;&lt;span class="x"&gt;)&lt;/span&gt;
&lt;span class="c"&gt;# Compute the multilayer modularity &lt;/span&gt;
&lt;span class="n"&gt;modularity&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;multilayerdigraph&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;rand&lt;/span&gt;&lt;span class="x"&gt;([&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="x"&gt;],&lt;/span&gt; &lt;span class="n"&gt;length&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nodes&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;multilayerdigraph&lt;/span&gt;&lt;span class="x"&gt;)),&lt;/span&gt; &lt;span class="n"&gt;length&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;multilayerdigraph&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;layers&lt;/span&gt;&lt;span class="x"&gt;))&lt;/span&gt;
&lt;span class="x"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Future Developments
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/JuliaGraphs/MultilayerGraphs.jl/issues/34"&gt;Implement graph of layers&lt;/a&gt;;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/JuliaGraphs/MultilayerGraphs.jl/issues/35"&gt;Implement projected monoplex and overlay graphs&lt;/a&gt;;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/JuliaGraphs/MultilayerGraphs.jl/issues/36"&gt;Implement more default multilayer graphs&lt;/a&gt; (e.g. multiplex graphs);&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/JuliaGraphs/MultilayerGraphs.jl/issues/46"&gt;Implement configuration models / graph generators for interlayers&lt;/a&gt;;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/JuliaGraphs/MultilayerGraphs.jl/issues/48"&gt;Implement a fully-fledged multilayer configuration model / graph generator&lt;/a&gt;;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/JuliaGraphs/MultilayerGraphs.jl/issues/53"&gt;Relax the requirement of same &lt;code&gt;T&lt;/code&gt; and &lt;code&gt;U&lt;/code&gt; for all &lt;code&gt;Layer&lt;/code&gt;s and &lt;code&gt;Interlayer&lt;/code&gt;s that are meant to constitute a &lt;code&gt;Multilayer(Di)Graph&lt;/code&gt;&lt;/a&gt;;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/JuliaGraphs/MultilayerGraphs.jl/issues/54"&gt;Implement multilayer graph data visualisation functionalities&lt;/a&gt;;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/JuliaGraphs/MultilayerGraphs.jl/issues/58"&gt;Infer &lt;code&gt;weighttype&lt;/code&gt; from &lt;code&gt;default_edge_weight&lt;/code&gt;&lt;/a&gt;;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/JuliaGraphs/MultilayerGraphs.jl/issues/59"&gt;Improve error explanations&lt;/a&gt;;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/JuliaGraphs/MultilayerGraphs.jl/issues/61"&gt;Improve integration with Agents.jl&lt;/a&gt;;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/JuliaGraphs/MultilayerGraphs.jl/issues/62"&gt;Allow configuration models to specify a minimum discrepancy between the sampled (di)graphical sequence(s) and the provided distribution&lt;/a&gt;;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/JuliaGraphs/MultilayerGraphs.jl/issues/63"&gt;Add to &lt;code&gt;add_layer!&lt;/code&gt; a kwarg that allows the user to specify some new interlayers, skipping the instantiation of the default ones.&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Contacts
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Author&lt;/th&gt;
&lt;th&gt;GitHub&lt;/th&gt;
&lt;th&gt;Twitter&lt;/th&gt;
&lt;th&gt;Discourse&lt;/th&gt;
&lt;th&gt;Forem&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Claudio Moroni&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/ClaudMor"&gt;@ClaudMor&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://twitter.com/Claudio__Moroni"&gt;@Claudio__Moroni&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://discourse.julialang.org/u/claudio20497"&gt;@claudio20497&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://forem.julialang.org/claudio_moroni"&gt;@claudio_moroni&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pietro Monticone&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/pitmonticone"&gt;@pitmonticone&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://twitter.com/PietroMonticone"&gt;@PietroMonticone&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://discourse.julialang.org/u/PietroMonticone"&gt;@PietroMonticone&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://forem.julialang.org/pitmonticone"&gt;@pitmonticone&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

</description>
      <category>package</category>
      <category>announcement</category>
      <category>graphs</category>
      <category>agents</category>
    </item>
    <item>
      <title>[ANN] MultilayerGraphs.jl: A Package to Construct, Handle and Analyse Multilayer Graphs</title>
      <dc:creator>Interdisciplinary Physics Team</dc:creator>
      <pubDate>Fri, 19 Aug 2022 08:44:00 +0000</pubDate>
      <link>https://forem.julialang.org/inphyt/ann-multilayergraphsjl-a-package-to-construct-handle-and-analyse-multilayer-graphs-3k22</link>
      <guid>https://forem.julialang.org/inphyt/ann-multilayergraphsjl-a-package-to-construct-handle-and-analyse-multilayer-graphs-3k22</guid>
      <description>&lt;p&gt;We are thrilled to announce &lt;a href="https://github.com/InPhyT/MultilayerGraphs.jl"&gt;&lt;strong&gt;MultilayerGraphs.jl&lt;/strong&gt;&lt;/a&gt;: a Julia package for the construction, manipulation and analysis of multilayer graphs extending &lt;a href="https://github.com/JuliaGraphs/Graphs.jl"&gt;&lt;strong&gt;Graphs.jl&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MultilayerGraphs.jl&lt;/strong&gt; provides two custom types, &lt;code&gt;MultilayerGraph&lt;/code&gt; and &lt;code&gt;MultilayerDiGraph&lt;/code&gt;, together with utilities to handle and analyse undirected and directed multilayer graphs implementing the mathematical formulation proposed by &lt;a href="https://doi.org/10.1103/PhysRevX.3.041022"&gt;De Domenico et al. (2013)&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The graphs composing the multilayer graph (i.e. &lt;em&gt;layers&lt;/em&gt; and &lt;em&gt;interlayers&lt;/em&gt;) can be of any type as long as they are proper extensions of &lt;code&gt;AbstractGraph{T}&lt;/code&gt;. Then, since this package heavily relies on Graphs.jl and all of its extensions, it may also serve as a playground to test the overall status and consistency of the ecosystem API. &lt;/p&gt;

&lt;h3&gt;
  
  
  Main Features
&lt;/h3&gt;

&lt;p&gt;In the code block below we illustrate the main features of the package.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight julia"&gt;&lt;code&gt;&lt;span class="c"&gt;# Import necessary packages  &lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="n"&gt;Graphs&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="n"&gt;SimpleWeightedGraphs&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="n"&gt;MetaGraphs&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="n"&gt;SimpleValueGraphs&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="n"&gt;MultilayerGraphs&lt;/span&gt;

&lt;span class="c"&gt;# Set graph attributes&lt;/span&gt;
&lt;span class="n"&gt;n_nodes&lt;/span&gt;   &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;        &lt;span class="c"&gt;# Number of nodes &lt;/span&gt;
&lt;span class="n"&gt;min_edges&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;n_nodes&lt;/span&gt;  &lt;span class="c"&gt;# Minimum number of edges  &lt;/span&gt;
&lt;span class="n"&gt;max_edges&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;       &lt;span class="c"&gt;# Maximum number of edges &lt;/span&gt;

&lt;span class="c"&gt;# Define some graphs underlying layers and interlayers &lt;/span&gt;
&lt;span class="n"&gt;simpledigraph&lt;/span&gt;         &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;SimpleDiGraph&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n_nodes&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rand&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;min_edges&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;max_edges&lt;/span&gt;&lt;span class="x"&gt;))&lt;/span&gt;
&lt;span class="n"&gt;simpleweighteddigraph&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;SimpleWeightedDiGraph&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n_nodes&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rand&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;min_edges&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;max_edges&lt;/span&gt;&lt;span class="x"&gt;))&lt;/span&gt;
&lt;span class="n"&gt;metadigraph&lt;/span&gt;           &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;MetaDiGraph&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;simpleweighteddigraph&lt;/span&gt;&lt;span class="x"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;simplevalueoutgraph&lt;/span&gt;   &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ValOutDiGraph&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt; &lt;span class="n"&gt;SimpleDiGraph&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n_nodes&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt;&lt;span class="n"&gt;rand&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;min_edges&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;max_edges&lt;/span&gt;&lt;span class="x"&gt;));&lt;/span&gt; 
                                        &lt;span class="n"&gt;edgeval_types&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;Int64&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="x"&gt;),&lt;/span&gt;
                                        &lt;span class="n"&gt;edgeval_init&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="x"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="x"&gt;)&lt;/span&gt;
                                     &lt;span class="x"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;simplevaluedigraph&lt;/span&gt;    &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ValDiGraph&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt; &lt;span class="n"&gt;SimpleDiGraph&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n_nodes&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt;&lt;span class="n"&gt;rand&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;min_edges&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;max_edges&lt;/span&gt;&lt;span class="x"&gt;));&lt;/span&gt;
                                        &lt;span class="n"&gt;edgeval_types&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;Int64&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="x"&gt;),&lt;/span&gt;
                                        &lt;span class="n"&gt;edgeval_init&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="x"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="x"&gt;)&lt;/span&gt;
                                  &lt;span class="x"&gt;)&lt;/span&gt; 

&lt;span class="c"&gt;# Collect all graphs in a vector&lt;/span&gt;
&lt;span class="n"&gt;layer_graphs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="x"&gt;[&lt;/span&gt;&lt;span class="n"&gt;simpledigraph&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="n"&gt;simpleweighteddigraph&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="n"&gt;metadigraph&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="n"&gt;simplevalueoutgraph&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="n"&gt;simplevaluedigraph&lt;/span&gt;&lt;span class="x"&gt;]&lt;/span&gt;                      

&lt;span class="c"&gt;# Define layers&lt;/span&gt;
&lt;span class="n"&gt;layers&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="x"&gt;[&lt;/span&gt; &lt;span class="n"&gt;Layer&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;Symbol&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"layer_&lt;/span&gt;&lt;span class="si"&gt;$&lt;/span&gt;&lt;span class="s"&gt;i"&lt;/span&gt;&lt;span class="x"&gt;),&lt;/span&gt;     &lt;span class="c"&gt;# Layer's name&lt;/span&gt;
                &lt;span class="n"&gt;graph&lt;/span&gt;&lt;span class="x"&gt;;&lt;/span&gt;                    &lt;span class="c"&gt;# Layer's underlying graph&lt;/span&gt;
                &lt;span class="n"&gt;U&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;Float64&lt;/span&gt;&lt;span class="x"&gt;)&lt;/span&gt;              &lt;span class="c"&gt;# Layer's adjacency matrix `eltype`                  &lt;/span&gt;
                &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt;&lt;span class="n"&gt;graph&lt;/span&gt;&lt;span class="x"&gt;)&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;enumerate&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;layer_graphs&lt;/span&gt;&lt;span class="x"&gt;)&lt;/span&gt;
          &lt;span class="x"&gt;]&lt;/span&gt;

&lt;span class="c"&gt;# Define interlayers. Here we use the constructor for random interlayers. &lt;/span&gt;
&lt;span class="c"&gt;## Note that the user does not need to specify all interlayers: the unspecified one s will be taken care of by the MultilayerDiGraph constructor, that will initialize them according to the a default interlayer type passed via the keyword argument `default_interlayer_type`&lt;/span&gt;
&lt;span class="n"&gt;interlayers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="x"&gt;[&lt;/span&gt; &lt;span class="n"&gt;Interlayer&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n_nodes&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt;                     &lt;span class="c"&gt;# Number of nodes&lt;/span&gt;
                          &lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;interlayer_layer_1_layer_2&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt;  &lt;span class="c"&gt;# Interlayer's name&lt;/span&gt;
                          &lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;layer_1&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt;                     &lt;span class="c"&gt;# Source layer name&lt;/span&gt;
                          &lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;layer_2&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt;                     &lt;span class="c"&gt;# Destination layer name&lt;/span&gt;
                          &lt;span class="n"&gt;SimpleDiGraph&lt;/span&gt;&lt;span class="x"&gt;{&lt;/span&gt;&lt;span class="kt"&gt;Int64&lt;/span&gt;&lt;span class="x"&gt;},&lt;/span&gt;         &lt;span class="c"&gt;# Underlying graph type&lt;/span&gt;
                          &lt;span class="n"&gt;rand&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;min_edges&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;max_edges&lt;/span&gt;&lt;span class="x"&gt;);&lt;/span&gt;    &lt;span class="c"&gt;# Number of edges&lt;/span&gt;
                          &lt;span class="n"&gt;U&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;Float64&lt;/span&gt;                   &lt;span class="c"&gt;# Interlayers's adjacency matrix `eltype`&lt;/span&gt;
                          &lt;span class="x"&gt;),&lt;/span&gt;
                 &lt;span class="n"&gt;Interlayer&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n_nodes&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;interlayer_layer_1_layer_3&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;layer_1&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;layer_3&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="n"&gt;SimpleWeightedDiGraph&lt;/span&gt;&lt;span class="x"&gt;{&lt;/span&gt;&lt;span class="kt"&gt;Int64&lt;/span&gt;&lt;span class="x"&gt;},&lt;/span&gt; &lt;span class="n"&gt;rand&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;min_edges&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;max_edges&lt;/span&gt;&lt;span class="x"&gt;);&lt;/span&gt; &lt;span class="n"&gt;U&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;Float64&lt;/span&gt; &lt;span class="x"&gt;),&lt;/span&gt; &lt;span class="c"&gt;# Create another interlayer, the others will be automatically specified&lt;/span&gt;
              &lt;span class="x"&gt;]&lt;/span&gt;


&lt;span class="c"&gt;# Define the MultilayerDiGraph&lt;/span&gt;
&lt;span class="n"&gt;multilayerdigraph&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;MultilayerDiGraph&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;layers&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="n"&gt;interlayers&lt;/span&gt;&lt;span class="x"&gt;)&lt;/span&gt;

&lt;span class="c"&gt;# There are many other constructors for Layer, Interlayer and Multilayer(Di)Graph! Make sure to check them out in the documentation or in the REPL.&lt;/span&gt;

&lt;span class="c"&gt;# Get all layers&lt;/span&gt;
&lt;span class="n"&gt;multilayerdigraph&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;layers&lt;/span&gt;

&lt;span class="c"&gt;# Get all Interlayers&lt;/span&gt;
&lt;span class="n"&gt;multilayerdigraph&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;interlayers&lt;/span&gt;

&lt;span class="c"&gt;# Get the adjacency_tensor&lt;/span&gt;
&lt;span class="n"&gt;multilayerdigraph&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;adjacency_tensor&lt;/span&gt;

&lt;span class="c"&gt;# Add an edge&lt;/span&gt;
&lt;span class="n"&gt;add_edge!&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;multilayerdigraph&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="n"&gt;MultilayerVertex&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;layer_1&lt;/span&gt;&lt;span class="x"&gt;),&lt;/span&gt; &lt;span class="n"&gt;MultilayerVertex&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;layer_4&lt;/span&gt;&lt;span class="x"&gt;))&lt;/span&gt; &lt;span class="c"&gt;# MultilayerVertex(1, :layer_1) refers to vertex 1 (i.e. the representation of node 1) in layer 1&lt;/span&gt;
&lt;span class="c"&gt;## Check that the edge has been added&lt;/span&gt;
&lt;span class="nd"&gt;@assert&lt;/span&gt; &lt;span class="n"&gt;has_edge&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;multilayerdigraph&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="n"&gt;MultilayerVertex&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;layer_1&lt;/span&gt;&lt;span class="x"&gt;),&lt;/span&gt; &lt;span class="n"&gt;MultilayerVertex&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;layer_4&lt;/span&gt;&lt;span class="x"&gt;))&lt;/span&gt;
&lt;span class="nd"&gt;@assert&lt;/span&gt; &lt;span class="n"&gt;multilayerdigraph&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;adjacency_tensor&lt;/span&gt;&lt;span class="x"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="x"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mf"&gt;1.0&lt;/span&gt; &lt;span class="c"&gt;# indexing is [vertex_1, vertex_2, vertex_1_layer_index, vertex_2_layer_index]&lt;/span&gt;

&lt;span class="c"&gt;# Remove an edge&lt;/span&gt;
&lt;span class="n"&gt;rem_edge!&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;multilayerdigraph&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="n"&gt;MultilayerVertex&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;layer_1&lt;/span&gt;&lt;span class="x"&gt;),&lt;/span&gt; &lt;span class="n"&gt;MultilayerVertex&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;layer_4&lt;/span&gt;&lt;span class="x"&gt;))&lt;/span&gt;
&lt;span class="c"&gt;## Check that the edge has been removed&lt;/span&gt;
&lt;span class="nd"&gt;@assert&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;has_edge&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;multilayerdigraph&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="n"&gt;MultilayerVertex&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;layer_1&lt;/span&gt;&lt;span class="x"&gt;),&lt;/span&gt; &lt;span class="n"&gt;MultilayerVertex&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;layer_4&lt;/span&gt;&lt;span class="x"&gt;))&lt;/span&gt;
&lt;span class="nd"&gt;@assert&lt;/span&gt; &lt;span class="n"&gt;multilayerdigraph&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;adjacency_tensor&lt;/span&gt;&lt;span class="x"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="x"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mf"&gt;0.0&lt;/span&gt; &lt;span class="c"&gt;# indexing is [vertex_1, vertex_2, vertex_1_layer_index, vertex_2_layer_index]&lt;/span&gt;

&lt;span class="c"&gt;# Since Multilayer(Di)Graphs are extensions of Graphs.jl (https://juliagraphs.org/Graphs.jl/dev/ecosystem/interface/) all methods defined for AbstractGraph also work for Multilayer(Di)Graph. &lt;/span&gt;
&lt;span class="c"&gt;## Below are some examples of multilayer-specific functions and of Graphs.jl's functions that had to be reimplemented anyway for technical reasons.&lt;/span&gt;

&lt;span class="c"&gt;# Get the overlay monoplex graph&lt;/span&gt;
&lt;span class="n"&gt;get_overlay_monoplex_graph&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;multilayerdigraph&lt;/span&gt;&lt;span class="x"&gt;)&lt;/span&gt;

&lt;span class="c"&gt;# Get the depth-weighted global clustering coefficient, with weights so that it coincides with the global clustering coefficient&lt;/span&gt;
&lt;span class="n"&gt;wcc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;multilayer_weighted_global_clustering_coefficient&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;multilayerdigraph&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="x"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="x"&gt;])&lt;/span&gt;
&lt;span class="nd"&gt;@assert&lt;/span&gt; &lt;span class="n"&gt;wcc&lt;/span&gt; &lt;span class="n"&gt;≈&lt;/span&gt; &lt;span class="n"&gt;multilayer_global_clustering_coefficient&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;multilayerdigraph&lt;/span&gt;&lt;span class="x"&gt;)&lt;/span&gt;

&lt;span class="c"&gt;# Get the eigenvector centrality of each vertex and the relative error at each iteration of the algorithm that computes it&lt;/span&gt;
&lt;span class="n"&gt;eig_centrality&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="n"&gt;errs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;eigenvector_centrality&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt; &lt;span class="n"&gt;multilayerdigraph&lt;/span&gt;&lt;span class="x"&gt;;&lt;/span&gt;
                                               &lt;span class="n"&gt;norm&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"n"&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt;        &lt;span class="c"&gt;# Normalization factor&lt;/span&gt;
                                               &lt;span class="n"&gt;tol&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;1e-3&lt;/span&gt;         &lt;span class="c"&gt;# Target relative inter-iteration error&lt;/span&gt;
                                             &lt;span class="x"&gt;)&lt;/span&gt;

&lt;span class="c"&gt;# Get the modularity, given a clustering&lt;/span&gt;
&lt;span class="n"&gt;modularity&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt; &lt;span class="n"&gt;multilayerdigraph&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;rand&lt;/span&gt;&lt;span class="x"&gt;([&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="x"&gt;],&lt;/span&gt; &lt;span class="n"&gt;length&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nodes&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;multilayerdigraph&lt;/span&gt;&lt;span class="x"&gt;)),&lt;/span&gt;&lt;span class="n"&gt;length&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;multilayerdigraph&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;layers&lt;/span&gt;&lt;span class="x"&gt;))&lt;/span&gt; &lt;span class="c"&gt;# Communities &lt;/span&gt;
          &lt;span class="x"&gt;)&lt;/span&gt;

&lt;span class="c"&gt;# Von Neumann Entropy is currently implemented only for undirected multilayer graphs (i.e. for MultilayerGraph). &lt;/span&gt;
&lt;span class="c"&gt;## You can find it in the tutorial included in the package documentation. &lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Future Developments
&lt;/h3&gt;

&lt;p&gt;The package is currently under development and further steps would benefit enormously from the precious feedback of the &lt;a href="https://github.com/orgs/JuliaGraphs/people"&gt;JuliaGraph people&lt;/a&gt;, graph theorists, network scientists and all the users who might have general questions or suggestions. &lt;/p&gt;

&lt;p&gt;Here we highlight the major future developments we have currently identified: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Better integration with &lt;a href="https://github.com/JuliaGraphs/Graphs.jl"&gt;Graphs.jl&lt;/a&gt; (e.g. move the &lt;code&gt;AbstractVertex&lt;/code&gt; to Graphs.jl, standardize graphs constructors, etc.);&lt;/li&gt;
&lt;li&gt;Better integration with &lt;a href="https://github.com/JuliaGraphs/MetaGraphs.jl"&gt;MetaGraphs.jl&lt;/a&gt; and &lt;a href="https://github.com/simonschoelly/SimpleValueGraphs.jl"&gt;SimpleValueGraphs.jl&lt;/a&gt;. Although it is possible to specify a &lt;code&gt;MetaGraph&lt;/code&gt; and &lt;code&gt;SimpleValueGraph&lt;/code&gt; as layer and/or interlayer, they are not yet fully supported (i.e. API may be a little unfit for them). An example using MetaGraphs, SimpleValueGraphs can be found at our announcement post &lt;a href=""&gt;here&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;Optimise the adjacency tensor;&lt;/li&gt;
&lt;li&gt;More intuitive constructor for &lt;code&gt;Interlayer&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;Implement specialised and simplified API for &lt;code&gt;MultiplexGraph&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;Implement visualisation functionalities;&lt;/li&gt;
&lt;li&gt;Implement other features and methods for the analysis of multilayer graphs following the scientific literature: 

&lt;ul&gt;
&lt;li&gt;Kivelä et al. (2014) &lt;a href="https://doi.org/10.1093/comnet/cnu016"&gt;Multilayer networks&lt;/a&gt;. &lt;em&gt;Journal of Complex Networks&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;Cozzo et al. (2015) &lt;a href="https://doi.org/10.1088/1367-2630/17/7/073029"&gt;Structure of triadic relations in multiplex networks&lt;/a&gt;. &lt;em&gt;New Journal of Physics&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;De Domenico et al. (2015) &lt;a href="https://doi.org/10.1093/comnet/cnu038"&gt;MuxViz: a tool for multilayer analysis and visualization of networks&lt;/a&gt;. &lt;em&gt;Journal of Complex Networks&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;De Domenico et al. (2015) &lt;a href="https://doi.org/10.1038/ncomms7868"&gt;Ranking in interconnected multilayer networks reveals versatile nodes&lt;/a&gt;. &lt;em&gt;Nature Communications&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;De Domenico (2022) &lt;a href="https://doi.org/10.1007/978-3-030-75718-2"&gt;Multilayer Networks: Analysis and Visualization&lt;/a&gt;. &lt;em&gt;Springer Cham&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  References
&lt;/h3&gt;

&lt;p&gt;For more information, tutorials and API reference please visit the &lt;a href="https://inphyt.github.io/MultilayerGraphs.jl"&gt;documentation&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Feel free to open &lt;a href="https://github.com/InPhyT/MultilayerGraphs.jl/discussions"&gt;discussions&lt;/a&gt;, &lt;a href="https://github.com/InPhyT/MultilayerGraphs.jl/issues"&gt;issues&lt;/a&gt; or &lt;a href="https://github.com/InPhyT/MultilayerGraphs.jl/pulls"&gt;PRs&lt;/a&gt;. They are very welcome!   &lt;/p&gt;

&lt;h3&gt;
  
  
  Contacts
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Author&lt;/th&gt;
&lt;th&gt;GitHub&lt;/th&gt;
&lt;th&gt;Twitter&lt;/th&gt;
&lt;th&gt;Discourse&lt;/th&gt;
&lt;th&gt;Forem&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Pietro Monticone&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/pitmonticone"&gt;@pitmonticone&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://twitter.com/PietroMonticone"&gt;@PietroMonticone&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://discourse.julialang.org/u/PietroMonticone"&gt;@PietroMonticone&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://forem.julialang.org/pitmonticone"&gt;@pitmonticone&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claudio Moroni&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/ClaudMor"&gt;@ClaudMor&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://twitter.com/Claudio__Moroni"&gt;@Claudio__Moroni&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://discourse.julialang.org/u/claudio20497"&gt;@claudio20497&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://forem.julialang.org/claudio_moroni"&gt;@claudio_moroni&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

</description>
      <category>package</category>
      <category>announcement</category>
      <category>graphs</category>
      <category>networks</category>
    </item>
    <item>
      <title>[ANN] JuliaEpi: Collaborative Computational Epidemiology in Julia</title>
      <dc:creator>Interdisciplinary Physics Team</dc:creator>
      <pubDate>Mon, 01 Aug 2022 23:42:00 +0000</pubDate>
      <link>https://forem.julialang.org/inphyt/ann-juliaepi-collaborative-computational-epidemiology-in-julia-19ng</link>
      <guid>https://forem.julialang.org/inphyt/ann-juliaepi-collaborative-computational-epidemiology-in-julia-19ng</guid>
      <description>&lt;p&gt;We're building an open research community called &lt;a href="https://github.com/JuliaEpi"&gt;JuliaEpi&lt;/a&gt; to develop an epidemiological modelling ecosystem written in Julia for the design, management, wrangling and quality assessment of multiple data types and sources and the parameterisation, calibration, validation, simulation and emulation of multiple classes of epidemiological models aimed at tackling typical problems such as situational awareness, nowcasting projection and evaluation, forecasting projection and evaluation, prospective and retrospective scenario analysis to ultimately support the preparedness, surveillance, response, control and prevention of outbreaks, epidemics and pandemics.&lt;/p&gt;

&lt;h2&gt;
  
  
  Contact Us
&lt;/h2&gt;

&lt;p&gt;Are you an epi/eco/stat modeller or data scientist/manager? &lt;/p&gt;

&lt;p&gt;Would you be interested in joining us to collaborate on the management and wrangling of data, the translation of past/present project-specific or package code into Julia, the conceptualization of new research projects, the open development and maintenance of new packages, offering and receiving expert feedback though issues, discussions and the whole lot of open source research communities? &lt;/p&gt;

&lt;p&gt;Then please contact us via &lt;a href="https://twitter.com/EpiJulia"&gt;Twitter DM&lt;/a&gt; or &lt;a href="//julia.epidemiology@gmail.com"&gt;email&lt;/a&gt; and let us know &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;if you're interested to offer your contribution or you know students/researchers/developers who might be interested in collaborating;&lt;/li&gt;
&lt;li&gt;if you believe you could &lt;a href="https://docs.github.com/en/repositories/creating-and-managing-repositories/transferring-a-repository"&gt;transfer&lt;/a&gt; some of your relevant repositories to JuliaEpi. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Announcements on Other Platforms
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/EpiJulia/status/1553756944443260929?s=20&amp;amp;t=nnrFo9lBrJii5-Ht_CZ4XQ"&gt;Twitter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://discourse.julialang.org/t/ann-juliaepi-collaborative-computational-epidemiology-in-julia/85131"&gt;Julia Discourse&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>organization</category>
      <category>epidemiology</category>
      <category>data</category>
      <category>modelling</category>
    </item>
    <item>
      <title>[ANN] ICD_GEMs.jl: A Package to Translate Between ICD-9 and ICD-10 Codes</title>
      <dc:creator>Interdisciplinary Physics Team</dc:creator>
      <pubDate>Wed, 25 May 2022 22:27:33 +0000</pubDate>
      <link>https://forem.julialang.org/inphyt/ann-icdgemsjl-a-package-to-translate-between-icd-9-and-icd-10-codes-17am</link>
      <guid>https://forem.julialang.org/inphyt/ann-icdgemsjl-a-package-to-translate-between-icd-9-and-icd-10-codes-17am</guid>
      <description>&lt;p&gt;We're glad to announce &lt;a href="https://github.com/InPhyT/ICD_GEMs.jl"&gt;ICD_GEMs.jl&lt;/a&gt;: a package that allows to translate ICD-9 codes in ICD-10 and viceversa via the General Equivalence Mappings (&lt;a href="https://www.asco.org/practice-policy/billing-coding-reporting/icd-10/general-equivalence-mappings-gems"&gt;GEMs&lt;/a&gt;) of the International Classification of Diseases (&lt;a href="https://www.who.int/standards/classifications/classification-of-diseases"&gt;ICD&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;The package exports the &lt;a href="https://www.cdc.gov/nchs/icd/Comprehensive-Listing-of-ICD-10-CM-Files.htm"&gt;latest GEMs release&lt;/a&gt; from the CDC and internally utilizes it to perform translations. To understand how GEMs work and the terminology and choices found throughout this package, please read the official documentation. It may be found in the package repository (&lt;a href="https://github.com/InPhyT/ICD_GEMs.jl/blob/main/data/Dxgem_guide_2018.pdf"&gt;here&lt;/a&gt; and &lt;a href="https://github.com/InPhyT/ICD_GEMs.jl/blob/main/data/GemsTechDoc_2018.pdf"&gt;here&lt;/a&gt;), or it may be downloaded, together with the GEMs, from the &lt;a href="https://ftp.cdc.gov/pub/Health_Statistics/NCHS/Publications/ICD10CM/2018/Dxgem_2018.zip"&gt;CDC's website&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;GEMs and applied mappings are represented by the package via a custom type &lt;code&gt;GEM&lt;/code&gt;, and once a GEM (or an applied mapping) has been loaded (here we load an ICD10 -&amp;gt; ICD9 GEM from a CDC-formatted .txt source file) :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight julia"&gt;&lt;code&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="n"&gt;ICD_GEMs&lt;/span&gt;
&lt;span class="n"&gt;path&lt;/span&gt;      &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"path/to/cdc_txt_file"&lt;/span&gt;
&lt;span class="n"&gt;direction&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"I10_I9"&lt;/span&gt; &lt;span class="c"&gt;# If the GEM translates from ICD-10 to ICD-9, otherwise "I9_I10"&lt;/span&gt;
&lt;span class="n"&gt;GEM_I10_I9_dictionary&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;get_GEM_dictionary_from_cdc_gem_txt&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="n"&gt;direction&lt;/span&gt;&lt;span class="x"&gt;)&lt;/span&gt; &lt;span class="c"&gt;# Or get_GEM_dictionary_from_cdc_gem_txt(path, direction)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It can be applied to perform custom translations:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight julia"&gt;&lt;code&gt;&lt;span class="n"&gt;ICD_10_neoplasms&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="x"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"C00-D48"&lt;/span&gt;&lt;span class="x"&gt;]&lt;/span&gt; &lt;span class="c"&gt;# This is equivalent as explicitly specifiying all codes from C00.XX to D48.XX&lt;/span&gt;
&lt;span class="n"&gt;ICD_9_neoplasm&lt;/span&gt;   &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;execute_applied_mapping&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;GEM_I10_I9_dictionary&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ICD_10_neoplasms&lt;/span&gt;&lt;span class="x"&gt;)&lt;/span&gt;  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notice that the package supports the &lt;code&gt;-&lt;/code&gt; notation between pairs of codes, which is equivalent to specifying all codes in between separated by commas.&lt;/p&gt;

&lt;p&gt;More complex translations, involving both single codes and ranges with arbitrary precision on both ends, can be performed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight julia"&gt;&lt;code&gt;&lt;span class="n"&gt;execute_applied_mapping&lt;/span&gt;&lt;span class="x"&gt;(&lt;/span&gt;&lt;span class="n"&gt;GEM_I10_I9_dictionary&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="x"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"I60-I661"&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"I670"&lt;/span&gt;&lt;span class="x"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"I672-I679"&lt;/span&gt;&lt;span class="x"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For more information, please consider reading the &lt;a href="https://inphyt.github.io/ICD_GEMs.jl/stable"&gt;documentation&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/InPhyT/ICD_GEMs.jl/discussions"&gt;Discussions&lt;/a&gt;, &lt;a href="https://github.com/InPhyT/ICD_GEMs.jl/issues"&gt;issues&lt;/a&gt; and &lt;a href="https://github.com/InPhyT/ICD_GEMs.jl/pulls"&gt;PRs&lt;/a&gt; are always welcome!&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Butler (2007), &lt;a href="https://library.ahima.org/doc?oid=74265#.Ynre9i8RoiM"&gt;ICD-10 General Equivalence Mappings: Bridging the Translation Gap from ICD-9&lt;/a&gt;, &lt;em&gt;Journal of AHIMA&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;CMS (2018), &lt;a href="https://www.cms.gov/Medicare/Coding/ICD10/2018-ICD-10-CM-and-GEMs"&gt;2018 ICD-10 CM and GEMs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;NCHS-CDC (2018), &lt;a href="https://ftp.cdc.gov/pub/health_statistics/nchs/publications/ICD10CM/2018/Dxgem_guide_2018.pdf"&gt;Diagnosis Code Set General Equivalence Mappings: ICD-10-CM to ICD-9-CM and ICD-9-CM to ICD-10-CM&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;NCHS-CDC (2022), &lt;a href="https://www.cdc.gov/nchs/icd/Comprehensive-Listing-of-ICD-10-CM-Files.htm"&gt;Comprehensive Listing ICD-10-CM Files&lt;/a&gt; (download General Equivalence Mappings &lt;a href="https://ftp.cdc.gov/pub/Health_Statistics/NCHS/Publications/ICD10CM/2018/Dxgem_2018.zip"&gt;here&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Contacts
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Author&lt;/th&gt;
&lt;th&gt;GitHub&lt;/th&gt;
&lt;th&gt;Twitter&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Pietro Monticone&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/pitmonticone"&gt;@pitmonticone&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://twitter.com/PietroMonticone"&gt;@PietroMonticone&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claudio Moroni&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/ClaudMor"&gt;@ClaudMor&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://twitter.com/Claudio__Moroni"&gt;@Claudio__Moroni&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

</description>
      <category>package</category>
      <category>statistics</category>
      <category>health</category>
      <category>epidemiology</category>
    </item>
    <item>
      <title>[ANN] UnrollingAverages.jl: A Package to Deconvolve Time Series Data</title>
      <dc:creator>Interdisciplinary Physics Team</dc:creator>
      <pubDate>Wed, 25 May 2022 22:21:10 +0000</pubDate>
      <link>https://forem.julialang.org/inphyt/ann-unrollingaveragesjl-a-package-to-deconvolve-time-series-data-5bbp</link>
      <guid>https://forem.julialang.org/inphyt/ann-unrollingaveragesjl-a-package-to-deconvolve-time-series-data-5bbp</guid>
      <description>&lt;p&gt;We're happy to announce &lt;a href="https://github.com/InPhyT/UnrollingAverages.jl"&gt;UnrollingAverages.jl&lt;/a&gt;: a package aimed at deconvolving (or &lt;em&gt;unrolling&lt;/em&gt;) moving averages of time series to get the original ones back.&lt;/p&gt;

&lt;p&gt;In the following, by "original series" or "series" we are going to mean the time series we would like to reconstruct from its "moving average".&lt;/p&gt;

&lt;p&gt;The package exports a single function called &lt;code&gt;unroll&lt;/code&gt;that, with a few simple arguments, is able to handle all the following scenarios.&lt;/p&gt;

&lt;h2&gt;
  
  
  Scenario 1
&lt;/h2&gt;

&lt;p&gt;The initial values of the moving average provided are known.&lt;/p&gt;

&lt;p&gt;In this scenario, the original series can be exactly reconstructed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Scenario 2
&lt;/h2&gt;

&lt;p&gt;The initial values of the moving average provided are not known, but it is known that the series is exclusively composed of natural numbers;&lt;/p&gt;

&lt;p&gt;In this scenario, all possible natural series that correspond to the input moving average are returned.&lt;/p&gt;

&lt;h2&gt;
  
  
  Scenario 3
&lt;/h2&gt;

&lt;p&gt;The initial values of the moving average provided are not known, and it is not true or known that the series is exclusively composed of natural numbers.&lt;/p&gt;

&lt;p&gt;In this scenario, the original series cannot be reconstructed in general, so a &lt;a href="https://stats.stackexchange.com/questions/67907/extract-data-points-from-moving-average/68002#68002"&gt;pseudo-inverse approximation&lt;/a&gt; is returned.&lt;/p&gt;

&lt;h2&gt;
  
  
  Examples
&lt;/h2&gt;

&lt;p&gt;A real-world custom application of this package can be found in the &lt;a href="https://github.com/InPhyT/COVID19-Italy-Integrated-Surveillance-Data"&gt;COVID-19 integrated surveillance data repository&lt;/a&gt; we maintain.&lt;/p&gt;

&lt;p&gt;The output data has been stored &lt;a href="https://github.com/InPhyT/COVID19-Italy-Integrated-Surveillance-Data/tree/main/3_output/data"&gt;here&lt;/a&gt; and contain the following information:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reconstructed daily time series of &lt;strong&gt;confirmed cases by date of diagnosis&lt;/strong&gt; stratified by sex and age at the regional level;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://forem.julialang.org/images/M45pWqs6fwDzEVDdzicME88x7Y2mVS2i-n6NO4OcsgU/w:880/mb:500000/ar:1/aHR0cHM6Ly9naXRo/dWIuY29tL0luUGh5/VC9DT1ZJRDE5LUl0/YWx5LUludGVncmF0/ZWQtU3VydmVpbGxh/bmNlLURhdGEvYmxv/Yi9tYWluLzNfb3V0/cHV0L2ZpZ3VyZXMv/aXNzX2FnZV9kYXRl/X2xvbWJhcmR5X2Nv/bmZpcm1lZC5wbmc_/cmF3PXRydWU" class="article-body-image-wrapper"&gt;&lt;img src="https://forem.julialang.org/images/M45pWqs6fwDzEVDdzicME88x7Y2mVS2i-n6NO4OcsgU/w:880/mb:500000/ar:1/aHR0cHM6Ly9naXRo/dWIuY29tL0luUGh5/VC9DT1ZJRDE5LUl0/YWx5LUludGVncmF0/ZWQtU3VydmVpbGxh/bmNlLURhdGEvYmxv/Yi9tYWluLzNfb3V0/cHV0L2ZpZ3VyZXMv/aXNzX2FnZV9kYXRl/X2xvbWJhcmR5X2Nv/bmZpcm1lZC5wbmc_/cmF3PXRydWU" alt="lazio-confirmed" width="880" height="528"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reconstructed daily time series of &lt;strong&gt;symptomatic cases by date of symptoms onset&lt;/strong&gt; stratified by sex and age at the regional level;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://forem.julialang.org/images/QoK6b1C6FuU_frjTmX5GQftSXIMwV7vFPsfk7n4tejU/w:880/mb:500000/ar:1/aHR0cHM6Ly9naXRo/dWIuY29tL0luUGh5/VC9DT1ZJRDE5LUl0/YWx5LUludGVncmF0/ZWQtU3VydmVpbGxh/bmNlLURhdGEvYmxv/Yi9tYWluLzNfb3V0/cHV0L2ZpZ3VyZXMv/aXNzX2FnZV9kYXRl/X2xvbWJhcmR5X3N5/bXB0b21hdGljLnBu/Zz9yYXc9dHJ1ZQ" class="article-body-image-wrapper"&gt;&lt;img src="https://forem.julialang.org/images/QoK6b1C6FuU_frjTmX5GQftSXIMwV7vFPsfk7n4tejU/w:880/mb:500000/ar:1/aHR0cHM6Ly9naXRo/dWIuY29tL0luUGh5/VC9DT1ZJRDE5LUl0/YWx5LUludGVncmF0/ZWQtU3VydmVpbGxh/bmNlLURhdGEvYmxv/Yi9tYWluLzNfb3V0/cHV0L2ZpZ3VyZXMv/aXNzX2FnZV9kYXRl/X2xvbWJhcmR5X3N5/bXB0b21hdGljLnBu/Zz9yYXc9dHJ1ZQ" alt="lazio-symptomatic" width="880" height="528"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reconstructed daily time series of &lt;strong&gt;ordinary hospital admissions&lt;/strong&gt; by date of admission stratified by sex and age at the regional level;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://forem.julialang.org/images/TPWHpVTBxU7hqc1kzvQQjV09XYY28AgXq3w4e3WHTUM/w:880/mb:500000/ar:1/aHR0cHM6Ly9naXRo/dWIuY29tL0luUGh5/VC9DT1ZJRDE5LUl0/YWx5LUludGVncmF0/ZWQtU3VydmVpbGxh/bmNlLURhdGEvYmxv/Yi9tYWluLzNfb3V0/cHV0L2ZpZ3VyZXMv/aXNzX2FnZV9kYXRl/X2xvbWJhcmR5X2hv/c3BpdGFsaXphdGlv/bnMucG5nP3Jhdz10/cnVl" class="article-body-image-wrapper"&gt;&lt;img src="https://forem.julialang.org/images/TPWHpVTBxU7hqc1kzvQQjV09XYY28AgXq3w4e3WHTUM/w:880/mb:500000/ar:1/aHR0cHM6Ly9naXRo/dWIuY29tL0luUGh5/VC9DT1ZJRDE5LUl0/YWx5LUludGVncmF0/ZWQtU3VydmVpbGxh/bmNlLURhdGEvYmxv/Yi9tYWluLzNfb3V0/cHV0L2ZpZ3VyZXMv/aXNzX2FnZV9kYXRl/X2xvbWJhcmR5X2hv/c3BpdGFsaXphdGlv/bnMucG5nP3Jhdz10/cnVl" alt="lazio-hospitalized" width="880" height="528"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reconstructed daily time series of &lt;strong&gt;intensive hospital admissions&lt;/strong&gt; by date of admission stratified by sex and age at the regional level;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://forem.julialang.org/images/5jgJnZIltmLPwAtedOxiuGcMJDgwip4qMuD5XhdZ0rw/w:880/mb:500000/ar:1/aHR0cHM6Ly9naXRo/dWIuY29tL0luUGh5/VC9DT1ZJRDE5LUl0/YWx5LUludGVncmF0/ZWQtU3VydmVpbGxh/bmNlLURhdGEvYmxv/Yi9tYWluLzNfb3V0/cHV0L2ZpZ3VyZXMv/aXNzX2FnZV9kYXRl/X2xvbWJhcmR5X2lu/dGVuc2l2ZV9jYXJl/LnBuZz9yYXc9dHJ1/ZQ" class="article-body-image-wrapper"&gt;&lt;img src="https://forem.julialang.org/images/5jgJnZIltmLPwAtedOxiuGcMJDgwip4qMuD5XhdZ0rw/w:880/mb:500000/ar:1/aHR0cHM6Ly9naXRo/dWIuY29tL0luUGh5/VC9DT1ZJRDE5LUl0/YWx5LUludGVncmF0/ZWQtU3VydmVpbGxh/bmNlLURhdGEvYmxv/Yi9tYWluLzNfb3V0/cHV0L2ZpZ3VyZXMv/aXNzX2FnZV9kYXRl/X2xvbWJhcmR5X2lu/dGVuc2l2ZV9jYXJl/LnBuZz9yYXc9dHJ1/ZQ" alt="lazio-icu" width="880" height="528"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reconstructed daily time series of &lt;strong&gt;deceased cases by date of death&lt;/strong&gt; stratified by sex and age at the regional level.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://forem.julialang.org/images/kcAtQ5JC-sX189CjwOpziZvsGivjZTN5j_gplrQ7X08/w:880/mb:500000/ar:1/aHR0cHM6Ly9naXRo/dWIuY29tL0luUGh5/VC9DT1ZJRDE5LUl0/YWx5LUludGVncmF0/ZWQtU3VydmVpbGxh/bmNlLURhdGEvYmxv/Yi9tYWluLzNfb3V0/cHV0L2ZpZ3VyZXMv/aXNzX2FnZV9kYXRl/X2xvbWJhcmR5X2Rl/Y2Vhc2VkLnBuZz9y/YXc9dHJ1ZQ" class="article-body-image-wrapper"&gt;&lt;img src="https://forem.julialang.org/images/kcAtQ5JC-sX189CjwOpziZvsGivjZTN5j_gplrQ7X08/w:880/mb:500000/ar:1/aHR0cHM6Ly9naXRo/dWIuY29tL0luUGh5/VC9DT1ZJRDE5LUl0/YWx5LUludGVncmF0/ZWQtU3VydmVpbGxh/bmNlLURhdGEvYmxv/Yi9tYWluLzNfb3V0/cHV0L2ZpZ3VyZXMv/aXNzX2FnZV9kYXRl/X2xvbWJhcmR5X2Rl/Y2Vhc2VkLnBuZz9y/YXc9dHJ1ZQ" alt="lazio-deceased" width="880" height="528"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For more details, please consider taking a look at the &lt;a href="https://inphyt.github.io/UnrollingAverages.jl/stable"&gt;documentation&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/InPhyT/UnrollingAverages.jl/discussions"&gt;Discussions&lt;/a&gt;, &lt;a href="https://github.com/InPhyT/UnrollingAverages.jl/issues"&gt;issues&lt;/a&gt; and &lt;a href="https://github.com/InPhyT/UnrollingAverages.jl/pulls"&gt;PRs&lt;/a&gt; are always welcome!&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Pietro Monticone &amp;amp; Claudio Moroni (2022) &lt;a href="https://doi.org/10.5281/zenodo.5748141"&gt;InPhyT/COVID19-Italy-Integrated-Surveillance-Data&lt;/a&gt;. &lt;em&gt;Zenodo&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;Del Manso et al. (2020) &lt;a href="https://doi.org/10.19191/EP20.5-6.S2.105"&gt;COVID-19 integrated surveillance in Italy: outputs and related activities&lt;/a&gt;. &lt;em&gt;Epidemiologia &amp;amp; Prevenzione&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;Starnini et al. (2021) &lt;a href="https://www.doi.org/10.1017/dap.2021.25"&gt;Impact of data accuracy on the evaluation of COVID-19 mitigation policies&lt;/a&gt;. &lt;em&gt;Data &amp;amp; Policy&lt;/em&gt;, 3, E28. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Contacts
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Author&lt;/th&gt;
&lt;th&gt;GitHub&lt;/th&gt;
&lt;th&gt;Twitter&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Pietro Monticone&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/pitmonticone"&gt;@pitmonticone&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://twitter.com/PietroMonticone"&gt;@PietroMonticone&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claudio Moroni&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/ClaudMor"&gt;@ClaudMor&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://twitter.com/Claudio__Moroni"&gt;@Claudio__Moroni&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

</description>
      <category>package</category>
      <category>announcement</category>
      <category>timeseries</category>
      <category>statistics</category>
    </item>
  </channel>
</rss>
