validate does not need to be called on the pipeline to run it and if you comment out pipeline.validate() then the pipeline executes within Python.
This is a bug https://github.com/PDAL/PDAL/issues/2891 where calling validate as it clears the metadata for the stage. This causes an issue with the TileDB driver in that metadata is read/written and required. ...
You should use min and max property of header.
from laspy.file import File
f = File("path/to/file.laz", mode='r')
h = f.header
# h.min: [min_x, min_y, min_z] - h.max: [max_x, max_y, max_z]
extent = [*h.min, *h.max] # extent: [min_x, min_y, min_z, max_x, max_y, max_z]
The las format defines that points have X/Y/Z coordinates and it defines how to include information about georeferencing https://www.asprs.org/wp-content/uploads/2010/12/LAS_1_4_r13.pdf. However, it is not clearly defined what X and Y mean. Traditionally many GIS software consider that X is always longitude or easting and Y is latitude or northing. But ...
Perhaps there is something to tune in the PDAL parameters. If tindex does not give good enough result when used like in this tutorial https://pdal.io/workshop/exercises/analysis/boundary/boundary.html then perhaps you could do better by running density https://pdal.io/apps/density.html directly with different --sample_size and --threshold parameters. For ...
PDAL supports streaming, but not all filters support it. If you don't want to load all of the data into memory at once, you need to use streaming.
filters.decimation can support streaming because it doesn't need to consider all of the points to complete its work. For example, the following would keep every tenth point in the file:
pdal translate input.las ...
According to the doc of pdal info:
If no options are provided, --stats is assumed.
This means that you need to read the entire point cloud to derive information that you don't actually need. What you are looking for is in the metadata of the file (the header). You don't need to read the payload (the points) at all. Try
pdal info file.las --metadata