input: Write a function to generate a BPMN diagram using Python and the bpmn_pgv library for FOMDES process 1. The function should include clusters for Secretaría Ejecutiva, Presidencia, and Presupuesto/Administración, with specific tasks and edges defined within each cluster. Additionally, include nodes for SIGEFOMDES Administración and SISAC, and connect them to the appropriate clusters using dashed edges. Finally, save the diagram as a PNG file named "proc4.png" and a DOT file named "proc4.dot".
  assert generate_bpmn_diagram() == "proc4.png"
  assert generate_bpmn_diagram() == "proc4.dot"
output: 
  def generate_bpmn_diagram():
      import bpmn_pgv as bpmn
      from graphviz import Digraph
  
      g = bpmn.BPMN()
  
      # Secretaría Ejecutiva cluster
      sec_cluster = g.add_cluster(id='sec_cluster', name='Secretaría Ejecutiva')
      sec_start = sec_cluster.add_node(id='sec_start', shape='circle', label='')
      sec_task1 = sec_cluster.add_node(id='sec_task1', shape='box', label='Task 1')
      sec_task2 = sec_cluster.add_node(id='sec_task2', shape='box', label='Task 2')
      sec_end = sec_cluster.add_node(id='sec_end', shape='circle', label='')
      g.add_edge(sec_start, sec_task1)
      g.add_edge(sec_task1, sec_task2)
      g.add_edge(sec_task2, sec_end)
  
      # Presidencia cluster
      pres_cluster = g.add_cluster(id='pres_cluster', name='Presidencia')
      pres_start = pres_cluster.add_node(id='pres_start', shape='circle', label='')
      pres_task1 = pres_cluster.add_node(id='pres_task1', shape='box', label='Task 1')
      pres_task2 = pres_cluster.add_node(id='pres_task2', shape='box', label='Task 2')
      pres_end = pres_cluster.add_node(id='pres_end', shape='circle', label='')
      g.add_edge(pres_start, pres_task1)
      g.add_edge(pres_task1, pres_task2)
      g.add_edge(pres_task2, pres_end)
  
      # Presupuesto/Administración cluster
      admin_cluster = g.add_cluster(id='admin_cluster', name='Presupuesto/Administración')
      admin_start = admin_cluster.add_node(id='admin_start', shape='circle', label='')
      admin_task1 = admin_cluster.add_node(id='admin_task1', shape='box', label='Task 1')
      admin_task2 = admin_cluster.add_node(id='admin_task2', shape='box', label='Task 2')
      admin_end = admin_cluster.add_node(id='admin_end', shape='circle', label='')
      g.add_edge(admin_start, admin_task1)
      g.add_edge(admin_task1, admin_task2)
      g.add_edge(admin_task2, admin_end)
  
      # SIGEFOMDES Administración node
      sigefomdes = g.add_node(id='sigefomdes', shape='box', label='SIGEFOMDES Administración')
      g.add_edge(sigefomdes, sec_task1, style='dashed')
      g.add_edge(sigefomdes, pres_task1, style='dashed')
      g.add_edge(sigefomdes, admin_task1, style='dashed')
  
      # SISAC node
      sisac = g.add_node(id='sisac', shape='box', label='SISAC')
      g.add_edge(sisac, sec_task2, style='dashed')
      g.add_edge(sisac, pres_task2, style='dashed')
      g.add_edge(sisac, admin_task2, style='dashed')
  
      # Save the diagram
      g.draw('proc4.png', format='png')
      g.draw('proc4.dot', format='dot')
  