





"""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      UpperCAmelCase__				(    SCREAMING_SNAKE_CASE	:		Dict[str, torch.Tensor]     ):







      '''simple docstring'''




      lowerCAmelCase    		=			[]
      lowerCAmelCase    		=			[]
      lowerCAmelCase    		=			[]

      for rt in rc.restypes:
            lowerCAmelCase    		=			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]     )
            lowerCAmelCase    		=			{name: i for i, name in enumerate(__lowercase     )}
            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     )

      lowerCAmelCase    		=			torch.tensor(
          __lowercase				,		dtype=torch.intaa				,		device=protein["""aatype"""].device				,		)
      lowerCAmelCase    		=			torch.tensor(
          __lowercase				,		dtype=torch.intaa				,		device=protein["""aatype"""].device				,		)
      lowerCAmelCase    		=			torch.tensor(
          __lowercase				,		dtype=torch.floataa				,		device=protein["""aatype"""].device				,		)
      lowerCAmelCase    		=			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
      lowerCAmelCase    		=			restype_atomaa_to_atomaa[protein_aatype]
      lowerCAmelCase    		=			restype_atomaa_mask[protein_aatype]

      lowerCAmelCase    		=			residx_atomaa_mask
      lowerCAmelCase    		=			residx_atomaa_to_atomaa.long()

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

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

      lowerCAmelCase    		=			restype_atomaa_mask[protein_aatype]
      lowerCAmelCase    		=			residx_atomaa_mask

      return protein






def      UpperCAmelCase__				(    SCREAMING_SNAKE_CASE	:		Dict[str, torch.Tensor]     ):







      '''simple docstring'''




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














from typing import TYPE_CHECKING

from ...utils import OptionalDependencyNotAvailable, _LazyModule, is_torch_available


_UpperCamelCase			:	Any								={
    'configuration_megatron_bert': ['MEGATRON_BERT_PRETRAINED_CONFIG_ARCHIVE_MAP', 'MegatronBertConfig'],
}

try:
	if not is_torch_available():
		raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
	pass
else:
	_UpperCamelCase			:	Optional[Any]								=[
	    'MEGATRON_BERT_PRETRAINED_MODEL_ARCHIVE_LIST',
	    'MegatronBertForCausalLM',
	    'MegatronBertForMaskedLM',
	    'MegatronBertForMultipleChoice',
	    'MegatronBertForNextSentencePrediction',
	    'MegatronBertForPreTraining',
	    'MegatronBertForQuestionAnswering',
	    'MegatronBertForSequenceClassification',
	    'MegatronBertForTokenClassification',
	    'MegatronBertModel',
	    'MegatronBertPreTrainedModel',
	]

if TYPE_CHECKING:
	from .configuration_megatron_bert import MEGATRON_BERT_PRETRAINED_CONFIG_ARCHIVE_MAP, MegatronBertConfig

	try:
		if not is_torch_available():
			raise OptionalDependencyNotAvailable()
	except OptionalDependencyNotAvailable:
		pass
	else:
		from .modeling_megatron_bert import (
		    MEGATRON_BERT_PRETRAINED_MODEL_ARCHIVE_LIST,
		    MegatronBertForCausalLM,
		    MegatronBertForMaskedLM,
		    MegatronBertForMultipleChoice,
		    MegatronBertForNextSentencePrediction,
		    MegatronBertForPreTraining,
		    MegatronBertForQuestionAnswering,
		    MegatronBertForSequenceClassification,
		    MegatronBertForTokenClassification,
		    MegatronBertModel,
		    MegatronBertPreTrainedModel,
		)

else:
	import sys

	_UpperCamelCase			:	Optional[int]								=_LazyModule(__name__, globals()['__file__'], _import_structure, module_spec=__spec__)



