class_docstr: Community walking strategy which groups vertices with similar properties
  through probabilities and relations that are not explicitly modeled in a
  Knowledge Graph. Similar to the Random walking strategy, the Depth First
  Search (DFS) algorithm is used if a maximum number of walks is specified.
  Otherwise, the Breadth First Search (BFS) algorithm is chosen.
  
  Attributes:
      _is_support_remote: True if the walking strategy can be used with a
          remote Knowledge Graph, False Otherwise.
          Defaults to True.
      hop_prob: The probability to hop.
          Defaults to 0.1.
      kg: The global KG used later on for the worker process.
          Defaults to None.
      max_depth: The maximum depth of one walk.
      max_walks: The maximum number of walks per entity.
          Defaults to None.
      md5_bytes: The number of bytes to keep after hashing objects in
          MD5. Hasher allows to reduce the memory occupied by a long
          text. If md5_bytes is None, no hash is applied.
          Defaults to 8.
      random_state: The random state to use to keep random determinism with
          the walking strategy.
          Defaults to None.
      resolution: The resolution to use.
          Defaults to The resolution to use.
      sampler: The sampling strategy.
          Defaults to UniformSampler.
      with_reverse: True to extracts parents and children hops from an
          entity, creating (max_walks * max_walks) walks of 2 * depth,
          allowing also to centralize this entity in the walks. False
          otherwise.
          Defaults to False.
docstr: Extracts random walks for an entity based on Knowledge Graph using
  the Depth First Search (DFS) algorithm.
  
  Args:
      kg: The Knowledge Graph.
      entity: The root node to extract walks.
      is_reverse: True to get the parent neighbors instead of the child
          neighbors, False otherwise.
          Defaults to False.
  
  Returns:
      The list of unique walks for the provided entity.
docstr_tok: ["Extracts","random","walks","for","an","entity","based","on","Knowledge","Graph","using","the","Depth","First","Search","(","DFS",")","algorithm",".","Args",":","kg",":","The","Knowledge","Graph",".","entity",":","The","root","node","to","extract","walks",".","is_reverse",":","True","to","get","the","parent","neighbors","instead","of","the","child","neighbors",",","False","otherwise",".","Defaults","to","False",".","Returns",":","The","list","of","unique","walks","for","the","provided","entity","."]
code: def _dfs(
      self, kg: KG, entity: Vertex, is_reverse: bool = False
  ) -> List[Walk]:
      """Extracts random walks for an entity based on Knowledge Graph using
      the Depth First Search (DFS) algorithm.
  
      Args:
          kg: The Knowledge Graph.
          entity: The root node to extract walks.
          is_reverse: True to get the parent neighbors instead of the child
              neighbors, False otherwise.
              Defaults to False.
  
      Returns:
          The list of unique walks for the provided entity.
  
      """
      self.sampler.visited = set()
      walks: List[Walk] = []
      assert self.max_walks is not None
  
      rng = np.random.RandomState(self.random_state)
  
      while len(walks) < self.max_walks:
          sub_walk: Walk = (entity,)
          d = 1
          while d // 2 < self.max_depth:
              pred_obj = self.sampler.sample_hop(
                  kg, sub_walk, d // 2 == self.max_depth - 1, is_reverse
              )
              if pred_obj is None:
                  break
  
              if is_reverse:
                  if (
                      pred_obj[0] in self.communities
                      and rng.random() < self.hop_prob
                  ):
                      community_nodes = self.labels_per_community[
                          self.communities[pred_obj[0]]
                      ]
                      sub_walk = (
                          pred_obj[1],
                          rng.choice(community_nodes),
                      ) + sub_walk
                  else:
                      sub_walk = (pred_obj[1], pred_obj[0]) + sub_walk
              else:
                  if (
                      pred_obj[1] in self.communities
                      and rng.random() < self.hop_prob
                  ):
                      community_nodes = self.labels_per_community[
                          self.communities[pred_obj[1]]
                      ]
                      sub_walk += (
                          pred_obj[0],
                          rng.choice(community_nodes),
                      )
                  else:
                      sub_walk += (pred_obj[0], pred_obj[1])
              d = len(sub_walk) - 1
          walks.append(sub_walk)
      return list(walks)
  
imports: import itertools
  import math
  from collections import defaultdict
  from hashlib import md5
  from typing import List, Optional, Set
  import attr
  import community
  import networkx
  import numpy
  from pyrdf2vec.graphs import KG, Vertex
  from pyrdf2vec.typings import Entities, EntityWalks, SWalk, Walk
  from pyrdf2vec.walkers import Walker
label_desc: Use image node_id 3 for calling the CommunityWalker obj's underlying member method code with example usage: obj._dfs(kg, entity, is_reverse) and returns: list