



import re




def      __UpperCamelCase     (  _lowerCAmelCase		)	->  str:



    """simple docstring"""






    if len(re.findall("""[ATCG]"""				,					_lowerCAmelCase		)		) != len(_lowerCAmelCase		):
        raise ValueError("""Invalid Strand"""		)

    return dna.translate(dna.maketrans("""ATCG"""				,					"""TAGC"""		)		)


if __name__ == "__main__":
     import doctest

     doctest.testmod()







import os
from pathlib import Path




def      __UpperCamelCase     (  )	->  Any:



    """simple docstring"""






    from torch.utils.cpp_extension import load

    A			:	Any										=       Path(_lowerCAmelCase		).resolve().parent.parent.parent / """kernels""" / """deformable_detr"""
    A			:	int										=       [
        root / filename
        for filename in [
            """vision.cpp""",
            os.path.join("""cpu"""				,					"""ms_deform_attn_cpu.cpp"""		),
            os.path.join("""cuda"""				,					"""ms_deform_attn_cuda.cu"""		),
        ]
    ]

    load(
        """MultiScaleDeformableAttention"""				,					_lowerCAmelCase				,					with_cuda=_lowerCAmelCase				,					extra_include_paths=[str(_lowerCAmelCase		)]				,					extra_cflags=["""-DWITH_CUDA=1"""]				,					extra_cuda_cflags=[
            """-DCUDA_HAS_FP16=1""",
            """-D__CUDA_NO_HALF_OPERATORS__""",
            """-D__CUDA_NO_HALF_CONVERSIONS__""",
            """-D__CUDA_NO_HALF2_OPERATORS__""",
        ]				,					)

    import MultiScaleDeformableAttention as MSDA

    return MSDA


