The Swift Package Index logo.Swift Package Index

Build Information

Failed to build swift-blurhash, reference main (7fc727), with Swift 6.3 for Android on 15 Apr 2026 05:32:14 UTC.

Build Command

bash -c docker run --pull=always --rm -v "checkouts-4606859-2":/host -w "$PWD" -e JAVA_HOME="/root/.sdkman/candidates/java/current" -e SPI_BUILD="1" -e SPI_PROCESSING="1" registry.gitlab.com/swiftpackageindex/spi-images:android-6.3-latest swift build --swift-sdk aarch64-unknown-linux-android28 2>&1

Build Log

========================================
RunAll
========================================
Builder version: 4.70.0
Interrupt handler set up.
========================================
Checkout
========================================
Clone URL: https://github.com/valeriyvan/swift-blurhash.git
Reference: main
Initialized empty Git repository in /host/spi-builder-workspace/.git/
hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint:
hint: 	git config --global init.defaultBranch <name>
hint:
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint:
hint: 	git branch -m <name>
From https://github.com/valeriyvan/swift-blurhash
 * branch            main       -> FETCH_HEAD
 * [new branch]      main       -> origin/main
HEAD is now at 7fc7276 Update README.md
Cloned https://github.com/valeriyvan/swift-blurhash.git
Revision (git rev-parse @):
7fc7276f5d11fdd4e46e7c67765ed87278c4c80d
SUCCESS checkout https://github.com/valeriyvan/swift-blurhash.git at main
========================================
Build
========================================
Selected platform:         android
Swift version:             6.3
Building package at path:  $PWD
https://github.com/valeriyvan/swift-blurhash.git
Running build ...
bash -c docker run --pull=always --rm -v "checkouts-4606859-2":/host -w "$PWD" -e JAVA_HOME="/root/.sdkman/candidates/java/current" -e SPI_BUILD="1" -e SPI_PROCESSING="1" registry.gitlab.com/swiftpackageindex/spi-images:android-6.3-latest swift build --swift-sdk aarch64-unknown-linux-android28 2>&1
android-6.3-latest: Pulling from swiftpackageindex/spi-images
Digest: sha256:9008270ea37a55e78725e6225015adb5eff8582da520c5232bf0499f32c36dc4
Status: Image is up to date for registry.gitlab.com/swiftpackageindex/spi-images:android-6.3-latest
Fetching https://github.com/apple/swift-algorithms.git
[1/6058] Fetching swift-algorithms
Fetched https://github.com/apple/swift-algorithms.git from cache (0.48s)
Computing version for https://github.com/apple/swift-algorithms.git
Computed https://github.com/apple/swift-algorithms.git at 1.2.1 (3.56s)
Fetching https://github.com/apple/swift-numerics.git
[1/6416] Fetching swift-numerics
Fetched https://github.com/apple/swift-numerics.git from cache (0.49s)
Computing version for https://github.com/apple/swift-numerics.git
Computed https://github.com/apple/swift-numerics.git at 1.1.1 (0.89s)
Creating working copy for https://github.com/apple/swift-numerics.git
Working copy of https://github.com/apple/swift-numerics.git resolved at 1.1.1
Creating working copy for https://github.com/apple/swift-algorithms.git
Working copy of https://github.com/apple/swift-algorithms.git resolved at 1.2.1
Building for debugging...
[0/5] Write sources
[3/5] Compiling _NumericsShims _NumericsShims.c
[4/5] Write swift-version--4F562202D5529B1.txt
[6/16] Compiling RealModule AugmentedArithmetic.swift
[7/16] Compiling RealModule Double+Real.swift
[8/17] Compiling RealModule RelaxedArithmetic.swift
[9/17] Emitting module RealModule
[10/17] Compiling RealModule AlgebraicField.swift
[11/17] Compiling RealModule ApproximateEquality.swift
[12/17] Compiling RealModule ElementaryFunctions.swift
[13/17] Compiling RealModule Float+Real.swift
[14/17] Compiling RealModule Float16+Real.swift
[15/17] Compiling RealModule Real.swift
[16/17] Compiling RealModule Float80+Real.swift
[17/17] Compiling RealModule RealFunctions.swift
[19/43] Compiling Algorithms Joined.swift
[20/43] Compiling Algorithms Keyed.swift
[21/43] Compiling Algorithms MinMax.swift
[22/46] Compiling Algorithms RandomSample.swift
[23/46] Compiling Algorithms Reductions.swift
[24/46] Compiling Algorithms Rotate.swift
[25/46] Compiling Algorithms Compacted.swift
[26/46] Compiling Algorithms Cycle.swift
[27/46] Compiling Algorithms EitherSequence.swift
[28/46] Compiling Algorithms FirstNonNil.swift
[29/46] Compiling Algorithms Partition.swift
[30/46] Compiling Algorithms Permutations.swift
[31/46] Compiling Algorithms Product.swift
[32/46] Compiling Algorithms FlattenCollection.swift
[33/46] Compiling Algorithms Grouped.swift
[34/46] Compiling Algorithms Indexed.swift
[35/46] Compiling Algorithms Intersperse.swift
[36/46] Compiling Algorithms Trim.swift
[37/46] Compiling Algorithms Unique.swift
[38/46] Compiling Algorithms Windows.swift
[39/46] Compiling Algorithms Split.swift
[40/46] Compiling Algorithms Stride.swift
[41/46] Compiling Algorithms Suffix.swift
[42/46] Compiling Algorithms AdjacentPairs.swift
[43/46] Compiling Algorithms Chain.swift
[44/46] Compiling Algorithms Chunked.swift
[45/46] Compiling Algorithms Combinations.swift
[46/46] Emitting module Algorithms
[48/57] Compiling Blurhash UIImage(ext).swift
[49/58] Compiling Blurhash pow.swift
[50/58] Compiling Blurhash sRGBLinear.swift
/host/spi-builder-workspace/Sources/Blurhash/sRGBLinear.swift:15:51: error: cannot assign value of type 'Double' to type 'Float'
13 |         } else {
14 |             // Apply gamma correction
15 |             transformed = 1.055 * pow(v, 1 / 2.4) - 0.055
   |                                                   `- error: cannot assign value of type 'Double' to type 'Float'
16 |         }
17 |         // Scale result to 0...255 range and round to the nearest integer
/host/spi-builder-workspace/Sources/Blurhash/sRGBLinear.swift:15:39: error: cannot convert value of type 'Float' to expected argument type 'Double'
13 |         } else {
14 |             // Apply gamma correction
15 |             transformed = 1.055 * pow(v, 1 / 2.4) - 0.055
   |                                       `- error: cannot convert value of type 'Float' to expected argument type 'Double'
16 |         }
17 |         // Scale result to 0...255 range and round to the nearest integer
/host/spi-builder-workspace/Sources/Blurhash/sRGBLinear.swift:35:25: error: cannot convert value of type 'Float' to expected argument type 'Double'
33 |         } else {
34 |             // Apply gamma correction
35 |             return pow((v + 0.055) / 1.055, 2.4)
   |                         `- error: cannot convert value of type 'Float' to expected argument type 'Double'
36 |         }
37 |     }
/host/spi-builder-workspace/Sources/Blurhash/sRGBLinear.swift:35:20: error: cannot convert return expression of type 'Double' to return type 'Float'
33 |         } else {
34 |             // Apply gamma correction
35 |             return pow((v + 0.055) / 1.055, 2.4)
   |                    `- error: cannot convert return expression of type 'Double' to return type 'Float'
36 |         }
37 |     }
[51/58] Compiling Blurhash FloatingPoint.swift
/host/spi-builder-workspace/Sources/Blurhash/RGBFloat.swift:28:63: error: cannot convert value of type 'Float' to expected argument type 'Double'
26 |     // AC stands for alternating current or AC coefficient
27 |     func encodeAC(maximumValue: Float) -> Int {
28 |         let quantR = Int(floor(signPow(r / maximumValue, 0.5) * 9 + 9.5).clamped(to: 0.0...18.0))
   |                                                               `- error: cannot convert value of type 'Float' to expected argument type 'Double'
29 |         let quantG = Int(floor(signPow(g / maximumValue, 0.5) * 9 + 9.5).clamped(to: 0.0...18.0))
30 |         let quantB = Int(floor(signPow(b / maximumValue, 0.5) * 9 + 9.5).clamped(to: 0.0...18.0))
/host/spi-builder-workspace/Sources/Blurhash/RGBFloat.swift:28:32: error: cannot convert value of type 'Float' to expected argument type 'Double'
26 |     // AC stands for alternating current or AC coefficient
27 |     func encodeAC(maximumValue: Float) -> Int {
28 |         let quantR = Int(floor(signPow(r / maximumValue, 0.5) * 9 + 9.5).clamped(to: 0.0...18.0))
   |                                `- error: cannot convert value of type 'Float' to expected argument type 'Double'
29 |         let quantG = Int(floor(signPow(g / maximumValue, 0.5) * 9 + 9.5).clamped(to: 0.0...18.0))
30 |         let quantB = Int(floor(signPow(b / maximumValue, 0.5) * 9 + 9.5).clamped(to: 0.0...18.0))
/host/spi-builder-workspace/Sources/Blurhash/RGBFloat.swift:29:32: error: cannot convert value of type 'Float' to expected argument type 'Double'
27 |     func encodeAC(maximumValue: Float) -> Int {
28 |         let quantR = Int(floor(signPow(r / maximumValue, 0.5) * 9 + 9.5).clamped(to: 0.0...18.0))
29 |         let quantG = Int(floor(signPow(g / maximumValue, 0.5) * 9 + 9.5).clamped(to: 0.0...18.0))
   |                                `- error: cannot convert value of type 'Float' to expected argument type 'Double'
30 |         let quantB = Int(floor(signPow(b / maximumValue, 0.5) * 9 + 9.5).clamped(to: 0.0...18.0))
31 |         return quantR * 19 * 19 + quantG * 19 + quantB
/host/spi-builder-workspace/Sources/Blurhash/RGBFloat.swift:29:63: error: cannot convert value of type 'Float' to expected argument type 'Double'
27 |     func encodeAC(maximumValue: Float) -> Int {
28 |         let quantR = Int(floor(signPow(r / maximumValue, 0.5) * 9 + 9.5).clamped(to: 0.0...18.0))
29 |         let quantG = Int(floor(signPow(g / maximumValue, 0.5) * 9 + 9.5).clamped(to: 0.0...18.0))
   |                                                               `- error: cannot convert value of type 'Float' to expected argument type 'Double'
30 |         let quantB = Int(floor(signPow(b / maximumValue, 0.5) * 9 + 9.5).clamped(to: 0.0...18.0))
31 |         return quantR * 19 * 19 + quantG * 19 + quantB
/host/spi-builder-workspace/Sources/Blurhash/RGBFloat.swift:30:32: error: cannot convert value of type 'Float' to expected argument type 'Double'
28 |         let quantR = Int(floor(signPow(r / maximumValue, 0.5) * 9 + 9.5).clamped(to: 0.0...18.0))
29 |         let quantG = Int(floor(signPow(g / maximumValue, 0.5) * 9 + 9.5).clamped(to: 0.0...18.0))
30 |         let quantB = Int(floor(signPow(b / maximumValue, 0.5) * 9 + 9.5).clamped(to: 0.0...18.0))
   |                                `- error: cannot convert value of type 'Float' to expected argument type 'Double'
31 |         return quantR * 19 * 19 + quantG * 19 + quantB
32 |     }
/host/spi-builder-workspace/Sources/Blurhash/RGBFloat.swift:30:63: error: cannot convert value of type 'Float' to expected argument type 'Double'
28 |         let quantR = Int(floor(signPow(r / maximumValue, 0.5) * 9 + 9.5).clamped(to: 0.0...18.0))
29 |         let quantG = Int(floor(signPow(g / maximumValue, 0.5) * 9 + 9.5).clamped(to: 0.0...18.0))
30 |         let quantB = Int(floor(signPow(b / maximumValue, 0.5) * 9 + 9.5).clamped(to: 0.0...18.0))
   |                                                               `- error: cannot convert value of type 'Float' to expected argument type 'Double'
31 |         return quantR * 19 * 19 + quantG * 19 + quantB
32 |     }
/host/spi-builder-workspace/Sources/Blurhash/RGBFloat.swift:62:78: error: cannot convert value of type 'Float' to expected argument type 'Double'
60 |         if ac.count > 0 {
61 |             let actualMaximumValue = ac.map({ Swift.max(abs($0.r), abs($0.g), abs($0.b)) }).max()!
62 |             let quantisedMaximumValue = Int(Swift.max(0, Swift.min(82, floor(actualMaximumValue * 166 - 0.5))))
   |                                                                              `- error: cannot convert value of type 'Float' to expected argument type 'Double'
63 |             maximumValue = Float(quantisedMaximumValue + 1) / 166
64 |             hash += quantisedMaximumValue.encode83(length: 1)
/host/spi-builder-workspace/Sources/Blurhash/RGBFloat.swift:62:97: error: cannot convert value of type 'Float' to expected argument type 'Double'
60 |         if ac.count > 0 {
61 |             let actualMaximumValue = ac.map({ Swift.max(abs($0.r), abs($0.g), abs($0.b)) }).max()!
62 |             let quantisedMaximumValue = Int(Swift.max(0, Swift.min(82, floor(actualMaximumValue * 166 - 0.5))))
   |                                                                                                 `- error: cannot convert value of type 'Float' to expected argument type 'Double'
63 |             maximumValue = Float(quantisedMaximumValue + 1) / 166
64 |             hash += quantisedMaximumValue.encode83(length: 1)
[52/58] Compiling Blurhash RGBFloat.swift
/host/spi-builder-workspace/Sources/Blurhash/RGBFloat.swift:28:63: error: cannot convert value of type 'Float' to expected argument type 'Double'
26 |     // AC stands for alternating current or AC coefficient
27 |     func encodeAC(maximumValue: Float) -> Int {
28 |         let quantR = Int(floor(signPow(r / maximumValue, 0.5) * 9 + 9.5).clamped(to: 0.0...18.0))
   |                                                               `- error: cannot convert value of type 'Float' to expected argument type 'Double'
29 |         let quantG = Int(floor(signPow(g / maximumValue, 0.5) * 9 + 9.5).clamped(to: 0.0...18.0))
30 |         let quantB = Int(floor(signPow(b / maximumValue, 0.5) * 9 + 9.5).clamped(to: 0.0...18.0))
/host/spi-builder-workspace/Sources/Blurhash/RGBFloat.swift:28:32: error: cannot convert value of type 'Float' to expected argument type 'Double'
26 |     // AC stands for alternating current or AC coefficient
27 |     func encodeAC(maximumValue: Float) -> Int {
28 |         let quantR = Int(floor(signPow(r / maximumValue, 0.5) * 9 + 9.5).clamped(to: 0.0...18.0))
   |                                `- error: cannot convert value of type 'Float' to expected argument type 'Double'
29 |         let quantG = Int(floor(signPow(g / maximumValue, 0.5) * 9 + 9.5).clamped(to: 0.0...18.0))
30 |         let quantB = Int(floor(signPow(b / maximumValue, 0.5) * 9 + 9.5).clamped(to: 0.0...18.0))
/host/spi-builder-workspace/Sources/Blurhash/RGBFloat.swift:29:32: error: cannot convert value of type 'Float' to expected argument type 'Double'
27 |     func encodeAC(maximumValue: Float) -> Int {
28 |         let quantR = Int(floor(signPow(r / maximumValue, 0.5) * 9 + 9.5).clamped(to: 0.0...18.0))
29 |         let quantG = Int(floor(signPow(g / maximumValue, 0.5) * 9 + 9.5).clamped(to: 0.0...18.0))
   |                                `- error: cannot convert value of type 'Float' to expected argument type 'Double'
30 |         let quantB = Int(floor(signPow(b / maximumValue, 0.5) * 9 + 9.5).clamped(to: 0.0...18.0))
31 |         return quantR * 19 * 19 + quantG * 19 + quantB
/host/spi-builder-workspace/Sources/Blurhash/RGBFloat.swift:29:63: error: cannot convert value of type 'Float' to expected argument type 'Double'
27 |     func encodeAC(maximumValue: Float) -> Int {
28 |         let quantR = Int(floor(signPow(r / maximumValue, 0.5) * 9 + 9.5).clamped(to: 0.0...18.0))
29 |         let quantG = Int(floor(signPow(g / maximumValue, 0.5) * 9 + 9.5).clamped(to: 0.0...18.0))
   |                                                               `- error: cannot convert value of type 'Float' to expected argument type 'Double'
30 |         let quantB = Int(floor(signPow(b / maximumValue, 0.5) * 9 + 9.5).clamped(to: 0.0...18.0))
31 |         return quantR * 19 * 19 + quantG * 19 + quantB
/host/spi-builder-workspace/Sources/Blurhash/RGBFloat.swift:30:32: error: cannot convert value of type 'Float' to expected argument type 'Double'
28 |         let quantR = Int(floor(signPow(r / maximumValue, 0.5) * 9 + 9.5).clamped(to: 0.0...18.0))
29 |         let quantG = Int(floor(signPow(g / maximumValue, 0.5) * 9 + 9.5).clamped(to: 0.0...18.0))
30 |         let quantB = Int(floor(signPow(b / maximumValue, 0.5) * 9 + 9.5).clamped(to: 0.0...18.0))
   |                                `- error: cannot convert value of type 'Float' to expected argument type 'Double'
31 |         return quantR * 19 * 19 + quantG * 19 + quantB
32 |     }
/host/spi-builder-workspace/Sources/Blurhash/RGBFloat.swift:30:63: error: cannot convert value of type 'Float' to expected argument type 'Double'
28 |         let quantR = Int(floor(signPow(r / maximumValue, 0.5) * 9 + 9.5).clamped(to: 0.0...18.0))
29 |         let quantG = Int(floor(signPow(g / maximumValue, 0.5) * 9 + 9.5).clamped(to: 0.0...18.0))
30 |         let quantB = Int(floor(signPow(b / maximumValue, 0.5) * 9 + 9.5).clamped(to: 0.0...18.0))
   |                                                               `- error: cannot convert value of type 'Float' to expected argument type 'Double'
31 |         return quantR * 19 * 19 + quantG * 19 + quantB
32 |     }
/host/spi-builder-workspace/Sources/Blurhash/RGBFloat.swift:62:78: error: cannot convert value of type 'Float' to expected argument type 'Double'
60 |         if ac.count > 0 {
61 |             let actualMaximumValue = ac.map({ Swift.max(abs($0.r), abs($0.g), abs($0.b)) }).max()!
62 |             let quantisedMaximumValue = Int(Swift.max(0, Swift.min(82, floor(actualMaximumValue * 166 - 0.5))))
   |                                                                              `- error: cannot convert value of type 'Float' to expected argument type 'Double'
63 |             maximumValue = Float(quantisedMaximumValue + 1) / 166
64 |             hash += quantisedMaximumValue.encode83(length: 1)
/host/spi-builder-workspace/Sources/Blurhash/RGBFloat.swift:62:97: error: cannot convert value of type 'Float' to expected argument type 'Double'
60 |         if ac.count > 0 {
61 |             let actualMaximumValue = ac.map({ Swift.max(abs($0.r), abs($0.g), abs($0.b)) }).max()!
62 |             let quantisedMaximumValue = Int(Swift.max(0, Swift.min(82, floor(actualMaximumValue * 166 - 0.5))))
   |                                                                                                 `- error: cannot convert value of type 'Float' to expected argument type 'Double'
63 |             maximumValue = Float(quantisedMaximumValue + 1) / 166
64 |             hash += quantisedMaximumValue.encode83(length: 1)
[53/58] Compiling Blurhash signPow.swift
/host/spi-builder-workspace/Sources/Blurhash/signPow.swift:4:12: error: no exact matches in call to global function 'copysign'
2 |
3 | func signPow(_ value: Float, _ exp: Float) -> Float {
4 |     return copysign(pow(abs(value), exp), value)
  |            `- error: no exact matches in call to global function 'copysign'
5 | }
6 |
Foundation.copysign:1:13: note: candidate expects value of type 'CGFloat' for parameter #2 (got 'Float')
1 | public func copysign(_ lhs: CGFloat, _ rhs: CGFloat) -> CGFloat
  |             `- note: candidate expects value of type 'CGFloat' for parameter #2 (got 'Float')
/root/.swiftpm/swift-sdks/swift-6.3-RELEASE_android.artifactbundle/swift-android/ndk-sysroot/usr/include/math.h:272:8: note: candidate expects value of type 'Double' for parameter #2 (got 'Float')
270 | long double remquol(long double __x, long double __y, int* _Nonnull __quotient_bits);
271 |
272 | double copysign(double __value, double __sign) __attribute_const__;
    |        `- note: candidate expects value of type 'Double' for parameter #2 (got 'Float')
273 | float copysignf(float __value, float __sign) __attribute_const__;
274 | long double copysignl(long double __value, long double __sign) __attribute_const__;
/host/spi-builder-workspace/Sources/Blurhash/signPow.swift:4:21: error: no exact matches in call to global function 'pow'
2 |
3 | func signPow(_ value: Float, _ exp: Float) -> Float {
4 |     return copysign(pow(abs(value), exp), value)
  |                     `- error: no exact matches in call to global function 'pow'
5 | }
6 |
Foundation.pow:1:13: note: candidate expects value of type 'CGFloat' for parameter #2 (got 'Float')
1 | public func pow(_ lhs: CGFloat, _ rhs: CGFloat) -> CGFloat
  |             `- note: candidate expects value of type 'CGFloat' for parameter #2 (got 'Float')
/root/.swiftpm/swift-sdks/swift-6.3-RELEASE_android.artifactbundle/swift-android/ndk-sysroot/usr/include/math.h:196:8: note: candidate expects value of type 'Double' for parameter #2 (got 'Float')
194 | long double hypotl(long double __x, long double __y);
195 |
196 | double pow(double __x, double __y);
    |        `- note: candidate expects value of type 'Double' for parameter #2 (got 'Float')
197 | float powf(float __x, float __y);
198 | long double powl(long double __x, long double __y);
/host/spi-builder-workspace/Sources/Blurhash/signPow.swift:4:12: error: no 'copysign' candidates produce the expected contextual result type 'Float'
2 |
3 | func signPow(_ value: Float, _ exp: Float) -> Float {
4 |     return copysign(pow(abs(value), exp), value)
  |            `- error: no 'copysign' candidates produce the expected contextual result type 'Float'
5 | }
6 |
Foundation.copysign:1:13: note: 'copysign' produces 'CGFloat', not the expected contextual result type 'Float'
1 | public func copysign(_ lhs: CGFloat, _ rhs: CGFloat) -> CGFloat
  |             `- note: 'copysign' produces 'CGFloat', not the expected contextual result type 'Float'
/root/.swiftpm/swift-sdks/swift-6.3-RELEASE_android.artifactbundle/swift-android/ndk-sysroot/usr/include/math.h:272:8: note: 'copysign' produces 'Double', not the expected contextual result type 'Float'
270 | long double remquol(long double __x, long double __y, int* _Nonnull __quotient_bits);
271 |
272 | double copysign(double __value, double __sign) __attribute_const__;
    |        `- note: 'copysign' produces 'Double', not the expected contextual result type 'Float'
273 | float copysignf(float __value, float __sign) __attribute_const__;
274 | long double copysignl(long double __value, long double __sign) __attribute_const__;
[54/58] Compiling Blurhash UnsafeRawBufferPointer(ext).swift
/host/spi-builder-workspace/Sources/Blurhash/UnsafeRawBufferPointer(ext).swift:43:30: error: the compiler is unable to type-check this expression in reasonable time; try breaking up the expression into distinct sub-expressions
41 |             for x in 0 ..< components.0 {
42 |                 let normalisation: Float = (x == 0 && y == 0) ? 1.0 : 2.0
43 |                 let factor = multiplyBasisFunction(
   |                              `- error: the compiler is unable to type-check this expression in reasonable time; try breaking up the expression into distinct sub-expressions
44 |                     pixels: pixels,
45 |                     width: width,
[55/58] Compiling Blurhash CustomBase83EncodingDecoding.swift
[56/58] Compiling Blurhash Data(ext).swift
[57/58] Emitting module Blurhash
[58/58] Compiling Blurhash UnsafeMutableRawBufferPointer(ext).swift
/host/spi-builder-workspace/Sources/Blurhash/UnsafeMutableRawBufferPointer(ext).swift:42:37: error: the compiler is unable to type-check this expression in reasonable time; try breaking up the expression into distinct sub-expressions
40 |                 for j in 0 ..< numY {
41 |                     for i in 0 ..< numX {
42 |                         let basis = cos(Float.pi * Float(x) * Float(i) / Float(width)) *
   |                                     `- error: the compiler is unable to type-check this expression in reasonable time; try breaking up the expression into distinct sub-expressions
43 |                         cos(Float.pi * Float(y) * Float(j) / Float(height))
44 |                         let colour = colours[i + j * numX]
BUILD FAILURE 6.3 android