def calculate_step_or_functional_element_assignment(child_assignments: list, sufficient_scheme=False):
    """
    Assigns a step result or functional element result based of the assignments of its children. In the case of steps,
    this would be functional element assignments. In the case of functional elements this would be evidences.

    For assignments from child genome properties YES or PARTIAL is considered YES.

    See: https://github.com/ebi-pf-team/genome-properties/blob/
    a76a5c0284f6c38cb8f43676618cf74f64634d33/code/modules/GenomeProperties.pm#L686

    if($evObj->gp){
        if(defined($self->get_defs->{ $evObj->gp })){
          # For properties a PARTIAL or YES result is considered success
          if( $self->get_defs->{ $evObj->gp }->result eq 'YES' or
              $self->get_defs->{ $evObj->gp }->result eq 'PARTIAL' ){
              $succeed++;
           }elsif($self->get_defs->{ $evObj->gp }->result eq 'UNTESTED'){
              $step->evaluated(0);

    :param sufficient_scheme: If false, any child NOs mean NO. If true, any child YES/PARTIAL means YES
    :param child_assignments: A list containing strings of YES, NO or PARTIAL
    :return: The assignment as either YES or NO.
    """
    no_count = child_assignments.count('NO')

    # Given a list of sufficient evidences, any could be PARTIAL or YES and the result would be YES.
    if sufficient_scheme:
        if no_count < len(child_assignments):
            result = 'YES'
        else:
            result = 'NO'
    # Given a list of non-sufficient evidences, all evidences have to be YES or PARTIAL or the result would be NO.
    else:
        if no_count == 0:
            result = 'YES'
        else:
            result = 'NO'

    return result