class_docstr: Initialise a XMLBIFWriter object.
  
  Parameters
  ----------
  model: BayesianNetwork Instance
      Model to write
  
  encoding: str (optional)
      Encoding for text data
  
  prettyprint: Bool(optional)
      Indentation in output XML if true
  
  Examples
  --------
  >>> from pgmpy.readwrite import XMLBIFWriter
  >>> from pgmpy.utils import get_example_model
  >>> model = get_example_model('asia')
  >>> writer = XMLBIFWriter(model)
  >>> writer.write_xmlbif('asia.xml')
  
  Reference
  ---------
  [1] https://www.cs.cmu.edu/afs/cs/user/fgcozman/www/Research/InterchangeFormat/
docstr: Transform the input state_name into a valid state in XMLBIF.
  XMLBIF states must start with a letter an only contain letters,
  numbers and underscores.
docstr_tok: ["Transform","the","input","state_name","into","a","valid","state","in","XMLBIF",".","XMLBIF","states","must","start","with","a","letter","an","only","contain","letters",",","numbers","and","underscores","."]
code: def _make_valid_state_name(self, state_name):
      """Transform the input state_name into a valid state in XMLBIF.
      XMLBIF states must start with a letter an only contain letters,
      numbers and underscores.
      """
      # TODO: Throw a warning that the state names are going to be modified instead of silently modifying it.
      s = str(state_name)
      s_fixed = (
          pp.CharsNotIn(pp.alphanums + "_")
          .setParseAction(pp.replaceWith("_"))
          .transformString(s)
      )
      if not s_fixed[0].isalpha():
          s_fixed = s_fixed
      return s_fixed
  
imports: import xml.etree.ElementTree
  from io import BytesIO
  from itertools import chain
  import numpy
  import pyparsing
  from pgmpy.factors.discrete import State, TabularCPD
  from pgmpy.models import BayesianNetwork
  from pgmpy.utils import compat_fns
label_desc: Use image node_id 6 for calling the XMLBIFWriter obj's underlying member method code with example usage: obj._make_valid_state_name(state_name) and returns: s_fixed