Completed
Push — master ( 2d79b0...39c744 )
by Kent
03:41
created

tests.test_multi_curve_mnemonics_rewrite()   B

Complexity

Conditions 2

Size

Total Lines 43

Duplication

Lines 0
Ratio 0 %
Metric Value
cc 2
dl 0
loc 43
rs 8.8571
1
import os, sys; sys.path.insert(0, os.path.dirname(os.path.dirname(__file__)))
2
3
import pytest
4
5
from lasio import read, ExcelConverter
6
from lasio.las import StringIO
7
8
test_dir = os.path.dirname(__file__)
9
10
egfn = lambda fn: os.path.join(os.path.dirname(__file__), "examples", fn)
11
12
13
def test_write_sect_widths_12():
14
    l = read(egfn("sample_write_sect_widths_12.las"))
15
    s = StringIO()
16
    l.write(s, version=1.2)
17
    s.seek(0)
18
    assert s.read() == """~Version ---------------------------------------------------
19
VERS. 1.2 : CWLS LOG ASCII STANDARD - VERSION 1.2
20
WRAP.  NO : ONE LINE PER DEPTH STEP
21
~Well ------------------------------------------------------
22
STRT   .M  1670.0 : 
23
STOP   .M 1669.75 : 
24
STEP   .M  -0.125 : 
25
NULL   .  -999.25 : 
26
COMPANY.  COMPANY : # ANY OIL COMPANY LTD.
27
WELL   .     WELL : ANY ET AL OIL WELL #12
28
FLD    .    FIELD : EDAM
29
LOC    . LOCATION : A9-16-49-20W3M
30
PROV   . PROVINCE : SASKATCHEWAN
31
SRVC   .  SERVICE : The company that did this logging has a very very long name....
32
DATE   . LOG DATE : 25-DEC-1988
33
UWI    .  WELL ID : 100091604920W300
34
~Curves ----------------------------------------------------
35
D.M     : 1  DEPTH
36
A.US/M  : 2  SONIC TRANSIT TIME
37
B.K/M3  : 3  BULK DENSITY
38
C.V/V   : 4   NEUTRON POROSITY
39
~Params ----------------------------------------------------
40
BHT .DEGC   35.5 : BOTTOM HOLE TEMPERATURE
41
BS  .MM    200.0 : BIT SIZE
42
FD  .K/M3 1000.0 : FLUID DENSITY
43
MATR.        0.0 : NEUTRON MATRIX(0=LIME,1=SAND,2=DOLO)
44
MDEN.     2710.0 : LOGGING MATRIX DENSITY
45
RMF .OHMM  0.216 : MUD FILTRATE RESISTIVITY
46
DFD .K/M3 1525.0 : DRILL FLUID DENSITY
47
~Other -----------------------------------------------------
48
Note: The logging tools became stuck at 625 meters causing the data
49
between 625 meters and 615 meters to be invalid.
50
~ASCII -----------------------------------------------------
51
       1670     123.45       2550       0.45
52
     1669.9     123.45       2550       0.45
53
     1669.8     123.45       2550       0.45
54
"""
55
56
57
def test_write_sect_widths_12_curves():
58
    l = read(egfn("sample_write_sect_widths_12.las"))
59
    s = StringIO()
60
    l.write(s, version=1.2)
61
    for start in ("D.M ", "A.US/M ", "B.K/M3 ", "C.V/V "):
62
        s.seek(0)
63
        assert "\n" + start in s.read()
64
65
66
def test_write_sect_widths_20_narrow():
67
    l = read(egfn("sample_write_sect_widths_20_narrow.las"))
68
    s = StringIO()
69
    l.write(s, version=2)
70
    s.seek(0)
71
    assert s.read() == """~Version ---------------------------------------------------
72
VERS. 2.0 : CWLS log ASCII Standard -VERSION 2.0
73
WRAP.  NO : ONE LINE PER DEPTH STEP
74
~Well ------------------------------------------------------
75
STRT.M   1670.0 : START DEPTH
76
STOP.M  1669.75 : STOP DEPTH
77
STEP.M   -0.125 : STEP
78
NULL.   -999.25 : NULL VALUE
79
COMP.       ANY : COMPANY
80
WELL.   AAAAA_2 : WELL
81
FLD .   WILDCAT : FIELD
82
LOC .        12 : LOCATION
83
PROV.   ALBERTA : PROVINCE
84
SRVC.   LOGGING : SERVICE COMPANY ARE YOU KIDDING THIS IS A REALLY REALLY LONG STRING
85
DATE. 13-DEC-86 : LOG DATE
86
UWI .  10012340 : UNIQUE WELL ID
87
~Curves ----------------------------------------------------
88
DEPT.M                 : 1  DEPTH
89
DT  .US/M 60 520 32 00 : 2  SONIC TRANSIT TIME
90
RHOB.K/M3 45 350 01 00 : 3  BULK DENSITY
91
NPHI.V/V  42 890 00 00 : 4  NEUTRON POROSITY
92
SFLU.OHMM 07 220 04 00 : 5  SHALLOW RESISTIVITY
93
SFLA.OHMM 07 222 01 00 : 6  SHALLOW RESISTIVITY
94
ILM .OHMM 07 120 44 00 : 7  MEDIUM RESISTIVITY
95
ILD .OHMM 07 120 46 00 : 8  DEEP RESISTIVITY
96
~Params ----------------------------------------------------
97
MUD .   GEL CHEM : MUD TYPE
98
BHT .DEGC   35.5 : BOTTOM HOLE TEMPERATURE
99
BS  .MM    200.0 : BIT SIZE
100
FD  .K/M3 1000.0 : FLUID DENSITY
101
MATR.       SAND : NEUTRON MATRIX
102
MDEN.     2710.0 : LOGGING MATRIX DENSITY
103
RMF .OHMM  0.216 : MUD FILTRATE RESISTIVITY
104
DFD .K/M3 1525.0 : DRILL FLUID DENSITY
105
~Other -----------------------------------------------------
106
Note: The logging tools became stuck at 625 metres causing the data
107
between 625 metres and 615 metres to be invalid.
108
~ASCII -----------------------------------------------------
109
       1670     123.45       2550       0.45     123.45     123.45      110.2      105.6
110
     1669.9     123.45       2550       0.45     123.45     123.45      110.2      105.6
111
     1669.8     123.45       2550       0.45     123.45     123.45      110.2      105.6
112
"""
113
114
115
def test_write_sect_widths_20_wide():
116
    l = read(egfn("sample_write_sect_widths_20_wide.las"))
117
    s = StringIO()
118
    l.write(s, version=2)
119
    s.seek(0)
120
    assert s.read() == """~Version ---------------------------------------------------
121
VERS. 2.0 : CWLS log ASCII Standard -VERSION 2.0
122
WRAP.  NO : ONE LINE PER DEPTH STEP
123
~Well ------------------------------------------------------
124
STRT.M                                                         1670.0 : START DEPTH
125
STOP.M                                                        1669.75 : STOP DEPTH
126
STEP.M                                                         -0.125 : STEP
127
NULL.                                                         -999.25 : NULL VALUE
128
COMP.                                            ANY OIL COMPANY INC. : COMPANY
129
WELL.                                                         AAAAA_2 : WELL
130
FLD .                                                         WILDCAT : FIELD
131
LOC .                                                  12-34-12-34W5M : LOCATION
132
PROV.                                                         ALBERTA : PROVINCE
133
SRVC. The company that did this logging has a very very long name.... : SERVICE COMPANY
134
DATE.                                                       13-DEC-86 : LOG DATE
135
UWI .                                                100123401234W500 : UNIQUE WELL ID
136
~Curves ----------------------------------------------------
137
DEPT.M                 : 1  DEPTH
138
DT  .US/M 60 520 32 00 : 2  SONIC TRANSIT TIME
139
RHOB.K/M3 45 350 01 00 : 3  BULK DENSITY
140
NPHI.V/V  42 890 00 00 : 4  NEUTRON POROSITY
141
SFLU.OHMM 07 220 04 00 : 5  SHALLOW RESISTIVITY
142
SFLA.OHMM 07 222 01 00 : 6  SHALLOW RESISTIVITY
143
ILM .OHMM 07 120 44 00 : 7  MEDIUM RESISTIVITY
144
ILD .OHMM 07 120 46 00 : 8  DEEP RESISTIVITY
145
~Params ----------------------------------------------------
146
MUD .   GEL CHEM : MUD TYPE
147
BHT .DEGC   35.5 : BOTTOM HOLE TEMPERATURE
148
BS  .MM    200.0 : BIT SIZE
149
FD  .K/M3 1000.0 : FLUID DENSITY
150
MATR.       SAND : NEUTRON MATRIX
151
MDEN.     2710.0 : LOGGING MATRIX DENSITY
152
RMF .OHMM  0.216 : MUD FILTRATE RESISTIVITY
153
DFD .K/M3 1525.0 : DRILL FLUID DENSITY
154
~Other -----------------------------------------------------
155
Note: The logging tools became stuck at 625 metres causing the data
156
between 625 metres and 615 metres to be invalid.
157
~ASCII -----------------------------------------------------
158
       1670     123.45       2550       0.45     123.45     123.45      110.2      105.6
159
     1669.9     123.45       2550       0.45     123.45     123.45      110.2      105.6
160
     1669.8     123.45       2550       0.45     123.45     123.45      110.2      105.6
161
"""
162
163
def test_write_sample_empty_params():
164
    l = read(egfn("sample_write_empty_params.las"))
165
    l.write(StringIO(), version=2)
166
167
def test_df_curve_addition_on_export():
168
    l = read(egfn("sample.las"), use_pandas=True)
169
    l.df["ILD_COND"] = 1000 / l.df.ILD
170
    s = StringIO()
171
    l.write(s, version=2, wrap=False, fmt="%.5f")
172
    s.seek(0)
173
    assert s.read() == """~Version ---------------------------------------------------
174
VERS. 2.0 : CWLS log ASCII Standard -VERSION 2.0
175
WRAP.  NO : One line per depth step
176
~Well ------------------------------------------------------
177
STRT.M                  1670.0 : 
178
STOP.M                 1669.75 : 
179
STEP.M                  -0.125 : 
180
NULL.                  -999.25 : 
181
COMP.   # ANY OIL COMPANY LTD. : COMPANY
182
WELL.   ANY ET AL OIL WELL #12 : WELL
183
FLD .                     EDAM : FIELD
184
LOC .           A9-16-49-20W3M : LOCATION
185
PROV.             SASKATCHEWAN : PROVINCE
186
SRVC. ANY LOGGING COMPANY LTD. : SERVICE COMPANY
187
DATE.              25-DEC-1988 : LOG DATE
188
UWI .         100091604920W300 : UNIQUE WELL ID
189
~Curves ----------------------------------------------------
190
DEPT    .M     : 1  DEPTH
191
DT      .US/M  : 2  SONIC TRANSIT TIME
192
RHOB    .K/M3  : 3  BULK DENSITY
193
NPHI    .V/V   : 4   NEUTRON POROSITY
194
SFLU    .OHMM  : 5  RXO RESISTIVITY
195
SFLA    .OHMM  : 6  SHALLOW RESISTIVITY
196
ILM     .OHMM  : 7  MEDIUM RESISTIVITY
197
ILD     .OHMM  : 8  DEEP RESISTIVITY
198
ILD_COND.      : 
199
~Params ----------------------------------------------------
200
BHT .DEGC   35.5 : BOTTOM HOLE TEMPERATURE
201
BS  .MM    200.0 : BIT SIZE
202
FD  .K/M3 1000.0 : FLUID DENSITY
203
MATR.        0.0 : NEUTRON MATRIX(0=LIME,1=SAND,2=DOLO)
204
MDEN.     2710.0 : LOGGING MATRIX DENSITY
205
RMF .OHMM  0.216 : MUD FILTRATE RESISTIVITY
206
DFD .K/M3 1525.0 : DRILL FLUID DENSITY
207
~Other -----------------------------------------------------
208
Note: The logging tools became stuck at 625 meters causing the data
209
between 625 meters and 615 meters to be invalid.
210
~ASCII -----------------------------------------------------
211
 1670.00000  123.45000 2550.00000    0.45000  123.45000  123.45000  110.20000  105.60000    9.46970
212
 1669.87500  123.45000 2550.00000    0.45000  123.45000  123.45000  110.20000  105.60000    9.46970
213
 1669.75000  123.45000 2550.00000    0.45000  123.45000  123.45000  110.20000  105.60000    9.46970
214
"""
215
216
def test_write_xlsx():
217
    l = read(egfn("sample.las"))
218
    e = ExcelConverter(l)
219
    xlsxfn = "test.xlsx"
220
    e.write(xlsxfn)
221
    os.remove(xlsxfn)
222
223
def test_multi_curve_mnemonics_rewrite():
224
    l = read(egfn('sample_issue105_a.las'))
225
    s = StringIO()
226
    l.write(s, version=2, wrap=False, fmt="%.5f")
227
    s.seek(0)
228
    assert s.read() == '''~Version ---------------------------------------------------
229
VERS. 2.0 : CWLS log ASCII Standard -VERSION 2.0
230
WRAP.  NO : One line per depth step
231
~Well ------------------------------------------------------
232
STRT.M                  1670.0 : 
233
STOP.M                 1669.75 : 
234
STEP.M                  -0.125 : 
235
NULL.                  -999.25 : 
236
COMP.   # ANY OIL COMPANY LTD. : COMPANY
237
WELL.   ANY ET AL OIL WELL #12 : WELL
238
FLD .                     EDAM : FIELD
239
LOC .           A9-16-49-20W3M : LOCATION
240
PROV.             SASKATCHEWAN : PROVINCE
241
SRVC. ANY LOGGING COMPANY LTD. : SERVICE COMPANY
242
DATE.              25-DEC-1988 : LOG DATE
243
UWI .         100091604920W300 : UNIQUE WELL ID
244
~Curves ----------------------------------------------------
245
DEPT.M     : 1  DEPTH
246
RHO .ohmm  : curve 1,2,3
247
RHO .ohmm  : curve 10,20,30
248
RHO .ohmm  : curve 100,200,300
249
PHI .      : porosity
250
~Params ----------------------------------------------------
251
BHT .DEGC   35.5 : BOTTOM HOLE TEMPERATURE
252
BS  .MM    200.0 : BIT SIZE
253
FD  .K/M3 1000.0 : FLUID DENSITY
254
MATR.        0.0 : NEUTRON MATRIX(0=LIME,1=SAND,2=DOLO)
255
MDEN.     2710.0 : LOGGING MATRIX DENSITY
256
RMF .OHMM  0.216 : MUD FILTRATE RESISTIVITY
257
DFD .K/M3 1525.0 : DRILL FLUID DENSITY
258
~Other -----------------------------------------------------
259
Note: The logging tools became stuck at 625 meters causing the data
260
between 625 meters and 615 meters to be invalid.
261
~ASCII -----------------------------------------------------
262
 1670.00000    1.00000   10.00000  100.00000    0.10000
263
 1669.87500    2.00000   20.00000  200.00000    0.20000
264
 1669.75000    3.00000   30.00000  300.00000    0.30000
265
'''
266
267
def test_multi_curve_missing_mnemonics_rewrite():
268
    l = read(egfn('sample_issue105_b.las'))
269
    s = StringIO()
270
    l.write(s, version=2, wrap=False, fmt="%.5f")
271
    s.seek(0)
272
    assert s.read() == '''~Version ---------------------------------------------------
273
VERS. 2.0 : CWLS log ASCII Standard -VERSION 2.0
274
WRAP.  NO : One line per depth step
275
~Well ------------------------------------------------------
276
STRT.M                  1670.0 : 
277
STOP.M                 1669.75 : 
278
STEP.M                  -0.125 : 
279
NULL.                  -999.25 : 
280
COMP.   # ANY OIL COMPANY LTD. : COMPANY
281
WELL.   ANY ET AL OIL WELL #12 : WELL
282
FLD .                     EDAM : FIELD
283
LOC .           A9-16-49-20W3M : LOCATION
284
PROV.             SASKATCHEWAN : PROVINCE
285
SRVC. ANY LOGGING COMPANY LTD. : SERVICE COMPANY
286
DATE.              25-DEC-1988 : LOG DATE
287
UWI .         100091604920W300 : UNIQUE WELL ID
288
~Curves ----------------------------------------------------
289
DEPT.M     : 1  DEPTH
290
    .ohmm  : curve 1,2,3
291
    .ohmm  : curve 10,20,30
292
    .ohmm  : curve 100,200,300
293
PHI .      : porosity
294
~Params ----------------------------------------------------
295
BHT .DEGC   35.5 : BOTTOM HOLE TEMPERATURE
296
BS  .MM    200.0 : BIT SIZE
297
FD  .K/M3 1000.0 : FLUID DENSITY
298
MATR.        0.0 : NEUTRON MATRIX(0=LIME,1=SAND,2=DOLO)
299
MDEN.     2710.0 : LOGGING MATRIX DENSITY
300
RMF .OHMM  0.216 : MUD FILTRATE RESISTIVITY
301
DFD .K/M3 1525.0 : DRILL FLUID DENSITY
302
~Other -----------------------------------------------------
303
Note: The logging tools became stuck at 625 meters causing the data
304
between 625 meters and 615 meters to be invalid.
305
~ASCII -----------------------------------------------------
306
 1670.00000    1.00000   10.00000  100.00000    0.10000
307
 1669.87500    2.00000   20.00000  200.00000    0.20000
308
 1669.75000    3.00000   30.00000  300.00000    0.30000
309
'''