File size: 1,073 Bytes
8d1819a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
# import sys
# from types import ModuleType, SimpleNamespace

# import numpy  # real numpy

# # for python 3.12 on arm, faiss needs a fake cpuinfo module


# """ This disgusting hack was brought to you by:
# https://github.com/facebookresearch/faiss/issues/3936
# """

# faiss_monkey_patch.py  – import this before faiss -----------------
import sys, types, numpy as np
from types import SimpleNamespace

# fake numpy.distutils and numpy.distutils.cpuinfo packages
dist = types.ModuleType("numpy.distutils")
cpuinfo = types.ModuleType("numpy.distutils.cpuinfo")

# cpu attribute that looks like the real one
cpuinfo.cpu = SimpleNamespace( # type: ignore
    # FAISS only does   .info[0].get('Features', '')
    info=[{}]
)

# register in sys.modules
dist.cpuinfo = cpuinfo # type: ignore
sys.modules["numpy.distutils"] = dist
sys.modules["numpy.distutils.cpuinfo"] = cpuinfo

# crucial: expose it as an *attribute* of the already-imported numpy package
np.distutils = dist # type: ignore
# -------------------------------------------------------------------

import faiss