class_docstr: Find duplicates using hashing algorithms and/or generate hashes given a single image or a directory of images.
  
  The module can be used for 2 purposes: Encoding generation and duplicate detection.
  - Encoding generation:
  To generate hashes using specific hashing method. The generated hashes can be used at a later time for
  deduplication. Using the method 'encode_image' from the specific hashing method object, the hash for a
  single image can be obtained while the 'encode_images' method can be used to get hashes for all images in a
  directory.
  
  - Duplicate detection:
  Find duplicates either using the encoding mapping generated previously using 'encode_images' or using a Path to the
  directory that contains the images that need to be deduplicated. 'find_duplicates' and 'find_duplicates_to_remove'
  methods are provided to accomplish these tasks.
docstr: Calculate the hamming distance between two hashes. If length of hashes is not 64 bits, then pads the length
  to be 64 for each hash and then calculates the hamming distance.
  
  Args:
      hash1: hash string
      hash2: hash string
  
  Returns:
      hamming_distance: Hamming distance between the two hashes.
docstr_tok: ["Calculate","the","hamming","distance","between","two","hashes",".","If","length","of","hashes","is","not","64","bits",",","then","pads","the","length","to","be","64","for","each","hash","and","then","calculates","the","hamming","distance",".","Args",":","hash1",":","hash","string","hash2",":","hash","string","Returns",":","hamming_distance",":","Hamming","distance","between","the","two","hashes","."]
code: def hamming_distance(hash1: str, hash2: str) -> float:
      """
      Calculate the hamming distance between two hashes. If length of hashes is not 64 bits, then pads the length
      to be 64 for each hash and then calculates the hamming distance.
  
      Args:
          hash1: hash string
          hash2: hash string
  
      Returns:
          hamming_distance: Hamming distance between the two hashes.
      """
      hash1_bin = bin(int(hash1, 16))[2:].zfill(
          64
      )  # zfill ensures that len of hash is 64 and pads MSB if it is < A
      hash2_bin = bin(int(hash2, 16))[2:].zfill(64)
      return np.sum([i != j for i, j in zip(hash1_bin, hash2_bin)])
  
imports: import os
  import sys
  import warnings
  from pathlib import PurePath, Path
  from typing import Dict, List, Optional
  from multiprocessing import cpu_count
  import numpy
  import pywt
  from scipy.fftpack import dct
  from imagededup.handlers.search.retrieval import HashEval
  from imagededup.utils.general_utils import get_files_to_remove, save_json, parallelise, generate_files, generate_relative_names
  from imagededup.utils.image_utils import load_image, preprocess_image, check_image_array_hash
  from imagededup.utils.logger import return_logger
label_desc: Use image node_id 2 for calling the Hashing obj's underlying member method code with example usage: obj.hamming_distance(hash1, hash2) and returns: np