§
    qŠtjÓd  ã                   ó|  — d dl Z d dlZ	 d dlZn# e$ r d dlZY nw xY wd dlZd dlZd dlZd dlZd dl	Z	d dl
mZ d dlmZmZmZmZ ddlmZmZmZmZ ddlmZmZmZmZmZmZmZ ddlm Z  ddl!m"Z" i Z#ej$        dk    rd	e#d
<   i Z%dej&        v rde%d<   nde%d<    G d„ dej'        ¦  «        Z( G d„ dej'        ¦  «        Z)dS )é    N)ÚgivenÚassumeÚsettingsÚexampleé   )ÚCurveFpÚPointJacobiÚINFINITYÚPoint)Úgenerator_256Ú	curve_256Úgenerator_224Úgenerator_brainpoolp160r1Úcurve_brainpoolp160r1Úgenerator_112r2Úcurve_112r2)Úinverse_mod)Ú	randrange)é   é   iˆ  Údeadlinez--fastr   Úmax_examplesé
   c                   óF  — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z edXi e ¤Ž e! e"j#        d e$ e%j&        ¦   «         dz
  ¦  «        ¬¦  «        ¦  «        d „ ¦   «         ¦   «         Z' edXi e ¤Ž e! e"j#        d e$ e%j&        ¦   «         dz
  ¦  «        ¬¦  «        ¦  «         e(d¦  «         e( e$ e%j&        ¦   «         ¦  «        ¦  «        d!„ ¦   «         ¦   «         ¦   «         ¦   «         Z) edXi e ¤Ž e! e"j#        d e$ e%j&        ¦   «         dz
  ¦  «        ¬¦  «         e"j#        d e$ e%j&        ¦   «         dz
  ¦  «        ¬¦  «        ¦  «         e(d"d"¦  «        d#„ ¦   «         ¦   «         ¦   «         Z* edXi e ¤Ž e! e"j#        d e$ e%j&        ¦   «         dz
  ¦  «        ¬¦  «         e"j#        d e$ e%j&        ¦   «         dz
  ¦  «        ¬¦  «         e"j#        d e$ e+j,        ¦   «         dz
  ¦  «        ¬¦  «        ¦  «        d$„ ¦   «         ¦   «         Z-e.j/        j0         edXi e ¤Ž e! e"j#        d e$ e%j&        ¦   «         dz
  ¦  «        ¬¦  «         e"j#        d e$ e%j&        ¦   «         dz
  ¦  «        ¬¦  «         e"j#        d e$ e+j,        ¦   «         dz
  ¦  «        ¬¦  «        ¦  «         e(ddd¦  «         e(d"d"d"¦  «         e(d% e$ e%j&        ¦   «         d%z
  ¦  «        d¦  «         e(d% e$ e%j&        ¦   «         d%z
  ¦  «        d"¦  «        d&„ ¦   «         ¦   «         ¦   «         ¦   «         ¦   «         ¦   «         ¦   «         Z1d'„ Z2e.j/        j0         edXi e ¤Ž e! e"j#        d e$ e%j&        ¦   «         dz
  ¦  «        ¬¦  «         e"j#        d e$ e%j&        ¦   «         dz
  ¦  «        ¬¦  «         e"j3         e"j#        d e$ e+j,        ¦   «         dz
  ¦  «        ¬¦  «        d%d%d(¬)¦  «        ¦  «         e(d%d%d%dg¦  «         e(d%d%d%d"g¦  «         e(d% e$ e%j&        ¦   «         d%z
  ¦  «        d%d"g¦  «         e(d% e$ e%j&        ¦   «         d%z
  ¦  «        d%dg¦  «        d*„ ¦   «         ¦   «         ¦   «         ¦   «         ¦   «         ¦   «         ¦   «         Z4d+„ Z5d,„ Z6d-„ Z7d.„ Z8d/„ Z9d0„ Z:d1„ Z;d2„ Z<d3„ Z=d4„ Z>d5„ Z?d6„ Z@d7„ ZAd8„ ZBd9„ ZCd:„ ZDd;„ ZEd<„ ZFd=„ ZG e! e"j#        d e$ eHj&        ¦   «         dz
  ¦  «        ¬¦  «         e"j#        d e$ eHj&        ¦   «         dz
  ¦  «        ¬¦  «         e"j#        d e$ eHj&        ¦   «         dz
  ¦  «        ¬¦  «        ¦  «         e(d>d%d?¦  «        d@„ ¦   «         ¦   «         ZIdA„ ZJdB„ ZKdC„ ZLdD„ ZMdE„ ZNdF„ ZOdG„ ZPdH„ ZQdI„ ZRdJ„ ZSdK„ ZTdL„ ZUdM„ ZVdN„ ZWe.j/        j0         edXi eX¤Že.j/         Y                     eZj[        ¦   «         dOk    dP¬Q¦  «         e! e"j#        ddR¬¦  «        ¦  «        dS„ ¦   «         ¦   «         ¦   «         ¦   «         Z\e.j/        j0        e.j/         Y                     eZj]        ¦   «         dTk    p eZj[        ¦   «         dOk    dU¬Q¦  «        dV„ ¦   «         ¦   «         Z^dWS )YÚ
TestJacobic                 ó˜  — t          ¦   «         }d}d}d}d}t          |||||¦  «        }|                      |                     ¦   «         |¦  «         |                      |                     ¦   «         |¦  «         |                      |                     ¦   «         |¦  «         |                      |                     ¦   «         |¦  «         d S )Nr   é   r   é   )Úobjectr	   ÚassertEqualÚorderÚassertIsÚcurveÚxÚy)Úselfr#   r$   r%   Úzr!   Úpjs          úO/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/ecdsa/test_jacobi.pyÚtest___init__zTestJacobi.test___init__,   s°   € Ý‘”ˆØˆØˆØˆØˆÝ˜  1 a¨Ñ/Ô/ˆà×Ò˜Ÿš™œ UÑ+Ô+Ð+Ø�Š�b—h’h‘j”j %Ñ(Ô(Ð(Ø×Ò˜Ÿš™œ Ñ#Ô#Ð#Ø×Ò˜Ÿš™œ Ñ#Ô#Ð#Ð#Ð#ó    c                 óÚ   — t          j        t          ¦  «        }t          j        t          ¦  «        }|                      t
          ¦  «        5  ||z    d d d ¦  «         d S # 1 swxY w Y   d S ©N)r	   Úfrom_affiner   r   ÚassertRaisesÚ
ValueError©r&   Úp_aÚp_bs      r)   Útest_add_with_different_curvesz)TestJacobi.test_add_with_different_curves9   s£   € ÝÔ%¥mÑ4Ô4ˆÝÔ%¥mÑ4Ô4ˆà×Ò�zÑ*Ô*ð 	ð 	Ø�#‰IˆIð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   ÁA Á A$Á'A$c                 óF   — |                       t          t          ¦  «         d S r-   )ÚassertNotEqualr   r   ©r&   s    r)   Útest_compare_different_curvesz(TestJacobi.test_compare_different_curves@   s   € Ø×Ò�M­=Ñ9Ô9Ð9Ð9Ð9r+   c                 ód   — t          j        t          ¦  «        }|                      |d¦  «         d S )NÚvalue©r	   r.   r   r6   ©r&   r(   s     r)   Útest_equality_with_non_pointz'TestJacobi.test_equality_with_non_pointC   s.   € ÝÔ$¥]Ñ3Ô3ˆà×Ò˜B Ñ(Ô(Ð(Ð(Ð(r+   c                 ó–   — t          j        t          ¦  «        }|                     ¦   «         }|                      t          |¦  «         d S r-   ©r	   r.   r   Ú	to_affiner    ©r&   r(   Úpws      r)   Útest_conversionzTestJacobi.test_conversionH   s;   € ÝÔ$¥]Ñ3Ô3ˆØ�\Š\‰^Œ^ˆà×Ò�¨Ñ+Ô+Ð+Ð+Ð+r+   c                 ón  — t          j        t          ¦  «        }t          j        ¦   «         }|                     ¦   «         }|                      |                     ¦   «         |                     ¦   «         ¦  «         |                      |                     ¦   «         |                     ¦   «         ¦  «         d S r-   )r	   r.   r   Údoubler    r$   r%   rA   s      r)   Útest_single_doublezTestJacobi.test_single_doubleN   s   € ÝÔ$¥]Ñ3Ô3ˆÝÔ!Ñ#Ô#ˆà�YŠY‰[Œ[ˆà×Ò˜Ÿš™œ §¢¡¤Ñ(Ô(Ð(Ø×Ò˜Ÿš™œ §¢¡¤Ñ(Ô(Ð(Ð(Ð(r+   c                 ó’   — t          t          ddd¦  «        }|                     ¦   «         }|                      |t          ¦  «         d S ©Nr   r   ©r	   r   rE   r"   r
   r<   s     r)   Útest_double_with_zero_pointz&TestJacobi.test_double_with_zero_pointW   ó<   € Ý� A q¨!Ñ,Ô,ˆà�YŠY‰[Œ[ˆà�Š�b�(Ñ#Ô#Ð#Ð#Ð#r+   c                 ó’   — t          t          ddd¦  «        }|                     ¦   «         }|                      |t          ¦  «         d S ©Nr   rI   r<   s     r)   Ú&test_double_with_zero_equivalent_pointz1TestJacobi.test_double_with_zero_equivalent_point^   rK   r+   c                 ó´   — t          t          ddt          j        ¦   «         ¦  «        }|                     ¦   «         }|                      |t
          ¦  «         d S rH   ©r	   r   ÚprE   r"   r
   r<   s     r)   Ú<test_double_with_zero_equivalent_point_non_zero_z_non_zero_yzGTestJacobi.test_double_with_zero_equivalent_point_non_zero_z_non_zero_ye   óB   € Ý� A q­)¬+©-¬-Ñ8Ô8ˆà�YŠY‰[Œ[ˆà�Š�b�(Ñ#Ô#Ð#Ð#Ð#r+   c                 ó´   — t          t          ddt          j        ¦   «         ¦  «        }|                     ¦   «         }|                      |t
          ¦  «         d S rM   rP   r<   s     r)   Ú1test_double_with_zero_equivalent_point_non_zero_zz<TestJacobi.test_double_with_zero_equivalent_point_non_zero_zl   rS   r+   c                 ó¸   — t          j        t          ¦  «        }|                     ¦   «         }|                      ||¦  «         |                      ||¦  «         d S r-   r?   ©r&   r(   Úpas      r)   Útest_compare_with_affine_pointz)TestJacobi.test_compare_with_affine_points   sQ   € ÝÔ$¥]Ñ3Ô3ˆØ�\Š\‰^Œ^ˆà×Ò˜˜RÑ Ô Ð Ø×Ò˜˜RÑ Ô Ð Ð Ð r+   c                 ó’   — t          t          ddd¦  «        }|                     ¦   «         }|                      |t          ¦  «         d S rM   )r	   r   r@   r"   r
   rW   s      r)   Útest_to_affine_with_zero_pointz)TestJacobi.test_to_affine_with_zero_pointz   s<   € Ý� A q¨!Ñ,Ô,ˆà�\Š\‰^Œ^ˆà�Š�b�(Ñ#Ô#Ð#Ð#Ð#r+   c                 óº   — t          j        t          ¦  «        }|                     ¦   «         }||z   }|                      ||                     ¦   «         ¦  «         d S r-   ©r	   r.   r   r@   r    rE   ©r&   r(   rX   Úss       r)   Útest_add_with_affine_pointz%TestJacobi.test_add_with_affine_point�   óL   € ÝÔ$¥]Ñ3Ô3ˆØ�\Š\‰^Œ^ˆà�‰Gˆà×Ò˜˜BŸIšI™KœKÑ(Ô(Ð(Ð(Ð(r+   c                 óº   — t          j        t          ¦  «        }|                     ¦   «         }||z   }|                      ||                     ¦   «         ¦  «         d S r-   r]   r^   s       r)   Útest_radd_with_affine_pointz&TestJacobi.test_radd_with_affine_point‰   ra   r+   c                 óx   — t          j        t          ¦  «        }|t          z   }|                      ||¦  «         d S r-   )r	   r.   r   r
   r    )r&   r(   r_   s      r)   Útest_add_with_infinityz!TestJacobi.test_add_with_infinity‘   s7   € ÝÔ$¥]Ñ3Ô3ˆà•‰Mˆà×Ò˜˜BÑÔÐÐÐr+   c                 óÀ   — t          j        t          ¦  «                             ¦   «         }t          t          ddd¦  «        }||z   }|                      ||¦  «         d S rM   )r	   r.   r   r@   r   r"   )r&   rX   r(   r_   s       r)   Útest_add_zero_point_to_affinez(TestJacobi.test_add_zero_point_to_affine˜   sT   € ÝÔ$¥]Ñ3Ô3×=Ò=Ñ?Ô?ˆÝ� A q¨!Ñ,Ô,ˆà�‰Gˆà�Š�a˜ÑÔÐÐÐr+   c                 óx   — t          j        t          ¦  «        }|dz  }|                      |t          ¦  «         d S rM   )r	   r.   r   r"   r
   r<   s     r)   Útest_multiply_by_zeroz TestJacobi.test_multiply_by_zero    s5   € ÝÔ$¥]Ñ3Ô3ˆà�!‰Vˆà�Š�b�(Ñ#Ô#Ð#Ð#Ð#r+   c                 ót   — t          t          ddd¦  «        }|dz  }|                      |t          ¦  «         d S rH   )r	   r   r"   r
   r<   s     r)   Útest_zero_point_multiply_by_onez*TestJacobi.test_zero_point_multiply_by_one§   s8   € Ý� A q¨!Ñ,Ô,ˆà�!‰Vˆà�Š�b�(Ñ#Ô#Ð#Ð#Ð#r+   c                 ó>  — t          j        t          ¦  «        }t          dz  }|dz  }|                      |                     ¦   «         |                     ¦   «         ¦  «         |                      |                     ¦   «         |                     ¦   «         ¦  «         d S ©Nr   ©r	   r.   r   r    r$   r%   rA   s      r)   Útest_multiply_by_onezTestJacobi.test_multiply_by_one®   ów   € ÝÔ$¥]Ñ3Ô3ˆÝ˜QÑˆà�!‰Vˆà×Ò˜Ÿš™œ §¢¡¤Ñ(Ô(Ð(Ø×Ò˜Ÿš™œ §¢¡¤Ñ(Ô(Ð(Ð(Ð(r+   c                 ó>  — t          j        t          ¦  «        }t          dz  }|dz  }|                      |                     ¦   «         |                     ¦   «         ¦  «         |                      |                     ¦   «         |                     ¦   «         ¦  «         d S ©Nr   rn   rA   s      r)   Útest_multiply_by_twozTestJacobi.test_multiply_by_two·   rp   r+   c                 ó‚   — t          j        t          ¦  «        }t          dz  }d|z  }|                      ||¦  «         d S rr   ©r	   r.   r   r    rA   s      r)   Útest_rmul_by_twozTestJacobi.test_rmul_by_twoÀ   sA   € ÝÔ$¥]Ñ3Ô3ˆÝ˜QÑˆà�‰Vˆà×Ò˜˜RÑ Ô Ð Ð Ð r+   c                 ón   — t          j        t          ¦  «        }|                      |t          ¦  «         d S r-   )r	   r.   r   r6   r
   r<   s     r)   Ú#test_compare_non_zero_with_infinityz.TestJacobi.test_compare_non_zero_with_infinityÈ   s.   € ÝÔ$¥]Ñ3Ô3ˆà×Ò˜B¥Ñ)Ô)Ð)Ð)Ð)r+   c                 ój   — t          t          ddd¦  «        }|                      |t          ¦  «         d S )Nr   r   ©r	   r   r    r
   r<   s     r)   Ú-test_compare_non_zero_bad_scale_with_infinityz8TestJacobi.test_compare_non_zero_bad_scale_with_infinityÍ   s1   € Ý� A q¨!Ñ,Ô,ˆØ×Ò˜�XÑ&Ô&Ð&Ð&Ð&r+   c                 óÔ   — t          ddd¦  «        }t          |ddd¦  «        }|                      |                     dd¦  «        ¦  «         |                      |t
          ¦  «         d S ©Né   r   r   ©r   r	   Ú
assertTrueÚcontains_pointr6   r
   ©r&   Úc_23r(   s      r)   Ú"test_eq_x_0_on_curve_with_infinityz-TestJacobi.test_eq_x_0_on_curve_with_infinityÑ   ód   € Ý�r˜1˜aÑ Ô ˆÝ˜˜q ! QÑ'Ô'ˆà�Š˜×+Ò+¨A¨qÑ1Ô1Ñ2Ô2Ð2à×Ò˜B¥Ñ)Ô)Ð)Ð)Ð)r+   c                 óÔ   — t          ddd¦  «        }t          |ddd¦  «        }|                      |                     dd¦  «        ¦  «         |                      |t
          ¦  «         d S )Nr~   r   r   r   r   r‚   s      r)   Ú"test_eq_y_0_on_curve_with_infinityz-TestJacobi.test_eq_y_0_on_curve_with_infinityÙ   r…   r+   c                 óœ   — t          ddd¦  «        }t          |ddd¦  «        }t          |ddd¦  «        }|                      ||¦  «         d S )Nr~   r   r   é   )r   r	   r6   )r&   rƒ   r2   r3   s       r)   Útest_eq_with_same_x_different_yz*TestJacobi.test_eq_with_same_x_different_yá   sU   € Ý�r˜1˜aÑ Ô ˆÝ˜$  2 qÑ)Ô)ˆÝ˜$  1 aÑ(Ô(ˆà×Ò˜C Ñ%Ô%Ð%Ð%Ð%r+   c                 ój   — t          t          ddd¦  «        }|                      |t          ¦  «         d S rM   rz   r<   s     r)   Ú%test_compare_zero_point_with_infinityz0TestJacobi.test_compare_zero_point_with_infinityè   s1   € Ý� A q¨!Ñ,Ô,ˆà×Ò˜�XÑ&Ô&Ð&Ð&Ð&r+   c                 ó–   — t          j        t          ¦  «        }|                     ¦   «         }|dz  }|                      ||¦  «         d S rr   )r	   r.   r   rE   r    )r&   r(   ÚdblÚmlpls       r)   Ú!test_compare_double_with_multiplyz,TestJacobi.test_compare_double_with_multiplyí   sD   € ÝÔ$¥]Ñ3Ô3ˆØ�iŠi‰kŒkˆØ�A‰vˆà×Ò˜˜dÑ#Ô#Ð#Ð#Ð#r+   r   r   )Ú	min_valueÚ	max_valuec                 ó`  — t          j        t          ¦  «        }|                     ¦   «         |z  }||z  }|                      |                     ¦   «         |                     ¦   «         f|                     ¦   «         |                     ¦   «         f¦  «         |                      ||¦  «         d S r-   )r	   r.   r   r@   r    r$   r%   )r&   Úmulr(   rB   s       r)   Útest_multiplicationszTestJacobi.test_multiplicationsô   sŒ   € õ Ô$Õ%>Ñ?Ô?ˆØ�\Š\‰^Œ^˜cÑ!ˆà�#‰Xˆà×Ò˜"Ÿ$š$™&œ& "§$¢$¡&¤&Ð)¨B¯DªD©F¬F°B·D²D±F´FÐ+;Ñ<Ô<Ð<Ø×Ò˜˜RÑ Ô Ð Ð Ð r+   c                 óº   — t           }|                      |j        ¦  «         t          j        t           ¦  «        }||z  }||z  }|                      ||¦  «         d S r-   )r   r€   Ú_PointJacobi__precomputer	   r.   r    )r&   r”   Úprecompr(   ÚaÚbs         r)   Útest_precomputezTestJacobi.test_precompute  s]   € õ ,ˆØ�Š˜Ô8Ñ9Ô9Ð9ÝÔ$Õ%>Ñ?Ô?ˆà�c‰MˆØ�‰Hˆà×Ò˜˜AÑÔÐÐÐr+   r   c                 óÖ   — t          j        t          ¦  «        }t          j        ||z  ¦  «        }t          j        ||z  ¦  «        }||z   }|                      ||||z   z  ¦  «         d S r-   )r	   r.   r   r    )r&   Úa_mulÚb_mulÚj_gr™   rš   Úcs          r)   Útest_add_scaled_pointsz!TestJacobi.test_add_scaled_points  sk   € õ Ô%Õ&?Ñ@Ô@ˆÝÔ# C¨%¡KÑ0Ô0ˆÝÔ# C¨%¡KÑ0Ô0ˆà�‰Eˆà×Ò˜˜C 5¨5¡=Ñ1Ñ2Ô2Ð2Ð2Ð2r+   c                 óÚ  — t          j        t          ¦  «        }t          j        ||z  ¦  «        }t          j        ||z  ¦  «        }t          j        ¦   «         }t          t          ||¦  «        ¦  «         ||z  |z  }t          t          |                     ¦   «         |z  |z  |                     ¦   «         |z  |z  |z  |¦  «        }||z   }	|  	                    |	|||z   z  ¦  «         d S r-   ©
r	   r.   r   r   rQ   r   r   r$   r%   r    ©
r&   r�   rž   Únew_zrŸ   r™   rš   rQ   Únew_zzr    s
             r)   Útest_add_one_scaled_pointz$TestJacobi.test_add_one_scaled_point(  sã   € õ Ô%Õ&?Ñ@Ô@ˆÝÔ# C¨%¡KÑ0Ô0ˆÝÔ# C¨%¡KÑ0Ô0ˆå!Ô#Ñ%Ô%ˆå�{˜5 !Ñ$Ô$Ñ%Ô%Ð%à˜‘ Ñ"ˆåÝ!Ø�CŠC‰EŒE�F‰N˜QÑØ�CŠC‰EŒE�F‰N˜UÑ" QÑ&Øñ	
ô 
ˆð �‰Eˆà×Ò˜˜C 5¨5¡=Ñ1Ñ2Ô2Ð2Ð2Ð2r+   r   c                 ón  — t          j        t          ¦  «        }t          j        ||z  ¦  «        }t          j        ||z  ¦  «        }t          j        ¦   «         }t          t          ||¦  «        ¦  «         ||z  |z  }t          t          |                     ¦   «         |z  |z  |                     ¦   «         |z  |z  |z  |¦  «        }t          t          |                     ¦   «         |z  |z  |                     ¦   «         |z  |z  |z  |¦  «        }||z   }	|  	                    |	|||z   z  ¦  «         d S r-   r£   r¤   s
             r)   Útest_add_same_scale_pointsz%TestJacobi.test_add_same_scale_pointsH  s'  € õ  Ô%Õ&?Ñ@Ô@ˆÝÔ# C¨%¡KÑ0Ô0ˆÝÔ# C¨%¡KÑ0Ô0ˆå!Ô#Ñ%Ô%ˆå�{˜5 !Ñ$Ô$Ñ%Ô%Ð%à˜‘ Ñ"ˆåÝ!Ø�CŠC‰EŒE�F‰N˜QÑØ�CŠC‰EŒE�F‰N˜UÑ" QÑ&Øñ	
ô 
ˆõ Ý!Ø�CŠC‰EŒE�F‰N˜QÑØ�CŠC‰EŒE�F‰N˜UÑ" QÑ&Øñ	
ô 
ˆð �‰Eˆà×Ò˜˜C 5¨5¡=Ñ1Ñ2Ô2Ð2Ð2Ð2r+   c                 óà  — t           }t          j        ¦   «         }|dz  }|                     ¦   «          d}t	          t          |                     ¦   «         |dz  z  |z  |                     ¦   «         |dz  z  |z  |¦  «        }t	          t          |                     ¦   «         |dz  z  |z  |                     ¦   «         |dz  z  |z  |¦  «        }||z   }|                      |||z   ¦  «         d S )Né   é   r   r   ©r   r   rQ   Úscaler	   r$   r%   r    )r&   rŸ   rQ   r™   Úz1r$   r%   r    s           r)   Ú!test_add_same_scale_points_staticz,TestJacobi.test_add_same_scale_points_statics  sç   € Ý'ˆÝ!Ô#Ñ%Ô%ˆØ�"‰HˆØ	�Š‰	Œ	ˆ	ØˆÝÝ!Ø�CŠC‰EŒE�B˜‘E‰M˜AÑØ�CŠC‰EŒE�B˜‘E‰M˜AÑØñ	
ô 
ˆõ Ý!Ø�CŠC‰EŒE�B˜‘E‰M˜AÑØ�CŠC‰EŒE�B˜‘E‰M˜AÑØñ	
ô 
ˆð �‰Eˆà×Ò˜˜A ™EÑ"Ô"Ð"Ð"Ð"r+   T)Úmin_sizeÚmax_sizeÚuniquec                 ó0  — t          j        t          ¦  «        }t          j        ||z  ¦  «        }t          j        ||z  ¦  «        }t          j        ¦   «         }t          t          |d         |¦  «        ¦  «         t          t          |d         |¦  «        ¦  «         |d         |d         z  |z  }|d         |d         z  |z  }	t          t          |                     ¦   «         |z  |z  |                     ¦   «         |z  |d         z  |z  |d         ¦  «        }t          t          |                     ¦   «         |	z  |z  |                     ¦   «         |	z  |d         z  |z  |d         ¦  «        }||z   }
|  	                    |
|||z   z  ¦  «         d S rH   r£   )r&   r�   rž   r¥   rŸ   r™   rš   rQ   Únew_zz0Únew_zz1r    s              r)   Útest_add_different_scale_pointsz*TestJacobi.test_add_different_scale_pointsŠ  sw  € õ. Ô%Õ&?Ñ@Ô@ˆÝÔ# C¨%¡KÑ0Ô0ˆÝÔ# C¨%¡KÑ0Ô0ˆå!Ô#Ñ%Ô%ˆå�{˜5 œ8 QÑ'Ô'Ñ(Ô(Ð(Ý�{˜5 œ8 QÑ'Ô'Ñ(Ô(Ð(à˜”(˜U 1œXÑ%¨Ñ)ˆØ˜”(˜U 1œXÑ%¨Ñ)ˆåÝ!Ø�CŠC‰EŒE�G‰O˜aÑØ�CŠC‰EŒE�G‰O˜e AœhÑ&¨Ñ*Ø�!ŒHñ	
ô 
ˆõ Ý!Ø�CŠC‰EŒE�G‰O˜aÑØ�CŠC‰EŒE�G‰O˜e AœhÑ&¨Ñ*Ø�!ŒHñ	
ô 
ˆð �‰Eˆà×Ò˜˜C 5¨5¡=Ñ1Ñ2Ô2Ð2Ð2Ð2r+   c                 óä  — t           }t          j        ¦   «         }|dz  }|                     ¦   «          d}t	          t          |                     ¦   «         |dz  z  |z  |                     ¦   «         |dz  z  |z  |¦  «        }d}t	          t          |                     ¦   «         |dz  z  |z  |                     ¦   «         |dz  z  |z  |¦  «        }||z   }|                      |||z   ¦  «         d S )Nr«   r¬   r   r   é   r­   )	r&   rŸ   rQ   r™   r¯   r$   Úz2r%   r    s	            r)   Ú&test_add_different_scale_points_staticz1TestJacobi.test_add_different_scale_points_static¾  sì   € Ý'ˆÝ!Ô#Ñ%Ô%ˆØ�"‰HˆØ	�Š‰	Œ	ˆ	ØˆÝÝ!Ø�CŠC‰EŒE�B˜‘E‰M˜AÑØ�CŠC‰EŒE�B˜‘E‰M˜AÑØñ	
ô 
ˆð ˆÝÝ!Ø�CŠC‰EŒE�B˜‘E‰M˜AÑØ�CŠC‰EŒE�B˜‘E‰M˜AÑØñ	
ô 
ˆð �‰Eˆà×Ò˜˜A ™EÑ"Ô"Ð"Ð"Ð"r+   c                 óê  — t           }t          j        ¦   «         }|dz  }|                     ¦   «          |dz  }d}t	          t          |                     ¦   «         |dz  z  |z  |                     ¦   «         |dz  z  |z  |¦  «        }t	          t          |                     ¦   «         |dz  z  |z  |                     ¦   «         |dz  z  |z  |¦  «        }||z   }|                      |||z   ¦  «         d S )Nr«   é   r¬   r   r   r­   )	r&   rŸ   rQ   r™   rš   r'   r$   r%   r    s	            r)   Ú+test_add_different_points_same_scale_staticz6TestJacobi.test_add_different_points_same_scale_staticÖ  sð   € Ý'ˆÝ!Ô#Ñ%Ô%ˆØ�"‰HˆØ	�Š‰	Œ	ˆ	Ø�"‰HˆØˆÝÝ!Ø�CŠC‰EŒE�A�q‘D‰L˜1ÑØ�CŠC‰EŒE�A�q‘D‰L˜1ÑØñ	
ô 
ˆõ Ý!Ø�CŠC‰EŒE�A�q‘D‰L˜1ÑØ�CŠC‰EŒE�A�q‘D‰L˜1ÑØñ	
ô 
ˆð �‰Eˆà×Ò˜˜A ™EÑ"Ô"Ð"Ð"Ð"r+   c                 ó¼  — t           }t          j        ¦   «         }d}||z  }|                     ¦   «          t	          t          |                     ¦   «         |dz  z  |z  |                     ¦   «         |dz  z  |z  |¦  «        }t	          t          |                     ¦   «         |                     ¦   «         d¦  «        }||z   }|                      |||z   ¦  «         d S )Nr«   r   r   r   )r   r   rQ   r®   r	   r$   r%   r    )r&   rŸ   rQ   r'   r™   r$   r%   r    s           r)   Ú5test_add_same_point_different_scale_second_z_1_staticz@TestJacobi.test_add_same_point_different_scale_second_z_1_staticî  sÊ   € ÝˆÝŒM‰OŒOˆØˆØ�!‰GˆØ	�Š‰	Œ	ˆ	åÝØ�CŠC‰EŒE�A�q‘D‰L˜1ÑØ�CŠC‰EŒE�A�q‘D‰L˜1ÑØñ	
ô 
ˆõ ÝØ�CŠC‰EŒEØ�CŠC‰EŒEØñ	
ô 
ˆð �‰Eˆà×Ò˜˜A ™EÑ"Ô"Ð"Ð"Ð"r+   c                 óx  — t           }d}||z  }|                     ¦   «          | }t          t          |                     ¦   «         |                     ¦   «         d¦  «        }t          t          |                     ¦   «         |                     ¦   «         d¦  «        }|                      t          ||z   ¦  «         d S )Nr«   r   )r   r®   r	   r   r$   r%   r    r
   )r&   rŸ   r'   r™   rš   r$   r%   s          r)   Útest_add_to_infinity_staticz&TestJacobi.test_add_to_infinity_static  s£   € ÝˆàˆØ�!‰GˆØ	�Š‰	Œ	ˆ	àˆBˆåÝØ�CŠC‰EŒEØ�CŠC‰EŒEØñ	
ô 
ˆõ ÝØ�CŠC‰EŒEØ�CŠC‰EŒEØñ	
ô 
ˆð 	×Ò� 1 q¡5Ñ)Ô)Ð)Ð)Ð)r+   c                 óv   — t          j        t          ¦  «        }|                      |dz  ||z   |z   ¦  «         d S )Nr   ru   ©r&   rŸ   s     r)   Útest_add_point_3_timesz!TestJacobi.test_add_point_3_times  s:   € ÝÔ%¥mÑ4Ô4ˆà×Ò˜˜q™ #¨¡)¨c¡/Ñ2Ô2Ð2Ð2Ð2r+   c                 óÖ   — t          t          t          j        ¦   «         t          j        ¦   «         d¦  «        }|                      |t          j        ¦   «         z  t          ¦  «         d S rm   )r	   r   r   r$   r%   r    r!   r
   rÄ   s     r)   Útest_mul_without_orderz!TestJacobi.test_mul_without_order#  sO   € Ý�)¥]¤_Ñ%6Ô%6½¼Ñ8IÔ8IÈ1ÑMÔMˆà×Ò˜�}Ô2Ñ4Ô4Ñ4µhÑ?Ô?Ð?Ð?Ð?r+   c                 ó˜   — t          j        t          ¦  «        }|                      ||                     dt
          d¦  «        ¦  «         d S rm   ©r	   r.   r   r    Úmul_addr
   rÄ   s     r)   Útest_mul_add_infzTestJacobi.test_mul_add_inf(  s>   € ÝÔ%¥mÑ4Ô4ˆà×Ò˜˜cŸkšk¨!­X°qÑ9Ô9Ñ:Ô:Ð:Ð:Ð:r+   c                 ó”   — t          j        t          ¦  «        }|                      |dz  |                     d|d¦  «        ¦  «         d S )Nr   r   ©r	   r.   r   r    rÊ   rÄ   s     r)   Útest_mul_add_samezTestJacobi.test_mul_add_same-  sB   € ÝÔ%¥mÑ4Ô4ˆà×Ò˜˜q™ #§+¢+¨a°°aÑ"8Ô"8Ñ9Ô9Ð9Ð9Ð9r+   c                 óB  — t          j        t          d¦  «        }t          j        |dz  d¦  «        }|                      |dz  ||z   ¦  «         |                      |dz  |dz  |dz  z   ¦  «         |                      |dz  |                     d|d¦  «        ¦  «         d S )NTéÿ   é   iþ  é   r   ©r	   r.   r   r    rÊ   ©r&   rŸ   rš   s      r)   Útest_mul_add_precomputez"TestJacobi.test_mul_add_precompute2  s¡   € ÝÔ%Õ&?ÀÑFÔFˆÝÔ# C¨#¡I¨tÑ4Ô4ˆà×Ò˜˜s™ C¨!¡GÑ,Ô,Ð,Ø×Ò˜ Ñ,¨c°A©g¸¸A¹©oÑ>Ô>Ð>Ø×Ò˜ Ñ,¨c¯kªk¸!¸QÀÑ.BÔ.BÑCÔCÐCÐCÐCr+   c                 óB  — t          j        t          d¦  «        }t          j        |dz  d¦  «        }|                      |dz  ||z   ¦  «         |                      |dz  |dz  |dz  z   ¦  «         |                      |dz  |                     d|d¦  «        ¦  «         d S )NTrÐ   rÑ   éþð é ÿ  éðð  rÓ   rÔ   s      r)   Útest_mul_add_precompute_largez(TestJacobi.test_mul_add_precompute_large:  s¸   € ÝÔ%Õ&?ÀÑFÔFˆÝÔ# C¨#¡I¨tÑ4Ô4ˆà×Ò˜˜s™ C¨!¡GÑ,Ô,Ð,Ø×ÒØÐ(Ñ)¨3°©<¸!¸f¹*Ñ+Dñ	
ô 	
ð 	
ð 	×ÒØÐ(Ñ)¨3¯;ª;°v¸qÀ&Ñ+IÔ+Iñ	
ô 	
ð 	
ð 	
ð 	
r+   c                 óœ   — t          j        t          ¦  «        }|dz  }|                     d|d¦  «        }|                      ||¦  «         d S )Nr   r   r   )r	   r.   r   rÊ   r    )r&   rŸ   r™   rš   s       r)   Útest_mul_add_to_mulzTestJacobi.test_mul_add_to_mulF  sL   € ÝÔ%¥mÑ4Ô4ˆà�!‰GˆØ�KŠK˜˜3 Ñ"Ô"ˆà×Ò˜˜AÑÔÐÐÐr+   c                 óž   — t          j        t          ¦  «        }|dz  }|                      |                     d|d¦  «        |dz  ¦  «         d S )Nr   r   r   rÍ   )r&   rŸ   Úw_as      r)   Útest_mul_add_differntz TestJacobi.test_mul_add_differntN  sK   € ÝÔ%¥mÑ4Ô4ˆà�A‰gˆà×Ò˜Ÿš Q¨¨QÑ/Ô/°°q±Ñ9Ô9Ð9Ð9Ð9r+   c                 ó´   — t          j        t          ¦  «        }|dz  }|dz  }|                      |                     d|d¦  «        |dz  |dz  z   ¦  «         d S )Nr   r   r   rÍ   )r&   rŸ   rÞ   Úw_bs       r)   Útest_mul_add_slightly_differentz*TestJacobi.test_mul_add_slightly_differentU  s]   € ÝÔ%¥mÑ4Ô4ˆà�A‰gˆØ�A‰gˆà×Ò˜Ÿš Q¨¨QÑ/Ô/°°q±¸3À¹7Ñ1BÑCÔCÐCÐCÐCr+   c                 óî   — t          j        t          ¦  «        }t          dz  }t          dz  }|dz  }|                     d|d¦  «        }|                      |                     ¦   «         ||z   ¦  «         d S )NrÐ   i€�  é¨   éð   ©r	   r.   r   rÊ   r    r@   ©r&   rŸ   rÞ   rá   Új_bÚrets         r)   Útest_mul_addzTestJacobi.test_mul_add]  sl   € ÝÔ%¥mÑ4Ô4ˆå˜cÑ!ˆÝ˜{Ñ+ˆØ�D‰jˆà�kŠk˜#˜s DÑ)Ô)ˆà×Ò˜Ÿš™œ¨#°©)Ñ4Ô4Ð4Ð4Ð4r+   c                 óî   — t          j        t          ¦  «        }t          dz  }t          dz  }|dz  }|                     d|d¦  «        }|                      |                     ¦   «         ||z   ¦  «         d S )NrÐ   r   rä   ræ   rç   s         r)   Útest_mul_add_zerozTestJacobi.test_mul_add_zeroh  sl   € ÝÔ%¥mÑ4Ô4ˆå˜cÑ!ˆÝ˜xÑ(ˆà�D‰jˆà�kŠk˜#˜s AÑ&Ô&ˆà×Ò˜Ÿš™œ¨#°©)Ñ4Ô4Ð4Ð4Ð4r+   c                 ó>  — t          j        t          ¦  «        }t          j        |dz  ¦  «        }|                      |dz  ||z   ¦  «         |                      |dz  |dz  |dz  z   ¦  «         |                      |dz  |                     d|d¦  «        ¦  «         d S )NrÐ   rÑ   r×   rØ   rÙ   rÍ   rÔ   s      r)   Útest_mul_add_largezTestJacobi.test_mul_add_larget  s³   € ÝÔ%¥mÑ4Ô4ˆÝÔ# C¨#¡IÑ.Ô.ˆà×Ò˜˜s™ C¨!¡GÑ,Ô,Ð,Ø×ÒØÐ(Ñ)¨3°©<¸!¸f¹*Ñ+Dñ	
ô 	
ð 	
ð 	×ÒØÐ(Ñ)¨3¯;ª;°v¸qÀ&Ñ+IÔ+Iñ	
ô 	
ð 	
ð 	
ð 	
r+   c                 ó  — t          j        t          ¦  «        }t          j        ¦   «         }t          j        t          dz  ¦  «        }|                      |                     |dz  ||dz  ¦  «        t          ¦  «         d S )NrÑ   )r	   r.   r   r!   r    rÊ   r
   )r&   rŸ   r!   rš   s       r)   Ú$test_mul_add_with_infinity_as_resultz/TestJacobi.test_mul_add_with_infinity_as_result€  si   € ÝÔ%¥mÑ4Ô4ˆåÔ#Ñ%Ô%ˆåÔ#¥M°CÑ$7Ñ8Ô8ˆà×Ò˜Ÿš U¨S¡[°!°U¸c±\ÑBÔBÅHÑMÔMÐMÐMÐMr+   c                 ó¼  — t          t          t          j        ¦   «         t          j        ¦   «         d¦  «        }t          j        ¦   «         }t          dz  }|                     ¦   «          t          t          |                     ¦   «         |                     ¦   «         d¦  «        }|                      |                     |dz  ||dz  ¦  «        t          ¦  «         d S )Nr   é"   )
r	   r   r   r$   r%   r!   r®   r    rÊ   r
   )r&   rŸ   r!   rá   rš   s        r)   Útest_mul_add_without_orderz%TestJacobi.test_mul_add_without_order‰  s¡   € Ý�)¥]¤_Ñ%6Ô%6½¼Ñ8IÔ8IÈ1ÑMÔMˆåÔ#Ñ%Ô%ˆå˜bÑ ˆØ�	Š	‰Œˆå�	 3§5¢5¡7¤7¨C¯EªE©G¬G°QÑ7Ô7ˆà×Ò˜Ÿš U¨R¡Z°°E¸R±KÑ@Ô@Å(ÑKÔKÐKÐKÐKr+   c                 óª   — t          j        t          dz  ¦  «        }d| z  }|                      |                     d|d¦  «        t
          ¦  «         d S )Né   r   r   rÉ   )r&   rŸ   Údbl_negs      r)   Ú,test_mul_add_with_doubled_negation_of_itselfz7TestJacobi.test_mul_add_with_doubled_negation_of_itself•  sN   € ÝÔ%¥m°bÑ&8Ñ9Ô9ˆà˜�t‘*ˆà×Ò˜Ÿš Q¨°Ñ3Ô3µXÑ>Ô>Ð>Ð>Ð>r+   iµ  iÝ  c                 ó¸   — t          j        t          ¦  «        }t          |z  }|                     |||¦  «        }|                      |||z  ||z  z   ¦  «         d S r-   )r	   r.   r   rÊ   r    )r&   Úmul1Úmul2Úmul3r2   r3   Úress          r)   Útest_mul_add_randomzTestJacobi.test_mul_add_randomœ  s\   € õ Ô%¥oÑ6Ô6ˆÝ Ñ$ˆà�kŠk˜$  TÑ*Ô*ˆà×Ò˜˜c D™j¨3°©:Ñ5Ñ6Ô6Ð6Ð6Ð6r+   c                 óÂ   — t          t          dddd¦  «        dddd¬¦  «        }t          t          dddd¦  «        dddd¬¦  «        }|                      ||¦  «         d S ©Nr~   r   r   r   ©r#   r$   r%   r'   r!   )r	   r   r    )r&   Úpj1Úpj2s      r)   Útest_equalityzTestJacobi.test_equalityª  sj   € Ý¥¨¨A¨q°!Ñ 4Ô 4¸¸QÀ!È1ÐMÑMÔMˆÝ¥¨¨A¨q°!Ñ 4Ô 4¸¸QÀ!È1ÐMÑMÔMˆØ×Ò˜˜cÑ"Ô"Ð"Ð"Ð"r+   c                 ód   — t          j        t          ¦  «        }|                      |d¦  «         d S )Nr½   r;   rÄ   s     r)   Ú!test_equality_with_invalid_objectz,TestJacobi.test_equality_with_invalid_object¯  s.   € ÝÔ%¥mÑ4Ô4ˆà×Ò˜C Ñ$Ô$Ð$Ð$Ð$r+   c                 ó–   — t          j        t          ¦  «        }t          j        t          ¦  «        }|                      ||¦  «         d S r-   )r	   r.   r   r   r6   r1   s      r)   Útest_equality_with_wrong_curvesz*TestJacobi.test_equality_with_wrong_curves´  s>   € ÝÔ%¥mÑ4Ô4ˆÝÔ%¥mÑ4Ô4ˆà×Ò˜C Ñ%Ô%Ð%Ð%Ð%r+   c           	      ó¾   — t          t          dddd¦  «        dddd¬¦  «        }|                     ddddddd¦  «        \  }}}|                      |||fd¦  «         d S )	Nr~   r   r   r   r   rÒ   r   )r   r   r   )r	   r   Ú_addr    )r&   r  r$   r%   r'   s        r)   Útest_add_with_point_at_infinityz*TestJacobi.test_add_with_point_at_infinityº  sm   € Ý¥¨¨A¨q°!Ñ 4Ô 4¸¸QÀ!È1ÐMÑMÔMˆØ—(’(˜1˜a  A q¨!¨RÑ0Ô0‰ˆˆ1ˆaà×Ò˜!˜Q ˜ IÑ.Ô.Ð.Ð.Ð.r+   c                 ó¶  — t          ddd¦  «        }t          |ddd¦  «        }|                     ¦   «         }|                      |                     ¦   «         |                     ¦   «         fd¦  «         |                      |t          ¦  «         |                     ¦   «         }|                      |t          ¦  «         |                      |t          ¦  «         d S ©Nr~   r   r«   é   ©r   r   )	r   r	   rE   r    r$   r%   r6   r
   r"   ©r&   rƒ   rQ   Úp2Úp3s        r)   Útest_double_to_infinityz"TestJacobi.test_double_to_infinityÀ  s±   € Ý�r˜1˜aÑ Ô ˆÝ˜˜b " aÑ(Ô(ˆØ�XŠX‰ZŒZˆØ×Ò˜"Ÿ$š$™&œ& "§$¢$¡&¤&Ð)¨6Ñ2Ô2Ð2Ø×Ò˜B¥Ñ)Ô)Ð)Ø�YŠY‰[Œ[ˆØ×Ò˜�XÑ&Ô&Ð&Ø�Š�b�(Ñ#Ô#Ð#Ð#Ð#r+   c                 óì   — t          ddd¦  «        }t          |ddd¦  «        }|                     ¦   «         }|                      |                     ¦   «         |                     ¦   «         fd¦  «         d S )Nr~   r   r   é	   )r   é   )r   r	   rE   r    r$   r%   )r&   Úc_23_2rQ   r  s       r)   Útest_double_to_x_0zTestJacobi.test_double_to_x_0Ê  sd   € Ý˜˜Q Ñ"Ô"ˆÝ˜  1 aÑ(Ô(ˆØ�XŠX‰ZŒZˆà×Ò˜"Ÿ$š$™&œ& "§$¢$¡&¤&Ð)¨7Ñ3Ô3Ð3Ð3Ð3r+   c                 óz  — t          ddd¦  «        }t          |ddd¦  «        }|dz  }|                      |                     ¦   «         |                     ¦   «         fd¦  «         |                      |t          ¦  «         |dz  }|                      |t          ¦  «         |                      |t          ¦  «         d S )Nr~   r   r«   r  r   r  ©r   r	   r    r$   r%   r6   r
   r"   r  s        r)   Útest_mul_to_infinityzTestJacobi.test_mul_to_infinityÑ  s©   € Ý�r˜1˜aÑ Ô ˆÝ˜˜b " aÑ(Ô(ˆØ�‰UˆØ×Ò˜"Ÿ$š$™&œ& "§$¢$¡&¤&Ð)¨6Ñ2Ô2Ð2Ø×Ò˜B¥Ñ)Ô)Ð)Ø�!‰VˆØ×Ò˜�XÑ&Ô&Ð&Ø�Š�b�(Ñ#Ô#Ð#Ð#Ð#r+   c                 óz  — t          ddd¦  «        }t          |ddd¦  «        }||z   }|                      |                     ¦   «         |                     ¦   «         fd¦  «         |                      |t          ¦  «         ||z   }|                      |t          ¦  «         |                      |t          ¦  «         d S r  r  r  s        r)   Útest_add_to_infinityzTestJacobi.test_add_to_infinityÛ  s©   € Ý�r˜1˜aÑ Ô ˆÝ˜˜b " aÑ(Ô(ˆØ�‰UˆØ×Ò˜"Ÿ$š$™&œ& "§$¢$¡&¤&Ð)¨6Ñ2Ô2Ð2Ø×Ò˜B¥Ñ)Ô)Ð)Ø�"‰WˆØ×Ò˜�XÑ&Ô&Ð&Ø�Š�b�(Ñ#Ô#Ð#Ð#Ð#r+   c                 óÎ   — t          ddd¦  «        }t          |ddd¦  «        }|dz  }|                      |                     ¦   «         |                     ¦   «         fd¦  «         d S )Nr~   r   r  r   r¬   ©r   r‰   ©r   r	   r    r$   r%   ©r&   rƒ   rQ   r  s       r)   Útest_mul_to_x_0zTestJacobi.test_mul_to_x_0å  s`   € Ý�r˜1˜aÑ Ô ˆÝ˜˜a  AÑ&Ô&ˆà�‰VˆØ×Ò˜"Ÿ$š$™&œ& "§$¢$¡&¤&Ð)¨7Ñ3Ô3Ð3Ð3Ð3r+   c                 óÎ   — t          ddd¦  «        }t          |ddd¦  «        }|dz  }|                      |                     ¦   «         |                     ¦   «         fd¦  «         d S )Nr~   r   r  r   é   r  r  r   s       r)   Útest_mul_to_y_0zTestJacobi.test_mul_to_y_0ì  s`   € Ý�r˜1˜aÑ Ô ˆÝ˜˜a  AÑ&Ô&ˆà�‰VˆØ×Ò˜"Ÿ$š$™&œ& "§$¢$¡&¤&Ð)¨6Ñ2Ô2Ð2Ð2Ð2r+   c                 óÔ   — t          ddd¦  «        }t          |ddd¦  «        }|dz  |z   }|                      |                     ¦   «         |                     ¦   «         fd¦  «         d S )Nr~   r   r  r   r½   r  r  r   s       r)   Útest_add_to_x_0zTestJacobi.test_add_to_x_0ó  sd   € Ý�r˜1˜aÑ Ô ˆÝ˜˜a  AÑ&Ô&ˆà�‰V�a‰ZˆØ×Ò˜"Ÿ$š$™&œ& "§$¢$¡&¤&Ð)¨7Ñ3Ô3Ð3Ð3Ð3r+   c                 óÔ   — t          ddd¦  «        }t          |ddd¦  «        }|dz  |z   }|                      |                     ¦   «         |                     ¦   «         fd¦  «         d S )Nr~   r   r  r   r¬   r  r  r   s       r)   Útest_add_to_y_0zTestJacobi.test_add_to_y_0ú  sd   € Ý�r˜1˜aÑ Ô ˆÝ˜˜a  AÑ&Ô&ˆà�‰V�a‰ZˆØ×Ò˜"Ÿ$š$™&œ& "§$¢$¡&¤&Ð)¨6Ñ2Ô2Ð2Ð2Ð2r+   c                 ó˜   — t          ddd¦  «        }t          |ddd¦  «        }|dz  |dz  z   }|                      |t          ¦  «         d S )Nr~   r   r  r   r  é   )r   r	   r"   r
   )r&   rƒ   rQ   r    s       r)   Útest_add_diff_z_to_infinityz&TestJacobi.test_add_diff_z_to_infinity  sQ   € Ý�r˜1˜aÑ Ô ˆÝ˜˜a  AÑ&Ô&ˆà�‰F�Q˜‘U‰NˆØ�Š�a�Ñ"Ô"Ð"Ð"Ð"r+   c                 óÂ   — t          t          dddd¦  «        dddd¬¦  «        }|                      t          j        t          j        |¦  «        ¦  «        |¦  «         d S rÿ   )r	   r   r    ÚpickleÚloadsÚdumpsr<   s     r)   Útest_picklezTestJacobi.test_pickle  sX   € Ý�w r¨1¨a°Ñ3Ô3°q¸AÀÈ!ÐLÑLÔLˆØ×Ò�œ¥f¤l°2Ñ&6Ô&6Ñ7Ô7¸Ñ<Ô<Ð<Ð<Ð<r+   ÚPyPyz!threading on PyPy breaks coverage)Úreasonr   c                 ó\  — t           dz   t           }t          |                     ¦   «         |                     ¦   «         |                     ¦   «         d|                     ¦   «         d¦  «        }|                      |j        g ¦  «         d„ }g }t          |¦  «        D ],}| 	                    t          j        ||f¬¦  «        ¦  «         Œ-|D ]}|                     ¦   «          Œ ||¦  «         |D ]}|                     ¦   «          Œ|                      |j        t           j        ¦  «         d S )Nr   r   Tc                 óv   — |                       ¦   «         }t          d¦  «        D ]}| t          |¦  «        z   Œd S )Nr   ©r!   Úranger   ©Ú	generatorr!   Ú_s      r)   Úrunnerz.TestJacobi.test_multithreading.<locals>.runner  óF   € Ø—O’OÑ%Ô%ˆEÝ˜2‘Y”Yð -ð -�Ø�I eÑ,Ô,Ñ,Ð,Ð,ð-ð -r+   ©ÚtargetÚargs)r   r	   r#   r$   r%   r!   r    r—   r6  ÚappendÚ	threadingÚThreadÚstartÚjoin)r&   Ú
thread_numÚgenr:  Úthreadsr9  Úts          r)   Útest_multithreadingzTestJacobi.test_multithreading  s3  € õ 	˜!ÑÐõ ˆÝ˜#Ÿ)š)™+œ+ s§u¢u¡w¤w°·²±´¸¸C¿IºI¹K¼KÈÑNÔNˆà×Ò˜Ô5°rÑ:Ô:Ð:ð	-ð 	-ð 	-ð
 ˆÝ�zÑ"Ô"ð 	Ið 	IˆAØ�NŠN�9Ô+°6ÀÀÐGÑGÔGÑHÔHÐHÐHàð 	ð 	ˆAØ�GŠG‰IŒIˆIˆIàˆˆs‰Œˆàð 	ð 	ˆAØ�FŠF‰HŒHˆHˆHà×ÒØÔ(ÝÔ4ñ	
ô 	
ð 	
ð 	
ð 	
r+   ÚWindowszFthere are no signals on Windows, and threading breaks coverage on PyPyc                 ó„  — d}t           dz   t           }t          |                     ¦   «         |                     ¦   «         |                     ¦   «         d|                     ¦   «         d¦  «        }|                      |j        g ¦  «         d„ }d„ }g }t          |¦  «        D ],}| 	                    t          j        ||f¬¦  «        ¦  «         Œ-t          j        ¦   «         }|                     ¦   «          t          j        ¦   «         }|                     ¦   «          t          j        ¦   «         }	|	                     ¦   «          | 	                    t          j        ||||	f¬¦  «        ¦  «         |D ]}
|
                     ¦   «          Œ|                      t           ¦  «        5  |                     ¦   «          |                     ¦   «           ||¦  «         |	                     ¦   «          d d d ¦  «         n# 1 swxY w Y   |D ]}
|
                     ¦   «          Œ|                      |j        t           j        ¦  «         d S )Nr   r   r   Tc                 óv   — |                       ¦   «         }t          d¦  «        D ]}| t          |¦  «        z   Œd S )Né2   r5  r7  s      r)   r:  z>TestJacobi.test_multithreading_with_interrupts.<locals>.runnerE  r;  r+   c                 óÞ   — |                       ¦   «          |                     ¦   «          t          j        t          j        ¦   «         t
          j        ¦  «         |                      ¦   «          d S r-   )ÚreleaseÚacquireÚosÚkillÚgetpidÚsignalÚSIGINT)Úbarrier_startÚbarrier_endÚ	lock_exits      r)   ÚinterrupterzCTestJacobi.test_multithreading_with_interrupts.<locals>.interrupterJ  sX   € à×!Ò!Ñ#Ô#Ð#Ø×ÒÑ!Ô!Ð!ÝŒG•B”I‘K”K¥¤Ñ/Ô/Ð/Ø×ÒÑÔÐÐÐr+   r<  )r   r	   r#   r$   r%   r!   r    r—   r6  r?  r@  rA  ÚLockrO  rB  r/   ÚKeyboardInterruptrN  rC  )r&   rD  rE  r:  rX  rF  r9  rU  rV  rW  rG  s              r)   Ú#test_multithreading_with_interruptsz.TestJacobi.test_multithreading_with_interrupts3  s‚  € ð ˆ
å˜!ÑÐõ ˆÝ˜#Ÿ)š)™+œ+ s§u¢u¡w¤w°·²±´¸¸C¿IºI¹K¼KÈÑNÔNˆà×Ò˜Ô5°rÑ:Ô:Ð:ð	-ð 	-ð 	-ð
	 ð 	 ð 	 ð ˆÝ�zÑ"Ô"ð 	Ið 	IˆAØ�NŠN�9Ô+°6ÀÀÐGÑGÔGÑHÔHÐHÐHå!œÑ(Ô(ˆØ×ÒÑÔÐÝ”nÑ&Ô&ˆØ×ÒÑÔÐÝ”NÑ$Ô$ˆ	Ø×ÒÑÔÐà�ŠÝÔØ"Ø# [°)Ð<ðñ ô ñ	
ô 	
ð 	
ð ð 	ð 	ˆAØ�GŠG‰IŒIˆIˆIà×ÒÕ0Ñ1Ô1ð 	 ð 	 à×!Ò!Ñ#Ô#Ð#Ø×ÒÑ!Ô!Ð!ØˆF�3‰KŒKˆKð ×ÒÑÔÐð	 ð 	 ð 	 ñ 	 ô 	 ð 	 ð 	 ð 	 ð 	 ð 	 ð 	 øøøð 	 ð 	 ð 	 ð 	 ð ð 	ð 	ˆAØ�FŠF‰HŒHˆHˆHà×ÒØÔ(ÝÔ4ñ	
ô 	
ð 	
ð 	
ð 	
s   Æ#AG7Ç7G;Ç>G;N© )_Ú__name__Ú
__module__Ú__qualname__r*   r4   r8   r=   rC   rF   rJ   rN   rR   rU   rY   r[   r`   rc   re   rg   ri   rk   ro   rs   rv   rx   r{   r„   r‡   rŠ   rŒ   r�   r   ÚSLOW_SETTINGSr   ÚstÚintegersÚintr   r!   r•   r   r›   r¡   r   rQ   r§   ÚpytestÚmarkÚslowr©   r°   Úlistsr·   r»   r¾   rÀ   rÂ   rÅ   rÇ   rË   rÎ   rÕ   rÚ   rÜ   rß   râ   rê   rì   rî   rð   ró   r÷   r   rý   r  r  r  r
  r  r  r  r  r!  r$  r&  r(  r+  r0  ÚNO_OLD_SETTINGSÚskipifÚplatformÚpython_implementationrH  Úsystemr[  r\  r+   r)   r   r   +   sø  € € € € € ð$ð $ð $ðð ð ð:ð :ð :ð)ð )ð )ð
,ð ,ð ,ð)ð )ð )ð$ð $ð $ð$ð $ð $ð$ð $ð $ð$ð $ð $ð!ð !ð !ð$ð $ð $ð)ð )ð )ð)ð )ð )ð ð  ð  ðð ð ð$ð $ð $ð$ð $ð $ð)ð )ð )ð)ð )ð )ð!ð !ð !ð*ð *ð *ð
'ð 'ð 'ð*ð *ð *ð*ð *ð *ð&ð &ð &ð'ð 'ð 'ð
$ð $ð $ð €XÐÐ�ÐÐØ
€UØˆŒØ 3 3Ð'FÐ'@Ô'FÑ'HÔ'HÈ1Ñ'LÑ#MÔ#Mð	
ñ 	
ô 	
ñô ð
!ð !ñô ñ Ôð!ð €XÐÐ�ÐÐØ
€UØˆŒØ 3 3Ð'FÐ'@Ô'FÑ'HÔ'HÈ1Ñ'LÑ#MÔ#Mð	
ñ 	
ô 	
ñô ð
 €WˆQ�Z„ZØ€WˆSˆSÐ0Ð*Ô0Ñ2Ô2Ñ3Ô3Ñ4Ô4ðð ñ 5Ô4ñ „Zñô ñ Ôðð €XÐÐ�ÐÐØ
€UØˆŒØ 3 3Ð'FÐ'@Ô'FÑ'HÔ'HÈ1Ñ'LÑ#MÔ#Mð	
ñ 	
ô 	
ð 	ˆŒØ 3 3Ð'FÐ'@Ô'FÑ'HÔ'HÈ1Ñ'LÑ#MÔ#Mð	
ñ 	
ô 	
ñ	ô ð €WˆQ��]„]ð3ð 3ñ „]ñô ñ Ôð3ð €XÐÐ�ÐÐØ
€UØˆŒØ 3 3Ð'FÐ'@Ô'FÑ'HÔ'HÈ1Ñ'LÑ#MÔ#Mð	
ñ 	
ô 	
ð 	ˆŒØ 3 3Ð'FÐ'@Ô'FÑ'HÔ'HÈ1Ñ'LÑ#MÔ#Mð	
ñ 	
ô 	
ð 	ˆŒ˜a¨3¨3Ð/FÐ/DÔ/FÑ/HÔ/HÈ1Ñ/LÑ+MÔ+MÐNÑNÔNñô ð3ð 3ñô ñ Ôð3ð, „[ÔØ€XÐÐ�ÐÐØ
€UØˆŒØ 3 3Ð'FÐ'@Ô'FÑ'HÔ'HÈ1Ñ'LÑ#MÔ#Mð	
ñ 	
ô 	
ð 	ˆŒØ 3 3Ð'FÐ'@Ô'FÑ'HÔ'HÈ1Ñ'LÑ#MÔ#Mð	
ñ 	
ô 	
ð 	ˆŒ˜a¨3¨3Ð/FÐ/DÔ/FÑ/HÔ/HÈ1Ñ/LÑ+MÔ+MÐNÑNÔNñô ð €WˆQ��1ÑÔØ€WˆQ��1ÑÔØ€WˆQ��Ð3Ð-Ô3Ñ5Ô5¸Ñ9Ñ:Ô:¸AÑ>Ô>Ø€WˆQ��Ð3Ð-Ô3Ñ5Ô5¸Ñ9Ñ:Ô:¸AÑ>Ô>ð3ð 3ñ ?Ô>ñ ?Ô>ñ Ôñ Ôñô ñ Ôñ Ôð3ð8#ð #ð #ð. „[ÔØ€XÐÐ�ÐÐØ
€UØˆŒØ 3 3Ð'FÐ'@Ô'FÑ'HÔ'HÈ1Ñ'LÑ#MÔ#Mð	
ñ 	
ô 	
ð 	ˆŒØ 3 3Ð'FÐ'@Ô'FÑ'HÔ'HÈ1Ñ'LÑ#MÔ#Mð	
ñ 	
ô 	
ð 	ˆŒØˆBŒKØ s sÐ+BÐ+@Ô+BÑ+DÔ+DÀqÑ+HÑ'IÔ'Iðñ ô ð ØØð	
ñ 	
ô 	
ñô ð  €WˆQ��A�q�6ÑÔØ€WˆQ��A�q�6ÑÔØ€WˆQ��Ð3Ð-Ô3Ñ5Ô5¸Ñ9Ñ:Ô:¸QÀ¸FÑCÔCØ€WˆQ��Ð3Ð-Ô3Ñ5Ô5¸Ñ9Ñ:Ô:¸QÀ¸FÑCÔCð3ð 3ñ DÔCñ DÔCñ Ôñ Ôñ!ô ñ Ôñ Ôð,3ð<#ð #ð #ð0#ð #ð #ð0#ð #ð #ð0*ð *ð *ð03ð 3ð 3ð
@ð @ð @ð
;ð ;ð ;ð
:ð :ð :ð
Dð Dð Dð

ð 

ð 

ðð ð ð:ð :ð :ðDð Dð Dð	5ð 	5ð 	5ð
5ð 
5ð 
5ð

ð 

ð 

ðNð Nð Nð
Lð 
Lð 
Lð?ð ?ð ?ð €UØˆŒ˜a¨3¨3Ð/D¨Ô/DÑ/FÔ/FÈÑ/JÑ+KÔ+KÐLÑLÔLØˆŒ˜a¨3¨3Ð/D¨Ô/DÑ/FÔ/FÈÑ/JÑ+KÔ+KÐLÑLÔLØˆŒ˜a¨3¨3Ð/D¨Ô/DÑ/FÔ/FÈÑ/JÑ+KÔ+KÐLÑLÔLñô ð
 €WˆS�!�TÑÔð7ð 7ñ Ôñô ð7ð#ð #ð #ð
%ð %ð %ð
&ð &ð &ð/ð /ð /ð$ð $ð $ð4ð 4ð 4ð$ð $ð $ð$ð $ð $ð4ð 4ð 4ð3ð 3ð 3ð4ð 4ð 4ð3ð 3ð 3ð#ð #ð #ð=ð =ð =ð „[ÔØ€XÐ Ð �Ð Ð Ø„[×ÒØ&ˆÔ&Ñ(Ô(¨FÒ2Ø2ð ñ ô ð €Uˆ;ˆ2Œ; ¨bÐ1Ñ1Ô1Ñ2Ô2ð
ð 
ñ 3Ô2ñ	ô ñ !Ô ñ Ôð
ð@ „[ÔØ„[×ÒØˆŒÑÔ˜YÒ&ð 	6Ø)ˆ8Ô)Ñ+Ô+¨vÒ5ðð ñ ô ð;
ð ;
ñô ñ Ôð;
ð ;
ð ;
r+   r   c                   ó<   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	S )
ÚTestZeroCurvez.Tests with curve that has (0, 0) on the curve.c                 ó2   — t          ddd¦  «        | _        d S r}   )r   r#   r7   s    r)   ÚsetUpzTestZeroCurve.setUp{  s   € Ý˜R  AÑ&Ô&ˆŒ
ˆ
ˆ
r+   c                 ób   — |                       | j                             dd¦  «        ¦  «         d S rM   )r€   r#   r�   r7   s    r)   Útest_zero_point_on_curvez&TestZeroCurve.test_zero_point_on_curve~  s,   € Ø�Š˜œ
×1Ò1°!°QÑ7Ô7Ñ8Ô8Ð8Ð8Ð8r+   c                 ó
  — t          | j        ddd¦  «        }|                     ¦   «         }|                      |t          ¦  «         |                      d|                     ¦   «         |                     ¦   «         f¦  «         d S )Nr   r  ©r   r   ©r	   r#   rE   r6   r
   r    r$   r%   ©r&   rQ   Úds      r)   Útest_double_to_0_0_pointz&TestZeroCurve.test_double_to_0_0_point�  sj   € Ý˜œ
 A r¨1Ñ-Ô-ˆà�HŠH‰JŒJˆà×Ò˜A�xÑ(Ô(Ð(Ø×Ò˜ !§#¢#¡%¤%¨¯ª©¬ Ñ0Ô0Ð0Ð0Ð0r+   c                 ó&  — d}t          | j        d|dz  z  d|dz  z  |¦  «        }|                     ¦   «         }|                      |t          ¦  «         |                      d|                     ¦   «         |                     ¦   «         f¦  «         d S )Nr   r   r  r   rt  ru  )r&   r'   rQ   rw  s       r)   Ú'test_double_to_0_0_point_with_non_one_zz5TestZeroCurve.test_double_to_0_0_point_with_non_one_z‰  s   € ØˆÝ˜œ
 A¨¨1©¡H¨b°1°a±4©i¸Ñ;Ô;ˆà�HŠH‰JŒJˆà×Ò˜A�xÑ(Ô(Ð(Ø×Ò˜ !§#¢#¡%¤%¨¯ª©¬ Ñ0Ô0Ð0Ð0Ð0r+   c                 óì   — t          | j        ddd¦  «        }|dz  }|                      |t          ¦  «         |                      d|                     ¦   «         |                     ¦   «         f¦  «         d S )Nr«   r¬   r   r½   rt  )r	   r#   r6   r
   r    r$   r%   rv  s      r)   Útest_mul_to_0_0_pointz#TestZeroCurve.test_mul_to_0_0_point’  sf   € Ý˜œ
 B¨¨AÑ.Ô.ˆà�‰Fˆà×Ò˜A�xÑ(Ô(Ð(Ø×Ò˜ !§#¢#¡%¤%¨¯ª©¬ Ñ0Ô0Ð0Ð0Ð0r+   c                 ó’   — t          | j        ddd¦  «        }|                     ¦   «         }|                      |t          ¦  «         d S rH   )r	   r#   rE   r"   r
   rv  s      r)   Útest_double_of_0_0_pointz&TestZeroCurve.test_double_of_0_0_pointš  s>   € Ý˜œ
 A q¨!Ñ,Ô,ˆà�HŠH‰JŒJˆà�Š�a�Ñ"Ô"Ð"Ð"Ð"r+   c                 ó¼   — t          | j        ddd¦  «        }t          | j        dd¦  «        }t          d¦  «        D ]}|                      ||z  ||z  ¦  «         Œd S )Nr«   r¬   r   é   )r	   r#   r   r6  r    )r&   rQ   Úp_cÚis       r)   Ú"test_compare_to_old_implementationz0TestZeroCurve.test_compare_to_old_implementation¡  sj   € Ý˜œ
 B¨¨AÑ.Ô.ˆÝ�D”J  BÑ'Ô'ˆå�r‘”ð 	-ð 	-ˆAØ×Ò˜Q ™U C¨!¡GÑ,Ô,Ð,Ð,ð	-ð 	-r+   N)r]  r^  r_  Ú__doc__rp  rr  rx  rz  r|  r~  rƒ  r\  r+   r)   rn  rn  x  sƒ   € € € € € Ø8Ð8ð'ð 'ð 'ð9ð 9ð 9ð1ð 1ð 1ð1ð 1ð 1ð1ð 1ð 1ð#ð #ð #ð-ð -ð -ð -ð -r+   rn  )*r-  ÚsysÚ	unittest2ÚunittestÚImportErrorrP  rS  rd  r@  rj  Úhypothesis.strategiesÚ
strategiesra  Ú
hypothesisr   r   r   r   Úellipticcurver   r	   r
   r   Úecdsar   r   r   r   r   r   r   Únumbertheoryr   Úutilr   rh  Úversion_infor`  ÚargvÚTestCaser   rn  r\  r+   r)   ú<module>r“     s  ðØ €€€Ø 
€
€
€
ðØ Ð Ð Ð Ð øØð ð ð Ø€O€O€O€O€Oðøøøð 
€	€	€	Ø €€€Ø €€€Ø Ð Ð Ð Ø €€€Ø "Ð "Ð "Ð "Ð "Ð "Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7à @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð &Ð %Ð %Ð %Ð %Ð %Ø Ð Ð Ð Ð Ð ð €ØÔ�fÒÐØ"&€O�JÑð €ØˆsŒxÐÐØ$%€M�.Ñ!Ð!à$&€M�.Ñ!ðJ
ð J
ð J
ð J
ð J
�Ô"ñ J
ô J
ð J
ðZ.-ð .-ð .-ð .-ð .-�HÔ%ñ .-ô .-ð .-ð .-ð .-s   Š �	š