
    49jk                         d Z ddlZddlmc mZ ddlmZ ddl	m
Z
 ddlZdZ ej                  d      d        Z G d	 d
      Z G d d      Z G d d      Z G d d      Zy)u   
Chase statement parser tests — Story 9.7.

Fixture: tests/fixtures/pdfs/chase_amazon_4086.pdf
Source:  Chase Amazon Prime Visa, account 4086, period 04/14/26–05/13/26
    N)Decimal)datez)tests/fixtures/pdfs/chase_amazon_4086.pdfmodule)scopec                  4    ddl m}   | t              \  }}||fS )Nr   )parse)app.services.pdf_parsers.chaser   FIXTURE_PATH)r   txnserrorss      @/var/www/html/financials/tests/test_parsers/test_chase_parser.pyparsedr      s    4&LD&<    c                   B    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zy
)TestChaseParserBasicsc                    |\  }}g }||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j
                  |      ndt        j
                  |      dz  }t        j                  d|       dz   d|iz  }t        t        j                  |            d x}}y )N==z%(py0)s == %(py3)sr   py0py3zUnexpected errors: z
>assert %(py5)spy5)	
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_saferepr_format_assertmsgAssertionError_format_explanation)selfr   _r   @py_assert2@py_assert1@py_format4@py_format6s           r   test_no_errorsz$TestChaseParserBasics.test_no_errors   ss    	6;v|;;;v;;;;;;v;;;v;;;;;;26(;;;;;;;r   c                 .   |\  }}t        |      }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j
                  t               rt        j                  t               nddt        j                         v st        j
                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y )	N   r   z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)slenr   r   py1r   py6assert %(py8)spy8)	r-   r   r   r   r   r   r   r!   r"   )	r#   r   r   r$   r%   @py_assert5@py_assert4@py_format7@py_format9s	            r   test_transaction_countz,TestChaseParserBasics.test_transaction_count   s    a4yByByBss44yBr   c                 T   ddl m} |\  }}|D ]  }t        ||      }|sddt        j                         v st        j                  t              rt        j                  t              nddt        j                         v st        j                  |      rt        j                  |      nddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }t        t        j                  |            d } y )Nr   )StagedTransactionz5assert %(py4)s
{%(py4)s = %(py0)s(%(py1)s, %(py2)s)
}
isinstancetr9   )r   r/   py2py4)
app.services.pdf_parsers.baser9   r:   r   r   r   r   r   r!   r"   )r#   r   r9   r   r$   r;   @py_assert3@py_format5s           r    test_returns_staged_transactionsz6TestChaseParserBasics.test_returns_staged_transactions    s    Ca 	4Aa!233333333:333:333333a333a333333!2333!23333333333	4r   c                    |\  }}|D ]  }|j                   }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j
                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }	t        t        j                  |	            d x}x}} y )Nchaser   )z.%(py2)s
{%(py2)s = %(py0)s.issuer
} == %(py5)sr;   r   r<   r   assert %(py7)spy7)	issuerr   r   r   r   r   r   r!   r"   
r#   r   r   r$   r;   r&   r4   r?   r(   @py_format8s
             r   test_issuer_is_chasez*TestChaseParserBasics.test_issuer_is_chase&   s    a 	'A88&w&8w&&&&8w&&&&&&1&&&1&&&8&&&w&&&&&&&	'r   c           	         |\  }}|D ]O  }|j                   }d}t        |      }||kD  }|s#t        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      dt	        j
                         v st        j                  t              rt        j                  t              ndt        j                  |      t        j                  |      dz  }	t        j                  d|       dz   d	|	iz  }
t        t        j                  |
            d x}x}x}}R y )
N0>)zK%(py2)s
{%(py2)s = %(py0)s.amount
} > %(py8)s
{%(py8)s = %(py4)s(%(py6)s)
}r;   r   r   r<   r=   r0   r2   zNegative amount: z
>assert %(py10)spy10)amountr   r   r   r   r   r   r   r    r!   r"   )r#   r   r   r$   r;   r&   r3   @py_assert7r?   r6   @py_format11s              r   test_all_amounts_are_positivez3TestChaseParserBasics.test_all_amounts_are_positive+   s    a 	DA88CcCgclC8l*CCC8lCCCCCC1CCC1CCC8CCCCCCgCCCgCCCcCCClCCC.?s,CCCCCCCC	Dr   c           	         |\  }}|D ]E  }|j                   }t        |t              }|sddt        j                         v st        j                  t              rt        j                  t              nddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      dz  }t        t        j                  |            d x}}H y )NzQassert %(py6)s
{%(py6)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.amount
}, %(py4)s)
}r:   r;   r   )r   r/   r   r=   r0   )
rQ   r:   r   r   r   r   r   r   r!   r"   )r#   r   r   r$   r;   r%   r3   r5   s           r   test_all_amounts_are_decimalz2TestChaseParserBasics.test_all_amounts_are_decimal0   s    a 	1Ahh0:h00000000:000:000000a000a000h0000000000000000000	1r   c                    |\  }}|D ]  }|j                   }|j                  }d}||k(  }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      dz  }	dd|	iz  }
t        t        j                  |
            d x}x}x}} y )N  r   )zF%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.date
}.year
} == %(py7)sr;   )r   r<   r=   rF   zassert %(py9)spy9)
r   yearr   r   r   r   r   r   r!   r"   )r#   r   r   r$   r;   r&   r?   @py_assert6r3   rI   @py_format10s              r   test_all_dates_are_2026z-TestChaseParserBasics.test_all_dates_are_20265   s    a 	'A66&6;;&$&;$&&&&;$&&&&&&1&&&1&&&6&&&;&&&$&&&&&&&	'r   c           	         |\  }}|D ]  }g }|j                   }|}|r |j                   }t        |      }	d}
|	|
k(  }|}|sddt        j                         v st	        j
                  |      rt	        j                  |      ndt	        j                  |      dz  }|j                  |       |rt	        j                  dfd	
f      dt        j                         v st	        j
                  t              rt	        j                  t              nddt        j                         v st	        j
                  |      rt	        j                  |      ndt	        j                        t	        j                  |	      t	        j                  |
      dz  }d	d
|iz  }|j                  |       t	        j                  |d      i z  }dd|iz  }t        t	        j                  |            d x}x}x}x}x}	x}}
 y )N@   z'%(py4)s
{%(py4)s = %(py2)s.dedup_hash
}r;   )r<   r=   r   )zS%(py11)s
{%(py11)s = %(py6)s(%(py9)s
{%(py9)s = %(py7)s.dedup_hash
})
} == %(py14)sr-   )r0   rF   rY   py11py14z%(py16)spy16r   zassert %(py19)spy19)
dedup_hashr-   r   r   r   r   r   appendr   _format_boolopr!   r"   )r#   r   r   r$   r;   r&   r?   @py_assert0@py_assert8@py_assert10@py_assert13@py_assert12r@   @py_format15@py_format17@py_format18@py_format20s                    r   test_all_have_dedup_hashz.TestChaseParserBasics.test_all_have_dedup_hash:   s   a 	<A;1<<;<;<;C$5;;$5$;;;;;;;1;;;1;;;<;;;;<;;;$5;;;;;;C;;;C;;;;;;;;;;;;;;;$5;;;;;;;;;;;;;;;;;	<r   c                    |\  }}|D ]  }|j                   }d}||kD  }|st        j                  d|fd||f      dt        j                         v st        j
                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }	t        t        j                  |	            d x}x}} y )Ng        rM   )z7%(py2)s
{%(py2)s = %(py0)s.confidence_score
} > %(py5)sr;   rD   rE   rF   )	confidence_scorer   r   r   r   r   r   r!   r"   rH   s
             r   test_confidence_score_presentz3TestChaseParserBasics.test_confidence_score_present?   s    a 	,A%%++%++++%++++++1+++1+++%++++++++++	,r   N)__name__
__module____qualname__r)   r7   rA   rJ   rT   rV   r]   rp   rs    r   r   r   r      s0    <
4'
D
1
'
<
,r   r   c                   $    e Zd Zd Zd Zd Zd Zy)TestChaseParserCreditsc                    |\  }}t        d |D              }|j                  }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }	t        t        j                  |	            d x}x}}y )	Nc              3   >   K   | ]  }d |j                   v s|  ywzPayment Thank YouNmerchant_raw.0r;   s     r   	<genexpr>z@TestChaseParserCredits.test_payment_is_credit.<locals>.<genexpr>H        PQ*=*OqP   Tisz1%(py2)s
{%(py2)s = %(py0)s.is_credit
} is %(py5)spaymentrD   rE   rF   )
next	is_creditr   r   r   r   r   r   r!   r"   )
r#   r   r   r$   r   r&   r4   r?   r(   rI   s
             r   test_payment_is_creditz-TestChaseParserCredits.test_payment_is_creditF   s    aP$PP  (D( D(((( D((((((w(((w((( (((D(((((((r   c                    |\  }}t        d |D              }|j                  }d}t        |      }||k(  }|s
t        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      t        j                  |      dz  }	dd	|	iz  }
t        t        j                  |
            d x}x}x}}y )
Nc              3   >   K   | ]  }d |j                   v s|  ywr|   r}   r   s     r   r   z=TestChaseParserCredits.test_payment_amount.<locals>.<genexpr>M   r   r   z700.00r   zL%(py2)s
{%(py2)s = %(py0)s.amount
} == %(py8)s
{%(py8)s = %(py4)s(%(py6)s)
}r   r   rO   assert %(py10)srP   )r   rQ   r   r   r   r   r   r   r   r!   r"   )r#   r   r   r$   r   r&   r3   rR   r?   r6   rS   s              r   test_payment_amountz*TestChaseParserCredits.test_payment_amountK   s    aP$PP~~22!22~!22222~!2222222w222w222~222222222222222!22222222r   c           
         |\  }}t        d |D              }|j                  }d}d}d}t        |||      }	||	k(  }
|
s2t        j                  d|
fd||	f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      dt	        j
                         v st        j                  t              rt        j                  t              ndt        j                  |      t        j                  |      t        j                  |      t        j                  |	      d	z  }d
d|iz  }t        t        j                  |            d x}x}
x}x}x}}	y )Nc              3   >   K   | ]  }d |j                   v s|  ywr|   r}   r   s     r   r   z;TestChaseParserCredits.test_payment_date.<locals>.<genexpr>R   r   r   rX         r   z_%(py2)s
{%(py2)s = %(py0)s.date
} == %(py12)s
{%(py12)s = %(py4)s(%(py6)s, %(py8)s, %(py10)s)
}r   r   r   r<   r=   r0   r2   rP   py12assert %(py14)sra   )
r   r   r   r   r   r   r   r   r!   r"   )r#   r   r   r$   r   r&   r3   rR   @py_assert9@py_assert11r?   @py_format13rl   s                r   test_payment_datez(TestChaseParserCredits.test_payment_dateP   s    aP$PP||0D0!0R0tD!R00|00000|0000000w000w000|000000t000t000D000!000R000000000000r   c                    |\  }}t        d |D        d      }d}||u}|st        j                  d|fd||f      dt        j                         v st        j
                  |      rt        j                  |      ndt        j                  |      dz  }dd|iz  }t        t        j                  |            dx}}|j                  }d	}	t        |	      }
||
k(  }|s
t        j                  d
|fd||
f      dt        j                         v st        j
                  |      rt        j                  |      ndt        j                  |      dt        j                         v st        j
                  t              rt        j                  t              ndt        j                  |	      t        j                  |
      dz  }dd|iz  }t        t        j                  |            dx}x}x}	}
y)z605/06 Amazon.com refund should be credit (was -10.50).c              3   p   K   | ].  }|j                   t        d dd      k(  s|j                  s+| 0 yw)rX         N)r   r   r   s     r   r   zFTestChaseParserCredits.test_amazon_refund_is_credit.<locals>.<genexpr>Y   s*     K1$tQ*: :q{{QKs   666N)is not)z%(py0)s is not %(py3)srefundr   assert %(py5)sr   z10.50r   r   r   rO   r   rP   )r   r   r   r   r   r   r   r!   r"   rQ   r   )r#   r   r   r$   r   r%   r&   r'   r(   r3   rR   r?   r6   rS   s                 r   test_amazon_refund_is_creditz3TestChaseParserCredits.test_amazon_refund_is_creditU   s   aKK
 "!vT!!!!vT!!!!!!v!!!v!!!T!!!!!!!}}00 00} 00000} 0000000v000v000}000000000000000 00000000r   N)rt   ru   rv   r   r   r   r   rw   r   r   ry   ry   E   s    )
3
1
1r   ry   c                   <    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
y	)
TestChaseParserPurchasesc           
         |\  }}t        d |D              }|j                  }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }	t        t        j                  |	            d x}x}}|j                  }d	}
t        |
      }||k(  }|s
t        j                  d
|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      dt	        j
                         v st        j                  t              rt        j                  t              ndt        j                  |
      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}x}
}|j                  }d}
d}d}t        |
||      }||k(  }|s2t        j                  d
|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      dt	        j
                         v st        j                  t              rt        j                  t              ndt        j                  |
      t        j                  |      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}x}
x}x}}y )Nc              3   Z   K   | ]#  }d |j                   j                         v s | % yw)	ANTHROPICN)r~   upperr   s     r   r   zATestChaseParserPurchases.test_anthropic_charge.<locals>.<genexpr>c   s$     OA8L8L8N)NaOs   !++Fr   r   chargerD   rE   rF   z5.00r   r   r   rO   r   rP   rX   r      r   r   r   r   ra   )r   r   r   r   r   r   r   r   r!   r"   rQ   r   r   )r#   r   r   r$   r   r&   r4   r?   r(   rI   r3   rR   r6   rS   r   r   r   rl   s                     r   test_anthropic_chargez.TestChaseParserPurchases.test_anthropic_chargea   s   aOOO(5(5((((5((((((v(((v((((((5(((((((}}///}////}//////v///v///}//////////////////////{{/4//B/d4B//{/////{///////v///v///{//////d///d///4//////B////////////r   c                 (   |\  }}t        d |D              }|j                  }d}||k(  }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }	t        t        j                  |	            d x}x}}|j                  }d	}
t        |
      }||k(  }|s
t        j                  d|fd
||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      dt	        j
                         v st        j                  t              rt        j                  t              ndt        j                  |
      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}x}
}y )Nc              3   >   K   | ]  }d |j                   v s|  yw)	MicrosoftNr}   r   s     r   r   zETestChaseParserPurchases.test_microsoft_normalized.<locals>.<genexpr>j   s     C[ANN%B!Cr   r   r   z;%(py2)s
{%(py2)s = %(py0)s.merchant_normalized
} == %(py5)smsrD   rE   rF   z12.99r   r   rO   r   rP   r   merchant_normalizedr   r   r   r   r   r   r!   r"   rQ   r   )r#   r   r   r$   r   r&   r4   r?   r(   rI   r3   rR   r6   rS   s                 r   test_microsoft_normalizedz2TestChaseParserPurchases.test_microsoft_normalizedh   s1   aCTCC%%44%4444%444444r444r444%4444444444yy,G,GG,,y,,,,,y,,,,,,,r,,,r,,,y,,,,,,G,,,G,,,G,,,,,,,,,,,r   c                    |\  }}|D cg c]  }d|j                   v s| }}t        |      }d}||kD  }|st        j                  d|fd||f      dt	        j
                         v st        j                  t              rt        j                  t              nddt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }	dd	|	iz  }
t        t        j                  |
            d x}x}}|D ]  }|j                  }d
}||k(  }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}} y c c}w )NzAMAZON MKTPLr   rM   )z/%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} > %(py6)sr-   mktplr.   r1   r2   Amazonr   r   r;   rD   rE   rF   )r~   r-   r   r   r   r   r   r   r!   r"   r   )r#   r   r   r$   r;   r   r%   r3   r4   r5   r6   r&   r?   r(   rI   s                  r   &test_amazon_mktpl_normalized_to_amazonz?TestChaseParserPurchases.test_amazon_mktpl_normalized_to_amazonn   s;   a EqNann$DEE5zAzA~zAss55zA 	5A((4H4(H4444(H44444414441444(444H4444444	5 Fs
   HHc                 (   |\  }}t        d |D              }|j                  }d}||k(  }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }	t        t        j                  |	            d x}x}}|j                  }d	}
t        |
      }||k(  }|s
t        j                  d|fd
||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      dt	        j
                         v st        j                  t              rt        j                  t              ndt        j                  |
      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}x}
}y )Nc              3   >   K   | ]  }d |j                   v s|  yw)zAMAZON PRIMENr}   r   s     r   r   zHTestChaseParserPurchases.test_amazon_prime_normalized.<locals>.<genexpr>w   s     I1!..(HQIr   zAmazon Primer   r   primerD   rE   rF   z4.99r   r   rO   r   rP   r   )r#   r   r   r$   r   r&   r4   r?   r(   rI   r3   rR   r6   rS   s                 r   test_amazon_prime_normalizedz5TestChaseParserPurchases.test_amazon_prime_normalizedu   s-   aIII((:N:(N::::(N::::::u:::u:::(:::N:::::::||.v.wv.|....|......u...u...|......w...w...v..........r   c                 (   |\  }}t        d |D              }|j                  }d}||k(  }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }	t        t        j                  |	            d x}x}}|j                  }d	}
t        |
      }||k(  }|s
t        j                  d|fd
||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      dt	        j
                         v st        j                  t              rt        j                  t              ndt        j                  |
      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}x}
}y )Nc              3   >   K   | ]  }d |j                   v s|  yw)z	APPLE.COMNr}   r   s     r   r   zATestChaseParserPurchases.test_apple_normalized.<locals>.<genexpr>}   s     F1q~~(EQFr   Appler   r   applerD   rE   rF   z12.98r   r   rO   r   rP   r   )r#   r   r   r$   r   r&   r4   r?   r(   rI   r3   rR   r6   rS   s                 r   test_apple_normalizedz.TestChaseParserPurchases.test_apple_normalized{   s1   aFFF((3G3(G3333(G333333u333u333(333G3333333||/w/ww//|/////|///////u///u///|//////w///w///w///////////r   c                    |\  }}|D cg c]!  }d|j                   j                         v s |# }}g }||k(  }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }dd|iz  }	t        t        j                  |	            dx}}yc c}w )	z8PURCHASE INTEREST CHARGE should be excluded from output.zINTEREST CHARGEr   r   interestr   r   r   N)
r~   r   r   r   r   r   r   r   r!   r"   )
r#   r   r   r$   r;   r   r%   r&   r'   r(   s
             r    test_no_interest_charge_includedz9TestChaseParserPurchases.test_no_interest_charge_included   s    a#S!'8ANN<P<P<R'RASSx2~x2xx2 Ts
   !CCc                 p   |\  }}|D cg c]  }|j                   r| }}t        |      }d}||k(  }|st        j                  d|fd||f      dt	        j
                         v st        j                  t              rt        j                  t              nddt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }	dd|	iz  }
t        t        j                  |
            d	x}x}}y	c c}w )
z3Should have 11 purchase transactions (not credits).   r   r,   r-   	purchasesr.   r1   r2   N
r   r-   r   r   r   r   r   r   r!   r"   )r#   r   r   r$   r;   r   r%   r3   r4   r5   r6   s              r   test_purchase_countz,TestChaseParserPurchases.test_purchase_count   s    a $81AKKQ8	89~##~####~######s###s######9###9###~########## 9
   D3D3c                 p   |\  }}|D cg c]  }|j                   s| }}t        |      }d}||k(  }|st        j                  d|fd||f      dt	        j
                         v st        j                  t              rt        j                  t              nddt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }	dd|	iz  }
t        t        j                  |
            d x}x}}y c c}w )	N   r   r,   r-   creditsr.   r1   r2   r   )r#   r   r   r$   r;   r   r%   r3   r4   r5   r6   s              r   test_credit_countz*TestChaseParserPurchases.test_credit_count   s    a"2akk1227| q |q    |q      s   s      7   7   |   q        3r   N)rt   ru   rv   r   r   r   r   r   r   r   r   rw   r   r   r   r   `   s*    0-5/0$!r   r   c                       e Zd Zd Zy)TestChaseIssuerDetectorc                 ^   dd l }ddlm} |j                  t              5 }|j
                  d   j                         xs d}d d d         |      \  }}d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }	d	d
|	iz  }
t        t        j                  |
            d x}}d}||k\  }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }	d	d
|	iz  }
t        t        j                  |
            d x}}y # 1 sw Y   bxY w)Nr   )detect_issuer rC   r   r   rG   r   r   r   g333333?)>=)z%(py0)s >= %(py3)sconf)
pdfplumber!app.services.pdf_parsers.detectorr   openr
   pagesextract_textr   r   r   r   r   r   r!   r"   )r#   r   r   pdftextrG   r   r%   r&   r'   r(   s              r    test_detects_chase_from_this_pdfz8TestChaseIssuerDetector.test_detects_chase_from_this_pdf   s   C__\* 	5c99Q<,,.4"D	5$T*  v    v      v   v          tt|ttttt		5 	5s   "F""F,N)rt   ru   rv   r   rw   r   r   r   r      s    r   r   )__doc__builtinsr   _pytest.assertion.rewrite	assertionrewriter   decimalr   datetimer   pytestr
   fixturer   r   ry   r   r   rw   r   r   <module>r      sh        : h  ,, ,,^1 160! 0!f r   