
import argparse
import json
import os

import requests
import torch
from huggingface_hub import hf_hub_download
from PIL import Image

from transformers import ConvNextImageProcessor, ConvNextVaConfig, ConvNextVaForImageClassification
from transformers.image_utils import PILImageResampling
from transformers.utils import logging


logging.set_verbosity_info()
__lowerCAmelCase				      =					logging.get_logger(__name__)


def       a			(   a  )    ->List[str]:




			'''simple docstring'''


			SCREAMING_SNAKE_CASE    	=   ConvNextVaConfig()

			if "atto" in checkpoint_url:
						SCREAMING_SNAKE_CASE    	=   [2, 2, 6, 2]
						SCREAMING_SNAKE_CASE    	=   [40, 80, 160, 320]
			if "femto" in checkpoint_url:
						SCREAMING_SNAKE_CASE    	=   [2, 2, 6, 2]
						SCREAMING_SNAKE_CASE    	=   [48, 96, 192, 384]
			if "pico" in checkpoint_url:
						SCREAMING_SNAKE_CASE    	=   [2, 2, 6, 2]
						SCREAMING_SNAKE_CASE    	=   [64, 128, 256, 512]
			if "nano" in checkpoint_url:
						SCREAMING_SNAKE_CASE    	=   [2, 2, 8, 2]
						SCREAMING_SNAKE_CASE    	=   [80, 160, 320, 640]
			if "tiny" in checkpoint_url:
						SCREAMING_SNAKE_CASE    	=   [3, 3, 9, 3]
						SCREAMING_SNAKE_CASE    	=   [96, 192, 384, 768]
			if "base" in checkpoint_url:
						SCREAMING_SNAKE_CASE    	=   [3, 3, 27, 3]
						SCREAMING_SNAKE_CASE    	=   [128, 256, 512, 1024]
			if "large" in checkpoint_url:
						SCREAMING_SNAKE_CASE    	=   [3, 3, 27, 3]
						SCREAMING_SNAKE_CASE    	=   [192, 384, 768, 1536]
			if "huge" in checkpoint_url:
						SCREAMING_SNAKE_CASE    	=   [3, 3, 27, 3]
						SCREAMING_SNAKE_CASE    	=   [352, 704, 1408, 2816]

			SCREAMING_SNAKE_CASE    	=   1000
			SCREAMING_SNAKE_CASE    	=   '''imagenet-1k-id2label.json'''
			SCREAMING_SNAKE_CASE    	=   (1, 1000)

			SCREAMING_SNAKE_CASE    	=   '''huggingface/label-files'''
			SCREAMING_SNAKE_CASE    	=   num_labels
			SCREAMING_SNAKE_CASE    	=   json.load(open(hf_hub_download(a		,	a		,	repo_type='''dataset'''  )		,	'''r'''  )  )
			SCREAMING_SNAKE_CASE    	=   {int(a  ): v for k, v in idalabel.items()}

			SCREAMING_SNAKE_CASE    	=   idalabel
			SCREAMING_SNAKE_CASE    	=   {v: k for k, v in idalabel.items()}
			SCREAMING_SNAKE_CASE    	=   hidden_sizes
			SCREAMING_SNAKE_CASE    	=   depths

			return config, expected_shape


def       a			(   a  )    ->Optional[Any]:




			'''simple docstring'''


			if "downsample_layers.0.0" in name:
						SCREAMING_SNAKE_CASE    	=   name.replace('''downsample_layers.0.0'''		,	'''embeddings.patch_embeddings'''  )
			if "downsample_layers.0.1" in name:
						SCREAMING_SNAKE_CASE    	=   name.replace('''downsample_layers.0.1'''		,	'''embeddings.norm'''  )  # we rename to layernorm later on
			if "downsample_layers.1.0" in name:
						SCREAMING_SNAKE_CASE    	=   name.replace('''downsample_layers.1.0'''		,	'''stages.1.downsampling_layer.0'''  )
			if "downsample_layers.1.1" in name:
						SCREAMING_SNAKE_CASE    	=   name.replace('''downsample_layers.1.1'''		,	'''stages.1.downsampling_layer.1'''  )
			if "downsample_layers.2.0" in name:
						SCREAMING_SNAKE_CASE    	=   name.replace('''downsample_layers.2.0'''		,	'''stages.2.downsampling_layer.0'''  )
			if "downsample_layers.2.1" in name:
						SCREAMING_SNAKE_CASE    	=   name.replace('''downsample_layers.2.1'''		,	'''stages.2.downsampling_layer.1'''  )
			if "downsample_layers.3.0" in name:
						SCREAMING_SNAKE_CASE    	=   name.replace('''downsample_layers.3.0'''		,	'''stages.3.downsampling_layer.0'''  )
			if "downsample_layers.3.1" in name:
						SCREAMING_SNAKE_CASE    	=   name.replace('''downsample_layers.3.1'''		,	'''stages.3.downsampling_layer.1'''  )
			if "stages" in name and "downsampling_layer" not in name:
						# stages.0.0. for instance should be renamed to stages.0.layers.0.
						SCREAMING_SNAKE_CASE    	=   name[: len('''stages.0'''  )] + '''.layers''' + name[len('''stages.0'''  ) :]
			if "gamma" in name:
						SCREAMING_SNAKE_CASE    	=   name.replace('''gamma'''		,	'''weight'''  )
			if "beta" in name:
						SCREAMING_SNAKE_CASE    	=   name.replace('''beta'''		,	'''bias'''  )
			if "stages" in name:
						SCREAMING_SNAKE_CASE    	=   name.replace('''stages'''		,	'''encoder.stages'''  )
			if "norm" in name:
						SCREAMING_SNAKE_CASE    	=   name.replace('''norm'''		,	'''layernorm'''  )
			if "head" in name:
						SCREAMING_SNAKE_CASE    	=   name.replace('''head'''		,	'''classifier'''  )

			return name


def       a			(   )    ->Any:




			'''simple docstring'''


			SCREAMING_SNAKE_CASE    	=   '''http://images.cocodataset.org/val2017/000000039769.jpg'''
			SCREAMING_SNAKE_CASE    	=   Image.open(requests.get(a		,	stream=a  ).raw  )
			return im


def       a			(   a  )    ->Any:




			'''simple docstring'''


			if "224" in checkpoint_url:
						SCREAMING_SNAKE_CASE    	=   224
						SCREAMING_SNAKE_CASE    	=   224 / 256
			elif "384" in checkpoint_url:
						SCREAMING_SNAKE_CASE    	=   384
						SCREAMING_SNAKE_CASE    	=   None
			else:
						SCREAMING_SNAKE_CASE    	=   512
						SCREAMING_SNAKE_CASE    	=   None

			return ConvNextImageProcessor(
			    size=a		,	crop_pct=a		,	image_mean=[0.4_85, 0.4_56, 0.4_06]		,	image_std=[0.2_29, 0.2_24, 0.2_25]		,	resample=PILImageResampling.BICUBIC		,	)


@torch.no_grad()
def       a			(   a		,	a		,	a		,	a  )    ->Optional[Any]:




			'''simple docstring'''


			print('''Downloading original model from checkpoint...'''  )
			# define ConvNeXTV2 configuration based on URL
			SCREAMING_SNAKE_CASE	,       SCREAMING_SNAKE_CASE    	=   get_convnextva_config(a  )
			# load original state_dict from URL
			SCREAMING_SNAKE_CASE    	=   torch.hub.load_state_dict_from_url(a  )['''model''']

			print('''Converting model parameters...'''  )
			# rename keys
			for key in state_dict.copy().keys():
						SCREAMING_SNAKE_CASE    	=   state_dict.pop(a  )
						SCREAMING_SNAKE_CASE    	=   val
			# add prefix to all keys expect classifier head
			for key in state_dict.copy().keys():
						SCREAMING_SNAKE_CASE    	=   state_dict.pop(a  )
						if not key.startswith('''classifier'''  ):
									SCREAMING_SNAKE_CASE    	=   '''convnextv2.''' + key
						SCREAMING_SNAKE_CASE    	=   val

			# load HuggingFace model
			SCREAMING_SNAKE_CASE    	=   ConvNextVaForImageClassification(a  )
			model.load_state_dict(a  )
			model.eval()

			# Check outputs on an image, prepared by ConvNextImageProcessor
			SCREAMING_SNAKE_CASE    	=   convert_preprocessor(a  )
			SCREAMING_SNAKE_CASE    	=   preprocessor(images=prepare_img()		,	return_tensors='''pt'''  )
			SCREAMING_SNAKE_CASE    	=   model(**a  ).logits

			# note: the logits below were obtained without center cropping
			if checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnextv2/im1k/convnextv2_atto_1k_224_ema.pt":
						SCREAMING_SNAKE_CASE    	=   torch.tensor([-0.39_30, 0.17_47, -0.52_46, 0.41_77, 0.42_95]  )
			elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnextv2/im1k/convnextv2_femto_1k_224_ema.pt":
						SCREAMING_SNAKE_CASE    	=   torch.tensor([-0.17_27, -0.53_41, -0.78_18, -0.47_45, -0.65_66]  )
			elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnextv2/im1k/convnextv2_pico_1k_224_ema.pt":
						SCREAMING_SNAKE_CASE    	=   torch.tensor([-0.03_33, 0.15_63, -0.91_37, 0.10_54, 0.03_81]  )
			elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnextv2/im1k/convnextv2_nano_1k_224_ema.pt":
						SCREAMING_SNAKE_CASE    	=   torch.tensor([-0.17_44, -0.15_55, -0.07_13, 0.09_50, -0.14_31]  )
			elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnextv2/im1k/convnextv2_tiny_1k_224_ema.pt":
						SCREAMING_SNAKE_CASE    	=   torch.tensor([0.99_96, 0.19_66, -0.43_86, -0.34_72, 0.66_61]  )
			elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnextv2/im1k/convnextv2_base_1k_224_ema.pt":
						SCREAMING_SNAKE_CASE    	=   torch.tensor([-0.25_53, -0.67_08, -0.13_59, 0.25_18, -0.24_88]  )
			elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnextv2/im1k/convnextv2_large_1k_224_ema.pt":
						SCREAMING_SNAKE_CASE    	=   torch.tensor([-0.06_73, -0.56_27, -0.37_53, -0.27_22, 0.01_78]  )
			elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnextv2/im1k/convnextv2_huge_1k_224_ema.pt":
						SCREAMING_SNAKE_CASE    	=   torch.tensor([-0.63_77, -0.74_58, -0.21_50, 0.11_84, -0.05_97]  )
			elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnextv2/im22k/convnextv2_nano_22k_224_ema.pt":
						SCREAMING_SNAKE_CASE    	=   torch.tensor([1.07_99, 0.23_22, -0.88_60, 1.02_19, 0.62_31]  )
			elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnextv2/im22k/convnextv2_nano_22k_384_ema.pt":
						SCREAMING_SNAKE_CASE    	=   torch.tensor([0.37_66, 0.49_17, -1.14_26, 0.99_42, 0.60_24]  )
			elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnextv2/im22k/convnextv2_tiny_22k_224_ema.pt":
						SCREAMING_SNAKE_CASE    	=   torch.tensor([0.42_20, -0.69_19, -0.43_17, -0.28_81, -0.66_09]  )
			elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnextv2/im22k/convnextv2_tiny_22k_384_ema.pt":
						SCREAMING_SNAKE_CASE    	=   torch.tensor([0.10_82, -0.82_86, -0.50_95, 0.46_81, -0.80_85]  )
			elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnextv2/im22k/convnextv2_base_22k_224_ema.pt":
						SCREAMING_SNAKE_CASE    	=   torch.tensor([-0.24_19, -0.62_21, 0.21_76, -0.09_80, -0.75_27]  )
			elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnextv2/im22k/convnextv2_base_22k_384_ema.pt":
						SCREAMING_SNAKE_CASE    	=   torch.tensor([0.03_91, -0.43_71, 0.37_86, 0.12_51, -0.27_84]  )
			elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnextv2/im22k/convnextv2_large_22k_224_ema.pt":
						SCREAMING_SNAKE_CASE    	=   torch.tensor([-0.05_04, 0.56_36, -0.17_29, -0.65_07, -0.39_49]  )
			elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnextv2/im22k/convnextv2_large_22k_384_ema.pt":
						SCREAMING_SNAKE_CASE    	=   torch.tensor([0.35_60, 0.94_86, 0.31_49, -0.26_67, -0.51_38]  )
			elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnextv2/im22k/convnextv2_huge_22k_384_ema.pt":
						SCREAMING_SNAKE_CASE    	=   torch.tensor([-0.24_69, -0.45_50, -0.58_53, -0.08_10, 0.03_09]  )
			elif checkpoint_url == "https://dl.fbaipublicfiles.com/convnext/convnextv2/im22k/convnextv2_huge_22k_512_ema.pt":
						SCREAMING_SNAKE_CASE    	=   torch.tensor([-0.30_90, 0.08_02, -0.06_82, -0.19_79, -0.28_26]  )
			else:
						raise ValueError(F"""Unknown URL: {checkpoint_url}"""  )

			assert torch.allclose(logits[0, :5]		,	a		,	atol=1E-3  )
			assert logits.shape == expected_shape
			print('''Model outputs match the original results!'''  )

			if save_model:
						print('''Saving model to local...'''  )
						# Create folder to save model
						if not os.path.isdir(a  ):
									os.mkdir(a  )

						model.save_pretrained(a  )
						preprocessor.save_pretrained(a  )

			SCREAMING_SNAKE_CASE    	=   '''convnextv2'''
			if "atto" in checkpoint_url:
						model_name += "-atto"
			if "femto" in checkpoint_url:
						model_name += "-femto"
			if "pico" in checkpoint_url:
						model_name += "-pico"
			if "nano" in checkpoint_url:
						model_name += "-nano"
			elif "tiny" in checkpoint_url:
						model_name += "-tiny"
			elif "base" in checkpoint_url:
						model_name += "-base"
			elif "large" in checkpoint_url:
						model_name += "-large"
			elif "huge" in checkpoint_url:
						model_name += "-huge"
			if "22k" in checkpoint_url and "1k" not in checkpoint_url:
						model_name += "-22k"
			elif "22k" in checkpoint_url and "1k" in checkpoint_url:
						model_name += "-22k-1k"
			elif "1k" in checkpoint_url:
						model_name += "-1k"
			if "224" in checkpoint_url:
						model_name += "-224"
			elif "384" in checkpoint_url:
						model_name += "-384"
			elif "512" in checkpoint_url:
						model_name += "-512"

			if push_to_hub:
						print(F"""Pushing {model_name} to the hub..."""  )
						model.push_to_hub(a  )
						preprocessor.push_to_hub(a  )


if __name__ == "__main__":
	__lowerCAmelCase				      =					argparse.ArgumentParser()
	# Required parameters
	parser.add_argument(
	    '--checkpoint_url',
	    default='https://dl.fbaipublicfiles.com/convnext/convnextv2/im1k/convnextv2_atto_1k_224_ema.pt',
	    type=str,
	    help='URL of the original ConvNeXTV2 checkpoint you\'d like to convert.',
	)
	parser.add_argument(
	    '--pytorch_dump_folder_path',
	    default='model',
	    type=str,
	    help='Path to the output PyTorch model directory.',
	)
	parser.add_argument('--save_model', action='store_true', help='Save model to local')
	parser.add_argument('--push_to_hub', action='store_true', help='Push model and image preprocessor to the hub')

	__lowerCAmelCase				      =					parser.parse_args()
	convert_convnextva_checkpoint(
	    args.checkpoint_url, args.pytorch_dump_folder_path, args.save_model, args.push_to_hub
	)

import subprocess
from argparse import ArgumentParser
from typing import List, Union

from huggingface_hub.hf_api import HfFolder, create_repo, whoami
from requests.exceptions import HTTPError

from . import BaseTransformersCLICommand





class 						lowerCamelCase			(					__lowerCamelCase				):







	@staticmethod
	def    snake_case__    (    lowercase			:ArgumentParser )		->			Union[str, Any]:







				"""simple docstring"""






				SCREAMING_SNAKE_CASE    	=   parser.add_parser('''login'''      ,    help='''Log in using the same credentials as on huggingface.co''' )
				login_parser.set_defaults(func=lambda lowercase : LoginCommand(lowercase ) )
				SCREAMING_SNAKE_CASE    	=   parser.add_parser('''whoami'''      ,    help='''Find out which huggingface.co account you are logged in as.''' )
				whoami_parser.set_defaults(func=lambda lowercase : WhoamiCommand(lowercase ) )
				SCREAMING_SNAKE_CASE    	=   parser.add_parser('''logout'''      ,    help='''Log out''' )
				logout_parser.set_defaults(func=lambda lowercase : LogoutCommand(lowercase ) )

				# new system: git-based repo system
				SCREAMING_SNAKE_CASE    	=   parser.add_parser(
				    '''repo'''      ,    help='''Deprecated: use `huggingface-cli` instead. Commands to interact with your huggingface.co repos.'''      ,    )
				SCREAMING_SNAKE_CASE    	=   repo_parser.add_subparsers(
				    help='''Deprecated: use `huggingface-cli` instead. huggingface.co repos related commands''' )
				SCREAMING_SNAKE_CASE    	=   repo_subparsers.add_parser(
				    '''create'''      ,    help='''Deprecated: use `huggingface-cli` instead. Create a new repo on huggingface.co''' )
				repo_create_parser.add_argument(
				    '''name'''      ,    type=lowercase      ,    help='''Name for your model\'s repo. Will be namespaced under your username to build the model id.'''      ,    )
				repo_create_parser.add_argument('''--organization'''      ,    type=lowercase      ,    help='''Optional: organization namespace.''' )
				repo_create_parser.add_argument('''-y'''      ,    '''--yes'''      ,    action='''store_true'''      ,    help='''Optional: answer Yes to the prompt''' )
				repo_create_parser.set_defaults(func=lambda lowercase : RepoCreateCommand(lowercase ) )





class 						lowerCamelCase			:
	UpperCamelCase_     :				List[str]								=  '\u001b[1m'
	UpperCamelCase_     :				Union[str, Any]								=  '\u001b[31m'
	UpperCamelCase_     :				Any								=  '\u001b[90m'
	UpperCamelCase_     :				List[str]								=  '\u001b[0m'







	@classmethod
	def    snake_case__    (    cls			:List[Any]      ,    lowercase			:Any )		->			List[str]:







				"""simple docstring"""






				return f"""{cls._bold}{s}{cls._reset}"""







	@classmethod
	def    snake_case__    (    cls			:Optional[Any]      ,    lowercase			:str )		->			Tuple:







				"""simple docstring"""






				return f"""{cls._bold}{cls._red}{s}{cls._reset}"""







	@classmethod
	def    snake_case__    (    cls			:List[str]      ,    lowercase			:Any )		->			List[Any]:







				"""simple docstring"""






				return f"""{cls._gray}{s}{cls._reset}"""



def       a			(   a		,	a  )    ->str:




			'''simple docstring'''


			SCREAMING_SNAKE_CASE    	=   [max(len(str(a  )  ) for x in col  ) for col in zip(*a		,	a  )]
			SCREAMING_SNAKE_CASE    	=   ('''{{:{}}} ''' * len(a  )).format(*a  )
			SCREAMING_SNAKE_CASE    	=   []
			lines.append(row_format.format(*a  )  )
			lines.append(row_format.format(*['''-''' * w for w in col_widths]  )  )
			for row in rows:
						lines.append(row_format.format(*a  )  )
			return "\n".join(a  )





class 						lowerCamelCase			:







	def __init__(    self			:List[str]      ,    lowercase			:Optional[Any] )		->			Union[str, Any]:







				"""simple docstring"""






				SCREAMING_SNAKE_CASE    	=   args





class 						lowerCamelCase			(					__lowerCamelCase				):







	def    snake_case__    (    self			:List[str] )		->			Optional[Any]:







				"""simple docstring"""






				print(
				    ANSI.red(
				        '''ERROR! `huggingface-cli login` uses an outdated login mechanism '''
				        '''that is not compatible with the Hugging Face Hub backend anymore. '''
				        '''Please use `huggingface-cli login instead.''' ) )





class 						lowerCamelCase			(					__lowerCamelCase				):







	def    snake_case__    (    self			:List[Any] )		->			Any:







				"""simple docstring"""






				print(
				    ANSI.red(
				        '''WARNING! `transformers-cli whoami` is deprecated and will be removed in v5. Please use '''
				        '''`huggingface-cli whoami` instead.''' ) )
				SCREAMING_SNAKE_CASE    	=   HfFolder.get_token()
				if token is None:
							print('''Not logged in''' )
							exit()
				try:
							SCREAMING_SNAKE_CASE	,       SCREAMING_SNAKE_CASE    	=   whoami(lowercase )
							print(lowercase )
							if orgs:
										print(ANSI.bold('''orgs: ''' )      ,    ''','''.join(lowercase ) )
				except HTTPError as e:
							print(lowercase )
							print(ANSI.red(e.response.text ) )
							exit(1 )





class 						lowerCamelCase			(					__lowerCamelCase				):







	def    snake_case__    (    self			:str )		->			Union[str, Any]:







				"""simple docstring"""






				print(
				    ANSI.red(
				        '''ERROR! `transformers-cli logout` uses an outdated logout mechanism '''
				        '''that is not compatible with the Hugging Face Hub backend anymore. '''
				        '''Please use `huggingface-cli logout instead.''' ) )





class 						lowerCamelCase			(					__lowerCamelCase				):







	def    snake_case__    (    self			:int )		->			Optional[Any]:







				"""simple docstring"""






				print(
				    ANSI.red(
				        '''WARNING! Managing repositories through transformers-cli is deprecated. '''
				        '''Please use `huggingface-cli` instead.''' ) )
				SCREAMING_SNAKE_CASE    	=   HfFolder.get_token()
				if token is None:
							print('''Not logged in''' )
							exit(1 )
				try:
							SCREAMING_SNAKE_CASE    	=   subprocess.check_output(['''git''', '''--version'''] ).decode('''utf-8''' )
							print(ANSI.gray(stdout.strip() ) )
				except FileNotFoundError:
							print('''Looks like you do not have git installed, please install.''' )

				try:
							SCREAMING_SNAKE_CASE    	=   subprocess.check_output(['''git-lfs''', '''--version'''] ).decode('''utf-8''' )
							print(ANSI.gray(stdout.strip() ) )
				except FileNotFoundError:
							print(
							    ANSI.red(
							        '''Looks like you do not have git-lfs installed, please install.'''
							        ''' You can install from https://git-lfs.github.com/.'''
							        ''' Then run `git lfs install` (you only have to do this once).''' ) )
				print('''''' )

				SCREAMING_SNAKE_CASE	,       SCREAMING_SNAKE_CASE    	=   whoami(lowercase )
				SCREAMING_SNAKE_CASE    	=   self.args.organization if self.args.organization is not None else user
				SCREAMING_SNAKE_CASE    	=   f"""{namespace}/{self.args.name}"""
				print(f"""You are about to create {ANSI.bold(lowercase )}""" )

				if not self.args.yes:
							SCREAMING_SNAKE_CASE    	=   input('''Proceed? [Y/n] ''' ).lower()
							if not (choice == "" or choice == "y" or choice == "yes"):
										print('''Abort''' )
										exit()
				try:
							SCREAMING_SNAKE_CASE    	=   create_repo(lowercase      ,    name=self.args.name      ,    organization=self.args.organization )
				except HTTPError as e:
							print(lowercase )
							print(ANSI.red(e.response.text ) )
							exit(1 )
				print('''\nYour repo now lives at:''' )
				print(f"""  {ANSI.bold(lowercase )}""" )
				print('''\nYou can clone it locally with the command below, and commit/push as usual.''' )
				print(f"""\n  git clone {url}""" )
				print('''''' )