using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Tensorflow.Eager;
namespace Tensorflow
{
public partial class ops
{
public static NameScope name_scope(string name,
string default_name = "",
object values = null) => new NameScope(name, default_name, values);
///
/// Returns a context manager that creates hierarchical names for operations.
///
public class NameScope : IPython
{
public string _name;
public string _default_name;
public object _values;
public Context _ctx;
public string _name_scope;
public string old_stack = "";
private object _g_manager;
public NameScope(string name, string default_name = "", object values = null)
{
_name = name;
_default_name = default_name;
_values = values;
// _ctx = new Context();
}
public void __enter__()
{
_name = _name == null ? _default_name : _name;
Graph g = null;
if (_values is List vList)
g = _get_graph_from_inputs(vList.ToArray());
else if (_values is Tensor[] vArray)
g = _get_graph_from_inputs(vArray);
if (g == null)
g = get_default_graph();
old_stack = g._name_stack;
_name_scope = g.name_scope(_name);
}
public void Dispose()
{
var g = get_default_graph();
g._name_stack = old_stack;
// Console.WriteLine($"name_scope: {g._name_stack} -> {old_stack}");
}
public void __exit__()
{
}
///
/// __enter__()
///
///
public static implicit operator string(NameScope ns)
{
return ns._name_scope;
}
}
}
}