code: def parse_complex_fault_node(node, mfd_spacing=0.1, mesh_spacing=4.0):
      
      assert "complexFaultSource" in node.tag
      sf_taglist = get_taglist(node)
      # Get metadata
      sf_id, name, trt = (node.attrib["id"],
                          node.attrib["name"],
                          node.attrib["tectonicRegion"])
      # Process geometry
      edges = node_to_complex_fault_geometry(
          node.nodes[sf_taglist.index("complexFaultGeometry")])
      # Process scaling relation
      msr = node_to_scalerel(node.nodes[sf_taglist.index("magScaleRel")])
      # Process aspect ratio
      aspect = float_(node.nodes[sf_taglist.index("ruptAspectRatio")].text)
      # Process MFD
      mfd = node_to_mfd(node, sf_taglist)
      # Process rake
      rake = float_(node.nodes[sf_taglist.index("rake")].text)
      complex_fault = mtkComplexFaultSource(sf_id, name, trt,
                                            geometry=None,
                                            mag_scale_rel=msr,
                                            rupt_aspect_ratio=aspect,
                                            mfd=mfd,
                                            rake=rake)
      complex_fault.create_geometry(edges, mesh_spacing)
      return complex_fault
docs: Parses a "complexFaultSource" node and returns an instance of the :class:
      openquake.hmtk.sources.complex_fault.mtkComplexFaultSource