using NumSharp.Core;
using System;
using System.Collections.Generic;
using System.Text;
namespace Tensorflow
{
///
/// Mapping C# functions to Python
///
public class Python
{
protected void print(object obj)
{
Console.WriteLine(obj.ToString());
}
public static T New(object args) where T : IPyClass
{
var instance = Activator.CreateInstance();
instance.__init__(instance, args);
return instance;
}
public static void with(IPython py, Action action)
{
try
{
py.__enter__();
action(py);
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
throw ex;
}
finally
{
py.__exit__();
py.Dispose();
}
}
public static void with(IPython py, Action action) where T : IPython
{
try
{
py.__enter__();
action((T)py);
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
throw ex;
}
finally
{
py.__exit__();
py.Dispose();
}
}
public static TOut with(IPython py, Func action) where TIn : IPython
{
try
{
py.__enter__();
return action((TIn)py);
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
return default(TOut);
}
finally
{
py.__exit__();
py.Dispose();
}
}
public static float time()
{
return (float)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds;
}
public static IEnumerable<(T, T)> zip(NDArray t1, NDArray t2)
{
for (int i = 0; i < t1.size; i++)
yield return (t1.Data(i), t2.Data(i));
}
public static IEnumerable<(T1, T2)> zip(IList t1, IList t2)
{
for (int i = 0; i < t1.Count; i++)
yield return (t1[i], t2[i]);
}
public static IEnumerable<(int, T)> enumerate(IList values)
{
for (int i = 0; i < values.Count; i++)
yield return (i, values[i]);
}
}
public interface IPython : IDisposable
{
void __enter__();
void __exit__();
}
public class PyObject where T : IPyClass
{
public T Instance { get; set; }
}
}