docs: def retrieve(pdb_id, cache_dir = None, strict = True, parse_ligands = False):
          '''Creates a PDB object by using a cached copy of the file if it exists or by retrieving the file from the RCSB.'''
  
          # Check to see whether we have a cached copy
          pdb_id = pdb_id.upper()
          if cache_dir:
              filename = os.path.join(cache_dir, "%s.pdb" % pdb_id)
              if os.path.exists(filename):
                  return PDB(read_file(filename), strict = strict, parse_ligands = parse_ligands)
  
          # Get a copy from the RCSB
          contents = rcsb.retrieve_pdb(pdb_id)
  
          # Create a cached copy if appropriate
          if cache_dir:
              write_file(os.path.join(cache_dir, "%s.pdb" % pdb_id), contents)
  
          # Return the object
          return PDB(contents, strict = strict, parse_ligands = parse_ligands)