57 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
"""
 | 
						|
Templates for invalid operations.
 | 
						|
"""
 | 
						|
import operator
 | 
						|
 | 
						|
import numpy as np
 | 
						|
 | 
						|
 | 
						|
def invalid_comparison(left, right, op):
 | 
						|
    """
 | 
						|
    If a comparison has mismatched types and is not necessarily meaningful,
 | 
						|
    follow python3 conventions by:
 | 
						|
 | 
						|
        - returning all-False for equality
 | 
						|
        - returning all-True for inequality
 | 
						|
        - raising TypeError otherwise
 | 
						|
 | 
						|
    Parameters
 | 
						|
    ----------
 | 
						|
    left : array-like
 | 
						|
    right : scalar, array-like
 | 
						|
    op : operator.{eq, ne, lt, le, gt}
 | 
						|
 | 
						|
    Raises
 | 
						|
    ------
 | 
						|
    TypeError : on inequality comparisons
 | 
						|
    """
 | 
						|
    if op is operator.eq:
 | 
						|
        res_values = np.zeros(left.shape, dtype=bool)
 | 
						|
    elif op is operator.ne:
 | 
						|
        res_values = np.ones(left.shape, dtype=bool)
 | 
						|
    else:
 | 
						|
        typ = type(right).__name__
 | 
						|
        raise TypeError(f"Invalid comparison between dtype={left.dtype} and {typ}")
 | 
						|
    return res_values
 | 
						|
 | 
						|
 | 
						|
def make_invalid_op(name: str):
 | 
						|
    """
 | 
						|
    Return a binary method that always raises a TypeError.
 | 
						|
 | 
						|
    Parameters
 | 
						|
    ----------
 | 
						|
    name : str
 | 
						|
 | 
						|
    Returns
 | 
						|
    -------
 | 
						|
    invalid_op : function
 | 
						|
    """
 | 
						|
 | 
						|
    def invalid_op(self, other=None):
 | 
						|
        typ = type(self).__name__
 | 
						|
        raise TypeError(f"cannot perform {name} with this index type: {typ}")
 | 
						|
 | 
						|
    invalid_op.__name__ = name
 | 
						|
    return invalid_op
 |