qlat_utils¶
Qlattice utility package
Usage:
import qlat_utils as q
Will also be loaded by import qlat as q together with other qlat functions.
Message¶
Return the current verbosity level as integer. |
|
|
Set the current verbosity level as integer. |
|
Print all the arguments and then print a newline. |
|
Same as |
Return the function name of the current function |
Timer¶
|
Timing functions. |
|
Timing functions. |
|
Timing functions with flops. |
|
Timing functions with flops. |
|
|
|
|
|
Return current time in seconds since epoch. |
Return start time in seconds since epoch. |
Random number¶
|
|
|
Return a signature (a floating point number, real or complex) of data viewed as a 1-D array of numbers. |
Algorithm of the random number generator¶
The state of the generator is effectively composed of the history of the generator encoded as a string.
To generate random numbers, one computes the SHA-256 hash of the string. The hash result is viewed as a 8 32-bit unsigned integers.
The 8 32-bit unsigned integers are merged into 4 64-bit unsigned integers. These 4 numbers are treated as the random numbers generated by this random number generator.
Relevant source files: qlat-utils/include/qlat-utils/rng-state.h and qlat-utils/lib/rng-state.cpp
Coordinate¶
|
Return |
|
Return |
|
Return |
|
Return |
Return a list composed of the 4 components of the coordinate. |
|
Return a tuple composed of the 4 components of the coordinate. |
|
Return a np.ndarray composed of the 4 components of the coordinate. |
|
set value based on a list composed of the 4 components of the coordinate. |
|
Return the square sum of all the components as |
|
get spatial distance square as int |
|
get product of all components |
|
get product of all components |
|
|
|
|
|
Return a list composed of the 4 components of the coordinate. |
|
Return a tuple composed of the 4 components of the coordinate. |
|
Return a np.ndarray composed of the 4 components of the coordinate. |
|
set value based on a list composed of the 4 components of the coordinate. |
Cache system¶
|
self.cache_keys |
|
make cache if it does not exist, otherwise return existing elements |
|
Remove values of cache, but keep all the structures |
|
|
|
remove cache if it exist |
Example code:
Usage:
cache_x = q.mk_cache("xx")
q.clean_cache(cache_x)
cache_x[key] = value
val = cache_x[key]
key in cache_x
val = cache_x.get(key)
val = cache_x.pop(key, None)
Matrix for QCD¶
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ElemType¶
Data analysis¶
|
Split |
|
|
|
qnorm(2) == 4 |
Spatial distance list¶
|
|
|
Make a list of r values from 0 up to r_limit. |
|
Returns (x_idx_low, x_idx_high, coef_low, coef_high,) |
|
Return a list of tuples: |
Interpolation¶
|
return |
|
return approximately |
|
return |
|
return |
|
return |
|
return x_arr |
Jackknife method¶
Jackknife implementation¶
|
Perform (randomized) Super-Jackknife for the Jackknife data set. |
|
Create a jackknife sample with random numbers based on central value |
|
Return |
|
Return |
|
Return |
|
Return number of samples for the (randomized) Super-Jackknife data set. |
|
Return |
dict() -> new empty dictionary dict(mapping) -> new dictionary initialized from a mapping object's (key, value) pairs dict(iterable) -> new dictionary initialized as if via: d = {} for k, v in iterable: d[k] = v dict(**kwargs) -> new dictionary initialized with the name=value pairs in the keyword argument list. For example: dict(one=1, two=2). |
|
|
Currently only useful if we set |
|
|
|
|
|
Compute (avg, err) of data_list. |
|
e.g.: q.err_sum(1.4, 2.1, 1.0) ==> 2.7147743920996454 |
|
return the list of block averages the blocks may overlap if is_overlapping == True |
|
Separately square real and imag part in case of complex types. |
|
Separately calculate the square root real and imag part in case of complex types. |
|
Return jk[i] = avg - frac{eps}{N} (v[i] - avg) normal jackknife uses eps=1, scale the fluctuation by eps |
|
|
|
Return |
|
|
|
Super jackknife. |
|
|
|
Return |
|
|
|
Jackknife-bootstrap hybrid resampling. Return |
|
return jk_arr n = n_rand_sample len(jk_arr) == 1 + n jk_arr[i] = val + err * r[i] for i in 1..n where r[i] ~ N(0, 1) |
|
|
|
Return |
|
Example for the Jackknife-bootstrap hybrid method (described in the Jackknife method section): examples-py/jackknife-random.py
#!/usr/bin/env python3
import qlat as q
import numpy as np
q.begin_with_mpi()
q.default_g_jk_kwargs["jk_type"] = "rjk"
q.default_g_jk_kwargs["eps"] = 1
q.default_g_jk_kwargs["n_rand_sample"] = 1024
q.default_g_jk_kwargs["is_normalizing_rand_sample"] = False
q.default_g_jk_kwargs["is_apply_rand_sample_jk_idx_blocking_shift"] = True
q.default_g_jk_kwargs["block_size"] = 1
q.default_g_jk_kwargs["block_size_dict"] = {
"job_tag_1": 1,
"job_tag_2": 4,
}
q.default_g_jk_kwargs["rng_state"] = q.RngState("rejk")
q.default_g_jk_kwargs["all_jk_idx_set"] = set()
rs = q.RngState("seed1")
job_tag = "job_tag_1"
traj_list = list(range(20))
data_arr = rs.g_rand_arr((len(traj_list), 5,)) # can be list or np.array
jk_arr_1 = q.g_mk_jk(data_arr, [(job_tag, traj) for traj in traj_list])
avg, err = q.g_jk_avg_err(jk_arr_1)
for i in range(len(avg)):
q.json_results_append(f"avg[{i}]", avg[i])
q.json_results_append(f"err[{i}]", err[i])
rs = q.RngState("seed2")
job_tag = "job_tag_2"
traj_list = list(range(30))
data_arr = rs.g_rand_arr((len(traj_list), 5,)) # can be list or np.array
jk_arr_2 = q.g_mk_jk(data_arr, [(job_tag, traj) for traj in traj_list])
avg, err = q.g_jk_avg_err(jk_arr_2)
for i in range(len(avg)):
q.json_results_append(f"avg[{i}]", avg[i])
q.json_results_append(f"err[{i}]", err[i])
jk_arr = jk_arr_1 + jk_arr_2
avg, err = q.g_jk_avg_err(jk_arr)
for i in range(len(avg)):
q.json_results_append(f"avg[{i}]", avg[i])
q.json_results_append(f"err[{i}]", err[i])
jk_val_arr = q.g_mk_jk_val("val-tag", 1.0, 0.5)
avg, err = q.g_jk_avg_err(jk_val_arr)
q.json_results_append(f"avg", avg)
q.json_results_append(f"err", err)
jk_diff_arr = jk_arr - jk_val_arr[:, None]
avg, err = q.g_jk_avg_err(jk_diff_arr)
for i in range(len(avg)):
q.json_results_append(f"avg[{i}]", avg[i])
q.json_results_append(f"err[{i}]", err[i])
q.check_log_json(__file__, check_eps=1e-10)
q.end_with_mpi()
q.displayln_info(f"CHECK: finished successfully.")
Example for the conventional Super-Jackknife method: examples-py/jackknife-super.py
#!/usr/bin/env python3
import qlat as q
import numpy as np
import functools
q.begin_with_mpi()
job_tag_list = ['job_tag_1', 'job_tag_2', ]
@functools.lru_cache
def get_traj_list(job_tag):
fname = q.get_fname()
if job_tag == "job_tag_1":
return list(range(20))
elif job_tag == "job_tag_2":
return list(range(30))
else:
raise Exception(f"{fname}: job_tag='{job_tag}'")
return None
@functools.lru_cache
def get_all_jk_idx():
jk_idx_list = ['avg', ]
for job_tag in job_tag_list:
traj_list = get_traj_list(job_tag)
for traj in traj_list:
jk_idx_list.append((job_tag, traj,))
return jk_idx_list
q.default_g_jk_kwargs["jk_type"] = "super"
q.default_g_jk_kwargs["eps"] = 1
q.default_g_jk_kwargs["is_hash_jk_idx"] = True
q.default_g_jk_kwargs["jk_idx_hash_size"] = 1024
q.default_g_jk_kwargs["block_size"] = 1
q.default_g_jk_kwargs["block_size_dict"] = {
"job_tag_1": 1,
"job_tag_2": 4,
}
q.default_g_jk_kwargs["rng_state"] = q.RngState("rejk")
q.default_g_jk_kwargs["all_jk_idx"] = None
q.default_g_jk_kwargs["get_all_jk_idx"] = get_all_jk_idx
q.default_g_jk_kwargs["all_jk_idx_set"] = set()
rs = q.RngState("seed1")
job_tag = "job_tag_1"
traj_list = get_traj_list(job_tag)
data_arr = rs.g_rand_arr((len(traj_list), 5,)) # can be list or np.array
jk_arr_1 = q.g_mk_jk(data_arr, [(job_tag, traj) for traj in traj_list])
avg, err = q.g_jk_avg_err(jk_arr_1)
for i in range(len(avg)):
q.json_results_append(f"avg[{i}]", avg[i])
q.json_results_append(f"err[{i}]", err[i])
rs = q.RngState("seed2")
job_tag = "job_tag_2"
traj_list = get_traj_list(job_tag)
data_arr = rs.g_rand_arr((len(traj_list), 5,)) # can be list or np.array
jk_arr_2 = q.g_mk_jk(data_arr, [(job_tag, traj) for traj in traj_list])
avg, err = q.g_jk_avg_err(jk_arr_2)
for i in range(len(avg)):
q.json_results_append(f"avg[{i}]", avg[i])
q.json_results_append(f"err[{i}]", err[i])
jk_arr = jk_arr_1 + jk_arr_2
avg, err = q.g_jk_avg_err(jk_arr)
for i in range(len(avg)):
q.json_results_append(f"avg[{i}]", avg[i])
q.json_results_append(f"err[{i}]", err[i])
jk_val_arr = q.g_mk_jk_val("val-tag", 1.0, 0.5)
avg, err = q.g_jk_avg_err(jk_val_arr)
q.json_results_append(f"avg", avg)
q.json_results_append(f"err", err)
jk_diff_arr = jk_arr - jk_val_arr[:, None]
avg, err = q.g_jk_avg_err(jk_diff_arr)
for i in range(len(avg)):
q.json_results_append(f"avg[{i}]", avg[i])
q.json_results_append(f"err[{i}]", err[i])
q.check_log_json(__file__, check_eps=1e-10)
q.end_with_mpi()
q.displayln_info(f"CHECK: finished successfully.")
Example for a variant of the conventional Super-Jackknife method: examples-py/jackknife-super-hash.py
#!/usr/bin/env python3
import qlat as q
import numpy as np
q.begin_with_mpi()
q.default_g_jk_kwargs["jk_type"] = "super"
q.default_g_jk_kwargs["eps"] = 1
q.default_g_jk_kwargs["is_hash_jk_idx"] = True
q.default_g_jk_kwargs["jk_idx_hash_size"] = 1024
q.default_g_jk_kwargs["block_size"] = 1
q.default_g_jk_kwargs["block_size_dict"] = {
"job_tag_1": 1,
"job_tag_2": 4,
}
q.default_g_jk_kwargs["rng_state"] = q.RngState("rejk")
q.default_g_jk_kwargs["all_jk_idx"] = None
q.default_g_jk_kwargs["get_all_jk_idx"] = None
q.default_g_jk_kwargs["all_jk_idx_set"] = set()
rs = q.RngState("seed1")
job_tag = "job_tag_1"
traj_list = list(range(20))
data_arr = rs.g_rand_arr((len(traj_list), 5,)) # can be list or np.array
jk_arr_1 = q.g_mk_jk(data_arr, [(job_tag, traj) for traj in traj_list])
avg, err = q.g_jk_avg_err(jk_arr_1)
for i in range(len(avg)):
q.json_results_append(f"avg[{i}]", avg[i])
q.json_results_append(f"err[{i}]", err[i])
rs = q.RngState("seed2")
job_tag = "job_tag_2"
traj_list = list(range(30))
data_arr = rs.g_rand_arr((len(traj_list), 5,)) # can be list or np.array
jk_arr_2 = q.g_mk_jk(data_arr, [(job_tag, traj) for traj in traj_list])
avg, err = q.g_jk_avg_err(jk_arr_2)
for i in range(len(avg)):
q.json_results_append(f"avg[{i}]", avg[i])
q.json_results_append(f"err[{i}]", err[i])
jk_arr = jk_arr_1 + jk_arr_2
avg, err = q.g_jk_avg_err(jk_arr)
for i in range(len(avg)):
q.json_results_append(f"avg[{i}]", avg[i])
q.json_results_append(f"err[{i}]", err[i])
jk_val_arr = q.g_mk_jk_val("val-tag", 1.0, 0.5)
avg, err = q.g_jk_avg_err(jk_val_arr)
q.json_results_append(f"avg", avg)
q.json_results_append(f"err", err)
jk_diff_arr = jk_arr - jk_val_arr[:, None]
avg, err = q.g_jk_avg_err(jk_diff_arr)
for i in range(len(avg)):
q.json_results_append(f"avg[{i}]", avg[i])
q.json_results_append(f"err[{i}]", err[i])
q.check_log_json(__file__, check_eps=1e-10)
q.end_with_mpi()
q.displayln_info(f"CHECK: finished successfully.")
Plotting¶
|
fn is full name of the plot or None dts is dict_datatable, e.g. { "table.txt" : [ [ 0, 1, ], [ 1, 2, ], ], } cmds is plot_cmds, e.g. [ "set key rm", "set size 1.0, 1.0 ", ] lines is plot_lines, e.g. [ "plot", "x", ]. |
|
Example code to make a plot: examples-py/qplot.py