class_docstr: This is a wrapper class of luigi.Task.
  
  The key methods of a TaskOnKart are:
  
  * :py:meth:`make_target` - this makes output target with a relative file path.
  * :py:meth:`make_model_target` - this makes output target for models which generate multiple files to save.
  * :py:meth:`load` - this loads input files of this task.
  * :py:meth:`dump` - this save a object as output of this task.
class_docstr_tok: ["This","is","a","wrapper","class","of","luigi.Task",".","The","key","methods","of","a","TaskOnKart","are",":","*",":","py",":","meth",":","`","make_target","`","-","this","makes","output","target","with","a","relative","file","path",".","*",":","py",":","meth",":","`","make_model_target","`","-","this","makes","output","target","for","models","which","generate","multiple","files","to","save",".","*",":","py",":","meth",":","`","load","`","-","this","loads","input","files","of","this","task",".","*",":","py",":","meth",":","`","dump","`","-","this","save","a","object","as","output","of","this","task","."]
code: def _check_modification_time(self):
      common_path = set(
          t.path() for t in luigi.task.flatten(self.input())
      ) & set(t.path() for t in luigi.task.flatten(self.output()))
      input_tasks = [
          t
          for t in luigi.task.flatten(self.input())
          if t.path() not in common_path
      ]
      output_tasks = [
          t
          for t in luigi.task.flatten(self.output())
          if t.path() not in common_path
      ]
  
      input_modification_time = (
          max(
              [
                  target.last_modification_time()
                  for target in input_tasks
              ]
          )
          if input_tasks
          else None
      )
      output_modification_time = (
          min(
              [
                  target.last_modification_time()
                  for target in output_tasks
              ]
          )
          if output_tasks
          else None
      )
  
      if (
          input_modification_time is None
          or output_modification_time is None
      ):
          return True
  
      # "=" must be required in the following statements, because some tasks use input targets as output targets.
      return input_modification_time <= output_modification_time
  
imports: import hashlib
  import inspect
  import os
  import types
  from importlib import import_module
  from logging import getLogger
  from typing import Any, Callable, Dict, List, Optional, Set, Union
  import luigi
  import pandas
  from luigi.parameter import ParameterVisibility
  import gokart
  from gokart.file_processor import FileProcessor
  from gokart.pandas_type_config import PandasTypeConfigMap
  from gokart.parameter import ExplicitBoolParameter, ListTaskInstanceParameter, TaskInstanceParameter
  from gokart.redis_lock import make_redis_params
  from gokart.target import TargetOnKart
  from gokart.task_complete_check import task_complete_check_wrapper
label_desc: Use image node_id 8 for calling the TaskOnKart obj's underlying member method code with example usage: obj._check_modification_time() and returns: unknown, True