@@ -64,7 +64,12 @@ function isinterior(x::Interval, y::Interval)
64
64
return isinterior (bareinterval (x), bareinterval (y))
65
65
end
66
66
67
- isinterior (x:: AbstractVector , y:: AbstractVector ) = all (t -> isinterior (t[1 ], t[2 ]), zip (x, y))
67
+ function isinterior (x:: AbstractVector , y:: AbstractVector )
68
+ n = length (x)
69
+ m = length (y)
70
+ n == m || return throw (DimensionMismatch (" dimensions must match: x has length $n , y has length $m " ))
71
+ return all (t -> isinterior (t[1 ], t[2 ]), zip (x, y))
72
+ end
68
73
69
74
isinterior (x, y, z, w... ) = isinterior (x, y) & isinterior (y, z, w... )
70
75
isinterior (x:: Complex , y:: Complex ) =
@@ -86,7 +91,7 @@ isstrictsubset(x::BareInterval, y::BareInterval) = isinterior(x, y)
86
91
87
92
isstrictsubset (x:: Interval , y:: Interval ) = isinterior (x, y)
88
93
89
- isstrictsubset (x:: AbstractVector , y:: AbstractVector ) = any (t -> isinterior (t[1 ], t[2 ]), zip (x, y))
94
+ isstrictsubset (x:: AbstractVector , y:: AbstractVector ) = isinterior (x, y) & any (t -> isinterior (t[1 ], t[2 ]), zip (x, y))
90
95
91
96
isstrictsubset (x, y, z, w... ) = isstrictsubset (x, y) & isstrictsubset (y, z, w... )
92
97
isstrictsubset (x:: Complex , y:: Complex ) =
@@ -179,12 +184,13 @@ Test whether `x` is an element of `y`.
179
184
180
185
Implement the `isMember` function of the IEEE Standard 1788-2015 (Section 10.6.3).
181
186
"""
182
- function in_interval (x:: Real , y:: BareInterval )
187
+ function in_interval (x:: Number , y:: BareInterval )
183
188
isinf (x) && return contains_infinity (y)
184
189
return inf (y) ≤ x ≤ sup (y)
185
190
end
191
+ in_interval (x:: Complex , y:: BareInterval ) = in_interval (real (x), y) & iszero (imag (x))
186
192
187
- function in_interval (x:: Real , y:: Interval )
193
+ function in_interval (x:: Number , y:: Interval )
188
194
isnai (y) && return false
189
195
return in_interval (x, bareinterval (y))
190
196
end
@@ -196,8 +202,8 @@ in_interval(::Interval, ::Interval) =
196
202
throw (ArgumentError (" `in_interval` is purposely not supported for two interval arguments. See instead `issubset_interval`" ))
197
203
198
204
in_interval (x:: Complex , y:: Complex ) = in_interval (real (x), real (y)) & in_interval (imag (x), imag (y))
199
- in_interval (x:: Complex , y:: Real ) = in_interval (real (x), y) & isthinzero (imag (x))
200
- in_interval (x:: Real , y:: Complex ) = in_interval (x, real (y)) & in_interval (0 , imag (y))
205
+ in_interval (x:: Complex , y:: Number ) = in_interval (real (x), y) & iszero (imag (x))
206
+ in_interval (x:: Number , y:: Complex ) = in_interval (x, real (y)) & in_interval (0 , imag (y))
201
207
202
208
in_interval (x) = Base. Fix2 (in_interval, x)
203
209
@@ -328,13 +334,18 @@ isthin(x::Complex) = isthin(real(x)) & isthin(imag(x))
328
334
Test whether `x` contains only `y`.
329
335
"""
330
336
isthin (x:: BareInterval , y:: Number ) = inf (x) == sup (x) == y
337
+ isthin (x:: BareInterval , y:: Complex ) = isthin (x, real (y)) & iszero (imag (y))
331
338
332
339
function isthin (x:: Interval , y:: Number )
333
340
isnai (x) && return false
334
341
return isthin (bareinterval (x), y)
335
342
end
336
343
337
- isthin (x:: Complex , y:: Number ) = isthin (real (x), y) & isthin (imag (x), y)
344
+ isthin (x:: Complex , y:: Complex ) = isthin (real (x), real (y)) & isthin (imag (x), imag (y))
345
+ isthin (x:: Complex , y:: Number ) = isthin (real (x), real (y)) & isthinzero (imag (x))
346
+ isthin (x:: Number , y:: Complex ) = isthin (real (x), real (y)) & iszero (imag (y))
347
+
348
+ isthin (x:: BareInterval , y:: Interval ) = throw (MethodError (isthin, (x, y)))
338
349
339
350
"""
340
351
isthinzero(x)
@@ -376,4 +387,4 @@ function isthininteger(x::Interval)
376
387
return isthininteger (bareinterval (x))
377
388
end
378
389
379
- isthininteger (x:: Complex ) = isthininteger (real (x)) & isthininteger (imag (x))
390
+ isthininteger (x:: Complex ) = isthininteger (real (x)) & isthinzero (imag (x))
0 commit comments