Path 1: 4430 calls (0.79)

1 (3758) 8 (466) 2 (206)

bytes (4430)

1def read(self, size):
2        if self._read is None:
3            return self.file.read(size)
4        if self._read + size <= self._length:
5            read = self._read
6            self._read += size
7            return self._buffer[read:self._read]
8        else:
9            read = self._read
10            self._read = None
11            return self._buffer[read:] + \
12                   self.file.read(size-self._length+read)
            

Path 2: 862 calls (0.15)

1 (647) 8 (80) 8192 (67) 2 (62) 5 (2) 7 (1) 6 (1) 4 (1) 3 (1)

bytes (862)

1def read(self, size):
2        if self._read is None:
3            return self.file.read(size)
4        if self._read + size <= self._length:
5            read = self._read
6            self._read += size
7            return self._buffer[read:self._read]
8        else:
9            read = self._read
10            self._read = None
11            return self._buffer[read:] + \
12                   self.file.read(size-self._length+read)
            

Path 3: 338 calls (0.06)

8192 (209) 2 (75) 1 (54)

bytes (338)

1def read(self, size):
2        if self._read is None:
3            return self.file.read(size)
4        if self._read + size <= self._length:
5            read = self._read
6            self._read += size
7            return self._buffer[read:self._read]
8        else:
9            read = self._read
10            self._read = None
11            return self._buffer[read:] + \
12                   self.file.read(size-self._length+read)