
    'jj                         d dl Z d dlmZ d dlmZmZmZmZ d dlZ	d dl
Z
d dlmZ  ee          j        dz  Z	 ddedee         dee         d	eeef         fd
Zd	eeeeeef                  f         fdZdS )    N)Path)DictListOptionalTuple)OS_ARCH_MATRIXzwebgl_data.dbosvendorrendererreturnc                 ~   | t           vrt          d|  d          t          j        t                    }|                                }|r|r|                    d|  d||f           |                                }|st          d| d| d          |d         d	k    rw|                    d
|  d           |                                }t          d| d| d| 	                                 dd
                    d |D                                  |                                 t          j        |d                   S |                    d|  d|  d           |                                }|                                 |st          d|            t          t          t!          |           \  }}}	}
t#          j        |
t"          j                  }||                                z  }t"          j                            t/          |          |          }t          j        |	|                   S )a  
    Sample a random WebGL vendor/renderer combination and its data based on OS probabilities.
    Optionally use a specific vendor/renderer pair.

    Args:
        os: Operating system ('win', 'mac', or 'lin')
        vendor: Optional specific vendor to use
        renderer: Optional specific renderer to use (requires vendor to be set)

    Returns:
        Dict containing WebGL data including vendor, renderer and additional parameters

    Raises:
        ValueError: If invalid OS provided or no data found for OS/vendor/renderer
    zInvalid OS: z. Must be one of: win, mac, linzSELECT vendor, renderer, data, z: FROM webgl_fingerprints WHERE vendor = ? AND renderer = ?z No WebGL data found for vendor "z" and renderer ""   r   ?SELECT DISTINCT vendor, renderer FROM webgl_fingerprints WHERE z > 0zVendor "z" combination not valid for z.
Possible pairs: z, c              3   4   K   | ]}t          |          V  d S )N)str).0pairs     Y/home/ice/.hermes/hermes-agent/venv/lib/python3.11/site-packages/camoufox/webgl/sample.py	<genexpr>zsample_webgl.<locals>.<genexpr><   s(      ,R,R4SYY,R,R,R,R,R,R       z FROM webgl_fingerprints WHERE zNo WebGL data found for OS: )dtype)p)r   
ValueErrorsqlite3connectDB_PATHcursorexecutefetchonefetchalltitlejoincloseorjsonloadsmaplistzipnparrayfloat64sumrandomchoicelen)r	   r
   r   connr   resultpossible_pairsresults_	data_strsprobsprobs_arrayidxs                r   sample_webglr;      s   & 
KKKKLLL ?7##D[[]]F '( '0b 0 0 0X	
 	
 	

 "" 	ecccX`cccddd!9>>NNZRTZZZ   $__..NU6 U U8 U UY[YaYaYcYc U U#'99,R,R>,R,R,R#R#RU U  
 	

|F1I&&& NNU"UURUUU   ooGJJLLL ><<<=== !sG}55Aq)U (5
333K 1 11K )

3{++{

;
;C <	#'''r   c                     t          j        t                    } |                                 }i }t          D ]5}|                    d| d| d           |                                ||<   6|                                  |S )zh
    Get all possible (vendor, renderer) pairs for all OS, where the probability is greater than 0.
    r   z > 0 ORDER BY z DESC)r   r   r   r   r   r    r"   r%   )r2   r   r3   os_types       r   get_possible_pairsr>   Z   s    
 ?7##D[[]]F 02F! , ,;; ;,3; ; ;	
 	
 	
 !//++wJJLLLMr   )NN)r   pathlibr   typingr   r   r   r   numpyr+   r&   camoufox.pkgmanr   __file__parentr   r   r;   r>    r   r   <module>rF      s          . . . . . . . . . . . .      * * * * * * $x..
/
1 FJI( I(I(c]I(5=c]I(	#s(^I( I( I( I(XDd5c?&;!;<      r   