code: def prepare_environment(params: Params):
      
      seed = params.pop_int("random_seed", 13370)
      numpy_seed = params.pop_int("numpy_seed", 1337)
      torch_seed = params.pop_int("pytorch_seed", 133)
  
      if seed is not None:
          random.seed(seed)
      if numpy_seed is not None:
          numpy.random.seed(numpy_seed)
      if torch_seed is not None:
          torch.manual_seed(torch_seed)
          # Seed all GPUs with the same seed if available.
          if torch.cuda.is_available():
              torch.cuda.manual_seed_all(torch_seed)
  
      log_pytorch_version_info()
docs: Sets random seeds for reproducible experiments. This may not work as expected
      if you use this from within a python project in which you have already imported Pytorch.
      If you use the scripts/run_model.py entry point to training models with this library,
      your experiments should be reasonably reproducible. If you are using this from your own
      project, you will want to call this function before importing Pytorch. Complete determinism
      is very difficult to achieve with libraries doing optimized linear algebra due to massively
      parallel execution, which is exacerbated by using GPUs.
  
      Parameters
      ----------
      params: Params object or dict, required.
          A ``Params`` object or dict holding the json parameters.