Skip to content

Commit 4d69ce8

Browse files
authored
---
yaml --- r: 294863 b: refs/heads/tensorflow c: 18d73fa h: refs/heads/master i: 294861: a1f83e9 294859: 4e3d511 294855: 5d63e24 294847: 52d6c7e
1 parent c12cec4 commit 4d69ce8

File tree

2 files changed

+34
-8
lines changed

2 files changed

+34
-8
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -816,7 +816,7 @@ refs/tags/swift-DEVELOPMENT-SNAPSHOT-2018-04-25-a: 22f738a831d43aff2b9c9773bcb65
816816
refs/tags/swift-DEVELOPMENT-SNAPSHOT-2018-05-08-a: 7d98cc16689baba5c8a3b90a9329bdcc1a12b4e9
817817
refs/heads/cherr42: a566ad54b073c2c56ac0a705d0a5bed9743135a5
818818
"refs/heads/codable_test_comment_fix": fc8f6824f7f347e1e8db55bff62db385c5728b5a
819-
refs/heads/tensorflow: 6bf823b9bd754968d7d685945f6df22b7129df3a
819+
refs/heads/tensorflow: 18d73fa16f67151fded272411b2a634538660a97
820820
refs/tags/swift-4.1-DEVELOPMENT-SNAPSHOT-2018-05-11-a: 8126fd7a652e2f70ad6d76505239e34fb2ef3e1a
821821
refs/tags/swift-4.1-DEVELOPMENT-SNAPSHOT-2018-05-12-a: b3fd3dd84df6717f2e2e9df58c6d7e99fed57086
822822
refs/tags/swift-4.1-DEVELOPMENT-SNAPSHOT-2018-05-13-a: 71135119579039dc321c5f65d870050fe36efda2

branches/tensorflow/test/AutoDiff/control_flow.swift

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -338,21 +338,47 @@ ControlFlowTests.test("Recursion") {
338338
expectEqual(26, gradient(at: 4, in: factorial))
339339
expectEqual(154, gradient(at: 5, in: factorial))
340340

341-
func factorial_var(_ x: Float) -> Float {
341+
func factorial_var1(_ x: Float) -> Float {
342+
var y: Float = x
343+
if x == 1 {
344+
y = 1
345+
} else {
346+
y = x
347+
y = y * factorial_var1(y - 1)
348+
}
349+
return y
350+
}
351+
expectEqual(0, gradient(at: 1, in: factorial_var1))
352+
expectEqual(1, gradient(at: 2, in: factorial_var1))
353+
expectEqual(5, gradient(at: 3, in: factorial_var1))
354+
expectEqual(26, gradient(at: 4, in: factorial_var1))
355+
expectEqual(154, gradient(at: 5, in: factorial_var1))
356+
357+
func factorial_var2(_ x: Float) -> Float {
358+
// Next line is the only difference with `factorial_var1`.
342359
var y: Float = 1
343360
if x == 1 {
344361
y = 1
345362
} else {
346363
y = x
347-
y = y * factorial(y - 1)
364+
y = y * factorial_var2(y - 1)
348365
}
349366
return y
350367
}
351-
expectEqual(0, gradient(at: 1, in: factorial))
352-
expectEqual(1, gradient(at: 2, in: factorial))
353-
expectEqual(5, gradient(at: 3, in: factorial))
354-
expectEqual(26, gradient(at: 4, in: factorial))
355-
expectEqual(154, gradient(at: 5, in: factorial))
368+
// FIXME: Fix zero gradients (related to activity analysis).
369+
// See `factorial_var1` for the working version.
370+
/*
371+
expectEqual(0, gradient(at: 1, in: factorial_var2))
372+
expectEqual(1, gradient(at: 2, in: factorial_var2))
373+
expectEqual(5, gradient(at: 3, in: factorial_var2))
374+
expectEqual(26, gradient(at: 4, in: factorial_var2))
375+
expectEqual(154, gradient(at: 5, in: factorial_var2))
376+
*/
377+
expectEqual(0, gradient(at: 1, in: factorial_var2))
378+
expectEqual(0, gradient(at: 2, in: factorial_var2))
379+
expectEqual(0, gradient(at: 3, in: factorial_var2))
380+
expectEqual(0, gradient(at: 4, in: factorial_var2))
381+
expectEqual(0, gradient(at: 5, in: factorial_var2))
356382

357383
func product(_ x: Float, count: Int) -> Float {
358384
precondition(count > 0)

0 commit comments

Comments
 (0)