IVGCVSW-7418 Allow working copy SubgraphView to get Original Slots

 * API to remove need for workaround so backend users can get slots
 * OutputSlots outside the SubgraphView needed to obtain TensorInfo
 * Fix a few Copyright headers
 * Add shared_ptr back to original subgraph view using
   std::enable_shared_from_this

Signed-off-by: Francis Murtagh <francis.murtagh@arm.com>
Change-Id: I033a00d6fc4020619d406ac06a156b7e380a426a
diff --git a/src/backends/backendsCommon/test/OptimizationViewsTests.cpp b/src/backends/backendsCommon/test/OptimizationViewsTests.cpp
index ff84eea..ff32179 100644
--- a/src/backends/backendsCommon/test/OptimizationViewsTests.cpp
+++ b/src/backends/backendsCommon/test/OptimizationViewsTests.cpp
@@ -1,5 +1,5 @@
 //
-// Copyright © 2017, 2019-2022  Arm Ltd and Contributors. All rights reserved.
+// Copyright © 2017, 2019-2023  Arm Ltd and Contributors. All rights reserved.
 // SPDX-License-Identifier: MIT
 //
 
@@ -78,17 +78,17 @@
     convLayer2->GetOutputSlot(0).Connect(outputLayer->GetInputSlot(0));
 
     // Subgraph for a failed layer
-    SubgraphViewSelector::SubgraphViewPtr failedSubgraph =
+    SubgraphView::SubgraphViewPtr failedSubgraph =
         CreateSubgraphViewFrom(CreateInputsFrom(convLayer1),
                                CreateOutputsFrom({convLayer1}),
                                {convLayer1});
     // Subgraph for an untouched layer
-    SubgraphViewSelector::SubgraphViewPtr untouchedSubgraph =
+    SubgraphView::SubgraphViewPtr untouchedSubgraph =
             CreateSubgraphViewFrom(CreateInputsFrom(convLayer2),
                                    CreateOutputsFrom({convLayer2}),
                                    {convLayer2});
     // Subgraph for a substitutable layer
-    SubgraphViewSelector::SubgraphViewPtr substitutableSubgraph =
+    SubgraphView::SubgraphViewPtr substitutableSubgraph =
             CreateSubgraphViewFrom(CreateInputsFrom(convLayer1),
                                    CreateOutputsFrom({convLayer2}),
                                    {substitutableCompiledLayer});
@@ -98,7 +98,7 @@
             substitutableGraph.AddLayer<PreCompiledLayer>(substitutionLayerDescriptor, "pre-compiled");
 
     // Subgraph for a substitution layer
-    SubgraphViewSelector::SubgraphViewPtr substitutionSubgraph =
+    SubgraphView::SubgraphViewPtr substitutionSubgraph =
             CreateSubgraphViewFrom(CreateInputsFrom(substitutionpreCompiledLayer),
                                    CreateOutputsFrom({substitutionpreCompiledLayer}),
                                    {substitutionpreCompiledLayer});
@@ -109,14 +109,14 @@
     view.AddFailedSubgraph(SubgraphView(*failedSubgraph));
     view.AddUntouchedSubgraph(SubgraphView(*untouchedSubgraph));
 
-    SubgraphViewSelector::SubgraphViewPtr baseSubgraph =
+    SubgraphView::SubgraphViewPtr baseSubgraph =
             CreateSubgraphViewFrom(CreateInputsFrom(convLayer1),
                                    CreateOutputsFrom({convLayer2}),
                                    {substitutionpreCompiledLayer});
     view.AddSubstitution({*baseSubgraph, *substitutionSubgraph});
 
     // Construct original subgraph to compare against
-    SubgraphViewSelector::SubgraphViewPtr originalSubgraph =
+    SubgraphView::SubgraphViewPtr originalSubgraph =
             CreateSubgraphViewFrom(CreateInputsFrom(convLayer1),
             CreateOutputsFrom({convLayer2}),
             {convLayer1, convLayer2, substitutionpreCompiledLayer});
@@ -151,11 +151,11 @@
     convLayer2->GetOutputSlot(0).Connect(outputLayer->GetInputSlot(0));
 
     // Subgraph for a failed layer
-    SubgraphViewSelector::SubgraphViewPtr failedSubgraph = CreateSubgraphViewFrom(CreateInputsFrom(convLayer1),
+    SubgraphView::SubgraphViewPtr failedSubgraph = CreateSubgraphViewFrom(CreateInputsFrom(convLayer1),
                                                                                   CreateOutputsFrom({convLayer1}),
                                                                                   {convLayer1});
     // Subgraph for an untouched layer
-    SubgraphViewSelector::SubgraphViewPtr untouchedSubgraph = CreateSubgraphViewFrom(CreateInputsFrom(convLayer2),
+    SubgraphView::SubgraphViewPtr untouchedSubgraph = CreateSubgraphViewFrom(CreateInputsFrom(convLayer2),
                                                                                      CreateOutputsFrom({convLayer2}),
                                                                                      {convLayer2});
 
@@ -165,7 +165,7 @@
         net.AddPrecompiledLayer(substitutionLayerDescriptor, std::move(blobPtr), backend));
 
     // Subgraph for a substitution layer
-    SubgraphViewSelector::SubgraphViewPtr substitutionSubgraph =
+    SubgraphView::SubgraphViewPtr substitutionSubgraph =
         CreateSubgraphViewFrom(CreateInputsFrom(substitutionpreCompiledLayer),
                                                 CreateOutputsFrom({substitutionpreCompiledLayer}),
                                                 {substitutionpreCompiledLayer});
@@ -173,13 +173,13 @@
     view.AddFailedSubgraph(SubgraphView(*failedSubgraph));
     view.AddUntouchedSubgraph(SubgraphView(*untouchedSubgraph));
 
-    SubgraphViewSelector::SubgraphViewPtr baseSubgraph = CreateSubgraphViewFrom(CreateInputsFrom(convLayer1),
+    SubgraphView::SubgraphViewPtr baseSubgraph = CreateSubgraphViewFrom(CreateInputsFrom(convLayer1),
                                                                                 CreateOutputsFrom({convLayer2}),
                                                                                 {substitutionpreCompiledLayer});
     view.AddSubstitution({*baseSubgraph, *substitutionSubgraph});
 
     // Construct original subgraph to compare against
-    SubgraphViewSelector::SubgraphViewPtr originalSubgraph =
+    SubgraphView::SubgraphViewPtr originalSubgraph =
         CreateSubgraphViewFrom(CreateInputsFrom(convLayer1),
                                                 CreateOutputsFrom({convLayer2}),
                                                 {convLayer1, convLayer2, substitutionpreCompiledLayer});
@@ -214,12 +214,12 @@
     convLayer2->GetOutputSlot(0).Connect(outputLayer->GetInputSlot(0));
 
     // Subgraph for an untouched layer
-    SubgraphViewSelector::SubgraphViewPtr untouchedSubgraph =
+    SubgraphView::SubgraphViewPtr untouchedSubgraph =
             CreateSubgraphViewFrom(CreateInputsFrom(convLayer2),
                                    CreateOutputsFrom({convLayer2}),
                                    {convLayer2});
     // Subgraph for a substitutable layer
-    SubgraphViewSelector::SubgraphViewPtr substitutableSubgraph =
+    SubgraphView::SubgraphViewPtr substitutableSubgraph =
             CreateSubgraphViewFrom(CreateInputsFrom(convLayer1),
                                    CreateOutputsFrom({convLayer2}),
                                    {substitutableCompiledLayer});
@@ -229,7 +229,7 @@
             substitutableGraph.AddLayer<PreCompiledLayer>(substitutionLayerDescriptor, "pre-compiled");
 
     // Subgraph for a substitution layer
-    SubgraphViewSelector::SubgraphViewPtr substitutionSubgraph =
+    SubgraphView::SubgraphViewPtr substitutionSubgraph =
             CreateSubgraphViewFrom(CreateInputsFrom(substitutionpreCompiledLayer),
                                    CreateOutputsFrom({substitutionpreCompiledLayer}),
                                    {substitutionpreCompiledLayer});
@@ -239,14 +239,14 @@
 
     view.AddUntouchedSubgraph(SubgraphView(*untouchedSubgraph));
 
-    SubgraphViewSelector::SubgraphViewPtr baseSubgraph =
+    SubgraphView::SubgraphViewPtr baseSubgraph =
             CreateSubgraphViewFrom(CreateInputsFrom(convLayer1),
                                    CreateOutputsFrom({convLayer2}),
                                    {substitutionpreCompiledLayer});
     view.AddSubstitution({*baseSubgraph, *substitutionSubgraph});
 
     // Construct original subgraph to compare against
-    SubgraphViewSelector::SubgraphViewPtr originalSubgraph =
+    SubgraphView::SubgraphViewPtr originalSubgraph =
             CreateSubgraphViewFrom(CreateInputsFrom(convLayer1),
                                    CreateOutputsFrom({convLayer2}),
                                    {convLayer1, convLayer2, substitutionpreCompiledLayer});
@@ -299,4 +299,4 @@
 }
 
 
-}
\ No newline at end of file
+}
diff --git a/src/backends/backendsCommon/test/OptimizeSubgraphViewTests.cpp b/src/backends/backendsCommon/test/OptimizeSubgraphViewTests.cpp
index 997fe98..f5a6c42 100644
--- a/src/backends/backendsCommon/test/OptimizeSubgraphViewTests.cpp
+++ b/src/backends/backendsCommon/test/OptimizeSubgraphViewTests.cpp
@@ -1,5 +1,5 @@
 //
-// Copyright © 2017,2022 Arm Ltd and Contributors. All rights reserved.
+// Copyright © 2017, 2022-2023 Arm Ltd and Contributors. All rights reserved.
 // SPDX-License-Identifier: MIT
 //
 
@@ -935,7 +935,7 @@
     LayerNameToLayerMap layersInGraph;
 
     // Create a fully optimizable subgraph
-    SubgraphViewSelector::SubgraphViewPtr subgraphPtr = BuildFullyOptimizableSubgraph1(graph, layersInGraph);
+    SubgraphView::SubgraphViewPtr subgraphPtr = BuildFullyOptimizableSubgraph1(graph, layersInGraph);
     CHECK((subgraphPtr != nullptr));
 
     const SubgraphView::IInputSlots& subgraphInputSlots = subgraphPtr->GetIInputSlots();
@@ -1002,7 +1002,7 @@
     LayerNameToLayerMap layersInGraph;
 
     // Create a fully optimizable subgraph
-    SubgraphViewSelector::SubgraphViewPtr subgraphPtr = BuildFullyOptimizableSubgraph2(graph, layersInGraph);
+    SubgraphView::SubgraphViewPtr subgraphPtr = BuildFullyOptimizableSubgraph2(graph, layersInGraph);
     CHECK((subgraphPtr != nullptr));
 
     const SubgraphView::IInputSlots& subgraphInputSlots = subgraphPtr->GetIInputSlots();
@@ -1110,7 +1110,7 @@
     LayerNameToLayerMap layersInGraph;
 
     // Create a fully optimizable subgraph
-    SubgraphViewSelector::SubgraphViewPtr subgraphPtr = BuildPartiallySupportedSubgraph(graph, layersInGraph);
+    SubgraphView::SubgraphViewPtr subgraphPtr = BuildPartiallySupportedSubgraph(graph, layersInGraph);
     CHECK((subgraphPtr != nullptr));
 
     const SubgraphView::IInputSlots& subgraphInputSlots = subgraphPtr->GetIInputSlots();
@@ -1254,7 +1254,7 @@
     LayerNameToLayerMap layersInGraph;
 
     // Create a fully optimizable subgraph
-    SubgraphViewSelector::SubgraphViewPtr subgraphPtr = BuildFullyUnoptimizableSubgraph1(graph, layersInGraph);
+    SubgraphView::SubgraphViewPtr subgraphPtr = BuildFullyUnoptimizableSubgraph1(graph, layersInGraph);
     CHECK((subgraphPtr != nullptr));
 
     const SubgraphView::IInputSlots& subgraphInputSlots = subgraphPtr->GetIInputSlots();
@@ -1318,7 +1318,7 @@
     LayerNameToLayerMap layersInGraph;
 
     // Create a fully optimizable subgraph
-    SubgraphViewSelector::SubgraphViewPtr subgraphPtr = BuildPartiallyOptimizableSubgraph1(graph, layersInGraph);
+    SubgraphView::SubgraphViewPtr subgraphPtr = BuildPartiallyOptimizableSubgraph1(graph, layersInGraph);
     CHECK((subgraphPtr != nullptr));
 
     const SubgraphView::IInputSlots& subgraphInputSlots = subgraphPtr->GetIInputSlots();
@@ -1470,7 +1470,7 @@
     LayerNameToLayerMap layersInGraph;
 
     // Create a partially optimizable subgraph
-    SubgraphViewSelector::SubgraphViewPtr subgraphPtr = BuildPartiallyOptimizableSubgraph2(graph, layersInGraph);
+    SubgraphView::SubgraphViewPtr subgraphPtr = BuildPartiallyOptimizableSubgraph2(graph, layersInGraph);
     CHECK((subgraphPtr != nullptr));
 
     const SubgraphView::IInputSlots& subgraphInputSlots = subgraphPtr->GetIInputSlots();