---
output:
html_document: default
pdf_document: default
---
# 1. Single point location encoder
## 1.1 EncoderMultiLayerFeedForwardNN()
`NN(⋅) : ℝ^W -> ℝ^d` is a learnable neural network component which maps the input position embedding `PE(x) ∈ ℝ^W` into the location embedding `Enc(x) ∈ ℝ^d`. A common practice is to define `NN(⋅)` as a multi-layer perceptron, while Mac Aodha et al. (2019) adopted a more complex `NN(⋅)` which includes an initial fully connected layer, followed by a series of residual blocks. The purpose of `NN(⋅)` is to provide a learnable component for the location encoder, which captures the complex interaction between input locations and target labels.
### 1.1.1 Properties
- `input_dim` (int): Dimensionality of the input embeddings.
- `output_dim` (int): Dimensionality of the output of the network.
- `num_hidden_layers` (int): The number of hidden layers in the network. If set to 0, the network will be linear.
- `dropout_rate` (float, optional): The dropout rate for regularization. If None, dropout is not used.
- `hidden_dim` (int): The size of each hidden layer. Required if `num_hidden_layers` is greater than 0.
- `activation` (str): The type of activation function to use in the hidden layers. Common options are 'sigmoid', 'tanh', or 'relu'.
- `use_layernormalize` (bool): Determines whether to apply layer normalization after each hidden layer.
- `skip_connection` (bool): If set to True, enables skip connections between layers.
- `context_str` (str, optional): An optional string providing context for this instance, such as indicating its role within a larger model.
### 1.1.3 Methods
#### `__init__(input_dim, output_dim, num_hidden_layers=0, dropout_rate=None, hidden_dim=-1, activation="sigmoid", use_layernormalize=False, skip_connection=False, context_str=None)`
Constructor for the `EncoderMultiLayerFeedForwardNN` class.
- **Parameters**:
- `input_dim` (int): Dimensionality of the input embeddings.
- `output_dim` (int): Dimensionality of the output of the network.
- `num_hidden_layers` (int): Number of hidden layers in the network, set to 0 for a linear network.
- `dropout_rate` (float, optional): Dropout keep probability.
- `hidden_dim` (int): Size of the hidden layers.
- `activation` (str): Activation function to use ('tanh' or 'relu').
- `use_layernormalize` (bool): Whether to use layer normalization.
- `skip_connection` (bool): Whether to use skip connections.
- `context_str` (str, optional): Contextual string for the encoder.
#### `forward(input_tensor)`
Defines the forward pass of the network.
- **Parameters**:
- `input_tensor` (Tensor): A tensor with shape `[batch_size, ..., input_dim]`.
- **Returns**: A tensor with shape `[batch_size, ..., output_dim]`. Note that no non-linearity is applied to the output.
- **Raises**:
- `AssertionError`: If the last dimension of `input_tensor` does not match `input_dim`.
## 1.2 PositionEncoder()
`PE(⋅)` is the most important component which distinguishes different `Enc(x)`. Usually, `PE(⋅)` is a *deterministic* function which transforms location x into a W-dimension vector, so-called position embedding. The purpose of `PE(⋅)` is to do location feature normalization (Chu et al. 2019, Mac Aodha et al. 2019, Rao et al. 2020) and/or feature decomposition (Mai et al. 2020b, Zhong et al. 2020) so that the output `PE(x)` is more learning-friendly for `NN(⋅)`. In Table 1 we further classify different `Enc(x)` into four sub-categories based on their `PE(⋅)`: discretization-based, direct, sinusoidal, and sinusoidal multi-scale location encoder. Each of them will be discussed in detail below.
### 1.2.1 Properties
- `spa_embed_dim` (int): The dimension of the output spatial relation embedding.
- `coord_dim` (int): The dimensionality of space (e.g., 2 for 2D, 3 for 3D).
- `frequency_num` (int): The number of different frequencies/wavelengths for the sinusoidal functions.
- `max_radius` (float): The largest context radius the model can handle.
- `min_radius` (float): The smallest context radius considered by the model.
- `freq_init` (str): Method to initialize the frequency list ('random' or 'geometric').
- `ffn` (nn.Module, optional): A feedforward neural network module to be applied to the embeddings.
- `device` (str): The device to which tensors will be moved ('cuda' or 'cpu').
### 1.2.2 Methods
### `get_activation_function(activation, context_str)`
- **Parameters**:
- `activation`: A string that specifies the type of activation function to retrieve.
- `context_str`: A string that provides context for the error message if the activation function is not recognized.
- **Returns**: An activation function object from the `torch.nn` module.
- **Description**: Retrieves an activation function object based on the specified `activation` string. It supports 'leakyrelu', 'relu', 'sigmoid', and 'tanh'. If the specified activation is not recognized, it raises an exception with a context-specific error message.
- **Exceptions**: Raises an `Exception` with the message `"{context_str} activation not recognized."` if the specified activation function is not one of the supported options.
#### `cal_freq_list(freq_init, frequency_num, max_radius, min_radius)`
- **Parameters**:
- `freq_init`: A string that specifies the initialization method for frequencies ('random' or 'geometric').
- `frequency_num`: An integer representing the number of frequencies to generate.
- `max_radius`: A float representing the maximum radius, used as the upper bound for random initialization or the geometric sequence's start point.
- `min_radius`: A float representing the minimum radius, used as the geometric sequence's end point.
- **Returns**: A NumPy array `freq_list` containing the list of frequencies initialized as per the method specified by `freq_init`.
- **Description**: Calculates a list of frequencies based on the initialization method specified. If `freq_init` is 'random', it generates `frequency_num` random frequencies, each multiplied by `max_radius`. If `freq_init` is 'geometric', it generates a list of frequencies based on a geometric progression from `min_radius` to `max_radius` with `frequency_num` elements.
- **Exceptions**: None explicitly raised, but if `frequency_num` is less than 1, it may cause an error in the geometric initialization logic.
#### `cal_freq_mat()`
Generates a matrix of frequencies for encoding.
- **Returns**: A frequency matrix (`np.array`) for use in positional encoding.
#### `cal_input_dim()`
Computes the dimension of the encoded spatial relation embedding based on the frequency and coordinate dimensions.
- **Returns**: The input dimension (int) of the encoder.
#### `cal_elementwise_angle(coord, cur_freq)`
Calculates the angle for each coordinate and frequency, to be used in the sinusoidal functions.
- **Parameters**:
- `coord`: The coordinate value (`deltaX` or `deltaY`).
- `cur_freq`: The current frequency being processed.
- **Returns**: The calculated angle (float).
#### `cal_coord_embed(coords_tuple)`
Encodes a tuple of coordinates into a sinusoidal embedding.
- **Parameters**:
- `coords_tuple`: A tuple of coordinate values.
- **Returns**: A list of sinusoidal embeddings (`list`).
#### `forward(coords)`
Abstract method for transforming spatial coordinates into embeddings. Must be implemented by subclasses.
- **Parameters**:
- `coords`: Spatial coordinates to encode.
- **Raises**:
- `NotImplementedError`: If the method is not overridden by a subclass.
#### `visualize_embed_cosine`
Visualizes the cosine similarity of embeddings on a 2D plot.
- **Parameters**:
- `embed`: Embedding vector with shape `(spa_embed_dim, 1)`.
- `module`: The model module containing the embedding layers.
- `layername`: Specifies the layer name for which the embeddings are visualized (`"input_emb"` or `"output_emb"`).
- `coords`: Coordinates for the embeddings.
- `extent`: Extent of the plot area.
- `centerpt`: (Optional) The center point to highlight.
- `xy_list`: (Optional) List of points to plot.
- `pt_size`: (Optional) Size of the points.
- `polygon`: (Optional) Polygon to outline on the plot.
- `img_path`: (Optional) Path to save the plot image.
#### `get_coords`
Generates a grid of coordinates within a specified extent.
- **Parameters**:
- `extent`: The bounding box for the coordinate grid.
- `interval`: The spacing between points in the grid.
#### `map_id2geo`
Plots geographical locations based on their IDs.
- **Parameters**:
- `place2geo`: A mapping from place IDs to geographical coordinates.
#### `visualize_encoder`
Visualizes the output of an encoder layer for a given set of coordinates.
- **Parameters**:
- `module`: The model module containing the encoder.
- `layername`: Specifies the encoder layer (`"input_emb"` or `"output_emb"`).
- `coords`: Coordinates for visualization.
- `extent`: Extent of the plot area.
- `num_ch`: Number of channels to visualize.
- `img_path`: (Optional) Path to save the visualization.
#### `spa_enc_embed_clustering`
Performs spatial encoding embedding clustering and visualization.
- **Parameters**:
- `module`: The model module to use for forward pass.
- `num_cluster`: Number of clusters for the agglomerative clustering.
- `extent`: Extent of the plot area.
- `interval`: Interval between points in the grid.
- `coords`: Coordinates for clustering.
- `tsne_comp`: Number of components for t-SNE reduction.
#### `make_enc_map`
Creates a map visualization based on encoder cluster labels.
- **Parameters**:
- `cluster_labels`: Cluster labels for each point in the grid.
- `num_cluster`: Number of clusters.
- `extent`: Extent of the plot area.
- `margin`: Margin around the plot area.
- `xy_list`: (Optional) List of points to plot.
- `polygon`: (Optional) Polygon to outline on the plot.
- `usa_gdf`: (Optional) GeoDataFrame for the USA map.
- `coords_color`: (Optional) Color for the coordinates.
- `colorbar`: (Optional) Flag to display a color bar.
- `img_path`: (Optional) Path to save the map image.
- `xlabel`, `ylabel`: (Optional) Labels for the x and y axes.
#### `explode`
Converts a GeoDataFrame with MultiPolygons into a GeoDataFrame with Polygons.
- **Parameters**:
- `indata`: Input GeoDataFrame or file path.
#### `get_pts_in_box`
Filters points within a specified bounding box.
- **Parameters**:
- `place2geo`: A mapping from place IDs to geographical coordinates.
- `extent`: The bounding box for filtering.
#### `load_USA_geojson`
Loads and projects the USA mainland GeoJSON to the EPSG:2163 projection system.
- **Parameters**:
- `us_geojson_file`: Path to the USA GeoJSON file.
#### `get_projected_mainland_USA_states`
Loads and projects mainland USA states from a GeoJSON file to the EPSG:2163 projection system.
- **Parameters**:
- `us_states_geojson_file`: Path to the USA states GeoJSON file.
#### `read2idIndexFile`
Reads an entity or relation to ID mapping file.
- **Parameters**:
- `Index2idFilePath`: Path to the file containing the mappings.
#### `reverse_dict`
Reverses a dictionary mapping.
- **Parameters**:
- `iri2id`: The dictionary to reverse.
#### `get_node_mode`
Determines the mode (type) of a node based on the provided mappings.
- **Parameters**:
- `node_maps`: A mapping of node types to their IDs.
- `node_id`: The ID of the node to determine the mode for.
#### `path_embedding_compute`
Computes the embedding for a path between nodes.
- **Parameters**:
- `path_dec`: The path decoder.
- `
# 2. Aggregation location encoder