docs: def get_sync_acl_cmds(self, switch_acls, expected_acls):
          """Returns the list of commands required synchronize switch ACLs
  
          1. Identify unexpected ACLs and delete them
          2. Iterate over expected ACLs
             a. Add missing ACLs + all rules
             b. Delete unexpected rules
             c. Add missing rules
          """
          switch_cmds = list()
  
          # Delete any stale ACLs
          acls_to_delete = (set(switch_acls.keys()) - set(expected_acls.keys()))
          for acl in acls_to_delete:
              switch_cmds.append('no ip access-list %s' % acl)
  
          # Update or create ACLs and rules
          for acl, expected_rules in expected_acls.items():
              switch_rules = switch_acls.get(acl, set())
              rules_to_delete = switch_rules - expected_rules
              rules_to_add = expected_rules - switch_rules
              # Check if ACL requires create or rule changes
              if (acl in switch_acls and
                      len(rules_to_add | rules_to_delete) == 0):
                  continue
              switch_cmds.append('ip access-list %s dynamic' % acl)
              # Delete any stale rules
              for rule in rules_to_delete:
                  switch_cmds.append('no ' + rule)
              # Add any missing rules
              for rule in rules_to_add:
                  switch_cmds.append(rule)
                  switch_cmds.append('exit')
          return switch_cmds