finishes SRTM_Set and turns IndexTree into an inifnite graph example
authorThomas Walker Lynch <eknp9n@reasoningtechnology.com>
Mon, 13 Jan 2025 08:25:19 +0000 (08:25 +0000)
committerThomas Walker Lynch <eknp9n@reasoningtechnology.com>
Mon, 13 Jan 2025 08:25:19 +0000 (08:25 +0000)
developer/example/IndexTree/SRTM_Diagonal.java
developer/example/IndexTree/SRTM_Diagonal_CLI.java
developer/example/IndexTree/SRTM_Diagonal_transcript.txt [new file with mode: 0644]
developer/example/IndexTree/four_down_four_across_transcript.txt [new file with mode: 0644]
developer/example/SRTM/SRTMI_Array_CLI.java
developer/example/SRTM/SRTM_Set_CLI.java [new file with mode: 0644]
developer/example/temp.java
developer/javac🖉/Ariadne_SRTMI_Array.java
developer/javac🖉/Ariadne_SRTM_Set.java
developer/tool🖉/clean
developer/tool🖉/clean_example

index f2ef3f4..a7fea33 100644 (file)
@@ -97,27 +97,29 @@ public class SRTM_Diagonal extends Ariadne_SRTM{
   // Static
   //
 
-  public static SRTM_Diagonal make(){
-    return new SRTM_Diagonal();
+  public static SRTM_Diagonal make(Label start_node){
+    return new SRTM_Diagonal(start_node);
   }
 
   // Instance data
   //
 
-  private List<Label> diagonal; // the read value
-  private final List<SRTM_Child> child_srtm_list;
-
-  private final TopoIface topo_infinite_right = new Topo_InfiniteRight();
+  private List<Label> diagonal = new ArrayList<>(); // the read value
+  private final List<SRTM_Child> child_srtm_list = new ArrayList<>();
 
   // Constructor(s)
   //
 
   // the diagonal will never be null nor empty
-  protected SRTM_Diagonal(){
-    diagonal = new ArrayList<>();
-    diagonal.add(Label.root());
-    child_srtm_list = new ArrayList<>();
+  protected SRTM_Diagonal(Label start_node){
+
+    if( start_node == null ){
+      set_topology(topo_null);
+      return;
+    }
+
     set_topology(topo_infinite_right);
+    diagonal.add(start_node);
   }
 
   // Implementation of instance interface
@@ -148,53 +150,71 @@ public class SRTM_Diagonal extends Ariadne_SRTM{
     return (List<Label>)super.read(); // Cast to ensure type consistency
   }
 
-  private class Topo_InfiniteRight implements TopoIface{
-    @Override public boolean can_read(){
-      return true;
-    }
-    @Override public List read(){
-      return diagonal;
-    }
-    @Override public boolean can_step(){
-      return true;
-    }
-
-    @Override public void step(){
-
-      List<Label> diagonal_1 = new ArrayList<>();
-
-      // inc_down from each node on diagonal_0 -> entry on child_strm list
-      Ariadne_SRTM_List<Label> diagonal_srtm = Ariadne_SRTM_List.make(diagonal);
-      if( diagonal_srtm.can_read() ){
-        do{
-          Node node = Node.make(diagonal_srtm.read());
-          child_srtm_list.add(node.neighbor()); // graph node neighbor == tree node child
-          if( !diagonal_srtm.can_step() ) break;
-          diagonal_srtm.step();
-        }while(true);
+  private final TopoIface topo_null = new TopoIface(){
+      @Override public boolean can_read(){
+        return false;
+      }
+      @Override public Object read(){
+        throw new UnsupportedOperationException( "Cannot read from NULL topology." );
       }
+      @Override public boolean can_step(){
+        return false;
+      }
+      @Override public void step(){
+        throw new UnsupportedOperationException( "Cannot step from NULL topology." );
+      }
+      @Override public Topology topology(){
+        return Topology.NULL;
+      }
+    };
 
-      // add to diagonal_1 from each on entry on the child_strm list
-      Ariadne_SRTM_List<SRTM_Child> child_srtm_srtm = Ariadne_SRTM_List.make(child_srtm_list);
-      if( child_srtm_srtm.can_read() ){
-        do{
-          SRTM_Child child_srtm = child_srtm_srtm.read();
-          Label label = child_srtm.read();
-          diagonal_1.add(label.copy());
-          child_srtm.step();
-          if( !child_srtm_srtm.can_step() ) break;
-          child_srtm_srtm.step();
-        }while(true);
+  private final TopoIface topo_infinite_right = new TopoIface(){
+      @Override public boolean can_read(){
+        return true;
+      }
+      @Override public List read(){
+        return diagonal;
+      }
+      @Override public boolean can_step(){
+        return true;
       }
 
-      // Update the state for the next step
-      diagonal = diagonal_1;
-    }
+      @Override public void step(){
+
+        List<Label> diagonal_1 = new ArrayList<>();
+
+        // inc_down from each node on diagonal_0 -> entry on child_strm list
+        Ariadne_SRTM_List<Label> diagonal_srtm = Ariadne_SRTM_List.make(diagonal);
+        if( diagonal_srtm.can_read() ){
+          do{
+            Node node = Node.make(diagonal_srtm.read());
+            child_srtm_list.add(node.neighbor()); // graph node neighbor == tree node child
+            if( !diagonal_srtm.can_step() ) break;
+            diagonal_srtm.step();
+          }while(true);
+        }
+
+        // add to diagonal_1 from each on entry on the child_strm list
+        Ariadne_SRTM_List<SRTM_Child> child_srtm_srtm = Ariadne_SRTM_List.make(child_srtm_list);
+        if( child_srtm_srtm.can_read() ){
+          do{
+            SRTM_Child child_srtm = child_srtm_srtm.read();
+            Label label = child_srtm.read();
+            diagonal_1.add(label.copy());
+            child_srtm.step();
+            if( !child_srtm_srtm.can_step() ) break;
+            child_srtm_srtm.step();
+          }while(true);
+        }
+
+        // Update the state for the next step
+        diagonal = diagonal_1;
+      }
 
-    @Override public Topology topology(){
-      return Topology.INFINITE;
-    }
+      @Override public Topology topology(){
+        return Topology.INFINITE;
+      }
 
-  }
+    };
 }
 
index c3f1e37..81a9640 100644 (file)
@@ -6,17 +6,32 @@ public class SRTM_Diagonal_CLI{
     System.out.println("Starting IndexTree SRTM Example");
 
     // Instantiate the IndexTree Diagonal SRTM
-    SRTM_Diagonal srtm = SRTM_Diagonal.make();
-    int step_count = 0;
-    if( srtm.can_read() ){
-      do{
-        System.out.println(step_count + ": " + srtm.read());
-        if( !srtm.can_step() ) break;
-        if( step_count == 4 ) break; // Stop after 5 diagonals
-        step_count++;
-        srtm.step();
-      }while(true);
+    Graph g = Graph.make();
+    SRTM_Child start_srtm = g.start();
+    if( !start_srtm.can_read() ){
+      System.out.println("Graph provides no start nodes. Thought you might want to know.");
+      return;
     }
+
+    do{
+      Label start_label = start_srtm.read();
+      System.out.println("Graph diagonalization starting from: " + start_label);
+      SRTM_Diagonal srtm = SRTM_Diagonal.make(start_label);
+      int step_count = 0;
+      if( srtm.can_read() ){
+        do{
+          System.out.println(step_count + ": " + srtm.read());
+          if( !srtm.can_step() ) break;
+          if( step_count == 4 ) break; // Stop after 5 diagonals
+          step_count++;
+          srtm.step();
+        }while(true);
+      }
+      if( !start_srtm.can_step() ) break;
+      System.out.println();
+      start_srtm.step();
+    }while(true);
+      
   }
 
 }
diff --git a/developer/example/IndexTree/SRTM_Diagonal_transcript.txt b/developer/example/IndexTree/SRTM_Diagonal_transcript.txt
new file mode 100644 (file)
index 0000000..2bbd4c4
--- /dev/null
@@ -0,0 +1,7 @@
+Starting IndexTree SRTM Example
+Graph diagonalization starting from: Label([])
+0: [Label([])]
+1: [Label([0])]
+2: [Label([1]), Label([0 ,0])]
+3: [Label([2]), Label([0 ,1]), Label([1 ,0]), Label([0 ,0 ,0])]
+4: [Label([3]), Label([0 ,2]), Label([1 ,1]), Label([0 ,0 ,1]), Label([2 ,0]), Label([0 ,1 ,0]), Label([1 ,0 ,0]), Label([0 ,0 ,0 ,0])]
diff --git a/developer/example/IndexTree/four_down_four_across_transcript.txt b/developer/example/IndexTree/four_down_four_across_transcript.txt
new file mode 100644 (file)
index 0000000..c2c8efa
--- /dev/null
@@ -0,0 +1,8 @@
+Example_4x4
+starting at: Label([])
+Descended to: Label([0])
+Descended to: Label([0 ,0])
+Descended to: Label([0 ,0 ,0])
+Across to: Label([0 ,0 ,1])
+Across to: Label([0 ,0 ,2])
+Across to: Label([0 ,0 ,3])
index f2b6d36..cbea135 100644 (file)
@@ -10,7 +10,7 @@ public class SRTMI_Array_CLI {
     List<String> label_array = Arrays.asList( "A", "B", "C", "D" );
 
     // Attach SRTMI to the array
-    Ariadne_SRTMI_Array srm = Ariadne_SRTMI_Array.make( label_array );
+    Ariadne_SRTMI_Array<String> srm = Ariadne_SRTMI_Array.make( label_array );
     if( srm.can_read() ){
       do{
         System.out.println( "Reading: " + srm.read() );  
diff --git a/developer/example/SRTM/SRTM_Set_CLI.java b/developer/example/SRTM/SRTM_Set_CLI.java
new file mode 100644 (file)
index 0000000..8278048
--- /dev/null
@@ -0,0 +1,25 @@
+import com.ReasoningTechnology.Ariadne.Ariadne_SRTM_Set;
+
+import java.util.HashSet;
+import java.util.Set;
+
+public class SRTM_Set_CLI {
+  public static void main( String[] args ){
+    // Create a Set
+    Set<String> label_set = new HashSet<>();
+    label_set.add("A");
+    label_set.add("B");
+    label_set.add("C");
+
+    // Attach SRTM to the set and traverse
+    Ariadne_SRTM_Set<String> srm = Ariadne_SRTM_Set.make(label_set);
+    if( srm.can_read() ){
+      do{
+        System.out.println( "Reading: " + srm.read() );
+        System.out.println( "Topology: " + srm.topology() );
+        if( !srm.can_step() ) break;
+        srm.step();
+      }while(true);
+    }
+  }
+}
index 39e629d..e1215bf 100644 (file)
@@ -1,3 +1,4 @@
+Aeloria
 /*
   IndexTree_SRTM_Diagonal
 
@@ -39,7 +40,7 @@ public class IndexTree_SRTM_Diagonal extends Ariadne_SRTM_Label {
     read_list = new ArrayList<>();
     breadth_srm = Ariadne_SRTM_Label.make();
     enqueue_root();
-  }
+  }Aeloria
 
   // Instance Methods
 
index 1411803..a14dfa2 100644 (file)
@@ -3,22 +3,26 @@ package com.ReasoningTechnology.Ariadne;
 import java.math.BigInteger;
 import java.util.List;
 
-public class Ariadne_SRTMI_Array extends Ariadne_SRTMI{
+public class Ariadne_SRTMI_Array<T> extends Ariadne_SRTMI{
 
   // Static methods
-  public static  Ariadne_SRTMI_Array make(List array){
-    return new Ariadne_SRTMI_Array( array );
+  //
+  
+  public static <T> Ariadne_SRTMI_Array<T> make(List<T> array){
+    return new Ariadne_SRTMI_Array<>(array);
   }
 
   // Instance data
-  private final List array;
+  //
+  
+  private final List<T> array;
 
   private final TopoIface topo_null = new TopoNull();
   private final TopoIface topo_segment = new TopoSegment();
   private final TopoIface topo_rightmost = new TopoRightmost();
 
   // Constructor
-  protected Ariadne_SRTMI_Array(List array){
+  protected Ariadne_SRTMI_Array(List<T> array){
     super();
     this.array = array;
 
@@ -37,74 +41,59 @@ public class Ariadne_SRTMI_Array extends Ariadne_SRTMI{
 
   // TopoNull
   private class TopoNull implements TopoIface{
-    @Override
-    public boolean can_read(){
+    @Override public boolean can_read(){
       return false;
     }
-    @Override
-    public Object read(){
+    @Override public Object read(){
       throw new UnsupportedOperationException( "Cannot read from NULL topo." );
     }
-    @Override
-    public boolean can_step(){
+    @Override public boolean can_step(){
       return false;
     }
-    @Override
-    public void step(){
+    @Override public void step(){
       throw new UnsupportedOperationException( "Cannot step from NULL topo." );
     }
-    @Override
-    public Topology topology(){
+    @Override public Topology topology(){
       return Topology.NULL;
     }
   }
 
   // TopoSegment
   private class TopoSegment implements TopoIface{
-    @Override
-    public boolean can_read(){
+    @Override public boolean can_read(){
       return true;
     }
-    @Override
-    public Object read(){
+    @Override public Object read(){
       return array.get( index().intValueExact() );
     }
-    @Override
-    public boolean can_step(){
+    @Override public boolean can_step(){
       return true;
     }
-    @Override
-    public void step(){
+    @Override public void step(){
       increment();
       if( index().compareTo(BigInteger.valueOf(array.size() - 1)) == 0 )
         set_topology(topo_rightmost);
     }
-    @Override
-    public Topology topology(){
+    @Override public Topology topology(){
       return Topology.SEGMENT;
     }
   }
 
   // TopoRightmost
   private class TopoRightmost implements TopoIface{
-    @Override
-    public boolean can_read(){
+    @Override public boolean can_read(){
       return true;
     }
-    @Override
-    public Object read(){
+    @Override public Object read(){
       return array.get( index().intValueExact() );
     }
-    @Override
-    public boolean can_step(){
+    @Override public boolean can_step(){
       return false;
     }
-    @Override
-    public void step(){
+    @Override public void step(){
       throw new UnsupportedOperationException( "Cannot step from RIGHTMOST topo." );
     }
-    @Override
-    public Topology topology(){
+    @Override public Topology topology(){
       return Topology.RIGHTMOST;
     }
   }
index 1b41b76..c2dc92b 100644 (file)
 package com.ReasoningTechnology.Ariadne;
 
-import java.util.ArrayList;
+import java.util.Iterator;
 import java.util.Set;
 
-public class Ariadne_SRTM_Set extends Ariadne_SRTMI_Array{
+public class Ariadne_SRTM_Set<T> extends Ariadne_SRTM{
 
   // Static factory method
-  public static  Ariadne_SRTM_Set make(Set set){
-    return new Ariadne_SRTM_Set( set );
+  public static <T> Ariadne_SRTM_Set<T> make(Set<T> set){
+    return new Ariadne_SRTM_Set<>(set);
   }
 
-  protected Ariadne_SRTM_Set(Set set){
-    super( new ArrayList(set) );
+  // Instance data
+  private final Set<T> set;
+  private final Iterator<T> iterator;
+  private T current_value;
+
+  private final TopoIface topo_null = new TopoNull();
+  private final TopoIface topo_segment = new TopoSegment();
+  private final TopoIface topo_rightmost = new TopoRightmost();
+
+  // Constructor
+  protected Ariadne_SRTM_Set(Set<T> set){
+    this.set = set;
+
+    if( set == null || set.isEmpty() ){
+      this.iterator = null;
+      set_topology(topo_null);
+      return;
+    }
+
+    this.iterator = set.iterator();
+    this.current_value = iterator.hasNext() ? iterator.next() : null;
+
+    if( set.size() == 1 ){
+      set_topology(topo_rightmost);
+    }else{
+      set_topology(topo_segment);
+    }
   }
 
+  // Instance interface implementation
+
+  @Override
+  @SuppressWarnings("unchecked")
+  public T read(){
+    return (T)current_topology.read();
+  }
+
+  private class TopoNull implements TopoIface{
+    @Override public boolean can_read(){
+      return false;
+    }
+    @Override public T read(){
+      throw new UnsupportedOperationException("Cannot read from NULL topo.");
+    }
+    @Override public boolean can_step(){
+      return false;
+    }
+    @Override public void step(){
+      throw new UnsupportedOperationException("Cannot step from NULL topo.");
+    }
+    @Override public Topology topology(){
+      return Topology.NULL;
+    }
+  }
+
+  private class TopoSegment implements TopoIface{
+    @Override public boolean can_read(){
+      return true;
+    }
+    @Override public T read(){
+      return current_value;
+    }
+    @Override public boolean can_step(){
+      return iterator.hasNext();
+    }
+    @Override public void step(){
+      current_value = iterator.next();
+      if( !iterator.hasNext() ) set_topology(topo_rightmost);
+    }
+    @Override public Topology topology(){
+      return Topology.SEGMENT;
+    }
+  }
+
+  private class TopoRightmost implements TopoIface{
+    @Override public boolean can_read(){
+      return true;
+    }
+    @Override public T read(){
+      return current_value;
+    }
+    @Override public boolean can_step(){
+      return false;
+    }
+    @Override public void step(){
+      throw new UnsupportedOperationException("Cannot step from RIGHTMOST topo.");
+    }
+    @Override public Topology topology(){
+      return Topology.RIGHTMOST;
+    }
+  }
 }
index c11bdba..21fda6f 100755 (executable)
@@ -14,9 +14,9 @@ set -x
 # remove main build files
 
   # rm_na currently does not handle links correctly 
-  rm -r scratchpad/*
-  rm_na jvm/*
-  rm_na bash/*
+  rm -rf scratchpad/*
+  rm_na -f jvm/*
+  rm_na -f bash/*
 
 set +x
 
index 3122f1b..dd21b0b 100755 (executable)
@@ -23,9 +23,9 @@ cd "example/$1" || exit 1
   for file in *_CLI.class; do
     echo "file: " $file
     wrapper_name=$(basename "$file" .class)
-    rm_na "$wrapper_name"
+    rm_na -f "$wrapper_name"
   done
-  rm_na *.class
+  rm_na -f *.class
 
 
 echo "$(script_fn) done."