Skip to content

Commit 23f2830

Browse files
authored
s4nnc support swift package (#28)
* s4nnc support swift package * remove comments and update package setup to ccv unstable * resolve comments * adding target for TensorBoard * update imports * remove fix
1 parent d3cbd6c commit 23f2830

27 files changed

+273
-0
lines changed

Package.swift

Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
1+
// swift-tools-version:5.9
2+
import PackageDescription
3+
4+
let package = Package(
5+
name: "s4nnc",
6+
platforms: [
7+
.macOS(.v13),
8+
.iOS(.v16),
9+
.tvOS(.v16),
10+
.visionOS(.v1)
11+
],
12+
products: [
13+
.library(
14+
name: "NNC",
15+
targets: ["NNC"]),
16+
.library(
17+
name: "NNCCoreMLConversion",
18+
targets: ["NNCCoreMLConversion"]),
19+
.library(
20+
name: "TensorBoard",
21+
targets: ["TensorBoard"]),
22+
],
23+
dependencies: [
24+
.package(url: "https://github.com/liuliu/ccv.git", revision: "70be3804a44c760a591858a2ac8261f3267fe85b"),
25+
.package(url: "https://github.com/weiyanlin117/swift-fpzip-support.git", revision: "0ec6d4668c9c83bc3da0f8b2d6dfc46da0b98609"),
26+
.package(url: "https://github.com/apple/swift-protobuf.git", revision: "d57a5aecf24a25b32ec4a74be2f5d0a995a47c4b"),
27+
.package(url: "https://github.com/apple/swift-system.git", revision: "fbd61a676d79cbde05cd4fda3cc46e94d6b8f0eb"),
28+
],
29+
targets: [
30+
// C_zlib - System zlib wrapper
31+
.target(
32+
name: "C_zlib",
33+
path: "nnc/C_zlib",
34+
publicHeadersPath: ".",
35+
cSettings: [
36+
.define("_GNU_SOURCE"),
37+
],
38+
linkerSettings: [
39+
.linkedLibrary("z"),
40+
]
41+
),
42+
43+
// NNC - Main Swift library
44+
.target(
45+
name: "NNC",
46+
dependencies: [
47+
.product(name: "nnc", package: "ccv"),
48+
.product(name: "sfmt", package: "ccv"),
49+
.product(name: "lib_nnc_mps_compat", package: "ccv"),
50+
.product(name: "C_fpzip", package: "swift-fpzip-support"),
51+
"C_zlib",
52+
],
53+
path: "nnc",
54+
exclude: [
55+
"C_ccv",
56+
"C_nnc",
57+
"C_sfmt",
58+
"C_zlib",
59+
"C_sqlite3",
60+
"BUILD.bazel",
61+
"CoreMLConversion.swift",
62+
"PythonConversion.swift",
63+
"MuJoCoConversion.swift",
64+
],
65+
sources: [
66+
"AnyModel.swift",
67+
"AutoGrad.swift",
68+
"DataFrame.swift",
69+
"DataFrameAddons.swift",
70+
"DataFrameCore.swift",
71+
"DynamicGraph.swift",
72+
"Functional.swift",
73+
"FunctionalAddons.swift",
74+
"GradScaler.swift",
75+
"Group.swift",
76+
"Hint.swift",
77+
"Loss.swift",
78+
"Model.swift",
79+
"ModelAddons.swift",
80+
"ModelBuilder.swift",
81+
"ModelCore.swift",
82+
"ModelIOAddons.swift",
83+
"Operators.swift",
84+
"Optimizer.swift",
85+
"OptimizerAddons.swift",
86+
"Store.swift",
87+
"StreamContext.swift",
88+
"Tensor.swift",
89+
"TensorGroup.swift",
90+
"Wrapped.swift",
91+
]
92+
),
93+
94+
// NNCCoreMLConversion - CoreML conversion utilities
95+
.target(
96+
name: "NNCCoreMLConversion",
97+
dependencies: ["NNC",
98+
.product(name: "lib_nnc_mps_compat", package: "ccv"),
99+
.product(name: "sfmt", package: "ccv"),
100+
],
101+
path: "nnc",
102+
sources: ["CoreMLConversion.swift"]
103+
),
104+
105+
// TensorBoard - TensorBoard logging support
106+
.target(
107+
name: "TensorBoard",
108+
dependencies: [
109+
"NNC",
110+
.product(name: "SwiftProtobuf", package: "swift-protobuf"),
111+
.product(name: "SystemPackage", package: "swift-system"),
112+
],
113+
path: "tensorboard",
114+
exclude: ["BUILD.bazel"]
115+
),
116+
117+
// Test targets
118+
.testTarget(
119+
name: "NNCTests",
120+
dependencies: ["NNC"],
121+
path: "test",
122+
exclude: [
123+
"coreml",
124+
"python",
125+
"BUILD.bazel",
126+
],
127+
sources: [
128+
"dataframe.swift",
129+
"graph.swift",
130+
"loss.swift",
131+
"model.swift",
132+
"ops.swift",
133+
"optimizer.swift",
134+
"store.swift",
135+
"tensor.swift",
136+
],
137+
resources: [
138+
.copy("scaled_data.csv"),
139+
.copy("some_variables.db"),
140+
]
141+
),
142+
143+
.testTarget(
144+
name: "NNCCoreMLTests",
145+
dependencies: ["NNCCoreMLConversion"],
146+
path: "test/coreml",
147+
sources: [
148+
"mlshapedarray.swift",
149+
]
150+
),
151+
]
152+
)

gym/http/HTTP.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
1+
#if canImport(C_ccv)
12
import C_ccv
3+
#elseif canImport(C_swiftpm_ccv)
4+
import C_swiftpm_ccv
5+
#endif
6+
27
import Foundation
38
import MuJoCo
49
import NIOCore

gym/renders/MuJoCoVideo.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
1+
#if canImport(C_ccv)
12
import C_ccv
3+
#elseif canImport(C_swiftpm_ccv)
4+
import C_swiftpm_ccv
5+
#endif
6+
27
import C_ffmpeg
38
import Foundation
49
import Gym

nnc/AutoGrad.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1+
#if canImport(C_nnc)
12
import C_nnc
3+
#elseif canImport(C_swiftpm_nnc)
4+
import C_swiftpm_nnc
5+
#endif
26

37
extension DynamicGraph.AnyTensor {
48
/**

nnc/CoreMLConversion.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1+
#if canImport(C_nnc)
12
import C_nnc
3+
#elseif canImport(C_swiftpm_nnc)
4+
import C_swiftpm_nnc
5+
#endif
26
import NNC
37
#if canImport(lib_nnc_mps_compat) && canImport(CoreML)
48
import lib_nnc_mps_compat

nnc/DataFrame.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1+
#if canImport(C_nnc)
12
import C_nnc
3+
#elseif canImport(C_swiftpm_nnc)
4+
import C_swiftpm_nnc
5+
#endif
26

37
public protocol DataSeries: Sequence {
48
func prefetch(_ i: Int, streamContext: StreamContext?)

nnc/DataFrameAddons.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1+
#if canImport(C_nnc)
12
import C_nnc
3+
#elseif canImport(C_swiftpm_nnc)
4+
import C_swiftpm_nnc
5+
#endif
26

37
// MARK - Load CSV
48

nnc/DataFrameCore.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1+
#if canImport(C_nnc)
12
import C_nnc
3+
#elseif canImport(C_swiftpm_nnc)
4+
import C_swiftpm_nnc
5+
#endif
26

37
// MARK - Sampling
48

nnc/DynamicGraph.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1+
#if canImport(C_nnc)
12
import C_nnc
3+
#elseif canImport(C_swiftpm_nnc)
4+
import C_swiftpm_nnc
5+
#endif
26

37
/// A dynamic graph is a workspace for computations. All tensor variables can be tracked
48
/// from a dynamic graph.

nnc/Functional.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1+
#if canImport(C_nnc)
12
import C_nnc
3+
#elseif canImport(C_swiftpm_nnc)
4+
import C_swiftpm_nnc
5+
#endif
26

37
/// This protocol defines a generic constructs such that we can use DynamicGraph.AnyTensorGroup
48
/// to represent either a collection of tensors from multiple GPUs or one tensor.

0 commit comments

Comments
 (0)