// Path: src/main/java/net/zomis/minesweeper/analyze/detail/DetailedResults.java
// public interface DetailedResults<T> {
// 
// 	Collection<ProbabilityKnowledge<T>> getProxies();
// 
// 	/**
// 	 * Get the number of unique proxies that was required for the calculation. As some can be re-used, this will always be lesser than or equal to <code>getProxyMap().size()</code>
// 	 * 
// 	 * @return The number of unique proxies
// 	 */
// 	int getProxyCount();
// 
// 	/**
// 	 * Get the detailed probabilities for a field
// 	 * 
// 	 * @param field The field to get the information for
// 	 * @return An object containing detailed probability information for the chosen field
// 	 */
// 	ProbabilityKnowledge<T> getProxyFor(T field);
// 
// 	/**
// 	 * Get the underlying analyze that these detailed results was based on
// 	 * 
// 	 * @return {@link AnalyzeResult} object that is the source of this analyze
// 	 */
// 	AnalyzeResult<T> getAnalyze();
// 
// 	/**
// 	 * @return The map of all probability datas
// 	 */
// 	Map<T, ProbabilityKnowledge<T>> getProxyMap();
// 
// }
// 
// Path: src/main/java/net/zomis/minesweeper/analyze/detail/NeighborFind.java
// public interface NeighborFind<T> {
// 	/**
// 	 * Retrieve the neighbors for a specific field.
// 	 * 
// 	 * @param field Field to retrieve the neighbors for
// 	 * 
// 	 * @return A {@link Collection} of the neighbors that the specified field has
// 	 */
// 	Collection<T> getNeighborsFor(T field);
// 	
// 	/**
// 	 * Determine if a field is a found mine or not
// 	 * 
// 	 * @param field Field to check
// 	 * 
// 	 * @return True if the field is a found mine, false otherwise
// 	 */
// 	boolean isFoundAndisMine(T field);
// }


import java.util.List;
import java.util.Random;
import net.zomis.minesweeper.analyze.detail.DetailedResults;
import net.zomis.minesweeper.analyze.detail.NeighborFind;
package net.zomis.minesweeper.analyze;



public interface AnalyzeResult<T> {
	AnalyzeResult<T> cloneAddSolve(List<RuleConstraint<T>> extraRules);
	
	List<T> getFields();
	
	FieldGroup<T> getGroupFor(T field);
	
	List<FieldGroup<T>> getGroups();
	
	List<RuleConstraint<T>> getOriginalRules();
	
	double getProbabilityOf(List<RuleConstraint<T>> extraRules);
	
// Path: src/main/java/net/zomis/minesweeper/analyze/detail/DetailedResults.java
// public interface DetailedResults<T> {
// 
// 	Collection<ProbabilityKnowledge<T>> getProxies();
// 
// 	/**
// 	 * Get the number of unique proxies that was required for the calculation. As some can be re-used, this will always be lesser than or equal to <code>getProxyMap().size()</code>
// 	 * 
// 	 * @return The number of unique proxies
// 	 */
// 	int getProxyCount();
// 
// 	/**
// 	 * Get the detailed probabilities for a field
// 	 * 
// 	 * @param field The field to get the information for
// 	 * @return An object containing detailed probability information for the chosen field
// 	 */
// 	ProbabilityKnowledge<T> getProxyFor(T field);
// 
// 	/**
// 	 * Get the underlying analyze that these detailed results was based on
// 	 * 
// 	 * @return {@link AnalyzeResult} object that is the source of this analyze
// 	 */
// 	AnalyzeResult<T> getAnalyze();
// 
// 	/**
// 	 * @return The map of all probability datas
// 	 */
// 	Map<T, ProbabilityKnowledge<T>> getProxyMap();
// 
// }
// 
// Path: src/main/java/net/zomis/minesweeper/analyze/detail/NeighborFind.java
// public interface NeighborFind<T> {
// 	/**
// 	 * Retrieve the neighbors for a specific field.
// 	 * 
// 	 * @param field Field to retrieve the neighbors for
// 	 * 
// 	 * @return A {@link Collection} of the neighbors that the specified field has
// 	 */
// 	Collection<T> getNeighborsFor(T field);
// 	
// 	/**
// 	 * Determine if a field is a found mine or not
// 	 * 
// 	 * @param field Field to check
// 	 * 
// 	 * @return True if the field is a found mine, false otherwise
// 	 */
// 	boolean isFoundAndisMine(T field);
// }


// Path: src/main/java/net/zomis/minesweeper/analyze/AnalyzeResult.java
import java.util.List;
import java.util.Random;
import net.zomis.minesweeper.analyze.detail.DetailedResults;
import net.zomis.minesweeper.analyze.detail.NeighborFind;

package net.zomis.minesweeper.analyze;



public interface AnalyzeResult<T> {
	AnalyzeResult<T> cloneAddSolve(List<RuleConstraint<T>> extraRules);
	
	List<T> getFields();
	
	FieldGroup<T> getGroupFor(T field);
	
	List<FieldGroup<T>> getGroups();
	
	List<RuleConstraint<T>> getOriginalRules();
	
	double getProbabilityOf(List<RuleConstraint<T>> extraRules);
	
	List<RuleConstraint<T>> getRules();