o
     Pj
                     @   s   d Z ddlZddlZddlmZmZmZmZ deeef deeef deee	f fddZ
d	e	d
e	dee fddZdedefddZ	ddee	df deee	df  de	fddZdeeef defddZdS )z+File for placing functions used in library.    N)ListOptionalTupleUnionvec1vec2returnc                 C   s0   t | t |krtdtdd t| |D S )zTwo vectors dot product.

    Parameters:
        vec1: List[float] - first vector
        vec2: List[float] - second vector

    Returns:
        Dot product of 2 vectors

    Raises:
        ValueError: if length not equal
    z$lengths of two vectors are not equalc                 S   s   g | ]\}}|| qS  r	   ).0val1val2r	   r	   G/home/thesage/.local/lib/python3.10/site-packages/perlin_noise/tools.py
<listcomp>   s    zdot.<locals>.<listcomp>)len
ValueErrorsumzip)r   r   r	   r	   r   dot   s   r   
dimensionsseedc                 C   sD   t  }t | g }t| D ]}|t dd qt | |S )zSample normalized vector given length.

    Parameters:
        dimensions: int - space size
        seed: Optional[int] - random seed value

    Returns:
        List[float] - normalized random vector of given size
       )randomgetstater   rangeappenduniformsetstate)r   r   stvec_r	   r	   r   sample_vector   s   


r!   given_valuec                 C   sH   | dk s| dkrt ddt| d dt| d  dt| d	  S )
zSmoothing [0, 1] values.

    Parameters:
        given_value: float [0, 1] value for smoothing

    Returns:
        smoothed [0, 1] value

    Raises:
        ValueError: if input not in [-0.1, 1.1]
    gg?z%expected to have value in [-0.1, 1.1]            
      )r   mathpow)r"   r	   r	   r   fade2   s   r+   coordinates.
tile_sizesc              	   C   sJ   |rt dd t| |D } tdtttdd tt| D | d S )a  Hashes coordinates to integer number and use obtained number as seed.

    Parameters:
        coordinates: Tuple[int, ...] - tuple of coordinates
        tile_sizes: Optional[Tuple[int, ...]] - optional tile sizes

    Returns:
        hash of coordinates in integer
    c                 s   s    | ]	\}}|| V  qd S Nr	   )r
   coorstiler	   r	   r   	<genexpr>U   s    
zhasher.<locals>.<genexpr>r   c                 S   s   g | ]}d | qS )r'   r	   )r
   
coordinater	   r	   r   r   ]   s    zhasher.<locals>.<listcomp>)tupler   maxintabsr   r   r   )r,   r-   r	   r	   r   hasherG   s   r7   iterablec                 C   s,   t | dkr
| d S | d t| dd  S )zMultiplies values of iterable  each with each.

    Parameters:
        iterable: - any iterable

    Returns:
        product of values
    r   r   N)r   product)r8   r	   r	   r   r9   d   s   	r9   r.   )__doc__r)   r   typingr   r   r   r   floatr5   r   r!   r+   r7   r9   r	   r	   r	   r   <module>   s,    





