
    ]ic                     (    d Z ddlmZ dededefdZy)uS   Linear interpolation: dipstick height (mm) → volume (litres) via kalibrasi table.    )Decimal	height_mmkalibrasi_rowsreturnc                 h   |st        d      | t        d      k  rt        d|  d      t        |d       }|d   j                  }|d   j                  }| |kD  rt        d	|  d
| d      |D ]1  }|j                  | k(  st        t	        |j
                              c S  | |k  rt        d      S d}d}|D ]*  }|j                  | k  r|}|j                  | kD  s%|(|} n ||!t        t	        |d   j
                              S t        t	        |j                              }t        t	        |j                              }	t        t	        |j
                              }
t        t	        |j
                              }| |z
  |	|z
  z  }|
||
z
  |z  z   }|j                  t        d            S )u  
    Linear interpolation between two nearest calibration points.

    kalibrasi_rows: list of KalibrasiTangki ORM objects sorted by tinggi_mm ascending.
    Both height_mm and tinggi_mm are in mm — no unit conversion needed.

    Raises ValueError if:
      - height_mm < 0
      - height_mm > max calibration height (out of range)
      - kalibrasi_rows is empty
    Returns Decimal volume in litres.
    u8   Tabel kalibrasi kosong — tidak dapat menghitung volume0z%Tinggi dipstick tidak boleh negatif: z mmc                     | j                   S )N)	tinggi_mm)rs    5/var/www/html/spbu.com/backend/app/utils/kalibrasi.py<lambda>z$interpolate_volume.<locals>.<lambda>   s        )keyr   zTinggi dipstick z- mm melebihi batas maksimum tabel kalibrasi (z! mm). Periksa pembacaan dipstick.Nz0.001)
ValueErrorr   sortedr
   strvolume_literquantize)r   r   rowsmin_mmmax_mmrowlowerupperh1h2v1v2fractionvolumes                 r   interpolate_volumer"      s    STT73<@3OPP .&;<D!WF"XF6yk *  &x'HJ
 	
 ==I%3s//011 
 6s| EE==I%E]]Y&5=E  }s4800122	U__%	&B	U__%	&B	U''(	)B	U''(	)BB27+H27h&&F??77+,,r   N)__doc__decimalr   listr"    r   r   <module>r'      s%    Y =-' =-4 =-G =-r   