)Ej)dZddlmZddlmZmZmZmZddlm Z dZ e r ddl m Z ddl mZd Z ddZddZddZddZddZeeeeegZ GddZGddeZdS)z Stuff to translate curve segments to palette values (derived from the corresponding code in GIMP, written by Federico Mena Quintero. See the GIMP distribution for more information.) ) annotations)logpisinsqrt)o8F)Callable)IOg|=middlefloatposreturnc|||kr|tkrdSd|z|z S||z }d|z }|tkrdSdd|z|z zS)Ng??)EPSILONr rs FC:\PYTHON\MyICR_Suite\python\Lib\site-packages\PIL/GimpGradientFile.pylinearr%s` f}} G  39v% %Flv G  3sV++ +cl|tdtt|tz zS)Nr)rmaxrrs rcurvedr4s* 3s88c#fg"6"6777 88rcptt dz tt||zzdzdz S)Ng@r)rrrrs rsiner8s4 "sb6&##6#666 7 7# = DDrcNtdt||dz dzz SNrrrrs rsphere_increasingr!<s) vfc**S0Q66 7 77rcNdtdt||dzz z Srr rs rsphere_decreasingr#@s) cF63//14455 55rc(eZdZUdZded<d d d ZdS) GradientFileNzblist[tuple[float, float, float, list[float], list[float], Callable[[float, float], float]]] | Nonegradiententriesintrtuple[bytes, str]c |jJg}d}|j|\}}}}}} t|D]w} | |dz z } || kr|dz }|j|\}}}}}} || k||z } | tkr | dd} n| ||z | z | |z | z } tt d|d|dz | z|dzzdz}tt d|d|dz | z|dzzdz}tt d|d|dz | z|dzzdz}tt d|d|dz | z|dzzdz}|||z|z|zyd|dfS) NrrrrrRGBA)r&rangerr r)appendjoin)selfr(paletteixx0x1xmrgb0rgb1segmentixwscalergbas r getpalettezGradientFile.getpaletteWs}((( *.-*;'BD$w * *AWq[!Aq&&a26-2C/BD$q&&RA7{{S))bA B!|<<3stAwa0E9DGCDsJKKLLA3stAwa0E9DGCDsJKKLLA3stAwa0E9DGCDsJKKLLA3stAwa0E9DGCDsJKKLLA NN1q519q= ) ) ) )xx  &((r)r')r(r)rr*)__name__ __module__ __qualname__r&__annotations__rCrrr%r%HsM      )))))))rr%ceZdZdZddZdS) GimpGradientFilez(File handler for GIMP's gradient format.fp IO[bytes]rNonec |dsd}t||}|dr&|}t |}g|_t |D]}|}d|ddD}|d|d} }|d} |d d } |d d} tt |d} t |d }|dkrd }t||j || | | | | fdS) Ns GIMP Gradientznot a GIMP gradient filesName: c,g|]}t|SrH)r ).0r<s r z-GimpGradientFile.__init__..s***aq***r rrrr- zcannot handle HSV colour space) readline startswith SyntaxErrorstripr)r&r/splitSEGMENTSOSErrorr0)r2rKmsglinecountr;sr=r5r6r7r8r9r:cspaces r__init__zGimpGradientFile.__init__{sp{{}}''(899 #,Cc"" "{{}} ??9 % % );;==&&((DD  u D DA ##%%A**1SbS6***AqT1Q4B1BQqS6DQrT7Ds1R5zz*G2ZZF{{6cll" M "b"dD'!B C C C C! D DrN)rKrLrrM)rDrErF__doc__rarHrrrJrJxs422DDDDDDrrJN)r r rr rr )rb __future__rmathrrrr_binaryr TYPE_CHECKINGcollections.abcr typingr rrrrr!r#rZr%rJrHrrrisx  #"""""############ ((((((  , , , ,9999EEEE88886666 FD"35F G-)-)-)-)-)-)-)-)`"D"D"D"D"D|"D"D"D"D"Dr