docs: def profile_stats(adapter, threshold = 0.9):
  
      """
          Compares the pairwise hamming distances for all the sample profiles in
          the database. Returns a table of the number of distances within given
          ranges.
  
          Args:
              adapter (MongoAdapter): Adapter to mongodb
              threshold (float): If any distance is found above this threshold
                  a warning will be given, stating the two matching samples.
  
          Returns:
              distance_dict (dict): dictionary with ranges as keys, and the number
                  of distances that are within these ranges as values.
  
      """
      profiles = []
      samples = []
  
      #Instatiate the distance dictionary with a count 0 for all the ranges
      distance_dict = {key: 0 for key in HAMMING_RANGES.keys()}
  
      for case in adapter.cases():
  
          for individual in case['individuals']:
  
              if individual.get('profile'):
                  #Make sample name <case_id>.<sample_id>
                  sample_id = f"{case['case_id']}.{individual['ind_id']}"
                  ind_profile = individual['profile']
  
                  #Numpy array to hold all the distances for this samples profile
                  distance_array = np.array([], dtype=np.float)
  
                  for sample, profile in zip(samples, profiles):
  
                      #Get distance and append to distance array
                      distance = compare_profiles(ind_profile, profile)
                      distance_array = np.append(distance_array, distance)
  
                      #Issue warning if above threshold
                      if distance >= threshold:
                          LOG.warning(f"{sample_id} is {distance} similar to {sample}")
  
                  #Check number of distances in each range and add to distance_dict
                  for key,range in HAMMING_RANGES.items():
  
                      #Calculate the number of hamming distances found within the
                      #range for current individual
                      distance_dict[key] += np.sum(
                          (distance_array >= range[0]) & (distance_array < range[1])
                      )
  
                  #Append profile and sample_id for this sample for the next
                  #iteration
                  profiles.append(ind_profile)
                  samples.append(sample_id)
  
      return distance_dict