docs: def _get_path_assembly_mapping_data(
          self, source_assembly, target_assembly, retries=10
      ):
          """ Get local path to assembly mapping data, downloading if necessary.
  
          Parameters
          ----------
          source_assembly : {'NCBI36', 'GRCh37', 'GRCh38'}
              assembly to remap from
          target_assembly : {'NCBI36', 'GRCh37', 'GRCh38'}
              assembly to remap to
          retries : int
              number of retries per chromosome to download assembly mapping data
  
          Returns
          -------
          str
              path to <source_assembly>_<target_assembly>.tar.gz
  
          References
          ----------
          ..[1] Ensembl, Assembly Information Endpoint,
            https://rest.ensembl.org/documentation/info/assembly_info
          ..[2] Ensembl, Assembly Map Endpoint,
            http://rest.ensembl.org/documentation/info/assembly_map
  
          """
  
          if not lineage.create_dir(self._resources_dir):
              return None
  
          chroms = [
              "1",
              "2",
              "3",
              "4",
              "5",
              "6",
              "7",
              "8",
              "9",
              "10",
              "11",
              "12",
              "13",
              "14",
              "15",
              "16",
              "17",
              "18",
              "19",
              "20",
              "21",
              "22",
              "X",
              "Y",
              "MT",
          ]
  
          assembly_mapping_data = source_assembly + "_" + target_assembly
          destination = os.path.join(
              self._resources_dir, assembly_mapping_data + ".tar.gz"
          )
  
          if not os.path.exists(destination) or not self._all_chroms_in_tar(
              chroms, destination
          ):
              print("Downloading {}".format(os.path.relpath(destination)))
  
              try:
                  with tarfile.open(destination, "w:gz") as out_tar:
                      for chrom in chroms:
                          file = chrom + ".json"
  
                          map_endpoint = (
                              "/map/human/"
                              + source_assembly
                              + "/"
                              + chrom
                              + "/"
                              + target_assembly
                              + "?"
                          )
  
                          # get assembly mapping data
                          response = None
                          retry = 0
                          while response is None and retry < retries:
                              response = self._ensembl_rest_client.perform_rest_action(
                                  map_endpoint
                              )
                              retry += 1
  
                          if response is not None:
                              # open temp file, save json response to file, close temp file
                              with tempfile.NamedTemporaryFile(
                                  delete=False, mode="w"
                              ) as f:
                                  json.dump(response, f)
  
                              # add temp file to archive
                              out_tar.add(f.name, arcname=file)
  
                              # remove temp file
                              os.remove(f.name)
              except Exception as err:
                  print(err)
                  return None
  
          return destination