


import tempfile
import unittest

import transformers
from transformers import XGLMConfig, XGLMTokenizer, is_flax_available, is_torch_available
from transformers.testing_utils import is_pt_flax_cross_test, require_flax, require_sentencepiece, slow

from ...generation.test_flax_utils import FlaxGenerationTesterMixin
from ...test_modeling_flax_common import FlaxModelTesterMixin, floats_tensor, ids_tensor, random_attention_mask


if is_flax_available():
      import jax
      import jax.numpy as jnp
      import numpy as np

      from transformers.modeling_flax_pytorch_utils import (
          convert_pytorch_state_dict_to_flax,
          load_flax_weights_in_pytorch_model,
      )
      from transformers.models.xglm.modeling_flax_xglm import FlaxXGLMForCausalLM, FlaxXGLMModel


if is_torch_available():
      import torch




@require_flax
class  A_ :







 """simple docstring"""





 def __init__(      self       :			Tuple							,     _a       :			Optional[int]							,     _a       :			Tuple=1_4							,     _a       :			List[Any]=7							,     _a       :			List[str]=True							,     _a       :			Tuple=True							,     _a       :			Any=True							,     _a       :			str=9_9							,     _a       :			str=3_2							,     _a       :			Optional[Any]=5							,     _a       :			int=4							,     _a       :			Union[str, Any]=3_7							,     _a       :			List[Any]="gelu"							,     _a       :			List[Any]=0.1							,     _a       :			Tuple=0.1							,     _a       :			int=5_1_2							,     _a       :			Tuple=0.0_2							,     _a       :			Dict=None							,     )     ->      Tuple:
      UpperCAmelCase    :					List[Any]			=      parent
      UpperCAmelCase    :					str			=      batch_size
      UpperCAmelCase    :					Dict			=      seq_length
      UpperCAmelCase    :					Any			=      is_training
      UpperCAmelCase    :					Union[str, Any]			=      use_input_mask
      UpperCAmelCase    :					int			=      use_labels
      UpperCAmelCase    :					Optional[Any]			=      vocab_size
      UpperCAmelCase    :					Union[str, Any]			=      d_model
      UpperCAmelCase    :					Optional[Any]			=      num_hidden_layers
      UpperCAmelCase    :					Tuple			=      num_attention_heads
      UpperCAmelCase    :					str			=      ffn_dim
      UpperCAmelCase    :					Dict			=      activation_function
      UpperCAmelCase    :					int			=      activation_dropout
      UpperCAmelCase    :					Union[str, Any]			=      attention_dropout
      UpperCAmelCase    :					Optional[int]			=      max_position_embeddings
      UpperCAmelCase    :					str			=      initializer_range
      UpperCAmelCase    :					Tuple			=      None
      UpperCAmelCase    :					List[Any]			=      0
      UpperCAmelCase    :					List[str]			=      2
      UpperCAmelCase    :					Dict			=      1
 def 	_UpperCamelCase     (      self       :			List[str]					)     ->      List[str]:
      UpperCAmelCase    :					str			=      np.clip(ids_tensor([self.batch_size, self.seq_length]							,     self.vocab_size					)							,     3							,     self.vocab_size					)

      UpperCAmelCase    :					Union[str, Any]			=      None
      if self.use_input_mask:
           UpperCAmelCase    :					int			=      random_attention_mask([self.batch_size, self.seq_length]					)

      UpperCAmelCase    :					Union[str, Any]			=      XGLMConfig(
          vocab_size=self.vocab_size							,     d_model=self.hidden_size							,     num_layers=self.num_hidden_layers							,     attention_heads=self.num_attention_heads							,     ffn_dim=self.ffn_dim							,     activation_function=self.activation_function							,     activation_dropout=self.activation_dropout							,     attention_dropout=self.attention_dropout							,     max_position_embeddings=self.max_position_embeddings							,     initializer_range=self.initializer_range							,     use_cache=_a							,     bos_token_id=self.bos_token_id							,     eos_token_id=self.eos_token_id							,     pad_token_id=self.pad_token_id							,     )

      return (config, input_ids, input_mask)
 def 	_UpperCamelCase     (      self       :			str					)     ->      List[str]:
      UpperCAmelCase    :					Tuple			=      self.prepare_config_and_inputs()
      UpperCAmelCase	,			UpperCAmelCase	,			UpperCAmelCase    :					List[Any]			=      config_and_inputs
      UpperCAmelCase    :					str			=      {"input_ids": input_ids, "attention_mask": attention_mask}
      return config, inputs_dict
 def 	_UpperCamelCase     (      self       :			Dict					)     ->      List[str]:
      UpperCAmelCase	,			UpperCAmelCase	,			UpperCAmelCase    :					Dict			=      self.prepare_config_and_inputs()

      UpperCAmelCase    :					List[Any]			=      floats_tensor([self.batch_size, self.seq_length, self.hidden_size]					)
      UpperCAmelCase    :					Any			=      ids_tensor([self.batch_size, self.seq_length]							,     vocab_size=2					)

      return (
          config,
          input_ids,
          attention_mask,
          encoder_hidden_states,
          encoder_attention_mask,
      )
 def 	_UpperCamelCase     (      self       :			int							,     _a       :			Optional[int]							,     _a       :			Dict							,     _a       :			Tuple							,     _a       :			Dict					)     ->      str:
      UpperCAmelCase    :					List[str]			=      2_0
      UpperCAmelCase    :					Optional[Any]			=      model_class_name(_a					)

      UpperCAmelCase    :					Dict			=      model.init_cache(input_ids.shape[0]							,     _a					)
      UpperCAmelCase    :					List[Any]			=      jnp.ones((input_ids.shape[0], max_decoder_length)							,     dtype="i4"					)

      UpperCAmelCase    :					str			=      jnp.broadcast_to(
          jnp.arange(input_ids.shape[-1] - 1					)[None, :]							,     (input_ids.shape[0], input_ids.shape[-1] - 1)					)
      UpperCAmelCase    :					List[str]			=      model(
          input_ids[:, :-1]							,     attention_mask=_a							,     past_key_values=_a							,     position_ids=_a							,     )

      UpperCAmelCase    :					Any			=      jnp.array(input_ids.shape[0] * [[input_ids.shape[-1] - 1]]							,     dtype="i4"					)
      UpperCAmelCase    :					Dict			=      model(
          input_ids[:, -1:]							,     attention_mask=_a							,     past_key_values=outputs_cache.past_key_values							,     position_ids=_a							,     )

      UpperCAmelCase    :					int			=      model(_a					)

      UpperCAmelCase    :					Optional[Any]			=      np.max(np.abs((outputs_cache_next[0][:, -1, :5] - outputs[0][:, -1, :5])					)					)
      self.parent.assertTrue(diff < 1E-3							,     msg=f'Max diff is {diff}'					)

 def 	_UpperCamelCase     (      self       :			str							,     _a       :			List[Any]							,     _a       :			Any							,     _a       :			Optional[Any]							,     _a       :			List[Any]					)     ->      Optional[Any]:
      UpperCAmelCase    :					List[Any]			=      2_0
      UpperCAmelCase    :					Any			=      model_class_name(_a					)

      UpperCAmelCase    :					Any			=      jnp.concatenate(
          [attention_mask, jnp.zeros((attention_mask.shape[0], max_decoder_length - attention_mask.shape[1])					)]							,     axis=-1							,     )

      UpperCAmelCase    :					Optional[int]			=      model.init_cache(input_ids.shape[0]							,     _a					)
      UpperCAmelCase    :					int			=      jnp.broadcast_to(
          jnp.arange(input_ids.shape[-1] - 1					)[None, :]							,     (input_ids.shape[0], input_ids.shape[-1] - 1)					)

      UpperCAmelCase    :					Any			=      model(
          input_ids[:, :-1]							,     attention_mask=_a							,     past_key_values=_a							,     position_ids=_a							,     )
      UpperCAmelCase    :					List[Any]			=      jnp.array(input_ids.shape[0] * [[input_ids.shape[-1] - 1]]							,     dtype="i4"					)
      UpperCAmelCase    :					Any			=      model(
          input_ids[:, -1:]							,     past_key_values=outputs_cache.past_key_values							,     attention_mask=_a							,     position_ids=_a							,     )

      UpperCAmelCase    :					Union[str, Any]			=      model(_a							,     attention_mask=_a					)
      UpperCAmelCase    :					int			=      np.max(np.abs((outputs_cache_next[0][:, -1, :5] - outputs[0][:, -1, :5])					)					)
      self.parent.assertTrue(diff < 1E-3							,     msg=f'Max diff is {diff}'					)




@require_sentencepiece
@require_flax
class  A_ (			a_   ,    a_   ,    unittest.TestCase  ):







 """simple docstring"""





 _UpperCamelCase					:			Tuple     	=       (FlaxXGLMModel, FlaxXGLMForCausalLM) if is_flax_available() else ()
 _UpperCamelCase					:			int     	=       (FlaxXGLMForCausalLM,) if is_flax_available() else ()
 def 	_UpperCamelCase     (      self       :			List[Any]					)     ->      Optional[Any]:
      UpperCAmelCase    :					Any			=      FlaxXGLMModelTester(self					)
 def 	_UpperCamelCase     (      self       :			int					)     ->      Dict:
      for model_class_name in self.all_model_classes:
           UpperCAmelCase	,			UpperCAmelCase	,			UpperCAmelCase    :					List[str]			=      self.model_tester.prepare_config_and_inputs()
           self.model_tester.check_use_cache_forward(_a							,     _a							,     _a							,     _a					)
 def 	_UpperCamelCase     (      self       :			int					)     ->      Dict:
      for model_class_name in self.all_model_classes:
           UpperCAmelCase	,			UpperCAmelCase	,			UpperCAmelCase    :					Tuple			=      self.model_tester.prepare_config_and_inputs()
           self.model_tester.check_use_cache_forward_with_attn_mask(
               _a							,     _a							,     _a							,     _a					)
 @slow
 def 	_UpperCamelCase     (      self       :			int					)     ->      Dict:
      UpperCAmelCase    :					int			=      XGLMTokenizer.from_pretrained("XGLM"							,     padding_side="left"					)
      UpperCAmelCase    :					Optional[int]			=      tokenizer(["Hello this is a long string", "Hey"]							,     return_tensors="np"							,     padding=_a							,     truncation=_a					)

      UpperCAmelCase    :					int			=      FlaxXGLMForCausalLM.from_pretrained("facebook/xglm-564M"					)
      UpperCAmelCase    :					Optional[Any]			=      1
      UpperCAmelCase    :					Tuple			=      False

      UpperCAmelCase    :					Any			=      jax.jit(model.generate					)

      UpperCAmelCase    :					Any			=      jit_generate(inputs["input_ids"]							,     attention_mask=inputs["attention_mask"]					).sequences

      UpperCAmelCase    :					Any			=      tokenizer.batch_decode(_a							,     skip_special_tokens=_a					)

      UpperCAmelCase    :					Union[str, Any]			=      [
          "Hello this is a long string of questions, but I'm not sure if I'm",
          "Hey, I'm a newbie to the forum and I'",
      ]

      self.assertListEqual(_a							,     _a					)
 @is_pt_flax_cross_test
 def 	_UpperCamelCase     (      self       :			Union[str, Any]					)     ->      str:
      UpperCAmelCase	,			UpperCAmelCase    :					Optional[Any]			=      self.model_tester.prepare_config_and_inputs_for_common()

      for model_class in self.all_model_classes:
           with self.subTest(model_class.__name__					):
                # prepare inputs
                UpperCAmelCase    :					str			=      self._prepare_for_class(_a							,     _a					)
                UpperCAmelCase    :					int			=      {k: torch.tensor(v.tolist()					) for k, v in prepared_inputs_dict.items()}

                # load corresponding PyTorch class
                UpperCAmelCase    :					int			=      model_class.__name__[4:]  # Skip the "Flax" at the beginning
                UpperCAmelCase    :					str			=      getattr(_a							,     _a					)

                UpperCAmelCase	,			UpperCAmelCase    :					List[str]			=      pt_inputs["input_ids"].shape
                UpperCAmelCase    :					str			=      np.random.randint(0							,     seq_length - 1							,     size=(batch_size,)					)
                for batch_idx, start_index in enumerate(_a					):
                     UpperCAmelCase    :					str			=      0
                     UpperCAmelCase    :					Optional[Any]			=      1
                     UpperCAmelCase    :					int			=      0
                     UpperCAmelCase    :					Union[str, Any]			=      1
                UpperCAmelCase    :					Dict			=      pt_model_class(_a					).eval()
                # Flax models don't use the `use_cache` option and cache is not returned as a default.
                # So we disable `use_cache` here for PyTorch model.
                UpperCAmelCase    :					List[Any]			=      False
                UpperCAmelCase    :					Union[str, Any]			=      model_class(_a							,     dtype=jnp.floataa					)
                UpperCAmelCase    :					Union[str, Any]			=      convert_pytorch_state_dict_to_flax(pt_model.state_dict()							,     _a					)
                UpperCAmelCase    :					List[Any]			=      fx_state

                with torch.no_grad():
                     UpperCAmelCase    :					str			=      pt_model(**_a					).to_tuple()

                UpperCAmelCase    :					int			=      fx_model(**_a					).to_tuple()
                self.assertEqual(len(_a					)							,     len(_a					)							,     "Output lengths differ between Flax and PyTorch"					)
                for fx_output, pt_output in zip(_a							,     _a					):
                     self.assert_almost_equals(fx_output[:, -1]							,     pt_output[:, -1].numpy()							,     4E-2					)

                with tempfile.TemporaryDirectory() as tmpdirname:
                     pt_model.save_pretrained(_a					)
                     UpperCAmelCase    :					Optional[Any]			=      model_class.from_pretrained(_a							,     from_pt=_a					)

                UpperCAmelCase    :					Optional[Any]			=      fx_model_loaded(**_a					).to_tuple()
                self.assertEqual(
                    len(_a					)							,     len(_a					)							,     "Output lengths differ between Flax and PyTorch"					)
                for fx_output_loaded, pt_output in zip(_a							,     _a					):
                     self.assert_almost_equals(fx_output_loaded[:, -1]							,     pt_output[:, -1].numpy()							,     4E-2					)
 @is_pt_flax_cross_test
 def 	_UpperCamelCase     (      self       :			int					)     ->      str:
      UpperCAmelCase	,			UpperCAmelCase    :					Optional[int]			=      self.model_tester.prepare_config_and_inputs_for_common()
      for model_class in self.all_model_classes:
           with self.subTest(model_class.__name__					):
                # prepare inputs
                UpperCAmelCase    :					str			=      self._prepare_for_class(_a							,     _a					)
                UpperCAmelCase    :					Optional[Any]			=      {k: torch.tensor(v.tolist()					) for k, v in prepared_inputs_dict.items()}

                # load corresponding PyTorch class
                UpperCAmelCase    :					Optional[Any]			=      model_class.__name__[4:]  # Skip the "Flax" at the beginning
                UpperCAmelCase    :					Dict			=      getattr(_a							,     _a					)

                UpperCAmelCase    :					Optional[int]			=      pt_model_class(_a					).eval()
                UpperCAmelCase    :					int			=      False
                UpperCAmelCase    :					int			=      model_class(_a							,     dtype=jnp.floataa					)

                UpperCAmelCase    :					List[Any]			=      load_flax_weights_in_pytorch_model(_a							,     fx_model.params					)
                UpperCAmelCase	,			UpperCAmelCase    :					Dict			=      pt_inputs["input_ids"].shape
                UpperCAmelCase    :					int			=      np.random.randint(0							,     seq_length - 1							,     size=(batch_size,)					)
                for batch_idx, start_index in enumerate(_a					):
                     UpperCAmelCase    :					Dict			=      0
                     UpperCAmelCase    :					Any			=      1
                     UpperCAmelCase    :					Optional[int]			=      0
                     UpperCAmelCase    :					Optional[int]			=      1

                # make sure weights are tied in PyTorch
                pt_model.tie_weights()

                with torch.no_grad():
                     UpperCAmelCase    :					int			=      pt_model(**_a					).to_tuple()

                UpperCAmelCase    :					Optional[Any]			=      fx_model(**_a					).to_tuple()
                self.assertEqual(len(_a					)							,     len(_a					)							,     "Output lengths differ between Flax and PyTorch"					)
                for fx_output, pt_output in zip(_a							,     _a					):
                     self.assert_almost_equals(fx_output[:, -1]							,     pt_output[:, -1].numpy()							,     4E-2					)

                with tempfile.TemporaryDirectory() as tmpdirname:
                     fx_model.save_pretrained(_a					)
                     UpperCAmelCase    :					List[Any]			=      pt_model_class.from_pretrained(_a							,     from_flax=_a					)

                with torch.no_grad():
                     UpperCAmelCase    :					List[Any]			=      pt_model_loaded(**_a					).to_tuple()

                self.assertEqual(
                    len(_a					)							,     len(_a					)							,     "Output lengths differ between Flax and PyTorch"					)
                for fx_output, pt_output in zip(_a							,     _a					):
                     self.assert_almost_equals(fx_output[:, -1]							,     pt_output[:, -1].numpy()							,     4E-2					)

 @slow
 def 	_UpperCamelCase     (      self       :			Any					)     ->      str:
      for model_class_name in self.all_model_classes:
           UpperCAmelCase    :					Dict			=      model_class_name.from_pretrained("facebook/xglm-564M"					)
           UpperCAmelCase    :					List[Any]			=      model(np.ones((1, 1)					)					)
           self.assertIsNotNone(_a					)







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  A_ (			a_  ):







 """simple docstring"""





 @staticmethod
 def 	_UpperCamelCase     (      _a       :			ArgumentParser					)     ->      str:
      UpperCAmelCase    :					str			=      parser.add_parser("login"							,     help="Log in using the same credentials as on huggingface.co"					)
      login_parser.set_defaults(func=lambda _a					: LoginCommand(_a					)					)
      UpperCAmelCase    :					str			=      parser.add_parser("whoami"							,     help="Find out which huggingface.co account you are logged in as."					)
      whoami_parser.set_defaults(func=lambda _a					: WhoamiCommand(_a					)					)
      UpperCAmelCase    :					List[Any]			=      parser.add_parser("logout"							,     help="Log out"					)
      logout_parser.set_defaults(func=lambda _a					: LogoutCommand(_a					)					)

      # new system: git-based repo system
      UpperCAmelCase    :					List[str]			=      parser.add_parser(
          "repo"							,     help="Deprecated: use `huggingface-cli` instead. Commands to interact with your huggingface.co repos."							,     )
      UpperCAmelCase    :					List[str]			=      repo_parser.add_subparsers(
          help="Deprecated: use `huggingface-cli` instead. huggingface.co repos related commands"					)
      UpperCAmelCase    :					Optional[Any]			=      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=_a							,     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=_a							,     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 _a					: RepoCreateCommand(_a					)					)




class  A_ :







 """simple docstring"""





 _UpperCamelCase					:			str     	=       '''\u001b[1m'''
 _UpperCamelCase					:			Optional[Any]     	=       '''\u001b[31m'''
 _UpperCamelCase					:			List[Any]     	=       '''\u001b[90m'''
 _UpperCamelCase					:			Tuple     	=       '''\u001b[0m'''
 @classmethod
 def 	_UpperCamelCase     (      cls       :			Any							,     _a       :			Tuple					)     ->      Any:
      return f'{cls._bold}{s}{cls._reset}'
 @classmethod
 def 	_UpperCamelCase     (      cls       :			Optional[Any]							,     _a       :			List[Any]					)     ->      str:
      return f'{cls._bold}{cls._red}{s}{cls._reset}'

 @classmethod
 def 	_UpperCamelCase     (      cls       :			str							,     _a       :			Optional[Any]					)     ->      Tuple:
      return f'{cls._gray}{s}{cls._reset}'







def 	A (		A__		,		A__			):
     UpperCAmelCase    :					str			=      [max(len(str(A__			)			) for x in col			) for col in zip(*A__		,		A__			)]
     UpperCAmelCase    :					str			=      ("{{:{}}} " * len(A__			)).format(*A__			)
     UpperCAmelCase    :					Dict			=      []
     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  A_ :







 """simple docstring"""





 def __init__(      self       :			List[str]							,     _a       :			str					)     ->      str:
      UpperCAmelCase    :					str			=      args




class  A_ (			a_  ):







 """simple docstring"""





 def 	_UpperCamelCase     (      self       :			Optional[int]					)     ->      Any:
      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  A_ (			a_  ):







 """simple docstring"""





 def 	_UpperCamelCase     (      self       :			Tuple					)     ->      Tuple:
      print(
          ANSI.red(
              "WARNING! `transformers-cli whoami` is deprecated and will be removed in v5. Please use "
              "`huggingface-cli whoami` instead."					)					)
      UpperCAmelCase    :					Dict			=      HfFolder.get_token()
      if token is None:
           print("Not logged in"					)
           exit()
      try:
           UpperCAmelCase	,			UpperCAmelCase    :					Optional[int]			=      whoami(_a					)
           print(_a					)
           if orgs:
                print(ANSI.bold("orgs: "					)							,     ",".join(_a					)					)
      except HTTPError as e:
           print(_a					)
           print(ANSI.red(e.response.text					)					)
           exit(1					)




class  A_ (			a_  ):







 """simple docstring"""





 def 	_UpperCamelCase     (      self       :			List[Any]					)     ->      int:
      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  A_ (			a_  ):







 """simple docstring"""





 def 	_UpperCamelCase     (      self       :			List[str]					)     ->      Union[str, Any]:
      print(
          ANSI.red(
              "WARNING! Managing repositories through transformers-cli is deprecated. "
              "Please use `huggingface-cli` instead."					)					)
      UpperCAmelCase    :					List[Any]			=      HfFolder.get_token()
      if token is None:
           print("Not logged in"					)
           exit(1					)
      try:
           UpperCAmelCase    :					List[str]			=      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:
           UpperCAmelCase    :					Tuple			=      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(""					)

      UpperCAmelCase	,			UpperCAmelCase    :					Tuple			=      whoami(_a					)
      UpperCAmelCase    :					Union[str, Any]			=      self.args.organization if self.args.organization is not None else user
      UpperCAmelCase    :					Dict			=      f'{namespace}/{self.args.name}'
      print(f'You are about to create {ANSI.bold(_a					)}'					)

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



