class_docstr: Logs epoch-level metrics to a CSV file
  
  :param file: (string) path to csv file
  :param separator: (string) delimiter for file
  :param append: (bool) whether to append result to existing file or make new file
class_docstr_tok: ["Logs","epoch-level","metrics","to","a","CSV","file",":","param","file",":","(","string",")","path","to","csv","file",":","param","separator",":","(","string",")","delimiter","for","file",":","param","append",":","(","bool",")","whether","to","append","result","to","existing","file","or","make","new","file"]
code: def on_train_end(self, logs=None):
      self.csv_file.close()
      self.writer = None
  
file_path: pywick/pywick/callbacks/CSVLogger.py
imports: import csv
  import os
  from collections.abc import Iterable
  from collections import OrderedDict
  import torch
  from .None import Callback
label_desc: Use image node_id 4 for calling the CSVLogger obj's underlying member method code with example usage: obj.on_train_end(logs) without return types