From d9e6dfc90b39de4157950ab678c786dfa8da32c0 Mon Sep 17 00:00:00 2001
From: Jeffrey Phillips Freeman <jeffrey.freeman@syncleus.com>
Date: Wed, 12 Dec 2012 01:32:45 -0500
Subject: [PATCH] cleaned up most of the interfaces int eh graph package

---
 pom.xml                                       | 10 ++---
 .../AbstractBidirectedAdjacencyGraph.java     | 38 ++++++++++++-------
 .../syncleus/dann/graph/AbstractCloud.java    |  2 +-
 .../graph/AbstractDirectedAdjacencyGraph.java | 14 ++++---
 .../graph/AbstractMixableBidirectedEdge.java  | 12 +++---
 .../dann/graph/AbstractMixableEdge.java       |  4 +-
 .../graph/AbstractMutableAdjacencyGraph.java  | 18 +++++++--
 .../graph/AbstractTraversableCloudGraph.java  |  8 ++--
 .../graph/AbstractWeightedBidirectedEdge.java |  9 +++--
 .../syncleus/dann/graph/BidirectedGraph.java  |  2 +-
 .../com/syncleus/dann/graph/CloudGraph.java   |  4 +-
 .../syncleus/dann/graph/JoinableCloud.java    |  2 +-
 .../dann/graph/JoinableCloudGraph.java        |  2 +-
 .../com/syncleus/dann/graph/MutableCloud.java |  2 +-
 .../dann/graph/MutableCloudGraph.java         |  2 +-
 .../event/context/ContextCloudElement.java    |  2 +-
 .../event/context/ContextEdgeElement.java     |  2 +-
 .../graph/event/context/ContextGraphEdge.java |  4 +-
 .../event/context/ContextGraphElement.java    |  4 +-
 .../graph/event/context/ContextGraphNode.java |  4 +-
 .../dann/neural/AbstractLocalBrain.java       |  6 +--
 .../SimpleUndirectedGraph.java                |  4 +-
 .../dann/graph/search/DirectedGrid.java       |  4 +-
 .../com/syncleus/dann/graph/search/Grid.java  |  4 +-
 .../graph/search/WeightedDirectedGrid.java    |  4 +-
 25 files changed, 97 insertions(+), 70 deletions(-)

diff --git a/pom.xml b/pom.xml
index 79fcd938..764b38a1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -33,13 +33,13 @@
 				<groupId>org.jvnet.jaxb2.maven2</groupId>
 				<artifactId>maven-jaxb2-plugin</artifactId>
 				<version>0.7.4</version>
-				<executions>
+				<!--executions>
 					<execution>
 						<goals>
 							<goal>generate</goal>
 						</goals>
 					</execution>
-				</executions>
+				</executions-->
 				<configuration>
 					<extension>true</extension>
 					<args>
@@ -126,17 +126,17 @@
 	</dependencies>
 
 	<repositories>
-		<repository>
+		<!--repository>
 			<id>snapshots</id>
 			<name>Syncleus Maven Snapshot Respository</name>
-			<url>http://ezekiel2.syncleus.com:8080/archiva/repository/snapshots/</url>
+			<url>http://ezekiel2.syncleus.com:8080/archiva/repository/snapshots</url>
 			<releases>
 				<enabled>true</enabled>
 			</releases>
 			<snapshots>
 				<enabled>true</enabled>
 			</snapshots>
-		</repository>
+		</repository-->
 
 		<repository>
 			<id>freehep-maven</id>
diff --git a/src/main/java/com/syncleus/dann/graph/AbstractBidirectedAdjacencyGraph.java b/src/main/java/com/syncleus/dann/graph/AbstractBidirectedAdjacencyGraph.java
index 14a5e865..080228f3 100644
--- a/src/main/java/com/syncleus/dann/graph/AbstractBidirectedAdjacencyGraph.java
+++ b/src/main/java/com/syncleus/dann/graph/AbstractBidirectedAdjacencyGraph.java
@@ -24,42 +24,52 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 
-public abstract class AbstractBidirectedAdjacencyGraph<N, E extends BidirectedEdge<N>> extends AbstractCloudGraph<N, E> implements BidirectedGraph<N, E>
+public abstract class AbstractBidirectedAdjacencyGraph<
+        NE extends BidirectedGraph.NodeEndpoint<?>,
+        EE extends BidirectedGraph.EdgeEndpoint<?>
+        > extends AbstractCloudGraph<NE, EE> implements BidirectedGraph<NE, EE>
 {
+/*
 	protected AbstractBidirectedAdjacencyGraph()
 	{
 		super();
 	}
 
-	protected AbstractBidirectedAdjacencyGraph(final CloudGraph<N, E> copyGraph)
+	protected AbstractBidirectedAdjacencyGraph(final CloudGraph<NE, EE> copyGraph)
 	{
 		super(copyGraph.getTargets(), copyGraph.getEdges());
 	}
 
-	protected AbstractBidirectedAdjacencyGraph(final Set<N> nodes, final Set<E> edges)
+	protected AbstractBidirectedAdjacencyGraph(final Set<NE> nodes, final Set<EE> edges)
 	{
 		super(nodes, edges);
 	}
-
+*/
+/*
 	@Override
-	public Set<E> getInEdges(final N node)
+	public Set<EE> getInEdges(final NE nodeEndpoint)
 	{
-		final Set<E> inEdges = new HashSet<E>();
-		for(final E edge : this.getEdges())
+		final Set<EE> inEdges = new HashSet<EE>();
+		for(final EE edgeEndpoint : this.getEdgeEndpoints())
 		{
-			final List<N> adjacentNodes = new ArrayList<N>(edge.getTargets());
-			adjacentNodes.remove(node);
-			final N adjacentNode = adjacentNodes.get(0);
+            if( edgeEndpoint.isTraversableTo(nodeEndpoint) )
+                inEdges.add(edgeEndpoint);
+
+//			final List<BidirectedEdge<?>> adjacentNodes = Collections.<BidirectedEdge<?>>singletonList(edgeEndpoint.getTarget());
+//			adjacentNodes.remove(nodeEndpoint);
+//			final NE adjacentNode = adjacentNodes.get(0);
+
+//			if( edgeEndpoint.isTraversable(adjacentNode) && edgeEndpoint.getTraversableNodes(adjacentNode).contains(nodeEndpoint) )
+//				inEdges.add(edgeEndpoint);
 
-			if( edge.isTraversable(adjacentNode) && edge.getTraversableNodes(adjacentNode).contains(node) )
-				inEdges.add(edge);
 		}
 		return Collections.unmodifiableSet(inEdges);
 	}
+*/
 
 	@Override
-	protected AbstractBidirectedAdjacencyGraph<N, E> clone()
+	protected AbstractBidirectedAdjacencyGraph<NE, EE> clone()
 	{
-		return (AbstractBidirectedAdjacencyGraph<N, E>) super.clone();
+		return (AbstractBidirectedAdjacencyGraph<NE, EE>) super.clone();
 	}
 }
diff --git a/src/main/java/com/syncleus/dann/graph/AbstractCloud.java b/src/main/java/com/syncleus/dann/graph/AbstractCloud.java
index e0c2d9e3..5ca12003 100644
--- a/src/main/java/com/syncleus/dann/graph/AbstractCloud.java
+++ b/src/main/java/com/syncleus/dann/graph/AbstractCloud.java
@@ -363,7 +363,7 @@ public abstract class AbstractCloud<
 			return this.target;
 		}
 
-		protected void setTarget(final T target)
+		protected void setTarget(final T target) throws InvalidGraphException
 		{
 			this.target = target;
 		}
diff --git a/src/main/java/com/syncleus/dann/graph/AbstractDirectedAdjacencyGraph.java b/src/main/java/com/syncleus/dann/graph/AbstractDirectedAdjacencyGraph.java
index c1c160e6..84a7bcfa 100644
--- a/src/main/java/com/syncleus/dann/graph/AbstractDirectedAdjacencyGraph.java
+++ b/src/main/java/com/syncleus/dann/graph/AbstractDirectedAdjacencyGraph.java
@@ -20,13 +20,16 @@ package com.syncleus.dann.graph;
 
 import java.util.Set;
 
-public abstract class AbstractDirectedAdjacencyGraph<N, E extends DirectedEdge<N>> extends AbstractBidirectedAdjacencyGraph<N, E> implements DirectedGraph<N, E>
+public abstract class AbstractDirectedAdjacencyGraph<
+        NE extends DirectedGraph.NodeEndpoint<?>,
+        EE extends DirectedGraph.EdgeEndpoint<?>
+        > extends AbstractBidirectedAdjacencyGraph<NE, EE> implements DirectedGraph<NE, EE>
 {
 	protected AbstractDirectedAdjacencyGraph()
 	{
 		super();
 	}
-
+/*
 	protected AbstractDirectedAdjacencyGraph(final CloudGraph<N, E> copyGraph)
 	{
 		super(copyGraph.getTargets(), copyGraph.getEdges());
@@ -35,11 +38,12 @@ public abstract class AbstractDirectedAdjacencyGraph<N, E extends DirectedEdge<N
 	protected AbstractDirectedAdjacencyGraph(final Set<N> nodes, final Set<E> edges)
 	{
 		super(nodes, edges);
-	}
+	}                          \
+*/
 
 	@Override
-	protected AbstractDirectedAdjacencyGraph<N, E> clone()
+	protected AbstractDirectedAdjacencyGraph<NE, EE> clone()
 	{
-		return (AbstractDirectedAdjacencyGraph<N, E>) super.clone();
+		return (AbstractDirectedAdjacencyGraph<NE, EE>) super.clone();
 	}
 }
diff --git a/src/main/java/com/syncleus/dann/graph/AbstractMixableBidirectedEdge.java b/src/main/java/com/syncleus/dann/graph/AbstractMixableBidirectedEdge.java
index 3e536b35..9b31823e 100644
--- a/src/main/java/com/syncleus/dann/graph/AbstractMixableBidirectedEdge.java
+++ b/src/main/java/com/syncleus/dann/graph/AbstractMixableBidirectedEdge.java
@@ -78,7 +78,7 @@ public abstract class AbstractMixableBidirectedEdge<
 	}
 
 	@Override
-	public Set<E> getTraversableFrom(TraversableCloud.Endpoint<?> source)
+	public Set<E> getTraversableFrom(Cloud.Endpoint<?> source)
 	{
 		final Set<E> traversableEndpoints = new HashSet<E>();
 		for( final E toEndpoint : getNeighbors(source))
@@ -89,7 +89,7 @@ public abstract class AbstractMixableBidirectedEdge<
 	}
 
 	@Override
-	public Set<E> getTraversableTo(TraversableCloud.Endpoint<?> destination)
+	public Set<E> getTraversableTo(Cloud.Endpoint<?> destination)
 	{
 		final Set<E> traversableEndpoints = new HashSet<E>();
 		for( final E fromEndpoint : getNeighbors(destination) )
@@ -100,13 +100,13 @@ public abstract class AbstractMixableBidirectedEdge<
 	}
 
 	@Override
-	public boolean isTraversableFrom(TraversableCloud.Endpoint<?> source)
+	public boolean isTraversableFrom(Cloud.Endpoint<?> source)
 	{
 		return !this.getTraversableFrom(source).isEmpty();
 	}
 
 	@Override
-	public boolean isTraversableTo(TraversableCloud.Endpoint<?> destination)
+	public boolean isTraversableTo(Cloud.Endpoint<?> destination)
 	{
 		return !this.getTraversableTo(destination).isEmpty();
 	}
@@ -241,13 +241,13 @@ public abstract class AbstractMixableBidirectedEdge<
 		}
 
 		@Override
-		public boolean isTraversableFrom(TraversableCloud.Endpoint<?> target)
+		public boolean isTraversableFrom(Cloud.Endpoint<?> target)
 		{
 			return isTraversable(target, this);
 		}
 
 		@Override
-		public boolean isTraversableTo(TraversableCloud.Endpoint<?> target)
+		public boolean isTraversableTo(Cloud.Endpoint<?> target)
 		{
 			return isTraversable(this, target);
 		}
diff --git a/src/main/java/com/syncleus/dann/graph/AbstractMixableEdge.java b/src/main/java/com/syncleus/dann/graph/AbstractMixableEdge.java
index 6402977b..eaf3504f 100644
--- a/src/main/java/com/syncleus/dann/graph/AbstractMixableEdge.java
+++ b/src/main/java/com/syncleus/dann/graph/AbstractMixableEdge.java
@@ -36,9 +36,9 @@ public abstract class AbstractMixableEdge<
 	public Set<E> getNeighbors(Endpoint<?> endpoint)
 	{
 		if(this.getLeftEndpoint().equals(endpoint))
-			return Collections.singleton(this.getRightEndpoint());
+			return Collections.<E>singleton(this.getRightEndpoint());
 		else if(this.getRightEndpoint().equals(endpoint))
-			return Collections.singleton(this.getLeftEndpoint());
+			return Collections.<E>singleton(this.getLeftEndpoint());
 		else
 			return Collections.emptySet();
 	}
diff --git a/src/main/java/com/syncleus/dann/graph/AbstractMutableAdjacencyGraph.java b/src/main/java/com/syncleus/dann/graph/AbstractMutableAdjacencyGraph.java
index 0dd21a34..b841dd1d 100644
--- a/src/main/java/com/syncleus/dann/graph/AbstractMutableAdjacencyGraph.java
+++ b/src/main/java/com/syncleus/dann/graph/AbstractMutableAdjacencyGraph.java
@@ -24,7 +24,7 @@ import com.syncleus.dann.graph.adjacency.HashAdjacencyMapping;
 
 public abstract class AbstractMutableAdjacencyGraph<
 	  	N,
-	  	NE extends MutableCloudGraph.NodeEndpoint<N>,
+	  	NE extends MutableCloudGraph.NodeEndpoint<? super N>,
 	  	E extends Cloud<? extends Cloud.Endpoint<? extends N>>,
 	  	EE extends MutableCloudGraph.EdgeEndpoint<E>
 	  >
@@ -89,7 +89,19 @@ public abstract class AbstractMutableAdjacencyGraph<
 		this.adjacency.removeRightKey(endpoint);
 	}
 
-	@Override
+    protected void internalAssignEdge(Cloud.Endpoint<?> endpoint, N newTarget) throws InvalidGraphException
+    {
+        if(endpoint == null)
+            throw new IllegalArgumentException(("endpoint can not be null"));
+        else if( !this.adjacency.getRightKeys().contains(endpoint) )
+            throw new IllegalArgumentException("endpoint is not an endpoint in this graph");
+
+        this.adjacency.
+
+        this.adjacency.removeRightKey(endpoint);
+    }
+
+//	@Override
 	protected Set<EE> getAdjacentEdgeEndpoints(Cloud.Endpoint<?> nodeEndpoint)
 	{
 		if( !this.adjacency.getLeftKeys().contains(nodeEndpoint) )
@@ -242,7 +254,7 @@ public abstract class AbstractMutableAdjacencyGraph<
 	}
 
 
-	protected abstract class AbstractNodeEndpoint extends AbstractCloudGraph<NE,EE>.AbstractNodeEndpoint implements MutableCloudGraph.NodeEndpoint<N>
+	protected abstract class AbstractNodeEndpoint<N> extends AbstractCloudGraph<NE,EE>.AbstractNodeEndpoint<N> implements MutableCloudGraph.NodeEndpoint<N>
 	{
 		private N target;
 
diff --git a/src/main/java/com/syncleus/dann/graph/AbstractTraversableCloudGraph.java b/src/main/java/com/syncleus/dann/graph/AbstractTraversableCloudGraph.java
index 331afb5b..52f40fc9 100644
--- a/src/main/java/com/syncleus/dann/graph/AbstractTraversableCloudGraph.java
+++ b/src/main/java/com/syncleus/dann/graph/AbstractTraversableCloudGraph.java
@@ -23,9 +23,9 @@ import java.util.Set;
 import com.syncleus.dann.graph.search.pathfinding.*;
 
 public abstract class AbstractTraversableCloudGraph<
-	  	NE extends TraversableCloudGraph.NodeEndpoint<?>,
-	  	EE extends TraversableCloudGraph.EdgeEndpoint<? extends Cloud<?>>
-	  > extends AbstractCloudGraph<NE,EE> implements TraversableCloudGraph<NE, EE>
+        NE extends TraversableCloudGraph.NodeEndpoint<?>,
+        EE extends TraversableCloudGraph.EdgeEndpoint<? extends Cloud<?>>
+        > extends AbstractCloudGraph<NE,EE> implements TraversableCloudGraph<NE, EE>
 {
 	private final CloudTraverser<? super Cloud<?>> traverser;
 
@@ -55,7 +55,7 @@ public abstract class AbstractTraversableCloudGraph<
 		final WalkFinder<?> pathFinder = this.getWalkFinder();
 
 		final Set<NE> traversables = new HashSet<NE>();
-		for(N neighbor : this.getNodes())
+		for(NE neighbor : this.getNodes())
 			if( this.isTraversable(source,neighbor,pathFinder) )
 				traversables.add(neighbor);
 		return Collections.unmodifiableSet(traversables);
diff --git a/src/main/java/com/syncleus/dann/graph/AbstractWeightedBidirectedEdge.java b/src/main/java/com/syncleus/dann/graph/AbstractWeightedBidirectedEdge.java
index 604767c0..b1b645e7 100644
--- a/src/main/java/com/syncleus/dann/graph/AbstractWeightedBidirectedEdge.java
+++ b/src/main/java/com/syncleus/dann/graph/AbstractWeightedBidirectedEdge.java
@@ -18,7 +18,7 @@
  ******************************************************************************/
 package com.syncleus.dann.graph;
 
-public abstract class AbstractWeightedBidirectedEdge<N, LN extends N, RN extends N> extends AbstractBidirectedEdge<N, LN,RN> implements WeightedMixableBidirectedEdge<LN,RN,N>
+public abstract class AbstractWeightedBidirectedEdge<E extends BidirectedEdge.Endpoint<?>> extends AbstractBidirectedEdge<E> implements Weighted
 {
 	private final double weight;
 
@@ -27,7 +27,7 @@ public abstract class AbstractWeightedBidirectedEdge<N, LN extends N, RN extends
 		super();
 		this.weight = weight;
 	}
-
+/*
 	protected AbstractWeightedBidirectedEdge(final double weight, final boolean allowJoiningMultipleGraphs, final boolean contextEnabled)
 	{
 		super(allowJoiningMultipleGraphs, contextEnabled);
@@ -47,6 +47,7 @@ public abstract class AbstractWeightedBidirectedEdge<N, LN extends N, RN extends
 
 		this.weight = ourWeight;
 	}
+*/
 
 	@Override
 	public double getWeight()
@@ -55,8 +56,8 @@ public abstract class AbstractWeightedBidirectedEdge<N, LN extends N, RN extends
 	}
 
 	@Override
-	protected AbstractWeightedBidirectedEdge<N, LN,RN> clone()
+	protected AbstractWeightedBidirectedEdge<E> clone()
 	{
-		return (AbstractWeightedBidirectedEdge<N, LN,RN>) super.clone();
+		return (AbstractWeightedBidirectedEdge<E>) super.clone();
 	}
 }
diff --git a/src/main/java/com/syncleus/dann/graph/BidirectedGraph.java b/src/main/java/com/syncleus/dann/graph/BidirectedGraph.java
index e7365cbd..9e357394 100644
--- a/src/main/java/com/syncleus/dann/graph/BidirectedGraph.java
+++ b/src/main/java/com/syncleus/dann/graph/BidirectedGraph.java
@@ -36,7 +36,7 @@ import java.util.Set;
 public interface BidirectedGraph<
 	  	NE extends BidirectedGraph.NodeEndpoint<?>,
 	  	EE extends BidirectedGraph.EdgeEndpoint<?>
-	  > extends TraversableGraph<NE, EE>, BidirectedCloud<NE>
+	  > extends TraversableGraph<NE, EE>
 {
 	interface Endpoint<
 		  	T
diff --git a/src/main/java/com/syncleus/dann/graph/CloudGraph.java b/src/main/java/com/syncleus/dann/graph/CloudGraph.java
index b73649fd..e5610886 100644
--- a/src/main/java/com/syncleus/dann/graph/CloudGraph.java
+++ b/src/main/java/com/syncleus/dann/graph/CloudGraph.java
@@ -31,8 +31,8 @@ import java.util.Set;
  *
  * @author Jeffrey Phillips Freeman
  * @since 2.0
- * @param <N> The node type
- * @param <E> The type of edge for the given node type
+ * @param <NE> The node type
+ * @param <EE> The type of edge for the given node type
  */
 public interface CloudGraph<
 	  	NE extends CloudGraph.NodeEndpoint<?>,
diff --git a/src/main/java/com/syncleus/dann/graph/JoinableCloud.java b/src/main/java/com/syncleus/dann/graph/JoinableCloud.java
index 3b4113b2..b66f6494 100644
--- a/src/main/java/com/syncleus/dann/graph/JoinableCloud.java
+++ b/src/main/java/com/syncleus/dann/graph/JoinableCloud.java
@@ -23,7 +23,7 @@ import java.util.Set;
 
 public interface JoinableCloud<
 	  	T,
-	  	E extends JoinableCloud.Endpoint<T>
+	  	E extends JoinableCloud.Endpoint<? super T>
 	  > extends Cloud<E>
 {
 	interface Endpoint<T> extends Cloud.Endpoint<T>
diff --git a/src/main/java/com/syncleus/dann/graph/JoinableCloudGraph.java b/src/main/java/com/syncleus/dann/graph/JoinableCloudGraph.java
index 8e4d0091..31a9f09c 100644
--- a/src/main/java/com/syncleus/dann/graph/JoinableCloudGraph.java
+++ b/src/main/java/com/syncleus/dann/graph/JoinableCloudGraph.java
@@ -23,7 +23,7 @@ import java.util.Set;
 
 public interface JoinableCloudGraph<
 	  	N,
-	  	NE extends JoinableCloudGraph.NodeEndpoint<N>,
+	  	NE extends JoinableCloudGraph.NodeEndpoint<? super N>,
 	  	E extends Cloud<? extends Cloud.Endpoint<? extends N>>,
 	  	EE extends JoinableCloudGraph.EdgeEndpoint<E>
 	  >  extends CloudGraph<NE,EE>, JoinableCloud<N,NE>
diff --git a/src/main/java/com/syncleus/dann/graph/MutableCloud.java b/src/main/java/com/syncleus/dann/graph/MutableCloud.java
index 7943aafb..517c5280 100644
--- a/src/main/java/com/syncleus/dann/graph/MutableCloud.java
+++ b/src/main/java/com/syncleus/dann/graph/MutableCloud.java
@@ -20,7 +20,7 @@ package com.syncleus.dann.graph;
 
 public interface MutableCloud<
 	  	T,
-	  	E extends MutableCloud.Endpoint<T>
+	  	E extends MutableCloud.Endpoint<? super T>
 	  > extends AssignableCloud<E>, JoinableCloud<T,E>, PartibleCloud<E>
 {
 	interface Endpoint<T> extends AssignableCloud.Endpoint<T>, JoinableCloud.Endpoint<T>, PartibleCloud.Endpoint<T>
diff --git a/src/main/java/com/syncleus/dann/graph/MutableCloudGraph.java b/src/main/java/com/syncleus/dann/graph/MutableCloudGraph.java
index be5cfaad..daf4a269 100644
--- a/src/main/java/com/syncleus/dann/graph/MutableCloudGraph.java
+++ b/src/main/java/com/syncleus/dann/graph/MutableCloudGraph.java
@@ -23,7 +23,7 @@ import java.util.Set;
 
 public interface MutableCloudGraph<
 	  	N,
-	  	NE extends MutableCloudGraph.NodeEndpoint<N>,
+	  	NE extends MutableCloudGraph.NodeEndpoint<? super N>,
 	  	E extends Cloud<? extends Cloud.Endpoint<? extends N>>,
 	  	EE extends MutableCloudGraph.EdgeEndpoint<E>
 	  >  extends JoinableCloudGraph<N,NE,E,EE>, PartibleCloudGraph<NE,EE>, AssignableCloudGraph<NE,EE>, MutableCloud<N,NE>
diff --git a/src/main/java/com/syncleus/dann/graph/event/context/ContextCloudElement.java b/src/main/java/com/syncleus/dann/graph/event/context/ContextCloudElement.java
index 87ecafc9..121bc0e3 100644
--- a/src/main/java/com/syncleus/dann/graph/event/context/ContextCloudElement.java
+++ b/src/main/java/com/syncleus/dann/graph/event/context/ContextCloudElement.java
@@ -23,7 +23,7 @@ import com.syncleus.dann.graph.Cloud;
 
 public interface ContextCloudElement<
 		  CE extends Cloud.Endpoint<?>,
-		  C extends Cloud<?, ? extends CE>
+		  C extends Cloud<? extends CE>
 	  >
 {
 	void changingCloudContext(Set<? extends C> joiningContexts, Set<?> leavingContexts) throws RejectedContextException;
diff --git a/src/main/java/com/syncleus/dann/graph/event/context/ContextEdgeElement.java b/src/main/java/com/syncleus/dann/graph/event/context/ContextEdgeElement.java
index f9a843d8..89d24266 100644
--- a/src/main/java/com/syncleus/dann/graph/event/context/ContextEdgeElement.java
+++ b/src/main/java/com/syncleus/dann/graph/event/context/ContextEdgeElement.java
@@ -23,7 +23,7 @@ import com.syncleus.dann.graph.*;
 
 public interface ContextEdgeElement<
 	  	EE extends Edge.Endpoint<?>,
-	  	E extends Edge<?, ? extends EE>
+	  	E extends Edge<? extends EE>
 	  >
 {
 	void changingEdgeContext( Set<? extends E> joiningContexts, Set<?> leavingContexts) throws RejectedContextException;
diff --git a/src/main/java/com/syncleus/dann/graph/event/context/ContextGraphEdge.java b/src/main/java/com/syncleus/dann/graph/event/context/ContextGraphEdge.java
index 99bdf4e6..92af1248 100644
--- a/src/main/java/com/syncleus/dann/graph/event/context/ContextGraphEdge.java
+++ b/src/main/java/com/syncleus/dann/graph/event/context/ContextGraphEdge.java
@@ -22,8 +22,8 @@ import java.util.Set;
 import com.syncleus.dann.graph.CloudGraph;
 
 public interface ContextGraphEdge<
-	  	GEE extends CloudGraph.EdgeEndpoint<?,?>,
-	  	G extends CloudGraph<?, ?, ?, ? extends GEE>
+	  	GEE extends CloudGraph.EdgeEndpoint<?>,
+	  	G extends CloudGraph<?, ? extends GEE>
 	  >
 {
 	void changingGraphEdgeContext( Set<? extends G> joiningContexts, Set<?> leavingContexts) throws RejectedContextException;
diff --git a/src/main/java/com/syncleus/dann/graph/event/context/ContextGraphElement.java b/src/main/java/com/syncleus/dann/graph/event/context/ContextGraphElement.java
index 84f4d3da..e239c973 100644
--- a/src/main/java/com/syncleus/dann/graph/event/context/ContextGraphElement.java
+++ b/src/main/java/com/syncleus/dann/graph/event/context/ContextGraphElement.java
@@ -22,8 +22,8 @@ import java.util.Set;
 import com.syncleus.dann.graph.CloudGraph;
 
 public interface ContextGraphElement<
-	  	GE extends CloudGraph.Endpoint<?, ?,?>,
-	  	G extends CloudGraph<?, ?, ? extends GE, ? extends GE>
+	  	GE extends CloudGraph.Endpoint<?>,
+	  	G extends CloudGraph<? extends GE, ? extends GE>
 	  >
 {
 	void changingGraphContext( Set<? extends G> joiningAsNode, Set<? extends GE> joiningAsEdge, Set<?> leavingContexts) throws RejectedContextException;
diff --git a/src/main/java/com/syncleus/dann/graph/event/context/ContextGraphNode.java b/src/main/java/com/syncleus/dann/graph/event/context/ContextGraphNode.java
index 04317ed5..61ef7da7 100644
--- a/src/main/java/com/syncleus/dann/graph/event/context/ContextGraphNode.java
+++ b/src/main/java/com/syncleus/dann/graph/event/context/ContextGraphNode.java
@@ -22,8 +22,8 @@ import java.util.Set;
 import com.syncleus.dann.graph.CloudGraph;
 
 public interface ContextGraphNode<
-	  	GNE extends CloudGraph.NodeEndpoint<?,?>,
-	  	G extends CloudGraph<?, ?, ? extends GNE, ?>
+	  	GNE extends CloudGraph.NodeEndpoint<?>,
+	  	G extends CloudGraph<? extends GNE, ?>
 	  >
 {
 	void changingGraphNodeContext( Set<? extends G> joiningContexts, Set<?> leavingContexts) throws RejectedContextException;
diff --git a/src/main/java/com/syncleus/dann/neural/AbstractLocalBrain.java b/src/main/java/com/syncleus/dann/neural/AbstractLocalBrain.java
index f0a8f885..16be0353 100644
--- a/src/main/java/com/syncleus/dann/neural/AbstractLocalBrain.java
+++ b/src/main/java/com/syncleus/dann/neural/AbstractLocalBrain.java
@@ -328,10 +328,10 @@ public abstract class AbstractLocalBrain<IN extends InputNeuron, ON extends Outp
 	}
 
 	@Override
-	public Set<S> getInEdges(final N node)
+	public Set<S> getInEdges(final N nodeEndpoint)
 	{
-		if( this.inMap.containsKey(node) )
-			return Collections.unmodifiableSet(this.inMap.get(node));
+		if( this.inMap.containsKey(nodeEndpoint) )
+			return Collections.unmodifiableSet(this.inMap.get(nodeEndpoint));
 		return Collections.emptySet();
 	}
 
diff --git a/src/test/java/com/syncleus/dann/graph/drawing/hyperassociativemap/SimpleUndirectedGraph.java b/src/test/java/com/syncleus/dann/graph/drawing/hyperassociativemap/SimpleUndirectedGraph.java
index d6a4569f..1749db9b 100644
--- a/src/test/java/com/syncleus/dann/graph/drawing/hyperassociativemap/SimpleUndirectedGraph.java
+++ b/src/test/java/com/syncleus/dann/graph/drawing/hyperassociativemap/SimpleUndirectedGraph.java
@@ -89,9 +89,9 @@ public class SimpleUndirectedGraph extends AbstractBidirectedAdjacencyGraph<Simp
 		return Collections.unmodifiableSet(this.neighborEdges.get(node));
 	}
 
-	public Set<BidirectedEdge<SimpleNode>> getInEdges(final SimpleNode node)
+	public Set<BidirectedEdge<SimpleNode>> getInEdges(final SimpleNode nodeEndpoint)
 	{
-		return this.getAdjacentEdges(node);
+		return this.getAdjacentEdges(nodeEndpoint);
 	}
 
 	public int getIndegree(final SimpleNode node)
diff --git a/src/test/java/com/syncleus/dann/graph/search/DirectedGrid.java b/src/test/java/com/syncleus/dann/graph/search/DirectedGrid.java
index a719a124..a78e40c4 100644
--- a/src/test/java/com/syncleus/dann/graph/search/DirectedGrid.java
+++ b/src/test/java/com/syncleus/dann/graph/search/DirectedGrid.java
@@ -121,9 +121,9 @@ public class DirectedGrid extends AbstractBidirectedAdjacencyGraph<GridNode, Dir
 		return this.getTraversableAdjacentEdges(node);
 	}
 
-	public Set<DirectedEdge<GridNode>> getInEdges(final GridNode node)
+	public Set<DirectedEdge<GridNode>> getInEdges(final GridNode nodeEndpoint)
 	{
-		final Set<DirectedEdge<GridNode>> newEdges = new HashSet<DirectedEdge<GridNode>>(this.inNeighborEdges.get(node));
+		final Set<DirectedEdge<GridNode>> newEdges = new HashSet<DirectedEdge<GridNode>>(this.inNeighborEdges.get(nodeEndpoint));
 		return Collections.unmodifiableSet(newEdges);
 	}
 
diff --git a/src/test/java/com/syncleus/dann/graph/search/Grid.java b/src/test/java/com/syncleus/dann/graph/search/Grid.java
index 36c79878..a12b9b2a 100644
--- a/src/test/java/com/syncleus/dann/graph/search/Grid.java
+++ b/src/test/java/com/syncleus/dann/graph/search/Grid.java
@@ -102,9 +102,9 @@ public class Grid extends AbstractBidirectedAdjacencyGraph<GridNode, BidirectedE
 		return this.getAdjacentEdges(node);
 	}
 
-	public Set<BidirectedEdge<GridNode>> getInEdges(final GridNode node)
+	public Set<BidirectedEdge<GridNode>> getInEdges(final GridNode nodeEndpoint)
 	{
-		return this.getAdjacentEdges(node);
+		return this.getAdjacentEdges(nodeEndpoint);
 	}
 
 	public int getIndegree(final GridNode node)
diff --git a/src/test/java/com/syncleus/dann/graph/search/WeightedDirectedGrid.java b/src/test/java/com/syncleus/dann/graph/search/WeightedDirectedGrid.java
index 72e1d392..73ee78fe 100644
--- a/src/test/java/com/syncleus/dann/graph/search/WeightedDirectedGrid.java
+++ b/src/test/java/com/syncleus/dann/graph/search/WeightedDirectedGrid.java
@@ -121,9 +121,9 @@ public class WeightedDirectedGrid extends AbstractBidirectedAdjacencyGraph<GridN
 		return this.getTraversableAdjacentEdges(node);
 	}
 
-	public Set<WeightedDirectedEdge<GridNode>> getInEdges(final GridNode node)
+	public Set<WeightedDirectedEdge<GridNode>> getInEdges(final GridNode nodeEndpoint)
 	{
-		final Set<WeightedDirectedEdge<GridNode>> newEdges = new HashSet<WeightedDirectedEdge<GridNode>>(this.inNeighborEdges.get(node));
+		final Set<WeightedDirectedEdge<GridNode>> newEdges = new HashSet<WeightedDirectedEdge<GridNode>>(this.inNeighborEdges.get(nodeEndpoint));
 		return Collections.unmodifiableSet(newEdges);
 	}
 
-- 
GitLab