code: def discover():
          
  
          # Try ../data: we're most likely running a Jupyter notebook from the 'notebooks' directory
          candidate_path = os.path.abspath(os.path.join(os.curdir, os.pardir, 'data'))
          if os.path.exists(candidate_path):
              return Project(os.path.abspath(os.path.join(candidate_path, os.pardir)))
  
          # Try ./data
          candidate_path = os.path.abspath(os.path.join(os.curdir, 'data'))
          if os.path.exists(candidate_path):
              return Project(os.path.abspath(os.curdir))
  
          # Try ../../data
          candidate_path = os.path.abspath(os.path.join(os.curdir, os.pardir, 'data'))
          if os.path.exists(candidate_path):
              return Project(os.path.abspath(os.path.join(candidate_path, os.pardir, os.pardir)))
  
          # Out of ideas at this point.
          raise ValueError('Cannot discover the structure of the project. Make sure that the data directory exists')
docs: Automatically discover the paths to various data folders in this project
          and compose a Project instance.
  
          Returns:
              A constructed Project object.
  
          Raises:
              ValueError: if the paths could not be figured out automatically.
                  In this case, you have to create a Project manually using the initializer.