Ë
    V.jÓd  ã                   ó’  — d dl Z d dlZ	 d dlZ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jH                  dkD  rd	e#d
<   i Z%dejL                  v rde%d<   nde%d<    G d„ dejN                  «      Z( G d„ dejN                  «      Z)y# e$ r d dlZY Œ·w xY w)é    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                   ó‚  — 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"jF                  d e$ e%jL                  «       dz
  «      ¬«      «      d „ «       «       Z' edXi e ¤Ž e! e"jF                  d e$ e%jL                  «       dz
  «      ¬«      «       e(d«       e( e$ e%jL                  «       «      «      d!„ «       «       «       «       Z) edXi e ¤Ž e! e"jF                  d e$ e%jL                  «       dz
  «      ¬«       e"jF                  d e$ e%jL                  «       dz
  «      ¬«      «       e(d"d"«      d#„ «       «       «       Z* edXi e ¤Ž e! e"jF                  d e$ e%jL                  «       dz
  «      ¬«       e"jF                  d e$ e%jL                  «       dz
  «      ¬«       e"jF                  d e$ e+jX                  «       dz
  «      ¬«      «      d$„ «       «       Z-e.j^                  j`                   edXi e ¤Ž e! e"jF                  d e$ e%jL                  «       dz
  «      ¬«       e"jF                  d e$ e%jL                  «       dz
  «      ¬«       e"jF                  d e$ e+jX                  «       dz
  «      ¬«      «       e(ddd«       e(d"d"d"«       e(d% e$ e%jL                  «       d%z
  «      d«       e(d% e$ e%jL                  «       d%z
  «      d"«      d&„ «       «       «       «       «       «       «       Z1d'„ Z2e.j^                  j`                   edXi e ¤Ž e! e"jF                  d e$ e%jL                  «       dz
  «      ¬«       e"jF                  d e$ e%jL                  «       dz
  «      ¬«       e"jf                   e"jF                  d e$ e+jX                  «       dz
  «      ¬«      d%d%d(¬)«      «       e(d%d%d%dg«       e(d%d%d%d"g«       e(d% e$ e%jL                  «       d%z
  «      d%d"g«       e(d% e$ e%jL                  «       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"jF                  d e$ eHjL                  «       dz
  «      ¬«       e"jF                  d e$ eHjL                  «       dz
  «      ¬«       e"jF                  d e$ eHjL                  «       dz
  «      ¬«      «       e(d>d%d?«      d@„ «       «       ZIdA„ ZJdB„ ZKdC„ ZLdD„ ZMdE„ ZNdF„ ZOdG„ ZPdH„ ZQdI„ ZRdJ„ ZSdK„ ZTdL„ ZUdM„ ZVdN„ ZWe.j^                  j`                   edXi eX¤Že.j^                  j³                   eZj¶                  «       dOk(  dP¬Q«       e! e"jF                  ddR¬«      «      dS„ «       «       «       «       Z\e.j^                  j`                  e.j^                  j³                   eZjº                  «       dTk(  xs  eZj¶                  «       dOk(  dU¬Q«      dV„ «       «       Z^yW)YÚ
TestJacobic                 óF  — t        «       }d}d}d}d}t        |||||«      }| j                  |j                  «       |«       | j	                  |j                  «       |«       | j                  |j                  «       |«       | j                  |j                  «       |«       y )Nr   é   r   é   )Úobjectr	   ÚassertEqualÚorderÚassertIsÚcurveÚxÚy)Úselfr#   r$   r%   Úzr!   Úpjs          úSC:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\ecdsa/test_jacobi.pyÚtest___init__zTestJacobi.test___init__,   s…   € Ü“ˆØˆØˆØˆØˆÜ˜  1 a¨Ó/ˆà×Ñ˜Ÿ™› UÔ+Ø�‰�b—h‘h“j %Ô(Ø×Ñ˜Ÿ™› Ô#Ø×Ñ˜Ÿ™› Õ#ó    c                 óÆ   — t        j                  t        «      }t        j                  t        «      }| j	                  t
        «      5  ||z    d d d «       y # 1 sw Y   y xY w©N)r	   Úfrom_affiner   r   ÚassertRaisesÚ
ValueError©r&   Úp_aÚp_bs      r)   Útest_add_with_different_curvesz)TestJacobi.test_add_with_different_curves9   sC   € Ü×%Ñ%¤mÓ4ˆÜ×%Ñ%¤mÓ4ˆà×ÑœzÕ*Ø�#ŠI÷ +×*Ñ*ús   ÁAÁA c                 ó8   — | j                  t        t        «       y r-   )ÚassertNotEqualr   r   ©r&   s    r)   Útest_compare_different_curvesz(TestJacobi.test_compare_different_curves@   s   € Ø×ÑœM¬=Õ9r+   c                 óZ   — t        j                  t        «      }| j                  |d«       y )NÚvalue©r	   r.   r   r6   ©r&   r(   s     r)   Útest_equality_with_non_pointz'TestJacobi.test_equality_with_non_pointC   s"   € Ü×$Ñ$¤]Ó3ˆà×Ñ˜B Õ(r+   c                 ó‚   — t        j                  t        «      }|j                  «       }| j	                  t        |«       y r-   ©r	   r.   r   Ú	to_affiner    ©r&   r(   Úpws      r)   Útest_conversionzTestJacobi.test_conversionH   s-   € Ü×$Ñ$¤]Ó3ˆØ�\‰\‹^ˆà×Ñœ¨Õ+r+   c                 ó6  — t        j                  t        «      }t        j                  «       }|j                  «       }| j	                  |j                  «       |j                  «       «       | j	                  |j                  «       |j                  «       «       y r-   )r	   r.   r   Údoubler    r$   r%   rA   s      r)   Útest_single_doublezTestJacobi.test_single_doubleN   sc   € Ü×$Ñ$¤]Ó3ˆÜ×!Ñ!Ó#ˆà�Y‰Y‹[ˆà×Ñ˜Ÿ™› §¡£Ô(Ø×Ñ˜Ÿ™› §¡£Õ(r+   c                 ót   — t        t        ddd«      }|j                  «       }| j                  |t        «       y ©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        t        ddd«      }|j                  «       }| j                  |t        «       y ©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                  «       «      }|j                  «       }| j	                  |t
        «       y 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   ó1   € Üœ A q¬)¯+©+«-Ó8ˆà�Y‰Y‹[ˆà�‰�bœ(Õ#r+   c                 ó˜   — t        t        ddt        j                  «       «      }|j                  «       }| j	                  |t
        «       y 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        «      }|j                  «       }| j	                  ||«       | j	                  ||«       y r-   r?   ©r&   r(   Úpas      r)   Útest_compare_with_affine_pointz)TestJacobi.test_compare_with_affine_points   s=   € Ü×$Ñ$¤]Ó3ˆØ�\‰\‹^ˆà×Ñ˜˜RÔ Ø×Ñ˜˜RÕ r+   c                 ót   — t        t        ddd«      }|j                  «       }| j                  |t        «       y 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        «      }|j                  «       }||z   }| j	                  ||j                  «       «       y r-   ©r	   r.   r   r@   r    rE   ©r&   r(   rX   Úss       r)   Útest_add_with_affine_pointz%TestJacobi.test_add_with_affine_point�   ó<   € Ü×$Ñ$¤]Ó3ˆØ�\‰\‹^ˆà�‰Gˆà×Ñ˜˜BŸI™I›KÕ(r+   c                 ó    — t        j                  t        «      }|j                  «       }||z   }| j	                  ||j                  «       «       y r-   r]   r^   s       r)   Útest_radd_with_affine_pointz&TestJacobi.test_radd_with_affine_point‰   ra   r+   c                 ól   — t        j                  t        «      }|t        z   }| j	                  ||«       y r-   )r	   r.   r   r
   r    )r&   r(   r_   s      r)   Útest_add_with_infinityz!TestJacobi.test_add_with_infinity‘   s+   € Ü×$Ñ$¤]Ó3ˆà”‰Mˆà×Ñ˜˜BÕr+   c                 ó¤   — t        j                  t        «      j                  «       }t        t        ddd«      }||z   }| j                  ||«       y 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˜   sB   € Ü×$Ñ$¤]Ó3×=Ñ=Ó?ˆÜœ A q¨!Ó,ˆà�‰Gˆà�‰�a˜Õr+   c                 ól   — t        j                  t        «      }|dz  }| j                  |t        «       y rM   )r	   r.   r   r"   r
   r<   s     r)   Útest_multiply_by_zeroz TestJacobi.test_multiply_by_zero    s)   € Ü×$Ñ$¤]Ó3ˆà�!‰Vˆà�‰�bœ(Õ#r+   c                 ó^   — t        t        ddd«      }|dz  }| j                  |t        «       y rH   )r	   r   r"   r
   r<   s     r)   Útest_zero_point_multiply_by_onez*TestJacobi.test_zero_point_multiply_by_one§   s)   € Üœ A q¨!Ó,ˆà�!‰Vˆà�‰�bœ(Õ#r+   c                 ó
  — t        j                  t        «      }t        dz  }|dz  }| j                  |j	                  «       |j	                  «       «       | j                  |j                  «       |j                  «       «       y ©Nr   ©r	   r.   r   r    r$   r%   rA   s      r)   Útest_multiply_by_onezTestJacobi.test_multiply_by_one®   ó]   € Ü×$Ñ$¤]Ó3ˆÜ˜QÑˆà�!‰Vˆà×Ñ˜Ÿ™› §¡£Ô(Ø×Ñ˜Ÿ™› §¡£Õ(r+   c                 ó
  — t        j                  t        «      }t        dz  }|dz  }| j                  |j	                  «       |j	                  «       «       | j                  |j                  «       |j                  «       «       y ©Nr   rn   rA   s      r)   Útest_multiply_by_twozTestJacobi.test_multiply_by_two·   rp   r+   c                 óv   — t        j                  t        «      }t        dz  }d|z  }| j                  ||«       y rr   ©r	   r.   r   r    rA   s      r)   Útest_rmul_by_twozTestJacobi.test_rmul_by_twoÀ   s5   € Ü×$Ñ$¤]Ó3ˆÜ˜QÑˆà�‰Vˆà×Ñ˜˜RÕ r+   c                 ób   — t        j                  t        «      }| j                  |t        «       y r-   )r	   r.   r   r6   r
   r<   s     r)   Ú#test_compare_non_zero_with_infinityz.TestJacobi.test_compare_non_zero_with_infinityÈ   s"   € Ü×$Ñ$¤]Ó3ˆà×Ñ˜B¤Õ)r+   c                 óT   — t        t        ddd«      }| j                  |t        «       y )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Í   s"   € Üœ A q¨!Ó,ˆØ×Ñ˜œXÕ&r+   c                 ó¨   — t        ddd«      }t        |ddd«      }| j                  |j                  dd«      «       | j	                  |t
        «       y ©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Ñ   óI   € Ü�r˜1˜aÓ ˆÜ˜˜q ! QÓ'ˆà�‰˜×+Ñ+¨A¨qÓ1Ô2à×Ñ˜B¤Õ)r+   c                 ó¨   — t        ddd«      }t        |ddd«      }| j                  |j                  dd«      «       | j	                  |t
        «       y )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                 óz   — t        ddd«      }t        |ddd«      }t        |ddd«      }| j                  ||«       y )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á   s@   € Ü�r˜1˜aÓ ˆÜ˜$  2 qÓ)ˆÜ˜$  1 aÓ(ˆà×Ñ˜C Õ%r+   c                 óT   — t        t        ddd«      }| j                  |t        «       y rM   rz   r<   s     r)   Ú%test_compare_zero_point_with_infinityz0TestJacobi.test_compare_zero_point_with_infinityè   s"   € Üœ A q¨!Ó,ˆà×Ñ˜œXÕ&r+   c                 ó„   — t        j                  t        «      }|j                  «       }|dz  }| j	                  ||«       y rr   )r	   r.   r   rE   r    )r&   r(   ÚdblÚmlpls       r)   Ú!test_compare_double_with_multiplyz,TestJacobi.test_compare_double_with_multiplyí   s6   € Ü×$Ñ$¤]Ó3ˆØ�i‰i‹kˆØ�A‰vˆà×Ñ˜˜dÕ#r+   r   r   )Ú	min_valueÚ	max_valuec                 ó&  — t        j                  t        «      }|j                  «       |z  }||z  }| j	                  |j                  «       |j                  «       f|j                  «       |j                  «       f«       | j	                  ||«       y r-   )r	   r.   r   r@   r    r$   r%   )r&   Úmulr(   rB   s       r)   Útest_multiplicationszTestJacobi.test_multiplicationsô   sp   € ô ×$Ñ$Ô%>Ó?ˆØ�\‰\‹^˜cÑ!ˆà�#‰Xˆà×Ñ˜"Ÿ$™$›& "§$¡$£&Ð)¨B¯D©D«F°B·D±D³FÐ+;Ô<Ø×Ñ˜˜RÕ r+   c                 ó°   — t         }| j                  |j                  «       t        j                  t         «      }||z  }||z  }| j                  ||«       y r-   )r   r€   Ú_PointJacobi__precomputer	   r.   r    )r&   r”   Úprecompr(   ÚaÚbs         r)   Útest_precomputezTestJacobi.test_precompute  sN   € ô ,ˆØ�‰˜×8Ñ8Ô9Ü×$Ñ$Ô%>Ó?ˆà�c‰MˆØ�‰Hˆà×Ñ˜˜AÕr+   r   c                 óÐ   — t        j                  t        «      }t        j                  ||z  «      }t        j                  ||z  «      }||z   }| j                  ||||z   z  «       y r-   )r	   r.   r   r    )r&   Úa_mulÚb_mulÚj_gr™   rš   Úcs          r)   Útest_add_scaled_pointsz!TestJacobi.test_add_scaled_points  s_   € ô ×%Ñ%Ô&?Ó@ˆÜ×#Ñ# C¨%¡KÓ0ˆÜ×#Ñ# C¨%¡KÓ0ˆà�‰Eˆà×Ñ˜˜C 5¨5¡=Ñ1Õ2r+   c                 ó¬  — t        j                  t        «      }t        j                  ||z  «      }t        j                  ||z  «      }t        j                  «       }t        t        ||«      «       ||z  |z  }t        t        |j                  «       |z  |z  |j                  «       |z  |z  |z  |«      }||z   }	| j                  |	|||z   z  «       y 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ˆÜ×#Ñ# C¨%¡KÓ0ˆä!×#Ñ#Ó%ˆäŒ{˜5 !Ó$Ô%à˜‘ Ñ"ˆäÜ!Ø�C‰C‹E�F‰N˜QÑØ�C‰C‹E�F‰N˜UÑ" QÑ&Øó	
ˆð �‰Eˆà×Ñ˜˜C 5¨5¡=Ñ1Õ2r+   r   c                 ó&  — t        j                  t        «      }t        j                  ||z  «      }t        j                  ||z  «      }t        j                  «       }t        t        ||«      «       ||z  |z  }t        t        |j                  «       |z  |z  |j                  «       |z  |z  |z  |«      }t        t        |j                  «       |z  |z  |j                  «       |z  |z  |z  |«      }||z   }	| j                  |	|||z   z  «       y r-   r£   r¤   s
             r)   Útest_add_same_scale_pointsz%TestJacobi.test_add_same_scale_pointsH  s   € ô  ×%Ñ%Ô&?Ó@ˆÜ×#Ñ# C¨%¡KÓ0ˆÜ×#Ñ# C¨%¡KÓ0ˆä!×#Ñ#Ó%ˆäŒ{˜5 !Ó$Ô%à˜‘ Ñ"ˆäÜ!Ø�C‰C‹E�F‰N˜QÑØ�C‰C‹E�F‰N˜UÑ" QÑ&Øó	
ˆô Ü!Ø�C‰C‹E�F‰N˜QÑØ�C‰C‹E�F‰N˜UÑ" QÑ&Øó	
ˆð �‰Eˆà×Ñ˜˜C 5¨5¡=Ñ1Õ2r+   c                 óš  — t         }t        j                  «       }|dz  }|j                  «        d}t	        t        |j                  «       |dz  z  |z  |j                  «       |dz  z  |z  |«      }t	        t        |j                  «       |dz  z  |z  |j                  «       |dz  z  |z  |«      }||z   }| j                  |||z   «       y )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�B˜‘E‰M˜AÑØ�C‰C‹E�B˜‘E‰M˜AÑØó	
ˆô Ü!Ø�C‰C‹E�B˜‘E‰M˜AÑØ�C‰C‹E�B˜‘E‰M˜AÑØó	
ˆð �‰Eˆà×Ñ˜˜A ™EÕ"r+   T)Úmin_sizeÚmax_sizeÚuniquec                 óœ  — 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        |j                  «       |z  |z  |j                  «       |z  |d   z  |z  |d   «      }t        t        |j                  «       |	z  |z  |j                  «       |	z  |d   z  |z  |d   «      }||z   }
| j                  |
|||z   z  «       y 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Š  sG  € ô. ×%Ñ%Ô&?Ó@ˆÜ×#Ñ# C¨%¡KÓ0ˆÜ×#Ñ# C¨%¡KÓ0ˆä!×#Ñ#Ó%ˆäŒ{˜5 ™8 QÓ'Ô(ÜŒ{˜5 ™8 QÓ'Ô(à˜‘(˜U 1™XÑ%¨Ñ)ˆØ˜‘(˜U 1™XÑ%¨Ñ)ˆäÜ!Ø�C‰C‹E�G‰O˜aÑØ�C‰C‹E�G‰O˜e A™hÑ&¨Ñ*Ø�!‰Hó	
ˆô Ü!Ø�C‰C‹E�G‰O˜aÑØ�C‰C‹E�G‰O˜e A™hÑ&¨Ñ*Ø�!‰Hó	
ˆð �‰Eˆà×Ñ˜˜C 5¨5¡=Ñ1Õ2r+   c                 óž  — t         }t        j                  «       }|dz  }|j                  «        d}t	        t        |j                  «       |dz  z  |z  |j                  «       |dz  z  |z  |«      }d}t	        t        |j                  «       |dz  z  |z  |j                  «       |dz  z  |z  |«      }||z   }| j                  |||z   «       y )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�B˜‘E‰M˜AÑØ�C‰C‹E�B˜‘E‰M˜AÑØó	
ˆð ˆÜÜ!Ø�C‰C‹E�B˜‘E‰M˜AÑØ�C‰C‹E�B˜‘E‰M˜AÑØó	
ˆð �‰Eˆà×Ñ˜˜A ™EÕ"r+   c                 ó¤  — t         }t        j                  «       }|dz  }|j                  «        |dz  }d}t	        t        |j                  «       |dz  z  |z  |j                  «       |dz  z  |z  |«      }t	        t        |j                  «       |dz  z  |z  |j                  «       |dz  z  |z  |«      }||z   }| j                  |||z   «       y )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�A�q‘D‰L˜1ÑØ�C‰C‹E�A�q‘D‰L˜1ÑØó	
ˆô Ü!Ø�C‰C‹E�A�q‘D‰L˜1ÑØ�C‰C‹E�A�q‘D‰L˜1ÑØó	
ˆð �‰Eˆà×Ñ˜˜A ™EÕ"r+   c                 óv  — t         }t        j                  «       }d}||z  }|j                  «        t	        t        |j                  «       |dz  z  |z  |j                  «       |dz  z  |z  |«      }t	        t        |j                  «       |j                  «       d«      }||z   }| j                  |||z   «       y )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‰M‹OˆØˆØ�!‰GˆØ	�‰Œ	äÜØ�C‰C‹E�A�q‘D‰L˜1ÑØ�C‰C‹E�A�q‘D‰L˜1ÑØó	
ˆô ÜØ�C‰C‹EØ�C‰C‹EØó	
ˆð �‰Eˆà×Ñ˜˜A ™EÕ"r+   c                 ó.  — t         }d}||z  }|j                  «        | }t        t        |j	                  «       |j                  «       d«      }t        t        |j	                  «       |j                  «       d«      }| j                  t        ||z   «       y )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Ø�C‰C‹EØó	
ˆô ÜØ�C‰C‹EØ�C‰C‹EØó	
ˆð 	×Ñœ 1 q¡5Õ)r+   c                 ól   — t        j                  t        «      }| j                  |dz  ||z   |z   «       y )Nr   ru   ©r&   rŸ   s     r)   Útest_add_point_3_timesz!TestJacobi.test_add_point_3_times  s.   € Ü×%Ñ%¤mÓ4ˆà×Ñ˜˜q™ #¨¡)¨c¡/Õ2r+   c                 óÆ   — t        t        t        j                  «       t        j                  «       d«      }| j                  |t        j                  «       z  t        «       y rm   )r	   r   r   r$   r%   r    r!   r
   rÄ   s     r)   Útest_mul_without_orderz!TestJacobi.test_mul_without_order#  s>   € Üœ)¤]§_¡_Ó%6¼¿¹Ó8IÈ1ÓMˆà×Ñ˜œ}×2Ñ2Ó4Ñ4´hÕ?r+   c                 ó„   — t        j                  t        «      }| j                  ||j	                  dt
        d«      «       y rm   ©r	   r.   r   r    Úmul_addr
   rÄ   s     r)   Útest_mul_add_infzTestJacobi.test_mul_add_inf(  s/   € Ü×%Ñ%¤mÓ4ˆà×Ñ˜˜cŸk™k¨!¬X°qÓ9Õ:r+   c                 ó‚   — t        j                  t        «      }| j                  |dz  |j	                  d|d«      «       y )Nr   r   ©r	   r.   r   r    rÊ   rÄ   s     r)   Útest_mul_add_samezTestJacobi.test_mul_add_same-  s3   € Ü×%Ñ%¤mÓ4ˆà×Ñ˜˜q™ #§+¡+¨a°°aÓ"8Õ9r+   c                 ó"  — t        j                  t        d«      }t        j                  |dz  d«      }| j                  |dz  ||z   «       | j                  |dz  |dz  |dz  z   «       | j                  |dz  |j	                  d|d«      «       y )NTéÿ   é   iþ  é   r   ©r	   r.   r   r    rÊ   ©r&   rŸ   rš   s      r)   Útest_mul_add_precomputez"TestJacobi.test_mul_add_precompute2  s†   € Ü×%Ñ%Ô&?ÀÓFˆÜ×#Ñ# C¨#¡I¨tÓ4ˆà×Ñ˜˜s™ C¨!¡GÔ,Ø×Ñ˜ Ñ,¨c°A©g¸¸A¹©oÔ>Ø×Ñ˜ Ñ,¨c¯k©k¸!¸QÀÓ.BÕCr+   c                 ó"  — t        j                  t        d«      }t        j                  |dz  d«      }| j                  |dz  ||z   «       | j                  |dz  |dz  |dz  z   «       | j                  |dz  |j	                  d|d«      «       y )NTrÐ   rÑ   éþð é ÿ  éðð  rÓ   rÔ   s      r)   Útest_mul_add_precompute_largez(TestJacobi.test_mul_add_precompute_large:  s‘   € Ü×%Ñ%Ô&?ÀÓFˆÜ×#Ñ# C¨#¡I¨tÓ4ˆà×Ñ˜˜s™ C¨!¡GÔ,Ø×ÑØÐ(Ñ)¨3°©<¸!¸f¹*Ñ+Dô	
ð 	×ÑØÐ(Ñ)¨3¯;©;°v¸qÀ&Ó+Iõ	
r+   c                 óŠ   — t        j                  t        «      }|dz  }|j                  d|d«      }| j	                  ||«       y )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  s=   € Ü×%Ñ%¤mÓ4ˆà�!‰GˆØ�K‰K˜˜3 Ó"ˆà×Ñ˜˜AÕr+   c                 óŒ   — t        j                  t        «      }|dz  }| j                  |j	                  d|d«      |dz  «       y )Nr   r   r   rÍ   )r&   rŸ   Úw_as      r)   Útest_mul_add_differntz TestJacobi.test_mul_add_differntN  s<   € Ü×%Ñ%¤mÓ4ˆà�A‰gˆà×Ñ˜Ÿ™ Q¨¨QÓ/°°q±Õ9r+   c                 ó¢   — t        j                  t        «      }|dz  }|dz  }| j                  |j	                  d|d«      |dz  |dz  z   «       y )Nr   r   r   rÍ   )r&   rŸ   rÞ   Úw_bs       r)   Útest_mul_add_slightly_differentz*TestJacobi.test_mul_add_slightly_differentU  sN   € Ü×%Ñ%¤mÓ4ˆà�A‰gˆØ�A‰gˆà×Ñ˜Ÿ™ Q¨¨QÓ/°°q±¸3À¹7Ñ1BÕCr+   c                 óÐ   — t        j                  t        «      }t        dz  }t        dz  }|dz  }|j                  d|d«      }| j	                  |j                  «       ||z   «       y )NrÐ   i€�  é¨   éð   ©r	   r.   r   rÊ   r    r@   ©r&   rŸ   rÞ   rá   Új_bÚrets         r)   Útest_mul_addzTestJacobi.test_mul_add]  s[   € Ü×%Ñ%¤mÓ4ˆä˜cÑ!ˆÜ˜{Ñ+ˆØ�D‰jˆà�k‰k˜#˜s DÓ)ˆà×Ñ˜Ÿ™›¨#°©)Õ4r+   c                 óÐ   — t        j                  t        «      }t        dz  }t        dz  }|dz  }|j                  d|d«      }| j	                  |j                  «       ||z   «       y )NrÐ   r   rä   ræ   rç   s         r)   Útest_mul_add_zerozTestJacobi.test_mul_add_zeroh  s[   € Ü×%Ñ%¤mÓ4ˆä˜cÑ!ˆÜ˜xÑ(ˆà�D‰jˆà�k‰k˜#˜s AÓ&ˆà×Ñ˜Ÿ™›¨#°©)Õ4r+   c                 ó  — t        j                  t        «      }t        j                  |dz  «      }| j                  |dz  ||z   «       | j                  |dz  |dz  |dz  z   «       | j                  |dz  |j	                  d|d«      «       y )NrÐ   rÑ   r×   rØ   rÙ   rÍ   rÔ   s      r)   Útest_mul_add_largezTestJacobi.test_mul_add_larget  sŒ   € Ü×%Ñ%¤mÓ4ˆÜ×#Ñ# C¨#¡IÓ.ˆà×Ñ˜˜s™ C¨!¡GÔ,Ø×ÑØÐ(Ñ)¨3°©<¸!¸f¹*Ñ+Dô	
ð 	×ÑØÐ(Ñ)¨3¯;©;°v¸qÀ&Ó+Iõ	
r+   c                 óð   — t        j                  t        «      }t        j                  «       }t        j                  t        dz  «      }| j	                  |j                  |dz  ||dz  «      t        «       y )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€  sZ   € Ü×%Ñ%¤mÓ4ˆä×#Ñ#Ó%ˆä×#Ñ#¤M°CÑ$7Ó8ˆà×Ñ˜Ÿ™ U¨S¡[°!°U¸c±\ÓBÄHÕMr+   c                 ó€  — t        t        t        j                  «       t        j                  «       d«      }t        j
                  «       }t        dz  }|j                  «        t        t        |j                  «       |j	                  «       d«      }| j                  |j                  |dz  ||dz  «      t        «       y )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¼¿¹Ó8IÈ1ÓMˆä×#Ñ#Ó%ˆä˜bÑ ˆØ�	‰	Œäœ	 3§5¡5£7¨C¯E©E«G°QÓ7ˆà×Ñ˜Ÿ™ U¨R¡Z°°E¸R±KÓ@Ä(ÕKr+   c                 ó–   — t        j                  t        dz  «      }d| z  }| j                  |j	                  d|d«      t
        «       y )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•  s?   € Ü×%Ñ%¤m°bÑ&8Ó9ˆà˜�t‘*ˆà×Ñ˜Ÿ™ Q¨°Ó3´XÕ>r+   iµ  iÝ  c                 ó¤   — t        j                  t        «      }t        |z  }|j                  |||«      }| j	                  |||z  ||z  z   «       y r-   )r	   r.   r   rÊ   r    )r&   Úmul1Úmul2Úmul3r2   r3   Úress          r)   Útest_mul_add_randomzTestJacobi.test_mul_add_randomœ  sM   € ô ×%Ñ%¤oÓ6ˆÜ Ñ$ˆà�k‰k˜$  TÓ*ˆà×Ñ˜˜c D™j¨3°©:Ñ5Õ6r+   c                 ó˜   — t        t        dddd«      dddd¬«      }t        t        dddd«      dddd¬«      }| j                  ||«       y ©Nr~   r   r   r   ©r#   r$   r%   r'   r!   )r	   r   r    )r&   Úpj1Úpj2s      r)   Útest_equalityzTestJacobi.test_equalityª  sL   € Ü¤¨¨A¨q°!Ó 4¸¸QÀ!È1ÔMˆÜ¤¨¨A¨q°!Ó 4¸¸QÀ!È1ÔMˆØ×Ñ˜˜cÕ"r+   c                 óZ   — t        j                  t        «      }| j                  |d«       y )Nr½   r;   rÄ   s     r)   Ú!test_equality_with_invalid_objectz,TestJacobi.test_equality_with_invalid_object¯  s"   € Ü×%Ñ%¤mÓ4ˆà×Ñ˜C Õ$r+   c                 óŒ   — t        j                  t        «      }t        j                  t        «      }| j	                  ||«       y r-   )r	   r.   r   r   r6   r1   s      r)   Útest_equality_with_wrong_curvesz*TestJacobi.test_equality_with_wrong_curves´  s2   € Ü×%Ñ%¤mÓ4ˆÜ×%Ñ%¤mÓ4ˆà×Ñ˜C Õ%r+   c           	      óœ   — t        t        dddd«      dddd¬«      }|j                  ddddddd«      \  }}}| j                  |||fd«       y )	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º  sU   € Ü¤¨¨A¨q°!Ó 4¸¸QÀ!È1ÔMˆØ—(‘(˜1˜a  A q¨!¨RÓ0‰ˆˆ1ˆaà×Ñ˜!˜Q ˜ IÕ.r+   c                 ó^  — t        ddd«      }t        |ddd«      }|j                  «       }| j                  |j	                  «       |j                  «       fd«       | j                  |t        «       |j                  «       }| j                  |t        «       | j                  |t        «       y ©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ˆØ×Ñ˜"Ÿ$™$›& "§$¡$£&Ð)¨6Ô2Ø×Ñ˜B¤Ô)Ø�Y‰Y‹[ˆØ×Ñ˜œXÔ&Ø�‰�bœ(Õ#r+   c                 óº   — t        ddd«      }t        |ddd«      }|j                  «       }| j                  |j	                  «       |j                  «       fd«       y )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Ê  sL   € Ü˜˜Q Ó"ˆÜ˜  1 aÓ(ˆØ�X‰X‹Zˆà×Ñ˜"Ÿ$™$›& "§$¡$£&Ð)¨7Õ3r+   c                 ó2  — t        ddd«      }t        |ddd«      }|dz  }| j                  |j                  «       |j	                  «       fd«       | j                  |t        «       |dz  }| j                  |t        «       | j                  |t        «       y )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Ø×Ñ˜B¤Ô)Ø�!‰VˆØ×Ñ˜œXÔ&Ø�‰�bœ(Õ#r+   c                 ó2  — t        ddd«      }t        |ddd«      }||z   }| j                  |j                  «       |j	                  «       fd«       | j                  |t        «       ||z   }| j                  |t        «       | j                  |t        «       y r  r  r  s        r)   Útest_add_to_infinityzTestJacobi.test_add_to_infinityÛ  s�   € Ü�r˜1˜aÓ ˆÜ˜˜b " aÓ(ˆØ�‰UˆØ×Ñ˜"Ÿ$™$›& "§$¡$£&Ð)¨6Ô2Ø×Ñ˜B¤Ô)Ø�"‰WˆØ×Ñ˜œXÔ&Ø�‰�bœ(Õ#r+   c                 ó¤   — t        ddd«      }t        |ddd«      }|dz  }| j                  |j                  «       |j	                  «       fd«       y )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å  sJ   € Ü�r˜1˜aÓ ˆÜ˜˜a  AÓ&ˆà�‰VˆØ×Ñ˜"Ÿ$™$›& "§$¡$£&Ð)¨7Õ3r+   c                 ó¤   — t        ddd«      }t        |ddd«      }|dz  }| j                  |j                  «       |j	                  «       fd«       y )Nr~   r   r  r   é   r  r  r   s       r)   Útest_mul_to_y_0zTestJacobi.test_mul_to_y_0ì  sJ   € Ü�r˜1˜aÓ ˆÜ˜˜a  AÓ&ˆà�‰VˆØ×Ñ˜"Ÿ$™$›& "§$¡$£&Ð)¨6Õ2r+   c                 óª   — t        ddd«      }t        |ddd«      }|dz  |z   }| j                  |j                  «       |j	                  «       fd«       y )Nr~   r   r  r   r½   r  r  r   s       r)   Útest_add_to_x_0zTestJacobi.test_add_to_x_0ó  sN   € Ü�r˜1˜aÓ ˆÜ˜˜a  AÓ&ˆà�‰V�a‰ZˆØ×Ñ˜"Ÿ$™$›& "§$¡$£&Ð)¨7Õ3r+   c                 óª   — t        ddd«      }t        |ddd«      }|dz  |z   }| j                  |j                  «       |j	                  «       fd«       y )Nr~   r   r  r   r¬   r  r  r   s       r)   Útest_add_to_y_0zTestJacobi.test_add_to_y_0ú  sN   € Ü�r˜1˜aÓ ˆÜ˜˜a  AÓ&ˆà�‰V�a‰ZˆØ×Ñ˜"Ÿ$™$›& "§$¡$£&Ð)¨6Õ2r+   c                 ó|   — t        ddd«      }t        |ddd«      }|dz  |dz  z   }| j                  |t        «       y )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  s?   € Ü�r˜1˜aÓ ˆÜ˜˜a  AÓ&ˆà�‰F�Q˜‘U‰NˆØ�‰�aœÕ"r+   c                 ó¬   — t        t        dddd«      dddd¬«      }| j                  t        j                  t        j
                  |«      «      |«       y rÿ   )r	   r   r    ÚpickleÚloadsÚdumpsr<   s     r)   Útest_picklezTestJacobi.test_pickle  sA   € Üœw r¨1¨a°Ó3°q¸AÀÈ!ÔLˆØ×ÑœŸ™¤f§l¡l°2Ó&6Ó7¸Õ<r+   ÚPyPyz!threading on PyPy breaks coverage)Úreasonr   c                 ó"  — t         dz   t         }t        |j                  «       |j                  «       |j	                  «       d|j                  «       d«      }| j                  |j                  g «       d„ }g }t        |«      D ])  }|j                  t        j                  ||f¬«      «       Œ+ |D ]  }|j                  «        Œ  ||«       |D ]  }|j                  «        Œ | j                  |j                  t         j                  «       y )Nr   r   Tc                 ó`   — | j                  «       }t        d«      D ]  }| t        |«      z   Œ y )Nr   ©r!   Úranger   ©Ú	generatorr!   Ú_s      r)   Úrunnerz.TestJacobi.test_multithreading.<locals>.runner  ó)   € Ø—O‘OÓ%ˆEÜ˜2–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  sÞ   € ô 	˜!Òô ˆÜ˜#Ÿ)™)›+ s§u¡u£w°·±³¸¸C¿I¹I»KÈÓNˆà×Ñ˜×5Ñ5°rÔ:ò	-ð
 ˆÜ�zÖ"ˆAØ�N‰Nœ9×+Ñ+°6ÀÀÔGÕHð #ó ˆAØ�G‰G�Ið ñ 	ˆsŒãˆAØ�F‰F�Hð ð 	×ÑØ×(Ñ(Ü×4Ñ4õ	
r+   ÚWindowszFthere are no signals on Windows, and threading breaks coverage on PyPyc                 ó
  — d}t         dz   t         }t        |j                  «       |j                  «       |j	                  «       d|j                  «       d«      }| j                  |j                  g «       d„ }d„ }g }t        |«      D ])  }|j                  t        j                  ||f¬«      «       Œ+ t        j                  «       }|j                  «        t        j                  «       }|j                  «        t        j                  «       }	|	j                  «        |j                  t        j                  ||||	f¬«      «       |D ]  }
|
j                  «        Œ | j                  t         «      5  |j                  «        |j#                  «         ||«       |	j                  «        d d d «       |D ]  }
|
j%                  «        Œ | j                  |j                  t         j                  «       y # 1 sw Y   ŒKxY w)Nr   r   r   Tc                 ó`   — | j                  «       }t        d«      D ]  }| t        |«      z   Œ y )Né2   r5  r7  s      r)   r:  z>TestJacobi.test_multithreading_with_interrupts.<locals>.runnerE  r;  r+   c                 óÐ   — | j                  «        |j                  «        t        j                  t        j                  «       t
        j                  «       |j                  «        y r-   )ÚreleaseÚacquireÚosÚkillÚgetpidÚsignalÚSIGINT)Úbarrier_startÚbarrier_endÚ	lock_exits      r)   ÚinterrupterzCTestJacobi.test_multithreading_with_interrupts.<locals>.interrupterJ  s>   € à×!Ñ!Ô#Ø×ÑÔ!Ü�G‰G”B—I‘I“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°·±³¸¸C¿I¹I»KÈÓNˆà×Ñ˜×5Ñ5°rÔ:ò	-ò
	 ð ˆÜ�zÖ"ˆAØ�N‰Nœ9×+Ñ+°6ÀÀÔGÕHð #ô "Ÿ™Ó(ˆØ×ÑÔÜ—n‘nÓ&ˆØ×ÑÔÜ—N‘NÓ$ˆ	Ø×ÑÔà�‰Ü×ÑØ"Ø# [°)Ð<ôô	
ó ˆAØ�G‰G�Ið ð ×ÑÔ0Õ1à×!Ñ!Ô#Ø×ÑÔ!Ù�3ŒKð ×ÑÔ÷ 2ó ˆAØ�F‰F�Hð ð 	×ÑØ×(Ñ(Ü×4Ñ4õ	
÷ 2Ð1ús   Å69G9Ç9H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   +   sT  „ ò$òò:ò)ò
,ò)ò$ò$ò$ò$ò!ò$ò)ò)ò òò$ò$ò)ò)ò!ò*ò
'ò*ò*ò&ò'ò
$ñ Ñ�ÑÙ
Øˆ�‰Ø¡3Ð'FÐ'@×'FÑ'FÓ'HÈ1Ñ'LÓ#Mô	
óñ
!óó ð!ñ Ñ�ÑÙ
Øˆ�‰Ø¡3Ð'FÐ'@×'FÑ'FÓ'HÈ1Ñ'LÓ#Mô	
óñ
 ˆQƒZÙ‰SÐ0Ð*×0Ñ0Ó2Ó3Ó4ñó 5ó óó ðñ Ñ�ÑÙ
Øˆ�‰Ø¡3Ð'FÐ'@×'FÑ'FÓ'HÈ1Ñ'LÓ#Mô	
ð 	ˆ�‰Ø¡3Ð'FÐ'@×'FÑ'FÓ'HÈ1Ñ'LÓ#Mô	
ó	ñ ˆQ�ƒ]ñ3ó óó ð3ñ Ñ�ÑÙ
Øˆ�‰Ø¡3Ð'FÐ'@×'FÑ'FÓ'HÈ1Ñ'LÓ#Mô	
ð 	ˆ�‰Ø¡3Ð'FÐ'@×'FÑ'FÓ'HÈ1Ñ'LÓ#Mô	
ð 	ˆ�‰˜a©3Ð/FÐ/D×/FÑ/FÓ/HÈ1Ñ/LÓ+MÔNóñ3óó ð3ð, ‡[�[×ÑÙÑ�ÑÙ
Øˆ�‰Ø¡3Ð'FÐ'@×'FÑ'FÓ'HÈ1Ñ'LÓ#Mô	
ð 	ˆ�‰Ø¡3Ð'FÐ'@×'FÑ'FÓ'HÈ1Ñ'LÓ#Mô	
ð 	ˆ�‰˜a©3Ð/FÐ/D×/FÑ/FÓ/HÈ1Ñ/LÓ+MÔNóñ ˆQ��1ÓÙˆQ��1ÓÙˆQ‘Ð3Ð-×3Ñ3Ó5¸Ñ9Ó:¸AÓ>ÙˆQ‘Ð3Ð-×3Ñ3Ó5¸Ñ9Ó:¸AÓ>ñ3ó ?ó ?ó ó óó ó ð3ò8#ð. ‡[�[×ÑÙÑ�ÑÙ
Øˆ�‰Ø¡3Ð'FÐ'@×'FÑ'FÓ'HÈ1Ñ'LÓ#Mô	
ð 	ˆ�‰Ø¡3Ð'FÐ'@×'FÑ'FÓ'HÈ1Ñ'LÓ#Mô	
ð 	ˆ�‰ØˆB�K‰KØ¡sÐ+BÐ+@×+BÑ+BÓ+DÀqÑ+HÓ'Iôð ØØô	
óñ  ˆQ��A�q�6ÓÙˆQ��A�q�6ÓÙˆQ‘Ð3Ð-×3Ñ3Ó5¸Ñ9Ó:¸QÀ¸FÓCÙˆQ‘Ð3Ð-×3Ñ3Ó5¸Ñ9Ó:¸QÀ¸FÓCñ3ó Dó Dó ó ó!ó ó ð,3ò<#ò0#ò0#ò0*ò03ò
@ò
;ò
:ò
Dò

òò:òDò	5ò
5ò

òNò
Lò?ñ Øˆ�‰˜a©3Ð/D¨×/DÑ/DÓ/FÈÑ/JÓ+KÔLØˆ�‰˜a©3Ð/D¨×/DÑ/DÓ/FÈÑ/JÓ+KÔLØˆ�‰˜a©3Ð/D¨×/DÑ/DÓ/FÈÑ/JÓ+KÔLóñ
 ˆS�!�TÓñ7ó óð7ò#ò
%ò
&ò/ò$ò4ò$ò$ò4ò3ò4ò3ò#ò=ð ‡[�[×ÑÙÑ �Ñ Ø‡[�[×ÑØ&ˆ×&Ñ&Ó(¨FÑ2Ø2ð ó ñ ˆ;ˆ2�;‰; ¨bÔ1Ó2ñ
ó 3ó	ó !ó ð
ð@ ‡[�[×ÑØ‡[�[×ÑØˆ�‰Ó˜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
y	)
ÚTestZeroCurvez.Tests with curve that has (0, 0) on the curve.c                 ó(   — t        ddd«      | _        y r}   )r   r#   r7   s    r)   ÚsetUpzTestZeroCurve.setUp{  s   € Ü˜R  AÓ&ˆ�
r+   c                 óZ   — | j                  | j                  j                  dd«      «       y rM   )r€   r#   r�   r7   s    r)   Útest_zero_point_on_curvez&TestZeroCurve.test_zero_point_on_curve~  s   € Ø�‰˜Ÿ
™
×1Ñ1°!°QÓ7Õ8r+   c                 óà   — t        | j                  ddd«      }|j                  «       }| j                  |t        «       | j                  d|j                  «       |j                  «       f«       y )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�  sQ   € Ü˜Ÿ
™
 A r¨1Ó-ˆà�H‰H‹Jˆà×Ñ˜AœxÔ(Ø×Ñ˜ !§#¡#£%¨¯©« Õ0r+   c                 óü   — d}t        | j                  d|dz  z  d|dz  z  |«      }|j                  «       }| j                  |t        «       | j                  d|j                  «       |j                  «       f«       y )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‰  sf   € ØˆÜ˜Ÿ
™
 A¨¨1©¡H¨b°1°a±4©i¸Ó;ˆà�H‰H‹Jˆà×Ñ˜AœxÔ(Ø×Ñ˜ !§#¡#£%¨¯©« Õ0r+   c                 óÊ   — t        | j                  ddd«      }|dz  }| j                  |t        «       | j	                  d|j                  «       |j                  «       f«       y )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’  sO   € Ü˜Ÿ
™
 B¨¨AÓ.ˆà�‰Fˆà×Ñ˜AœxÔ(Ø×Ñ˜ !§#¡#£%¨¯©« Õ0r+   c                 ó€   — t        | j                  ddd«      }|j                  «       }| j                  |t        «       y 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ˆà�‰�aœÕ"r+   c                 ó²   — t        | j                  ddd«      }t        | j                  dd«      }t        d«      D ]  }| j	                  ||z  ||z  «       Œ y )Nr«   r¬   r   é   )r	   r#   r   r6  r    )r&   rQ   Úp_cÚis       r)   Ú"test_compare_to_old_implementationz0TestZeroCurve.test_compare_to_old_implementation¡  sN   € Ü˜Ÿ
™
 B¨¨AÓ.ˆÜ�D—J‘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ò'ò9ò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Ì   ðÛ Û 
ðÛ ó 
Û Û Û Û Ý "ß 7Ó 7ç @Ó @÷÷ ñ õ &Ý ð €Ø×Ñ�fÒØ"&€O�JÑð €Øˆs�x‰xÑØ$%€M�.Ò!à$&€M�.Ñ!ôJ
�×"Ñ"ô J
ôZ.-�H×%Ñ%õ .-øðe ò Ýðús   ŠB: Â:	CÃC