
    nil                        S SK r S SKrS SKJs  Js  Js  Jr  \ R                  SS j5       r
\ R                  S 5       r\ R                  S 5       r\ R                  S 5       r\ R                  S 5       r\ R                  S 5       rg)	    Nc                 2   [         R                  " S[         R                  S9nSn[        U 5       Ha  u  pVSnU H>  nUS-  nUS:X  a  XxR                  X   -  -  nM#  US:X  d  M+  XxR
                  X   -  -  nM@     [         R                  " X75      nMc     X44$ )z;
Returns weighted sum plus the total number of annotations
r   )dtype   lowerupper)nparangefloat64	enumerater   r   append)	annotationsweightsmodeweighted_sumannotation_cnticlauses
annotations	            t/home/james-whalen/.local/lib/python3.13/site-packages/pyreason/scripts/annotation_functions/annotation_functions.py_get_weighted_sumr      s     99Qbjj1LN{+	 JaNW}%%
22w%%
22 ! yy1 , ''    c                 D    X:  a  g[        U S5      n[        US5      nX#4$ )N)r   r   r   )min)r   r   lower_boundupper_bounds       r   _check_boundr      s)    }%m%m))r   c                     [        XSS9u  p#[        XSS9u  pC[        R                  " U5      U-  n[        R                  " U5      U-  n[        XV5      u  px[        R
                  " Xx5      $ )zl
Take average of lower bounds to make new lower bound, take average of upper bounds to make new upper bound
r   r   r   )r   r   sumr   intervalclosed)	r   r   weighted_sum_lowernweighted_sum_upper	avg_lower	avg_upperr   r   s	            r   averager(   &   si    
 .kQ-kQ )*Q.I)*Q.I	5LE??5((r   c                     [        XSS9u  p#[        R                  " U5      U-  nSnU  H*  nU H!  nUR                  U:  a  UR                  OUnM#     M,     [	        XE5      u  p[
        R                  " X5      $ )zh
Take average of lower bounds to make new lower bound, take max of upper bounds to make new upper bound
r   r   r   )r   r   r    r   r   r!   r"   )
r   r   r#   r$   r&   	max_upperr   r   r   r   s
             r   average_lowerr+   6   sx    
 .kQ)*Q.II J,6,<,<y,H
((iI !   	5LE??5((r   c                     [        XSS9u  p#[        XSS9u  pC[        R                  " U5      n[        R                  " U5      n[        XV5      u  px[        R
                  " Xx5      $ )zd
Take max of lower bounds to make new lower bound, take max of upper bounds to make new upper bound
r   r   r   )r   r   maxr   r!   r"   )	r   r   r#   r$   r%   	max_lowerr*   r   r   s	            r   maximumr/   H   ]    
 .kQ-kQ)*I)*I	5LE??5((r   c                     [        XSS9u  p#[        XSS9u  pC[        R                  " U5      n[        R                  " U5      n[        XV5      u  px[        R
                  " Xx5      $ )zd
Take min of lower bounds to make new lower bound, take min of upper bounds to make new upper bound
r   r   r   )r   r   r   r   r!   r"   )	r   r   r#   r$   r%   	min_lower	min_upperr   r   s	            r   minimumr4   X   r0   r   )r   )numbanumpyr   8pyreason.scripts.numba_wrapper.numba_types.interval_typescriptsnumba_wrappernumba_typesinterval_typer!   njitr   r   r(   r+   r/   r4    r   r   <module>r>      s      K K( (& * * ) ) ) )" ) ) ) )r   