diff options
author | Benoit Steiner <bsteiner@google.com> | 2017-08-01 16:16:52 -0700 |
---|---|---|
committer | TensorFlower Gardener <gardener@tensorflow.org> | 2017-08-01 16:21:29 -0700 |
commit | 05c491d30888088873fedfbe81bca378c8c3fc87 (patch) | |
tree | d8779f7ceabeb6998c61c36fa9af1fe537c0a6e4 /tensorflow/tools/gcs_test | |
parent | e0108157af11bac4afd0ad1e7f2b07cd2fff2a7d (diff) |
Merge changes from github.
END_PUBLIC
---
Commit e62de3f78 authored by Kay Zhu<kayzhu@google.com>
Committed by TensorFlower Gardener<gardener@tensorflow.org>:
[XLA] Handle Reverse in HloEvaluator.
Also move HandleCopy to outer visitor instead, since it can be implemented
as a type-agnostic copy instead.
PiperOrigin-RevId: 163866499
---
Commit 96675956e authored by Asim Shankar<ashankar@google.com>
Committed by TensorFlower Gardener<gardener@tensorflow.org>:
C API: Avoid converting uninitialized tensorflow::Tensor to TF_Tensor*
And return error messages instead of CHECK failing when the conversion
fails.
PiperOrigin-RevId: 163863981
---
Commit 9593704b2 authored by A. Unique TensorFlower<gardener@tensorflow.org>
Committed by TensorFlower Gardener<gardener@tensorflow.org>:
Fix framework import function dependency.
PiperOrigin-RevId: 163863883
---
Commit 66f148542 authored by A. Unique TensorFlower<gardener@tensorflow.org>
Committed by TensorFlower Gardener<gardener@tensorflow.org>:
Improve performance of compilation by ~8% by speeding up the
hlo rematerialization pass.
Changes:
. Wrap each HloInstruction* inside an Item structure that keeps
associated data. This allows us to get rid of a bunch of
hash tables indexed by HloInstruction*.
* Switch to an intrusive linked list (instead of std::list) so
that we can avoid a hash table that maps to std::list::iterator.
* Use inlined vector in a few places.
PiperOrigin-RevId: 163848365
---
Commit 6d77a0129 authored by A. Unique TensorFlower<gardener@tensorflow.org>
Committed by TensorFlower Gardener<gardener@tensorflow.org>:
Hide NonMaxSuppression and NonMaxSuppressionV2 ops and add a python wrapper that sets a backwards compatible default value for iou_threshold.
PiperOrigin-RevId: 163844703
---
Commit 1a4499607 authored by A. Unique TensorFlower<gardener@tensorflow.org>
Committed by TensorFlower Gardener<gardener@tensorflow.org>:
Fix: add GDN to __init__. Also put it in alphabetical order.
PiperOrigin-RevId: 163842410
---
Commit db0e1c6c8 authored by Benoit Steiner<bsteiner@google.com>
Committed by TensorFlower Gardener<gardener@tensorflow.org>:
Don't force inlining of functions marked no-inline
PiperOrigin-RevId: 163842238
---
Commit 18718b6f7 authored by Benoit Steiner<bsteiner@google.com>
Committed by TensorFlower Gardener<gardener@tensorflow.org>:
Misc grappler improvements:
* Avoid copying optimized graphs since that takes time.
* Avoid optimizing a pruned graph, since it's already been pruned there isn't much to gain
PiperOrigin-RevId: 163842122
---
Commit 90abbf684 authored by Benoit Steiner<bsteiner@google.com>
Committed by TensorFlower Gardener<gardener@tensorflow.org>:
Use OP_REQUIRES instead of an assertion to validate op arguments
PiperOrigin-RevId: 163841759
---
Commit 203c3f5fd authored by A. Unique TensorFlower<gardener@tensorflow.org>
Committed by TensorFlower Gardener<gardener@tensorflow.org>:
Infer unknown shapes for functions in C++
As we are implementing function support through C API, the new code path
runs shape inference of Operations representing functions, but we don't
yet support shape inference for functions.
Before this change, adding a function NodeDef would result in error.
This change pairs all functions with a shape inference function that
sets all output shapes to unknown.
PiperOrigin-RevId: 163830793
---
Commit 3cc5fc088 authored by Chris Leary<leary@google.com>
Committed by TensorFlower Gardener<gardener@tensorflow.org>:
[XLA] Implement MirrorPad op.
Addresses #11890
* Improves the shape inference error message for concatenate.
* Adds a helper to Literal that gets an integral value converted to int64.
PiperOrigin-RevId: 163829437
---
Commit c7b674fa2 authored by A. Unique TensorFlower<gardener@tensorflow.org>
Committed by TensorFlower Gardener<gardener@tensorflow.org>:
flatten_up_to should return values, not keys
PiperOrigin-RevId: 163809688
---
Commit 6209b4b52 authored by Asim Shankar<ashankar@google.com>
Committed by TensorFlower Gardener<gardener@tensorflow.org>:
Minor refactoring the TF_Tensor <-> PyArray conversion functions.
PiperOrigin-RevId: 163802822
---
Commit 618f913bb authored by Yao Zhang<yaozhang@google.com>
Committed by TensorFlower Gardener<gardener@tensorflow.org>:
Speed up topological sort by avoiding copies. The speedup is about 10-20%.
PiperOrigin-RevId: 163800134
---
Commit 6446895aa authored by A. Unique TensorFlower<gardener@tensorflow.org>
Committed by TensorFlower Gardener<gardener@tensorflow.org>:
Remove and replace broken giflib download link
PiperOrigin-RevId: 163796393
---
Commit 9d5613088 authored by Chris Leary<leary@google.com>
Committed by TensorFlower Gardener<gardener@tensorflow.org>:
[XLA:CPU] Atomically enqueue tuple buffers for outfeed.
Previously it was possible that a distinct thread could hop in between the
buffer enqueues done by a tuple-outfeeding thread. This changes the sequence to
enqueue all the tuple buffers as an atomic unit.
PiperOrigin-RevId: 163781804
---
Commit b882d686f authored by Bjarke Hammersholt Roune<broune@google.com>
Committed by TensorFlower Gardener<gardener@tensorflow.org>:
Allow cost estimates to differ per backend and include the estimates into the HLO profile. Add a summary table for what categories have the most opportunity for optimization left in them.
PiperOrigin-RevId: 163780413
---
Commit 14b736761 authored by A. Unique TensorFlower<gardener@tensorflow.org>
Committed by TensorFlower Gardener<gardener@tensorflow.org>:
Pass stats_collector when using SymbolicGradientOp.
PiperOrigin-RevId: 163773897
---
Commit 5202a5b6c authored by RJ Ryan<rjryan@google.com>
Committed by TensorFlower Gardener<gardener@tensorflow.org>:
Fix some typos in StreamExecutor's cuFFT support.
PiperOrigin-RevId: 163771825
---
Commit edac90c7c authored by A. Unique TensorFlower<gardener@tensorflow.org>
Committed by TensorFlower Gardener<gardener@tensorflow.org>:
Add support to generate pprof results to tf.profiler
A fun thing is, it can not only profile time,memory
but also parameters, etc.
PiperOrigin-RevId: 163767517
---
Commit 78a90370e authored by Eli Bendersky<eliben@google.com>
Committed by TensorFlower Gardener<gardener@tensorflow.org>:
[XLA] Refactor CreateModuleConfig to share code between multiple call-sites.
Previously Service, LocalService and CompileOnlyService had their own code to
create a new HloModuleConfig, with much repetition (and some ommissions);
collect all these uses in a single method.
PiperOrigin-RevId: 163766869
---
Commit 6150611ae authored by Anna R<annarev@google.com>
Committed by TensorFlower Gardener<gardener@tensorflow.org>:
Internal change.
PiperOrigin-RevId: 163765028
---
Commit 9e7875437 authored by A. Unique TensorFlower<gardener@tensorflow.org>
Committed by TensorFlower Gardener<gardener@tensorflow.org>:
Add the option of including Shape, ShapeN, Size and Rank in the standard TensorFlow constant propagation pass, when the inputs to those Ops have sufficiently known static shape.
PiperOrigin-RevId: 163762750
---
Commit 8b1365bb4 authored by Yuefeng Zhou<yuefengz@google.com>
Committed by TensorFlower Gardener<gardener@tensorflow.org>:
Infer output shape for restore op.
PiperOrigin-RevId: 163762216
---
Commit 2e2a8536d authored by A. Unique TensorFlower<gardener@tensorflow.org>
Committed by TensorFlower Gardener<gardener@tensorflow.org>:
Update WorkerCacheLogger::RecordDataTransfer to not modify the details if provided.
PiperOrigin-RevId: 163761089
---
Commit d03ba54f7 authored by Yangzihao Wang<yangzihao@google.com>
Committed by TensorFlower Gardener<gardener@tensorflow.org>:
Use BlasGemv() when autotune is not set.
PiperOrigin-RevId: 163754092
---
Commit 724884f1c authored by Justin Lebar<jlebar@google.com>
Committed by TensorFlower Gardener<gardener@tensorflow.org>:
Show layouts in HLO graph dump.
Layouts are displayed as e.g. "f32[100,200]{0,1}". But constants used
to be displayed as e.g. "f32[]{42}". To avoid ambiguity, constants are
now displayed as e.g. "42 (f32[])".
Also gets rid of the xla_hlo_graph_layout flag, which is no longer
necessary since we're now showing layouts unconditionally.
PiperOrigin-RevId: 163753637
---
Commit 84c2757a6 authored by A. Unique TensorFlower<gardener@tensorflow.org>
Committed by TensorFlower Gardener<gardener@tensorflow.org>:
Move Grappler test GraphDefs to separate files
PiperOrigin-RevId: 163751948
---
Commit 0b3a25d68 authored by Asim Shankar<ashankar@google.com>
Committed by TensorFlower Gardener<gardener@tensorflow.org>:
Make TF_RESOURCE memory handling consistent with other types.
TF_Tensor's are backed by a contiguous memory region for all
but TF_RESOURCE tensors. The memory management of TF_RESOURCE
tensors required keeping a backing tensorflow::ResourceHandle*
object alive for the lifetime of the TF_Tensor object.
This change removes that discrepancy, making the memory backing
TF_RESOURCE tensors self-contained. This simplifies use of TF_RESOURCE
tensors in the C API (as users of the C API do not need to worry about
a tensorflow::ResourceHandle object and its lifetime). In doing so, this
moves a string memory copy from the TF_Tensor <-> Numpy conversion
to the C API from the Python session helper.
Unfortunately, I couldn't figure out how to add a simple unittest in
c_api_test.cc. The more comprehensive tensorflow/python/kernel_tests/session_ops_test.py
does cover the changed lines though.
Additionally, avoid an unnecessary copy when creating TF_STRING or TF_RESOURCE
tensors (as eigen alignment is not a requirement for them).
PiperOrigin-RevId: 163751880
---
Commit 1333e7745 authored by A. Unique TensorFlower<gardener@tensorflow.org>
Committed by TensorFlower Gardener<gardener@tensorflow.org>:
Allow one tensor to be the input to the estimator.
PiperOrigin-RevId: 163747076
---
Commit 104f349e9 authored by A. Unique TensorFlower<gardener@tensorflow.org>
Committed by TensorFlower Gardener<gardener@tensorflow.org>:
Update Conv2DShape function to handle filters that have data NCHW_VECT_C layout.
PiperOrigin-RevId: 163746769
---
Commit efb7fb8e5 authored by A. Unique TensorFlower<gardener@tensorflow.org>
Committed by TensorFlower Gardener<gardener@tensorflow.org>:
Use XLA_VLOG_LINES() in literal_test_util to avoid truncation of large tensors.
PiperOrigin-RevId: 163745522
---
Commit 043505a09 authored by Suharsh Sivakumar<suharshs@google.com>
Committed by TensorFlower Gardener<gardener@tensorflow.org>:
MasterSession should throw error if use_per_session_threads or session_inter_op_thread_pool is set.
PiperOrigin-RevId: 163743936
---
Commit 6ba02f0e9 authored by Artem Belevich<tra@google.com>
Committed by TensorFlower Gardener<gardener@tensorflow.org>:
[XLA] Added HasAllocationAt() helper function.
PiperOrigin-RevId: 163742985
---
Commit 18304683e authored by Justine Tunney<jart@google.com>
Committed by TensorFlower Gardener<gardener@tensorflow.org>:
Pin tensorflow to tensorflow-tensorboard 0.1.x
This change will be cherry-picked into the 1.3.0 release.
PiperOrigin-RevId: 163742463
---
Commit 3445dd0ed authored by Justine Tunney<jart@google.com>
Committed by TensorFlower Gardener<gardener@tensorflow.org>:
Make 'import tensorflow' go faster
It now takes about 400ms rather than 800ms, if the file system cache is warm.
Most of the latency was due to parsing text_format OpList protocol buffers in
our generated sources. We now use a binary representation, while preserving the
text proto as a comment for readability.
Note: This change does not improve the latency of dereferencing tf.contrib,
which takes about 340ms.
PiperOrigin-RevId: 163739355
---
Commit c215c55d5 authored by Neal Wu<wun@google.com>
Committed by TensorFlower Gardener<gardener@tensorflow.org>:
Add missing py_binary for mnist_deep.py
PiperOrigin-RevId: 163737503
---
Commit b663c9899 authored by A. Unique TensorFlower<gardener@tensorflow.org>
Committed by TensorFlower Gardener<gardener@tensorflow.org>:
Make non-iterable input to `stratified_sample` produce better error message.
PiperOrigin-RevId: 163735979
---
Commit 122750a87 authored by Peter Hawkins<phawkins@google.com>
Committed by TensorFlower Gardener<gardener@tensorflow.org>:
[SE] Make ExecutorCache thread-safe, change ExecutorCache::Insert to ExecutorCache::GetOrCreate. Add support for creating Executors for different device ordinals in parallel.
[XLA] Create Executors in parallel.
PiperOrigin-RevId: 163734988
---
Commit 7ebed6678 authored by Frank Chen<frankchn@google.com>
Committed by TensorFlower Gardener<gardener@tensorflow.org>:
Add __init__.py to the contrib/cluster_resolver directory so that the Cluster Resolver classes within this are visible to open source TensorFlow users.
PiperOrigin-RevId: 163733781
---
Commit 21faf19d0 authored by Shanqing Cai<cais@google.com>
Committed by TensorFlower Gardener<gardener@tensorflow.org>:
Upgrade pip version to 9.0.1; Prettier format of log text
* Upgrade pip version used in virtualenv created by the test-on-install to latest (9.0.1).
* Highlight step titles of pip builds with bold font.
PiperOrigin-RevId: 163732825
---
Commit 5887cc10e authored by Kay Zhu<kayzhu@google.com>
Committed by TensorFlower Gardener<gardener@tensorflow.org>:
[XLA] In LiteralUtil::StridedConfig: choose the larger dimension between the
source and destination shapes' minor-most dimension index.
PiperOrigin-RevId: 163732014
---
Commit f9c644693 authored by Peter Hawkins<phawkins@google.com>
Committed by TensorFlower Gardener<gardener@tensorflow.org>:
[TF:XLA] Disable sanitizers for depthwise conv test to fix test flakiness.
PiperOrigin-RevId: 163727765
---
Commit 6263539a1 authored by Allen Lavoie<allenl@google.com>
Committed by TensorFlower Gardener<gardener@tensorflow.org>:
Grappler memory optimization: allow inputs to gradients with non-standard names to be recomputed
Includes Python tests for name-scoped gradients.
PiperOrigin-RevId: 163720208
---
Commit 4ac195669 authored by Benoit Steiner<benoitsteiner@users.noreply.github.com>
Committed by GitHub<noreply@github.com>:
Branch 163695881 (#11913)
* Prevent ctc_loss op from segfaulting when given empty batch.
PiperOrigin-RevId: 163663460
* New "SavedModel: Practical Uses" and "SavedModel: Architecture" documents.
PiperOrigin-RevId: 163669809
* Minor cleanup
PiperOrigin-RevId: 163685423
* Add regression variance over individual trees to TensorForest inference.
PiperOrigin-RevId: 163695881
---
Commit b876065af authored by Alexandre Passos<apassos@google.com>
Committed by TensorFlower Gardener<gardener@tensorflow.org>:
graph_to_function_def gets its own file
PiperOrigin-RevId: 163709410
---
Commit 29550762b authored by A. Unique TensorFlower<gardener@tensorflow.org>
Committed by TensorFlower Gardener<gardener@tensorflow.org>:
Fixes unit tests for inverse hyperbolic functions that were failing because numeric gradients were computed too close to a branch cut (for complex arguments) or singularity (for real arguments) where the function is not differentiable (See, e.g., http://mathworld.wolfram.com/BranchCut.html). This change moves the test points away from the branch cut/singularity.
Improves precision of double precision numerical gradients by using a smaller step size delta (the optimal for symmetric difference approximation with functions computed with O(epsilon) error is epsilon^(1/3), so for double64 it is ~1e-5).
PiperOrigin-RevId: 163706297
---
Commit 99b190a1f authored by Peter Hawkins<phawkins@google.com>
Committed by TensorFlower Gardener<gardener@tensorflow.org>:
[TF:XLA] Add implementation of depthwise convolution.
This implementation expands the depthwise convolution kernels into a regular convolution kernel, which may not scale to large feature depths.
PiperOrigin-RevId: 163705408
---
Commit f6f07b027 authored by A. Unique TensorFlower<gardener@tensorflow.org>
Committed by TensorFlower Gardener<gardener@tensorflow.org>:
Allow kernel unit tests to run on GPU
PiperOrigin-RevId: 163705027
---
Commit 4ec29c5d9 authored by A. Unique TensorFlower<gardener@tensorflow.org>
Committed by TensorFlower Gardener<gardener@tensorflow.org>:
Avoid direct access to Node::def() where some other method works.
PiperOrigin-RevId: 163704839
---
Commit 153be4d26 authored by Luke Iwanski<luke@codeplay.com>
Committed by Benoit Steiner<benoitsteiner@users.noreply.github.com>:
[OpenCL] Stats tracking (#11523)
* Adds stat tracking to the SYCL allocator
The SYCLAllocator will now find the max allocation size on construction,
and keep track of the allocation stats, as given in AllocationStats.
* [OpenCL] Adds buffer size tracking to SYCL allocator (#114)
The SYCL buffers underlying tensors already keep track of their sizes,
so we can easily provide this tracking information for debugging
purposes.
---
Commit 8d642672f authored by Amit Patankar<amitpatankar@google.com>
Committed by Amit Patankar<amitpatankar@google.com>:
Disabling gmm_test.py on Windows builds as it's flaky on GPU nightly builds.
---
Commit 1560c55d2 authored by A. Unique TensorFlower<gardener@tensorflow.org>
Committed by TensorFlower Gardener<gardener@tensorflow.org>:
Add regression variance over individual trees to TensorForest inference.
PiperOrigin-RevId: 163695881
---
Commit 15e928d51 authored by A. Unique TensorFlower<gardener@tensorflow.org>
Committed by TensorFlower Gardener<gardener@tensorflow.org>:
Minor cleanup
PiperOrigin-RevId: 163685423
---
Commit f9c758719 authored by A. Unique TensorFlower<gardener@tensorflow.org>
Committed by TensorFlower Gardener<gardener@tensorflow.org>:
New "SavedModel: Practical Uses" and "SavedModel: Architecture" documents.
PiperOrigin-RevId: 163669809
---
Commit f19bb3beb authored by A. Unique TensorFlower<gardener@tensorflow.org>
Committed by TensorFlower Gardener<gardener@tensorflow.org>:
Prevent ctc_loss op from segfaulting when given empty batch.
PiperOrigin-RevId: 163663460
---
Commit 454fe936c authored by Taehoon Lee<taehoonlee@snu.ac.kr>
Committed by Taehoon Lee<taehoonlee@snu.ac.kr>:
Fix typos
---
Commit e17650b69 authored by Frank Chen<frankchn@google.com>
Committed by TensorFlower Gardener<gardener@tensorflow.org>:
This adds the cluster_resolver module to contrib/__init__.py so that it is actually visible to open source TensorFlow users.
PiperOrigin-RevId: 163636676
---
Commit 926c0f6ee authored by ??<awsomekde@gmail.com>
Committed by GitHub<noreply@github.com>:
fix minor typo
---
Commit 00d3126a3 authored by Yao Zhang<yaozhang@google.com>
Committed by TensorFlower Gardener<gardener@tensorflow.org>:
Change const nodes to variables in the test, so that they are not optimized
away by the grappler constant folding pass.
PiperOrigin-RevId: 163602405
---
Commit 1c7c9c716 authored by Aditya Dhulipala<aditya.d@hotmail.com>
Committed by Vijay Vasudevan<vrv@google.com>:
Minor typo correction (#11874)
---
Commit f91a3546e authored by Sergii Khomenko<x-sam@brainscode.com>
Committed by Vijay Vasudevan<vrv@google.com>:
Fix a minor typo (#11873)
---
Commit adf5d1bc0 authored by A. Unique TensorFlower<gardener@tensorflow.org>
Committed by TensorFlower Gardener<gardener@tensorflow.org>:
BEGIN_PUBLIC
Automated g4 rollback of changelist 163510186
PiperOrigin-RevId: 163902859
Diffstat (limited to 'tensorflow/tools/gcs_test')
-rw-r--r-- | tensorflow/tools/gcs_test/python/gcs_smoke.py | 138 |
1 files changed, 109 insertions, 29 deletions
diff --git a/tensorflow/tools/gcs_test/python/gcs_smoke.py b/tensorflow/tools/gcs_test/python/gcs_smoke.py index 51933a52a6..9882f75a8a 100644 --- a/tensorflow/tools/gcs_test/python/gcs_smoke.py +++ b/tensorflow/tools/gcs_test/python/gcs_smoke.py @@ -50,55 +50,135 @@ def create_examples(num_examples, input_mean): return examples def create_dir_test(): - """Verifies file_io directory handling methods .""" + """Verifies file_io directory handling methods.""" - starttime = int(round(time.time() * 1000)) - dir_name = "%s/tf_gcs_test_%s" % (FLAGS.gcs_bucket_url, starttime) + # Test directory creation. + starttime_ms = int(round(time.time() * 1000)) + dir_name = "%s/tf_gcs_test_%s" % (FLAGS.gcs_bucket_url, starttime_ms) print("Creating dir %s" % dir_name) file_io.create_dir(dir_name) - elapsed = int(round(time.time() * 1000)) - starttime - print("Created directory in: %d milliseconds" % elapsed) + elapsed_ms = int(round(time.time() * 1000)) - starttime_ms + print("Created directory in: %d milliseconds" % elapsed_ms) + # Check that the directory exists. dir_exists = file_io.is_directory(dir_name) + assert dir_exists print("%s directory exists: %s" % (dir_name, dir_exists)) - # List contents of just created directory. - print("Listing directory %s." % dir_name) - starttime = int(round(time.time() * 1000)) - print(file_io.list_directory(dir_name)) - elapsed = int(round(time.time() * 1000)) - starttime - print("Listed directory %s in %s milliseconds" % (dir_name, elapsed)) + # Test recursive directory creation. + starttime_ms = int(round(time.time() * 1000)) + recursive_dir_name = "%s/%s/%s" % (dir_name, + "nested_dir1", + "nested_dir2") + print("Creating recursive dir %s" % recursive_dir_name) + file_io.recursive_create_dir(recursive_dir_name) + elapsed_ms = int(round(time.time() * 1000)) - starttime_ms + print("Created directory recursively in: %d milliseconds" % elapsed_ms) - # Delete directory. - print("Deleting directory %s." % dir_name) - starttime = int(round(time.time() * 1000)) + # Check that the directory exists. + recursive_dir_exists = file_io.is_directory(recursive_dir_name) + assert recursive_dir_exists + print("%s directory exists: %s" % (recursive_dir_name, recursive_dir_exists)) + + # Create some contents in the just created directory and list the contents. + num_files = 10 + files_to_create = ["file_%d.txt" % n for n in range(num_files)] + for file_num in files_to_create: + file_name = "%s/%s" % (dir_name, file_num) + print("Creating file %s." % file_name) + file_io.write_string_to_file(file_name, "test file.") + + print("Listing directory %s." % dir_name) + starttime_ms = int(round(time.time() * 1000)) + directory_contents = file_io.list_directory(dir_name) + print(directory_contents) + elapsed_ms = int(round(time.time() * 1000)) - starttime_ms + print("Listed directory %s in %s milliseconds" % (dir_name, elapsed_ms)) + assert set(directory_contents) == set(files_to_create + ["nested_dir1/"]) + + # Test directory renaming. + dir_to_rename = "%s/old_dir" % dir_name + new_dir_name = "%s/new_dir" % dir_name + file_io.create_dir(dir_to_rename) + assert file_io.is_directory(dir_to_rename) + assert not file_io.is_directory(new_dir_name) + + starttime_ms = int(round(time.time() * 1000)) + print("Will try renaming directory %s to %s" % (dir_to_rename, new_dir_name)) + file_io.rename(dir_to_rename, new_dir_name) + elapsed_ms = int(round(time.time() * 1000)) - starttime_ms + print("Renamed directory %s to %s in %s milliseconds" % ( + dir_to_rename, new_dir_name, elapsed_ms)) + assert not file_io.is_directory(dir_to_rename) + assert file_io.is_directory(new_dir_name) + + # Test Delete directory recursively. + print("Deleting directory recursively %s." % dir_name) + starttime_ms = int(round(time.time() * 1000)) file_io.delete_recursively(dir_name) - elapsed = int(round(time.time() * 1000)) - starttime - print("Deleted directory %s in %s milliseconds" % (dir_name, elapsed)) + elapsed_ms = int(round(time.time() * 1000)) - starttime_ms + dir_exists = file_io.is_directory(dir_name) + assert not dir_exists + print("Deleted directory recursively %s in %s milliseconds" % ( + dir_name, elapsed_ms)) def create_object_test(): """Verifies file_io's object manipulation methods .""" - starttime = int(round(time.time() * 1000)) - dir_name = "%s/tf_gcs_test_%s" % (FLAGS.gcs_bucket_url, starttime) + starttime_ms = int(round(time.time() * 1000)) + dir_name = "%s/tf_gcs_test_%s" % (FLAGS.gcs_bucket_url, starttime_ms) print("Creating dir %s." % dir_name) file_io.create_dir(dir_name) - # Create a file in this directory. - file_name = "%s/test_file.txt" % dir_name - print("Creating file %s." % file_name) - file_io.write_string_to_file(file_name, "test file creation.") - + num_files = 5 + # Create files of 2 different patterns in this directory. + files_pattern_1 = ["%s/test_file_%d.txt" % (dir_name, n) + for n in range(num_files)] + files_pattern_2 = ["%s/testfile%d.txt" % (dir_name, n) + for n in range(num_files)] + + starttime_ms = int(round(time.time() * 1000)) + files_to_create = files_pattern_1 + files_pattern_2 + for file_name in files_to_create: + print("Creating file %s." % file_name) + file_io.write_string_to_file(file_name, "test file creation.") + elapsed_ms = int(round(time.time() * 1000)) - starttime_ms + print("Created %d files in %s milliseconds" % (len(files_to_create), elapsed_ms)) + + # Listing files of pattern1. list_files_pattern = "%s/test_file*.txt" % dir_name print("Getting files matching pattern %s." % list_files_pattern) + starttime_ms = int(round(time.time() * 1000)) files_list = file_io.get_matching_files(list_files_pattern) + elapsed_ms = int(round(time.time() * 1000)) - starttime_ms + print("Listed files in %s milliseconds" % elapsed_ms) print(files_list) + assert set(files_list) == set(files_pattern_1) - assert len(files_list) == 1 - assert files_list[0] == file_name - - # Cleanup test files. - print("Deleting file %s." % file_name) - file_io.delete_file(file_name) + # Listing files of pattern2. + list_files_pattern = "%s/testfile*.txt" % dir_name + print("Getting files matching pattern %s." % list_files_pattern) + starttime_ms = int(round(time.time() * 1000)) + files_list = file_io.get_matching_files(list_files_pattern) + elapsed_ms = int(round(time.time() * 1000)) - starttime_ms + print("Listed files in %s milliseconds" % elapsed_ms) + print(files_list) + assert set(files_list) == set(files_pattern_2) + + # Test renaming file. + file_to_rename = "%s/oldname.txt" % dir_name + file_new_name = "%s/newname.txt" % dir_name + file_io.write_string_to_file(file_to_rename, "test file.") + assert file_io.file_exists(file_to_rename) + assert not file_io.file_exists(file_new_name) + + print("Will try renaming file %s to %s" % (file_to_rename, file_new_name)) + starttime_ms = int(round(time.time() * 1000)) + file_io.rename(file_to_rename, file_new_name) + elapsed_ms = int(round(time.time() * 1000)) - starttime_ms + print("File %s renamed to %s in %s milliseconds" % ( + file_to_rename, file_new_name, elapsed_ms)) + assert not file_io.file_exists(file_to_rename) + assert file_io.file_exists(file_new_name) # Delete directory. print("Deleting directory %s." % dir_name) |