def test_vlr_defined_dimension_dtypes(self): """Testing v1.4 VLR defined dimension data types (LL API)""" from laspy.util import edim_fmt_dict, fmtLen, LEfmt,defaults,defaults_test for dfList in [defaults, defaults_test]: for i in range(1,31): print("...data format: "+ str(i)) # Create a new header new_header = self.File1.header.copy() # Create new dimension dimname = "test_dimension_" + str(i) new_dimension = header.ExtraBytesStruct( name = dimname, data_type = i) # Collect bytes for new dimension specification new_dim_raw = new_dimension.to_byte_string() # Create a VLR defining our new dim new_VLR_rec = header.VLR(user_id = "LASF_Spec", record_id = 4, description = "Testing Extra Bytes.", VLR_body = (new_dim_raw)) # Figure out how much we need to pad the point records new_dim_fmt = edim_fmt_dict[i] new_dim_num = new_dim_fmt[1] new_dim_bytelen = fmtLen[LEfmt[new_dim_fmt[0]]] new_total_bytes = new_dim_bytelen*new_dim_num new_header.data_record_length += (new_total_bytes) File2 = File.File(self.output_tempfile, mode = "w", header = new_header, vlrs = [new_VLR_rec], evlrs = self.File1.header.evlrs) File2.X = self.File1.X dim_default = dfList[LEfmt[edim_fmt_dict[i][0]]] is_str = type(dim_default) == type(" ") if new_dim_num == 1: new_dim_val = [dim_default]*len(self.File1) elif is_str: new_dim_val = [dim_default*new_dim_num]*len(self.File1) else: new_dim_val = [[dim_default]*new_dim_num]*len(self.File1) File2._writer.set_dimension(dimname, new_dim_val) current_dim_val = File2._writer.get_dimension(dimname) if (is_str): self.assertEqual([x.encode() for x in new_dim_val], current_dim_val.tolist(), msg = "Problem with data format " + str(i)) else: self.assertEqual(current_dim_val.tolist(), new_dim_val, msg = "Problem with data format " + str(i)) File2.close(ignore_header_changes = True)
def test_vlr_defined_dimensions(self): """Testingi multiple v1.4 VLR defined dimensions (LL API)""" new_header = self.File1.header.copy() # Test basic numeric dimension new_dim_record1 = header.ExtraBytesStruct(name="test dimension 1234", data_type=5) # Test string dimension (len 3) new_dim_record2 = header.ExtraBytesStruct(name="test dimension 5678", data_type=22) # Test integer array dimension (len 3) new_dim_record3 = header.ExtraBytesStruct(name="test dimension 9", data_type=26) new_VLR_rec = header.VLR(user_id="LASF_Spec", record_id=4, VLR_body=(new_dim_record1.to_byte_string() + new_dim_record2.to_byte_string() + new_dim_record3.to_byte_string())) new_header.data_record_length += (19) File2 = File.File(self.output_tempfile, mode="w", header=new_header, vlrs=[new_VLR_rec], evlrs=self.File1.header.evlrs) File2.X = self.File1.X File2._writer.set_dimension("test_dimension_1234", [4] * len(self.File1)) File2._writer.set_dimension("test_dimension_5678", ["AAA"] * len(self.File1)) File2._writer.set_dimension("test_dimension_9", [[1, 2, 3]] * len(self.File1)) self.assertTrue( all(np.array([4] * len(self.File1)) == File2.test_dimension_1234)) self.assertTrue( all( np.array([b"AAA"] * len(self.File1)) == File2.test_dimension_5678)) self.assertEqual(list(File2.test_dimension_9[100]), [1, 2, 3]) File2.close(ignore_header_changes=True)