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; } } }