code: public <X> DataSource<X> createInput(InputFormat<X, ?> inputFormat) {
  		if (inputFormat == null) {
  			throw new IllegalArgumentException("InputFormat must not be null.");
  		}
  		
  		try {
  			return createInput(inputFormat, TypeExtractor.getInputFormatTypes(inputFormat));
  		}
  		catch (Exception e) {
  			throw new InvalidProgramException("The type returned by the input format could not be automatically determined. " +
  					"Please specify the TypeInformation of the produced type explicitly.");
  		}
  	}
docs: Generic method to create an input DataSet with in {@link InputFormat}. The DataSet will not be
  immediately created - instead, this method returns a DataSet that will be lazily created from
  the input format once the program is executed.
  <p>
  Since all data sets need specific information about their types, this method needs to determine
  the type of the data produced by the input format. It will attempt to determine the data type
  by reflection, unless the the input format implements the {@link ResultTypeQueryable} interface.
  In the latter case, this method will invoke the {@link ResultTypeQueryable#getProducedType()}
  method to determine data type produced by the input format.
  
  @param inputFormat The input format used to create the data set.
  @return A DataSet that represents the data created by the input format.
  
  @see #createInput(InputFormat, TypeInformation)