bounded.jl

FastVision/blocks/bounded.jl is a source file in module FastVision

			
			
			
			const
			
			 

	
			DimSize
			 
			=
			 
			
			Union
			{
			Int
			,
			 
			Colon
			}
			

			

			
			function
			 
			

	
			checksize
			(
			
			targetsz
			::
			Tuple
			,
			 
			
			sz
			::
			Tuple
			)
			
			
    
			
			
			
			length
			(
			targetsz
			)
			 
			==
			 
			
			length
			(
			sz
			)
			 
			||
			 
			
			return
			 
			false
			
    
			
			return
			 
			
			all
			(
			
			map
			(
			_checksizedim
			,
			 
			targetsz
			,
			 
			sz
			)
			)
			

			end
			

			

			
			
			_checksizedim
			(
			
			l1
			::
			Int
			,
			 
			
			l2
			::
			Int
			)
			 
			=
			
			 
			l1
			 
			==
			 
			l2
			

			
			
			_checksizedim
			(
			
			l1
			::
			Colon
			,
			 
			
			l2
			::
			Int
			)
			 
			=
			 
			true
			

			

			
			

	
			mockarray
			(
			T
			,
			 
			sz
			)
			 
			=
			 
			
			rand
			(
			T
			,
			 
			
			map
			(
			
			l
			 
			->
			
			
			 
			l
			 
			isa
			 
			Colon
			 
			?
			 
			
			rand
			(
			
			8
			:
			16
			)
			 
			:
			 
			l
			,
			 
			sz
			)
			)
			

			

			
			@
			testset
			 
			
			"
			checksize
			"
			 
			
			begin
			
    
			
			@
			test
			 
			

	
			checksize
			(
			
			(
			10
			,
			 
			1
			)
			,
			 
			
			(
			10
			,
			 
			1
			)
			)
			
    
			
			@
			test
			 
			
			!
			

	
			checksize
			(
			
			(
			100
			,
			 
			1
			)
			,
			 
			
			(
			10
			,
			 
			1
			)
			)
			
    
			
			@
			test
			 
			

	
			checksize
			(
			
			(
			:
			,
			 
			:
			,
			 
			:
			)
			,
			 
			
			(
			1
			,
			 
			2
			,
			 
			3
			)
			)
			
    
			
			@
			test
			 
			
			!
			

	
			checksize
			(
			
			(
			:
			,
			 
			:
			,
			 
			:
			)
			,
			 
			
			(
			1
			,
			 
			2
			)
			)
			
    
			
			@
			test
			 
			

	
			checksize
			(
			
			(
			10
			,
			 
			:
			,
			 
			1
			)
			,
			 
			
			(
			10
			,
			 
			20
			,
			 
			1
			)
			)
			
    
			
			@
			test
			 
			
			!
			

	
			checksize
			(
			
			(
			10
			,
			 
			:
			,
			 
			2
			)
			,
			 
			
			(
			10
			,
			 
			20
			,
			 
			1
			)
			)
			

			end
			

			

			
			
			
			"""
			

			    Bounded(block, size) <: WrapperBlock

			

			A [`WrapperBlock`](#) for annotating spatial data blocks with

			size information for their spatial bounds. As an example,

			`Image{2}()` doesn't carry any size information since it

			supports variable-size images, but sometimes it can be

			useful to have the exact size as information where it can

			be known.

			

			Encoding using [`ProjectiveTransforms`](#) returns `Bounded`s since it

			crops any input to the same size.

			

			## Examples

			

			```julia

			block = Image{2}()  # a 2D-image block with out size informatio

			wrapper = Bounded(Image{2}(), (128, 128))  # a 2D-image block with fixed size

			

			@test checkblock(block, rand(10, 10))

			@test !checkblock(wrapper, rand(10, 10))  # Expects size `(128, 128)`

			```

			

			Wrapping a `Bounded` into another `Bounded` with the same dimensionality

			will update the bounds:

			

			```julia

			block = Image{2}()

			Bounded(Bounded(block, (16, 16)), (8, 8)) == Bounded(block, (8, 8))

			```

			

			

			

			"""
			

			
			
			struct
			
			 
			

	
			Bounded
			{
			N
			,
			 
			
			B
			 
			<:
			 
			AbstractBlock
			}
			 
			<:
			 
			WrapperBlock
			
			
    
			
			block
			::
			B
			
    
			
			size
			::
			
			NTuple
			{
			N
			,
			 

	
			DimSize
			}
			

			end
			

			

			
			function
			 
			
			

	
			Bounded
			(
			
			bounded
			::
			

	
			Bounded
			{
			M
			}
			,
			 
			
			size
			::
			
			NTuple
			{
			N
			,
			 

	
			DimSize
			}
			)
			 
			where
			 
			{
			N
			,
			 
			M
			}
			
			
    
			
			
			N
			 
			==
			 
			M
			 
			||
			 
			
			error
			(
			
			"
			Cannot rewrap a `Bounded` with different dimensionalities 
			$
			N
			 and 
			$
			M
			"
			)
			
    
			

	
			Bounded
			(
			
			parent
			(
			bounded
			)
			,
			 
			size
			)
			

			end
			

			

			
			function
			 
			
			

	
			checkblock
			(
			
			bounded
			::
			

	
			Bounded
			{
			N
			}
			,
			 
			
			a
			::
			
			AbstractArray
			{
			N
			}
			)
			 
			where
			 
			{
			N
			}
			
			
    
			
			return
			
			 
			

	
			checksize
			(
			
			bounded
			.
			
			size
			,
			 
			
			size
			(
			a
			)
			)
			 
			&&
			 
			

	
			checkblock
			(
			
			parent
			(
			bounded
			)
			,
			 
			a
			)
			

			end
			

			

			
			@
			testset
			 
			
			"
			Bounded [block, wrapper]
			"
			 
			
			begin
			
    
			
			@
			test_nowarn
			 
			

	
			Bounded
			(
			
			

	
			Image
			{
			2
			}
			(
			)
			,
			 
			
			(
			16
			,
			 
			16
			)
			)
			
    
			
			bounded
			 
			=
			 
			

	
			Bounded
			(
			
			

	
			Image
			{
			2
			}
			(
			)
			,
			 
			
			(
			16
			,
			 
			16
			)
			)
			
    
			
			@
			test
			 
			

	
			checkblock
			(
			bounded
			,
			 
			
			rand
			(
			16
			,
			 
			16
			)
			)
			

			
    
			# composition
			
    
			
			@
			test
			
			 
			

	
			Bounded
			(
			bounded
			,
			 
			
			(
			16
			,
			 
			16
			)
			)
			 
			==
			 
			bounded
			

			end