pybcsv 1.5.11.dev0__tar.gz → 1.5.12__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/CMakeLists.txt +74 -0
  2. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/MANIFEST.in +5 -1
  3. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/PKG-INFO +35 -1
  4. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/README.md +34 -0
  5. pybcsv-1.5.12/VERSION.txt +1 -0
  6. pybcsv-1.5.12/include/CLI11-2.6.2/CLI11.hpp +12216 -0
  7. pybcsv-1.5.12/include/CLI11-2.6.2/LICENSE +25 -0
  8. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/bcsv/csv_reader.h +13 -2
  9. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/bcsv/csv_reader.hpp +133 -53
  10. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/pybcsv/__init__.py +5 -0
  11. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/pybcsv/_version.py +3 -3
  12. pybcsv-1.5.12/pybcsv/tools.py +84 -0
  13. pybcsv-1.5.12/src/shared/comparison.h +656 -0
  14. pybcsv-1.5.12/src/shared/test_datasets.hpp +2036 -0
  15. pybcsv-1.5.12/src/shared/validation.h +193 -0
  16. pybcsv-1.5.12/src/tools/bcsv2csv.cpp +535 -0
  17. pybcsv-1.5.12/src/tools/bcsvCast.cpp +944 -0
  18. pybcsv-1.5.12/src/tools/bcsvCompare.cpp +330 -0
  19. pybcsv-1.5.12/src/tools/bcsvGenerator.cpp +221 -0
  20. pybcsv-1.5.12/src/tools/bcsvHead.cpp +110 -0
  21. pybcsv-1.5.12/src/tools/bcsvHeader.cpp +120 -0
  22. pybcsv-1.5.12/src/tools/bcsvRepair.cpp +1218 -0
  23. pybcsv-1.5.12/src/tools/bcsvSampler.cpp +299 -0
  24. pybcsv-1.5.12/src/tools/bcsvTail.cpp +202 -0
  25. pybcsv-1.5.12/src/tools/bcsvValidate.cpp +634 -0
  26. pybcsv-1.5.12/src/tools/cli_app.h +148 -0
  27. pybcsv-1.5.12/src/tools/cli_common.h +661 -0
  28. pybcsv-1.5.12/src/tools/csv2bcsv.cpp +1143 -0
  29. pybcsv-1.5.12/src/tools/spec_parse.h +249 -0
  30. pybcsv-1.5.12/src/tools/type_probe.h +809 -0
  31. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/sync_headers.py +30 -0
  32. pybcsv-1.5.12/tests/test_tools.py +72 -0
  33. pybcsv-1.5.11.dev0/VERSION.txt +0 -1
  34. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/BUILD_NOTES.md +0 -0
  35. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/LICENSE +0 -0
  36. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/benchmarks/README.md +0 -0
  37. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/benchmarks/run_pybcsv_benchmarks.py +0 -0
  38. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/examples/README.md +0 -0
  39. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/examples/advanced_usage.py +0 -0
  40. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/examples/basic_usage.py +0 -0
  41. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/examples/pandas_integration.py +0 -0
  42. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/examples/performance_benchmark.py +0 -0
  43. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/bcsv/bcsv.h +0 -0
  44. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/bcsv/bcsv.hpp +0 -0
  45. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/bcsv/bcsv_c_api.h +0 -0
  46. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/bcsv/bitset.h +0 -0
  47. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/bcsv/bitset.hpp +0 -0
  48. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/bcsv/byte_buffer.h +0 -0
  49. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/bcsv/checksum.hpp +0 -0
  50. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/bcsv/codec_file/file_codec_concept.h +0 -0
  51. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/bcsv/codec_file/file_codec_dispatch.h +0 -0
  52. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/bcsv/codec_file/file_codec_packet001.h +0 -0
  53. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/bcsv/codec_file/file_codec_packet_lz4_001.h +0 -0
  54. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/bcsv/codec_file/file_codec_packet_lz4_batch001.h +0 -0
  55. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/bcsv/codec_file/file_codec_stream001.h +0 -0
  56. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/bcsv/codec_file/file_codec_stream_lz4_001.h +0 -0
  57. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/bcsv/codec_row/row_codec_delta002.h +0 -0
  58. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/bcsv/codec_row/row_codec_delta002.hpp +0 -0
  59. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/bcsv/codec_row/row_codec_dispatch.h +0 -0
  60. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/bcsv/codec_row/row_codec_flat001.h +0 -0
  61. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/bcsv/codec_row/row_codec_flat001.hpp +0 -0
  62. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/bcsv/codec_row/row_codec_zoh001.h +0 -0
  63. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/bcsv/codec_row/row_codec_zoh001.hpp +0 -0
  64. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/bcsv/column_name_index.h +0 -0
  65. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/bcsv/column_name_index.hpp +0 -0
  66. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/bcsv/csv_writer.h +0 -0
  67. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/bcsv/csv_writer.hpp +0 -0
  68. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/bcsv/definitions.h +0 -0
  69. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/bcsv/file_footer.h +0 -0
  70. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/bcsv/file_header.h +0 -0
  71. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/bcsv/file_header.hpp +0 -0
  72. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/bcsv/layout.h +0 -0
  73. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/bcsv/layout.hpp +0 -0
  74. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/bcsv/layout_guard.h +0 -0
  75. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/bcsv/lz4_block.hpp +0 -0
  76. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/bcsv/lz4_stream.hpp +0 -0
  77. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/bcsv/packet_header.h +0 -0
  78. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/bcsv/reader.h +0 -0
  79. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/bcsv/reader.hpp +0 -0
  80. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/bcsv/reader_concept.h +0 -0
  81. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/bcsv/row.h +0 -0
  82. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/bcsv/row.hpp +0 -0
  83. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/bcsv/row_visitors.h +0 -0
  84. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/bcsv/sampler/sampler.h +0 -0
  85. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/bcsv/sampler/sampler.hpp +0 -0
  86. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/bcsv/sampler/sampler_ast.h +0 -0
  87. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/bcsv/sampler/sampler_compiler.h +0 -0
  88. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/bcsv/sampler/sampler_parser.h +0 -0
  89. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/bcsv/sampler/sampler_tokenizer.h +0 -0
  90. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/bcsv/sampler/sampler_types.h +0 -0
  91. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/bcsv/sampler/sampler_vm.h +0 -0
  92. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/bcsv/sampler/sampler_vm.hpp +0 -0
  93. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/bcsv/sampler/sampler_window.h +0 -0
  94. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/bcsv/std_charconv_compat.h +0 -0
  95. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/bcsv/vle.hpp +0 -0
  96. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/bcsv/writer.h +0 -0
  97. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/bcsv/writer.hpp +0 -0
  98. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/bcsv/writer_concept.h +0 -0
  99. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/lz4-1.10.0/lz4.c +0 -0
  100. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/lz4-1.10.0/lz4.h +0 -0
  101. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/lz4-1.10.0/lz4file.c +0 -0
  102. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/lz4-1.10.0/lz4file.h +0 -0
  103. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/lz4-1.10.0/lz4frame.c +0 -0
  104. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/lz4-1.10.0/lz4frame.h +0 -0
  105. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/lz4-1.10.0/lz4frame_static.h +0 -0
  106. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/lz4-1.10.0/lz4hc.c +0 -0
  107. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/lz4-1.10.0/lz4hc.h +0 -0
  108. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/lz4-1.10.0/xxhash.c +0 -0
  109. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/lz4-1.10.0/xxhash.h +0 -0
  110. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/xxHash-0.8.3/xxhash.c +0 -0
  111. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/include/xxHash-0.8.3/xxhash.h +0 -0
  112. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/pybcsv/__init__.pyi +0 -0
  113. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/pybcsv/__version__.py +0 -0
  114. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/pybcsv/_bcsv.pyi +0 -0
  115. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/pybcsv/bindings.cpp +0 -0
  116. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/pybcsv/pandas_utils.py +0 -0
  117. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/pybcsv/parquet_utils.py +0 -0
  118. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/pybcsv/polars_utils.py +0 -0
  119. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/pybcsv/py.typed +0 -0
  120. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/pyproject.toml +0 -0
  121. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/tests/README.md +0 -0
  122. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/tests/conftest.py +0 -0
  123. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/tests/test_basic_functionality.py +0 -0
  124. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/tests/test_count_rows.py +0 -0
  125. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/tests/test_csv_writer_reader.py +0 -0
  126. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/tests/test_cycle4_python_hardening.py +0 -0
  127. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/tests/test_data_types.py +0 -0
  128. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/tests/test_interoperability.py +0 -0
  129. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/tests/test_minimal_string.py +0 -0
  130. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/tests/test_parquet_conversion.py +0 -0
  131. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/tests/test_performance_edge_cases.py +0 -0
  132. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/tests/test_pybcsv_arrow.py +0 -0
  133. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/tests/test_pybcsv_codecs.py +0 -0
  134. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/tests/test_pybcsv_columnar.py +0 -0
  135. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/tests/test_pybcsv_core.py +0 -0
  136. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/tests/test_pybcsv_direct_access.py +0 -0
  137. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/tests/test_pybcsv_errors.py +0 -0
  138. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/tests/test_pybcsv_pandas.py +0 -0
  139. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/tests/test_pybcsv_performance.py +0 -0
  140. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/tests/test_pybcsv_polars.py +0 -0
  141. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/tests/test_pybcsv_sampler.py +0 -0
  142. {pybcsv-1.5.11.dev0 → pybcsv-1.5.12}/tests/test_streaming_bindings.py +0 -0
@@ -159,3 +159,77 @@ target_compile_definitions(_bcsv PRIVATE BCSV_HAS_BATCH_CODEC=1)
159
159
 
160
160
  # ── Install ─────────────────────────────────────────────────────────────
161
161
  install(TARGETS _bcsv LIBRARY DESTINATION pybcsv)
162
+
163
+ # ── Bundled CLI tools ───────────────────────────────────────────────────
164
+ # A curated subset of the BCSV CLI tools is compiled into the wheel and
165
+ # installed into the environment's scripts dir (on PATH in every venv), so
166
+ # `pip install pybcsv` ships the high-performance converters with a version
167
+ # that always matches the bundled library. Sources come from the parent
168
+ # checkout (CI / full clone) or from the copies sync_headers.py places under
169
+ # python/src/ for standalone sdist builds.
170
+ option(PYBCSV_BUILD_TOOLS "Build and bundle the BCSV CLI tools" ON)
171
+
172
+ set(PARENT_TOOLS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../src/tools")
173
+ set(LOCAL_TOOLS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src/tools")
174
+ set(PARENT_SHARED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../src/shared")
175
+ set(LOCAL_SHARED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src/shared")
176
+
177
+ if(EXISTS "${PARENT_TOOLS_DIR}/csv2bcsv.cpp")
178
+ set(BCSV_TOOLS_DIR "${PARENT_TOOLS_DIR}")
179
+ set(BCSV_SHARED_DIR "${PARENT_SHARED_DIR}")
180
+ elseif(EXISTS "${LOCAL_TOOLS_DIR}/csv2bcsv.cpp")
181
+ set(BCSV_TOOLS_DIR "${LOCAL_TOOLS_DIR}")
182
+ set(BCSV_SHARED_DIR "${LOCAL_SHARED_DIR}")
183
+ else()
184
+ set(BCSV_TOOLS_DIR "")
185
+ endif()
186
+
187
+ set(CLI11_INCLUDE_DIR "${BCSV_INCLUDE_DIR}/CLI11-2.6.2")
188
+
189
+ if(PYBCSV_BUILD_TOOLS AND BCSV_TOOLS_DIR AND EXISTS "${CLI11_INCLUDE_DIR}/CLI11.hpp")
190
+ # Keep in sync with pybcsv/tools.py::TOOLS.
191
+ set(PYBCSV_TOOLS
192
+ csv2bcsv bcsv2csv bcsvHeader bcsvCast bcsvValidate
193
+ bcsvHead bcsvTail bcsvSampler bcsvCompare bcsvRepair bcsvGenerator)
194
+
195
+ # Compile the vendored LZ4 once, shared by every tool (the extension
196
+ # module compiles its own copy because nanobind owns that target).
197
+ add_library(pybcsv_tools_lz4 STATIC ${LZ4_SOURCES})
198
+ target_include_directories(pybcsv_tools_lz4 PUBLIC ${LZ4_DIR})
199
+
200
+ foreach(tool IN LISTS PYBCSV_TOOLS)
201
+ add_executable(${tool} "${BCSV_TOOLS_DIR}/${tool}.cpp")
202
+ target_include_directories(${tool} PRIVATE
203
+ ${CMAKE_CURRENT_BINARY_DIR}/include
204
+ ${BCSV_INCLUDE_DIR}
205
+ ${BCSV_TOOLS_DIR}
206
+ ${BCSV_SHARED_DIR}
207
+ )
208
+ target_include_directories(${tool} SYSTEM PRIVATE ${CLI11_INCLUDE_DIR})
209
+ target_link_libraries(${tool} PRIVATE pybcsv_tools_lz4)
210
+ target_compile_definitions(${tool} PRIVATE BCSV_HAS_BATCH_CODEC=1)
211
+ set_target_properties(${tool} PROPERTIES
212
+ CXX_STANDARD 20
213
+ CXX_STANDARD_REQUIRED ON
214
+ )
215
+ if(MSVC)
216
+ target_compile_options(${tool} PRIVATE /O2 /std:c++20)
217
+ elseif(APPLE)
218
+ target_compile_options(${tool} PRIVATE
219
+ -O3 -fexperimental-library -mmacosx-version-min=13.3)
220
+ else()
221
+ target_compile_options(${tool} PRIVATE -O3)
222
+ target_link_libraries(${tool} PRIVATE pthread)
223
+ target_link_options(${tool} PRIVATE -s) # strip: ~60% smaller wheels
224
+ endif()
225
+ endforeach()
226
+
227
+ if(DEFINED SKBUILD_SCRIPTS_DIR)
228
+ install(TARGETS ${PYBCSV_TOOLS} RUNTIME DESTINATION "${SKBUILD_SCRIPTS_DIR}")
229
+ else()
230
+ install(TARGETS ${PYBCSV_TOOLS} RUNTIME DESTINATION bin)
231
+ endif()
232
+ message(STATUS "[pybcsv] Bundling CLI tools: ${PYBCSV_TOOLS}")
233
+ else()
234
+ message(STATUS "[pybcsv] CLI tools not bundled (sources or CLI11 not found, or disabled)")
235
+ endif()
@@ -17,4 +17,8 @@ prune tests
17
17
  prune examples
18
18
  global-exclude *.pyc
19
19
  global-exclude __pycache__
20
- global-exclude .DS_Store
20
+ global-exclude .DS_Store
21
+ # Bundled CLI tool sources (synced by sync_headers.py; compiled into the wheel)
22
+ recursive-include src *.cpp
23
+ recursive-include src *.h
24
+ recursive-include src *.hpp
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pybcsv
3
- Version: 1.5.11.dev0
3
+ Version: 1.5.12
4
4
  Summary: High-performance Python bindings for the BCSV (Binary CSV) library with pandas integration
5
5
  Keywords: csv,binary,data-science,compression,performance,pandas,numpy,big-data,data-processing
6
6
  Author-Email: Tobias Weber <weber.tobias.md@gmail.com>
@@ -156,6 +156,40 @@ with pybcsv.ReaderDirectAccess() as da:
156
156
  print(da.read(100)) # alternative syntax
157
157
  ```
158
158
 
159
+ ## Bundled Native CLI Tools
160
+
161
+ The wheel ships the core BCSV command-line tools as native, version-matched
162
+ binaries — installed into the environment's scripts directory, so they are on
163
+ PATH in an activated venv with no compiler or CMake required:
164
+
165
+ | Tool | Purpose |
166
+ |------|---------|
167
+ | `csv2bcsv` | CSV → BCSV with validated type inference (see the main CLI docs) |
168
+ | `bcsv2csv` | BCSV → CSV with row/column selection |
169
+ | `bcsvHeader` | Show a file's schema |
170
+ | `bcsvHead` / `bcsvTail` | Show the first/last N rows |
171
+ | `bcsvCast` | Change/narrow column types |
172
+ | `bcsvSampler` | Filter/project rows with a condition expression |
173
+ | `bcsvValidate` | Integrity-check a file |
174
+ | `bcsvRepair` | Recover data from truncated/corrupted files |
175
+ | `bcsvCompare` | Compare two files (with float tolerance) |
176
+ | `bcsvGenerator` | Generate synthetic test datasets |
177
+
178
+ ```bash
179
+ csv2bcsv data.csv data.bcsv # from an activated environment
180
+ ```
181
+
182
+ ```python
183
+ import pybcsv
184
+
185
+ pybcsv.tools.run("csv2bcsv", "data.csv", "data.bcsv", "--overwrite")
186
+ print(pybcsv.tools.run("bcsvHeader", "data.bcsv").stdout)
187
+ pybcsv.tools.path("csv2bcsv") # absolute path, e.g. for custom pipelines
188
+ ```
189
+
190
+ Source builds can opt out with `-DPYBCSV_BUILD_TOOLS=OFF`; the full tool suite
191
+ (and docs) live in the main repository under `src/tools/`.
192
+
159
193
  ## Parquet Conversion Tools (CLI)
160
194
 
161
195
  Installing `pybcsv` provides two streaming command-line converters (require the
@@ -110,6 +110,40 @@ with pybcsv.ReaderDirectAccess() as da:
110
110
  print(da.read(100)) # alternative syntax
111
111
  ```
112
112
 
113
+ ## Bundled Native CLI Tools
114
+
115
+ The wheel ships the core BCSV command-line tools as native, version-matched
116
+ binaries — installed into the environment's scripts directory, so they are on
117
+ PATH in an activated venv with no compiler or CMake required:
118
+
119
+ | Tool | Purpose |
120
+ |------|---------|
121
+ | `csv2bcsv` | CSV → BCSV with validated type inference (see the main CLI docs) |
122
+ | `bcsv2csv` | BCSV → CSV with row/column selection |
123
+ | `bcsvHeader` | Show a file's schema |
124
+ | `bcsvHead` / `bcsvTail` | Show the first/last N rows |
125
+ | `bcsvCast` | Change/narrow column types |
126
+ | `bcsvSampler` | Filter/project rows with a condition expression |
127
+ | `bcsvValidate` | Integrity-check a file |
128
+ | `bcsvRepair` | Recover data from truncated/corrupted files |
129
+ | `bcsvCompare` | Compare two files (with float tolerance) |
130
+ | `bcsvGenerator` | Generate synthetic test datasets |
131
+
132
+ ```bash
133
+ csv2bcsv data.csv data.bcsv # from an activated environment
134
+ ```
135
+
136
+ ```python
137
+ import pybcsv
138
+
139
+ pybcsv.tools.run("csv2bcsv", "data.csv", "data.bcsv", "--overwrite")
140
+ print(pybcsv.tools.run("bcsvHeader", "data.bcsv").stdout)
141
+ pybcsv.tools.path("csv2bcsv") # absolute path, e.g. for custom pipelines
142
+ ```
143
+
144
+ Source builds can opt out with `-DPYBCSV_BUILD_TOOLS=OFF`; the full tool suite
145
+ (and docs) live in the main repository under `src/tools/`.
146
+
113
147
  ## Parquet Conversion Tools (CLI)
114
148
 
115
149
  Installing `pybcsv` provides two streaming command-line converters (require the
@@ -0,0 +1 @@
1
+ 1.5.11