"""simple docstring"""







from typing import Dict

import numpy as np
import torch

from . import residue_constants as rc
from .tensor_utils import tensor_tree_map, tree_map

def _a			(		_snake_case							):







      """simple docstring"""






      UpperCAmelCase          =	[]
      UpperCAmelCase          =	[]
      UpperCAmelCase          =	[]

      for rt in rc.restypes:
            UpperCAmelCase          =	rc.restype_name_to_atomaa_names[rc.restype_atoa[rt]]
            restype_atomaa_to_atomaa_list.append([(rc.atom_order[name] if name else 0) for name in atom_names]							)
            UpperCAmelCase          =	{name: i for i, name in enumerate(_snake_case							)}
            restype_atomaa_to_atomaa_list.append(
                [(atom_name_to_idxaa[name] if name in atom_name_to_idxaa else 0) for name in rc.atom_types]							)

            restype_atomaa_mask_list.append([(1.0 if name else 0.0) for name in atom_names]							)

      # Add dummy mapping for restype 'UNK'
      restype_atomaa_to_atomaa_list.append([0] * 14							)
      restype_atomaa_to_atomaa_list.append([0] * 37							)
      restype_atomaa_mask_list.append([0.0] * 14							)

      UpperCAmelCase          =	torch.tensor(
          _snake_case				,	dtype=torch.intaa				,	device=protein["""aatype"""].device				,	)
      UpperCAmelCase          =	torch.tensor(
          _snake_case				,	dtype=torch.intaa				,	device=protein["""aatype"""].device				,	)
      UpperCAmelCase          =	torch.tensor(
          _snake_case				,	dtype=torch.floataa				,	device=protein["""aatype"""].device				,	)
      UpperCAmelCase          =	protein["""aatype"""].to(torch.long							)

      # create the mapping for (residx, atom14) --> atom37, i.e. an array
      # with shape (num_res, 14) containing the atom37 indices for this protein
      UpperCAmelCase          =	restype_atomaa_to_atomaa[protein_aatype]
      UpperCAmelCase          =	restype_atomaa_mask[protein_aatype]

      UpperCAmelCase          =	residx_atomaa_mask
      UpperCAmelCase          =	residx_atomaa_to_atomaa.long()

      # create the gather indices for mapping back
      UpperCAmelCase          =	restype_atomaa_to_atomaa[protein_aatype]
      UpperCAmelCase          =	residx_atomaa_to_atomaa.long()

      # create the corresponding mask
      UpperCAmelCase          =	torch.zeros([21, 37]				,	dtype=torch.floataa				,	device=protein["""aatype"""].device							)
      for restype, restype_letter in enumerate(rc.restypes							):
            UpperCAmelCase          =	rc.restype_atoa[restype_letter]
            UpperCAmelCase          =	rc.residue_atoms[restype_name]
            for atom_name in atom_names:
                  UpperCAmelCase          =	rc.atom_order[atom_name]
                  UpperCAmelCase          =	1

      UpperCAmelCase          =	restype_atomaa_mask[protein_aatype]
      UpperCAmelCase          =	residx_atomaa_mask

      return protein






def _a			(		_snake_case							):







      """simple docstring"""






      UpperCAmelCase          =	tree_map(lambda _snake_case							: torch.tensor(_snake_case				,	device=batch["""aatype"""].device							)				,	_snake_case				,	np.ndarray							)
      UpperCAmelCase          =	tensor_tree_map(lambda _snake_case							: np.array(_snake_case							)				,	make_atomaa_masks(_snake_case							)							)
      return out











"""simple docstring"""







import numpy as np

def _a			(		_snake_case							):







      """simple docstring"""






      return 1 / (1 + np.exp(-vector							))


if __name__ == "__main__":
  import doctest

  doctest.testmod()



