





'''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    (							_lowerCamelCase : Dict[str, torch.Tensor]	):
    A__    =      []
    A__    =      []
    A__    =      []

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

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

    A__    =      residx_atomaa_mask
    A__    =      residx_atomaa_to_atomaa.long()

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

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

    A__    =      restype_atomaa_mask[protein_aatype]
    A__    =      residx_atomaa_mask

    return protein





def 						UpperCamelCase    (							_lowerCamelCase : Dict[str, torch.Tensor]	):
    A__    =      tree_map(lambda _lowerCamelCase	: torch.tensor(_lowerCamelCase						,	device=batch["aatype"].device	)						,	_lowerCamelCase						,	np.ndarray	)
    A__    =      tensor_tree_map(lambda _lowerCamelCase	: np.array(_lowerCamelCase	)						,	make_atomaa_masks(_lowerCamelCase	)	)
    return out










'''simple docstring'''

def 						UpperCamelCase    (							):
    A__    =      [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

    A__    =      6
    A__    =      1
    A__    =      19_01

    A__    =      0

    while year < 20_01:
        day += 7

        if (year % 4 == 0 and year % 1_00 != 0) or (year % 4_00 == 0):
            if day > days_per_month[month - 1] and month != 2:
                month += 1
                A__    =      day - days_per_month[month - 2]
            elif day > 29 and month == 2:
                month += 1
                A__    =      day - 29
        else:
            if day > days_per_month[month - 1]:
                month += 1
                A__    =      day - days_per_month[month - 2]

        if month > 12:
            year += 1
            A__    =      1

        if year < 20_01 and day == 1:
            sundays += 1
    return sundays


if __name__ == "__main__":
  print(solution())



