From 0653245d60de31fe70a70633fca734b4744f5d47 Mon Sep 17 00:00:00 2001 From: CalebBunch Date: Tue, 11 Feb 2025 19:20:03 -0500 Subject: [PATCH 1/8] add JAX GIN --- GraphIsomorphismNetwork/gin.py | 408 ++++++++++++++++++++++++++++++++ GraphIsomorphismNetwork/load.py | 152 ++++++++++++ 2 files changed, 560 insertions(+) create mode 100644 GraphIsomorphismNetwork/gin.py create mode 100644 GraphIsomorphismNetwork/load.py diff --git a/GraphIsomorphismNetwork/gin.py b/GraphIsomorphismNetwork/gin.py new file mode 100644 index 0000000..e0b1444 --- /dev/null +++ b/GraphIsomorphismNetwork/gin.py @@ -0,0 +1,408 @@ +# https://github.com/weihua916/powerful-gnns/blob/master/models/graphcnn.py + +import jax +import math +import optax +import numpy as np +import jax.numpy as jnp +import flax.linen as nn +from typing import Callable, Dict, List, Tuple +from flax.training import train_state + +from torch_geometric.data import Data, DataLoader, data +from load import load_dataset_new, get_paths + +class MLP(nn.Module): + """ + num_layers: number of layers in the neural networks (EXCLUDING the input layer). If num_layers=1, this reduces to linear model. + input_dim: dimensionality of input features + hidden_dim: dimensionality of hidden units at ALL layers + output_dim: number of classes for prediction + train: indicates whether MLP is training or not + """ + + num_layers: int + input_dim: int + hidden_dim: int + output_dim: int + train: bool + + def setup(self) -> None: + if self.num_layers == 1: + self.linear = nn.Dense(self.output_dim) + else: + self.linears = [nn.Dense(self.output_dim) if layer == (self.num_layers - 1) else + nn.Dense(self.hidden_dim) for layer in range(self.num_layers)] + self.batch_norms = [nn.BatchNorm() for layer in range(self.num_layers - 1)] + + def __call__(self, x: jnp.ndarray) -> jnp.ndarray: + h = x + if self.num_layers == 1: + return self.linear(h) + else: + for i in range(self.num_layers - 1): + h = nn.relu(self.batch_norms[i](self.linears[i](h), use_running_average=not self.train)) + return self.linears[self.num_layers - 1](h) + +class GIN(nn.Module): + """ + num_layers: number of layers in the neural networks (INCLUDING the input layer) + num_mlp_layers: number of layers in mlps (EXCLUDING the input layer) + input_dim: dimensionality of input features + hidden_dim: dimensionality of hidden units at ALL layers + output_dim: number of classes for prediction + final_dropout: dropout ratio on the final linear layer + learn_eps: If True, learn epsilon to distinguish center nodes from neighboring nodes. If False, aggregate neighbors and center nodes altogether. + neighbor_pooling_type: how to aggregate neighbors (mean, average, or max) + graph_pooling_type: how to aggregate entire nodes in a graph (mean, average) + train: boolean which indicates whether or not the model is training + """ + + num_layers: int + num_mlp_layers: int + input_dim: int + hidden_dim: int + output_dim: int + final_dropout: float + learn_eps: bool + neighbor_pooling_type: str + graph_pooling_type: str + train: bool + + def setup(self) -> None: + self.mlps = [MLP(self.num_mlp_layers, self.input_dim, self.hidden_dim, self.hidden_dim, self.train) if layer == 0 else + MLP(self.num_mlp_layers, self.hidden_dim, self.hidden_dim, self.hidden_dim, self.train) for layer in range(self.num_layers - 1)] + + self.batch_norms = [nn.BatchNorm() for _ in range(self.num_layers - 1)] + self.eps = self.param("eps", nn.initializers.zeros, (self.num_layers - 1,)) + + self.linear_layers = [nn.Dense(self.output_dim) for _ in range(self.num_layers)] + self.dropout_layer = nn.Dropout(rate=self.final_dropout) + + def __preprocess_graphpool(self, graph_batch: jnp.ndarray) -> jnp.ndarray: + + start_idx = [0] + for i, graph in enumerate(graph_batch): + edgelist, node_features, adjlist = graph + start_idx.append(start_idx[i] + len(adjlist)) + + idx = [] + elem = [] + for i, graph in enumerate(graph_batch): + edgelist, node_features, adjlist = graph + if self.graph_pooling_type == "average": + elem.extend([1.0 / len(adjlist)] * len(adjlist)) + else: + elem.extend([1] * len(adjlist[i].keys())) + + idx.extend([[i, j] for j in range(start_idx[i], start_idx[i + 1], 1)]) + + elem = jnp.array(np.array(elem)) + idx = jnp.array(np.array(idx)) + graph_pool = jnp.zeros((len(graph_batch), start_idx[-1])) + graph_pool = graph_pool.at[idx[:, 0], idx[:, 1]].set(elem) + + return graph_pool + + + def __preprocess_neighbors_maxpool(self, graph_batch: jnp.ndarray) -> jnp.ndarray: + + max_degree = -math.inf + for graph in graph_batch: + edgelist, node_features, adjlist = graph + max_degree = max(max_degree, len(adjlist[0][1])) + + padded_neighbor_list = [] + idx = [0] + for i, graph in enumerate(graph_batch): + edgelist, node_features, adjlist = graph + adjlist = [adjlist] + + idx.append(idx[i] + len(adjlist)) + padded_neighbors = [] + curr = 0 + for vertex, adjacent in adjlist[i]: + pad = [n + idx[i] for n in adjacent] + pad.extend([-1] * (max_degree - len(pad))) + + if not self.learn_eps: + pad.append(curr + idx[i]) + + padded_neighbors.append(pad) + + curr += 1 + + padded_neighbor_list.extend(padded_neighbors) + + padded_neighbor_list = jnp.array(padded_neighbor_list) + return padded_neighbor_list + + def __preprocess_neighbors_sumavepool(self, graph_batch: jnp.ndarray) -> jnp.ndarray: + adjlist = graph_batch[2] + + edge_mat_list = [] + idx = [0] + for i, graph in enumerate(graph_batch): + edgelist, node_features, _, labels = graph + idx.append(idx[i] + len(adjlist[i].keys())) + transposed = jnp.transpose(graph) + edge_mat_list.append(transposed + idx[i]) + + adj_block_idx = jnp.concatenate(edge_mat_list, axis=1) + adj_block_elem = jnp.ones(adj_block_idx.shape[1]) + + if not self.learn_eps: + num_nodes = idx[-1] + self_loop_edge = jnp.array(np.array([jnp.arange(num_nodes), jnp.arange(num_nodes)])) + elem = jnp.ones(num_nodes) + adj_block_idx = jnp.concatenate([adj_block_idx, self_loop_edge], 1) + adj_block_elem = jnp.concatenate([adj_block_elem, elem], 0) + + adj_block = jnp.zeros((idx[-1], idx[-1])) + adj_block = adj_block.at[adj_block_idx[0], adj_block_idx[1]].set(adj_block_elem) + + return adj_block + + + def maxpool(self, h: jnp.ndarray, padded_neighbor_list: jnp.ndarray) -> jnp.ndarray: + d = jnp.min(h, axis=0)[0] + h_d = jnp.concatenate([h, d.reshape(1, -1)]) + pooled = jnp.max(h_d[padded_neighbor_list], axis=1)[0] + return pooled + + def next_layer(self, h: jnp.ndarray, layer: int, padded_neighbor_list: jnp.ndarray = None, adj_block: jnp.ndarray = None) -> float: + if self.neighbor_pooling_type == "max": + pooled = self.maxpool(h, padded_neighbor_list) + else: + pooled = adj_block @ h + if self.neighbor_pooling_type == "average": + degree = adj_block @ jnp.ones((adj_block.shape[0], 1)) + pooled = pooled / degree + + if self.learn_eps: + pooled = pooled + (1 + self.eps[layer]) * h + + pooled_rep = self.mlps[layer](pooled) + h = nn.relu(self.batch_norms[layer](pooled_rep, use_running_average=not self.train)) + + return h + + def __call__(self, graph_batch: jnp.ndarray, train: bool = True) -> jnp.ndarray: + + # graph_batch: [[edgelist1, node_features1, adjlist1] + # [edgelist2, node_features2, adjlist2]] + + graph_batch = [graph_batch] + + x = jnp.concatenate(jnp.array([graph[1] for graph in graph_batch]), axis=0) + + graph_pool = self.__preprocess_graphpool(graph_batch) + + if self.neighbor_pooling_type == "max": + padded_neighbor_list = self.__preprocess_neighbors_maxpool(graph_batch) + else: + adj_block = self.__preprocess_neighbors_sumavepool(graph_batch) + + hidden_rep = [x] + h = x + for layer in range(self.num_layers - 1): + if self.neighbor_pooling_type == "max": + h = self.next_layer(h, layer, padded_neighbor_list=padded_neighbor_list) + elif self.neighbor_pooling_type != "max" and self.learn_eps: + h = self.next_layer(h, layer, adj_block=adj_block) + hidden_rep.append(h) + + score_over_layer = 0.0 + + for layer, h in enumerate(hidden_rep): + pooled_h = h @ graph_pool + out = self.linear_layers[layer](pooled_h) + score_over_layer += self.dropout_layer(out, deterministic=not train) + + return score_over_layer + +def cross_entropy_loss(logits: jnp.ndarray, labels: jnp.ndarray) -> jnp.ndarray: + log_probs = jax.nn.log_softmax(logits) + loss = -jnp.sum(labels * log_probs, axis=-1) + return jnp.mean(loss) + +class TrainState(train_state.TrainState): + batch_stats: Dict + +def create_train_state(key, model: GIN, learning_rate, dummy_graph, dummy_label): + variables = model.init(key, dummy_graph) + + params = variables["params"] + batch_stats = variables["batch_stats"] + + tx = optax.adamw(learning_rate=learning_rate, weight_decay=1e-5) + + return TrainState.create( + apply_fn=model, + params=params, + tx=tx, + batch_stats=batch_stats + ) + +def apply_loss_function(params, batch_stats, model, graph_batch: jnp.ndarray, batch_labels: jnp.ndarray, rng: jax.random.PRNGKey, train: bool = True) -> Tuple[jnp.ndarray, Dict]: + variables = {"params": params, "batch_stats": batch_stats} + logits, new_model_state = model.apply( + variables, + graph_batch, + train=train, + mutable=["batch_stats"], + rngs={"dropout": rng} + ) + loss = cross_entropy_loss(logits, batch_labels) + return loss, new_model_state + +@jax.jit +def train_step(state, batch, rng): + graph_batch, batch_labels = batch + dropout_rng, new_rng = jax.random.split(rng) + + grad_fn = jax.value_and_grad(apply_loss_function, has_aux=True) + (loss, new_model_state), grads = grad_fn( + state.params, state.batch_stats, state.apply_fn, graph_batch, batch_labels, dropout_rng, True + ) + + new_state = state.apply_gradients( + grads=grads, + batch_stats=new_model_state["batch_stats"] + ) + + return new_state, loss, new_rng + + +@jax.jit +def eval_step(state, batch): + graph_batch, batch_labels = batch + variables = {"params": state.params, "batch_stats": state.batch_stats} + + logits = state.apply_fn( + variables, + graph_batch, + train=False + ) + + loss = cross_entropy_loss(logits, batch_labels) + predictions = jnp.argmax(logits, axis=-1) + true_labels = jnp.argmax(batch_labels, axis=-1) + accuracy = jnp.mean(predictions == true_labels) + + return loss, accuracy + +def train(model: GIN, train_data, test_data, rng, learning_rate=1e-3, epochs=10): + + dummy_graph = train_data[0][0] + dummy_label = train_data[0][1] + + state = create_train_state(rng, model, learning_rate, dummy_graph, dummy_label) + + for epoch in range(1, epochs + 1): + epoch_loss = 0.0 + + for batch in train_data: + state, loss, rng = train_step(state, batch, rng) + epoch_loss += loss + + avg_train_loss = epoch_loss / len(train_data) + + + test_losses = [] + test_accuracies = [] + for batch in test_data: + loss, accuracy = eval_step(state, batch) + test_losses.append(loss) + test_accuracies.append(accuracy) + + avg_test_loss = jnp.mean(jnp.array(test_losses)) + avg_test_accuracy = jnp.mean(jnp.array(test_accuracies)) + + jax.debug.print(f"Epoch: {epoch}") + jax.debug.print(f"Train Loss: {avg_train_loss:.4f}") + jax.debug.print(f"Test Loss: {avg_test_loss:.4f}") + jax.debug.print(f"Test Accuracy: {avg_test_accuracy:.4f}") + + return state + +def edgelist_to_adjlist(edgelist: jnp.ndarray) -> List: + neighbors = {} + + if edgelist.shape[0] == 2: + edgelist = jnp.reshape(edgelist, (edgelist.shape[1], 2)) + + for u, v in edgelist: + u, v = int(u), int(v) + neighbors.setdefault(u, []).append(v) + neighbors.setdefault(v, []).append(u) + + max_degree = max([len(v) for v in neighbors.values()]) + for k, v in neighbors.items(): + if len(v) < max_degree: + neighbors[k].extend([-1 for _ in range(max_degree - len(v))]) + + return [(k, v) for k, v in neighbors.items()] + +def main(): + paths = get_paths(edgelist=True) + data_loader, num_features, num_classes = load_dataset_new(paths) + + train_data = [] + test_data = [] + for idx, batch in enumerate(data_loader): + edge_index = jnp.array(batch.edge_index.to("cpu")) + node_features = jnp.array(batch.x.to("cpu")) + labels = jnp.array(batch.y.to("cpu")) + adjlist = edgelist_to_adjlist(edge_index) + + jax.debug.print(f"edge_idx: {edge_index.shape}, node_features: {node_features.shape}, labels: {labels.shape}, adjlist: {len(adjlist)},{len(adjlist[0])},{len(adjlist[0][1])}") + + train_data.append([[edge_index, node_features, adjlist], labels]) + + """ + if idx < int(len(data_loader) * 0.9): + train_data.append([[edge_index, [node_features], [adjlist]], labels]) + else: + test_data.append([[edge_index, [node_features], [adjlist]], labels]) + """ + + rng = jax.random.PRNGKey(0) + + model = GIN( + num_layers=4, + num_mlp_layers=8, + input_dim=num_features, + hidden_dim=int(num_features * 1.5), + output_dim=num_classes, + final_dropout=0.5, + learn_eps=True, + neighbor_pooling_type="max", + graph_pooling_type="average", + train=True + ) + + """ + jax.debug.print(f"Training with:") + jax.debug.print(f"Edge index shape: {train_data[0][0].shape}") + jax.debug.print(f"Node features shape: {train_data[0][1][0].shape}") + jax.debug.print(f"Adjlist: {len(train_data[0][2])}, {len(train_data[0][2][0])}, {len(train_data[0][2][0][1])}") + """ + + final_state = train(model, train_data, test_data, rng) + + test_losses = [] + test_accuracies = [] + for batch in test_data: + loss, accuracy = eval_step(final_state, batch) + test_losses.append(loss) + test_accuracies.append(accuracy) + + final_test_loss = jnp.mean(jnp.array(test_losses)) + final_test_accuracy = jnp.mean(jnp.array(test_accuracies)) + jax.debug.print(f"\nFinal Results:") + jax.debug.print(f"Test Loss: {final_test_loss:.4f}") + jax.debug.print(f"Test Accuracy: {final_test_accuracy:.4f}") + +if __name__ == "__main__": + main() diff --git a/GraphIsomorphismNetwork/load.py b/GraphIsomorphismNetwork/load.py new file mode 100644 index 0000000..288c772 --- /dev/null +++ b/GraphIsomorphismNetwork/load.py @@ -0,0 +1,152 @@ +import torch +import shutil +import numpy as np +from pathlib import Path +import pandas as pd +from torch.utils import data +from torch_geometric.data import Data, DataLoader + +device = torch.device("cuda" if torch.cuda.is_available() else "cpu") + +def load_dataset_new(paths: list[str]) -> tuple: + """ + Loads the dataset using the new data loader and conversion methods. + Returns a DataLoader, number of features, and number of classes. + """ + num_features, num_classes = 0, 2 # binary classification + max_edgelist, max_nodes = 0, 0 + + # id: [edgelist, features] + files = {} + + labels = None + for path in sorted(paths): + if "edgelist" in str(path).split("/")[-1]: + # add file id to file_ids lists + curr_id = int((str(path).split("/")[-1]).split("_")[0]) + print(f"Loading edgelist from: {str(path)}") + edges = pd.read_csv(path, header=None).values.astype(np.int32) + max_edgelist = edges.shape[0] if edges.shape[0] > max_edgelist else max_edgelist + edge_index = torch.tensor(edges, dtype=torch.long).t().contiguous() + if curr_id not in files: + files[curr_id] = [edge_index, None] + else: + curr_edge, curr_features = files[curr_id] + files[curr_id] = [edge_index, curr_features] + + elif "node_names" in str(path): + curr_id = int((str(path).split("/")[-1]).split("_")[0]) + + print(f"Loading node features from: {str(path)}") + node_features = np.delete(np.delete(pd.read_csv(path, header=None).values, 0, axis=0), 1, axis=1).astype(np.int32) + if curr_id not in files: + files[curr_id] = [None, node_features] + else: + curr_edge, curr_features = files[curr_id] + files[curr_id] = [curr_edge, node_features] + + num_features = node_features.shape[1] if node_features.shape[1] > num_features else num_features + max_nodes = node_features.shape[0] if node_features.shape[0] > max_nodes else max_nodes + + elif "samplekey" in str(path): + print(f"Loading labels from: {str(path)}") + labels = pd.read_csv(path, header=None) + elif "removed" in str(path): + print(f"Disconnected Nodes File Found at: {str(path)}") + print(f"SKIPPING FILE: {str(path)}") + # TODO: do we want to feed this into the network? + + print(f"Max number of features: {num_features}") + print(f"Number of classes: {num_classes}") + print(f"Largest edge_list: {max_edgelist}") + print(f"Largest number of nodes: {max_nodes}") + + data_set = [] + for file_id, v in files.items(): + edges, feature_vector = v + + # pad node feature vectors with 0s + x = torch.tensor(np.pad(feature_vector, ((0, max_nodes - feature_vector.shape[0]), (0, 0))), dtype=torch.float) + if file_id in labels[0].values: + y = torch.tensor(labels.loc[labels[labels[0] == file_id].index[0], 12]) + else: + print(f"{file_id} not found in labels") + + if torch.max(edges) >= x.shape[0]: + print("Edgelist is referencing a node that does not have a corresponding feature vector") + continue + + print(f"Creating Data object from file with id: {file_id}") + data = Data(x=x, edge_index=edges, y=y).to(device) + data_set.append(data) + + # Create a dataloader + print(f"Creating dataloader with data set of size: {len(data_set)}") + data_loader = DataLoader(data_set, batch_size=1, shuffle=True) + print(f"DataLoader created successfully with batch size: {data_loader.batch_size}") + + return data_loader, num_features, num_classes + +def get_paths(edgelist=False) -> list[str]: + data_dir = Path(__file__).resolve().parent / "data" + data_dir = data_dir / "newset" if edgelist else data_dir + print(f"Collecting file paths from directory: {data_dir}") + return list([str(path) for path in data_dir.iterdir()]) + +def adjmat_to_edgelist(adjmat_df: np.ndarray) -> list: + """ + Converts adjacency matrix to an edge list. + """ + edges = [] + print("Converting adjacency matrix to edge list...") + for i in range(adjmat_df.shape[0]): + for j in range(adjmat_df.shape[1]): + if adjmat_df[i, j] != 0: + edges.append([i, j]) + print("Edge list created with", len(edges), "edges.") + return edges + +def save_edgelist(edge_list: list[list[int]], file_path: str) -> None: + """ + Saves the edge list to a CSV file. + """ + print("Saving edge list to CSV file...") + df = pd.DataFrame(edge_list, columns=["Source", "Target"]) + df.to_csv(file_path, index=False) + print(f"Edge list saved to {file_path}") + +def convert_data_to_edgelists(paths: list[str]): + edgelist_dir = Path(__file__).resolve().parent.parent / "data" / "edgelists" + for path in paths: + adjmat = pd.read_csv(path, header=None).values + print(f"Converting adjacency matrix for path: {path}") + edge_list = adjmat_to_edgelist(adjmat) + file_name = Path(path).name + save_edgelist(edge_list, edgelist_dir / file_name) + +def convert_data_to_edgelists(): + paths = get_paths() + edgelist_dir = Path(__file__).resolve().parent.parent / "data" / "edgelists" + edgelist_dir.mkdir(parents=True, exist_ok=True) + for path in paths: + if "adjacency_matrix" in str(path): + adjmat = pd.read_csv(path, header=None).values + print(f"Converting adjacency matrix for path: {path} to edgelist") + edge_list = adjmat_to_edgelist(adjmat) + file_name = "".join([i for i in Path(path).stem if i in "1234567890"]) + "_edgelist" + ".csv" + save_edgelist(edge_list, edgelist_dir / file_name) + else: + print(f"Copying non-adjacency matrix file: {path}") + shutil.copy(path, edgelist_dir / Path(path).name) + +if __name__ == "__main__": + """ + NOTE: the function call below will attempt to read adjmat files and convert them to edgelists + It should be used to generate a few edgelist for testing the load_dataset_new function + """ + # convert_data_to_edgelists() + """ + The function call below reads the files in the edgelist directory and constructs a dataloader + """ + # load_dataset_new(get_paths(edgelist=True)) + pass From 19b80fe78cef65d1072eacacee006b4f167372f8 Mon Sep 17 00:00:00 2001 From: CalebBunch Date: Mon, 24 Feb 2025 15:55:08 -0500 Subject: [PATCH 2/8] working jax GIN --- GraphIsomorphismNetwork/gin.py | 408 ----------------------------- GraphIsomorphismNetwork/jax_gin.py | 281 ++++++++++++++++++++ GraphIsomorphismNetwork/load.py | 2 +- 3 files changed, 282 insertions(+), 409 deletions(-) delete mode 100644 GraphIsomorphismNetwork/gin.py create mode 100644 GraphIsomorphismNetwork/jax_gin.py diff --git a/GraphIsomorphismNetwork/gin.py b/GraphIsomorphismNetwork/gin.py deleted file mode 100644 index e0b1444..0000000 --- a/GraphIsomorphismNetwork/gin.py +++ /dev/null @@ -1,408 +0,0 @@ -# https://github.com/weihua916/powerful-gnns/blob/master/models/graphcnn.py - -import jax -import math -import optax -import numpy as np -import jax.numpy as jnp -import flax.linen as nn -from typing import Callable, Dict, List, Tuple -from flax.training import train_state - -from torch_geometric.data import Data, DataLoader, data -from load import load_dataset_new, get_paths - -class MLP(nn.Module): - """ - num_layers: number of layers in the neural networks (EXCLUDING the input layer). If num_layers=1, this reduces to linear model. - input_dim: dimensionality of input features - hidden_dim: dimensionality of hidden units at ALL layers - output_dim: number of classes for prediction - train: indicates whether MLP is training or not - """ - - num_layers: int - input_dim: int - hidden_dim: int - output_dim: int - train: bool - - def setup(self) -> None: - if self.num_layers == 1: - self.linear = nn.Dense(self.output_dim) - else: - self.linears = [nn.Dense(self.output_dim) if layer == (self.num_layers - 1) else - nn.Dense(self.hidden_dim) for layer in range(self.num_layers)] - self.batch_norms = [nn.BatchNorm() for layer in range(self.num_layers - 1)] - - def __call__(self, x: jnp.ndarray) -> jnp.ndarray: - h = x - if self.num_layers == 1: - return self.linear(h) - else: - for i in range(self.num_layers - 1): - h = nn.relu(self.batch_norms[i](self.linears[i](h), use_running_average=not self.train)) - return self.linears[self.num_layers - 1](h) - -class GIN(nn.Module): - """ - num_layers: number of layers in the neural networks (INCLUDING the input layer) - num_mlp_layers: number of layers in mlps (EXCLUDING the input layer) - input_dim: dimensionality of input features - hidden_dim: dimensionality of hidden units at ALL layers - output_dim: number of classes for prediction - final_dropout: dropout ratio on the final linear layer - learn_eps: If True, learn epsilon to distinguish center nodes from neighboring nodes. If False, aggregate neighbors and center nodes altogether. - neighbor_pooling_type: how to aggregate neighbors (mean, average, or max) - graph_pooling_type: how to aggregate entire nodes in a graph (mean, average) - train: boolean which indicates whether or not the model is training - """ - - num_layers: int - num_mlp_layers: int - input_dim: int - hidden_dim: int - output_dim: int - final_dropout: float - learn_eps: bool - neighbor_pooling_type: str - graph_pooling_type: str - train: bool - - def setup(self) -> None: - self.mlps = [MLP(self.num_mlp_layers, self.input_dim, self.hidden_dim, self.hidden_dim, self.train) if layer == 0 else - MLP(self.num_mlp_layers, self.hidden_dim, self.hidden_dim, self.hidden_dim, self.train) for layer in range(self.num_layers - 1)] - - self.batch_norms = [nn.BatchNorm() for _ in range(self.num_layers - 1)] - self.eps = self.param("eps", nn.initializers.zeros, (self.num_layers - 1,)) - - self.linear_layers = [nn.Dense(self.output_dim) for _ in range(self.num_layers)] - self.dropout_layer = nn.Dropout(rate=self.final_dropout) - - def __preprocess_graphpool(self, graph_batch: jnp.ndarray) -> jnp.ndarray: - - start_idx = [0] - for i, graph in enumerate(graph_batch): - edgelist, node_features, adjlist = graph - start_idx.append(start_idx[i] + len(adjlist)) - - idx = [] - elem = [] - for i, graph in enumerate(graph_batch): - edgelist, node_features, adjlist = graph - if self.graph_pooling_type == "average": - elem.extend([1.0 / len(adjlist)] * len(adjlist)) - else: - elem.extend([1] * len(adjlist[i].keys())) - - idx.extend([[i, j] for j in range(start_idx[i], start_idx[i + 1], 1)]) - - elem = jnp.array(np.array(elem)) - idx = jnp.array(np.array(idx)) - graph_pool = jnp.zeros((len(graph_batch), start_idx[-1])) - graph_pool = graph_pool.at[idx[:, 0], idx[:, 1]].set(elem) - - return graph_pool - - - def __preprocess_neighbors_maxpool(self, graph_batch: jnp.ndarray) -> jnp.ndarray: - - max_degree = -math.inf - for graph in graph_batch: - edgelist, node_features, adjlist = graph - max_degree = max(max_degree, len(adjlist[0][1])) - - padded_neighbor_list = [] - idx = [0] - for i, graph in enumerate(graph_batch): - edgelist, node_features, adjlist = graph - adjlist = [adjlist] - - idx.append(idx[i] + len(adjlist)) - padded_neighbors = [] - curr = 0 - for vertex, adjacent in adjlist[i]: - pad = [n + idx[i] for n in adjacent] - pad.extend([-1] * (max_degree - len(pad))) - - if not self.learn_eps: - pad.append(curr + idx[i]) - - padded_neighbors.append(pad) - - curr += 1 - - padded_neighbor_list.extend(padded_neighbors) - - padded_neighbor_list = jnp.array(padded_neighbor_list) - return padded_neighbor_list - - def __preprocess_neighbors_sumavepool(self, graph_batch: jnp.ndarray) -> jnp.ndarray: - adjlist = graph_batch[2] - - edge_mat_list = [] - idx = [0] - for i, graph in enumerate(graph_batch): - edgelist, node_features, _, labels = graph - idx.append(idx[i] + len(adjlist[i].keys())) - transposed = jnp.transpose(graph) - edge_mat_list.append(transposed + idx[i]) - - adj_block_idx = jnp.concatenate(edge_mat_list, axis=1) - adj_block_elem = jnp.ones(adj_block_idx.shape[1]) - - if not self.learn_eps: - num_nodes = idx[-1] - self_loop_edge = jnp.array(np.array([jnp.arange(num_nodes), jnp.arange(num_nodes)])) - elem = jnp.ones(num_nodes) - adj_block_idx = jnp.concatenate([adj_block_idx, self_loop_edge], 1) - adj_block_elem = jnp.concatenate([adj_block_elem, elem], 0) - - adj_block = jnp.zeros((idx[-1], idx[-1])) - adj_block = adj_block.at[adj_block_idx[0], adj_block_idx[1]].set(adj_block_elem) - - return adj_block - - - def maxpool(self, h: jnp.ndarray, padded_neighbor_list: jnp.ndarray) -> jnp.ndarray: - d = jnp.min(h, axis=0)[0] - h_d = jnp.concatenate([h, d.reshape(1, -1)]) - pooled = jnp.max(h_d[padded_neighbor_list], axis=1)[0] - return pooled - - def next_layer(self, h: jnp.ndarray, layer: int, padded_neighbor_list: jnp.ndarray = None, adj_block: jnp.ndarray = None) -> float: - if self.neighbor_pooling_type == "max": - pooled = self.maxpool(h, padded_neighbor_list) - else: - pooled = adj_block @ h - if self.neighbor_pooling_type == "average": - degree = adj_block @ jnp.ones((adj_block.shape[0], 1)) - pooled = pooled / degree - - if self.learn_eps: - pooled = pooled + (1 + self.eps[layer]) * h - - pooled_rep = self.mlps[layer](pooled) - h = nn.relu(self.batch_norms[layer](pooled_rep, use_running_average=not self.train)) - - return h - - def __call__(self, graph_batch: jnp.ndarray, train: bool = True) -> jnp.ndarray: - - # graph_batch: [[edgelist1, node_features1, adjlist1] - # [edgelist2, node_features2, adjlist2]] - - graph_batch = [graph_batch] - - x = jnp.concatenate(jnp.array([graph[1] for graph in graph_batch]), axis=0) - - graph_pool = self.__preprocess_graphpool(graph_batch) - - if self.neighbor_pooling_type == "max": - padded_neighbor_list = self.__preprocess_neighbors_maxpool(graph_batch) - else: - adj_block = self.__preprocess_neighbors_sumavepool(graph_batch) - - hidden_rep = [x] - h = x - for layer in range(self.num_layers - 1): - if self.neighbor_pooling_type == "max": - h = self.next_layer(h, layer, padded_neighbor_list=padded_neighbor_list) - elif self.neighbor_pooling_type != "max" and self.learn_eps: - h = self.next_layer(h, layer, adj_block=adj_block) - hidden_rep.append(h) - - score_over_layer = 0.0 - - for layer, h in enumerate(hidden_rep): - pooled_h = h @ graph_pool - out = self.linear_layers[layer](pooled_h) - score_over_layer += self.dropout_layer(out, deterministic=not train) - - return score_over_layer - -def cross_entropy_loss(logits: jnp.ndarray, labels: jnp.ndarray) -> jnp.ndarray: - log_probs = jax.nn.log_softmax(logits) - loss = -jnp.sum(labels * log_probs, axis=-1) - return jnp.mean(loss) - -class TrainState(train_state.TrainState): - batch_stats: Dict - -def create_train_state(key, model: GIN, learning_rate, dummy_graph, dummy_label): - variables = model.init(key, dummy_graph) - - params = variables["params"] - batch_stats = variables["batch_stats"] - - tx = optax.adamw(learning_rate=learning_rate, weight_decay=1e-5) - - return TrainState.create( - apply_fn=model, - params=params, - tx=tx, - batch_stats=batch_stats - ) - -def apply_loss_function(params, batch_stats, model, graph_batch: jnp.ndarray, batch_labels: jnp.ndarray, rng: jax.random.PRNGKey, train: bool = True) -> Tuple[jnp.ndarray, Dict]: - variables = {"params": params, "batch_stats": batch_stats} - logits, new_model_state = model.apply( - variables, - graph_batch, - train=train, - mutable=["batch_stats"], - rngs={"dropout": rng} - ) - loss = cross_entropy_loss(logits, batch_labels) - return loss, new_model_state - -@jax.jit -def train_step(state, batch, rng): - graph_batch, batch_labels = batch - dropout_rng, new_rng = jax.random.split(rng) - - grad_fn = jax.value_and_grad(apply_loss_function, has_aux=True) - (loss, new_model_state), grads = grad_fn( - state.params, state.batch_stats, state.apply_fn, graph_batch, batch_labels, dropout_rng, True - ) - - new_state = state.apply_gradients( - grads=grads, - batch_stats=new_model_state["batch_stats"] - ) - - return new_state, loss, new_rng - - -@jax.jit -def eval_step(state, batch): - graph_batch, batch_labels = batch - variables = {"params": state.params, "batch_stats": state.batch_stats} - - logits = state.apply_fn( - variables, - graph_batch, - train=False - ) - - loss = cross_entropy_loss(logits, batch_labels) - predictions = jnp.argmax(logits, axis=-1) - true_labels = jnp.argmax(batch_labels, axis=-1) - accuracy = jnp.mean(predictions == true_labels) - - return loss, accuracy - -def train(model: GIN, train_data, test_data, rng, learning_rate=1e-3, epochs=10): - - dummy_graph = train_data[0][0] - dummy_label = train_data[0][1] - - state = create_train_state(rng, model, learning_rate, dummy_graph, dummy_label) - - for epoch in range(1, epochs + 1): - epoch_loss = 0.0 - - for batch in train_data: - state, loss, rng = train_step(state, batch, rng) - epoch_loss += loss - - avg_train_loss = epoch_loss / len(train_data) - - - test_losses = [] - test_accuracies = [] - for batch in test_data: - loss, accuracy = eval_step(state, batch) - test_losses.append(loss) - test_accuracies.append(accuracy) - - avg_test_loss = jnp.mean(jnp.array(test_losses)) - avg_test_accuracy = jnp.mean(jnp.array(test_accuracies)) - - jax.debug.print(f"Epoch: {epoch}") - jax.debug.print(f"Train Loss: {avg_train_loss:.4f}") - jax.debug.print(f"Test Loss: {avg_test_loss:.4f}") - jax.debug.print(f"Test Accuracy: {avg_test_accuracy:.4f}") - - return state - -def edgelist_to_adjlist(edgelist: jnp.ndarray) -> List: - neighbors = {} - - if edgelist.shape[0] == 2: - edgelist = jnp.reshape(edgelist, (edgelist.shape[1], 2)) - - for u, v in edgelist: - u, v = int(u), int(v) - neighbors.setdefault(u, []).append(v) - neighbors.setdefault(v, []).append(u) - - max_degree = max([len(v) for v in neighbors.values()]) - for k, v in neighbors.items(): - if len(v) < max_degree: - neighbors[k].extend([-1 for _ in range(max_degree - len(v))]) - - return [(k, v) for k, v in neighbors.items()] - -def main(): - paths = get_paths(edgelist=True) - data_loader, num_features, num_classes = load_dataset_new(paths) - - train_data = [] - test_data = [] - for idx, batch in enumerate(data_loader): - edge_index = jnp.array(batch.edge_index.to("cpu")) - node_features = jnp.array(batch.x.to("cpu")) - labels = jnp.array(batch.y.to("cpu")) - adjlist = edgelist_to_adjlist(edge_index) - - jax.debug.print(f"edge_idx: {edge_index.shape}, node_features: {node_features.shape}, labels: {labels.shape}, adjlist: {len(adjlist)},{len(adjlist[0])},{len(adjlist[0][1])}") - - train_data.append([[edge_index, node_features, adjlist], labels]) - - """ - if idx < int(len(data_loader) * 0.9): - train_data.append([[edge_index, [node_features], [adjlist]], labels]) - else: - test_data.append([[edge_index, [node_features], [adjlist]], labels]) - """ - - rng = jax.random.PRNGKey(0) - - model = GIN( - num_layers=4, - num_mlp_layers=8, - input_dim=num_features, - hidden_dim=int(num_features * 1.5), - output_dim=num_classes, - final_dropout=0.5, - learn_eps=True, - neighbor_pooling_type="max", - graph_pooling_type="average", - train=True - ) - - """ - jax.debug.print(f"Training with:") - jax.debug.print(f"Edge index shape: {train_data[0][0].shape}") - jax.debug.print(f"Node features shape: {train_data[0][1][0].shape}") - jax.debug.print(f"Adjlist: {len(train_data[0][2])}, {len(train_data[0][2][0])}, {len(train_data[0][2][0][1])}") - """ - - final_state = train(model, train_data, test_data, rng) - - test_losses = [] - test_accuracies = [] - for batch in test_data: - loss, accuracy = eval_step(final_state, batch) - test_losses.append(loss) - test_accuracies.append(accuracy) - - final_test_loss = jnp.mean(jnp.array(test_losses)) - final_test_accuracy = jnp.mean(jnp.array(test_accuracies)) - jax.debug.print(f"\nFinal Results:") - jax.debug.print(f"Test Loss: {final_test_loss:.4f}") - jax.debug.print(f"Test Accuracy: {final_test_accuracy:.4f}") - -if __name__ == "__main__": - main() diff --git a/GraphIsomorphismNetwork/jax_gin.py b/GraphIsomorphismNetwork/jax_gin.py new file mode 100644 index 0000000..034e533 --- /dev/null +++ b/GraphIsomorphismNetwork/jax_gin.py @@ -0,0 +1,281 @@ +import jax +import jax.numpy as jnp +from flax import linen as nn +from flax.training import train_state +from load import get_paths#, load_dataset_new +import optax +from pathlib import Path +import pandas as pd +import numpy as np +import time + +#Dense -> BatchNorm -> ReLU -> Dense. +class MLP(nn.Module): + hidden_dim: int + + @nn.compact + def __call__(self, x, training: bool): + x = nn.Dense(2 * self.hidden_dim)(x) + x = nn.BatchNorm(use_running_average=not training)(x) + x = nn.relu(x) + x = nn.Dense(self.hidden_dim)(x) + return x + +# Define a GIN convolution layer= x_i' = MLP((1+eps)*x_i + sum_{j in N(i)} x_j) +class GINConv(nn.Module): + hidden_dim: int + train_eps: bool = True + + @nn.compact + def __call__(self, x, senders, receivers, training: bool): + mlp = MLP(hidden_dim=self.hidden_dim) + # Learnable epsilon + if self.train_eps: + eps = self.param("eps", lambda rng: jnp.zeros(())) + else: + eps = 0.0 + # Aggregate neighbor features using segment_sum. + aggregated = jax.ops.segment_sum(x[senders], receivers, num_segments=x.shape[0]) + out = mlp((1 + eps) * x + aggregated, training=training) + return out + +class GIN(nn.Module): + in_channels: int + hidden_channels: int + out_channels: int + num_layers: int + dropout_rate: float = 0.5 + train_eps: bool = True + + @nn.compact + def __call__(self, x, edge_index, batch, training: bool): + senders, receivers = edge_index # edge_index is a tuple: (senders, receivers) + for _ in range(self.num_layers): + x = GINConv(hidden_dim=self.hidden_channels, train_eps=self.train_eps)( + x, senders, receivers, training=training + ) + x = nn.BatchNorm(use_running_average=not training)(x) + x = nn.relu(x) + + # Global add pooling: sum node features per graph. + x = jax.ops.segment_sum(x, batch, num_segments=1) + + # Two-layer MLP for graph-level output. + x = nn.Dense(self.hidden_channels)(x) + x = nn.LayerNorm()(x) + x = nn.relu(x) + x = nn.Dropout(rate=self.dropout_rate)(x, deterministic=not training) + x = nn.Dense(self.out_channels)(x) + return jax.nn.log_softmax(x, axis=-1) + +#hold params +class TrainState(train_state.TrainState): + batch_stats: dict + +#implement optimizer using optax +def create_train_state(rng, model, learning_rate, sample_input): + variables = model.init( + rng, + sample_input["x"], + sample_input["edge_index"], + sample_input["batch"], + training=True, + ) + tx = optax.adam(learning_rate) + return TrainState.create( + apply_fn=model.apply, + params=variables["params"], + tx=tx, + batch_stats=variables.get("batch_stats", {}) + ) + +# Defining training step +@jax.jit +def train_step(state, batch, dropout_rng): + def loss_fn(params): + variables = {"params": params, "batch_stats": state.batch_stats} + logits, new_model_state = state.apply_fn( + variables, + batch["x"], + batch["edge_index"], + batch["batch"], + training=True, + mutable=["batch_stats"], + rngs={"dropout": dropout_rng}, + ) + # Negative log-likelihood loss: + labels = batch["y"] + nll = -jnp.mean(jnp.take_along_axis(logits, labels[:, None], axis=-1).squeeze()) + return nll, new_model_state + + grad_fn = jax.value_and_grad(loss_fn, has_aux=True) + (loss, new_model_state), grads = grad_fn(state.params) + state = state.apply_gradients(grads=grads, batch_stats=new_model_state["batch_stats"]) + return state, loss + +#Eval step +@jax.jit +def test_step(state, batch): + variables = {"params": state.params, "batch_stats": state.batch_stats} + logits = state.apply_fn( + variables, + batch["x"], + batch["edge_index"], + batch["batch"], + training=False, + mutable=False + ) + pred = jnp.argmax(logits, axis=-1) + correct = jnp.sum(pred == batch["y"]) + return correct + + +def load_dataset_new(paths: list[str]) -> tuple: + start_load = time.perf_counter() + + """ + Loads the dataset and returns a list of samples (each a dict with keys: + "x", "edge_index", "batch", "y", and "num_graphs"), + along with the number of features and number of classes. + + This version is adapted for use with JAX/Flax. + """ + num_features, num_classes = 0, 2 # binary classification + max_edgelist, max_nodes = 0, 0 + + # Dictionary to hold data for each file id: {file_id: [edge_index, node_features]} + files = {} + labels = None + for path in sorted(paths): + fname = Path(path).name + if "edgelist" in fname: + # Expect file names like "_edgelist..." + curr_id = int(fname.split("_")[0]) + print(f"Loading edgelist from: {path}") + edges = pd.read_csv(path, header=None).values.astype(np.int32) + max_edgelist = edges.shape[0] if edges.shape[0] > max_edgelist else max_edgelist + edge_index = edges.T # shape: (2, num_edges) + if curr_id not in files: + files[curr_id] = [edge_index, None] + else: + _, curr_features = files[curr_id] + files[curr_id] = [edge_index, curr_features] + elif "node_names" in fname: + curr_id = int(fname.split("_")[0]) + print(f"Loading node features from: {path}") + node_features = pd.read_csv(path, header=None).values + # Remove first row and second column as in your original code. + node_features = np.delete(np.delete(node_features, 0, axis=0), 1, axis=1).astype(np.int32) + if curr_id not in files: + files[curr_id] = [None, node_features] + else: + curr_edge, _ = files[curr_id] + files[curr_id] = [curr_edge, node_features] + num_features = max(num_features, node_features.shape[1]) + max_nodes = max(max_nodes, node_features.shape[0]) + elif "samplekey" in fname: + print(f"Loading labels from: {path}") + labels = pd.read_csv(path, header=None) + elif "removed" in fname: + print(f"Skipping removed file: {path}") + + print(f"Max number of features: {num_features}") + print(f"Number of classes: {num_classes}") + print(f"Largest edgelist (number of edges): {max_edgelist}") + print(f"Largest number of nodes: {max_nodes}") + + data_set = [] + for file_id, (edges, feature_vector) in files.items(): + if feature_vector is None or edges is None: + print(f"Incomplete data for file id {file_id}, skipping.") + continue + + # Pad node feature matrix to have max_nodes rows. + x = np.pad(feature_vector, ((0, max_nodes - feature_vector.shape[0]), (0, 0)), + mode="constant").astype(np.float32) + if file_id in labels[0].values: + y_val = int(labels.loc[labels[0] == file_id].iloc[0, 12]) + else: + print(f"Label for file id {file_id} not found; skipping.") + continue + + if np.max(edges) >= x.shape[0]: + print("Edge list references a node outside the padded feature matrix; skipping.") + continue + + print(f"Creating data sample from file id: {file_id}") + sample = { + "x": jnp.array(x), # shape: [num_nodes, num_features] + "edge_index": (jnp.array(edges[0], dtype=jnp.int32), + jnp.array(edges[1], dtype=jnp.int32)), + "y": jnp.array([y_val], dtype=jnp.int32), # shape: [1] + "batch": jnp.zeros(x.shape[0], dtype=jnp.int32), # all nodes in graph 0 + "num_graphs": 1 + } + data_set.append(sample) + print(f"Created dataset with {len(data_set)} samples.") + + end_load = time.perf_counter() + print("\n\n") + print(f"Time to load data: {(end_load - start_load):.6f} seconds") + + return data_set, num_features, num_classes + +#Training loop +def main(): + paths = get_paths(edgelist=True) # Now collects files from /content/Dataset + data_loader, num_features, num_classes = load_dataset_new(paths) + + # Create the model. + model = GIN( + in_channels=num_features, + hidden_channels=int(num_features * 1.5), + out_channels=num_classes, + num_layers=4, + dropout_rate=0.5 + ) + + rng = jax.random.PRNGKey(0) + dropout_rng, init_rng = jax.random.split(rng) + + # Use the first sample as a sample input for initialization. + sample_input = data_loader[0] + state = create_train_state(init_rng, model, learning_rate=0.01, sample_input=sample_input) + + start_train = time.perf_counter() + + num_epochs = 10 #Adjust epochs here + for epoch in range(1, num_epochs + 1): + epoch_start = time.perf_counter() + + epoch_loss = 0.0 + total_graphs = 0 + # Training loop + for batch in data_loader: + dropout_rng, new_dropout_rng = jax.random.split(dropout_rng) + state, loss = train_step(state, batch, dropout_rng) + epoch_loss += loss * batch["num_graphs"] + total_graphs += batch["num_graphs"] + avg_loss = epoch_loss / total_graphs + + # Eval loop + total_correct = 0 + total_samples = 0 + for batch in data_loader: + correct = test_step(state, batch) + total_correct += correct + total_samples += batch["num_graphs"] + train_acc = total_correct / total_samples + + epoch_end = time.perf_counter() + print(f"\nTime for epoch {epoch} was {(epoch_end - epoch_start):.6f} seconds") + print(f"Epoch: {epoch:03d}, Loss: {loss:.4f}, Train Acc: {train_acc:.4f}") + + + end_train = time.perf_counter() + + print(f"\nTotal training time : {(end_train - start_train):.6f} seconds") + print(f"Average time per epoch: {((end_train - start_train) / 10.0):.6f} seconds") + +if __name__ == "__main__": + main() diff --git a/GraphIsomorphismNetwork/load.py b/GraphIsomorphismNetwork/load.py index 288c772..dce066e 100644 --- a/GraphIsomorphismNetwork/load.py +++ b/GraphIsomorphismNetwork/load.py @@ -88,7 +88,7 @@ def load_dataset_new(paths: list[str]) -> tuple: return data_loader, num_features, num_classes def get_paths(edgelist=False) -> list[str]: - data_dir = Path(__file__).resolve().parent / "data" + data_dir = Path(__file__).resolve().parent.parent / "data" data_dir = data_dir / "newset" if edgelist else data_dir print(f"Collecting file paths from directory: {data_dir}") return list([str(path) for path in data_dir.iterdir()]) From 9003799802b5d84d7949d8cab4189dbbe24889cb Mon Sep 17 00:00:00 2001 From: CalebBunch Date: Mon, 24 Feb 2025 16:06:39 -0500 Subject: [PATCH 3/8] some cleanups --- GraphIsomorphismNetwork/jax_gin.py | 112 ++--------------------------- GraphIsomorphismNetwork/load.py | 97 ++++++++++++++++++++++++- 2 files changed, 101 insertions(+), 108 deletions(-) diff --git a/GraphIsomorphismNetwork/jax_gin.py b/GraphIsomorphismNetwork/jax_gin.py index 034e533..2f6f068 100644 --- a/GraphIsomorphismNetwork/jax_gin.py +++ b/GraphIsomorphismNetwork/jax_gin.py @@ -2,14 +2,14 @@ import jax.numpy as jnp from flax import linen as nn from flax.training import train_state -from load import get_paths#, load_dataset_new +from load import get_paths, load_dataset_jax import optax from pathlib import Path import pandas as pd import numpy as np import time -#Dense -> BatchNorm -> ReLU -> Dense. +# Dense -> BatchNorm -> ReLU -> Dense. class MLP(nn.Module): hidden_dim: int @@ -68,11 +68,9 @@ def __call__(self, x, edge_index, batch, training: bool): x = nn.Dense(self.out_channels)(x) return jax.nn.log_softmax(x, axis=-1) -#hold params class TrainState(train_state.TrainState): batch_stats: dict -#implement optimizer using optax def create_train_state(rng, model, learning_rate, sample_input): variables = model.init( rng, @@ -89,7 +87,6 @@ def create_train_state(rng, model, learning_rate, sample_input): batch_stats=variables.get("batch_stats", {}) ) -# Defining training step @jax.jit def train_step(state, batch, dropout_rng): def loss_fn(params): @@ -103,7 +100,6 @@ def loss_fn(params): mutable=["batch_stats"], rngs={"dropout": dropout_rng}, ) - # Negative log-likelihood loss: labels = batch["y"] nll = -jnp.mean(jnp.take_along_axis(logits, labels[:, None], axis=-1).squeeze()) return nll, new_model_state @@ -113,7 +109,6 @@ def loss_fn(params): state = state.apply_gradients(grads=grads, batch_stats=new_model_state["batch_stats"]) return state, loss -#Eval step @jax.jit def test_step(state, batch): variables = {"params": state.params, "batch_stats": state.batch_stats} @@ -129,104 +124,10 @@ def test_step(state, batch): correct = jnp.sum(pred == batch["y"]) return correct - -def load_dataset_new(paths: list[str]) -> tuple: - start_load = time.perf_counter() - - """ - Loads the dataset and returns a list of samples (each a dict with keys: - "x", "edge_index", "batch", "y", and "num_graphs"), - along with the number of features and number of classes. - - This version is adapted for use with JAX/Flax. - """ - num_features, num_classes = 0, 2 # binary classification - max_edgelist, max_nodes = 0, 0 - - # Dictionary to hold data for each file id: {file_id: [edge_index, node_features]} - files = {} - labels = None - for path in sorted(paths): - fname = Path(path).name - if "edgelist" in fname: - # Expect file names like "_edgelist..." - curr_id = int(fname.split("_")[0]) - print(f"Loading edgelist from: {path}") - edges = pd.read_csv(path, header=None).values.astype(np.int32) - max_edgelist = edges.shape[0] if edges.shape[0] > max_edgelist else max_edgelist - edge_index = edges.T # shape: (2, num_edges) - if curr_id not in files: - files[curr_id] = [edge_index, None] - else: - _, curr_features = files[curr_id] - files[curr_id] = [edge_index, curr_features] - elif "node_names" in fname: - curr_id = int(fname.split("_")[0]) - print(f"Loading node features from: {path}") - node_features = pd.read_csv(path, header=None).values - # Remove first row and second column as in your original code. - node_features = np.delete(np.delete(node_features, 0, axis=0), 1, axis=1).astype(np.int32) - if curr_id not in files: - files[curr_id] = [None, node_features] - else: - curr_edge, _ = files[curr_id] - files[curr_id] = [curr_edge, node_features] - num_features = max(num_features, node_features.shape[1]) - max_nodes = max(max_nodes, node_features.shape[0]) - elif "samplekey" in fname: - print(f"Loading labels from: {path}") - labels = pd.read_csv(path, header=None) - elif "removed" in fname: - print(f"Skipping removed file: {path}") - - print(f"Max number of features: {num_features}") - print(f"Number of classes: {num_classes}") - print(f"Largest edgelist (number of edges): {max_edgelist}") - print(f"Largest number of nodes: {max_nodes}") - - data_set = [] - for file_id, (edges, feature_vector) in files.items(): - if feature_vector is None or edges is None: - print(f"Incomplete data for file id {file_id}, skipping.") - continue - - # Pad node feature matrix to have max_nodes rows. - x = np.pad(feature_vector, ((0, max_nodes - feature_vector.shape[0]), (0, 0)), - mode="constant").astype(np.float32) - if file_id in labels[0].values: - y_val = int(labels.loc[labels[0] == file_id].iloc[0, 12]) - else: - print(f"Label for file id {file_id} not found; skipping.") - continue - - if np.max(edges) >= x.shape[0]: - print("Edge list references a node outside the padded feature matrix; skipping.") - continue - - print(f"Creating data sample from file id: {file_id}") - sample = { - "x": jnp.array(x), # shape: [num_nodes, num_features] - "edge_index": (jnp.array(edges[0], dtype=jnp.int32), - jnp.array(edges[1], dtype=jnp.int32)), - "y": jnp.array([y_val], dtype=jnp.int32), # shape: [1] - "batch": jnp.zeros(x.shape[0], dtype=jnp.int32), # all nodes in graph 0 - "num_graphs": 1 - } - data_set.append(sample) - print(f"Created dataset with {len(data_set)} samples.") - - end_load = time.perf_counter() - print("\n\n") - print(f"Time to load data: {(end_load - start_load):.6f} seconds") - - return data_set, num_features, num_classes - -#Training loop def main(): - paths = get_paths(edgelist=True) # Now collects files from /content/Dataset - data_loader, num_features, num_classes = load_dataset_new(paths) + paths = get_paths(edgelist=True) + data_loader, num_features, num_classes = load_dataset_jax(paths) - # Create the model. model = GIN( in_channels=num_features, hidden_channels=int(num_features * 1.5), @@ -238,19 +139,17 @@ def main(): rng = jax.random.PRNGKey(0) dropout_rng, init_rng = jax.random.split(rng) - # Use the first sample as a sample input for initialization. sample_input = data_loader[0] state = create_train_state(init_rng, model, learning_rate=0.01, sample_input=sample_input) start_train = time.perf_counter() - num_epochs = 10 #Adjust epochs here + num_epochs = 10 for epoch in range(1, num_epochs + 1): epoch_start = time.perf_counter() epoch_loss = 0.0 total_graphs = 0 - # Training loop for batch in data_loader: dropout_rng, new_dropout_rng = jax.random.split(dropout_rng) state, loss = train_step(state, batch, dropout_rng) @@ -258,7 +157,6 @@ def main(): total_graphs += batch["num_graphs"] avg_loss = epoch_loss / total_graphs - # Eval loop total_correct = 0 total_samples = 0 for batch in data_loader: diff --git a/GraphIsomorphismNetwork/load.py b/GraphIsomorphismNetwork/load.py index dce066e..59f76b5 100644 --- a/GraphIsomorphismNetwork/load.py +++ b/GraphIsomorphismNetwork/load.py @@ -1,14 +1,109 @@ +import time import torch import shutil import numpy as np from pathlib import Path import pandas as pd +import jax.numpy as jnp from torch.utils import data from torch_geometric.data import Data, DataLoader device = torch.device("cuda" if torch.cuda.is_available() else "cpu") -def load_dataset_new(paths: list[str]) -> tuple: + +def load_dataset_jax(paths: list[str]) -> tuple: + start_load = time.perf_counter() + + """ + Loads the dataset and returns a list of samples (each a dict with keys: + "x", "edge_index", "batch", "y", and "num_graphs"), + along with the number of features and number of classes. + + This version is adapted for use with JAX/Flax. + """ + num_features, num_classes = 0, 2 + max_edgelist, max_nodes = 0, 0 + + # Dictionary to hold data for each file id: {file_id: [edge_index, node_features]} + files = {} + labels = None + for path in sorted(paths): + fname = Path(path).name + if "edgelist" in fname: + # Expect file names like "_edgelist..." + curr_id = int(fname.split("_")[0]) + print(f"Loading edgelist from: {path}") + edges = pd.read_csv(path, header=None).values.astype(np.int32) + max_edgelist = edges.shape[0] if edges.shape[0] > max_edgelist else max_edgelist + edge_index = edges.T # shape: (2, num_edges) + if curr_id not in files: + files[curr_id] = [edge_index, None] + else: + _, curr_features = files[curr_id] + files[curr_id] = [edge_index, curr_features] + elif "node_names" in fname: + curr_id = int(fname.split("_")[0]) + print(f"Loading node features from: {path}") + node_features = pd.read_csv(path, header=None).values + # Remove first row and second column as in your original code. + node_features = np.delete(np.delete(node_features, 0, axis=0), 1, axis=1).astype(np.int32) + if curr_id not in files: + files[curr_id] = [None, node_features] + else: + curr_edge, _ = files[curr_id] + files[curr_id] = [curr_edge, node_features] + num_features = max(num_features, node_features.shape[1]) + max_nodes = max(max_nodes, node_features.shape[0]) + elif "samplekey" in fname: + print(f"Loading labels from: {path}") + labels = pd.read_csv(path, header=None) + elif "removed" in fname: + print(f"Skipping removed file: {path}") + + print(f"Max number of features: {num_features}") + print(f"Number of classes: {num_classes}") + print(f"Largest edgelist (number of edges): {max_edgelist}") + print(f"Largest number of nodes: {max_nodes}") + + data_set = [] + for file_id, (edges, feature_vector) in files.items(): + if feature_vector is None or edges is None: + print(f"Incomplete data for file id {file_id}, skipping.") + continue + + # Pad node feature matrix to have max_nodes rows. + x = np.pad(feature_vector, ((0, max_nodes - feature_vector.shape[0]), (0, 0)), + mode="constant").astype(np.float32) + if file_id in labels[0].values: + y_val = int(labels.loc[labels[0] == file_id].iloc[0, 12]) + else: + print(f"Label for file id {file_id} not found; skipping.") + continue + + if np.max(edges) >= x.shape[0]: + print("Edge list references a node outside the padded feature matrix; skipping.") + continue + + print(f"Creating data sample from file id: {file_id}") + sample = { + "x": jnp.array(x), # shape: [num_nodes, num_features] + "edge_index": (jnp.array(edges[0], dtype=jnp.int32), + jnp.array(edges[1], dtype=jnp.int32)), + "y": jnp.array([y_val], dtype=jnp.int32), # shape: [1] + "batch": jnp.zeros(x.shape[0], dtype=jnp.int32), # all nodes in graph 0 + "num_graphs": 1 + } + data_set.append(sample) + print(f"Created dataset with {len(data_set)} samples.") + + end_load = time.perf_counter() + print("\n\n") + print(f"Time to load data: {(end_load - start_load):.6f} seconds") + + return data_set, num_features, num_classes + + +def load_dataset_torch(paths: list[str]) -> tuple: """ Loads the dataset using the new data loader and conversion methods. Returns a DataLoader, number of features, and number of classes. From 3578b48fc874d0e948f4da02c5dd756231e5bd04 Mon Sep 17 00:00:00 2001 From: CalebBunch Date: Tue, 25 Feb 2025 18:12:22 -0500 Subject: [PATCH 4/8] add save/load weights and logging --- .gitignore | 2 +- GraphIsomorphismNetwork/jax_gin.py | 74 ++++++++++++++++-- weights/checkpoint_10/_CHECKPOINT_METADATA | 1 + weights/checkpoint_10/_METADATA | 1 + weights/checkpoint_10/_sharding | 1 + .../d/ba5db6d052eb6079e606d173a2f6a367 | Bin 0 -> 1126 bytes weights/checkpoint_10/manifest.ocdbt | Bin 0 -> 114 bytes .../d/25767f20d50ea17a0acbf92d35827b41 | Bin 0 -> 586 bytes .../d/5df1b9d375f692f2e1a0a9d712a2b00b | Bin 0 -> 784 bytes .../d/692d476e3f288f450c6791f4959d60a0 | Bin 0 -> 760 bytes .../d/75c7c0f45bb546c5e4b44fffd001da51 | Bin 0 -> 171 bytes .../d/acf1c38d06333776815b5fea81531f2d | Bin 0 -> 1126 bytes .../ocdbt.process_0/manifest.ocdbt | Bin 0 -> 288 bytes 13 files changed, 71 insertions(+), 8 deletions(-) create mode 100644 weights/checkpoint_10/_CHECKPOINT_METADATA create mode 100644 weights/checkpoint_10/_METADATA create mode 100644 weights/checkpoint_10/_sharding create mode 100644 weights/checkpoint_10/d/ba5db6d052eb6079e606d173a2f6a367 create mode 100644 weights/checkpoint_10/manifest.ocdbt create mode 100644 weights/checkpoint_10/ocdbt.process_0/d/25767f20d50ea17a0acbf92d35827b41 create mode 100644 weights/checkpoint_10/ocdbt.process_0/d/5df1b9d375f692f2e1a0a9d712a2b00b create mode 100644 weights/checkpoint_10/ocdbt.process_0/d/692d476e3f288f450c6791f4959d60a0 create mode 100644 weights/checkpoint_10/ocdbt.process_0/d/75c7c0f45bb546c5e4b44fffd001da51 create mode 100644 weights/checkpoint_10/ocdbt.process_0/d/acf1c38d06333776815b5fea81531f2d create mode 100644 weights/checkpoint_10/ocdbt.process_0/manifest.ocdbt diff --git a/.gitignore b/.gitignore index 24c71f8..cd6e613 100644 --- a/.gitignore +++ b/.gitignore @@ -21,4 +21,4 @@ cfg_constructor/out **/.venv **/logdat -!**/demo_file_id.txt \ No newline at end of file +!**/demo_file_id.txt diff --git a/GraphIsomorphismNetwork/jax_gin.py b/GraphIsomorphismNetwork/jax_gin.py index 2f6f068..0323492 100644 --- a/GraphIsomorphismNetwork/jax_gin.py +++ b/GraphIsomorphismNetwork/jax_gin.py @@ -1,13 +1,33 @@ import jax import jax.numpy as jnp from flax import linen as nn -from flax.training import train_state +from flax.training import train_state, checkpoints from load import get_paths, load_dataset_jax import optax from pathlib import Path import pandas as pd import numpy as np import time +import os +import logging + +log_file = Path(__file__).resolve().parent.parent / "logs" / "gin_training.log" +log_file.parent.mkdir(parents=True, exist_ok=True) + +root_logger = logging.getLogger() +if root_logger.handlers: + for handler in root_logger.handlers[:]: + root_logger.removeHandler(handler) + +logging.basicConfig( + filename=log_file, + level=logging.INFO, + filemode="a", + format="%(asctime)s - %(levelname)s - %(message)s", + datefmt='%Y-%m-%d %H:%M:%S' +) + +logging.info("Starting GIN training...") # Dense -> BatchNorm -> ReLU -> Dense. class MLP(nn.Module): @@ -21,7 +41,7 @@ def __call__(self, x, training: bool): x = nn.Dense(self.hidden_dim)(x) return x -# Define a GIN convolution layer= x_i' = MLP((1+eps)*x_i + sum_{j in N(i)} x_j) +# Define a GIN convolution layer: x_i' = MLP((1+eps)*x_i + sum_{j in N(i)} x_j) class GINConv(nn.Module): hidden_dim: int train_eps: bool = True @@ -124,6 +144,34 @@ def test_step(state, batch): correct = jnp.sum(pred == batch["y"]) return correct +def save_model(state, checkpoint_dir, step): + os.makedirs(checkpoint_dir, exist_ok=True) + checkpoints.save_checkpoint( + ckpt_dir=checkpoint_dir, + target=state, + step=step, + overwrite=True + ) + msg = f"Model saved at step {step} to {checkpoint_dir}" + print(msg) + logging.info(msg) + +def load_model_if_exists(state, checkpoint_dir): + latest_ckpt = checkpoints.latest_checkpoint(checkpoint_dir) + if latest_ckpt: + state = checkpoints.restore_checkpoint( + ckpt_dir=checkpoint_dir, + target=state + ) + msg = f"Model restored from checkpoint: {latest_ckpt}" + print(msg) + logging.info(msg) + else: + msg = "No checkpoint found. Training from scratch." + print(msg) + logging.info(msg) + return state + def main(): paths = get_paths(edgelist=True) data_loader, num_features, num_classes = load_dataset_jax(paths) @@ -142,6 +190,10 @@ def main(): sample_input = data_loader[0] state = create_train_state(init_rng, model, learning_rate=0.01, sample_input=sample_input) + checkpoint_dir = Path(__file__).resolve().parent.parent / "weights" + + state = load_model_if_exists(state, checkpoint_dir) + start_train = time.perf_counter() num_epochs = 10 @@ -166,14 +218,22 @@ def main(): train_acc = total_correct / total_samples epoch_end = time.perf_counter() - print(f"\nTime for epoch {epoch} was {(epoch_end - epoch_start):.6f} seconds") - print(f"Epoch: {epoch:03d}, Loss: {loss:.4f}, Train Acc: {train_acc:.4f}") + msg1 = f"Time for epoch {epoch} was {(epoch_end - epoch_start):.6f} seconds" + msg2 = f"Epoch: {epoch:03d}, Loss: {avg_loss:.4f}, Train Acc: {train_acc:.4f}" + print(msg1) + print(msg2) + logging.info(msg1) + logging.info(msg2) + save_model(state, checkpoint_dir, epoch) end_train = time.perf_counter() - - print(f"\nTotal training time : {(end_train - start_train):.6f} seconds") - print(f"Average time per epoch: {((end_train - start_train) / 10.0):.6f} seconds") + msg3 = f"Total training time : {(end_train - start_train):.6f} seconds" + msg4 = f"Average time per epoch: {((end_train - start_train) / num_epochs):.6f} seconds" + print(msg3) + print(msg4) + logging.info(msg3) + logging.info(msg4) if __name__ == "__main__": main() diff --git a/weights/checkpoint_10/_CHECKPOINT_METADATA b/weights/checkpoint_10/_CHECKPOINT_METADATA new file mode 100644 index 0000000..fb59619 --- /dev/null +++ b/weights/checkpoint_10/_CHECKPOINT_METADATA @@ -0,0 +1 @@ +{"item_handlers": "orbax.checkpoint._src.handlers.pytree_checkpoint_handler.PyTreeCheckpointHandler", "metrics": {}, "performance_metrics": {}, "init_timestamp_nsecs": 1740524978570038503, "commit_timestamp_nsecs": 1740524978910276226, "custom": {}} \ No newline at end of file diff --git a/weights/checkpoint_10/_METADATA b/weights/checkpoint_10/_METADATA new file mode 100644 index 0000000..4ac2dc4 --- /dev/null +++ b/weights/checkpoint_10/_METADATA @@ -0,0 +1 @@ +{"tree_metadata": {"('step',)": {"key_metadata": [{"key": "step", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'BatchNorm_0', 'bias')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'BatchNorm_0', 'scale')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'BatchNorm_1', 'bias')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "BatchNorm_1", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'BatchNorm_1', 'scale')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "BatchNorm_1", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'BatchNorm_2', 'bias')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "BatchNorm_2", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'BatchNorm_2', 'scale')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "BatchNorm_2", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'BatchNorm_3', 'bias')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "BatchNorm_3", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'BatchNorm_3', 'scale')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "BatchNorm_3", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'Dense_0', 'bias')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'Dense_0', 'kernel')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'Dense_1', 'bias')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'Dense_1', 'kernel')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'GINConv_0', 'MLP_0', 'BatchNorm_0', 'bias')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'GINConv_0', 'MLP_0', 'BatchNorm_0', 'scale')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'GINConv_0', 'MLP_0', 'Dense_0', 'bias')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'GINConv_0', 'MLP_0', 'Dense_0', 'kernel')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'GINConv_0', 'MLP_0', 'Dense_1', 'bias')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'GINConv_0', 'MLP_0', 'Dense_1', 'kernel')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'GINConv_0', 'eps')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "eps", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'GINConv_1', 'MLP_0', 'BatchNorm_0', 'bias')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'GINConv_1', 'MLP_0', 'BatchNorm_0', 'scale')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'GINConv_1', 'MLP_0', 'Dense_0', 'bias')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'GINConv_1', 'MLP_0', 'Dense_0', 'kernel')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'GINConv_1', 'MLP_0', 'Dense_1', 'bias')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'GINConv_1', 'MLP_0', 'Dense_1', 'kernel')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'GINConv_1', 'eps')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "eps", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'GINConv_2', 'MLP_0', 'BatchNorm_0', 'bias')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'GINConv_2', 'MLP_0', 'BatchNorm_0', 'scale')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'GINConv_2', 'MLP_0', 'Dense_0', 'bias')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'GINConv_2', 'MLP_0', 'Dense_0', 'kernel')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'GINConv_2', 'MLP_0', 'Dense_1', 'bias')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'GINConv_2', 'MLP_0', 'Dense_1', 'kernel')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'GINConv_2', 'eps')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "eps", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'GINConv_3', 'MLP_0', 'BatchNorm_0', 'bias')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'GINConv_3', 'MLP_0', 'BatchNorm_0', 'scale')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'GINConv_3', 'MLP_0', 'Dense_0', 'bias')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'GINConv_3', 'MLP_0', 'Dense_0', 'kernel')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'GINConv_3', 'MLP_0', 'Dense_1', 'bias')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'GINConv_3', 'MLP_0', 'Dense_1', 'kernel')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'GINConv_3', 'eps')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "eps", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'LayerNorm_0', 'bias')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "LayerNorm_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'LayerNorm_0', 'scale')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "LayerNorm_0", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'count')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "count", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'BatchNorm_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'BatchNorm_0', 'scale')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'BatchNorm_1', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "BatchNorm_1", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'BatchNorm_1', 'scale')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "BatchNorm_1", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'BatchNorm_2', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "BatchNorm_2", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'BatchNorm_2', 'scale')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "BatchNorm_2", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'BatchNorm_3', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "BatchNorm_3", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'BatchNorm_3', 'scale')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "BatchNorm_3", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'Dense_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'Dense_0', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'Dense_1', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'Dense_1', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'GINConv_0', 'MLP_0', 'BatchNorm_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'GINConv_0', 'MLP_0', 'BatchNorm_0', 'scale')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'GINConv_0', 'MLP_0', 'Dense_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'GINConv_0', 'MLP_0', 'Dense_0', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'GINConv_0', 'MLP_0', 'Dense_1', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'GINConv_0', 'MLP_0', 'Dense_1', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'GINConv_0', 'eps')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "eps", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'GINConv_1', 'MLP_0', 'BatchNorm_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'GINConv_1', 'MLP_0', 'BatchNorm_0', 'scale')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'GINConv_1', 'MLP_0', 'Dense_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'GINConv_1', 'MLP_0', 'Dense_0', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'GINConv_1', 'MLP_0', 'Dense_1', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'GINConv_1', 'MLP_0', 'Dense_1', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'GINConv_1', 'eps')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "eps", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'GINConv_2', 'MLP_0', 'BatchNorm_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'GINConv_2', 'MLP_0', 'BatchNorm_0', 'scale')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'GINConv_2', 'MLP_0', 'Dense_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'GINConv_2', 'MLP_0', 'Dense_0', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'GINConv_2', 'MLP_0', 'Dense_1', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'GINConv_2', 'MLP_0', 'Dense_1', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'GINConv_2', 'eps')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "eps", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'GINConv_3', 'MLP_0', 'BatchNorm_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'GINConv_3', 'MLP_0', 'BatchNorm_0', 'scale')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'GINConv_3', 'MLP_0', 'Dense_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'GINConv_3', 'MLP_0', 'Dense_0', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'GINConv_3', 'MLP_0', 'Dense_1', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'GINConv_3', 'MLP_0', 'Dense_1', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'GINConv_3', 'eps')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "eps", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'LayerNorm_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "LayerNorm_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'LayerNorm_0', 'scale')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "LayerNorm_0", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'BatchNorm_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'BatchNorm_0', 'scale')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'BatchNorm_1', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "BatchNorm_1", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'BatchNorm_1', 'scale')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "BatchNorm_1", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'BatchNorm_2', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "BatchNorm_2", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'BatchNorm_2', 'scale')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "BatchNorm_2", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'BatchNorm_3', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "BatchNorm_3", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'BatchNorm_3', 'scale')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "BatchNorm_3", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'Dense_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'Dense_0', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'Dense_1', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'Dense_1', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'GINConv_0', 'MLP_0', 'BatchNorm_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'GINConv_0', 'MLP_0', 'BatchNorm_0', 'scale')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'GINConv_0', 'MLP_0', 'Dense_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'GINConv_0', 'MLP_0', 'Dense_0', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'GINConv_0', 'MLP_0', 'Dense_1', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'GINConv_0', 'MLP_0', 'Dense_1', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'GINConv_0', 'eps')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "eps", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'GINConv_1', 'MLP_0', 'BatchNorm_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'GINConv_1', 'MLP_0', 'BatchNorm_0', 'scale')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'GINConv_1', 'MLP_0', 'Dense_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'GINConv_1', 'MLP_0', 'Dense_0', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'GINConv_1', 'MLP_0', 'Dense_1', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'GINConv_1', 'MLP_0', 'Dense_1', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'GINConv_1', 'eps')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "eps", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'GINConv_2', 'MLP_0', 'BatchNorm_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'GINConv_2', 'MLP_0', 'BatchNorm_0', 'scale')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'GINConv_2', 'MLP_0', 'Dense_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'GINConv_2', 'MLP_0', 'Dense_0', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'GINConv_2', 'MLP_0', 'Dense_1', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'GINConv_2', 'MLP_0', 'Dense_1', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'GINConv_2', 'eps')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "eps", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'GINConv_3', 'MLP_0', 'BatchNorm_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'GINConv_3', 'MLP_0', 'BatchNorm_0', 'scale')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'GINConv_3', 'MLP_0', 'Dense_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'GINConv_3', 'MLP_0', 'Dense_0', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'GINConv_3', 'MLP_0', 'Dense_1', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'GINConv_3', 'MLP_0', 'Dense_1', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'GINConv_3', 'eps')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "eps", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'LayerNorm_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "LayerNorm_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'LayerNorm_0', 'scale')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "LayerNorm_0", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '1')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "1", "key_type": 1}], "value_metadata": {"value_type": "None", "skip_deserialize": true}}, "('batch_stats', 'BatchNorm_0', 'mean')": {"key_metadata": [{"key": "batch_stats", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "mean", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('batch_stats', 'BatchNorm_0', 'var')": {"key_metadata": [{"key": "batch_stats", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "var", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('batch_stats', 'BatchNorm_1', 'mean')": {"key_metadata": [{"key": "batch_stats", "key_type": 2}, {"key": "BatchNorm_1", "key_type": 2}, {"key": "mean", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('batch_stats', 'BatchNorm_1', 'var')": {"key_metadata": [{"key": "batch_stats", "key_type": 2}, {"key": "BatchNorm_1", "key_type": 2}, {"key": "var", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('batch_stats', 'BatchNorm_2', 'mean')": {"key_metadata": [{"key": "batch_stats", "key_type": 2}, {"key": "BatchNorm_2", "key_type": 2}, {"key": "mean", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('batch_stats', 'BatchNorm_2', 'var')": {"key_metadata": [{"key": "batch_stats", "key_type": 2}, {"key": "BatchNorm_2", "key_type": 2}, {"key": "var", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('batch_stats', 'BatchNorm_3', 'mean')": {"key_metadata": [{"key": "batch_stats", "key_type": 2}, {"key": "BatchNorm_3", "key_type": 2}, {"key": "mean", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('batch_stats', 'BatchNorm_3', 'var')": {"key_metadata": [{"key": "batch_stats", "key_type": 2}, {"key": "BatchNorm_3", "key_type": 2}, {"key": "var", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('batch_stats', 'GINConv_0', 'MLP_0', 'BatchNorm_0', 'mean')": {"key_metadata": [{"key": "batch_stats", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "mean", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('batch_stats', 'GINConv_0', 'MLP_0', 'BatchNorm_0', 'var')": {"key_metadata": [{"key": "batch_stats", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "var", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('batch_stats', 'GINConv_1', 'MLP_0', 'BatchNorm_0', 'mean')": {"key_metadata": [{"key": "batch_stats", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "mean", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('batch_stats', 'GINConv_1', 'MLP_0', 'BatchNorm_0', 'var')": {"key_metadata": [{"key": "batch_stats", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "var", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('batch_stats', 'GINConv_2', 'MLP_0', 'BatchNorm_0', 'mean')": {"key_metadata": [{"key": "batch_stats", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "mean", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('batch_stats', 'GINConv_2', 'MLP_0', 'BatchNorm_0', 'var')": {"key_metadata": [{"key": "batch_stats", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "var", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('batch_stats', 'GINConv_3', 'MLP_0', 'BatchNorm_0', 'mean')": {"key_metadata": [{"key": "batch_stats", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "mean", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('batch_stats', 'GINConv_3', 'MLP_0', 'BatchNorm_0', 'var')": {"key_metadata": [{"key": "batch_stats", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "var", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}}, "use_zarr3": false, "store_array_data_equal_to_fill_value": true, "custom_metadata": null} \ No newline at end of file diff --git a/weights/checkpoint_10/_sharding b/weights/checkpoint_10/_sharding new file mode 100644 index 0000000..bb414b2 --- /dev/null +++ b/weights/checkpoint_10/_sharding @@ -0,0 +1 @@ +{"YmF0Y2hfc3RhdHMuQmF0Y2hOb3JtXzAubWVhbg==":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","YmF0Y2hfc3RhdHMuQmF0Y2hOb3JtXzAudmFy":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","YmF0Y2hfc3RhdHMuQmF0Y2hOb3JtXzEubWVhbg==":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","YmF0Y2hfc3RhdHMuQmF0Y2hOb3JtXzEudmFy":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","YmF0Y2hfc3RhdHMuQmF0Y2hOb3JtXzIubWVhbg==":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","YmF0Y2hfc3RhdHMuQmF0Y2hOb3JtXzIudmFy":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","YmF0Y2hfc3RhdHMuQmF0Y2hOb3JtXzMubWVhbg==":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","YmF0Y2hfc3RhdHMuQmF0Y2hOb3JtXzMudmFy":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","YmF0Y2hfc3RhdHMuR0lOQ29udl8wLk1MUF8wLkJhdGNoTm9ybV8wLm1lYW4=":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","YmF0Y2hfc3RhdHMuR0lOQ29udl8wLk1MUF8wLkJhdGNoTm9ybV8wLnZhcg==":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","YmF0Y2hfc3RhdHMuR0lOQ29udl8xLk1MUF8wLkJhdGNoTm9ybV8wLm1lYW4=":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","YmF0Y2hfc3RhdHMuR0lOQ29udl8xLk1MUF8wLkJhdGNoTm9ybV8wLnZhcg==":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","YmF0Y2hfc3RhdHMuR0lOQ29udl8yLk1MUF8wLkJhdGNoTm9ybV8wLm1lYW4=":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","YmF0Y2hfc3RhdHMuR0lOQ29udl8yLk1MUF8wLkJhdGNoTm9ybV8wLnZhcg==":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","YmF0Y2hfc3RhdHMuR0lOQ29udl8zLk1MUF8wLkJhdGNoTm9ybV8wLm1lYW4=":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","YmF0Y2hfc3RhdHMuR0lOQ29udl8zLk1MUF8wLkJhdGNoTm9ybV8wLnZhcg==":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAuY291bnQ=":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubXUuQmF0Y2hOb3JtXzAuYmlhcw==":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubXUuQmF0Y2hOb3JtXzAuc2NhbGU=":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubXUuQmF0Y2hOb3JtXzEuYmlhcw==":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubXUuQmF0Y2hOb3JtXzEuc2NhbGU=":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubXUuQmF0Y2hOb3JtXzIuYmlhcw==":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubXUuQmF0Y2hOb3JtXzIuc2NhbGU=":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubXUuQmF0Y2hOb3JtXzMuYmlhcw==":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubXUuQmF0Y2hOb3JtXzMuc2NhbGU=":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubXUuR0lOQ29udl8wLk1MUF8wLkJhdGNoTm9ybV8wLmJpYXM=":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubXUuR0lOQ29udl8wLk1MUF8wLkJhdGNoTm9ybV8wLnNjYWxl":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubXUuR0lOQ29udl8wLk1MUF8wLkRlbnNlXzAuYmlhcw==":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubXUuR0lOQ29udl8wLk1MUF8wLkRlbnNlXzAua2VybmVs":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubXUuR0lOQ29udl8wLk1MUF8wLkRlbnNlXzEuYmlhcw==":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubXUuR0lOQ29udl8wLk1MUF8wLkRlbnNlXzEua2VybmVs":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubXUuR0lOQ29udl8wLmVwcw==":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubXUuR0lOQ29udl8xLk1MUF8wLkJhdGNoTm9ybV8wLmJpYXM=":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubXUuR0lOQ29udl8xLk1MUF8wLkJhdGNoTm9ybV8wLnNjYWxl":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubXUuR0lOQ29udl8xLk1MUF8wLkRlbnNlXzAuYmlhcw==":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubXUuR0lOQ29udl8xLk1MUF8wLkRlbnNlXzAua2VybmVs":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubXUuR0lOQ29udl8xLk1MUF8wLkRlbnNlXzEuYmlhcw==":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubXUuR0lOQ29udl8xLk1MUF8wLkRlbnNlXzEua2VybmVs":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubXUuR0lOQ29udl8xLmVwcw==":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubXUuR0lOQ29udl8yLk1MUF8wLkJhdGNoTm9ybV8wLmJpYXM=":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubXUuR0lOQ29udl8yLk1MUF8wLkJhdGNoTm9ybV8wLnNjYWxl":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubXUuR0lOQ29udl8yLk1MUF8wLkRlbnNlXzAuYmlhcw==":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubXUuR0lOQ29udl8yLk1MUF8wLkRlbnNlXzAua2VybmVs":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubXUuR0lOQ29udl8yLk1MUF8wLkRlbnNlXzEuYmlhcw==":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubXUuR0lOQ29udl8yLk1MUF8wLkRlbnNlXzEua2VybmVs":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubXUuR0lOQ29udl8yLmVwcw==":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubXUuR0lOQ29udl8zLk1MUF8wLkJhdGNoTm9ybV8wLmJpYXM=":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubXUuR0lOQ29udl8zLk1MUF8wLkJhdGNoTm9ybV8wLnNjYWxl":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubXUuR0lOQ29udl8zLk1MUF8wLkRlbnNlXzAuYmlhcw==":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubXUuR0lOQ29udl8zLk1MUF8wLkRlbnNlXzAua2VybmVs":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubXUuR0lOQ29udl8zLk1MUF8wLkRlbnNlXzEuYmlhcw==":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubXUuR0lOQ29udl8zLk1MUF8wLkRlbnNlXzEua2VybmVs":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubXUuR0lOQ29udl8zLmVwcw==":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubXUuRGVuc2VfMC5iaWFz":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubXUuRGVuc2VfMC5rZXJuZWw=":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubXUuRGVuc2VfMS5iaWFz":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubXUuRGVuc2VfMS5rZXJuZWw=":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubXUuTGF5ZXJOb3JtXzAuYmlhcw==":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubXUuTGF5ZXJOb3JtXzAuc2NhbGU=":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubnUuQmF0Y2hOb3JtXzAuYmlhcw==":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubnUuQmF0Y2hOb3JtXzAuc2NhbGU=":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubnUuQmF0Y2hOb3JtXzEuYmlhcw==":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubnUuQmF0Y2hOb3JtXzEuc2NhbGU=":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubnUuQmF0Y2hOb3JtXzIuYmlhcw==":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubnUuQmF0Y2hOb3JtXzIuc2NhbGU=":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubnUuQmF0Y2hOb3JtXzMuYmlhcw==":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubnUuQmF0Y2hOb3JtXzMuc2NhbGU=":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubnUuR0lOQ29udl8wLk1MUF8wLkJhdGNoTm9ybV8wLmJpYXM=":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubnUuR0lOQ29udl8wLk1MUF8wLkJhdGNoTm9ybV8wLnNjYWxl":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubnUuR0lOQ29udl8wLk1MUF8wLkRlbnNlXzAuYmlhcw==":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubnUuR0lOQ29udl8wLk1MUF8wLkRlbnNlXzAua2VybmVs":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubnUuR0lOQ29udl8wLk1MUF8wLkRlbnNlXzEuYmlhcw==":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubnUuR0lOQ29udl8wLk1MUF8wLkRlbnNlXzEua2VybmVs":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubnUuR0lOQ29udl8wLmVwcw==":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubnUuR0lOQ29udl8xLk1MUF8wLkJhdGNoTm9ybV8wLmJpYXM=":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubnUuR0lOQ29udl8xLk1MUF8wLkJhdGNoTm9ybV8wLnNjYWxl":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubnUuR0lOQ29udl8xLk1MUF8wLkRlbnNlXzAuYmlhcw==":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubnUuR0lOQ29udl8xLk1MUF8wLkRlbnNlXzAua2VybmVs":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubnUuR0lOQ29udl8xLk1MUF8wLkRlbnNlXzEuYmlhcw==":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubnUuR0lOQ29udl8xLk1MUF8wLkRlbnNlXzEua2VybmVs":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubnUuR0lOQ29udl8xLmVwcw==":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubnUuR0lOQ29udl8yLk1MUF8wLkJhdGNoTm9ybV8wLmJpYXM=":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubnUuR0lOQ29udl8yLk1MUF8wLkJhdGNoTm9ybV8wLnNjYWxl":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubnUuR0lOQ29udl8yLk1MUF8wLkRlbnNlXzAuYmlhcw==":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubnUuR0lOQ29udl8yLk1MUF8wLkRlbnNlXzAua2VybmVs":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubnUuR0lOQ29udl8yLk1MUF8wLkRlbnNlXzEuYmlhcw==":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubnUuR0lOQ29udl8yLk1MUF8wLkRlbnNlXzEua2VybmVs":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubnUuR0lOQ29udl8yLmVwcw==":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubnUuR0lOQ29udl8zLk1MUF8wLkJhdGNoTm9ybV8wLmJpYXM=":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubnUuR0lOQ29udl8zLk1MUF8wLkJhdGNoTm9ybV8wLnNjYWxl":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubnUuR0lOQ29udl8zLk1MUF8wLkRlbnNlXzAuYmlhcw==":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubnUuR0lOQ29udl8zLk1MUF8wLkRlbnNlXzAua2VybmVs":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubnUuR0lOQ29udl8zLk1MUF8wLkRlbnNlXzEuYmlhcw==":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubnUuR0lOQ29udl8zLk1MUF8wLkRlbnNlXzEua2VybmVs":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubnUuR0lOQ29udl8zLmVwcw==":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubnUuRGVuc2VfMC5iaWFz":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubnUuRGVuc2VfMC5rZXJuZWw=":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubnUuRGVuc2VfMS5iaWFz":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubnUuRGVuc2VfMS5rZXJuZWw=":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubnUuTGF5ZXJOb3JtXzAuYmlhcw==":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","b3B0X3N0YXRlLjAubnUuTGF5ZXJOb3JtXzAuc2NhbGU=":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","c3RlcA==":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","cGFyYW1zLkJhdGNoTm9ybV8wLmJpYXM=":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","cGFyYW1zLkJhdGNoTm9ybV8wLnNjYWxl":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","cGFyYW1zLkJhdGNoTm9ybV8xLmJpYXM=":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","cGFyYW1zLkJhdGNoTm9ybV8xLnNjYWxl":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","cGFyYW1zLkJhdGNoTm9ybV8yLmJpYXM=":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","cGFyYW1zLkJhdGNoTm9ybV8yLnNjYWxl":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","cGFyYW1zLkJhdGNoTm9ybV8zLmJpYXM=":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","cGFyYW1zLkJhdGNoTm9ybV8zLnNjYWxl":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","cGFyYW1zLkRlbnNlXzAuYmlhcw==":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","cGFyYW1zLkRlbnNlXzAua2VybmVs":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","cGFyYW1zLkRlbnNlXzEuYmlhcw==":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","cGFyYW1zLkRlbnNlXzEua2VybmVs":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","cGFyYW1zLkdJTkNvbnZfMC5NTFBfMC5CYXRjaE5vcm1fMC5iaWFz":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","cGFyYW1zLkdJTkNvbnZfMC5NTFBfMC5CYXRjaE5vcm1fMC5zY2FsZQ==":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","cGFyYW1zLkdJTkNvbnZfMC5NTFBfMC5EZW5zZV8wLmJpYXM=":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","cGFyYW1zLkdJTkNvbnZfMC5NTFBfMC5EZW5zZV8wLmtlcm5lbA==":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","cGFyYW1zLkdJTkNvbnZfMC5NTFBfMC5EZW5zZV8xLmJpYXM=":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","cGFyYW1zLkdJTkNvbnZfMC5NTFBfMC5EZW5zZV8xLmtlcm5lbA==":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","cGFyYW1zLkdJTkNvbnZfMC5lcHM=":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","cGFyYW1zLkdJTkNvbnZfMS5NTFBfMC5CYXRjaE5vcm1fMC5iaWFz":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","cGFyYW1zLkdJTkNvbnZfMS5NTFBfMC5CYXRjaE5vcm1fMC5zY2FsZQ==":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","cGFyYW1zLkdJTkNvbnZfMS5NTFBfMC5EZW5zZV8wLmJpYXM=":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","cGFyYW1zLkdJTkNvbnZfMS5NTFBfMC5EZW5zZV8wLmtlcm5lbA==":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","cGFyYW1zLkdJTkNvbnZfMS5NTFBfMC5EZW5zZV8xLmJpYXM=":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","cGFyYW1zLkdJTkNvbnZfMS5NTFBfMC5EZW5zZV8xLmtlcm5lbA==":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","cGFyYW1zLkdJTkNvbnZfMS5lcHM=":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","cGFyYW1zLkdJTkNvbnZfMi5NTFBfMC5CYXRjaE5vcm1fMC5iaWFz":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","cGFyYW1zLkdJTkNvbnZfMi5NTFBfMC5CYXRjaE5vcm1fMC5zY2FsZQ==":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","cGFyYW1zLkdJTkNvbnZfMi5NTFBfMC5EZW5zZV8wLmJpYXM=":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","cGFyYW1zLkdJTkNvbnZfMi5NTFBfMC5EZW5zZV8wLmtlcm5lbA==":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","cGFyYW1zLkdJTkNvbnZfMi5NTFBfMC5EZW5zZV8xLmJpYXM=":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","cGFyYW1zLkdJTkNvbnZfMi5NTFBfMC5EZW5zZV8xLmtlcm5lbA==":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","cGFyYW1zLkdJTkNvbnZfMi5lcHM=":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","cGFyYW1zLkdJTkNvbnZfMy5NTFBfMC5CYXRjaE5vcm1fMC5iaWFz":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","cGFyYW1zLkdJTkNvbnZfMy5NTFBfMC5CYXRjaE5vcm1fMC5zY2FsZQ==":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","cGFyYW1zLkdJTkNvbnZfMy5NTFBfMC5EZW5zZV8wLmJpYXM=":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","cGFyYW1zLkdJTkNvbnZfMy5NTFBfMC5EZW5zZV8wLmtlcm5lbA==":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","cGFyYW1zLkdJTkNvbnZfMy5NTFBfMC5EZW5zZV8xLmJpYXM=":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","cGFyYW1zLkdJTkNvbnZfMy5NTFBfMC5EZW5zZV8xLmtlcm5lbA==":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","cGFyYW1zLkdJTkNvbnZfMy5lcHM=":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","cGFyYW1zLkxheWVyTm9ybV8wLmJpYXM=":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}","cGFyYW1zLkxheWVyTm9ybV8wLnNjYWxl":"{\"sharding_type\": \"SingleDeviceSharding\", \"device_str\": \"TFRT_CPU_0\"}"} \ No newline at end of file diff --git a/weights/checkpoint_10/d/ba5db6d052eb6079e606d173a2f6a367 b/weights/checkpoint_10/d/ba5db6d052eb6079e606d173a2f6a367 new file mode 100644 index 0000000000000000000000000000000000000000..4ac5cb2bf97ef2543a49a384cd249c0a91afee69 GIT binary patch literal 1126 zcmdHMZ*iWr&DXVhGV>U|7H;DAgw6LFC#7|3dH;d z+J^Ev>Uyd`EGa9_50qn&5SA2V7vUG<1!8s$WleDvc{N!e78K=Y2g)(9sxWdh@@W7G z1xZF}MqWlf5k@{{J|NZr3P~{X%JVQLC6**-#21$&mK5tbf!KceMY-_?dbz2IdHQ-) ziA6<;l?G*rMTSPk?w)?m`FUkPNnf9UcmpHj{DP8HJp;Yu{L;LV+|s1X#Ny)Q#GF*1 zQkT@c;?(TaqP)}`z0?9DW1qxIAg3U)C^5IVB(-1(Bd_416^y(~7zJ0X;9ap|5hE`{ zwNi3MXmW%$~E;8LVBy9+;n>Ct*7`eTl7mRJBFS)rppwK+BZ485nfHrYHuSwv!Jy zt>b8DsAy!Q2qZxW$OPJOXG)#j-6?fIHc+g=zInr?{k_lB_BB3Jt2@rI-%gcfe}nz( z^p^b`OD62^nC`#--3wzoT^@n`ZY`V+>Jkh0E?(NZ|J0qo`wvRw?kg;qzkkopTzi{6 z>+OE}+S)g6S-!6;R%t)XH4W=m2>K>VOtSP0)M`!S`M@M7xUlmQqfml@g^07F39}(j zvw#Xu^8^+VXF)r|Hi<^Vw&`=3FL*Y}YU%~A{9ye#=vwXvam9Vf`)xk5e%H>IvXxV8 z`S$hjD{rng!D)}R7gQ;oW!8JW;B{El^h5W8jy&$?Xt=pe@r2*;`MHq`mi2Bo6Kqgr zQ#;TXE?{S&_&Y4t*TL4?H-_5HqRZ=-hXkeP4 znS1Lb9*OsMPS_(~CKJ>m=_WtDbnzbM8+WIAmY-v}Dtx??K`irr^e*#zI%)+x8E@GQ zH}6}!DD1zXy@Y7agN@f(-V57V+jPt6G^{)Q)LJcJ=JIu37dJC3XX+BmJN7hjqr$C) N`t@9zvo^V|0sv||p>O~I literal 0 HcmV?d00001 diff --git a/weights/checkpoint_10/manifest.ocdbt b/weights/checkpoint_10/manifest.ocdbt new file mode 100644 index 0000000000000000000000000000000000000000..564cb07dbbaea1ecc956d2587a519bb0e8d6ff91 GIT binary patch literal 114 zcmd4P z^pg@zQ2UMaoazxi%?4-L)Jr76M#gh-kyQ93|8Z~#5NM>vh%prP5} zqbPk=g-DvNmk^ZJWZNpR7OY#JmRfDwXx+Z7@85JfMQPFKmsM?>V7JgK4!3Pp>1Ewk z)=Id2NvZ$5B(;sg1Q!-FGjlU{H#0YLcXxN|ZjC2A(QfOzUQVX}ck%fsblW#f*Fz_tqu}EkSK&h2oM4ULI@B9p$HHHjUdD+ zf+2(;L5L_di3f9+a*@z-`d$E41zD9;h>isAQpSy;rFayDzi4SgfOL+oqDp^1XI~6J%x(EurTp@hu#4kK{uoLq|*AbxPJi<%47EF^ajYsf2 zf&mK*zqsr|JxD!Qpj)m@NUrBjCqp(HO&VQFdsGC;msEZ&!Bm0WzN)fDVO`d=!%qYS z+-^<|CJ7EuibM(7LOYfZGrII4hh)HHUg4}Gc(c8@j{`hxpzQ`!>nw%kPz Yd2459OUjt9)sz)ptEr+v14F0cPs<7XfewRt`ae+O0oOaMdxb3#re z5n*SML}gP}WU2}mM6|+6sZ3R&MFUcaJU~1w&+|Au5y}MOVR;?~0JsJR#84SfkrZ%1 z5y-*N;3$w}5^*4+f&h{PkU$d(#5q_X0v;L@oC^`Ar5AC_REyyvjZUXRr$Ir|y3!0z zsKwbENO57Uv5vDZn#N{u;Wq{=O5tU(Wi@WHilnHkCNC^e5GWo*5~Yc9qQXIg3x7h* z1_qMOt{Aq(X?w$Qc+$sc6M3&GCnQVn#T66 zRVinuwXVgOc1lWnYMHF|NqEjZ);R*sU68O~x&Hs>pPB#v|Ia@&|NsA=e`aRp_xJw) z7iaLa6=qXns5v30HJG9Mc4DWUZOwqCsF7hbGbt#kWNQrY0ud3RjSdn(kPrq#5CVi@ z5QG3hAOeJdVITqo#VLXj0t^utVu(T0I&lRSCjU#=X!|NQ%P0 zXo(S^oJWM0026#3=@P*L2LzF&`pMYH{NQQs9fYokg2|~$u)~`Yd@Q)JfZa+eL`lI} z%Ge%SQdv>>7cDUYl=F!25@3SQBV8g`;D8{qR6iM+lpj3Jy@SvdQ7}1G33hl>f{z6^ z7O-1Mg(xXFOBvfkr%~ZigPnjcI=cY1cMx6*T7V&4I?6=Gl76)_QCMvN literal 0 HcmV?d00001 diff --git a/weights/checkpoint_10/ocdbt.process_0/d/692d476e3f288f450c6791f4959d60a0 b/weights/checkpoint_10/ocdbt.process_0/d/692d476e3f288f450c6791f4959d60a0 new file mode 100644 index 0000000000000000000000000000000000000000..226a08d69bcb8f96c60065ec315b1fc37e215c58 GIT binary patch literal 760 zcmV3_R{kvQSxs6Papq z0!dDulFC$*DIOGv!-Jy&K@bB3nMfWS705B*S!hHGlmL{7fJOv~8VU=~B#KBN2tZH@ zM3II_B$+%OhROqg10%xo1Ql<~RBG`sI-Lm}h6Jsr%s8_4VsBXDvRY&PVpp_$t>Ch6 zj4LVmqS&(eHdsj(siy`nYoQ!SG>|Nm=D~;w1`96x$eInu7;nff%0ud3RjSdn(kPrq#5CVi@5QG3hAOeJdVITqo#VLXj0t^utVu(T0 zI&nAbcq0ggMz41{bX!p ze(*H+PC{2i#pF~W*x^kG9u!EsjMjci<&MrXh zUBXMj2rx*O&J$cg&~pJ3cc;{X+aOgt6vM662!xce1so$Nq$NT6V6cKhnwW%R3nUgo zP8CuU!+(K#vIVIOgpi?hF;*qw=uy+$EYpf)a zAZK)j!oK^}HoIOoL0XXk|8n7$9O_c(rw1I*s<<`l+hrJDna$?dUCGlA3*dNl&Qnh} z{*u#aAFQorx-9h+74WN#?$g!l=XkXa;kk7yyQLvd0|NLaV2pwsB8mbhne#CSPG1iS Zf(Qiw9}6JDj3txEYTjSbQf7UAX8Y(jPDTI# literal 0 HcmV?d00001 diff --git a/weights/checkpoint_10/ocdbt.process_0/d/acf1c38d06333776815b5fea81531f2d b/weights/checkpoint_10/ocdbt.process_0/d/acf1c38d06333776815b5fea81531f2d new file mode 100644 index 0000000000000000000000000000000000000000..4ac5cb2bf97ef2543a49a384cd249c0a91afee69 GIT binary patch literal 1126 zcmdHMZ*iWr&DXVhGV>U|7H;DAgw6LFC#7|3dH;d z+J^Ev>Uyd`EGa9_50qn&5SA2V7vUG<1!8s$WleDvc{N!e78K=Y2g)(9sxWdh@@W7G z1xZF}MqWlf5k@{{J|NZr3P~{X%JVQLC6**-#21$&mK5tbf!KceMY-_?dbz2IdHQ-) ziA6<;l?G*rMTSPk?w)?m`FUkPNnf9UcmpHj{DP8HJp;Yu{L;LV+|s1X#Ny)Q#GF*1 zQkT@c;?(TaqP)}`z0?9DW1qxIAg3U)C^5IVB(-1(Bd_416^y(~7zJ0X;9ap|5hE`{ zwNi3MXmW%$~E;8LVBy9+;n>Ct*7`eTl7mRJBFS)rppwK+BZ485nfHrYHuSwv!Jy zt>b8DsAy!Q2qZxW$OPJOXG)#j-6?fIHc+g=zInr?{k_lB_BB3Jt2@rI-%gcfe}nz( z^p^b`OD62^nC`#--3wzoT^@n`ZY`V+>Jkh0E?(NZ|J0qo`wvRw?kg;qzkkopTzi{6 z>+OE}+S)g6S-!6;R%t)XH4W=m2>K>VOtSP0)M`!S`M@M7xUlmQqfml@g^07F39}(j zvw#Xu^8^+VXF)r|Hi<^Vw&`=3FL*Y}YU%~A{9ye#=vwXvam9Vf`)xk5e%H>IvXxV8 z`S$hjD{rng!D)}R7gQ;oW!8JW;B{El^h5W8jy&$?Xt=pe@r2*;`MHq`mi2Bo6Kqgr zQ#;TXE?{S&_&Y4t*TL4?H-_5HqRZ=-hXkeP4 znS1Lb9*OsMPS_(~CKJ>m=_WtDbnzbM8+WIAmY-v}Dtx??K`irr^e*#zI%)+x8E@GQ zH}6}!DD1zXy@Y7agN@f(-V57V+jPt6G^{)Q)LJcJ=JIu37dJC3XX+BmJN7hjqr$C) N`t@9zvo^V|0sv||p>O~I literal 0 HcmV?d00001 diff --git a/weights/checkpoint_10/ocdbt.process_0/manifest.ocdbt b/weights/checkpoint_10/ocdbt.process_0/manifest.ocdbt new file mode 100644 index 0000000000000000000000000000000000000000..9d1b29c5fae32b4da695a065a344992b9b4bcd28 GIT binary patch literal 288 zcmV+*0pI=%+d3*B0RR91000000VuUE{a`HsB?tg!P&+ViP1 Date: Fri, 14 Mar 2025 18:57:06 -0400 Subject: [PATCH 5/8] add new dataloader and update jax_gin --- GraphIsomorphismNetwork/jax_gin.py | 35 ++-- GraphIsomorphismNetwork/load.py | 3 +- GraphIsomorphismNetwork/new_loader.py | 199 ++++++++++++++++++++ GraphIsomorphismNetwork/old_gin.py | 254 ++++++++++++++++++++++++++ 4 files changed, 477 insertions(+), 14 deletions(-) create mode 100644 GraphIsomorphismNetwork/new_loader.py create mode 100644 GraphIsomorphismNetwork/old_gin.py diff --git a/GraphIsomorphismNetwork/jax_gin.py b/GraphIsomorphismNetwork/jax_gin.py index 0323492..4fc1f69 100644 --- a/GraphIsomorphismNetwork/jax_gin.py +++ b/GraphIsomorphismNetwork/jax_gin.py @@ -2,7 +2,7 @@ import jax.numpy as jnp from flax import linen as nn from flax.training import train_state, checkpoints -from load import get_paths, load_dataset_jax +from new_loader import get_paths, load_dataset_jax_new import optax from pathlib import Path import pandas as pd @@ -173,12 +173,20 @@ def load_model_if_exists(state, checkpoint_dir): return state def main(): - paths = get_paths(edgelist=True) - data_loader, num_features, num_classes = load_dataset_jax(paths) + paths = get_paths(samples_2000=True) + data_loader, num_features, num_classes = load_dataset_jax_new(paths, max_files=50) + split_ratio = 0.8 + n_total = len(data_loader) + split_idx = int(n_total * split_ratio) + train_loader = data_loader[:split_idx] + test_loader = data_loader[split_idx:] + print(f"Total batches: {n_total}; Training batches: {len(train_loader)}; Test batches: {len(test_loader)}") + + print(f"Number of Features: {num_features}, model hidden layer dim: {int(num_features * 1e-4)}") model = GIN( in_channels=num_features, - hidden_channels=int(num_features * 1.5), + hidden_channels=int(num_features * 1e-4), out_channels=num_classes, num_layers=4, dropout_rate=0.5 @@ -187,39 +195,40 @@ def main(): rng = jax.random.PRNGKey(0) dropout_rng, init_rng = jax.random.split(rng) - sample_input = data_loader[0] + sample_input = train_loader[0] state = create_train_state(init_rng, model, learning_rate=0.01, sample_input=sample_input) checkpoint_dir = Path(__file__).resolve().parent.parent / "weights" - state = load_model_if_exists(state, checkpoint_dir) start_train = time.perf_counter() - num_epochs = 10 + for epoch in range(1, num_epochs + 1): epoch_start = time.perf_counter() + # Train Loop epoch_loss = 0.0 total_graphs = 0 - for batch in data_loader: + for batch in train_loader: dropout_rng, new_dropout_rng = jax.random.split(dropout_rng) state, loss = train_step(state, batch, dropout_rng) epoch_loss += loss * batch["num_graphs"] total_graphs += batch["num_graphs"] avg_loss = epoch_loss / total_graphs + # Test Loop total_correct = 0 - total_samples = 0 - for batch in data_loader: + total_test_graphs = 0 + for batch in test_loader: correct = test_step(state, batch) total_correct += correct - total_samples += batch["num_graphs"] - train_acc = total_correct / total_samples + total_test_graphs += batch["num_graphs"] + test_acc = total_correct / total_test_graphs epoch_end = time.perf_counter() msg1 = f"Time for epoch {epoch} was {(epoch_end - epoch_start):.6f} seconds" - msg2 = f"Epoch: {epoch:03d}, Loss: {avg_loss:.4f}, Train Acc: {train_acc:.4f}" + msg2 = f"Epoch: {epoch:03d}, Loss: {avg_loss:.4f}, Test Acc: {test_acc:.4f}" print(msg1) print(msg2) logging.info(msg1) diff --git a/GraphIsomorphismNetwork/load.py b/GraphIsomorphismNetwork/load.py index 59f76b5..290302a 100644 --- a/GraphIsomorphismNetwork/load.py +++ b/GraphIsomorphismNetwork/load.py @@ -52,7 +52,8 @@ def load_dataset_jax(paths: list[str]) -> tuple: else: curr_edge, _ = files[curr_id] files[curr_id] = [curr_edge, node_features] - num_features = max(num_features, node_features.shape[1]) + # num_features = max(num_features, node_features.shape[1]) + num_features = max(num_features, node_features.shape[0]) max_nodes = max(max_nodes, node_features.shape[0]) elif "samplekey" in fname: print(f"Loading labels from: {path}") diff --git a/GraphIsomorphismNetwork/new_loader.py b/GraphIsomorphismNetwork/new_loader.py new file mode 100644 index 0000000..097ee19 --- /dev/null +++ b/GraphIsomorphismNetwork/new_loader.py @@ -0,0 +1,199 @@ +import time +import torch +import shutil +import numpy as np +from pathlib import Path +import pandas as pd +import jax.numpy as jnp +from torch.utils import data +from torch_geometric.data import Data, DataLoader + +device = torch.device("cuda" if torch.cuda.is_available() else "cpu") + +def load_dataset_jax(paths: list[str]) -> tuple: + start_load = time.perf_counter() + + """ + Loads the dataset and returns a list of samples (each a dict with keys: + "x", "edge_index", "batch", "y", and "num_graphs"), + along with the number of features and number of classes. + + This version is adapted for use with JAX/Flax. + """ + num_features, num_classes = 0, 2 + max_edgelist, max_nodes = 0, 0 + + # Dictionary to hold data for each file id: {file_id: [edge_index, node_features]} + files = {} + labels = None + for path in sorted(paths): + fname = Path(path).name + if "edgelist" in fname: + # Expect file names like "_edgelist..." + curr_id = int(fname.split("_")[0]) + print(f"Loading edgelist from: {path}") + edges = pd.read_csv(path, header=None).values.astype(np.int32) + max_edgelist = edges.shape[0] if edges.shape[0] > max_edgelist else max_edgelist + edge_index = edges.T # shape: (2, num_edges) + if curr_id not in files: + files[curr_id] = [edge_index, None] + else: + _, curr_features = files[curr_id] + files[curr_id] = [edge_index, curr_features] + elif "node_names" in fname: + curr_id = int(fname.split("_")[0]) + print(f"Loading node features from: {path}") + node_features = pd.read_csv(path, header=None).values + # Remove first row and second column as in your original code. + node_features = np.delete(np.delete(node_features, 0, axis=0), 1, axis=1).astype(np.int32) + if curr_id not in files: + files[curr_id] = [None, node_features] + else: + curr_edge, _ = files[curr_id] + files[curr_id] = [curr_edge, node_features] + # num_features = max(num_features, node_features.shape[1]) + num_features = max(num_features, node_features.shape[0]) + max_nodes = max(max_nodes, node_features.shape[0]) + elif "samplekey" in fname: + print(f"Loading labels from: {path}") + labels = pd.read_csv(path, header=None) + elif "removed" in fname: + print(f"Skipping removed file: {path}") + + print(f"Max number of features: {num_features}") + print(f"Number of classes: {num_classes}") + print(f"Largest edgelist (number of edges): {max_edgelist}") + print(f"Largest number of nodes: {max_nodes}") + + data_set = [] + for file_id, (edges, feature_vector) in files.items(): + if feature_vector is None or edges is None: + print(f"Incomplete data for file id {file_id}, skipping.") + continue + + # Pad node feature matrix to have max_nodes rows. + x = np.pad(feature_vector, ((0, max_nodes - feature_vector.shape[0]), (0, 0)), + mode="constant").astype(np.float32) + if file_id in labels[0].values: + y_val = int(labels.loc[labels[0] == file_id].iloc[0, 12]) + else: + print(f"Label for file id {file_id} not found; skipping.") + continue + + if np.max(edges) >= x.shape[0]: + print("Edge list references a node outside the padded feature matrix; skipping.") + continue + + print(f"Creating data sample from file id: {file_id}") + sample = { + "x": jnp.array(x), # shape: [num_nodes, num_features] + "edge_index": (jnp.array(edges[0], dtype=jnp.int32), + jnp.array(edges[1], dtype=jnp.int32)), + "y": jnp.array([y_val], dtype=jnp.int32), # shape: [1] + "batch": jnp.zeros(x.shape[0], dtype=jnp.int32), # all nodes in graph 0 + "num_graphs": 1 + } + data_set.append(sample) + print(f"Created dataset with {len(data_set)} samples.") + + end_load = time.perf_counter() + print("\n\n") + print(f"Time to load data: {(end_load - start_load):.6f} seconds") + + return data_set, num_features, num_classes + +def load_dataset_jax_new(paths: list[str], max_files=20) -> tuple: + start_load = time.perf_counter() + + paths = [Path(path) for path in paths] # NOTE: this could just be done in the get_paths function + + paths_set = set([path.name for path in paths]) # for quick verification that all 3 files for any given id exist + + labels_path = None + + ids = {} # {id: [node_names_path, edgelist_path, block_lens_path]} + num_files = 0 + for path in paths: + file_name = path.name + if "sample" in file_name: + labels_path = path + + if "node_names" in file_name and num_files < max_files: + file_id = int(file_name.split("_")[0]) + if (str(file_id) + "_edgelist.csv") in paths_set and (str(file_id) + "_block_lens.csv") in paths_set: + base_path = path.parents[0] + ids[file_id] = [base_path / file_name, base_path / (str(file_id) + "_edgelist.csv"), base_path / (str(file_id) + "_block_lens.csv")] + num_files += 1 + # if num_files >= max_files: # NOTE: if you uncomment this line you will have to add a line of code to set labels_path manually + # break + + + samples = {} # {id: [node_features, edges]} + max_nodes, max_edges, max_blocks = 0, 0, 0 + num_classes = 2 + for file_id, (node_names_path, edgelist_path, block_lens_path) in ids.items(): + node_features = pd.read_csv(node_names_path, header=None, low_memory=False).values + node_features = np.delete(np.delete(node_features, 0, axis=0), 1, axis=1).astype(np.int32) # shape: num_nodes x 1 data: (node_id) + # print(node_features.shape) + max_nodes = max(max_nodes, node_features.shape[0]) + + edges = pd.read_csv(edgelist_path, header=None).values.astype(np.int32) # shape: num_edges x 2 data: (node_id, node_id) + # print(edges.shape) + max_edges = max(max_edges, edges.shape[0]) + + block_lens = pd.read_csv(block_lens_path, header=None, low_memory=False).values + block_lens = np.delete(block_lens, 0, axis=0).astype(np.int32) # shape: num_blocks x 2 data: (node_id, num_instructions) + + # print(np.max(block_lens, axis=0)[1], np.min(block_lens, axis=0)[1]) + + # print(block_lens.shape) + max_blocks = max(max_blocks, block_lens.shape[0]) + + if node_features.shape[0] != block_lens.shape[0]: + print(f"node_features shape {node_features.shape} is not equal to block_lens shape {block_lens.shape}, file_id {file_id}") + + samples[file_id] = [node_features, edges] + + print(max_nodes, max_edges, max_blocks) + labels = pd.read_csv(labels_path) + + dataset = [] + + for file_id, (features, edges) in samples.items(): + matching_row = labels[labels.iloc[:, 0] == file_id] + if not matching_row.empty: + file_label = matching_row.iloc[0, 6] + else: + print(f"File id: {file_id} does not have a label. Skipping.") + continue + + y = 0 if file_label == "Whitelist" else 1 + + # TODO: do we even need to pad? + # x = np.pad(features, ((0, max_nodes - features.shape[0]), (0, 0)), mode="constant").astype(np.float32) + x = features + + curr_sample = { + "x": jnp.array(x), + "edge_index": (jnp.array(edges[0], dtype=jnp.int32), jnp.array(edges[1], dtype=jnp.int32)), + "y": jnp.array([y], dtype=jnp.int32), + "batch": jnp.zeros(x.shape[0], dtype=jnp.int32), + "num_graphs": 1 + } + + dataset.append(curr_sample) + + print(f"Created dataset with {len(dataset)} samples.") + + end_load = time.perf_counter() + print("\n\n") + print(f"Time to load data: {(end_load - start_load):.6f} seconds") + + return dataset, max_nodes, num_classes + + +def get_paths(samples_2000=False) -> list[str]: + data_dir = Path(__file__).resolve().parent.parent / "data" + data_dir = data_dir / "samples_2000" / "found_files" if samples_2000 else data_dir + print(f"Collecting file paths from directory: {data_dir}") + return list([str(path) for path in data_dir.iterdir()]) diff --git a/GraphIsomorphismNetwork/old_gin.py b/GraphIsomorphismNetwork/old_gin.py new file mode 100644 index 0000000..76099e3 --- /dev/null +++ b/GraphIsomorphismNetwork/old_gin.py @@ -0,0 +1,254 @@ +import jax +import jax.numpy as jnp +from flax import linen as nn +from flax.training import train_state, checkpoints +# from load import get_paths, load_dataset_jax +from new_loader import get_paths, load_dataset_jax_new +import optax +from pathlib import Path +import pandas as pd +import numpy as np +import time +import os +import logging + +log_file = Path(__file__).resolve().parent.parent / "logs" / "gin_training.log" +log_file.parent.mkdir(parents=True, exist_ok=True) + +root_logger = logging.getLogger() +if root_logger.handlers: + for handler in root_logger.handlers[:]: + root_logger.removeHandler(handler) + +logging.basicConfig( + filename=log_file, + level=logging.INFO, + filemode="a", + format="%(asctime)s - %(levelname)s - %(message)s", + datefmt='%Y-%m-%d %H:%M:%S' +) + +logging.info("Starting GIN training...") + +# Dense -> BatchNorm -> ReLU -> Dense. +class MLP(nn.Module): + hidden_dim: int + + @nn.compact + def __call__(self, x, training: bool): + x = nn.Dense(2 * self.hidden_dim)(x) + x = nn.BatchNorm(use_running_average=not training)(x) + x = nn.relu(x) + x = nn.Dense(self.hidden_dim)(x) + return x + +# Define a GIN convolution layer: x_i' = MLP((1+eps)*x_i + sum_{j in N(i)} x_j) +class GINConv(nn.Module): + hidden_dim: int + train_eps: bool = True + + @nn.compact + def __call__(self, x, senders, receivers, training: bool): + mlp = MLP(hidden_dim=self.hidden_dim) + # Learnable epsilon + if self.train_eps: + eps = self.param("eps", lambda rng: jnp.zeros(())) + else: + eps = 0.0 + # Aggregate neighbor features using segment_sum. + aggregated = jax.ops.segment_sum(x[senders], receivers, num_segments=x.shape[0]) + out = mlp((1 + eps) * x + aggregated, training=training) + return out + +class GIN(nn.Module): + in_channels: int + hidden_channels: int + out_channels: int + num_layers: int + dropout_rate: float = 0.5 + train_eps: bool = True + + @nn.compact + def __call__(self, x, edge_index, batch, training: bool): + senders, receivers = edge_index # edge_index is a tuple: (senders, receivers) + for _ in range(self.num_layers): + x = GINConv(hidden_dim=self.hidden_channels, train_eps=self.train_eps)( + x, senders, receivers, training=training + ) + x = nn.BatchNorm(use_running_average=not training)(x) + x = nn.relu(x) + + # Global add pooling: sum node features per graph. + x = jax.ops.segment_sum(x, batch, num_segments=1) + + # Two-layer MLP for graph-level output. + x = nn.Dense(self.hidden_channels)(x) + x = nn.LayerNorm()(x) + x = nn.relu(x) + x = nn.Dropout(rate=self.dropout_rate)(x, deterministic=not training) + x = nn.Dense(self.out_channels)(x) + return jax.nn.log_softmax(x, axis=-1) + +class TrainState(train_state.TrainState): + batch_stats: dict + +def create_train_state(rng, model, learning_rate, sample_input): + variables = model.init( + rng, + sample_input["x"], + sample_input["edge_index"], + sample_input["batch"], + training=True, + ) + tx = optax.adam(learning_rate) + return TrainState.create( + apply_fn=model.apply, + params=variables["params"], + tx=tx, + batch_stats=variables.get("batch_stats", {}) + ) + +@jax.jit +def train_step(state, batch, dropout_rng): + def loss_fn(params): + variables = {"params": params, "batch_stats": state.batch_stats} + logits, new_model_state = state.apply_fn( + variables, + batch["x"], + batch["edge_index"], + batch["batch"], + training=True, + mutable=["batch_stats"], + rngs={"dropout": dropout_rng}, + ) + labels = batch["y"] + nll = -jnp.mean(jnp.take_along_axis(logits, labels[:, None], axis=-1).squeeze()) + return nll, new_model_state + + grad_fn = jax.value_and_grad(loss_fn, has_aux=True) + (loss, new_model_state), grads = grad_fn(state.params) + state = state.apply_gradients(grads=grads, batch_stats=new_model_state["batch_stats"]) + return state, loss + +@jax.jit +def test_step(state, batch): + variables = {"params": state.params, "batch_stats": state.batch_stats} + logits = state.apply_fn( + variables, + batch["x"], + batch["edge_index"], + batch["batch"], + training=False, + mutable=False + ) + pred = jnp.argmax(logits, axis=-1) + correct = jnp.sum(pred == batch["y"]) + return correct + +def save_model(state, checkpoint_dir, step): + os.makedirs(checkpoint_dir, exist_ok=True) + checkpoints.save_checkpoint( + ckpt_dir=checkpoint_dir, + target=state, + step=step, + overwrite=True + ) + msg = f"Model saved at step {step} to {checkpoint_dir}" + print(msg) + logging.info(msg) + +def load_model_if_exists(state, checkpoint_dir): + latest_ckpt = checkpoints.latest_checkpoint(checkpoint_dir) + if latest_ckpt: + state = checkpoints.restore_checkpoint( + ckpt_dir=checkpoint_dir, + target=state + ) + msg = f"Model restored from checkpoint: {latest_ckpt}" + print(msg) + logging.info(msg) + else: + msg = "No checkpoint found. Training from scratch." + print(msg) + logging.info(msg) + return state + +def main(): + # paths = get_paths(edgelist=True) + # data_loader, num_features, num_classes = load_dataset_jax(paths) + + paths = get_paths(samples_2000=True) + data_loader, num_features, num_classes = load_dataset_jax_new(paths, max_files=20) + + """ + model = GIN( + in_channels=num_features, + hidden_channels=int(num_features * 1.5), + out_channels=num_classes, + num_layers=4, + dropout_rate=0.5 + ) + """ + + print(f"Number of Features: {num_features}, model hidden layer: {int(num_features * 1e-4)}") + model = GIN( + in_channels=num_features, + hidden_channels=int(num_features * 2e-4), + out_channels=num_classes, + num_layers=4, + dropout_rate=0.5 + ) + + rng = jax.random.PRNGKey(0) + dropout_rng, init_rng = jax.random.split(rng) + + sample_input = data_loader[0] + state = create_train_state(init_rng, model, learning_rate=0.01, sample_input=sample_input) + + checkpoint_dir = Path(__file__).resolve().parent.parent / "weights" + + state = load_model_if_exists(state, checkpoint_dir) + + start_train = time.perf_counter() + + num_epochs = 10 + for epoch in range(1, num_epochs + 1): + epoch_start = time.perf_counter() + + epoch_loss = 0.0 + total_graphs = 0 + for batch in data_loader: + dropout_rng, new_dropout_rng = jax.random.split(dropout_rng) + state, loss = train_step(state, batch, dropout_rng) + epoch_loss += loss * batch["num_graphs"] + total_graphs += batch["num_graphs"] + avg_loss = epoch_loss / total_graphs + + total_correct = 0 + total_samples = 0 + for batch in data_loader: + correct = test_step(state, batch) + total_correct += correct + total_samples += batch["num_graphs"] + train_acc = total_correct / total_samples + + epoch_end = time.perf_counter() + msg1 = f"Time for epoch {epoch} was {(epoch_end - epoch_start):.6f} seconds" + msg2 = f"Epoch: {epoch:03d}, Loss: {avg_loss:.4f}, Train Acc: {train_acc:.4f}" + print(msg1) + print(msg2) + logging.info(msg1) + logging.info(msg2) + + save_model(state, checkpoint_dir, epoch) + + end_train = time.perf_counter() + msg3 = f"Total training time : {(end_train - start_train):.6f} seconds" + msg4 = f"Average time per epoch: {((end_train - start_train) / num_epochs):.6f} seconds" + print(msg3) + print(msg4) + logging.info(msg3) + logging.info(msg4) + +if __name__ == "__main__": + main() From b0b0c95ada6331b1432fac771dead93392f907e3 Mon Sep 17 00:00:00 2001 From: CalebBunch Date: Fri, 28 Mar 2025 14:33:46 -0400 Subject: [PATCH 6/8] add poetry deps, path change in new_loader --- GraphIsomorphismNetwork/new_loader.py | 2 +- poetry.lock | 769 +++++++++++++++++- pyproject.toml | 2 + weights/checkpoint_10/_CHECKPOINT_METADATA | 2 +- weights/checkpoint_10/_METADATA | 2 +- .../checkpoint_10/array_metadatas/process_0 | 1 + .../d/85bb797189b91de645cc09202167b979 | Bin 0 -> 59454 bytes .../d/ba5db6d052eb6079e606d173a2f6a367 | Bin 1126 -> 0 bytes weights/checkpoint_10/manifest.ocdbt | Bin 114 -> 118 bytes ...1da51 => 1d2ac04c6579f3d8c6d751ec125a08ca} | Bin .../d/25767f20d50ea17a0acbf92d35827b41 | Bin 586 -> 0 bytes .../d/592716ea24d3ab6a96012664b908c6df | Bin 0 -> 679 bytes .../d/5df1b9d375f692f2e1a0a9d712a2b00b | Bin 784 -> 0 bytes .../d/692d476e3f288f450c6791f4959d60a0 | Bin 760 -> 0 bytes .../d/acf1c38d06333776815b5fea81531f2d | Bin 1126 -> 0 bytes .../d/b2da5b3705e76f0908e019f11e6c4fbc | Bin 0 -> 703 bytes .../d/dbc05a4fec106f56e6164ec6ca36e830 | Bin 0 -> 1591414 bytes .../ocdbt.process_0/manifest.ocdbt | Bin 288 -> 246 bytes 18 files changed, 774 insertions(+), 4 deletions(-) create mode 100644 weights/checkpoint_10/array_metadatas/process_0 create mode 100644 weights/checkpoint_10/d/85bb797189b91de645cc09202167b979 delete mode 100644 weights/checkpoint_10/d/ba5db6d052eb6079e606d173a2f6a367 rename weights/checkpoint_10/ocdbt.process_0/d/{75c7c0f45bb546c5e4b44fffd001da51 => 1d2ac04c6579f3d8c6d751ec125a08ca} (100%) delete mode 100644 weights/checkpoint_10/ocdbt.process_0/d/25767f20d50ea17a0acbf92d35827b41 create mode 100644 weights/checkpoint_10/ocdbt.process_0/d/592716ea24d3ab6a96012664b908c6df delete mode 100644 weights/checkpoint_10/ocdbt.process_0/d/5df1b9d375f692f2e1a0a9d712a2b00b delete mode 100644 weights/checkpoint_10/ocdbt.process_0/d/692d476e3f288f450c6791f4959d60a0 delete mode 100644 weights/checkpoint_10/ocdbt.process_0/d/acf1c38d06333776815b5fea81531f2d create mode 100644 weights/checkpoint_10/ocdbt.process_0/d/b2da5b3705e76f0908e019f11e6c4fbc create mode 100644 weights/checkpoint_10/ocdbt.process_0/d/dbc05a4fec106f56e6164ec6ca36e830 diff --git a/GraphIsomorphismNetwork/new_loader.py b/GraphIsomorphismNetwork/new_loader.py index 097ee19..28438f8 100644 --- a/GraphIsomorphismNetwork/new_loader.py +++ b/GraphIsomorphismNetwork/new_loader.py @@ -194,6 +194,6 @@ def load_dataset_jax_new(paths: list[str], max_files=20) -> tuple: def get_paths(samples_2000=False) -> list[str]: data_dir = Path(__file__).resolve().parent.parent / "data" - data_dir = data_dir / "samples_2000" / "found_files" if samples_2000 else data_dir + data_dir = data_dir / "2kds" / "found_files" if samples_2000 else data_dir print(f"Collecting file paths from directory: {data_dir}") return list([str(path) for path in data_dir.iterdir()]) diff --git a/poetry.lock b/poetry.lock index 7304519..52fcbdc 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,5 +1,16 @@ # This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. +[[package]] +name = "absl-py" +version = "2.2.0" +description = "Abseil Python Common Libraries, see https://github.com/abseil/abseil-py." +optional = false +python-versions = ">=3.8" +files = [ + {file = "absl_py-2.2.0-py3-none-any.whl", hash = "sha256:5c432cdf7b045f89c4ddc3bba196cabb389c0c321322f8dec68eecdfa732fdad"}, + {file = "absl_py-2.2.0.tar.gz", hash = "sha256:2aabeae1403380e338fba88d4f8c9bf9925c20ad04c1c96d4a26930d034c507b"}, +] + [[package]] name = "asttokens" version = "2.4.1" @@ -18,6 +29,26 @@ six = ">=1.12.0" astroid = ["astroid (>=1,<2)", "astroid (>=2,<4)"] test = ["astroid (>=1,<2)", "astroid (>=2,<4)", "pytest"] +[[package]] +name = "chex" +version = "0.1.89" +description = "Chex: Testing made fun, in JAX!" +optional = false +python-versions = ">=3.9" +files = [ + {file = "chex-0.1.89-py3-none-any.whl", hash = "sha256:145241c27d8944adb634fb7d472a460e1c1b643f561507d4031ad5156ef82dfa"}, + {file = "chex-0.1.89.tar.gz", hash = "sha256:78f856e6a0a8459edfcbb402c2c044d2b8102eac4b633838cbdfdcdb09c6c8e0"}, +] + +[package.dependencies] +absl-py = ">=0.9.0" +jax = ">=0.4.27" +jaxlib = ">=0.4.27" +numpy = ">=1.24.1" +setuptools = {version = "*", markers = "python_version >= \"3.12\""} +toolz = ">=0.9.0" +typing_extensions = ">=4.2.0" + [[package]] name = "click" version = "8.1.7" @@ -153,6 +184,43 @@ files = [ {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, ] +[[package]] +name = "etils" +version = "1.12.2" +description = "Collection of common python utils" +optional = false +python-versions = ">=3.10" +files = [ + {file = "etils-1.12.2-py3-none-any.whl", hash = "sha256:4600bec9de6cf5cb043a171e1856e38b5f273719cf3ecef90199f7091a6b3912"}, + {file = "etils-1.12.2.tar.gz", hash = "sha256:c6b9e1f0ce66d1bbf54f99201b08a60ba396d3446d9eb18d4bc39b26a2e1a5ee"}, +] + +[package.dependencies] +fsspec = {version = "*", optional = true, markers = "extra == \"epath\""} +importlib_resources = {version = "*", optional = true, markers = "extra == \"epath\""} +typing_extensions = {version = "*", optional = true, markers = "extra == \"epy\""} +zipp = {version = "*", optional = true, markers = "extra == \"epath\""} + +[package.extras] +all = ["etils[array-types]", "etils[eapp]", "etils[ecolab]", "etils[edc]", "etils[enp]", "etils[epath-gcs]", "etils[epath-s3]", "etils[epath]", "etils[epy]", "etils[etqdm]", "etils[etree-dm]", "etils[etree-jax]", "etils[etree-tf]", "etils[etree]"] +array-types = ["etils[enp]"] +dev = ["chex", "fiddle", "optree", "pydantic", "pyink", "pylint (>=2.6.0)", "pytest", "pytest-subtests", "pytest-xdist", "tensorflow_datasets", "torch"] +docs = ["etils[all,dev]", "sphinx-apitree[ext]"] +eapp = ["absl-py", "etils[epy]", "simple_parsing"] +ecolab = ["etils[enp]", "etils[epy]", "etils[etree]", "jupyter", "mediapy", "numpy", "packaging", "protobuf"] +edc = ["etils[epy]"] +enp = ["einops", "etils[epy]", "numpy"] +epath = ["etils[epy]", "fsspec", "importlib_resources", "typing_extensions", "zipp"] +epath-gcs = ["etils[epath]", "gcsfs"] +epath-s3 = ["etils[epath]", "s3fs"] +epy = ["typing_extensions"] +etqdm = ["absl-py", "etils[epy]", "tqdm"] +etree = ["etils[array-types]", "etils[enp]", "etils[epy]", "etils[etqdm]"] +etree-dm = ["dm-tree", "etils[etree]"] +etree-jax = ["etils[etree]", "jax[cpu]"] +etree-tf = ["etils[etree]", "tensorflow"] +lazy-imports = ["etils[ecolab]"] + [[package]] name = "executing" version = "2.1.0" @@ -167,6 +235,35 @@ files = [ [package.extras] tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipython", "littleutils", "pytest", "rich"] +[[package]] +name = "flax" +version = "0.10.4" +description = "Flax: A neural network library for JAX designed for flexibility" +optional = false +python-versions = ">=3.10" +files = [ + {file = "flax-0.10.4-py3-none-any.whl", hash = "sha256:8cc83d91654ff943909730e02e858b4cd4577531373f83abe6597c58c581032d"}, + {file = "flax-0.10.4.tar.gz", hash = "sha256:57ae44d3f111fc85cff9049adb9684ce8ebd44e87bd8ca776ed52422c2d85021"}, +] + +[package.dependencies] +jax = ">=0.4.27" +msgpack = "*" +numpy = {version = ">=1.26.0", markers = "python_version >= \"3.12\""} +optax = "*" +orbax-checkpoint = "*" +PyYAML = ">=5.4.1" +rich = ">=11.1" +tensorstore = "*" +treescope = ">=0.1.7" +typing_extensions = ">=4.2" + +[package.extras] +all = ["matplotlib"] +dev = ["pre-commit (>=3.8.0)"] +docs = ["Pygments (>=2.6.1)", "dm-haiku", "docutils (==0.16)", "einops", "ipykernel", "ipython_genutils", "ipywidgets (>=8.1.5)", "jupytext (==1.13.8)", "kagglehub (>=0.3.3)", "matplotlib", "ml_collections", "myst_nb", "nbstripout", "recommonmark", "scikit-learn", "sphinx (>=3.3.1)", "sphinx-book-theme", "sphinx-design"] +testing = ["cloudpickle (>=3.0.0)", "clu", "clu (<=0.0.9)", "einops", "gymnasium[accept-rom-license,atari]", "jaxlib", "jaxtyping", "jraph (>=0.0.6dev0)", "ml-collections", "mypy", "opencv-python", "pytest", "pytest-cov", "pytest-custom_exit_code", "pytest-xdist", "pytype", "sentencepiece", "tensorflow (>=2.12.0)", "tensorflow_datasets", "tensorflow_text (>=2.11.0)", "torch", "treescope (>=0.1.1)"] + [[package]] name = "fonttools" version = "4.53.1" @@ -232,6 +329,59 @@ ufo = ["fs (>=2.2.0,<3)"] unicode = ["unicodedata2 (>=15.1.0)"] woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] +[[package]] +name = "fsspec" +version = "2025.3.0" +description = "File-system specification" +optional = false +python-versions = ">=3.8" +files = [ + {file = "fsspec-2025.3.0-py3-none-any.whl", hash = "sha256:efb87af3efa9103f94ca91a7f8cb7a4df91af9f74fc106c9c7ea0efd7277c1b3"}, + {file = "fsspec-2025.3.0.tar.gz", hash = "sha256:a935fd1ea872591f2b5148907d103488fc523295e6c64b835cfad8c3eca44972"}, +] + +[package.extras] +abfs = ["adlfs"] +adl = ["adlfs"] +arrow = ["pyarrow (>=1)"] +dask = ["dask", "distributed"] +dev = ["pre-commit", "ruff"] +doc = ["numpydoc", "sphinx", "sphinx-design", "sphinx-rtd-theme", "yarl"] +dropbox = ["dropbox", "dropboxdrivefs", "requests"] +full = ["adlfs", "aiohttp (!=4.0.0a0,!=4.0.0a1)", "dask", "distributed", "dropbox", "dropboxdrivefs", "fusepy", "gcsfs", "libarchive-c", "ocifs", "panel", "paramiko", "pyarrow (>=1)", "pygit2", "requests", "s3fs", "smbprotocol", "tqdm"] +fuse = ["fusepy"] +gcs = ["gcsfs"] +git = ["pygit2"] +github = ["requests"] +gs = ["gcsfs"] +gui = ["panel"] +hdfs = ["pyarrow (>=1)"] +http = ["aiohttp (!=4.0.0a0,!=4.0.0a1)"] +libarchive = ["libarchive-c"] +oci = ["ocifs"] +s3 = ["s3fs"] +sftp = ["paramiko"] +smb = ["smbprotocol"] +ssh = ["paramiko"] +test = ["aiohttp (!=4.0.0a0,!=4.0.0a1)", "numpy", "pytest", "pytest-asyncio (!=0.22.0)", "pytest-benchmark", "pytest-cov", "pytest-mock", "pytest-recording", "pytest-rerunfailures", "requests"] +test-downstream = ["aiobotocore (>=2.5.4,<3.0.0)", "dask[dataframe,test]", "moto[server] (>4,<5)", "pytest-timeout", "xarray"] +test-full = ["adlfs", "aiohttp (!=4.0.0a0,!=4.0.0a1)", "cloudpickle", "dask", "distributed", "dropbox", "dropboxdrivefs", "fastparquet", "fusepy", "gcsfs", "jinja2", "kerchunk", "libarchive-c", "lz4", "notebook", "numpy", "ocifs", "pandas", "panel", "paramiko", "pyarrow", "pyarrow (>=1)", "pyftpdlib", "pygit2", "pytest", "pytest-asyncio (!=0.22.0)", "pytest-benchmark", "pytest-cov", "pytest-mock", "pytest-recording", "pytest-rerunfailures", "python-snappy", "requests", "smbprotocol", "tqdm", "urllib3", "zarr", "zstandard"] +tqdm = ["tqdm"] + +[[package]] +name = "humanize" +version = "4.12.2" +description = "Python humanize utilities" +optional = false +python-versions = ">=3.9" +files = [ + {file = "humanize-4.12.2-py3-none-any.whl", hash = "sha256:e4e44dced598b7e03487f3b1c6fd5b1146c30ea55a110e71d5d4bca3e094259e"}, + {file = "humanize-4.12.2.tar.gz", hash = "sha256:ce0715740e9caacc982bb89098182cf8ded3552693a433311c6a4ce6f4e12a2c"}, +] + +[package.extras] +tests = ["freezegun", "pytest", "pytest-cov"] + [[package]] name = "iced-x86" version = "1.21.0" @@ -250,6 +400,25 @@ files = [ {file = "iced_x86-1.21.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:3090e252de96fef2a628eb9cb43629e462fceb1eaeb9e6a73f5ec4925dc5f142"}, ] +[[package]] +name = "importlib-resources" +version = "6.5.2" +description = "Read resources from Python packages" +optional = false +python-versions = ">=3.9" +files = [ + {file = "importlib_resources-6.5.2-py3-none-any.whl", hash = "sha256:789cfdc3ed28c78b67a06acb8126751ced69a3d5f79c095a98298cd8a760ccec"}, + {file = "importlib_resources-6.5.2.tar.gz", hash = "sha256:185f87adef5bcc288449d98fb4fba07cea78bc036455dd44c5fc4a2fe78fed2c"}, +] + +[package.extras] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +enabler = ["pytest-enabler (>=2.2)"] +test = ["jaraco.test (>=5.4)", "pytest (>=6,!=8.1.*)", "zipp (>=3.17)"] +type = ["pytest-mypy"] + [[package]] name = "ipython" version = "8.27.0" @@ -286,6 +455,66 @@ qtconsole = ["qtconsole"] test = ["packaging", "pickleshare", "pytest", "pytest-asyncio (<0.22)", "testpath"] test-extra = ["curio", "ipython[test]", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.23)", "pandas", "trio"] +[[package]] +name = "jax" +version = "0.5.3" +description = "Differentiate, compile, and transform Numpy code." +optional = false +python-versions = ">=3.10" +files = [ + {file = "jax-0.5.3-py3-none-any.whl", hash = "sha256:1483dc237b4f47e41755d69429e8c3c138736716147cd43bb2b99b259d4e3c41"}, + {file = "jax-0.5.3.tar.gz", hash = "sha256:f17fcb0fd61dc289394af6ce4de2dada2312f2689bb0d73642c6f026a95fbb2c"}, +] + +[package.dependencies] +jaxlib = "0.5.3" +ml_dtypes = ">=0.4.0" +numpy = {version = ">=1.26.0", markers = "python_version >= \"3.12\""} +opt_einsum = "*" +scipy = ">=1.11.1" + +[package.extras] +ci = ["jaxlib (==0.5.1)"] +cuda = ["jax-cuda12-plugin[with-cuda] (==0.5.3)", "jaxlib (==0.5.3)"] +cuda12 = ["jax-cuda12-plugin[with-cuda] (==0.5.3)", "jaxlib (==0.5.3)"] +cuda12-local = ["jax-cuda12-plugin (==0.5.3)", "jaxlib (==0.5.3)"] +cuda12-pip = ["jax-cuda12-plugin[with-cuda] (==0.5.3)", "jaxlib (==0.5.3)"] +k8s = ["kubernetes"] +minimum-jaxlib = ["jaxlib (==0.5.3)"] +rocm = ["jax-rocm60-plugin (==0.5.3)", "jaxlib (==0.5.3)"] +tpu = ["jaxlib (==0.5.3)", "libtpu (==0.0.11.*)", "requests"] + +[[package]] +name = "jaxlib" +version = "0.5.3" +description = "XLA library for JAX" +optional = false +python-versions = ">=3.10" +files = [ + {file = "jaxlib-0.5.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:48ff5c89fb8a0fe04d475e9ddc074b4879a91d7ab68a51cec5cd1e87f81e6c47"}, + {file = "jaxlib-0.5.3-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:972400db4af6e85270d81db5e6e620d31395f0472e510c50dfcd4cb3f72b7220"}, + {file = "jaxlib-0.5.3-cp310-cp310-manylinux2014_x86_64.whl", hash = "sha256:52be6c9775aff738a61170d8c047505c75bb799a45518e66a7a0908127b11785"}, + {file = "jaxlib-0.5.3-cp310-cp310-win_amd64.whl", hash = "sha256:b41a6fcaeb374fabc4ee7e74cfed60843bdab607cd54f60a68b7f7655cde2b66"}, + {file = "jaxlib-0.5.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b62bd8b29e5a4f9bfaa57c8daf6e04820b2c994f448f3dec602d64255545e9f2"}, + {file = "jaxlib-0.5.3-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:a4666f81d72c060ed3e581ded116a9caa9b0a70a148a54cb12a1d3afca3624b5"}, + {file = "jaxlib-0.5.3-cp311-cp311-manylinux2014_x86_64.whl", hash = "sha256:29e1530fc81833216f1e28b578d0c59697654f72ee31c7a44ed7753baf5ac466"}, + {file = "jaxlib-0.5.3-cp311-cp311-win_amd64.whl", hash = "sha256:8eb54e38d789557579f900ea3d70f104a440f8555a9681ed45f4a122dcbfd92e"}, + {file = "jaxlib-0.5.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d394dbde4a1c6bd67501cfb29d3819a10b900cb534cc0fc603319f7092f24cfa"}, + {file = "jaxlib-0.5.3-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:bddf6360377aa1c792e47fd87f307c342e331e5ff3582f940b1bca00f6b4bc73"}, + {file = "jaxlib-0.5.3-cp312-cp312-manylinux2014_x86_64.whl", hash = "sha256:5a5e88ab1cd6fdf78d69abe3544e8f09cce200dd339bb85fbe3c2ea67f2a5e68"}, + {file = "jaxlib-0.5.3-cp312-cp312-win_amd64.whl", hash = "sha256:520665929649f29f7d948d4070dbaf3e032a4c1f7c11f2863eac73320fcee784"}, + {file = "jaxlib-0.5.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:31321c25282a06a6dfc940507bc14d0a0ac838d8ced6c07aa00a7fae34ce7b3f"}, + {file = "jaxlib-0.5.3-cp313-cp313-manylinux2014_aarch64.whl", hash = "sha256:e904b92dedfbc7e545725a8d7676987030ae9c069001d94701bc109c6dab4100"}, + {file = "jaxlib-0.5.3-cp313-cp313-manylinux2014_x86_64.whl", hash = "sha256:bb7593cb7fffcb13963f22fa5229ed960b8fb4ae5ec3b0820048cbd67f1e8e31"}, + {file = "jaxlib-0.5.3-cp313-cp313-win_amd64.whl", hash = "sha256:8019f73a10b1290f988dd3768c684f3a8a147239091c3b790ce7e47e3bbc00bd"}, + {file = "jaxlib-0.5.3-cp313-cp313t-manylinux2014_x86_64.whl", hash = "sha256:4c9a9d4cda091a3ef068ace8379fff9e98eea2fc51dbdd7c3386144a1bdf715d"}, +] + +[package.dependencies] +ml_dtypes = ">=0.2.0" +numpy = ">=1.25" +scipy = ">=1.11.1" + [[package]] name = "jedi" version = "0.19.1" @@ -461,6 +690,30 @@ files = [ {file = "kiwisolver-1.4.7.tar.gz", hash = "sha256:9893ff81bd7107f7b685d3017cc6583daadb4fc26e4a888350df530e41980a60"}, ] +[[package]] +name = "markdown-it-py" +version = "3.0.0" +description = "Python port of markdown-it. Markdown parsing, done right!" +optional = false +python-versions = ">=3.8" +files = [ + {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, + {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, +] + +[package.dependencies] +mdurl = ">=0.1,<1.0" + +[package.extras] +benchmarking = ["psutil", "pytest", "pytest-benchmark"] +code-style = ["pre-commit (>=3.0,<4.0)"] +compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] +linkify = ["linkify-it-py (>=1,<3)"] +plugins = ["mdit-py-plugins"] +profiling = ["gprof2dot"] +rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] + [[package]] name = "markupsafe" version = "2.1.5" @@ -607,6 +860,143 @@ files = [ [package.dependencies] traitlets = "*" +[[package]] +name = "mdurl" +version = "0.1.2" +description = "Markdown URL utilities" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, + {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, +] + +[[package]] +name = "ml-dtypes" +version = "0.5.1" +description = "" +optional = false +python-versions = ">=3.9" +files = [ + {file = "ml_dtypes-0.5.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:bd73f51957949069573ff783563486339a9285d72e2f36c18e0c1aa9ca7eb190"}, + {file = "ml_dtypes-0.5.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:810512e2eccdfc3b41eefa3a27402371a3411453a1efc7e9c000318196140fed"}, + {file = "ml_dtypes-0.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:141b2ea2f20bb10802ddca55d91fe21231ef49715cfc971998e8f2a9838f3dbe"}, + {file = "ml_dtypes-0.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:26ebcc69d7b779c8f129393e99732961b5cc33fcff84090451f448c89b0e01b4"}, + {file = "ml_dtypes-0.5.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:023ce2f502efd4d6c1e0472cc58ce3640d051d40e71e27386bed33901e201327"}, + {file = "ml_dtypes-0.5.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7000b6e4d8ef07542c05044ec5d8bbae1df083b3f56822c3da63993a113e716f"}, + {file = "ml_dtypes-0.5.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c09526488c3a9e8b7a23a388d4974b670a9a3dd40c5c8a61db5593ce9b725bab"}, + {file = "ml_dtypes-0.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:15ad0f3b0323ce96c24637a88a6f44f6713c64032f27277b069f285c3cf66478"}, + {file = "ml_dtypes-0.5.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:6f462f5eca22fb66d7ff9c4744a3db4463af06c49816c4b6ac89b16bfcdc592e"}, + {file = "ml_dtypes-0.5.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f76232163b5b9c34291b54621ee60417601e2e4802a188a0ea7157cd9b323f4"}, + {file = "ml_dtypes-0.5.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad4953c5eb9c25a56d11a913c2011d7e580a435ef5145f804d98efa14477d390"}, + {file = "ml_dtypes-0.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:9626d0bca1fb387d5791ca36bacbba298c5ef554747b7ebeafefb4564fc83566"}, + {file = "ml_dtypes-0.5.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:12651420130ee7cc13059fc56dac6ad300c3af3848b802d475148c9defd27c23"}, + {file = "ml_dtypes-0.5.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9945669d3dadf8acb40ec2e57d38c985d8c285ea73af57fc5b09872c516106d"}, + {file = "ml_dtypes-0.5.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf9975bda82a99dc935f2ae4c83846d86df8fd6ba179614acac8e686910851da"}, + {file = "ml_dtypes-0.5.1-cp313-cp313-win_amd64.whl", hash = "sha256:fd918d4e6a4e0c110e2e05be7a7814d10dc1b95872accbf6512b80a109b71ae1"}, + {file = "ml_dtypes-0.5.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:05f23447a1c20ddf4dc7c2c661aa9ed93fcb2658f1017c204d1e758714dc28a8"}, + {file = "ml_dtypes-0.5.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b7fbe5571fdf28fd3aaab3ef4aafc847de9ebf263be959958c1ca58ec8eadf5"}, + {file = "ml_dtypes-0.5.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d13755f8e8445b3870114e5b6240facaa7cb0c3361e54beba3e07fa912a6e12b"}, + {file = "ml_dtypes-0.5.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b8a9d46b4df5ae2135a8e8e72b465448ebbc1559997f4f9304a9ecc3413efb5b"}, + {file = "ml_dtypes-0.5.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afb2009ac98da274e893e03162f6269398b2b00d947e7057ee2469a921d58135"}, + {file = "ml_dtypes-0.5.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aefedc579ece2f8fb38f876aa7698204ee4c372d0e54f1c1ffa8ca580b54cc60"}, + {file = "ml_dtypes-0.5.1-cp39-cp39-win_amd64.whl", hash = "sha256:8f2c028954f16ede77902b223a8da2d9cbb3892375b85809a5c3cfb1587960c4"}, + {file = "ml_dtypes-0.5.1.tar.gz", hash = "sha256:ac5b58559bb84a95848ed6984eb8013249f90b6bab62aa5acbad876e256002c9"}, +] + +[package.dependencies] +numpy = [ + {version = ">=2.1.0", markers = "python_version >= \"3.13\""}, + {version = ">=1.26.0", markers = "python_version >= \"3.12\" and python_version < \"3.13\""}, +] + +[package.extras] +dev = ["absl-py", "pyink", "pylint (>=2.6.0)", "pytest", "pytest-xdist"] + +[[package]] +name = "msgpack" +version = "1.1.0" +description = "MessagePack serializer" +optional = false +python-versions = ">=3.8" +files = [ + {file = "msgpack-1.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7ad442d527a7e358a469faf43fda45aaf4ac3249c8310a82f0ccff9164e5dccd"}, + {file = "msgpack-1.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:74bed8f63f8f14d75eec75cf3d04ad581da6b914001b474a5d3cd3372c8cc27d"}, + {file = "msgpack-1.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:914571a2a5b4e7606997e169f64ce53a8b1e06f2cf2c3a7273aa106236d43dd5"}, + {file = "msgpack-1.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c921af52214dcbb75e6bdf6a661b23c3e6417f00c603dd2070bccb5c3ef499f5"}, + {file = "msgpack-1.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8ce0b22b890be5d252de90d0e0d119f363012027cf256185fc3d474c44b1b9e"}, + {file = "msgpack-1.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:73322a6cc57fcee3c0c57c4463d828e9428275fb85a27aa2aa1a92fdc42afd7b"}, + {file = "msgpack-1.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e1f3c3d21f7cf67bcf2da8e494d30a75e4cf60041d98b3f79875afb5b96f3a3f"}, + {file = "msgpack-1.1.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:64fc9068d701233effd61b19efb1485587560b66fe57b3e50d29c5d78e7fef68"}, + {file = "msgpack-1.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:42f754515e0f683f9c79210a5d1cad631ec3d06cea5172214d2176a42e67e19b"}, + {file = "msgpack-1.1.0-cp310-cp310-win32.whl", hash = "sha256:3df7e6b05571b3814361e8464f9304c42d2196808e0119f55d0d3e62cd5ea044"}, + {file = "msgpack-1.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:685ec345eefc757a7c8af44a3032734a739f8c45d1b0ac45efc5d8977aa4720f"}, + {file = "msgpack-1.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3d364a55082fb2a7416f6c63ae383fbd903adb5a6cf78c5b96cc6316dc1cedc7"}, + {file = "msgpack-1.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:79ec007767b9b56860e0372085f8504db5d06bd6a327a335449508bbee9648fa"}, + {file = "msgpack-1.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6ad622bf7756d5a497d5b6836e7fc3752e2dd6f4c648e24b1803f6048596f701"}, + {file = "msgpack-1.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e59bca908d9ca0de3dc8684f21ebf9a690fe47b6be93236eb40b99af28b6ea6"}, + {file = "msgpack-1.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e1da8f11a3dd397f0a32c76165cf0c4eb95b31013a94f6ecc0b280c05c91b59"}, + {file = "msgpack-1.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:452aff037287acb1d70a804ffd022b21fa2bb7c46bee884dbc864cc9024128a0"}, + {file = "msgpack-1.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8da4bf6d54ceed70e8861f833f83ce0814a2b72102e890cbdfe4b34764cdd66e"}, + {file = "msgpack-1.1.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:41c991beebf175faf352fb940bf2af9ad1fb77fd25f38d9142053914947cdbf6"}, + {file = "msgpack-1.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a52a1f3a5af7ba1c9ace055b659189f6c669cf3657095b50f9602af3a3ba0fe5"}, + {file = "msgpack-1.1.0-cp311-cp311-win32.whl", hash = "sha256:58638690ebd0a06427c5fe1a227bb6b8b9fdc2bd07701bec13c2335c82131a88"}, + {file = "msgpack-1.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:fd2906780f25c8ed5d7b323379f6138524ba793428db5d0e9d226d3fa6aa1788"}, + {file = "msgpack-1.1.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:d46cf9e3705ea9485687aa4001a76e44748b609d260af21c4ceea7f2212a501d"}, + {file = "msgpack-1.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5dbad74103df937e1325cc4bfeaf57713be0b4f15e1c2da43ccdd836393e2ea2"}, + {file = "msgpack-1.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:58dfc47f8b102da61e8949708b3eafc3504509a5728f8b4ddef84bd9e16ad420"}, + {file = "msgpack-1.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4676e5be1b472909b2ee6356ff425ebedf5142427842aa06b4dfd5117d1ca8a2"}, + {file = "msgpack-1.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17fb65dd0bec285907f68b15734a993ad3fc94332b5bb21b0435846228de1f39"}, + {file = "msgpack-1.1.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a51abd48c6d8ac89e0cfd4fe177c61481aca2d5e7ba42044fd218cfd8ea9899f"}, + {file = "msgpack-1.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2137773500afa5494a61b1208619e3871f75f27b03bcfca7b3a7023284140247"}, + {file = "msgpack-1.1.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:398b713459fea610861c8a7b62a6fec1882759f308ae0795b5413ff6a160cf3c"}, + {file = "msgpack-1.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:06f5fd2f6bb2a7914922d935d3b8bb4a7fff3a9a91cfce6d06c13bc42bec975b"}, + {file = "msgpack-1.1.0-cp312-cp312-win32.whl", hash = "sha256:ad33e8400e4ec17ba782f7b9cf868977d867ed784a1f5f2ab46e7ba53b6e1e1b"}, + {file = "msgpack-1.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:115a7af8ee9e8cddc10f87636767857e7e3717b7a2e97379dc2054712693e90f"}, + {file = "msgpack-1.1.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:071603e2f0771c45ad9bc65719291c568d4edf120b44eb36324dcb02a13bfddf"}, + {file = "msgpack-1.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0f92a83b84e7c0749e3f12821949d79485971f087604178026085f60ce109330"}, + {file = "msgpack-1.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4a1964df7b81285d00a84da4e70cb1383f2e665e0f1f2a7027e683956d04b734"}, + {file = "msgpack-1.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59caf6a4ed0d164055ccff8fe31eddc0ebc07cf7326a2aaa0dbf7a4001cd823e"}, + {file = "msgpack-1.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0907e1a7119b337971a689153665764adc34e89175f9a34793307d9def08e6ca"}, + {file = "msgpack-1.1.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:65553c9b6da8166e819a6aa90ad15288599b340f91d18f60b2061f402b9a4915"}, + {file = "msgpack-1.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7a946a8992941fea80ed4beae6bff74ffd7ee129a90b4dd5cf9c476a30e9708d"}, + {file = "msgpack-1.1.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:4b51405e36e075193bc051315dbf29168d6141ae2500ba8cd80a522964e31434"}, + {file = "msgpack-1.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b4c01941fd2ff87c2a934ee6055bda4ed353a7846b8d4f341c428109e9fcde8c"}, + {file = "msgpack-1.1.0-cp313-cp313-win32.whl", hash = "sha256:7c9a35ce2c2573bada929e0b7b3576de647b0defbd25f5139dcdaba0ae35a4cc"}, + {file = "msgpack-1.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:bce7d9e614a04d0883af0b3d4d501171fbfca038f12c77fa838d9f198147a23f"}, + {file = "msgpack-1.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c40ffa9a15d74e05ba1fe2681ea33b9caffd886675412612d93ab17b58ea2fec"}, + {file = "msgpack-1.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f1ba6136e650898082d9d5a5217d5906d1e138024f836ff48691784bbe1adf96"}, + {file = "msgpack-1.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e0856a2b7e8dcb874be44fea031d22e5b3a19121be92a1e098f46068a11b0870"}, + {file = "msgpack-1.1.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:471e27a5787a2e3f974ba023f9e265a8c7cfd373632247deb225617e3100a3c7"}, + {file = "msgpack-1.1.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:646afc8102935a388ffc3914b336d22d1c2d6209c773f3eb5dd4d6d3b6f8c1cb"}, + {file = "msgpack-1.1.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:13599f8829cfbe0158f6456374e9eea9f44eee08076291771d8ae93eda56607f"}, + {file = "msgpack-1.1.0-cp38-cp38-win32.whl", hash = "sha256:8a84efb768fb968381e525eeeb3d92857e4985aacc39f3c47ffd00eb4509315b"}, + {file = "msgpack-1.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:879a7b7b0ad82481c52d3c7eb99bf6f0645dbdec5134a4bddbd16f3506947feb"}, + {file = "msgpack-1.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:53258eeb7a80fc46f62fd59c876957a2d0e15e6449a9e71842b6d24419d88ca1"}, + {file = "msgpack-1.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7e7b853bbc44fb03fbdba34feb4bd414322180135e2cb5164f20ce1c9795ee48"}, + {file = "msgpack-1.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f3e9b4936df53b970513eac1758f3882c88658a220b58dcc1e39606dccaaf01c"}, + {file = "msgpack-1.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:46c34e99110762a76e3911fc923222472c9d681f1094096ac4102c18319e6468"}, + {file = "msgpack-1.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a706d1e74dd3dea05cb54580d9bd8b2880e9264856ce5068027eed09680aa74"}, + {file = "msgpack-1.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:534480ee5690ab3cbed89d4c8971a5c631b69a8c0883ecfea96c19118510c846"}, + {file = "msgpack-1.1.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:8cf9e8c3a2153934a23ac160cc4cba0ec035f6867c8013cc6077a79823370346"}, + {file = "msgpack-1.1.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:3180065ec2abbe13a4ad37688b61b99d7f9e012a535b930e0e683ad6bc30155b"}, + {file = "msgpack-1.1.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c5a91481a3cc573ac8c0d9aace09345d989dc4a0202b7fcb312c88c26d4e71a8"}, + {file = "msgpack-1.1.0-cp39-cp39-win32.whl", hash = "sha256:f80bc7d47f76089633763f952e67f8214cb7b3ee6bfa489b3cb6a84cfac114cd"}, + {file = "msgpack-1.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:4d1b7ff2d6146e16e8bd665ac726a89c74163ef8cd39fa8c1087d4e52d3a2325"}, + {file = "msgpack-1.1.0.tar.gz", hash = "sha256:dd432ccc2c72b914e4cb77afce64aab761c1137cc698be3984eee260bcb2896e"}, +] + +[[package]] +name = "nest-asyncio" +version = "1.6.0" +description = "Patch asyncio to allow nested event loops" +optional = false +python-versions = ">=3.5" +files = [ + {file = "nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c"}, + {file = "nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe"}, +] + [[package]] name = "networkx" version = "3.3" @@ -687,6 +1077,71 @@ files = [ {file = "numpy-2.1.1.tar.gz", hash = "sha256:d0cf7d55b1051387807405b3898efafa862997b4cba8aa5dbe657be794afeafd"}, ] +[[package]] +name = "opt-einsum" +version = "3.4.0" +description = "Path optimization of einsum functions." +optional = false +python-versions = ">=3.8" +files = [ + {file = "opt_einsum-3.4.0-py3-none-any.whl", hash = "sha256:69bb92469f86a1565195ece4ac0323943e83477171b91d24c35afe028a90d7cd"}, + {file = "opt_einsum-3.4.0.tar.gz", hash = "sha256:96ca72f1b886d148241348783498194c577fa30a8faac108586b14f1ba4473ac"}, +] + +[[package]] +name = "optax" +version = "0.2.4" +description = "A gradient processing and optimization library in JAX." +optional = false +python-versions = ">=3.9" +files = [ + {file = "optax-0.2.4-py3-none-any.whl", hash = "sha256:db35c04e50b52596662efb002334de08c2a0a74971e4da33f467e84fac08886a"}, + {file = "optax-0.2.4.tar.gz", hash = "sha256:4e05d3d5307e6dde4c319187ae36e6cd3a0c035d4ed25e9e992449a304f47336"}, +] + +[package.dependencies] +absl-py = ">=0.7.1" +chex = ">=0.1.87" +etils = {version = "*", extras = ["epy"]} +jax = ">=0.4.27" +jaxlib = ">=0.4.27" +numpy = ">=1.18.0" + +[package.extras] +docs = ["flax", "ipython (>=8.8.0)", "matplotlib (>=3.5.0)", "myst-nb (>=1.0.0)", "sphinx (>=6.0.0)", "sphinx-autodoc-typehints", "sphinx-book-theme (>=1.0.1)", "sphinx-collections (>=0.0.1)", "sphinx-gallery (>=0.14.0)", "sphinx_contributors", "sphinxcontrib-katex", "tensorflow (>=2.4.0)", "tensorflow-datasets (>=4.2.0)"] +dp-accounting = ["absl-py (>=1.0.0)", "attrs (>=21.4.0)", "mpmath (>=1.2.1)", "numpy (>=1.21.4)", "scipy (>=1.7.1)"] +examples = ["dp_accounting (>=0.4)", "flax", "ipywidgets", "tensorflow (>=2.4.0)", "tensorflow-datasets (>=4.2.0)"] +test = ["dm-tree (>=0.1.7)", "flax (>=0.5.3)", "scikit-learn", "scipy (>=1.7.1)"] + +[[package]] +name = "orbax-checkpoint" +version = "0.11.10" +description = "Orbax Checkpoint" +optional = false +python-versions = ">=3.10" +files = [ + {file = "orbax_checkpoint-0.11.10-py3-none-any.whl", hash = "sha256:11e20aa97a3b0ddef79a24cf192fd997298604ab5541dc4f3ec7512ecbe94bdf"}, + {file = "orbax_checkpoint-0.11.10.tar.gz", hash = "sha256:9e415b0d041b4c256ff2e126df9c6b056f0155f322de0a69befd73d1657fb9e5"}, +] + +[package.dependencies] +absl-py = "*" +etils = {version = "*", extras = ["epath", "epy"]} +humanize = "*" +jax = ">=0.5.0" +msgpack = "*" +nest_asyncio = "*" +numpy = "*" +protobuf = "*" +pyyaml = "*" +simplejson = ">=3.16.0" +tensorstore = ">=0.1.71" +typing_extensions = "*" + +[package.extras] +docs = ["flax", "google-cloud-logging"] +testing = ["chex", "flax", "google-cloud-logging", "mock", "pytest", "pytest-xdist"] + [[package]] name = "packaging" version = "24.1" @@ -907,6 +1362,24 @@ files = [ [package.dependencies] wcwidth = "*" +[[package]] +name = "protobuf" +version = "6.30.1" +description = "" +optional = false +python-versions = ">=3.9" +files = [ + {file = "protobuf-6.30.1-cp310-abi3-win32.whl", hash = "sha256:ba0706f948d0195f5cac504da156d88174e03218d9364ab40d903788c1903d7e"}, + {file = "protobuf-6.30.1-cp310-abi3-win_amd64.whl", hash = "sha256:ed484f9ddd47f0f1bf0648806cccdb4fe2fb6b19820f9b79a5adf5dcfd1b8c5f"}, + {file = "protobuf-6.30.1-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:aa4f7dfaed0d840b03d08d14bfdb41348feaee06a828a8c455698234135b4075"}, + {file = "protobuf-6.30.1-cp39-abi3-manylinux2014_aarch64.whl", hash = "sha256:47cd320b7db63e8c9ac35f5596ea1c1e61491d8a8eb6d8b45edc44760b53a4f6"}, + {file = "protobuf-6.30.1-cp39-abi3-manylinux2014_x86_64.whl", hash = "sha256:e3083660225fa94748ac2e407f09a899e6a28bf9c0e70c75def8d15706bf85fc"}, + {file = "protobuf-6.30.1-cp39-cp39-win32.whl", hash = "sha256:554d7e61cce2aa4c63ca27328f757a9f3867bce8ec213bf09096a8d16bcdcb6a"}, + {file = "protobuf-6.30.1-cp39-cp39-win_amd64.whl", hash = "sha256:b510f55ce60f84dc7febc619b47215b900466e3555ab8cb1ba42deb4496d6cc0"}, + {file = "protobuf-6.30.1-py3-none-any.whl", hash = "sha256:3c25e51e1359f1f5fa3b298faa6016e650d148f214db2e47671131b9063c53be"}, + {file = "protobuf-6.30.1.tar.gz", hash = "sha256:535fb4e44d0236893d5cf1263a0f706f1160b689a7ab962e9da8a9ce4050b780"}, +] + [[package]] name = "ptyprocess" version = "0.7.0" @@ -1001,6 +1474,86 @@ jinja2 = ">=2.9.6" jsonpickle = ">=1.4.1" networkx = ">=1.11" +[[package]] +name = "pyyaml" +version = "6.0.2" +description = "YAML parser and emitter for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, + {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed"}, + {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180"}, + {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68"}, + {file = "PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99"}, + {file = "PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e"}, + {file = "PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774"}, + {file = "PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85"}, + {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4"}, + {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e"}, + {file = "PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5"}, + {file = "PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44"}, + {file = "PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab"}, + {file = "PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476"}, + {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48"}, + {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b"}, + {file = "PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4"}, + {file = "PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8"}, + {file = "PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba"}, + {file = "PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5"}, + {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc"}, + {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652"}, + {file = "PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183"}, + {file = "PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563"}, + {file = "PyYAML-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083"}, + {file = "PyYAML-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706"}, + {file = "PyYAML-6.0.2-cp38-cp38-win32.whl", hash = "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a"}, + {file = "PyYAML-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff"}, + {file = "PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d"}, + {file = "PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19"}, + {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e"}, + {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725"}, + {file = "PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631"}, + {file = "PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8"}, + {file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"}, +] + +[[package]] +name = "rich" +version = "13.9.4" +description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "rich-13.9.4-py3-none-any.whl", hash = "sha256:6049d5e6ec054bf2779ab3358186963bac2ea89175919d699e378b99738c2a90"}, + {file = "rich-13.9.4.tar.gz", hash = "sha256:439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098"}, +] + +[package.dependencies] +markdown-it-py = ">=2.2.0" +pygments = ">=2.13.0,<3.0.0" + +[package.extras] +jupyter = ["ipywidgets (>=7.5.1,<9)"] + [[package]] name = "scipy" version = "1.14.1" @@ -1097,6 +1650,125 @@ files = [ semantic-version = ">=2.8.2,<3" setuptools = ">=62.4" +[[package]] +name = "simplejson" +version = "3.20.1" +description = "Simple, fast, extensible JSON encoder/decoder for Python" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.5" +files = [ + {file = "simplejson-3.20.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:f5272b5866b259fe6c33c4a8c5073bf8b359c3c97b70c298a2f09a69b52c7c41"}, + {file = "simplejson-3.20.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5c0de368f3052a59a1acf21f8b2dd28686a9e4eba2da7efae7ed9554cb31e7bc"}, + {file = "simplejson-3.20.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:0821871404a537fd0e22eba240c74c0467c28af6cc435903eca394cfc74a0497"}, + {file = "simplejson-3.20.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:c939a1e576bded47d7d03aa2afc2ae90b928b2cf1d9dc2070ceec51fd463f430"}, + {file = "simplejson-3.20.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:3c4f0a61cdc05550782ca4a2cdb311ea196c2e6be6b24a09bf71360ca8c3ca9b"}, + {file = "simplejson-3.20.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:6c21f5c026ca633cfffcb6bc1fac2e99f65cb2b24657d3bef21aed9916cc3bbf"}, + {file = "simplejson-3.20.1-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:8d23b7f8d6b72319d6d55a0261089ff621ce87e54731c2d3de6a9bf7be5c028c"}, + {file = "simplejson-3.20.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:cda5c32a98f392909088111ecec23f2b0d39346ceae1a0fea23ab2d1f84ec21d"}, + {file = "simplejson-3.20.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e580aa65d5f6c3bf41b9b4afe74be5d5ddba9576701c107c772d936ea2b5043a"}, + {file = "simplejson-3.20.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4a586ce4f78cec11f22fe55c5bee0f067e803aab9bad3441afe2181693b5ebb5"}, + {file = "simplejson-3.20.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:74a1608f9e6e8c27a4008d70a54270868306d80ed48c9df7872f9f4b8ac87808"}, + {file = "simplejson-3.20.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03db8cb64154189a92a7786209f24e391644f3a3fa335658be2df2af1960b8d8"}, + {file = "simplejson-3.20.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eea7e2b7d858f6fdfbf0fe3cb846d6bd8a45446865bc09960e51f3d473c2271b"}, + {file = "simplejson-3.20.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e66712b17d8425bb7ff8968d4c7c7fd5a2dd7bd63728b28356223c000dd2f91f"}, + {file = "simplejson-3.20.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2cc4f6486f9f515b62f5831ff1888886619b84fc837de68f26d919ba7bbdcbc"}, + {file = "simplejson-3.20.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a3c2df555ee4016148fa192e2b9cd9e60bc1d40769366134882685e90aee2a1e"}, + {file = "simplejson-3.20.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:78520f04b7548a5e476b5396c0847e066f1e0a4c0c5e920da1ad65e95f410b11"}, + {file = "simplejson-3.20.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:f4bd49ecde87b0fe9f55cc971449a32832bca9910821f7072bbfae1155eaa007"}, + {file = "simplejson-3.20.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7eaae2b88eb5da53caaffdfa50e2e12022553949b88c0df4f9a9663609373f72"}, + {file = "simplejson-3.20.1-cp310-cp310-win32.whl", hash = "sha256:e836fb88902799eac8debc2b642300748f4860a197fa3d9ea502112b6bb8e142"}, + {file = "simplejson-3.20.1-cp310-cp310-win_amd64.whl", hash = "sha256:b122a19b552b212fc3b5b96fc5ce92333d4a9ac0a800803e1f17ebb16dac4be5"}, + {file = "simplejson-3.20.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:325b8c107253d3217e89d7b50c71015b5b31e2433e6c5bf38967b2f80630a8ca"}, + {file = "simplejson-3.20.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:88a7baa8211089b9e58d78fbc1b0b322103f3f3d459ff16f03a36cece0d0fcf0"}, + {file = "simplejson-3.20.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:299b1007b8101d50d95bc0db1bf5c38dc372e85b504cf77f596462083ee77e3f"}, + {file = "simplejson-3.20.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03ec618ed65caab48e81e3ed29586236a8e57daef792f1f3bb59504a7e98cd10"}, + {file = "simplejson-3.20.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cd2cdead1d3197f0ff43373cf4730213420523ba48697743e135e26f3d179f38"}, + {file = "simplejson-3.20.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3466d2839fdc83e1af42e07b90bc8ff361c4e8796cd66722a40ba14e458faddd"}, + {file = "simplejson-3.20.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d492ed8e92f3a9f9be829205f44b1d0a89af6582f0cf43e0d129fa477b93fe0c"}, + {file = "simplejson-3.20.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:f924b485537b640dc69434565463fd6fc0c68c65a8c6e01a823dd26c9983cf79"}, + {file = "simplejson-3.20.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:9e8eacf6a3491bf76ea91a8d46726368a6be0eb94993f60b8583550baae9439e"}, + {file = "simplejson-3.20.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:d34d04bf90b4cea7c22d8b19091633908f14a096caa301b24c2f3d85b5068fb8"}, + {file = "simplejson-3.20.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:69dd28d4ce38390ea4aaf212902712c0fd1093dc4c1ff67e09687c3c3e15a749"}, + {file = "simplejson-3.20.1-cp311-cp311-win32.whl", hash = "sha256:dfe7a9da5fd2a3499436cd350f31539e0a6ded5da6b5b3d422df016444d65e43"}, + {file = "simplejson-3.20.1-cp311-cp311-win_amd64.whl", hash = "sha256:896a6c04d7861d507d800da7642479c3547060bf97419d9ef73d98ced8258766"}, + {file = "simplejson-3.20.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f31c4a3a7ab18467ee73a27f3e59158255d1520f3aad74315edde7a940f1be23"}, + {file = "simplejson-3.20.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:884e6183d16b725e113b83a6fc0230152ab6627d4d36cb05c89c2c5bccfa7bc6"}, + {file = "simplejson-3.20.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:03d7a426e416fe0d3337115f04164cd9427eb4256e843a6b8751cacf70abc832"}, + {file = "simplejson-3.20.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:000602141d0bddfcff60ea6a6e97d5e10c9db6b17fd2d6c66199fa481b6214bb"}, + {file = "simplejson-3.20.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:af8377a8af78226e82e3a4349efdde59ffa421ae88be67e18cef915e4023a595"}, + {file = "simplejson-3.20.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:15c7de4c88ab2fbcb8781a3b982ef883696736134e20b1210bca43fb42ff1acf"}, + {file = "simplejson-3.20.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:455a882ff3f97d810709f7b620007d4e0aca8da71d06fc5c18ba11daf1c4df49"}, + {file = "simplejson-3.20.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:fc0f523ce923e7f38eb67804bc80e0a028c76d7868500aa3f59225574b5d0453"}, + {file = "simplejson-3.20.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:76461ec929282dde4a08061071a47281ad939d0202dc4e63cdd135844e162fbc"}, + {file = "simplejson-3.20.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:ab19c2da8c043607bde4d4ef3a6b633e668a7d2e3d56f40a476a74c5ea71949f"}, + {file = "simplejson-3.20.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b2578bedaedf6294415197b267d4ef678fea336dd78ee2a6d2f4b028e9d07be3"}, + {file = "simplejson-3.20.1-cp312-cp312-win32.whl", hash = "sha256:339f407373325a36b7fd744b688ba5bae0666b5d340ec6d98aebc3014bf3d8ea"}, + {file = "simplejson-3.20.1-cp312-cp312-win_amd64.whl", hash = "sha256:627d4486a1ea7edf1f66bb044ace1ce6b4c1698acd1b05353c97ba4864ea2e17"}, + {file = "simplejson-3.20.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:71e849e7ceb2178344998cbe5ade101f1b329460243c79c27fbfc51c0447a7c3"}, + {file = "simplejson-3.20.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b63fdbab29dc3868d6f009a59797cefaba315fd43cd32ddd998ee1da28e50e29"}, + {file = "simplejson-3.20.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1190f9a3ce644fd50ec277ac4a98c0517f532cfebdcc4bd975c0979a9f05e1fb"}, + {file = "simplejson-3.20.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c1336ba7bcb722ad487cd265701ff0583c0bb6de638364ca947bb84ecc0015d1"}, + {file = "simplejson-3.20.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e975aac6a5acd8b510eba58d5591e10a03e3d16c1cf8a8624ca177491f7230f0"}, + {file = "simplejson-3.20.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6a6dd11ee282937ad749da6f3b8d87952ad585b26e5edfa10da3ae2536c73078"}, + {file = "simplejson-3.20.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ab980fcc446ab87ea0879edad41a5c28f2d86020014eb035cf5161e8de4474c6"}, + {file = "simplejson-3.20.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f5aee2a4cb6b146bd17333ac623610f069f34e8f31d2f4f0c1a2186e50c594f0"}, + {file = "simplejson-3.20.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:652d8eecbb9a3b6461b21ec7cf11fd0acbab144e45e600c817ecf18e4580b99e"}, + {file = "simplejson-3.20.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:8c09948f1a486a89251ee3a67c9f8c969b379f6ffff1a6064b41fea3bce0a112"}, + {file = "simplejson-3.20.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:cbbd7b215ad4fc6f058b5dd4c26ee5c59f72e031dfda3ac183d7968a99e4ca3a"}, + {file = "simplejson-3.20.1-cp313-cp313-win32.whl", hash = "sha256:ae81e482476eaa088ef9d0120ae5345de924f23962c0c1e20abbdff597631f87"}, + {file = "simplejson-3.20.1-cp313-cp313-win_amd64.whl", hash = "sha256:1b9fd15853b90aec3b1739f4471efbf1ac05066a2c7041bf8db821bb73cd2ddc"}, + {file = "simplejson-3.20.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:c7edf279c1376f28bf41e916c015a2a08896597869d57d621f55b6a30c7e1e6d"}, + {file = "simplejson-3.20.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9202b9de38f12e99a40addd1a8d508a13c77f46d87ab1f9095f154667f4fe81"}, + {file = "simplejson-3.20.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:391345b4157cc4e120027e013bd35c45e2c191e2bf48b8913af488cdc3b9243c"}, + {file = "simplejson-3.20.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c6fdcc9debb711ddd2ad6d69f9386a3d9e8e253234bbb30513e0a7caa9510c51"}, + {file = "simplejson-3.20.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9daf8cdc7ee8a9e9f7a3b313ba0a003391857e90d0e82fbcd4d614aa05cb7c3b"}, + {file = "simplejson-3.20.1-cp36-cp36m-musllinux_1_2_aarch64.whl", hash = "sha256:c02f4868a3a46ffe284a51a88d134dc96feff6079a7115164885331a1ba8ed9f"}, + {file = "simplejson-3.20.1-cp36-cp36m-musllinux_1_2_i686.whl", hash = "sha256:3d7310172d5340febd258cb147f46aae30ad57c445f4d7e1ae8461c10aaf43b0"}, + {file = "simplejson-3.20.1-cp36-cp36m-musllinux_1_2_ppc64le.whl", hash = "sha256:4762e05577955312a4c6802f58dd02e040cc79ae59cda510aa1564d84449c102"}, + {file = "simplejson-3.20.1-cp36-cp36m-musllinux_1_2_x86_64.whl", hash = "sha256:8bb98fdf318c05aefd08a92583bd6ee148e93c6756fb1befb7b2d5f27824be78"}, + {file = "simplejson-3.20.1-cp36-cp36m-win32.whl", hash = "sha256:9a74e70818818981294b8e6956ce3496c5e1bd4726ac864fae473197671f7b85"}, + {file = "simplejson-3.20.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e041add470e8f8535cc05509485eb7205729a84441f03b25cde80ad48823792e"}, + {file = "simplejson-3.20.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7e9d73f46119240e4f4f07868241749d67d09873f40cb968d639aa9ccc488b86"}, + {file = "simplejson-3.20.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ae6e637dc24f8fee332ed23dd070e81394138e42cd4fd9d0923e5045ba122e27"}, + {file = "simplejson-3.20.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:efd3bc6c6b17e3d4620eb6be5196f0d1c08b6ce7c3101fa8e292b79e0908944b"}, + {file = "simplejson-3.20.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:87fc623d457173a0213bc9ca4e346b83c9d443f63ed5cca847fb0cacea3cfc95"}, + {file = "simplejson-3.20.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec6a1e0a7aff76f0e008bebfa950188b9c50b58c1885d898145f48fc8e189a56"}, + {file = "simplejson-3.20.1-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:9c079606f461a6e950099167e21e13985147c8a24be8eea66c9ad68f73fad744"}, + {file = "simplejson-3.20.1-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:9faceb68fba27ef17eda306e4cd97a7b4b14fdadca5fbb15790ba8b26ebeec0c"}, + {file = "simplejson-3.20.1-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:7ceed598e4bacbf5133fe7a418f7991bb2df0683f3ac11fbf9e36a2bc7aa4b85"}, + {file = "simplejson-3.20.1-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:ede69c765e9901861ad7c6139023b7b7d5807c48a2539d817b4ab40018002d5f"}, + {file = "simplejson-3.20.1-cp37-cp37m-win32.whl", hash = "sha256:d8853c269a4c5146ddca4aa7c70e631795e9d11239d5fedb1c6bbc91ffdebcac"}, + {file = "simplejson-3.20.1-cp37-cp37m-win_amd64.whl", hash = "sha256:ed6a17fd397f0e2b3ad668fc9e19253ed2e3875ad9086bd7f795c29a3223f4a1"}, + {file = "simplejson-3.20.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:7551682b60bba3a9e2780742e101cf0a64250e76de7d09b1c4b0c8a7c7cc6834"}, + {file = "simplejson-3.20.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bd9577ec1c8c3a43040e3787711e4c257c70035b7551a21854b5dec88dad09e1"}, + {file = "simplejson-3.20.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4a8e197e4cf6d42c2c57e7c52cd7c1e7b3e37c5911df1314fb393320131e2101"}, + {file = "simplejson-3.20.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bd09c8c75666e7f62a33d2f1fb57f81da1fcbb19a9fe7d7910b5756e1dd6048"}, + {file = "simplejson-3.20.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1bd6bfe5678d73fbd5328eea6a35216503796428fc47f1237432522febaf3a0c"}, + {file = "simplejson-3.20.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:71b75d448fd0ceb2e7c90e72bb82c41f8462550d48529980bc0bab1d2495bfbb"}, + {file = "simplejson-3.20.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a7e15b716d09f318c8cda3e20f82fae81684ce3d3acd1d7770fa3007df1769de"}, + {file = "simplejson-3.20.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:3e7963197d958fcf9e98b212b80977d56c022384621ff463d98afc3b6b1ce7e8"}, + {file = "simplejson-3.20.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:2e671dd62051129185d3a9a92c60101f56cbc174854a1a3dfb69114ebd9e1699"}, + {file = "simplejson-3.20.1-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:e25b2a0c396f3b84fb89573d07b0e1846ed563eb364f2ea8230ca92b8a8cb786"}, + {file = "simplejson-3.20.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:489c3a43116082bad56795215786313832ba3991cca1f55838e52a553f451ab6"}, + {file = "simplejson-3.20.1-cp38-cp38-win32.whl", hash = "sha256:4a92e948bad8df7fa900ba2ba0667a98303f3db206cbaac574935c332838208e"}, + {file = "simplejson-3.20.1-cp38-cp38-win_amd64.whl", hash = "sha256:49d059b8363327eee3c94799dd96782314b2dbd7bcc293b4ad48db69d6f4d362"}, + {file = "simplejson-3.20.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a8011f1dd1d676befcd4d675ebdbfdbbefd3bf350052b956ba8c699fca7d8cef"}, + {file = "simplejson-3.20.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e91703a4c5fec53e36875ae426ad785f4120bd1d93b65bed4752eeccd1789e0c"}, + {file = "simplejson-3.20.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e39eaa57c7757daa25bcd21f976c46be443b73dd6c3da47fe5ce7b7048ccefe2"}, + {file = "simplejson-3.20.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ceab2ce2acdc7fbaa433a93006758db6ba9a659e80c4faa13b80b9d2318e9b17"}, + {file = "simplejson-3.20.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6d4f320c33277a5b715db5bf5b10dae10c19076bd6d66c2843e04bd12d1f1ea5"}, + {file = "simplejson-3.20.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2b6436c48e64378fa844d8c9e58a5ed0352bbcfd4028369a9b46679b7ab79d2d"}, + {file = "simplejson-3.20.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e18345c8dda5d699be8166b61f9d80aaee4545b709f1363f60813dc032dac53"}, + {file = "simplejson-3.20.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:90b573693d1526bed576f6817e2a492eaaef68f088b57d7a9e83d122bbb49e51"}, + {file = "simplejson-3.20.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:272cc767826e924a6bd369ea3dbf18e166ded29059c7a4d64d21a9a22424b5b5"}, + {file = "simplejson-3.20.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:51b41f284d603c4380732d7d619f8b34bd04bc4aa0ed0ed5f4ffd0539b14da44"}, + {file = "simplejson-3.20.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:6e6697a3067d281f01de0fe96fc7cba4ea870d96d7deb7bfcf85186d74456503"}, + {file = "simplejson-3.20.1-cp39-cp39-win32.whl", hash = "sha256:6dd3a1d5aca87bf947f3339b0f8e8e329f1badf548bdbff37fac63c17936da8e"}, + {file = "simplejson-3.20.1-cp39-cp39-win_amd64.whl", hash = "sha256:463f1fca8fbf23d088e5850fdd0dd4d5faea8900a9f9680270bd98fd649814ca"}, + {file = "simplejson-3.20.1-py3-none-any.whl", hash = "sha256:8a6c1bbac39fa4a79f83cbf1df6ccd8ff7069582a9fd8db1e52cea073bc2c697"}, + {file = "simplejson-3.20.1.tar.gz", hash = "sha256:e64139b4ec4f1f24c142ff7dcafe55a22b811a74d86d66560c8815687143037d"}, +] + [[package]] name = "six" version = "1.16.0" @@ -1127,6 +1799,51 @@ pure-eval = "*" [package.extras] tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] +[[package]] +name = "tensorstore" +version = "0.1.72" +description = "Read and write large, multi-dimensional arrays" +optional = false +python-versions = ">=3.10" +files = [ + {file = "tensorstore-0.1.72-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:a41b4fe0603943d23472619a8ada70b8d2c9458747fad88b0ce7b29f1ccf4e74"}, + {file = "tensorstore-0.1.72-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:170172b698fefb4b5507c6cb339ca0b75d56d12ba6a43d9569c61800c1eeb121"}, + {file = "tensorstore-0.1.72-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b71134b85f540e17a1ae65da1fb906781b7470ef0ed71d98d29459325897f574"}, + {file = "tensorstore-0.1.72-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:08c5318535aac5e20e247c6e9b43f5887b2293f548de7279650bc73804ccf3ed"}, + {file = "tensorstore-0.1.72-cp310-cp310-win_amd64.whl", hash = "sha256:9113d3fcf78c1366688aa90ee7efdc86b57962ea72276944cc57e916a6180749"}, + {file = "tensorstore-0.1.72-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:599cc7b26b0c96373e89ff5bcf9b76e832802169229680bef985b10011f9bae7"}, + {file = "tensorstore-0.1.72-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a7e7b02da26ca5c95b3c613efd0fe10c082dfa4dc3e9818fefc69e30fe70ea1e"}, + {file = "tensorstore-0.1.72-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a6825cdb6751663ca0bd9abd528ea354ad2199f549bf1f36feac79a6c06efe2"}, + {file = "tensorstore-0.1.72-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ed916b9aeca242a3f367679f65ba376149251ebb28b873becd76c73b688399b6"}, + {file = "tensorstore-0.1.72-cp311-cp311-win_amd64.whl", hash = "sha256:5d410c879dc4b34036ec38e20ff05c7e3b0ad5d1eb595412b27a9dbb5e435035"}, + {file = "tensorstore-0.1.72-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:92fac5e2cbc90e5ca8fc72c5bf112816d981e266a3cf9fb1681ba8b3f59537ef"}, + {file = "tensorstore-0.1.72-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7c9413f8318a4fa259ec5325f569c0759bccee936df44bd2f7bb35c8afdcdfc8"}, + {file = "tensorstore-0.1.72-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c0f722218f494b1631dbec451b9863f579054e27da2f39aab418db4493694abe"}, + {file = "tensorstore-0.1.72-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5dced3f367308e9fa8e7b72e9e57a4c491fa47c066e035ac33421e2b2408e3f"}, + {file = "tensorstore-0.1.72-cp312-cp312-win_amd64.whl", hash = "sha256:721d599db0113d75ab6ba1365989bbaf2ab752d7a6268f975c8bfd3a8eb6084b"}, + {file = "tensorstore-0.1.72-cp313-cp313-macosx_10_14_x86_64.whl", hash = "sha256:9c3a36f681ffcc104ba931d471447e8901e64e8cc6913b61792870ff59529961"}, + {file = "tensorstore-0.1.72-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0cd951e593a17babbbde1410cfadb4a04e1cddfa5ace0de5ccb41029223f96b9"}, + {file = "tensorstore-0.1.72-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2fdfa0118be0721c110bcbe7e464758f78d3e14ee8c30a911eb8f4465e6c2e81"}, + {file = "tensorstore-0.1.72-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ed6fe937b0433b573c3d6805d0759d33ccc24aa2aba720e4b8ba689c2f9775f"}, + {file = "tensorstore-0.1.72-cp313-cp313-win_amd64.whl", hash = "sha256:66c0658689243af0825fff222fb56fdf05a8553bcb3b471dbf18830161302986"}, + {file = "tensorstore-0.1.72.tar.gz", hash = "sha256:763d7f6898711783f199c8226a9c0b259546f5c6d9b4dc0ad3c9e39627060022"}, +] + +[package.dependencies] +ml_dtypes = ">=0.3.1" +numpy = ">=1.22.0" + +[[package]] +name = "toolz" +version = "1.0.0" +description = "List processing tools and functional utilities" +optional = false +python-versions = ">=3.8" +files = [ + {file = "toolz-1.0.0-py3-none-any.whl", hash = "sha256:292c8f1c4e7516bf9086f8850935c799a874039c8bcf959d47b600e4c44a6236"}, + {file = "toolz-1.0.0.tar.gz", hash = "sha256:2c86e3d9a04798ac556793bced838816296a2f085017664e4995cb40a1047a02"}, +] + [[package]] name = "tqdm" version = "4.66.5" @@ -1162,6 +1879,37 @@ files = [ docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<8.2)", "pytest-mock", "pytest-mypy-testing"] +[[package]] +name = "treescope" +version = "0.1.9" +description = "Treescope: An interactive HTML pretty-printer for ML research in IPython notebooks." +optional = false +python-versions = ">=3.10" +files = [ + {file = "treescope-0.1.9-py3-none-any.whl", hash = "sha256:68677013a9f0228212fccf835f3fb037be07ae8b4c5f6f58eefab11198f83cf7"}, + {file = "treescope-0.1.9.tar.gz", hash = "sha256:ba6cdbdc9c5b52691d5f3bb4c5d5c7daa5627119acac8640b46d37e6aabe63a6"}, +] + +[package.dependencies] +numpy = ">=1.25.2" + +[package.extras] +dev = ["ipython", "jupyter", "pyink (>=24.3.0)", "pylint (>=2.6.0)", "pytest (>=8.2.2)", "pytype"] +docs = ["ipython", "ipython (>=8.8.0)", "jax[cpu] (>=0.4.23)", "matplotlib (>=3.5.0)", "myst-nb (>=1.0.0)", "myst-parser (>=3.0.1)", "packaging (==24.1)", "palettable (==3.3.3)", "pandas (==2.2.2)", "penzai (>=0.2.4,<0.3.0)", "plotly (==5.22.0)", "sphinx (>=6.0.0,<7.3.0)", "sphinx-book-theme (>=1.0.1)", "sphinx-hoverxref", "sphinx_contributors", "sphinxcontrib-katex", "torch (==2.3.1)"] +notebook = ["ipython", "jax (>=0.4.23)", "palettable"] +test = ["absl-py (>=1.4.0)", "jax (>=0.4.23)", "omegaconf (>=2.0.0)", "pydantic (>=2.0.0)", "pytest (>=8.2.2)", "torch (>=2.0.0)"] + +[[package]] +name = "typing-extensions" +version = "4.12.2" +description = "Backported and Experimental Type Hints for Python 3.8+" +optional = false +python-versions = ">=3.8" +files = [ + {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, + {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, +] + [[package]] name = "tzdata" version = "2024.1" @@ -1198,7 +1946,26 @@ files = [ [package.extras] test = ["pytest (>=6.0.0)", "setuptools (>=65)"] +[[package]] +name = "zipp" +version = "3.21.0" +description = "Backport of pathlib-compatible object wrapper for zip files" +optional = false +python-versions = ">=3.9" +files = [ + {file = "zipp-3.21.0-py3-none-any.whl", hash = "sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931"}, + {file = "zipp-3.21.0.tar.gz", hash = "sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4"}, +] + +[package.extras] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +enabler = ["pytest-enabler (>=2.2)"] +test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"] +type = ["pytest-mypy"] + [metadata] lock-version = "2.0" python-versions = "^3.12" -content-hash = "f802131d57996774dddc2b3f1467aa5df28e90f21b6236274f68d192967663ff" +content-hash = "117645b34e29f7c79154a3464486ffc61daa7de91e87cd91179dd579bdcaa8e5" diff --git a/pyproject.toml b/pyproject.toml index 815a4d7..66a9c75 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -18,6 +18,8 @@ wheel = "^0.44.0" setuptools-rust = "^1.10.1" iced-x86 = "^1.21.0" scipy = "^1.14.0" +jax = "^0.5.3" +flax = "^0.10.4" [build-system] diff --git a/weights/checkpoint_10/_CHECKPOINT_METADATA b/weights/checkpoint_10/_CHECKPOINT_METADATA index fb59619..3b9ec13 100644 --- a/weights/checkpoint_10/_CHECKPOINT_METADATA +++ b/weights/checkpoint_10/_CHECKPOINT_METADATA @@ -1 +1 @@ -{"item_handlers": "orbax.checkpoint._src.handlers.pytree_checkpoint_handler.PyTreeCheckpointHandler", "metrics": {}, "performance_metrics": {}, "init_timestamp_nsecs": 1740524978570038503, "commit_timestamp_nsecs": 1740524978910276226, "custom": {}} \ No newline at end of file +{"item_handlers": "orbax.checkpoint._src.handlers.pytree_checkpoint_handler.PyTreeCheckpointHandler", "metrics": {}, "performance_metrics": {}, "init_timestamp_nsecs": 1742949866281792936, "commit_timestamp_nsecs": 1742949866840282865, "custom_metadata": {}} \ No newline at end of file diff --git a/weights/checkpoint_10/_METADATA b/weights/checkpoint_10/_METADATA index 4ac2dc4..56ac739 100644 --- a/weights/checkpoint_10/_METADATA +++ b/weights/checkpoint_10/_METADATA @@ -1 +1 @@ -{"tree_metadata": {"('step',)": {"key_metadata": [{"key": "step", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'BatchNorm_0', 'bias')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'BatchNorm_0', 'scale')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'BatchNorm_1', 'bias')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "BatchNorm_1", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'BatchNorm_1', 'scale')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "BatchNorm_1", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'BatchNorm_2', 'bias')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "BatchNorm_2", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'BatchNorm_2', 'scale')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "BatchNorm_2", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'BatchNorm_3', 'bias')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "BatchNorm_3", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'BatchNorm_3', 'scale')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "BatchNorm_3", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'Dense_0', 'bias')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'Dense_0', 'kernel')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'Dense_1', 'bias')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'Dense_1', 'kernel')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'GINConv_0', 'MLP_0', 'BatchNorm_0', 'bias')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'GINConv_0', 'MLP_0', 'BatchNorm_0', 'scale')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'GINConv_0', 'MLP_0', 'Dense_0', 'bias')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'GINConv_0', 'MLP_0', 'Dense_0', 'kernel')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'GINConv_0', 'MLP_0', 'Dense_1', 'bias')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'GINConv_0', 'MLP_0', 'Dense_1', 'kernel')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'GINConv_0', 'eps')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "eps", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'GINConv_1', 'MLP_0', 'BatchNorm_0', 'bias')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'GINConv_1', 'MLP_0', 'BatchNorm_0', 'scale')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'GINConv_1', 'MLP_0', 'Dense_0', 'bias')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'GINConv_1', 'MLP_0', 'Dense_0', 'kernel')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'GINConv_1', 'MLP_0', 'Dense_1', 'bias')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'GINConv_1', 'MLP_0', 'Dense_1', 'kernel')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'GINConv_1', 'eps')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "eps", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'GINConv_2', 'MLP_0', 'BatchNorm_0', 'bias')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'GINConv_2', 'MLP_0', 'BatchNorm_0', 'scale')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'GINConv_2', 'MLP_0', 'Dense_0', 'bias')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'GINConv_2', 'MLP_0', 'Dense_0', 'kernel')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'GINConv_2', 'MLP_0', 'Dense_1', 'bias')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'GINConv_2', 'MLP_0', 'Dense_1', 'kernel')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'GINConv_2', 'eps')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "eps", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'GINConv_3', 'MLP_0', 'BatchNorm_0', 'bias')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'GINConv_3', 'MLP_0', 'BatchNorm_0', 'scale')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'GINConv_3', 'MLP_0', 'Dense_0', 'bias')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'GINConv_3', 'MLP_0', 'Dense_0', 'kernel')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'GINConv_3', 'MLP_0', 'Dense_1', 'bias')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'GINConv_3', 'MLP_0', 'Dense_1', 'kernel')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'GINConv_3', 'eps')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "eps", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'LayerNorm_0', 'bias')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "LayerNorm_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('params', 'LayerNorm_0', 'scale')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "LayerNorm_0", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'count')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "count", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'BatchNorm_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'BatchNorm_0', 'scale')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'BatchNorm_1', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "BatchNorm_1", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'BatchNorm_1', 'scale')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "BatchNorm_1", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'BatchNorm_2', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "BatchNorm_2", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'BatchNorm_2', 'scale')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "BatchNorm_2", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'BatchNorm_3', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "BatchNorm_3", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'BatchNorm_3', 'scale')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "BatchNorm_3", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'Dense_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'Dense_0', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'Dense_1', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'Dense_1', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'GINConv_0', 'MLP_0', 'BatchNorm_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'GINConv_0', 'MLP_0', 'BatchNorm_0', 'scale')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'GINConv_0', 'MLP_0', 'Dense_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'GINConv_0', 'MLP_0', 'Dense_0', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'GINConv_0', 'MLP_0', 'Dense_1', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'GINConv_0', 'MLP_0', 'Dense_1', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'GINConv_0', 'eps')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "eps", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'GINConv_1', 'MLP_0', 'BatchNorm_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'GINConv_1', 'MLP_0', 'BatchNorm_0', 'scale')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'GINConv_1', 'MLP_0', 'Dense_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'GINConv_1', 'MLP_0', 'Dense_0', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'GINConv_1', 'MLP_0', 'Dense_1', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'GINConv_1', 'MLP_0', 'Dense_1', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'GINConv_1', 'eps')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "eps", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'GINConv_2', 'MLP_0', 'BatchNorm_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'GINConv_2', 'MLP_0', 'BatchNorm_0', 'scale')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'GINConv_2', 'MLP_0', 'Dense_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'GINConv_2', 'MLP_0', 'Dense_0', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'GINConv_2', 'MLP_0', 'Dense_1', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'GINConv_2', 'MLP_0', 'Dense_1', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'GINConv_2', 'eps')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "eps", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'GINConv_3', 'MLP_0', 'BatchNorm_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'GINConv_3', 'MLP_0', 'BatchNorm_0', 'scale')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'GINConv_3', 'MLP_0', 'Dense_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'GINConv_3', 'MLP_0', 'Dense_0', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'GINConv_3', 'MLP_0', 'Dense_1', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'GINConv_3', 'MLP_0', 'Dense_1', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'GINConv_3', 'eps')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "eps", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'LayerNorm_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "LayerNorm_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'mu', 'LayerNorm_0', 'scale')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "LayerNorm_0", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'BatchNorm_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'BatchNorm_0', 'scale')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'BatchNorm_1', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "BatchNorm_1", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'BatchNorm_1', 'scale')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "BatchNorm_1", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'BatchNorm_2', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "BatchNorm_2", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'BatchNorm_2', 'scale')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "BatchNorm_2", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'BatchNorm_3', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "BatchNorm_3", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'BatchNorm_3', 'scale')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "BatchNorm_3", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'Dense_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'Dense_0', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'Dense_1', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'Dense_1', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'GINConv_0', 'MLP_0', 'BatchNorm_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'GINConv_0', 'MLP_0', 'BatchNorm_0', 'scale')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'GINConv_0', 'MLP_0', 'Dense_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'GINConv_0', 'MLP_0', 'Dense_0', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'GINConv_0', 'MLP_0', 'Dense_1', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'GINConv_0', 'MLP_0', 'Dense_1', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'GINConv_0', 'eps')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "eps", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'GINConv_1', 'MLP_0', 'BatchNorm_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'GINConv_1', 'MLP_0', 'BatchNorm_0', 'scale')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'GINConv_1', 'MLP_0', 'Dense_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'GINConv_1', 'MLP_0', 'Dense_0', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'GINConv_1', 'MLP_0', 'Dense_1', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'GINConv_1', 'MLP_0', 'Dense_1', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'GINConv_1', 'eps')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "eps", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'GINConv_2', 'MLP_0', 'BatchNorm_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'GINConv_2', 'MLP_0', 'BatchNorm_0', 'scale')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'GINConv_2', 'MLP_0', 'Dense_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'GINConv_2', 'MLP_0', 'Dense_0', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'GINConv_2', 'MLP_0', 'Dense_1', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'GINConv_2', 'MLP_0', 'Dense_1', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'GINConv_2', 'eps')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "eps", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'GINConv_3', 'MLP_0', 'BatchNorm_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'GINConv_3', 'MLP_0', 'BatchNorm_0', 'scale')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'GINConv_3', 'MLP_0', 'Dense_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'GINConv_3', 'MLP_0', 'Dense_0', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'GINConv_3', 'MLP_0', 'Dense_1', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'GINConv_3', 'MLP_0', 'Dense_1', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'GINConv_3', 'eps')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "eps", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'LayerNorm_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "LayerNorm_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '0', 'nu', 'LayerNorm_0', 'scale')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "LayerNorm_0", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('opt_state', '1')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "1", "key_type": 1}], "value_metadata": {"value_type": "None", "skip_deserialize": true}}, "('batch_stats', 'BatchNorm_0', 'mean')": {"key_metadata": [{"key": "batch_stats", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "mean", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('batch_stats', 'BatchNorm_0', 'var')": {"key_metadata": [{"key": "batch_stats", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "var", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('batch_stats', 'BatchNorm_1', 'mean')": {"key_metadata": [{"key": "batch_stats", "key_type": 2}, {"key": "BatchNorm_1", "key_type": 2}, {"key": "mean", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('batch_stats', 'BatchNorm_1', 'var')": {"key_metadata": [{"key": "batch_stats", "key_type": 2}, {"key": "BatchNorm_1", "key_type": 2}, {"key": "var", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('batch_stats', 'BatchNorm_2', 'mean')": {"key_metadata": [{"key": "batch_stats", "key_type": 2}, {"key": "BatchNorm_2", "key_type": 2}, {"key": "mean", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('batch_stats', 'BatchNorm_2', 'var')": {"key_metadata": [{"key": "batch_stats", "key_type": 2}, {"key": "BatchNorm_2", "key_type": 2}, {"key": "var", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('batch_stats', 'BatchNorm_3', 'mean')": {"key_metadata": [{"key": "batch_stats", "key_type": 2}, {"key": "BatchNorm_3", "key_type": 2}, {"key": "mean", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('batch_stats', 'BatchNorm_3', 'var')": {"key_metadata": [{"key": "batch_stats", "key_type": 2}, {"key": "BatchNorm_3", "key_type": 2}, {"key": "var", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('batch_stats', 'GINConv_0', 'MLP_0', 'BatchNorm_0', 'mean')": {"key_metadata": [{"key": "batch_stats", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "mean", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('batch_stats', 'GINConv_0', 'MLP_0', 'BatchNorm_0', 'var')": {"key_metadata": [{"key": "batch_stats", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "var", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('batch_stats', 'GINConv_1', 'MLP_0', 'BatchNorm_0', 'mean')": {"key_metadata": [{"key": "batch_stats", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "mean", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('batch_stats', 'GINConv_1', 'MLP_0', 'BatchNorm_0', 'var')": {"key_metadata": [{"key": "batch_stats", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "var", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('batch_stats', 'GINConv_2', 'MLP_0', 'BatchNorm_0', 'mean')": {"key_metadata": [{"key": "batch_stats", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "mean", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('batch_stats', 'GINConv_2', 'MLP_0', 'BatchNorm_0', 'var')": {"key_metadata": [{"key": "batch_stats", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "var", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('batch_stats', 'GINConv_3', 'MLP_0', 'BatchNorm_0', 'mean')": {"key_metadata": [{"key": "batch_stats", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "mean", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}, "('batch_stats', 'GINConv_3', 'MLP_0', 'BatchNorm_0', 'var')": {"key_metadata": [{"key": "batch_stats", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "var", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false}}}, "use_zarr3": false, "store_array_data_equal_to_fill_value": true, "custom_metadata": null} \ No newline at end of file +{"tree_metadata": {"('step',)": {"key_metadata": [{"key": "step", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": []}}, "('params', 'BatchNorm_0', 'bias')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96]}}, "('params', 'BatchNorm_0', 'scale')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96]}}, "('params', 'BatchNorm_1', 'bias')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "BatchNorm_1", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96]}}, "('params', 'BatchNorm_1', 'scale')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "BatchNorm_1", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96]}}, "('params', 'BatchNorm_2', 'bias')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "BatchNorm_2", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96]}}, "('params', 'BatchNorm_2', 'scale')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "BatchNorm_2", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96]}}, "('params', 'BatchNorm_3', 'bias')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "BatchNorm_3", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96]}}, "('params', 'BatchNorm_3', 'scale')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "BatchNorm_3", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96]}}, "('params', 'Dense_0', 'bias')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96]}}, "('params', 'Dense_0', 'kernel')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96, 96]}}, "('params', 'Dense_1', 'bias')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [2]}}, "('params', 'Dense_1', 'kernel')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96, 2]}}, "('params', 'GINConv_0', 'MLP_0', 'BatchNorm_0', 'bias')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [192]}}, "('params', 'GINConv_0', 'MLP_0', 'BatchNorm_0', 'scale')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [192]}}, "('params', 'GINConv_0', 'MLP_0', 'Dense_0', 'bias')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [192]}}, "('params', 'GINConv_0', 'MLP_0', 'Dense_0', 'kernel')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [1, 192]}}, "('params', 'GINConv_0', 'MLP_0', 'Dense_1', 'bias')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96]}}, "('params', 'GINConv_0', 'MLP_0', 'Dense_1', 'kernel')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [192, 96]}}, "('params', 'GINConv_0', 'eps')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "eps", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": []}}, "('params', 'GINConv_1', 'MLP_0', 'BatchNorm_0', 'bias')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [192]}}, "('params', 'GINConv_1', 'MLP_0', 'BatchNorm_0', 'scale')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [192]}}, "('params', 'GINConv_1', 'MLP_0', 'Dense_0', 'bias')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [192]}}, "('params', 'GINConv_1', 'MLP_0', 'Dense_0', 'kernel')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96, 192]}}, "('params', 'GINConv_1', 'MLP_0', 'Dense_1', 'bias')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96]}}, "('params', 'GINConv_1', 'MLP_0', 'Dense_1', 'kernel')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [192, 96]}}, "('params', 'GINConv_1', 'eps')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "eps", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": []}}, "('params', 'GINConv_2', 'MLP_0', 'BatchNorm_0', 'bias')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [192]}}, "('params', 'GINConv_2', 'MLP_0', 'BatchNorm_0', 'scale')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [192]}}, "('params', 'GINConv_2', 'MLP_0', 'Dense_0', 'bias')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [192]}}, "('params', 'GINConv_2', 'MLP_0', 'Dense_0', 'kernel')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96, 192]}}, "('params', 'GINConv_2', 'MLP_0', 'Dense_1', 'bias')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96]}}, "('params', 'GINConv_2', 'MLP_0', 'Dense_1', 'kernel')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [192, 96]}}, "('params', 'GINConv_2', 'eps')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "eps", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": []}}, "('params', 'GINConv_3', 'MLP_0', 'BatchNorm_0', 'bias')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [192]}}, "('params', 'GINConv_3', 'MLP_0', 'BatchNorm_0', 'scale')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [192]}}, "('params', 'GINConv_3', 'MLP_0', 'Dense_0', 'bias')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [192]}}, "('params', 'GINConv_3', 'MLP_0', 'Dense_0', 'kernel')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96, 192]}}, "('params', 'GINConv_3', 'MLP_0', 'Dense_1', 'bias')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96]}}, "('params', 'GINConv_3', 'MLP_0', 'Dense_1', 'kernel')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [192, 96]}}, "('params', 'GINConv_3', 'eps')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "eps", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": []}}, "('params', 'LayerNorm_0', 'bias')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "LayerNorm_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96]}}, "('params', 'LayerNorm_0', 'scale')": {"key_metadata": [{"key": "params", "key_type": 2}, {"key": "LayerNorm_0", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96]}}, "('opt_state', '0', 'count')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "count", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": []}}, "('opt_state', '0', 'mu', 'BatchNorm_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96]}}, "('opt_state', '0', 'mu', 'BatchNorm_0', 'scale')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96]}}, "('opt_state', '0', 'mu', 'BatchNorm_1', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "BatchNorm_1", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96]}}, "('opt_state', '0', 'mu', 'BatchNorm_1', 'scale')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "BatchNorm_1", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96]}}, "('opt_state', '0', 'mu', 'BatchNorm_2', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "BatchNorm_2", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96]}}, "('opt_state', '0', 'mu', 'BatchNorm_2', 'scale')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "BatchNorm_2", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96]}}, "('opt_state', '0', 'mu', 'BatchNorm_3', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "BatchNorm_3", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96]}}, "('opt_state', '0', 'mu', 'BatchNorm_3', 'scale')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "BatchNorm_3", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96]}}, "('opt_state', '0', 'mu', 'Dense_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96]}}, "('opt_state', '0', 'mu', 'Dense_0', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96, 96]}}, "('opt_state', '0', 'mu', 'Dense_1', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [2]}}, "('opt_state', '0', 'mu', 'Dense_1', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96, 2]}}, "('opt_state', '0', 'mu', 'GINConv_0', 'MLP_0', 'BatchNorm_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [192]}}, "('opt_state', '0', 'mu', 'GINConv_0', 'MLP_0', 'BatchNorm_0', 'scale')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [192]}}, "('opt_state', '0', 'mu', 'GINConv_0', 'MLP_0', 'Dense_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [192]}}, "('opt_state', '0', 'mu', 'GINConv_0', 'MLP_0', 'Dense_0', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [1, 192]}}, "('opt_state', '0', 'mu', 'GINConv_0', 'MLP_0', 'Dense_1', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96]}}, "('opt_state', '0', 'mu', 'GINConv_0', 'MLP_0', 'Dense_1', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [192, 96]}}, "('opt_state', '0', 'mu', 'GINConv_0', 'eps')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "eps", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": []}}, "('opt_state', '0', 'mu', 'GINConv_1', 'MLP_0', 'BatchNorm_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [192]}}, "('opt_state', '0', 'mu', 'GINConv_1', 'MLP_0', 'BatchNorm_0', 'scale')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [192]}}, "('opt_state', '0', 'mu', 'GINConv_1', 'MLP_0', 'Dense_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [192]}}, "('opt_state', '0', 'mu', 'GINConv_1', 'MLP_0', 'Dense_0', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96, 192]}}, "('opt_state', '0', 'mu', 'GINConv_1', 'MLP_0', 'Dense_1', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96]}}, "('opt_state', '0', 'mu', 'GINConv_1', 'MLP_0', 'Dense_1', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [192, 96]}}, "('opt_state', '0', 'mu', 'GINConv_1', 'eps')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "eps", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": []}}, "('opt_state', '0', 'mu', 'GINConv_2', 'MLP_0', 'BatchNorm_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [192]}}, "('opt_state', '0', 'mu', 'GINConv_2', 'MLP_0', 'BatchNorm_0', 'scale')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [192]}}, "('opt_state', '0', 'mu', 'GINConv_2', 'MLP_0', 'Dense_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [192]}}, "('opt_state', '0', 'mu', 'GINConv_2', 'MLP_0', 'Dense_0', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96, 192]}}, "('opt_state', '0', 'mu', 'GINConv_2', 'MLP_0', 'Dense_1', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96]}}, "('opt_state', '0', 'mu', 'GINConv_2', 'MLP_0', 'Dense_1', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [192, 96]}}, "('opt_state', '0', 'mu', 'GINConv_2', 'eps')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "eps", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": []}}, "('opt_state', '0', 'mu', 'GINConv_3', 'MLP_0', 'BatchNorm_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [192]}}, "('opt_state', '0', 'mu', 'GINConv_3', 'MLP_0', 'BatchNorm_0', 'scale')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [192]}}, "('opt_state', '0', 'mu', 'GINConv_3', 'MLP_0', 'Dense_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [192]}}, "('opt_state', '0', 'mu', 'GINConv_3', 'MLP_0', 'Dense_0', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96, 192]}}, "('opt_state', '0', 'mu', 'GINConv_3', 'MLP_0', 'Dense_1', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96]}}, "('opt_state', '0', 'mu', 'GINConv_3', 'MLP_0', 'Dense_1', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [192, 96]}}, "('opt_state', '0', 'mu', 'GINConv_3', 'eps')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "eps", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": []}}, "('opt_state', '0', 'mu', 'LayerNorm_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "LayerNorm_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96]}}, "('opt_state', '0', 'mu', 'LayerNorm_0', 'scale')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "mu", "key_type": 2}, {"key": "LayerNorm_0", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96]}}, "('opt_state', '0', 'nu', 'BatchNorm_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96]}}, "('opt_state', '0', 'nu', 'BatchNorm_0', 'scale')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96]}}, "('opt_state', '0', 'nu', 'BatchNorm_1', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "BatchNorm_1", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96]}}, "('opt_state', '0', 'nu', 'BatchNorm_1', 'scale')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "BatchNorm_1", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96]}}, "('opt_state', '0', 'nu', 'BatchNorm_2', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "BatchNorm_2", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96]}}, "('opt_state', '0', 'nu', 'BatchNorm_2', 'scale')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "BatchNorm_2", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96]}}, "('opt_state', '0', 'nu', 'BatchNorm_3', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "BatchNorm_3", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96]}}, "('opt_state', '0', 'nu', 'BatchNorm_3', 'scale')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "BatchNorm_3", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96]}}, "('opt_state', '0', 'nu', 'Dense_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96]}}, "('opt_state', '0', 'nu', 'Dense_0', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96, 96]}}, "('opt_state', '0', 'nu', 'Dense_1', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [2]}}, "('opt_state', '0', 'nu', 'Dense_1', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96, 2]}}, "('opt_state', '0', 'nu', 'GINConv_0', 'MLP_0', 'BatchNorm_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [192]}}, "('opt_state', '0', 'nu', 'GINConv_0', 'MLP_0', 'BatchNorm_0', 'scale')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [192]}}, "('opt_state', '0', 'nu', 'GINConv_0', 'MLP_0', 'Dense_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [192]}}, "('opt_state', '0', 'nu', 'GINConv_0', 'MLP_0', 'Dense_0', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [1, 192]}}, "('opt_state', '0', 'nu', 'GINConv_0', 'MLP_0', 'Dense_1', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96]}}, "('opt_state', '0', 'nu', 'GINConv_0', 'MLP_0', 'Dense_1', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [192, 96]}}, "('opt_state', '0', 'nu', 'GINConv_0', 'eps')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "eps", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": []}}, "('opt_state', '0', 'nu', 'GINConv_1', 'MLP_0', 'BatchNorm_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [192]}}, "('opt_state', '0', 'nu', 'GINConv_1', 'MLP_0', 'BatchNorm_0', 'scale')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [192]}}, "('opt_state', '0', 'nu', 'GINConv_1', 'MLP_0', 'Dense_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [192]}}, "('opt_state', '0', 'nu', 'GINConv_1', 'MLP_0', 'Dense_0', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96, 192]}}, "('opt_state', '0', 'nu', 'GINConv_1', 'MLP_0', 'Dense_1', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96]}}, "('opt_state', '0', 'nu', 'GINConv_1', 'MLP_0', 'Dense_1', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [192, 96]}}, "('opt_state', '0', 'nu', 'GINConv_1', 'eps')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "eps", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": []}}, "('opt_state', '0', 'nu', 'GINConv_2', 'MLP_0', 'BatchNorm_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [192]}}, "('opt_state', '0', 'nu', 'GINConv_2', 'MLP_0', 'BatchNorm_0', 'scale')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [192]}}, "('opt_state', '0', 'nu', 'GINConv_2', 'MLP_0', 'Dense_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [192]}}, "('opt_state', '0', 'nu', 'GINConv_2', 'MLP_0', 'Dense_0', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96, 192]}}, "('opt_state', '0', 'nu', 'GINConv_2', 'MLP_0', 'Dense_1', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96]}}, "('opt_state', '0', 'nu', 'GINConv_2', 'MLP_0', 'Dense_1', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [192, 96]}}, "('opt_state', '0', 'nu', 'GINConv_2', 'eps')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "eps", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": []}}, "('opt_state', '0', 'nu', 'GINConv_3', 'MLP_0', 'BatchNorm_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [192]}}, "('opt_state', '0', 'nu', 'GINConv_3', 'MLP_0', 'BatchNorm_0', 'scale')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [192]}}, "('opt_state', '0', 'nu', 'GINConv_3', 'MLP_0', 'Dense_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [192]}}, "('opt_state', '0', 'nu', 'GINConv_3', 'MLP_0', 'Dense_0', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_0", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96, 192]}}, "('opt_state', '0', 'nu', 'GINConv_3', 'MLP_0', 'Dense_1', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96]}}, "('opt_state', '0', 'nu', 'GINConv_3', 'MLP_0', 'Dense_1', 'kernel')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "Dense_1", "key_type": 2}, {"key": "kernel", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [192, 96]}}, "('opt_state', '0', 'nu', 'GINConv_3', 'eps')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "eps", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": []}}, "('opt_state', '0', 'nu', 'LayerNorm_0', 'bias')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "LayerNorm_0", "key_type": 2}, {"key": "bias", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96]}}, "('opt_state', '0', 'nu', 'LayerNorm_0', 'scale')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "0", "key_type": 1}, {"key": "nu", "key_type": 2}, {"key": "LayerNorm_0", "key_type": 2}, {"key": "scale", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96]}}, "('opt_state', '1')": {"key_metadata": [{"key": "opt_state", "key_type": 2}, {"key": "1", "key_type": 1}], "value_metadata": {"value_type": "None", "skip_deserialize": true}}, "('batch_stats', 'BatchNorm_0', 'mean')": {"key_metadata": [{"key": "batch_stats", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "mean", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96]}}, "('batch_stats', 'BatchNorm_0', 'var')": {"key_metadata": [{"key": "batch_stats", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "var", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96]}}, "('batch_stats', 'BatchNorm_1', 'mean')": {"key_metadata": [{"key": "batch_stats", "key_type": 2}, {"key": "BatchNorm_1", "key_type": 2}, {"key": "mean", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96]}}, "('batch_stats', 'BatchNorm_1', 'var')": {"key_metadata": [{"key": "batch_stats", "key_type": 2}, {"key": "BatchNorm_1", "key_type": 2}, {"key": "var", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96]}}, "('batch_stats', 'BatchNorm_2', 'mean')": {"key_metadata": [{"key": "batch_stats", "key_type": 2}, {"key": "BatchNorm_2", "key_type": 2}, {"key": "mean", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96]}}, "('batch_stats', 'BatchNorm_2', 'var')": {"key_metadata": [{"key": "batch_stats", "key_type": 2}, {"key": "BatchNorm_2", "key_type": 2}, {"key": "var", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96]}}, "('batch_stats', 'BatchNorm_3', 'mean')": {"key_metadata": [{"key": "batch_stats", "key_type": 2}, {"key": "BatchNorm_3", "key_type": 2}, {"key": "mean", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96]}}, "('batch_stats', 'BatchNorm_3', 'var')": {"key_metadata": [{"key": "batch_stats", "key_type": 2}, {"key": "BatchNorm_3", "key_type": 2}, {"key": "var", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [96]}}, "('batch_stats', 'GINConv_0', 'MLP_0', 'BatchNorm_0', 'mean')": {"key_metadata": [{"key": "batch_stats", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "mean", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [192]}}, "('batch_stats', 'GINConv_0', 'MLP_0', 'BatchNorm_0', 'var')": {"key_metadata": [{"key": "batch_stats", "key_type": 2}, {"key": "GINConv_0", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "var", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [192]}}, "('batch_stats', 'GINConv_1', 'MLP_0', 'BatchNorm_0', 'mean')": {"key_metadata": [{"key": "batch_stats", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "mean", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [192]}}, "('batch_stats', 'GINConv_1', 'MLP_0', 'BatchNorm_0', 'var')": {"key_metadata": [{"key": "batch_stats", "key_type": 2}, {"key": "GINConv_1", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "var", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [192]}}, "('batch_stats', 'GINConv_2', 'MLP_0', 'BatchNorm_0', 'mean')": {"key_metadata": [{"key": "batch_stats", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "mean", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [192]}}, "('batch_stats', 'GINConv_2', 'MLP_0', 'BatchNorm_0', 'var')": {"key_metadata": [{"key": "batch_stats", "key_type": 2}, {"key": "GINConv_2", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "var", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [192]}}, "('batch_stats', 'GINConv_3', 'MLP_0', 'BatchNorm_0', 'mean')": {"key_metadata": [{"key": "batch_stats", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "mean", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [192]}}, "('batch_stats', 'GINConv_3', 'MLP_0', 'BatchNorm_0', 'var')": {"key_metadata": [{"key": "batch_stats", "key_type": 2}, {"key": "GINConv_3", "key_type": 2}, {"key": "MLP_0", "key_type": 2}, {"key": "BatchNorm_0", "key_type": 2}, {"key": "var", "key_type": 2}], "value_metadata": {"value_type": "jax.Array", "skip_deserialize": false, "write_shape": [192]}}}, "use_zarr3": false, "store_array_data_equal_to_fill_value": true, "custom_metadata": null} \ No newline at end of file diff --git a/weights/checkpoint_10/array_metadatas/process_0 b/weights/checkpoint_10/array_metadatas/process_0 new file mode 100644 index 0000000..823cce8 --- /dev/null +++ b/weights/checkpoint_10/array_metadatas/process_0 @@ -0,0 +1 @@ +{"array_metadatas": [{"array_metadata": {"param_name": "step", "write_shape": [], "chunk_shape": [], "ext_metadata": null}}, {"array_metadata": {"param_name": "params.BatchNorm_0.bias", "write_shape": [96], "chunk_shape": [96], "ext_metadata": null}}, {"array_metadata": {"param_name": "params.BatchNorm_0.scale", "write_shape": [96], "chunk_shape": [96], "ext_metadata": null}}, {"array_metadata": {"param_name": "params.BatchNorm_1.bias", "write_shape": [96], "chunk_shape": [96], "ext_metadata": null}}, {"array_metadata": {"param_name": "params.BatchNorm_1.scale", "write_shape": [96], "chunk_shape": [96], "ext_metadata": null}}, {"array_metadata": {"param_name": "params.BatchNorm_2.bias", "write_shape": [96], "chunk_shape": [96], "ext_metadata": null}}, {"array_metadata": {"param_name": "params.BatchNorm_2.scale", "write_shape": [96], "chunk_shape": [96], "ext_metadata": null}}, {"array_metadata": {"param_name": "params.BatchNorm_3.bias", "write_shape": [96], "chunk_shape": [96], "ext_metadata": null}}, {"array_metadata": {"param_name": "params.BatchNorm_3.scale", "write_shape": [96], "chunk_shape": [96], "ext_metadata": null}}, {"array_metadata": {"param_name": "params.Dense_0.bias", "write_shape": [96], "chunk_shape": [96], "ext_metadata": null}}, {"array_metadata": {"param_name": "params.Dense_0.kernel", "write_shape": [96, 96], "chunk_shape": [96, 96], "ext_metadata": null}}, {"array_metadata": {"param_name": "params.Dense_1.bias", "write_shape": [2], "chunk_shape": [2], "ext_metadata": null}}, {"array_metadata": {"param_name": "params.Dense_1.kernel", "write_shape": [96, 2], "chunk_shape": [96, 2], "ext_metadata": null}}, {"array_metadata": {"param_name": "params.GINConv_0.MLP_0.BatchNorm_0.bias", "write_shape": [192], "chunk_shape": [192], "ext_metadata": null}}, {"array_metadata": {"param_name": "params.GINConv_0.MLP_0.BatchNorm_0.scale", "write_shape": [192], "chunk_shape": [192], "ext_metadata": null}}, {"array_metadata": {"param_name": "params.GINConv_0.MLP_0.Dense_0.bias", "write_shape": [192], "chunk_shape": [192], "ext_metadata": null}}, {"array_metadata": {"param_name": "params.GINConv_0.MLP_0.Dense_0.kernel", "write_shape": [1, 192], "chunk_shape": [1, 192], "ext_metadata": null}}, {"array_metadata": {"param_name": "params.GINConv_0.MLP_0.Dense_1.bias", "write_shape": [96], "chunk_shape": [96], "ext_metadata": null}}, {"array_metadata": {"param_name": "params.GINConv_0.MLP_0.Dense_1.kernel", "write_shape": [192, 96], "chunk_shape": [192, 96], "ext_metadata": null}}, {"array_metadata": {"param_name": "params.GINConv_0.eps", "write_shape": [], "chunk_shape": [], "ext_metadata": null}}, {"array_metadata": {"param_name": "params.GINConv_1.MLP_0.BatchNorm_0.bias", "write_shape": [192], "chunk_shape": [192], "ext_metadata": null}}, {"array_metadata": {"param_name": "params.GINConv_1.MLP_0.BatchNorm_0.scale", "write_shape": [192], "chunk_shape": [192], "ext_metadata": null}}, {"array_metadata": {"param_name": "params.GINConv_1.MLP_0.Dense_0.bias", "write_shape": [192], "chunk_shape": [192], "ext_metadata": null}}, {"array_metadata": {"param_name": "params.GINConv_1.MLP_0.Dense_0.kernel", "write_shape": [96, 192], "chunk_shape": [96, 192], "ext_metadata": null}}, {"array_metadata": {"param_name": "params.GINConv_1.MLP_0.Dense_1.bias", "write_shape": [96], "chunk_shape": [96], "ext_metadata": null}}, {"array_metadata": {"param_name": "params.GINConv_1.MLP_0.Dense_1.kernel", "write_shape": [192, 96], "chunk_shape": [192, 96], "ext_metadata": null}}, {"array_metadata": {"param_name": "params.GINConv_1.eps", "write_shape": [], "chunk_shape": [], "ext_metadata": null}}, {"array_metadata": {"param_name": "params.GINConv_2.MLP_0.BatchNorm_0.bias", "write_shape": [192], "chunk_shape": [192], "ext_metadata": null}}, {"array_metadata": {"param_name": "params.GINConv_2.MLP_0.BatchNorm_0.scale", "write_shape": [192], "chunk_shape": [192], "ext_metadata": null}}, {"array_metadata": {"param_name": "params.GINConv_2.MLP_0.Dense_0.bias", "write_shape": [192], "chunk_shape": [192], "ext_metadata": null}}, {"array_metadata": {"param_name": "params.GINConv_2.MLP_0.Dense_0.kernel", "write_shape": [96, 192], "chunk_shape": [96, 192], "ext_metadata": null}}, {"array_metadata": {"param_name": "params.GINConv_2.MLP_0.Dense_1.bias", "write_shape": [96], "chunk_shape": [96], "ext_metadata": null}}, {"array_metadata": {"param_name": "params.GINConv_2.MLP_0.Dense_1.kernel", "write_shape": [192, 96], "chunk_shape": [192, 96], "ext_metadata": null}}, {"array_metadata": {"param_name": "params.GINConv_2.eps", "write_shape": [], "chunk_shape": [], "ext_metadata": null}}, {"array_metadata": {"param_name": "params.GINConv_3.MLP_0.BatchNorm_0.bias", "write_shape": [192], "chunk_shape": [192], "ext_metadata": null}}, {"array_metadata": {"param_name": "params.GINConv_3.MLP_0.BatchNorm_0.scale", "write_shape": [192], "chunk_shape": [192], "ext_metadata": null}}, {"array_metadata": {"param_name": "params.GINConv_3.MLP_0.Dense_0.bias", "write_shape": [192], "chunk_shape": [192], "ext_metadata": null}}, {"array_metadata": {"param_name": "params.GINConv_3.MLP_0.Dense_0.kernel", "write_shape": [96, 192], "chunk_shape": [96, 192], "ext_metadata": null}}, {"array_metadata": {"param_name": "params.GINConv_3.MLP_0.Dense_1.bias", "write_shape": [96], "chunk_shape": [96], "ext_metadata": null}}, {"array_metadata": {"param_name": "params.GINConv_3.MLP_0.Dense_1.kernel", "write_shape": [192, 96], "chunk_shape": [192, 96], "ext_metadata": null}}, {"array_metadata": {"param_name": "params.GINConv_3.eps", "write_shape": [], "chunk_shape": [], "ext_metadata": null}}, {"array_metadata": {"param_name": "params.LayerNorm_0.bias", "write_shape": [96], "chunk_shape": [96], "ext_metadata": null}}, {"array_metadata": {"param_name": "params.LayerNorm_0.scale", "write_shape": [96], "chunk_shape": [96], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.count", "write_shape": [], "chunk_shape": [], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.mu.BatchNorm_0.bias", "write_shape": [96], "chunk_shape": [96], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.mu.BatchNorm_0.scale", "write_shape": [96], "chunk_shape": [96], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.mu.BatchNorm_1.bias", "write_shape": [96], "chunk_shape": [96], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.mu.BatchNorm_1.scale", "write_shape": [96], "chunk_shape": [96], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.mu.BatchNorm_2.bias", "write_shape": [96], "chunk_shape": [96], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.mu.BatchNorm_2.scale", "write_shape": [96], "chunk_shape": [96], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.mu.BatchNorm_3.bias", "write_shape": [96], "chunk_shape": [96], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.mu.BatchNorm_3.scale", "write_shape": [96], "chunk_shape": [96], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.mu.Dense_0.bias", "write_shape": [96], "chunk_shape": [96], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.mu.Dense_0.kernel", "write_shape": [96, 96], "chunk_shape": [96, 96], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.mu.Dense_1.bias", "write_shape": [2], "chunk_shape": [2], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.mu.Dense_1.kernel", "write_shape": [96, 2], "chunk_shape": [96, 2], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.mu.GINConv_0.MLP_0.BatchNorm_0.bias", "write_shape": [192], "chunk_shape": [192], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.mu.GINConv_0.MLP_0.BatchNorm_0.scale", "write_shape": [192], "chunk_shape": [192], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.mu.GINConv_0.MLP_0.Dense_0.bias", "write_shape": [192], "chunk_shape": [192], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.mu.GINConv_0.MLP_0.Dense_0.kernel", "write_shape": [1, 192], "chunk_shape": [1, 192], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.mu.GINConv_0.MLP_0.Dense_1.bias", "write_shape": [96], "chunk_shape": [96], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.mu.GINConv_0.MLP_0.Dense_1.kernel", "write_shape": [192, 96], "chunk_shape": [192, 96], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.mu.GINConv_0.eps", "write_shape": [], "chunk_shape": [], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.mu.GINConv_1.MLP_0.BatchNorm_0.bias", "write_shape": [192], "chunk_shape": [192], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.mu.GINConv_1.MLP_0.BatchNorm_0.scale", "write_shape": [192], "chunk_shape": [192], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.mu.GINConv_1.MLP_0.Dense_0.bias", "write_shape": [192], "chunk_shape": [192], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.mu.GINConv_1.MLP_0.Dense_0.kernel", "write_shape": [96, 192], "chunk_shape": [96, 192], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.mu.GINConv_1.MLP_0.Dense_1.bias", "write_shape": [96], "chunk_shape": [96], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.mu.GINConv_1.MLP_0.Dense_1.kernel", "write_shape": [192, 96], "chunk_shape": [192, 96], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.mu.GINConv_1.eps", "write_shape": [], "chunk_shape": [], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.mu.GINConv_2.MLP_0.BatchNorm_0.bias", "write_shape": [192], "chunk_shape": [192], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.mu.GINConv_2.MLP_0.BatchNorm_0.scale", "write_shape": [192], "chunk_shape": [192], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.mu.GINConv_2.MLP_0.Dense_0.bias", "write_shape": [192], "chunk_shape": [192], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.mu.GINConv_2.MLP_0.Dense_0.kernel", "write_shape": [96, 192], "chunk_shape": [96, 192], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.mu.GINConv_2.MLP_0.Dense_1.bias", "write_shape": [96], "chunk_shape": [96], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.mu.GINConv_2.MLP_0.Dense_1.kernel", "write_shape": [192, 96], "chunk_shape": [192, 96], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.mu.GINConv_2.eps", "write_shape": [], "chunk_shape": [], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.mu.GINConv_3.MLP_0.BatchNorm_0.bias", "write_shape": [192], "chunk_shape": [192], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.mu.GINConv_3.MLP_0.BatchNorm_0.scale", "write_shape": [192], "chunk_shape": [192], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.mu.GINConv_3.MLP_0.Dense_0.bias", "write_shape": [192], "chunk_shape": [192], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.mu.GINConv_3.MLP_0.Dense_0.kernel", "write_shape": [96, 192], "chunk_shape": [96, 192], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.mu.GINConv_3.MLP_0.Dense_1.bias", "write_shape": [96], "chunk_shape": [96], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.mu.GINConv_3.MLP_0.Dense_1.kernel", "write_shape": [192, 96], "chunk_shape": [192, 96], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.mu.GINConv_3.eps", "write_shape": [], "chunk_shape": [], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.mu.LayerNorm_0.bias", "write_shape": [96], "chunk_shape": [96], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.mu.LayerNorm_0.scale", "write_shape": [96], "chunk_shape": [96], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.nu.BatchNorm_0.bias", "write_shape": [96], "chunk_shape": [96], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.nu.BatchNorm_0.scale", "write_shape": [96], "chunk_shape": [96], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.nu.BatchNorm_1.bias", "write_shape": [96], "chunk_shape": [96], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.nu.BatchNorm_1.scale", "write_shape": [96], "chunk_shape": [96], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.nu.BatchNorm_2.bias", "write_shape": [96], "chunk_shape": [96], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.nu.BatchNorm_2.scale", "write_shape": [96], "chunk_shape": [96], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.nu.BatchNorm_3.bias", "write_shape": [96], "chunk_shape": [96], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.nu.BatchNorm_3.scale", "write_shape": [96], "chunk_shape": [96], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.nu.Dense_0.bias", "write_shape": [96], "chunk_shape": [96], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.nu.Dense_0.kernel", "write_shape": [96, 96], "chunk_shape": [96, 96], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.nu.Dense_1.bias", "write_shape": [2], "chunk_shape": [2], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.nu.Dense_1.kernel", "write_shape": [96, 2], "chunk_shape": [96, 2], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.nu.GINConv_0.MLP_0.BatchNorm_0.bias", "write_shape": [192], "chunk_shape": [192], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.nu.GINConv_0.MLP_0.BatchNorm_0.scale", "write_shape": [192], "chunk_shape": [192], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.nu.GINConv_0.MLP_0.Dense_0.bias", "write_shape": [192], "chunk_shape": [192], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.nu.GINConv_0.MLP_0.Dense_0.kernel", "write_shape": [1, 192], "chunk_shape": [1, 192], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.nu.GINConv_0.MLP_0.Dense_1.bias", "write_shape": [96], "chunk_shape": [96], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.nu.GINConv_0.MLP_0.Dense_1.kernel", "write_shape": [192, 96], "chunk_shape": [192, 96], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.nu.GINConv_0.eps", "write_shape": [], "chunk_shape": [], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.nu.GINConv_1.MLP_0.BatchNorm_0.bias", "write_shape": [192], "chunk_shape": [192], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.nu.GINConv_1.MLP_0.BatchNorm_0.scale", "write_shape": [192], "chunk_shape": [192], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.nu.GINConv_1.MLP_0.Dense_0.bias", "write_shape": [192], "chunk_shape": [192], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.nu.GINConv_1.MLP_0.Dense_0.kernel", "write_shape": [96, 192], "chunk_shape": [96, 192], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.nu.GINConv_1.MLP_0.Dense_1.bias", "write_shape": [96], "chunk_shape": [96], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.nu.GINConv_1.MLP_0.Dense_1.kernel", "write_shape": [192, 96], "chunk_shape": [192, 96], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.nu.GINConv_1.eps", "write_shape": [], "chunk_shape": [], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.nu.GINConv_2.MLP_0.BatchNorm_0.bias", "write_shape": [192], "chunk_shape": [192], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.nu.GINConv_2.MLP_0.BatchNorm_0.scale", "write_shape": [192], "chunk_shape": [192], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.nu.GINConv_2.MLP_0.Dense_0.bias", "write_shape": [192], "chunk_shape": [192], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.nu.GINConv_2.MLP_0.Dense_0.kernel", "write_shape": [96, 192], "chunk_shape": [96, 192], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.nu.GINConv_2.MLP_0.Dense_1.bias", "write_shape": [96], "chunk_shape": [96], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.nu.GINConv_2.MLP_0.Dense_1.kernel", "write_shape": [192, 96], "chunk_shape": [192, 96], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.nu.GINConv_2.eps", "write_shape": [], "chunk_shape": [], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.nu.GINConv_3.MLP_0.BatchNorm_0.bias", "write_shape": [192], "chunk_shape": [192], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.nu.GINConv_3.MLP_0.BatchNorm_0.scale", "write_shape": [192], "chunk_shape": [192], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.nu.GINConv_3.MLP_0.Dense_0.bias", "write_shape": [192], "chunk_shape": [192], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.nu.GINConv_3.MLP_0.Dense_0.kernel", "write_shape": [96, 192], "chunk_shape": [96, 192], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.nu.GINConv_3.MLP_0.Dense_1.bias", "write_shape": [96], "chunk_shape": [96], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.nu.GINConv_3.MLP_0.Dense_1.kernel", "write_shape": [192, 96], "chunk_shape": [192, 96], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.nu.GINConv_3.eps", "write_shape": [], "chunk_shape": [], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.nu.LayerNorm_0.bias", "write_shape": [96], "chunk_shape": [96], "ext_metadata": null}}, {"array_metadata": {"param_name": "opt_state.0.nu.LayerNorm_0.scale", "write_shape": [96], "chunk_shape": [96], "ext_metadata": null}}, {"array_metadata": {"param_name": "batch_stats.BatchNorm_0.mean", "write_shape": [96], "chunk_shape": [96], "ext_metadata": null}}, {"array_metadata": {"param_name": "batch_stats.BatchNorm_0.var", "write_shape": [96], "chunk_shape": [96], "ext_metadata": null}}, {"array_metadata": {"param_name": "batch_stats.BatchNorm_1.mean", "write_shape": [96], "chunk_shape": [96], "ext_metadata": null}}, {"array_metadata": {"param_name": "batch_stats.BatchNorm_1.var", "write_shape": [96], "chunk_shape": [96], "ext_metadata": null}}, {"array_metadata": {"param_name": "batch_stats.BatchNorm_2.mean", "write_shape": [96], "chunk_shape": [96], "ext_metadata": null}}, {"array_metadata": {"param_name": "batch_stats.BatchNorm_2.var", "write_shape": [96], "chunk_shape": [96], "ext_metadata": null}}, {"array_metadata": {"param_name": "batch_stats.BatchNorm_3.mean", "write_shape": [96], "chunk_shape": [96], "ext_metadata": null}}, {"array_metadata": {"param_name": "batch_stats.BatchNorm_3.var", "write_shape": [96], "chunk_shape": [96], "ext_metadata": null}}, {"array_metadata": {"param_name": "batch_stats.GINConv_0.MLP_0.BatchNorm_0.mean", "write_shape": [192], "chunk_shape": [192], "ext_metadata": null}}, {"array_metadata": {"param_name": "batch_stats.GINConv_0.MLP_0.BatchNorm_0.var", "write_shape": [192], "chunk_shape": [192], "ext_metadata": null}}, {"array_metadata": {"param_name": "batch_stats.GINConv_1.MLP_0.BatchNorm_0.mean", "write_shape": [192], "chunk_shape": [192], "ext_metadata": null}}, {"array_metadata": {"param_name": "batch_stats.GINConv_1.MLP_0.BatchNorm_0.var", "write_shape": [192], "chunk_shape": [192], "ext_metadata": null}}, {"array_metadata": {"param_name": "batch_stats.GINConv_2.MLP_0.BatchNorm_0.mean", "write_shape": [192], "chunk_shape": [192], "ext_metadata": null}}, {"array_metadata": {"param_name": "batch_stats.GINConv_2.MLP_0.BatchNorm_0.var", "write_shape": [192], "chunk_shape": [192], "ext_metadata": null}}, {"array_metadata": {"param_name": "batch_stats.GINConv_3.MLP_0.BatchNorm_0.mean", "write_shape": [192], "chunk_shape": [192], "ext_metadata": null}}, {"array_metadata": {"param_name": "batch_stats.GINConv_3.MLP_0.BatchNorm_0.var", "write_shape": [192], "chunk_shape": [192], "ext_metadata": null}}]} \ No newline at end of file diff --git a/weights/checkpoint_10/d/85bb797189b91de645cc09202167b979 b/weights/checkpoint_10/d/85bb797189b91de645cc09202167b979 new file mode 100644 index 0000000000000000000000000000000000000000..b0ad5b44b9aee6a4fa9e01101d210f798515dbd9 GIT binary patch literal 59454 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 N`t@9zvo^V|0sv||p>O~I diff --git a/weights/checkpoint_10/manifest.ocdbt b/weights/checkpoint_10/manifest.ocdbt index 564cb07dbbaea1ecc956d2587a519bb0e8d6ff91..590ee584736ebc57e8508b8d4f3f748eaf6d986c 100644 GIT binary patch literal 118 zcmd4P z^es%2lFTj54J|B_EDcjq%}h*_lMO7542%rT%#$q5Eg3;d_g!FKzyu^t9Ee?DwLN^b Mv4I3b>B*us06beF5C8xG literal 114 zcmd4P z^pg@zQ2UMaoazxi%?4-L)Jr76M#gh-kyQ93|8Z~#5NM>vh%prP5} zqbPk=g-DvNmk^ZJWZNpR7OY#JmRfDwXx+Z7@85JfMQPFKmsM?>V7JgK4!3Pp>1Ewk z)=Id2NvZ$5B(;sg1Q!-FGjlU{H#0YLcXxN|ZjC2A(QfOzUQVX}ck%fsblW#f*Fz_tqu}EkSK&h2oM4ULI@B9p$HHHjUdD+ zf+2(;L5L_di3f9+a*@z-`d$E41zD9;h>isAQpSy;rFayDzi4SgfOL+oqDp^1XI~6J%x(EurTp@hu#4kK{uoLq|*AbxPJi<%47EF^ajYsf2 zf&mK*zqsr|JxD!Qpj)m@NUrBjCqp(HO&VQFdsGC;msEZ&!Bm0WzN)fDVO`d=!%qYS z+-^<|CJ7EuibM(7LOYfZGrII4hh)HHUg4}Gc(c8@j{`hxpzQ`!>nw%kPz Yd2459OUjt9)sz)ptEr+v14F0c$Gj996-%rxTg%b^^-Y zz81@5w<#b~#NpvVfgp$hicBOA4+``c@GLkYg(<)!32;P_$f2%VZ5J?SE zB$+@S1_}g#!;A1d0T|V<<@&qM_f1P!tm@L|dxhKS3M^LTvNLOYqv*IhJDO1y%5S9> ztAaU@Xh2mk&7=_%3>H|d>RYqv|K?BzW_!24t6OZ+%}(bwjp0QVS-Qq0L)Nb4aAa*` zi^xx{^{*Vw7(%#Q4YYWbb5aFex_-Lq32(z>&RfuEvllj{G!lsNu0P zqA4h;WNQpyf-xgwMAZQjs6h}55hM`C5F`W`0YU&VECIqW1c;Cj0VFiU5W~}K43jV( z1{S1*>2duvu59I#Zz|nc&>SqVAXgsI*t%ei1!CQM5k_R|;z`Qh2MP%w>Yc&c@ N&Vav|3Jn|IxZfmYG&2AI literal 0 HcmV?d00001 diff --git a/weights/checkpoint_10/ocdbt.process_0/d/5df1b9d375f692f2e1a0a9d712a2b00b b/weights/checkpoint_10/ocdbt.process_0/d/5df1b9d375f692f2e1a0a9d712a2b00b deleted file mode 100644 index 7e6f52fd1f690f3d2c5eb31a5098a544805603b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 784 zcmV+r1MmC{+aTT$0{{R3000000VuUE{Qy|47XWrySUgZ^n+`BDGcz-@h~(*+fyfLF zHv7rGukCge%P-w*DN)9Vh+bj3i(w@jK`$`X6K>Ps<7XfewRt`ae+O0oOaMdxb3#re z5n*SML}gP}WU2}mM6|+6sZ3R&MFUcaJU~1w&+|Au5y}MOVR;?~0JsJR#84SfkrZ%1 z5y-*N;3$w}5^*4+f&h{PkU$d(#5q_X0v;L@oC^`Ar5AC_REyyvjZUXRr$Ir|y3!0z zsKwbENO57Uv5vDZn#N{u;Wq{=O5tU(Wi@WHilnHkCNC^e5GWo*5~Yc9qQXIg3x7h* z1_qMOt{Aq(X?w$Qc+$sc6M3&GCnQVn#T66 zRVinuwXVgOc1lWnYMHF|NqEjZ);R*sU68O~x&Hs>pPB#v|Ia@&|NsA=e`aRp_xJw) z7iaLa6=qXns5v30HJG9Mc4DWUZOwqCsF7hbGbt#kWNQrY0ud3RjSdn(kPrq#5CVi@ z5QG3hAOeJdVITqo#VLXj0t^utVu(T0I&lRSCjU#=X!|NQ%P0 zXo(S^oJWM0026#3=@P*L2LzF&`pMYH{NQQs9fYokg2|~$u)~`Yd@Q)JfZa+eL`lI} z%Ge%SQdv>>7cDUYl=F!25@3SQBV8g`;D8{qR6iM+lpj3Jy@SvdQ7}1G33hl>f{z6^ z7O-1Mg(xXFOBvfkr%~ZigPnjcI=cY1cMx6*T7V&4I?6=Gl76)_QCMvN diff --git a/weights/checkpoint_10/ocdbt.process_0/d/692d476e3f288f450c6791f4959d60a0 b/weights/checkpoint_10/ocdbt.process_0/d/692d476e3f288f450c6791f4959d60a0 deleted file mode 100644 index 226a08d69bcb8f96c60065ec315b1fc37e215c58..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 760 zcmV3_R{kvQSxs6Papq z0!dDulFC$*DIOGv!-Jy&K@bB3nMfWS705B*S!hHGlmL{7fJOv~8VU=~B#KBN2tZH@ zM3II_B$+%OhROqg10%xo1Ql<~RBG`sI-Lm}h6Jsr%s8_4VsBXDvRY&PVpp_$t>Ch6 zj4LVmqS&(eHdsj(siy`nYoQ!SG>|Nm=D~;w1`96x$eInu7;nff%0ud3RjSdn(kPrq#5CVi@5QG3hAOeJdVITqo#VLXj0t^utVu(T0 zI&nAbcq0ggMz41{bX!p ze(*H+PC{2i#pF~W*x^kG9u!EsjMjci<&MrXh zUBXMj2rx*O&J$cg&~pJ3cc;{X+aOgt6vM662!xce1so$Nq$NT6V6cKhnwW%R3nUgo zP8CuU!+(K#vIVIOgpHMZ*iWr&DXVhGV>U|7H;DAgw6LFC#7|3dH;d z+J^Ev>Uyd`EGa9_50qn&5SA2V7vUG<1!8s$WleDvc{N!e78K=Y2g)(9sxWdh@@W7G z1xZF}MqWlf5k@{{J|NZr3P~{X%JVQLC6**-#21$&mK5tbf!KceMY-_?dbz2IdHQ-) ziA6<;l?G*rMTSPk?w)?m`FUkPNnf9UcmpHj{DP8HJp;Yu{L;LV+|s1X#Ny)Q#GF*1 zQkT@c;?(TaqP)}`z0?9DW1qxIAg3U)C^5IVB(-1(Bd_416^y(~7zJ0X;9ap|5hE`{ zwNi3MXmW%$~E;8LVBy9+;n>Ct*7`eTl7mRJBFS)rppwK+BZ485nfHrYHuSwv!Jy zt>b8DsAy!Q2qZxW$OPJOXG)#j-6?fIHc+g=zInr?{k_lB_BB3Jt2@rI-%gcfe}nz( z^p^b`OD62^nC`#--3wzoT^@n`ZY`V+>Jkh0E?(NZ|J0qo`wvRw?kg;qzkkopTzi{6 z>+OE}+S)g6S-!6;R%t)XH4W=m2>K>VOtSP0)M`!S`M@M7xUlmQqfml@g^07F39}(j zvw#Xu^8^+VXF)r|Hi<^Vw&`=3FL*Y}YU%~A{9ye#=vwXvam9Vf`)xk5e%H>IvXxV8 z`S$hjD{rng!D)}R7gQ;oW!8JW;B{El^h5W8jy&$?Xt=pe@r2*;`MHq`mi2Bo6Kqgr zQ#;TXE?{S&_&Y4t*TL4?H-_5HqRZ=-hXkeP4 znS1Lb9*OsMPS_(~CKJ>m=_WtDbnzbM8+WIAmY-v}Dtx??K`irr^e*#zI%)+x8E@GQ zH}6}!DD1zXy@Y7agN@f(-V57V+jPt6G^{)Q)LJcJ=JIu37dJC3XX+BmJN7hjqr$C) N`t@9zvo^V|0sv||p>O~I diff --git a/weights/checkpoint_10/ocdbt.process_0/d/b2da5b3705e76f0908e019f11e6c4fbc b/weights/checkpoint_10/ocdbt.process_0/d/b2da5b3705e76f0908e019f11e6c4fbc new file mode 100644 index 0000000000000000000000000000000000000000..3a529f3f1dca1ce5ad90d42b4c8a44fa0b2d8e29 GIT binary patch literal 703 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≤&98`) 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

|hr<=9 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

KM$jp3W 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