# A matrix of vector pairs, such that one node is in the first vector and the other is in the second. The position of the vector pairs in the matrix corresponds to the distribution in sampler_matrix used to sample them. There is probably a better way to represent these, I did this so they could be sampled fast. We only use the upper triangle of this but Julia lacks a good Symmetric matrix type.

# sample_cache::Matrix{Vector{Int}}

# The structure that pre-allocates the space for the weights of the edges in contact array. This is filled with weights and then the weights are added to weights_dict. We only use the upper triangle of this but Julia lacks a good Symmetric matrix type.

# weights_dict::Dictionary{GraphEdge,UInt8}

# Stores the weights used in the graph, so they can be easily resampled.

# sampler_matrix::M

# This is the matrix of distributions, from which the edge weights are sampled. Specifically, weights for edges in `contact_array[i,j]` come from the distribution in `sampler_matrix[i,j]`, and are placed into `sample_cache[i,j]`. We only use the upper triangle of this but Julia lacks a good Symmetric matrix type. See `sample_mixing_graph!`.

# """

# """

# This function constructs the `MixingEdges` type for rest and WS graphs. Calls `generate_contact_vectors!(..)` to get the degree distributions for a bipartite graph for each pair of demographics, and then adds edges to MixingEdges.contact_array with the Chung-Lu approach.

# """

# """

# This function constructs the `MixingEdges` type for the home graphs. Simply adds edges to MixingEdges from the graph `g`, since we already create that in `generate_population`.

# """

"""

Stores the full time dependent mixing graph for the model. I think this might be a weird abstraction for this idea but it works fine.

#Fields

remade_graphs::NTuple{N,G}

These are references to the graphs that get resampled everyday.

resampled_graphs::NTuple{N,G}

resampled_graphs::NTuple{N,G}

These are references to the graphs that get resampled everyday.

List of lists of graphs, one list for each day.

graph_list::Vector{Vector{G}}

List of lists of graphs, one list for each day.

"""

struct TimeDepMixingGraph{G,T1,T2}

remade_graphs::T1

...

...

@@ -185,6 +155,33 @@ end

"""

Weighted graph type. Stores the graph in `g`, and the weights and edges in `mixing_edges`.

A matrix of vector pairs, such that one node is in the first vector and the other is in the second. The position of the vector pairs in the matrix corresponds to the distribution in sampler_matrix used to sample them. There is probably a better way to represent these, I did this so they could be sampled fast. We only use the upper triangle of this but Julia lacks a good Symmetric matrix type.

sample_cache::Matrix{Vector{Int}}

The structure that pre-allocates the space for the weights of the edges in contact array. This is filled with weights and then the weights are added to weights_dict. We only use the upper triangle of this but Julia lacks a good Symmetric matrix type.

weights_dict::Dictionary{GraphEdge,UInt8}

Stores the weights used in the graph, so they can be easily resampled.

mixing_matrix::M1

Matrix of distributions determining node degrees

sampler_matrix::M

Matrix of distributions determining the edge weights