





class 	__snake_case					:






    '''simple docstring'''

    class 	__snake_case					:






        '''simple docstring'''
        _lowerCAmelCase  =						"""_prev""", """_data""", """_next"""





        def __init__( self    :		int      ,    snake_case    :		str      ,    snake_case    :		Dict      ,    snake_case    :		str				):

          """simple docstring"""





          __lowerCAmelCase								=					link_p
          __lowerCAmelCase								=					element
          __lowerCAmelCase								=					link_n





        def 						A		( self    :		Any				):

          """simple docstring"""





          return (
              f''' Prev -> {self._prev is not None}, Next -> {self._next is not None}'''
          )





    def __init__( self    :		Tuple				):

      """simple docstring"""





      __lowerCAmelCase								=					self._Node(__UpperCamelCase      ,    __UpperCamelCase      ,    __UpperCamelCase				)
      __lowerCAmelCase								=					self._Node(__UpperCamelCase      ,    __UpperCamelCase      ,    __UpperCamelCase				)
      __lowerCAmelCase								=					self._trailer
      __lowerCAmelCase								=					self._header
      __lowerCAmelCase								=					0





    def __len__( self    :		str				):

      """simple docstring"""





      return self._size





    def 						A		( self    :		int				):

      """simple docstring"""





      return self.__len__() == 0





    def 						A		( self    :		int      ,    snake_case    :		int      ,    snake_case    :		Union[str, Any]      ,    snake_case    :		int				):

      """simple docstring"""





      __lowerCAmelCase								=					self._Node(__UpperCamelCase      ,    __UpperCamelCase      ,    __UpperCamelCase				)
      __lowerCAmelCase								=					new_node
      __lowerCAmelCase								=					new_node
      self._size += 1
      return self





    def 						A		( self    :		Any      ,    snake_case    :		Tuple				):

      """simple docstring"""





      __lowerCAmelCase								=					node._prev
      __lowerCAmelCase								=					node._next

      __lowerCAmelCase								=					successor
      __lowerCAmelCase								=					predecessor
      self._size -= 1
      __lowerCAmelCase								=					node._data
      __lowerCAmelCase								=					__lowerCAmelCase								=					__lowerCAmelCase								=					None
      del node
      return temp


class 	__snake_case					(      _DoublyLinkedBase ):






    '''simple docstring'''





    def 						A		( self    :		Optional[Any]				):

      """simple docstring"""





      if self.is_empty():
        raise Exception('''List is empty'''				)
      return self._header._next._data





    def 						A		( self    :		str				):

      """simple docstring"""





      if self.is_empty():
        raise Exception('''List is empty'''				)
      return self._trailer._prev._data





    def 						A		( self    :		str      ,    snake_case    :		List[str]				):

      """simple docstring"""





      return self._insert(self._header      ,    __UpperCamelCase      ,    self._header._next				)





    def 						A		( self    :		Optional[Any]      ,    snake_case    :		List[Any]				):

      """simple docstring"""





      return self._insert(self._trailer._prev      ,    __UpperCamelCase      ,    self._trailer				)





    def 						A		( self    :		List[str]				):

      """simple docstring"""





      if self.is_empty():
        raise IndexError('''remove_first from empty list'''				)
      return self._delete(self._header._next				)





    def 						A		( self    :		int				):

      """simple docstring"""





      if self.is_empty():
        raise IndexError('''remove_first from empty list'''				)
      return self._delete(self._trailer._prev				)


import argparse
import os


_A							=       {
    '''pytorch''': {
        '''1.13''': {
            '''torch''': '''1.13.1''',
            '''torchvision''': '''0.14.1''',
            '''torchaudio''': '''0.13.1''',
            '''python''': 3.9,
            '''cuda''': '''cu116''',
            '''install''': (
                '''python3 -m pip install --no-cache-dir -U torch==1.13.1 torchvision==0.14.1 torchaudio==0.13.1'''
                ''' --extra-index-url https://download.pytorch.org/whl/cu116'''
            ),
            '''base_image''': '''nvidia/cuda:11.6.2-cudnn8-devel-ubuntu20.04''',
        },
        '''1.12''': {
            '''torch''': '''1.12.1''',
            '''torchvision''': '''0.13.1''',
            '''torchaudio''': '''0.12.1''',
            '''python''': 3.9,
            '''cuda''': '''cu113''',
            '''install''': (
                '''python3 -m pip install --no-cache-dir -U torch==1.12.1 torchvision==0.13.1 torchaudio==0.12.1'''
                ''' --extra-index-url https://download.pytorch.org/whl/cu113'''
            ),
            '''base_image''': '''nvidia/cuda:11.2.2-cudnn8-devel-ubuntu20.04''',
        },
        '''1.11''': {
            '''torch''': '''1.11.0''',
            '''torchvision''': '''0.12.0''',
            '''torchaudio''': '''0.11.0''',
            '''python''': 3.9,
            '''cuda''': '''cu113''',
            '''install''': (
                '''python3 -m pip install --no-cache-dir -U torch==1.11.0 torchvision==0.12.0 torchaudio==0.11.0'''
                ''' --extra-index-url https://download.pytorch.org/whl/cu113'''
            ),
            '''base_image''': '''nvidia/cuda:11.2.2-cudnn8-devel-ubuntu20.04''',
        },
        '''1.10''': {
            '''torch''': '''1.10.2''',
            '''torchvision''': '''0.11.3''',
            '''torchaudio''': '''0.10.2''',
            '''python''': 3.9,
            '''cuda''': '''cu113''',
            '''install''': (
                '''python3 -m pip install --no-cache-dir -U torch==1.10.2 torchvision==0.11.3 torchaudio==0.10.2'''
                ''' --extra-index-url https://download.pytorch.org/whl/cu113'''
            ),
            '''base_image''': '''nvidia/cuda:11.2.2-cudnn8-devel-ubuntu20.04''',
        },
        # torchaudio < 0.10 has no CUDA-enabled binary distributions
        '''1.9''': {
            '''torch''': '''1.9.1''',
            '''torchvision''': '''0.10.1''',
            '''torchaudio''': '''0.9.1''',
            '''python''': 3.9,
            '''cuda''': '''cu111''',
            '''install''': (
                '''python3 -m pip install --no-cache-dir -U torch==1.9.1 torchvision==0.10.1 torchaudio==0.9.1'''
                ''' --extra-index-url https://download.pytorch.org/whl/cu111'''
            ),
            '''base_image''': '''nvidia/cuda:11.2.2-cudnn8-devel-ubuntu20.04''',
        },
    },
    '''tensorflow''': {
        '''2.11''': {
            '''tensorflow''': '''2.11.1''',
            '''install''': '''python3 -m pip install --no-cache-dir -U tensorflow==2.11.1''',
            '''base_image''': '''nvidia/cuda:11.2.2-cudnn8-devel-ubuntu20.04''',
        },
        '''2.10''': {
            '''tensorflow''': '''2.10.1''',
            '''install''': '''python3 -m pip install --no-cache-dir -U tensorflow==2.10.1''',
            '''base_image''': '''nvidia/cuda:11.2.2-cudnn8-devel-ubuntu20.04''',
        },
        '''2.9''': {
            '''tensorflow''': '''2.9.3''',
            '''install''': '''python3 -m pip install --no-cache-dir -U tensorflow==2.9.3''',
            '''base_image''': '''nvidia/cuda:11.2.2-cudnn8-devel-ubuntu20.04''',
        },
        '''2.8''': {
            '''tensorflow''': '''2.8.2''',
            '''install''': '''python3 -m pip install --no-cache-dir -U tensorflow==2.8.2''',
            '''base_image''': '''nvidia/cuda:11.2.2-cudnn8-devel-ubuntu20.04''',
        },
        '''2.7''': {
            '''tensorflow''': '''2.7.3''',
            '''install''': '''python3 -m pip install --no-cache-dir -U tensorflow==2.7.3''',
            '''base_image''': '''nvidia/cuda:11.2.2-cudnn8-devel-ubuntu20.04''',
        },
        '''2.6''': {
            '''tensorflow''': '''2.6.5''',
            '''install''': '''python3 -m pip install --no-cache-dir -U tensorflow==2.6.5''',
            '''base_image''': '''nvidia/cuda:11.2.2-cudnn8-devel-ubuntu20.04''',
        },
        '''2.5''': {
            '''tensorflow''': '''2.5.3''',
            '''install''': '''python3 -m pip install --no-cache-dir -U tensorflow==2.5.3''',
            '''base_image''': '''nvidia/cuda:11.2.2-cudnn8-devel-ubuntu20.04''',
        },
    },
}


if __name__ == "__main__":
      _A							=       argparse.ArgumentParser('''Choose the framework and version to install''')
      parser.add_argument(
          '''--framework''', help='''The framework to install. Should be `torch` or `tensorflow`''', type=str, required=True
      )
      parser.add_argument('''--version''', help='''The version of the framework to install.''', type=str, required=True)
      _A							=       parser.parse_args()

      _A							=       past_versions_testing[args.framework][args.version]

      os.system(F'''echo "export INSTALL_CMD=\'{info['install']}\'" >> ~/.profile''')
      print(F'''echo "export INSTALL_CMD=\'{info['install']}\'" >> ~/.profile''')

      _A							=       ''''''
      if args.framework == "pytorch":
            _A							=       info['''cuda''']
      os.system(F'''echo \"export CUDA=\'{cuda}\'\" >> ~/.profile''')
      print(F'''echo \"export CUDA=\'{cuda}\'\" >> ~/.profile''')



