def _non_executed_cells_count(cell_list):
    """The function takes a list of cells and returns the number of non-executed cells

        Args:
            cell_list(list): list of dictionary objects representing the notebook cells
        Returns:
            non_exec_cells: number of non-executed cells in the list
        
        The function is used in:
        - count_non-executed_cells(nb)
        - count_bottom_non-executed_cells(nb, bottom_size=4)
    """
    non_exec_cells = 0
    for cell in cell_list:
        if cell["cell_type"] == 'code':
            if cell['execution_count'] is None and cell['source'] != []:
                non_exec_cells = non_exec_cells + 1  # This is a not executed Python Cell containing actual code
    return non_exec_cells