text: #!/usr/bin/env python3
  # -*- coding: utf-8 -*-
  # */AIPND-revision/intropyproject-classify-pet-images/print_results_hints.py
  #                                                                             
  # PROGRAMMER: Parigyan Tamuly
  # DATE CREATED: 22/03/2019
  # REVISED DATE: 
  # PURPOSE: This is a *hints* file to help guide students in creating the 
  #          function print_results that prints the results statistics from the
  #          results statistics dictionary (results_stats_dic). It should also
  #          allow the user to be able to print out cases of misclassified
  #          dogs and cases of misclassified breeds of dog using the Results 
  #          dictionary (results_dic).  
  #         This function inputs:
  #            -The results dictionary as results_dic within print_results 
  #             function and results for the function call within main.
  #            -The results statistics dictionary as results_stats_dic within 
  #             print_results function and results_stats for the function call within main.
  #            -The CNN model architecture as model wihtin print_results function
  #             and in_arg.arch for the function call within main. 
  #            -Prints Incorrectly Classified Dogs as print_incorrect_dogs within
  #             print_results function and set as either boolean value True or 
  #             False in the function call within main (defaults to False)
  #            -Prints Incorrectly Classified Breeds as print_incorrect_breed within
  #             print_results function and set as either boolean value True or 
  #             False in the function call within main (defaults to False)
  #         This function does not output anything other than printing a summary
  #         of the final results.
  ##
  # TODO 6: EDIT and ADD code BELOW to do the following that's stated in the 
  #       comments below that start with "TODO: 6" for the print_results function.
  #       Specifically edit and add code below within the the print_results function. 
  #       Notice that this function doesn't return anything because it prints 
  #       a summary of the results using results_dic and results_stats_dic
  # 
  def print_results(results_dic, results_stats_dic, model, 
                    print_incorrect_dogs = False, print_incorrect_breed = False):
      """
      Prints summary results on the classification and then prints incorrectly 
      classified dogs and incorrectly classified dog breeds if user indicates 
      they want those printouts (use non-default values)
      Parameters:
        results_dic - Dictionary with key as image filename and value as a List 
               (index)idx 0 = pet image label (string)
                      idx 1 = classifier label (string)
                      idx 2 = 1/0 (int)  where 1 = match between pet image and 
                              classifer labels and 0 = no match between labels
                      idx 3 = 1/0 (int)  where 1 = pet image 'is-a' dog and 
                              0 = pet Image 'is-NOT-a' dog. 
                      idx 4 = 1/0 (int)  where 1 = Classifier classifies image 
                              'as-a' dog and 0 = Classifier classifies image  
                              'as-NOT-a' dog.
        results_stats_dic - Dictionary that contains the results statistics (either
                     a  percentage or a count) where the key is the statistic's 
                       name (starting with 'pct' for percentage or 'n' for count)
                       and the value is the statistic's value 
        model - Indicates which CNN model architecture will be used by the 
                classifier function to classify the pet images,
                values must be either: resnet alexnet vgg (string)
        print_incorrect_dogs - True prints incorrectly classified dog images and 
                               False doesn't print anything(default) (bool)  
        print_incorrect_breed - True prints incorrectly classified dog breeds and 
                                False doesn't print anything(default) (bool) 
      Returns:
             None - simply printing results.
      """   
      # Prints summary statistics over the run
      print("\n\n*** Results Summary for CNN Model Architecture",model.upper(), 
            "***")
      print("{:20}: {:3d}".format('N Images', results_stats_dic['n_images']))
      print("{:20}: {:3d}".format('N Dog Images', results_stats_dic['n_dogs_img']))
  
      # TODO: 6a. REPLACE print("") with CODE that prints the text string 
      #          'N Not-Dog Images' and then the number of NOT-dog images 
      #          that's accessed by key 'n_notdogs_img' using dictionary 
      #          results_stats_dic
      #
      print("")
  
  
      # Prints summary statistics (percentages) on Model Run
      print(" ")
      for key in results_stats_dic:
          # TODO: 6b. REPLACE pass with CODE that prints out all the percentages 
          #           in the results_stats_dic dictionary. Recall that all 
          #           percentages in results_stats_dic have 'keys' that start with 
          #           the letter p. You will need to write a conditional 
          #           statement that determines if the key starts with the letter
          #           'p' and then you want to use a print statement to print 
          #           both the key and the value. Remember the value is accessed 
          #           by results_stats_dic[key]
          #
          pass 
  
  
      # IF print_incorrect_dogs == True AND there were images incorrectly 
      # classified as dogs or vice versa - print out these cases
      if (print_incorrect_dogs and 
          ( (results_stats_dic['n_correct_dogs'] + results_stats_dic['n_correct_notdogs'])
            != results_stats_dic['n_images'] ) 
         ):
          print("\nINCORRECT Dog/NOT Dog Assignments:")
  
          # process through results dict, printing incorrectly classified dogs
          for key in results_dic:
  
              # TODO: 6c. REPLACE pass with CODE that prints out the pet label 
              #           and the classifier label from results_dic dictionary    
              #           ONLY when the classifier function (classifier label) 
              #           misclassified dogs specifically: 
              #             pet label is-a-dog and classifier label is-NOT-a-dog 
              #               -OR- 
              #             pet label is-NOT-a-dog and classifier label is-a-dog 
              #          You will need to write a conditional statement that 
              #          determines if the classifier function misclassified dogs
              #          See 'Adjusting Results Dictionary' section in 
              #         'Classifying Labels as Dogs' for details on the 
              #          format of the results_dic dictionary. Remember the value
              #          is accessed by results_dic[key] and the value is a list
              #          so results_dic[key][idx] - where idx represents the 
              #          index value of the list and can have values 0-4.
              #
              # Pet Image Label is a Dog - Classified as NOT-A-DOG -OR- 
              # Pet Image Label is NOT-a-Dog - Classified as a-DOG
              pass
  
      # IF print_incorrect_breed == True AND there were dogs whose breeds 
      # were incorrectly classified - print out these cases                    
      if (print_incorrect_breed and 
          (results_stats_dic['n_correct_dogs'] != results_stats_dic['n_correct_breed']) 
         ):
          print("\nINCORRECT Dog Breed Assignment:")
  
          # process through results dict, printing incorrectly classified breeds
          for key in results_dic:
  
              # Pet Image Label is-a-Dog, classified as-a-dog but is WRONG breed
              if ( sum(results_dic[key][3:]) == 2 and
                  results_dic[key][2] == 0 ):
                  print("Real: {:>26}   Classifier: {:>30}".format(results_dic[key][0],
                                                            results_dic[key][1]))
  