From 61d4c846513732e6be2fa92224596d9a815b9b67 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Aur=C3=A9lien=20Lamercerie?=
 <aurelien.lamercerie@tetras-libre.fr>
Date: Sat, 18 Feb 2023 16:19:03 +0100
Subject: [PATCH] Update semantic net classes

---
 .../febTransduction/net/atom_property_net.py  |  35 +-
 tenet/febTransduction/net/class_net.py        |   5 +-
 .../net/composite_class_net.py                |  17 +-
 .../net/composite_property_net.py             |  23 +-
 tenet/febTransduction/net/individual_net.py   |  17 +-
 tenet/febTransduction/net/net.py              |  47 +--
 tenet/febTransduction/net/phenomena_net.py    |  11 +-
 tenet/febTransduction/net/property_net.py     |   5 +-
 tenet/febTransduction/net/restriction_net.py  |  17 +-
 tenet/febTransduction/net/value_net.py        |   5 +-
 tests/test_transduction_semantic_net_2.py     | 311 ++++++++++--------
 tests/test_transduction_semantic_net_3.py     |   3 +
 12 files changed, 233 insertions(+), 263 deletions(-)

diff --git a/tenet/febTransduction/net/atom_property_net.py b/tenet/febTransduction/net/atom_property_net.py
index c029b52c..a7e93034 100644
--- a/tenet/febTransduction/net/atom_property_net.py
+++ b/tenet/febTransduction/net/atom_property_net.py
@@ -53,10 +53,8 @@ class AtomPropertyNet(PropertyNet):
     
     @core_role.setter
     def core_role(self, new_value):
-        if isinstance(self._core_role, list):
-            self._core_role.append(new_value)
-        else:
-            self._core_role = new_value
+        self._core_role = self.set_attribute_value(self._core_role, new_value)
+        
         
     @property
     def target_argument_node(self):
@@ -65,10 +63,8 @@ class AtomPropertyNet(PropertyNet):
     
     @target_argument_node.setter
     def target_argument_node(self, new_value):
-        if isinstance(self._target_argument_node, list):
-            self._target_argument_node.append(new_value)
-        else:
-            self._target_argument_node = new_value
+        self._target_argument_node = self.set_attribute_value(self._target_argument_node, new_value)
+
         
     @property
     def property_type(self):
@@ -77,10 +73,8 @@ class AtomPropertyNet(PropertyNet):
     
     @property_type.setter
     def property_type(self, new_value):
-        if isinstance(self._property_type, list):
-            self._property_type.append(new_value)
-        else:
-            self._property_type = new_value
+        self._property_type = self.set_attribute_value(self._property_type, new_value)
+
         
     @property
     def property_name01(self):
@@ -89,10 +83,8 @@ class AtomPropertyNet(PropertyNet):
     
     @property_name01.setter
     def property_name01(self, new_value):
-        if isinstance(self._property_name01, list):
-            self._property_name01.append(new_value)
-        else:
-            self._property_name01 = new_value
+        self._property_name01 = self.set_attribute_value(self._property_name01, new_value)
+        
         
     @property
     def property_name10(self):
@@ -101,10 +93,8 @@ class AtomPropertyNet(PropertyNet):
     
     @property_name10.setter
     def property_name10(self, new_value):
-        if isinstance(self._property_name10, list):
-            self._property_name10.append(new_value)
-        else:
-            self._property_name10 = new_value
+        self._property_name10 = self.set_attribute_value(self._property_name10, new_value)
+
         
     @property
     def property_name12(self):
@@ -113,7 +103,4 @@ class AtomPropertyNet(PropertyNet):
     
     @property_name12.setter
     def property_name12(self, new_value):
-        if isinstance(self._property_name12, list):
-            self._property_name12.append(new_value)
-        else:
-            self._property_name12 = new_value
\ No newline at end of file
+        self._property_name12 = self.set_attribute_value(self._property_name12, new_value)
diff --git a/tenet/febTransduction/net/class_net.py b/tenet/febTransduction/net/class_net.py
index c0305896..26836286 100644
--- a/tenet/febTransduction/net/class_net.py
+++ b/tenet/febTransduction/net/class_net.py
@@ -47,7 +47,4 @@ class ClassNet(Net):
     
     @class_name.setter
     def class_name(self, new_value):
-        if isinstance(self._class_name, list):
-            self._class_name.append(new_value)
-        else:
-            self._class_name = new_value
\ No newline at end of file
+        self._class_name = self.set_attribute_value(self._class_name, new_value)
diff --git a/tenet/febTransduction/net/composite_class_net.py b/tenet/febTransduction/net/composite_class_net.py
index 374e050f..374a156c 100644
--- a/tenet/febTransduction/net/composite_class_net.py
+++ b/tenet/febTransduction/net/composite_class_net.py
@@ -49,10 +49,8 @@ class CompositeClassNet(ClassNet):
     
     @mother_class_net.setter
     def mother_class_net(self, new_value):
-        if isinstance(self._mother_class_net, list):
-            self._mother_class_net.append(new_value)
-        else:
-            self._mother_class_net = new_value
+        self._mother_class_net = self.set_attribute_value(self._mother_class_net, new_value)
+
         
     @property
     def restriction(self):
@@ -61,10 +59,8 @@ class CompositeClassNet(ClassNet):
     
     @restriction.setter
     def restriction(self, new_value):
-        if isinstance(self._restriction, list):
-            self._restriction.append(new_value)
-        else:
-            self._restriction = new_value
+        self._restriction = self.set_attribute_value(self._restriction, new_value)
+
         
     @property
     def restriction01(self):
@@ -73,7 +69,4 @@ class CompositeClassNet(ClassNet):
     
     @restriction01.setter
     def restriction01(self, new_value):
-        if isinstance(self._restriction01, list):
-            self._restriction01.append(new_value)
-        else:
-            self._restriction01 = new_value
\ No newline at end of file
+        self._restriction01 = self.set_attribute_value(self._restriction01, new_value)
diff --git a/tenet/febTransduction/net/composite_property_net.py b/tenet/febTransduction/net/composite_property_net.py
index 7a2f969d..23cc171f 100644
--- a/tenet/febTransduction/net/composite_property_net.py
+++ b/tenet/febTransduction/net/composite_property_net.py
@@ -50,10 +50,8 @@ class CompositePropertyNet(PropertyNet):
     
     @core_role.setter
     def core_role(self, new_value):
-        if isinstance(self._core_role, list):
-            self._core_role.append(new_value)
-        else:
-            self._core_role = new_value
+        self._core_role = self.set_attribute_value(self._core_role, new_value)
+
         
     @property
     def target_argument_node(self):
@@ -62,10 +60,8 @@ class CompositePropertyNet(PropertyNet):
     
     @target_argument_node.setter
     def target_argument_node(self, new_value):
-        if isinstance(self._target_argument_node, list):
-            self._target_argument_node.append(new_value)
-        else:
-            self._target_argument_node = new_value
+        self._target_argument_node = self.set_attribute_value(self._target_argument_node, new_value)
+
         
     @property
     def property_type(self):
@@ -74,10 +70,8 @@ class CompositePropertyNet(PropertyNet):
     
     @property_type.setter
     def property_type(self, new_value):
-        if isinstance(self._property_type, list):
-            self._property_type.append(new_value)
-        else:
-            self._property_type = new_value
+        self._property_type = self.set_attribute_value(self._property_type, new_value)
+
         
     @property
     def restriction(self):
@@ -86,7 +80,4 @@ class CompositePropertyNet(PropertyNet):
     
     @restriction.setter
     def restriction(self, new_value):
-        if isinstance(self._restriction, list):
-            self._restriction.append(new_value)
-        else:
-            self._restriction = new_value
\ No newline at end of file
+        self._restriction = self.set_attribute_value(self._restriction, new_value)
diff --git a/tenet/febTransduction/net/individual_net.py b/tenet/febTransduction/net/individual_net.py
index 70887546..f61928bd 100644
--- a/tenet/febTransduction/net/individual_net.py
+++ b/tenet/febTransduction/net/individual_net.py
@@ -49,10 +49,8 @@ class IndividualNet(Net):
     
     @base_class_name.setter
     def base_class_name(self, new_value):
-        if isinstance(self._base_class_name, list):
-            self._base_class_name.append(new_value)
-        else:
-            self._base_class_name = new_value
+        self._base_class_name = self.set_attribute_value(self._base_class_name, new_value)
+
         
     @property
     def mother_class_net(self):
@@ -61,10 +59,8 @@ class IndividualNet(Net):
     
     @mother_class_net.setter
     def mother_class_net(self, new_value):
-        if isinstance(self._mother_class_net, list):
-            self._mother_class_net.append(new_value)
-        else:
-            self._mother_class_net = new_value
+        self._mother_class_net = self.set_attribute_value(self._mother_class_net, new_value)
+
         
     @property
     def individual_label(self):
@@ -73,7 +69,4 @@ class IndividualNet(Net):
     
     @individual_label.setter
     def individual_label(self, new_value):
-        if isinstance(self._individual_label, list):
-            self._individual_label.append(new_value)
-        else:
-            self._individual_label = new_value
\ No newline at end of file
+        self._individual_label = self.set_attribute_value(self._individual_label, new_value)
diff --git a/tenet/febTransduction/net/net.py b/tenet/febTransduction/net/net.py
index 61404c55..854cfbad 100644
--- a/tenet/febTransduction/net/net.py
+++ b/tenet/febTransduction/net/net.py
@@ -100,12 +100,15 @@ class Net:
                 
         return res 
 
-    def set_attribute_value(self, **attr):
-        for attr_key, attr_value in attr.items():
-            if isinstance(attr_key, list):
-                self.attr_key.append(attr_value)
+    def set_attribute_value(self, attr_key, attr_value):
+        if isinstance(attr_key, list):
+            if isinstance(attr_value, list):
+                attr_key += attr_value
             else:
-                self.attr_key = attr_value
+                attr_key.append(attr_value)
+        else:
+            attr_key = attr_value
+        return attr_key
     
 
     #--------------------------------------------------------------------------
@@ -132,13 +135,8 @@ class Net:
     
     @node.setter
     def node(self, new_value):
-        if isinstance(self._node, list):
-            if isinstance(new_value, list):
-                self._node += new_value
-            else:
-                self._node.append(new_value)
-        else:
-            self._node = new_value
+        self._node = self.set_attribute_value(self._node, new_value)
+        
         
     @property
     def base_node(self):
@@ -147,13 +145,8 @@ class Net:
     
     @base_node.setter
     def base_node(self, new_value):
-        if isinstance(self._base_node, list):
-            if isinstance(new_value, list):
-                self._node += new_value
-            else:
-                self._node.append(new_value)
-        else:
-            self._base_node = new_value
+        self._base_node = self.set_attribute_value(self._base_node, new_value)
+        
         
     @property
     def structure(self):
@@ -162,13 +155,7 @@ class Net:
     
     @structure.setter
     def structure(self, new_value):
-        if isinstance(self._structure, list):
-            if isinstance(new_value, list):
-                self._node += new_value
-            else:
-                self._node.append(new_value)
-        else:
-            self._structure = new_value
+        self._structure = self.set_attribute_value(self._structure, new_value)
         
     @property
     def naming(self):
@@ -177,13 +164,7 @@ class Net:
     
     @naming.setter
     def naming(self, new_value):
-        if isinstance(self._naming, list):
-            if isinstance(new_value, list):
-                self._node += new_value
-            else:
-                self._node.append(new_value)
-        else:
-            self._naming = new_value
+        self._naming = self.set_attribute_value(self._naming, new_value)
         
         
         
diff --git a/tenet/febTransduction/net/phenomena_net.py b/tenet/febTransduction/net/phenomena_net.py
index 09610984..99ac7022 100644
--- a/tenet/febTransduction/net/phenomena_net.py
+++ b/tenet/febTransduction/net/phenomena_net.py
@@ -48,10 +48,8 @@ class PhenomenaNet(Net):
     
     @phenomena_type.setter
     def phenomena_type(self, new_value):
-        if isinstance(self._phenomena_type, list):
-            self._phenomena_type.append(new_value)
-        else:
-            self._phenomena_type = new_value
+        self._phenomena_type = self.set_attribute_value(self._phenomena_type, new_value)
+
         
     @property
     def phenomena_ref(self):
@@ -60,7 +58,4 @@ class PhenomenaNet(Net):
     
     @phenomena_ref.setter
     def phenomena_ref(self, new_value):
-        if isinstance(self._phenomena_ref, list):
-            self._phenomena_ref.append(new_value)
-        else:
-            self._phenomena_ref = new_value
\ No newline at end of file
+        self._phenomena_ref = self.set_attribute_value(self._phenomena_ref, new_value)
diff --git a/tenet/febTransduction/net/property_net.py b/tenet/febTransduction/net/property_net.py
index 2da29dc3..a2d51a6a 100644
--- a/tenet/febTransduction/net/property_net.py
+++ b/tenet/febTransduction/net/property_net.py
@@ -47,7 +47,4 @@ class PropertyNet(Net):
     
     @property_name.setter
     def property_name(self, new_value):
-        if isinstance(self._property_name, list):
-            self._property_name.append(new_value)
-        else:
-            self._property_name = new_value
\ No newline at end of file
+        self._property_name = self.set_attribute_value(self._property_name, new_value)
diff --git a/tenet/febTransduction/net/restriction_net.py b/tenet/febTransduction/net/restriction_net.py
index a6070908..c494d234 100644
--- a/tenet/febTransduction/net/restriction_net.py
+++ b/tenet/febTransduction/net/restriction_net.py
@@ -49,10 +49,8 @@ class RestrictionNet(Net):
     
     @target_node.setter
     def target_node(self, new_value):
-        if isinstance(self._target_node, list):
-            self._target_node.append(new_value)
-        else:
-            self._target_node = new_value
+        self._target_node = self.set_attribute_value(self._target_node, new_value)
+
         
     @property
     def restriction_property(self):
@@ -61,10 +59,8 @@ class RestrictionNet(Net):
     
     @restriction_property.setter
     def restriction_property(self, new_value):
-        if isinstance(self._restriction_property, list):
-            self._restriction_property.append(new_value)
-        else:
-            self._restriction_property = new_value
+        self._restriction_property = self.set_attribute_value(self._restriction_property, new_value)
+
         
     @property
     def restriction_net_value(self):
@@ -73,7 +69,4 @@ class RestrictionNet(Net):
     
     @restriction_net_value.setter
     def restriction_net_value(self, new_value):
-        if isinstance(self._restriction_net_value, list):
-            self._restriction_net_value.append(new_value)
-        else:
-            self._restriction_net_value = new_value
\ No newline at end of file
+        self._restriction_net_value = self.set_attribute_value(self._restriction_net_value, new_value)
diff --git a/tenet/febTransduction/net/value_net.py b/tenet/febTransduction/net/value_net.py
index 7971e411..70bab39a 100644
--- a/tenet/febTransduction/net/value_net.py
+++ b/tenet/febTransduction/net/value_net.py
@@ -47,7 +47,4 @@ class ValueNet(Net):
     
     @value_label.setter
     def value_label(self, new_value):
-        if isinstance(self._value_label, list):
-            self._value_label.append(new_value)
-        else:
-            self._value_label = new_value
+        self._value_label = self.set_attribute_value(self._value_label, new_value)
diff --git a/tests/test_transduction_semantic_net_2.py b/tests/test_transduction_semantic_net_2.py
index 5b6d42bb..92311ca4 100644
--- a/tests/test_transduction_semantic_net_2.py
+++ b/tests/test_transduction_semantic_net_2.py
@@ -40,149 +40,192 @@ from tenet.febTransduction.net import RestrictionNet
 
 
 #==============================================================================
-# Utilities
+# Useful Methods
 #==============================================================================
 
+def load_test_graph():
+    print(f'\n -- Test Graph Loading')
+    graph = Graph()
+    graph.bind('amr', Namespace('https://amr.tetras-libre.fr/rdf/schema#'))
+    graph.bind('net', Namespace('https://tenet.tetras-libre.fr/semantic-net#'))
+    graph.bind('base-out', Namespace('https://tenet.tetras-libre.fr/base-ontology#'))
+    graph.parse(TEST_GRAPH)
+    print(f" ----- Graph Loaded ({len(graph)})")
+    return graph
+
+
 def test_attribute_access(net, *attr_set):
     print(f'\n *** Net attributes ({net.type_id})) ***')
     for attr in attr_set:
-        print(f' ----- {attr}: {eval(attr)}')        
+        print(f' ----- {attr}: {eval(attr)}')           
+
+    
+
+#==============================================================================
+# Unit Test
+#==============================================================================
+
+def unittest_set_attribute_net(graph, net_uri):
+    print('\n -- Net')
+    net = Net(graph, uri=net_uri)
+    print('\n /// before setting')
+    test_attribute_access(net, 'net.uri', 
+                          'net.node', 'net.base_node', 'net.structure', 'net.naming')
+    net.base_node = ' *** node_a ***'
+    net.node = ' *** node_a ***'
+    net.structure = ' *** test-structure ***'
+    net.naming = ' *** test-naming ***'
+    print('\n /// after setting')
+    test_attribute_access(net, 'net.uri', 
+                          'net.node', 'net.base_node', 'net.structure', 'net.naming')
+
+
+def unittest_set_attribute_class_net(graph, net_uri):
+    print('\n -- Class Net')
+    net = ClassNet(graph, uri=net_uri)
+    net.class_name = ' *** test-class-name (1) ***'
+    test_attribute_access(net, 'net.uri', 
+                          'net.node', 'net.base_node', 'net.structure', 'net.naming',
+                          'net.class_name')
+  
+
+def unittest_set_attribute_atom_class_net(graph, net_uri):  
+    print('\n -- Atom Class Net')
+    net = AtomClassNet(graph, uri=net_uri)
+    net.class_name = ' *** test-class-name (2) ***'
+    test_attribute_access(net, 'net.uri', 
+                          'net.node', 'net.base_node', 'net.structure', 'net.naming',
+                          'net.class_name') 
+   
+
+def unittest_set_attribute_composite_class_net(graph, net_uri): 
+    print('\n -- Composite Class Net (1)')
+    net = CompositeClassNet(graph, uri=net_uri)
+    net.mother_class_net = ' *** test-value ***'
+    net.restriction = ' *** test-value ***'
+    net.restriction01 = ' *** test-value ***'
+    test_attribute_access(net, 'net.uri', 
+                          'net.node', 'net.base_node', 'net.structure', 'net.naming',
+                          'net.class_name',
+                          'net.mother_class_net', 'net.restriction', 'net.restriction01')
+    
+
+def unittest_set_attribute_property_net(graph, net_uri): 
+    print('\n -- Property Net')
+    net = PropertyNet(graph, uri=net_uri)
+    net.property_name = ' *** test-value ***'
+    test_attribute_access(net, 'net.uri', 
+                          'net.node', 'net.base_node', 'net.structure', 'net.naming',
+                          'net.property_name')
+    
+
+def unittest_set_attribute_atom_property_net(graph, net_uri): 
+    print('\n -- Atom Property Net')
+    net = AtomPropertyNet(graph, uri=net_uri)
+    net.property_name = ' *** test-value ***'
+    net.core_role = ' *** test-value ***'
+    net.target_argument_node = ' *** test-value ***'
+    net.property_type = ' *** test-value ***'
+    net.property_name01 = ' *** test-value ***'
+    net.property_name10 = ' *** test-value ***'
+    net.property_name12 = ' *** test-value ***'
+    test_attribute_access(net, 'net.uri', 
+                          'net.node', 'net.base_node', 'net.structure', 'net.naming',
+                          'net.property_name',
+                          'net.core_role', 'net.target_argument_node', 'net.property_type',
+                          'net.property_name01', 'net.property_name10', 'net.property_name12')
+    
+
+def unittest_set_attribute_composite_property_net(graph, net_uri): 
+    print('\n -- Composite Property Net')
+    net = CompositePropertyNet(graph, uri=net_uri)
+    net.property_name = ' *** test-value ***'
+    net.core_role = ' *** test-value ***'
+    net.target_argument_node = ' *** test-value ***'
+    net.property_type = ' *** test-value ***'
+    net.restriction = ' *** test-value ***'
+    test_attribute_access(net, 'net.uri', 
+                          'net.node', 'net.base_node', 'net.structure', 'net.naming',
+                          'net.property_name',
+                          'net.core_role', 'net.target_argument_node', 'net.property_type', 'net.restriction')
+    
+
+def unittest_set_attribute_individual_net(graph, net_uri): 
+    print('\n -- Individual Net')
+    net = IndividualNet(graph, uri=net_uri)
+    net.base_class_name = ' *** test-value ***'
+    net.mother_class_net = ' *** test-value ***'
+    net.individual_label = ' *** test-value ***'
+    test_attribute_access(net, 'net.uri', 
+                          'net.node', 'net.base_node', 'net.structure', 'net.naming',
+                          'net.base_class_name', 'net.mother_class_net', 'net.individual_label')
+    
+
+def unittest_set_attribute_value_net(graph, net_uri): 
+    print('\n -- Value Net')
+    net = ValueNet(graph, uri=net_uri)
+    net.value_label = ' *** test-value ***'
+    test_attribute_access(net, 'net.uri', 
+                          'net.node', 'net.base_node', 'net.structure', 'net.naming',
+                          'net.value_label')
        
 
+def unittest_set_attribute_phenomena_net(graph, net_uri): 
+    print('\n -- Phenomena Net (1)')
+    net = PhenomenaNet(graph, uri=net_uri)
+    net.phenomena_type = ' *** test-value ***'
+    net.phenomena_ref = ' *** test-value ***'
+    test_attribute_access(net, 'net.uri', 
+                          'net.node', 'net.base_node', 'net.structure', 'net.naming',
+                          'net.phenomena_type', 'net.phenomena_ref')
+    
+
+def unittest_set_attribute_restriction_net(graph, net_uri): 
+    print('\n -- Restriction Net')
+    net = RestrictionNet(graph, uri=net_uri)
+    net.target_node = ' *** test-value ***'
+    net.restriction_property = ' *** test-value ***'
+    net.restriction_net_value = ' *** test-value ***'
+    test_attribute_access(net, 'net.uri', 
+                          'net.node', 'net.base_node', 'net.structure', 'net.naming',
+                          'net.target_node', 'net.restriction_property', 'net.restriction_net_value')
+
+
+  
 
 #==============================================================================
-# Development Test
+# Test Script
 #==============================================================================
 
-print('\n' + ' *** Development Test ***')
-print('\n *** TEST: Semantic Net Setters ***')
-
-print(f'\n -- Test Graph Loading')
-graph = Graph()
-graph.bind('net', Namespace('https://tenet.tetras-libre.fr/semantic-net#'))
-graph.parse(TEST_GRAPH)
-print(f" ----- Graph Loaded ({len(graph)})")
-
-print('\n -- Net')
-net = Net(graph, uri='net:atomClass_sun_s2')
-print('\n /// before setting')
-test_attribute_access(net, 'net.uri', 
-                      'net.node', 'net.base_node', 'net.structure', 'net.naming')
-net.base_node = ' *** node_a ***'
-net.node = ' *** node_a ***'
-net.structure = ' *** test-structure ***'
-net.naming = ' *** test-naming ***'
-print('\n /// after setting')
-test_attribute_access(net, 'net.uri', 
-                      'net.node', 'net.base_node', 'net.structure', 'net.naming')
-
-print('\n -- Class Net')
-net = ClassNet(graph, uri='net:atomClass_sun_s2')
-net.class_name = ' *** test-class-name (1) ***'
-test_attribute_access(net, 'net.uri', 
-                      'net.node', 'net.base_node', 'net.structure', 'net.naming',
-                      'net.class_name')
-
-print('\n -- Atom Class Net')
-net = AtomClassNet(graph, uri='net:atomClass_sun_s2')
-net.class_name = ' *** test-class-name (2) ***'
-test_attribute_access(net, 'net.uri', 
-                      'net.node', 'net.base_node', 'net.structure', 'net.naming',
-                      'net.class_name') 
-
-print('\n -- Composite Class Net (1)')
-net = CompositeClassNet(graph, uri='net:compositeClass_orbit-hasManner-conjunction-OR_o2')
-net.mother_class_net = ' *** test-value ***'
-net.restriction = ' *** test-value ***'
-net.restriction01 = ' *** test-value ***'
-test_attribute_access(net, 'net.uri', 
-                      'net.node', 'net.base_node', 'net.structure', 'net.naming',
-                      'net.class_name',
-                      'net.mother_class_net', 'net.restriction', 'net.restriction01')
-
-print('\n -- Composite Class Net (2)')
-net = CompositeClassNet(graph, uri='net:compositeClass_system-hasPart-sun-and-object_s')
-net.mother_class_net = ' *** test-value ***'
-net.restriction = ' *** test-value ***'
-net.restriction01 = ' *** test-value ***'
-test_attribute_access(net, 'net.uri', 
-                      'net.node', 'net.base_node', 'net.structure', 'net.naming',
-                      'net.class_name',
-                      'net.mother_class_net', 'net.restriction', 'net.restriction01')
-
-print('\n -- Property Net')
-net = PropertyNet(graph, uri='net:atomProperty_orbit_o2')
-net.property_name = ' *** test-value ***'
-test_attribute_access(net, 'net.uri', 
-                      'net.node', 'net.base_node', 'net.structure', 'net.naming',
-                      'net.property_name')
-
-print('\n -- Atom Property Net')
-net = AtomPropertyNet(graph, uri='net:atomProperty_orbit_o2')
-net.property_name = ' *** test-value ***'
-net.core_role = ' *** test-value ***'
-net.target_argument_node = ' *** test-value ***'
-net.property_type = ' *** test-value ***'
-net.property_name01 = ' *** test-value ***'
-net.property_name10 = ' *** test-value ***'
-net.property_name12 = ' *** test-value ***'
-test_attribute_access(net, 'net.uri', 
-                      'net.node', 'net.base_node', 'net.structure', 'net.naming',
-                      'net.property_name',
-                      'net.core_role', 'net.target_argument_node', 'net.property_type',
-                      'net.property_name01', 'net.property_name10', 'net.property_name12')
-
-print('\n -- Composite Property Net')
-net = CompositePropertyNet(graph, uri='net:compositeProperty_not-direct_d2')
-net.property_name = ' *** test-value ***'
-net.core_role = ' *** test-value ***'
-net.target_argument_node = ' *** test-value ***'
-net.property_type = ' *** test-value ***'
-net.restriction = ' *** test-value ***'
-test_attribute_access(net, 'net.uri', 
-                      'net.node', 'net.base_node', 'net.structure', 'net.naming',
-                      'net.property_name',
-                      'net.core_role', 'net.target_argument_node', 'net.property_type', 'net.restriction')
-
-print('\n -- Individual Net')
-net = IndividualNet(graph, uri='net:individual_system_SolarSystem')
-net.base_class_name = ' *** test-value ***'
-net.mother_class_net = ' *** test-value ***'
-net.individual_label = ' *** test-value ***'
-test_attribute_access(net, 'net.uri', 
-                      'net.node', 'net.base_node', 'net.structure', 'net.naming',
-                      'net.base_class_name', 'net.mother_class_net', 'net.individual_label')
-
-print('\n -- Value Net')
-net = ValueNet(graph, uri='net:value_SolarSystem_blankNode')
-net.value_label = ' *** test-value ***'
-test_attribute_access(net, 'net.uri', 
-                      'net.node', 'net.base_node', 'net.structure', 'net.naming',
-                      'net.value_label')
-
-print('\n -- Phenomena Net (1)')
-net = PhenomenaNet(graph, uri='net:phenomena_conjunction-AND_a')
-net.phenomena_type = ' *** test-value ***'
-net.phenomena_ref = ' *** test-value ***'
-test_attribute_access(net, 'net.uri', 
-                      'net.node', 'net.base_node', 'net.structure', 'net.naming',
-                      'net.phenomena_type', 'net.phenomena_ref')
-
-print('\n -- Phenomena Net (1)')
-net = PhenomenaNet(graph, uri='net:phenomena_conjunction-OR_o3')
-net.phenomena_type = ' *** test-value ***'
-net.phenomena_ref = ' *** test-value ***'
-test_attribute_access(net, 'net.uri', 
-                      'net.node', 'net.base_node', 'net.structure', 'net.naming',
-                      'net.phenomena_type', 'net.phenomena_ref')
-
-print('\n -- Restriction Net')
-net = RestrictionNet(graph, uri='net:restriction_hasPart_sun')
-net.target_node = ' *** test-value ***'
-net.restriction_property = ' *** test-value ***'
-net.restriction_net_value = ' *** test-value ***'
-test_attribute_access(net, 'net.uri', 
-                      'net.node', 'net.base_node', 'net.structure', 'net.naming',
-                      'net.target_node', 'net.restriction_property', 'net.restriction_net_value')
+if __name__ == '__main__':
+      
+    print('\n *** Test Preparation ***')
+    graph = load_test_graph()
+    print('\n \n')
+    
+    print('\n *** Development Test ***')
+    # devtest_set_uri_attribute(graph)
+    print('\n \n')
     
-print('\n' + ' *** - ***')
\ No newline at end of file
+    print('\n *** Unit Test ***')
+    unittest_set_attribute_net(graph, 'net:atomClass_sun_s2')
+
+    unittest_set_attribute_class_net(graph, 'net:atomClass_sun_s2')
+    unittest_set_attribute_atom_class_net(graph, 'net:atomClass_sun_s2')
+    unittest_set_attribute_composite_class_net(graph, 'net:compositeClass_orbit-hasManner-conjunction-OR_o2')
+    unittest_set_attribute_composite_class_net(graph, 'net:compositeClass_system-hasPart-sun-and-object_s')
+
+    unittest_set_attribute_property_net(graph, 'net:atomProperty_orbit_o2')     
+    unittest_set_attribute_atom_property_net(graph, 'net:atomProperty_orbit_o2')
+    unittest_set_attribute_composite_property_net(graph, 'net:compositeProperty_not-direct_d2')
+    
+    unittest_set_attribute_individual_net(graph, 'net:individual_system_SolarSystem')  
+
+    unittest_set_attribute_value_net(graph, 'net:value_SolarSystem_blankNode')  
+     
+    unittest_set_attribute_phenomena_net(graph, 'net:phenomena_conjunction-AND_a')
+    unittest_set_attribute_phenomena_net(graph, 'net:phenomena_conjunction-OR_o3') 
+
+    unittest_set_attribute_restriction_net(graph, 'net:restriction_hasPart_sun')  
+                      
+    print('\n \n')
\ No newline at end of file
diff --git a/tests/test_transduction_semantic_net_3.py b/tests/test_transduction_semantic_net_3.py
index 61fa6074..88243ff1 100644
--- a/tests/test_transduction_semantic_net_3.py
+++ b/tests/test_transduction_semantic_net_3.py
@@ -50,6 +50,9 @@ def test_attribute_access(net, *attr_set):
        
 
 
+
+
+
 #==============================================================================
 # Development Test
 #==============================================================================
-- 
GitLab