class_docstr: Checker for ast <-> pattern.
  
  NodeVisitor is needed for specific behavior checker.
  
  Attributes
  ----------
  node : AST
      node we want to compare with pattern
  placeholders : [AST]
      list of placeholder value for later comparison or replacement.
class_docstr_tok: ["Checker","for","ast","<","-",">","pattern",".","NodeVisitor","is","needed","for","specific","behavior","checker",".","Attributes","--","--","--","--","--","node",":","AST","node","we","want","to","compare","with","pattern","placeholders",":","[","AST","]","list","of","placeholder","value","for","later","comparison","or","replacement","."]
docstr: Check if two fields match.
  
  Field match if:
      - If it is a list, all values have to match.
      - If if is a node, recursively check it.
      - Otherwise, check values are equal.
docstr_tok: ["Check","if","two","fields","match",".","Field","match","if",":","-","If","it","is","a","list",",","all","values","have","to","match",".","-","If","if","is","a","node",",","recursively","check","it",".","-","Otherwise",",","check","values","are","equal","."]
code: def field_match(self, node_field, pattern_field):
      """
      Check if two fields match.
  
      Field match if:
          - If it is a list, all values have to match.
          - If if is a node, recursively check it.
          - Otherwise, check values are equal.
      """
      if isinstance(pattern_field, list):
          return self.check_list(node_field, pattern_field)
      if isinstance(pattern_field, AST):
          return Check(node_field, self.placeholders).visit(
              pattern_field
          )
  
      return Check.strict_eq(pattern_field, node_field)
  
imports: from gast import AST, iter_fields, NodeVisitor, Dict, Set
  from itertools import permutations
  from math import isnan
label_desc: Use image node_id 8 for calling the Check obj's underlying member method code with example usage: obj.field_match(node_field, pattern_field) and returns: Check, self, Check