ncca-ngl 0.3.4__py3-none-any.whl → 0.3.5__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
ncca/ngl/util.py CHANGED
@@ -154,3 +154,12 @@ def calc_normal(p1, p2, p3):
154
154
  normal.normalize()
155
155
 
156
156
  return normal
157
+
158
+
159
+ def hash_combine(seed, h):
160
+ # emulate the NGL C++ combine: seed ^= h + 0x9e3779b9 + (seed<<6) + (seed>>2)
161
+ seed = (seed + 0x9E3779B9 + ((seed << 6) & 0xFFFFFFFFFFFFFFFF) + (seed >> 2)) & 0xFFFFFFFFFFFFFFFF
162
+ seed ^= h
163
+ return seed
164
+
165
+
ncca/ngl/vec2.py CHANGED
@@ -7,7 +7,7 @@ import math
7
7
 
8
8
  import numpy as np
9
9
 
10
- from .util import clamp
10
+ from .util import clamp, hash_combine
11
11
 
12
12
 
13
13
  class Vec2:
@@ -44,6 +44,15 @@ class Vec2:
44
44
  yield self.x
45
45
  yield self.y
46
46
 
47
+ def __hash__(self):
48
+ # Use 32-bit float element hashes, then combine
49
+ seed = 0
50
+ for v in (self.x, self.y):
51
+ # ensure 32-bit float semantics
52
+ h = hash(float(np.float32(v)))
53
+ seed = hash_combine(seed, h)
54
+ return seed
55
+
47
56
  def copy(self) -> "Vec2":
48
57
  """
49
58
  Create a copy of the vector.
ncca/ngl/vec3.py CHANGED
@@ -7,7 +7,7 @@ import math
7
7
 
8
8
  import numpy as np
9
9
 
10
- from .util import clamp
10
+ from .util import clamp, hash_combine
11
11
 
12
12
 
13
13
  class Vec3:
@@ -39,6 +39,15 @@ class Vec3:
39
39
  def sizeof(cls):
40
40
  return 3 * ctypes.sizeof(ctypes.c_float)
41
41
 
42
+ def __hash__(self):
43
+ # Use 32-bit float element hashes, then combine
44
+ seed = 0
45
+ for v in (self.x, self.y, self.z):
46
+ # ensure 32-bit float semantics
47
+ h = hash(float(np.float32(v)))
48
+ seed = hash_combine(seed, h)
49
+ return seed
50
+
42
51
  def __iter__(self):
43
52
  """
44
53
  Make the Vec3 class iterable.
ncca/ngl/vec4.py CHANGED
@@ -8,6 +8,7 @@ import math
8
8
  import numpy as np
9
9
 
10
10
  from .log import logger
11
+ from .util import hash_combine
11
12
 
12
13
 
13
14
  class Vec4:
@@ -73,6 +74,15 @@ class Vec4:
73
74
  """
74
75
  return Vec4(self.x, self.y, self.z, self.w)
75
76
 
77
+ def __hash__(self):
78
+ # Use 32-bit float element hashes, then combine
79
+ seed = 0
80
+ for v in (self.x, self.y, self.z, self.w):
81
+ # ensure 32-bit float semantics
82
+ h = hash(float(np.float32(v)))
83
+ seed = hash_combine(seed, h)
84
+ return seed
85
+
76
86
  def __add__(self, rhs):
77
87
  "return a+b vector addition"
78
88
  r = Vec4()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: ncca-ngl
3
- Version: 0.3.4
3
+ Version: 0.3.5
4
4
  Summary: A Python version of the NGL graphics library.
5
5
  Author: Jon Macey
6
6
  Author-email: Jon Macey <jmacey@bournemouth.ac.uk>
@@ -53,13 +53,13 @@ ncca/ngl/simple_vao.py,sha256=jfU2O3yliaM6iWNvfcRbjQ6o2_IVSPrOR3GthDiul6Q,1419
53
53
  ncca/ngl/text.py,sha256=yWNfKHnuWn0bxbwhW1H-EkRZ7bEM9DAyjES16cxTnME,13608
54
54
  ncca/ngl/texture.py,sha256=OgBBEItgUDohCsVWgmjEWcQWBJaXl9w070PTOOywPx4,2303
55
55
  ncca/ngl/transform.py,sha256=_PibgtFoU_exfvQUWucmts0WF5OreSTNbftvSa3zT8g,2938
56
- ncca/ngl/util.py,sha256=8jp5vTVuGfVHMSktFEubtoaQ8SvLIQtM2UNbUeMTOFk,4372
56
+ ncca/ngl/util.py,sha256=HAr_Xgj7r48OY3m3xP5HBZgyDFHQwv4qwffguViP3Cw,4618
57
57
  ncca/ngl/vao_factory.py,sha256=v87VfrUMaoqcsE-CS9kM7h5Fyk_e0LGl_iA6xqaomPg,930
58
- ncca/ngl/vec2.py,sha256=ggrBtJK77c9d_JnN6eik50kZAa1zjudWhll6_5afkFo,10236
58
+ ncca/ngl/vec2.py,sha256=4Obw_CK5uwdG9LkAVR6zBV9MkTyD-GE4AwpfaLcGLZ0,10531
59
59
  ncca/ngl/vec2_array.py,sha256=7QRgXh75fORsmNnSnNxNQWk6_rnDgfmRX3tmJZ4ES9E,3420
60
- ncca/ngl/vec3.py,sha256=N_-LvP0nB0CQrZWG7TJntUl6QDHzIVLP-J1w8wPZTM0,12275
60
+ ncca/ngl/vec3.py,sha256=2i-QXJ-VlhLw60WlGRf3mUv5zyOa1DQBkSV6oATiXLI,12578
61
61
  ncca/ngl/vec3_array.py,sha256=fLRC8k0TwcaU7CnR2GmJ0prud4dcvvUX0JTbQH_2W3Y,3535
62
- ncca/ngl/vec4.py,sha256=mLl23D-3yAxh7GsP44ilRto-PMqIDxJjcZpNl2MyqGQ,6751
62
+ ncca/ngl/vec4.py,sha256=81kFd3rDFTw4caKzRz9EzZ-tQzAcWv_1JGx0CKTfujQ,7079
63
63
  ncca/ngl/vec4_array.py,sha256=PSJXfG0g2AT4oQCLHiVAP6EC5n7vMXRQy0N1rGvv1iw,3426
64
64
  ncca/ngl/widgets/NGLDebug.log,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
65
65
  ncca/ngl/widgets/__init__.py,sha256=KBrwCwgDLIl-eAp0Q5HQcmNkfZ9q6waPC_4A8-g9PG0,413
@@ -77,6 +77,6 @@ ncca/ngl/widgets/transformwidget.py,sha256=U5pDZN_uhtBDv0BX28J7_fa1AGg8vc8Q2uG70
77
77
  ncca/ngl/widgets/vec2widget.py,sha256=w4GqwuiNewc2UI5PrSn6ZZYEaB_cxkpxGgrpMQ82WsM,4330
78
78
  ncca/ngl/widgets/vec3widget.py,sha256=PnmqdQ1j77v0PQC-p4lT3mTQd_Qi2Iwv9XzSP1Mpa7M,4934
79
79
  ncca/ngl/widgets/vec4widget.py,sha256=mT7c5paDaRxn-vSv7lbffg7isyD8T-6sUxOUMqJXBZs,5631
80
- ncca_ngl-0.3.4.dist-info/WHEEL,sha256=eh7sammvW2TypMMMGKgsM83HyA_3qQ5Lgg3ynoecH3M,79
81
- ncca_ngl-0.3.4.dist-info/METADATA,sha256=XPAaLRyoJfBTxtIEXVfcC4HWl-9lNDTKhQl45_C9FrM,1596
82
- ncca_ngl-0.3.4.dist-info/RECORD,,
80
+ ncca_ngl-0.3.5.dist-info/WHEEL,sha256=eh7sammvW2TypMMMGKgsM83HyA_3qQ5Lgg3ynoecH3M,79
81
+ ncca_ngl-0.3.5.dist-info/METADATA,sha256=ypLb9CnfpTInsKt3q9g76OVDrccixIEzKOHhly8ibkY,1596
82
+ ncca_ngl-0.3.5.dist-info/RECORD,,