This file is indexed.

/usr/lib/python2.7/dist-packages/dicom/test/performance/time_test.py is in python-dicom 0.9.9-3.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
# time_test.py
"""Try reading large sets of files, profiling how much time it takes"""
# Copyright (c) 2008-2012 Darcy Mason
# This file is part of pydicom, relased under an MIT license.
#    See the file license.txt included with this distribution, also
#    available at http://pydicom.googlecode.com

import os.path
import os
import sys
on_windows = sys.platform.startswith("win")

# EDIT THIS SECTION --------------------------
#    to point to local temp directory, and to a set of >400 DICOM files of same size to work on
# I used images freely available from http://pcir.org
if on_windows:
    tempfile = "c:/temp/pydicom_stats"
    location_base = r"z:/testdicom/"
else:
    tempfile = "/tmp/pydicom_stats"
    location_base = r"/Users/darcy/testdicom/"
    # location_base = r"/Volumes/Disk 1/testdicom/"  # Network disk location
locations = [
    "77654033_19950903/77654033/19950903/CT2/",
    "98890234_20010101/98890234/20010101/CT5/",
    "98890234_20010101/98890234/20010101/CT6/",
    "98890234_20010101/98890234/20010101/CT7/",
]
locations = [os.path.join(location_base, location) for location in locations]
# -------------------------------------------------------
import glob
import dicom
from dicom.filereader import read_partial, _at_pixel_data
from io import BytesIO

import cProfile
import pstats
import sys
import random

rp = read_partial
filenames = []
for location in locations:
    loc_list = glob.glob(os.path.join(location, "*"))
    filenames.extend((x for x in loc_list if not x.startswith(".")))

assert len(filenames) >= 400, "Need at least 400 files"  # unless change slices below


print()
random.shuffle(filenames)  # to make sure no bias for any particular file


print("Sampling from %d files. Each test gets 100 distinct files" % len(filenames))
print("Test order is randomized too...")

# Give each test it's own set of files, to avoid reading something in cache from previous test
filenames1 = filenames[:100]  # keep the time to a reasonable amount (~2-25 sec)
filenames2 = filenames[100:200]
filenames3 = filenames[200:300]
filenames4 = filenames[300:400]


def test_full_read():
    rf = dicom.read_file
    datasets = [rf(fn) for fn in filenames1]
    return datasets


def test_partial():
    rp = read_partial
    [rp(open(fn, 'rb'), stop_when=_at_pixel_data) for fn in filenames2]


def test_mem_read_full():
    rf = dicom.read_file
    str_io = BytesIO
    memory_files = (str_io(open(fn, 'rb').read()) for fn in filenames3)
    [rf(memory_file) for memory_file in memory_files]


def test_mem_read_small():
    rf = dicom.read_file
    str_io = BytesIO  # avoid global lookup, make local instead
    memory_files = (str_io(open(fn, 'rb').read(4000)) for fn in filenames4)
    [rf(memory_file) for memory_file in memory_files]


def test_python_read_files():
    [open(fn, 'rb').read() for fn in filenames4]


if __name__ == "__main__":
    runs = ['datasets=test_full_read()',
            # 'test_partial()',
            # 'test_mem_read_full()',
            # 'test_mem_read_small()',
            'test_python_read_files()',
            ]
    random.shuffle(runs)
    for testrun in runs:
        cProfile.run(testrun, tempfile)
        p = pstats.Stats(tempfile)
        print("---------------")
        print(testrun)
        print("---------------")
        p.strip_dirs().sort_stats('time').print_stats(5)
    print("Confirming file read worked -- check for data elements near end")
    try:
        image_sizes = [len(ds.PixelData) for ds in datasets]  # NOQA
    except Exception as e:
        print("Failed to access dataset data for all files\nError:" + str(e))
    else:
        print("Reads checked ok.")

    # Clear disk cache for next run?
    if not on_windows:
        prompt = "Run purge command (linux/Mac OS X) to clear disk cache?...(N):"
        if sys.version_info[0] > 2:
            answer = input(prompt)
        else:
            answer = raw_input(prompt)
        if answer.lower() == "y":
            print("Running 'purge'. Please wait...")
            os.system("purge")