123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- """
- Template for functions of IndexEngine subclasses.
- WARNING: DO NOT edit .pxi FILE directly, .pxi is generated from .pxi.in
- """
- # ----------------------------------------------------------------------
- # IndexEngine Subclass Methods
- # ----------------------------------------------------------------------
- {{py:
- # name, dtype
- dtypes = [('Float64', 'float64'),
- ('Float32', 'float32'),
- ('Int64', 'int64'),
- ('Int32', 'int32'),
- ('Int16', 'int16'),
- ('Int8', 'int8'),
- ('UInt64', 'uint64'),
- ('UInt32', 'uint32'),
- ('UInt16', 'uint16'),
- ('UInt8', 'uint8'),
- ('Complex64', 'complex64'),
- ('Complex128', 'complex128'),
- ]
- engines = [('', 'IndexEngine'), ('Masked', 'MaskedIndexEngine')]
- }}
- {{for name, dtype in dtypes}}
- {{for prefix, engine in engines}}
- cdef class {{prefix}}{{name}}Engine({{engine}}):
- cdef _make_hash_table(self, Py_ssize_t n):
- {{if engine == 'MaskedIndexEngine'}}
- return _hash.{{name}}HashTable(n, uses_mask=True)
- {{else}}
- return _hash.{{name}}HashTable(n)
- {{endif}}
- cdef _check_type(self, object val):
- {{if engine == 'MaskedIndexEngine'}}
- if val is C_NA:
- return val
- {{endif}}
- {{if name not in {'Float64', 'Float32', 'Complex64', 'Complex128'} }}
- if not util.is_integer_object(val):
- if util.is_float_object(val):
- # Make sure Int64Index.get_loc(2.0) works
- if val.is_integer():
- return int(val)
- raise KeyError(val)
- {{if name.startswith("U")}}
- if val < 0:
- # cannot have negative values with unsigned int dtype
- raise KeyError(val)
- {{endif}}
- {{elif name not in {'Complex64', 'Complex128'} }}
- if not util.is_integer_object(val) and not util.is_float_object(val):
- # in particular catch bool and avoid casting True -> 1.0
- raise KeyError(val)
- {{else}}
- if (not util.is_integer_object(val)
- and not util.is_float_object(val)
- and not util.is_complex_object(val)
- ):
- # in particular catch bool and avoid casting True -> 1.0
- raise KeyError(val)
- {{endif}}
- return val
- {{endfor}}
- {{endfor}}
|