class_docstr: A class to maintain the state during planarity check.
class_docstr_tok: ["A","class","to","maintain","the","state","during","planarity","check","."]
docstr: Recursive version of :meth:`dfs_orientation`.
docstr_tok: ["Recursive","version","of",":","meth",":","`","dfs_orientation","`","."]
code: def dfs_orientation_recursive(self, v):
      """Recursive version of :meth:`dfs_orientation`."""
      e = self.parent_edge[v]
      for w in self.G[v]:
          if (v, w) in self.DG.edges or (w, v) in self.DG.edges:
              continue  # the edge was already oriented
          vw = (v, w)
          self.DG.add_edge(v, w)  # orient the edge
  
          self.lowpt[vw] = self.height[v]
          self.lowpt2[vw] = self.height[v]
          if self.height[w] is None:  # (v, w) is a tree edge
              self.parent_edge[w] = vw
              self.height[w] = self.height[v] + 1
              self.dfs_orientation_recursive(w)
          else:  # (v, w) is a back edge
              self.lowpt[vw] = self.height[w]
  
          # determine nesting graph
          self.nesting_depth[vw] = 2 * self.lowpt[vw]
          if self.lowpt2[vw] < self.height[v]:  # chordal
              self.nesting_depth[vw] += 1
  
          # update lowpoints of parent edge e
          if e is not None:
              if self.lowpt[vw] < self.lowpt[e]:
                  self.lowpt2[e] = min(self.lowpt[e], self.lowpt2[vw])
                  self.lowpt[e] = self.lowpt[vw]
              elif self.lowpt[vw] > self.lowpt[e]:
                  self.lowpt2[e] = min(self.lowpt2[e], self.lowpt[vw])
              else:
                  self.lowpt2[e] = min(self.lowpt2[e], self.lowpt2[vw])
  
imports: from collections import defaultdict
  import networkx
label_desc: Use image node_id 5 for calling the LRPlanarity obj's underlying member method code with example usage: obj.dfs_orientation_recursive(v) without return types