23 #include <shared_mutex>
26 #include <unordered_map>
48 const int64_t num_rows,
55 const int64_t num_rows,
57 const double std_dev);
62 const int64_t num_rows);
70 template <
typename T1,
typename T2>
72 distance_in_meters(
const T1 fromlon,
const T1 fromlat,
const T2 tolon,
const T2 tolat);
76 const int64_t num_x_bins) {
77 return y_bin * num_x_bins + x_bin;
81 const int64_t num_x_bins) {
82 return std::make_pair(bin % num_x_bins, bin / num_x_bins);
103 template <
typename T>
106 template <
typename T>
109 template <
typename T>
112 template <
typename T>
114 T*
const data_buffer,
115 const size_t num_elements);
120 void copyData(int8_t*
dest,
const int8_t* source,
const size_t num_bytes)
const;
122 std::unordered_map<std::string, std::shared_ptr<CacheDataTf>>
data_cache_;
126 template <
typename T>
131 std::shared_ptr<T>
getDataForKey(
const std::string& key)
const;
133 void putDataForKey(
const std::string& key, std::shared_ptr<T>
const data);
140 namespace FileUtilities {
141 std::vector<std::filesystem::path>
get_fs_paths(
const std::string& file_or_directory);
148 template <
typename T>
bool isKeyCachedAndSameLength(const std::string &key, const size_t num_bytes) const
void copyData(int8_t *dest, const int8_t *source, const size_t num_bytes) const
bool isKeyCached(const std::string &key) const
NEVER_INLINE HOST std::pair< T, T > get_column_min_max(const Column< T > &col)
void z_std_normalize_col(const T *input_data, T *output_data, const int64_t num_rows, const double mean, const double std_dev)
std::vector< std::filesystem::path > get_fs_paths(const std::string &file_or_directory)
std::unordered_map< std::string, std::shared_ptr< T > > data_cache_
NEVER_INLINE HOST double get_column_mean(const Column< T > &col)
const T * getDataPtrForKey(const std::string &key) const
void putDataForKey(const std::string &key, T *const data_buffer, const size_t num_elements)
std::shared_ptr< T > getDataForKey(const std::string &key) const
bool isKeyCached(const std::string &key) const
void putDataForKey(const std::string &key, std::shared_ptr< T > const data)
void getDataForKey(const std::string &key, T *dest_buffer) const
EXTENSION_NOINLINE double distance_in_meters(const double fromlon, const double fromlat, const double tolon, const double tolat)
Computes the distance, in meters, between two WGS-84 positions.
const size_t parallel_copy_min_bytes
NEVER_INLINE HOST std::tuple< T, T, bool > get_column_metadata(const Column< T > &col)
std::vector< std::vector< T > > z_std_normalize_data(const std::vector< T * > &input_data, const int64_t num_rows)
std::shared_mutex cache_mutex_
CacheDataTf(const size_t num_bytes)
NEVER_INLINE HOST double get_column_std_dev(const Column< T > &col, const double mean)
int64_t x_y_bin_to_bin_index(const int64_t x_bin, const int64_t y_bin, const int64_t num_x_bins)
std::shared_timed_mutex shared_mutex
const T & getDataRefForKey(const std::string &key) const
std::shared_mutex cache_mutex_
NEVER_INLINE HOST bool is_valid_tf_input(const T input, const T bounds_val, const BoundsType bounds_type, const IntervalType interval_type)
std::unordered_map< std::string, std::shared_ptr< CacheDataTf > > data_cache_
std::pair< int64_t, int64_t > bin_to_x_y_bin_indexes(const int64_t bin, const int64_t num_x_bins)