Source code for torch_lattice.nn.functional.conv.hash.query

import torch

import torch_lattice.backend

__all__ = ["sphashquery", "convert_transposed_out_in_map"]


[docs] def sphashquery(queries: torch.Tensor, references: torch.Tensor) -> torch.Tensor: queries = queries.contiguous() references = references.contiguous() sizes = queries.size() queries = queries.view(-1) indices = torch.arange(len(references), device=queries.device, dtype=torch.long) if queries.device.type == "cuda": hashtable = torch_lattice.backend.GPUHashTable(references.shape[0] * 2) hashtable.insert_vals(references) output = hashtable.lookup_vals(queries) elif queries.device.type == "cpu": output = torch_lattice.backend.hash_query_cpu(queries, references, indices) else: device = queries.device output = torch_lattice.backend.hash_query_cpu( queries.cpu(), references.cpu(), indices.cpu() ).to(device) output = (output - 1).view(*sizes) if output.shape[0] % 128 != 0: output = torch.cat( [ output, torch.zeros( 128 - output.shape[0] % 128, output.shape[1], device=output.device, dtype=output.dtype, ) - 1, ], dim=0, ) return output
[docs] def convert_transposed_out_in_map(out_in_map, size): out_in_map_t = torch.full( (size, out_in_map.shape[1]), fill_value=-1, device=out_in_map.device, dtype=torch.int32, ) torch_lattice.backend.convert_transposed_out_in_map(out_in_map, out_in_map_t) return out_in_map_t