# Informations about types

As there are many ways to represent ecological networks, and the correct way to measure a given property varies in function of the representation, `EcologicalNetwork`

has a series of built-in types.

## Type hierarchy

The `EcologicalNetwork`

package has six main types that are meant to be used by the user: `BipartiteNetwork`

, `BipartiteProbaNetwork`

, `BipartiteQuantiNetwork`

, `UnipartiteNetwork`

, `UnipartiteProbaNetwork`

and `UnipartiteQuantiNetwork`

. All types with `Proba`

in their names are meant to represent probabilistic networks, and are also part of the union type `ProbabilisticNetwork`

. All types *without* `Proba`

in their name are part of the union type `DeterministicNetwork`

, and represent networks in which interactions are either present or absent. All types with `Quanti`

in their names are part of the `QuantitativeNetwork`

groups, and represent networks with weighted interactions. All types starting with `Bipartite`

are also part of the abstract type `Bipartite`

, and types with `Unipartite`

in their names are part of the abstract type `Unipartite`

. Finally, both `Unipartite`

and `Bipartite`

are part of the abstract type `EcoNetwork`

.

Although this may seem convoluted, this is important to understand: when writing functions, you can restrict them to any type of network you want by using the right type in their declaration. You can also check properties of a network just by looking at its type. For example, one can check whether a network `N`

is bipartite with:

typeof(N) <: Bipartite

Networks are represented as two-dimensional matrices. All types are simply wrappers around an adjacency matrix, stored as the `A`

property of the object. To look at the adjacency matrix of a network `N`

, one therefore uses `N.A`

. These matrices must be read as: the existence/probability of an interaction *from* the species of the *i*-th row *to* the species in the *j*-th column. This implies that the networks are, by default, directed.

Note that the type of a network will determine what methods can be applied to it. For example, all measures of variance are only making sense for probabilistic networks.

## Data types

Interactions in deterministic networks are represented as boolean (`true`

/`false`

) values. This is memory efficient, so large networks can be represented (one interactions represented as a boolean uses 8 times fewer memory than the same interaction represented as an integer). This being said, all networks of the `DeterministicNetwork`

type can be read from matrices of integers, *as long as these matrices only contain 0 and 1*.

In probabilistic networks, interactions are stored as floating point (`Float64`

) numbers. These values have to be between 0.0 and 1.0, as they represent probabilities. In quantitative networks, interactions are stored as any type of number.

Networks of the `Unipartite`

class must have the same number of rows and columns. The species in the rows and columns are the same. Networks of the `Bipartite`

class are expected to have different numbers of rows and columns, as the species in rows and columns are different species. It is possible to convert a network from `Bipartite`

to `Unipartite`

using the `make_unipartite`

function:

using EcologicalNetwork B = BipartiteNetwork(rand(Bool, (3, 5))) U = make_unipartite(B) richness(U) == richness(B)

true

The documentation for `make_unipartite`

gives additional explanations about how the conversion is done. In the overwhelming majority of cases, applying any measure to a bipartite network, and to the same network made unipartite, should give the same results (connectance is one notable example).

## Type reference

#
** EcologicalNetwork.Bipartite** —

*Type*.

All bipartite networks

#
** EcologicalNetwork.BipartiteNetwork** —

*Type*.

A bipartite deterministic network is a two-dimensional array of boolean values.

#
** EcologicalNetwork.BipartiteNetwork** —

*Method*.

Construct a bipartite network from a matrix of integer

#
** EcologicalNetwork.EcoNetwork** —

*Type*.

This is an abstract type that allows to generate functions for all sorts of networks. All other types are derived from this one.

#
** EcologicalNetwork.Unipartite** —

*Type*.

All unipartite networks

#
** EcologicalNetwork.UnipartiteNetwork** —

*Type*.

An unipartite deterministic network.

#
** EcologicalNetwork.UnipartiteNetwork** —

*Method*.

Construct an unipartite network from a matrix of integer