@@ -23,7 +23,8 @@ public partial class Graph : IDisposable
2323 private int _next_id_counter ;
2424 private List < String > _unfetchable_ops = new List < string > ( ) ;
2525
26- private string _name_stack ;
26+ public string _name_stack = "" ;
27+ public string old_stack = "" ;
2728 public string _graph_key ;
2829 public Status Status { get ; }
2930
@@ -168,41 +169,68 @@ public string get_name_scope()
168169
169170 public string name_scope ( string name )
170171 {
172+ old_stack = _name_stack ;
173+
171174 string new_stack = "" ;
172175
176+
173177 if ( name . EndsWith ( "/" ) )
174- {
175178 new_stack = ops . _name_from_scope_name ( name ) ;
176- }
177179 else
178- {
179180 new_stack = unique_name ( name ) ;
180- }
181181
182182 _name_stack = new_stack ;
183183
184184 return String . IsNullOrEmpty ( new_stack ) ? "" : new_stack + "/" ;
185185 }
186186
187- public string unique_name ( string name )
187+ public string unique_name ( string name , bool mark_as_used = true )
188188 {
189189 if ( ! String . IsNullOrEmpty ( _name_stack ) )
190190 {
191191 name = _name_stack + "/" + name ;
192192 }
193193
194194 var name_key = name . ToLower ( ) ;
195+ int i = 0 ;
195196 if ( _names_in_use . ContainsKey ( name_key ) )
196197 {
197- _names_in_use [ name_key ] ++ ;
198+ foreach ( var item in _names_in_use )
199+ {
200+ if ( item . Key == name_key )
201+ {
202+ i = _names_in_use [ name_key ] ;
203+ break ;
204+ }
205+
206+ i ++ ;
207+ }
198208 }
199- else
209+
210+ if ( mark_as_used )
211+ if ( _names_in_use . ContainsKey ( name_key ) )
212+ _names_in_use [ name_key ] ++ ;
213+ else
214+ _names_in_use [ name_key ] = i + 1 ;
215+
216+ if ( i > 0 )
200217 {
201- _names_in_use [ name_key ] = 1 ;
202- return name ;
218+ var base_name_key = name_key ;
219+
220+ // Make sure the composed name key is not already used.
221+ if ( _names_in_use . ContainsKey ( name_key ) )
222+ {
223+ name_key = $ "{ base_name_key } _{ i } ";
224+ i += 1 ;
225+ }
226+
227+ if ( mark_as_used )
228+ _names_in_use [ name_key ] = 1 ;
229+
230+ name = $ "{ name } _{ i - 1 } ";
203231 }
204232
205- return $ " { name } _ { _names_in_use [ name_key ] } " ;
233+ return name ;
206234 }
207235
208236 public TF_Output [ ] ReturnOutputs ( IntPtr results )
0 commit comments