Skip to content

Commit 8d70ded

Browse files
committed
readme
1 parent 70c4a9c commit 8d70ded

File tree

9 files changed

+51
-17
lines changed

9 files changed

+51
-17
lines changed

README.md

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,35 @@
11
# zarr-java
22
Java implementation of the Zarr Specification
3+
4+
## Usage
5+
```java
6+
import com.scalableminds.zarrjava.store.FilesystemStore;
7+
import com.scalableminds.zarrjava.store.HttpStore;
8+
import com.scalableminds.zarrjava.v3.Array;
9+
import com.scalableminds.zarrjava.v3.ArrayMetadata;
10+
import com.scalableminds.zarrjava.v3.Group;
11+
12+
Group hierarchy = Group.open(
13+
new HttpStore("https://static.webknossos.org/data/zarr_v3")
14+
.resolve("l4_sample")
15+
);
16+
Array array = hierarchy.get("color").get("1");
17+
ucar.ma2.Array outArray = array.read(
18+
new long[]{0, 3073, 3073, 513},
19+
new int[]{1, 64, 64, 64}
20+
);
21+
22+
Array array = Array.create(
23+
new FilesystemStore("/path/to/zarr").resolve("array"),
24+
ArrayMetadata
25+
.builder()
26+
.withShape(1, 4096, 4096, 1536)
27+
.withDataType("uint32")
28+
.withChunkShape(1, 128, 128, 182)
29+
.build()
30+
);
31+
array.write(
32+
new long[]{0, 0, 0, 0},
33+
ucar.ma2.Array.factory(ucar.ma2.DataType.UINT, new int[]{1, 1024, 1024, 1024})
34+
);
35+
```

src/main/java/com/scalableminds/zarrjava/store/FilesystemStore.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import java.nio.ByteBuffer;
99
import java.nio.channels.SeekableByteChannel;
1010
import java.nio.file.*;
11-
import java.util.Iterator;
1211
import java.util.stream.Stream;
1312

1413
public class FilesystemStore implements Store, Store.ListableStore {

src/main/java/com/scalableminds/zarrjava/store/HttpStore.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.scalableminds.zarrjava.store;
22

3-
import com.scalableminds.zarrjava.ZarrException;
43
import com.squareup.okhttp.*;
54

65
import javax.annotation.Nonnull;
@@ -98,6 +97,6 @@ public StoreHandle resolve(String... keys) {
9897

9998
@Override
10099
public String toString() {
101-
return uri.toString();
100+
return uri;
102101
}
103102
}

src/main/java/com/scalableminds/zarrjava/store/Store.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@
33
import javax.annotation.Nonnull;
44
import javax.annotation.Nullable;
55
import java.nio.ByteBuffer;
6-
import java.util.Iterator;
7-
import java.util.stream.Stream;
86

97
public interface Store {
108
boolean exists(String[] keys);
@@ -23,7 +21,7 @@ public interface Store {
2321
void delete(String[] keys);
2422

2523
@Nonnull
26-
StoreHandle resolve(String ...keys);
24+
StoreHandle resolve(String... keys);
2725

2826
interface ListableStore extends Store {
2927
String[] list(String[] keys);

src/main/java/com/scalableminds/zarrjava/store/StoreHandle.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@
66
import javax.annotation.Nullable;
77
import java.nio.ByteBuffer;
88
import java.nio.file.NoSuchFileException;
9-
import java.util.Iterator;
10-
import java.util.stream.Stream;
119

1210
public class StoreHandle {
1311
@Nonnull

src/main/java/com/scalableminds/zarrjava/v3/Array.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
import com.fasterxml.jackson.databind.ObjectMapper;
44
import com.scalableminds.zarrjava.ZarrException;
5+
import com.scalableminds.zarrjava.store.StoreHandle;
56
import com.scalableminds.zarrjava.utils.IndexingUtils;
67
import com.scalableminds.zarrjava.utils.MultiArrayUtils;
7-
import com.scalableminds.zarrjava.store.StoreHandle;
88
import com.scalableminds.zarrjava.utils.Utils;
99
import com.scalableminds.zarrjava.v3.codec.CodecPipeline;
1010
import ucar.ma2.InvalidRangeException;

src/main/java/com/scalableminds/zarrjava/v3/ArrayMetadata.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ public static Object parseFillValue(Object fillValue, @Nonnull DataType dataType
196196
}
197197
}
198198
}
199-
throw new ZarrException("Invalid fill value '"+ fillValue+"'.");
199+
throw new ZarrException("Invalid fill value '" + fillValue + "'.");
200200
}
201201

202202
public static Builder builder() {

src/main/java/com/scalableminds/zarrjava/v3/codec/CodecPipeline.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,9 @@ BytesBytesCodec[] getBytesBytesCodecs() {
6464
}
6565

6666
@Nonnull
67-
public Array decode(@Nonnull ByteBuffer chunkBytes, @Nonnull ArrayMetadata.CoreArrayMetadata arrayMetadata) throws ZarrException {
67+
public Array decode(
68+
@Nonnull ByteBuffer chunkBytes,
69+
@Nonnull ArrayMetadata.CoreArrayMetadata arrayMetadata) throws ZarrException {
6870
for (BytesBytesCodec codec : getBytesBytesCodecs()) {
6971
chunkBytes = codec.decode(chunkBytes, arrayMetadata);
7072
}
@@ -78,7 +80,8 @@ public Array decode(@Nonnull ByteBuffer chunkBytes, @Nonnull ArrayMetadata.CoreA
7880
}
7981

8082
@Nonnull
81-
public ByteBuffer encode(@Nonnull Array chunkArray, @Nonnull ArrayMetadata.CoreArrayMetadata arrayMetadata) throws ZarrException {
83+
public ByteBuffer encode(
84+
@Nonnull Array chunkArray, @Nonnull ArrayMetadata.CoreArrayMetadata arrayMetadata) throws ZarrException {
8285
for (ArrayArrayCodec codec : getArrayArrayCodecs()) {
8386
chunkArray = codec.encode(chunkArray, arrayMetadata);
8487
}

src/main/java/com/scalableminds/zarrjava/v3/codec/core/ShardingIndexedCodec.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
import com.scalableminds.zarrjava.utils.CRC32C;
77
import com.scalableminds.zarrjava.utils.IndexingUtils;
88
import com.scalableminds.zarrjava.utils.MultiArrayUtils;
9-
import com.scalableminds.zarrjava.v3.ArrayMetadata;
109
import com.scalableminds.zarrjava.utils.Utils;
10+
import com.scalableminds.zarrjava.v3.ArrayMetadata;
1111
import com.scalableminds.zarrjava.v3.codec.ArrayBytesCodec;
1212
import com.scalableminds.zarrjava.v3.codec.Codec;
1313
import com.scalableminds.zarrjava.v3.codec.CodecPipeline;
@@ -108,7 +108,8 @@ public Array decode(ByteBuffer shardBytes, ArrayMetadata.CoreArrayMetadata array
108108
new ArrayMetadata.CoreArrayMetadata(Utils.toLongArray(arrayMetadata.chunkShape),
109109
configuration.chunkShape, arrayMetadata.dataType, arrayMetadata.parsedFillValue);
110110

111-
Arrays.stream(IndexingUtils.computeChunkCoords(shardMetadata.shape, shardMetadata.chunkShape)).parallel().forEach(
111+
Arrays.stream(
112+
IndexingUtils.computeChunkCoords(shardMetadata.shape, shardMetadata.chunkShape)).parallel().forEach(
112113
chunkCoords -> {
113114
try {
114115
final int i = (int) IndexingUtils.cOrderIndex(chunkCoords, Utils.toLongArray(chunksPerShard));
@@ -118,7 +119,8 @@ public Array decode(ByteBuffer shardBytes, ArrayMetadata.CoreArrayMetadata array
118119
final int chunkByteLength = (int) shardIndex[i][1];
119120
Array chunkArray = null;
120121
final IndexingUtils.ChunkProjection chunkProjection =
121-
IndexingUtils.computeProjection(chunkCoords, shardMetadata.shape, shardMetadata.chunkShape);
122+
IndexingUtils.computeProjection(chunkCoords, shardMetadata.shape,
123+
shardMetadata.chunkShape);
122124
if (chunkByteOffset != -1 && chunkByteLength != -1) {
123125
shardBytesSlice.limit(chunkByteOffset + chunkByteLength);
124126
shardBytesSlice.position(chunkByteOffset);
@@ -151,12 +153,14 @@ public ByteBuffer encode(final Array shardArray, final ArrayMetadata.CoreArrayMe
151153
final long[][] shardIndex = new long[chunkCount][2];
152154
final List<ByteBuffer> chunkBytesList = new ArrayList<>(chunkCount);
153155

154-
Arrays.stream(IndexingUtils.computeChunkCoords(shardMetadata.shape, shardMetadata.chunkShape)).parallel().forEach(
156+
Arrays.stream(
157+
IndexingUtils.computeChunkCoords(shardMetadata.shape, shardMetadata.chunkShape)).parallel().forEach(
155158
chunkCoords -> {
156159
try {
157160
final int i = (int) IndexingUtils.cOrderIndex(chunkCoords, Utils.toLongArray(chunksPerShard));
158161
final IndexingUtils.ChunkProjection chunkProjection =
159-
IndexingUtils.computeProjection(chunkCoords, shardMetadata.shape, shardMetadata.chunkShape);
162+
IndexingUtils.computeProjection(chunkCoords, shardMetadata.shape,
163+
shardMetadata.chunkShape);
160164
final Array chunkArray =
161165
shardArray.sectionNoReduce(chunkProjection.outOffset, chunkProjection.shape, null);
162166
if (MultiArrayUtils.allValuesEqual(chunkArray, shardMetadata.parsedFillValue)) {

0 commit comments

Comments
 (0)