Fix interval inference of abs, absq when input is a complex number
							parent
							
								
									829107902e
								
							
						
					
					
						commit
						2dc99ea05f
					
				| 
						 | 
				
			
			@ -32,16 +32,20 @@ IN: compiler.tree.propagation.known-words
 | 
			
		|||
 | 
			
		||||
\ bitnot { integer } "input-classes" set-word-prop
 | 
			
		||||
 | 
			
		||||
: ?change-interval ( info quot -- quot' )
 | 
			
		||||
    over interval>> [ [ clone ] dip change-interval ] [ 2drop ] if ; inline
 | 
			
		||||
: real-op ( info quot -- quot' )
 | 
			
		||||
    [
 | 
			
		||||
        dup class>> real classes-intersect?
 | 
			
		||||
        [ clone ] [ drop real <class-info> ] if
 | 
			
		||||
    ] dip
 | 
			
		||||
    change-interval ; inline
 | 
			
		||||
 | 
			
		||||
{ bitnot fixnum-bitnot bignum-bitnot } [
 | 
			
		||||
    [ [ interval-bitnot ] ?change-interval ] "outputs" set-word-prop
 | 
			
		||||
    [ [ interval-bitnot ] real-op ] "outputs" set-word-prop
 | 
			
		||||
] each
 | 
			
		||||
 | 
			
		||||
\ abs [ [ interval-abs ] ?change-interval ] "outputs" set-word-prop
 | 
			
		||||
\ abs [ [ interval-abs ] real-op ] "outputs" set-word-prop
 | 
			
		||||
 | 
			
		||||
\ absq [ [ interval-absq ] ?change-interval ] "outputs" set-word-prop
 | 
			
		||||
\ absq [ [ interval-absq ] real-op ] "outputs" set-word-prop
 | 
			
		||||
 | 
			
		||||
: math-closure ( class -- newclass )
 | 
			
		||||
    { fixnum bignum integer rational float real number object }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -165,6 +165,10 @@ IN: compiler.tree.propagation.tests
 | 
			
		|||
 | 
			
		||||
[ t ] [ [ { float } declare absq ] final-info first interval>> [0,inf] = ] unit-test
 | 
			
		||||
 | 
			
		||||
[ t ] [ [ { complex } declare abs ] final-info first interval>> [0,inf] = ] unit-test
 | 
			
		||||
 | 
			
		||||
[ t ] [ [ { complex } declare absq ] final-info first interval>> [0,inf] = ] unit-test
 | 
			
		||||
 | 
			
		||||
[ t ] [ [ [ - absq ] [ + ] 2map-reduce ] final-info first interval>> [0,inf] = ] unit-test
 | 
			
		||||
 | 
			
		||||
[ t ] [ [ { double-array double-array } declare [ - absq ] [ + ] 2map-reduce ] final-info first interval>> [0,inf] = ] unit-test
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue