You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ORPA-pyOpenRPA/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/comtypes/npsupport.py

105 lines
2.5 KiB

""" Consolidation of numpy support utilities. """
import sys
try:
import numpy
except ImportError:
numpy = None
HAVE_NUMPY = numpy is not None
is_64bits = sys.maxsize > 2**32
def _make_variant_dtype():
""" Create a dtype for VARIANT. This requires support for Unions, which is
available in numpy version 1.7 or greater.
This does not support the decimal type.
Returns None if the dtype cannot be created.
"""
# pointer typecode
ptr_typecode = '<u8' if is_64bits else '<u4'
_tagBRECORD_format = [
('pvRecord', ptr_typecode),
('pRecInfo', ptr_typecode),
]
# overlapping typecodes only allowed in numpy version 1.7 or greater
U_VARIANT_format = dict(
names=[
'VT_BOOL', 'VT_I1', 'VT_I2', 'VT_I4', 'VT_I8', 'VT_INT', 'VT_UI1',
'VT_UI2', 'VT_UI4', 'VT_UI8', 'VT_UINT', 'VT_R4', 'VT_R8', 'VT_CY',
'c_wchar_p', 'c_void_p', 'pparray', 'bstrVal', '_tagBRECORD',
],
formats=[
'<i2', '<i1', '<i2', '<i4', '<i8', '<i4', '<u1', '<u2', '<u4',
'<u8', '<u4', '<f4', '<f8', '<i8', ptr_typecode, ptr_typecode,
ptr_typecode, ptr_typecode, _tagBRECORD_format,
],
offsets=[0] * 19 # This is what makes it a union
)
tagVARIANT_format = [
("vt", '<u2'),
("wReserved1", '<u2'),
("wReserved2", '<u2'),
("wReserved3", '<u2'),
("_", U_VARIANT_format),
]
return numpy.dtype(tagVARIANT_format)
def isndarray(value):
""" Check if a value is an ndarray.
This cannot succeed if numpy is not available.
"""
if not HAVE_NUMPY:
return False
return isinstance(value, numpy.ndarray)
def isdatetime64(value):
""" Check if a value is a datetime64.
This cannot succeed if datetime64 is not available.
"""
if not HAVE_NUMPY:
return False
return isinstance(value, datetime64)
com_null_date64 = None
datetime64 = None
VARIANT_dtype = None
if HAVE_NUMPY:
# dtype for VARIANT. This allows for packing of variants into an array, and
# subsequent conversion to a multi-dimensional safearray.
try:
VARIANT_dtype = _make_variant_dtype()
except ValueError:
pass
# This simplifies dependent modules
try:
from numpy import datetime64
except ImportError:
pass
else:
try:
# This does not work on numpy 1.6
com_null_date64 = datetime64("1899-12-30T00:00:00", "ns")
except TypeError:
pass