Repository navigation
Expand file tree
/
Copy pathAxis.cs
More file actions
96 lines (80 loc) · 2.84 KB
/
Copy pathAxis.cs
File metadata and controls
96 lines (80 loc) · 2.84 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Numpy.Models
{
/// <summary>
/// Special type for axis parameters that can be automatically cast implicitly from int or int[]
/// </summary>
public class Axis
{
/// <summary>
/// Default axis, corresponds to axis=null in Numpy
/// </summary>
public Axis() { }
/// <summary>
/// Single axis, corresponds to axis=x in Numpy
/// </summary>
/// <param name="axis"></param>
public Axis(int axis)
{
Axes = new[] {axis};
}
/// <summary>
/// Multiple axes, corresponds to axis=(x,y, ...) in Numpy
/// </summary>
/// <param name="axes"></param>
public Axis(params int[] axes)
{
Axes = axes;
}
public readonly int[] Axes = null;
public static implicit operator Axis(int axis)
{
return new Axis(axis);
}
public static implicit operator Axis(int[] axes)
{
return new Axis(axes);
}
public static implicit operator Axis(ValueTuple<int> tuple) => new Axis(tuple.Item1);
public static implicit operator Axis(ValueTuple<int, int> tuple) => new Axis(tuple.Item1, tuple.Item2);
public static implicit operator Axis(ValueTuple<int, int, int> tuple) => new Axis(tuple.Item1, tuple.Item2, tuple.Item3);
public static implicit operator Axis(ValueTuple<int, int, int, int> tuple) => new Axis(tuple.Item1, tuple.Item2, tuple.Item3, tuple.Item4);
public static implicit operator Axis(ValueTuple<int, int, int, int, int> tuple) => new Axis(tuple.Item1, tuple.Item2, tuple.Item3, tuple.Item4, tuple.Item5);
#region Equality
public override bool Equals(object obj)
{
var b = obj as Axis;
if (b == null)
{
if (Axes == null)
return true;
else if (Axes.Length == 0)
return true;
return false;
}
return Enumerable.SequenceEqual(Axes, b.Axes);
}
public static bool operator ==(Axis a, Axis b)
{
if (Object.ReferenceEquals(a, null) && Object.ReferenceEquals(b, null))
return true;
if (Object.ReferenceEquals(a, null))
return b.Equals(a);
return a.Equals(b);
}
public static bool operator !=(Axis a, Axis b)
{
return !(a == b);
}
public override int GetHashCode()
{
if (Axes == null)
return 0;
return Axes.GetHashCode();
}
#endregion
}
}