Best Python code snippet using hypothesis
textool.py
Source:textool.py
...8#9# Type conversions10#11def pack_fp16(v):12 scale_to_inf = struct.unpack("=f", struct.pack("=I", 0x77800000))[0]13 scale_to_zero = struct.unpack("=f", struct.pack("=I", 0x08800000))[0]14 base = (abs(v) * scale_to_inf) * scale_to_zero15 w = struct.unpack("=I", struct.pack("=f", v))[0]16 shl1_w = w + w17 sign = w & 0x8000000018 bias = shl1_w & 0xff00000019 if bias < 0x71000000:20 bias = 0x7100000021 base += struct.unpack("=f", struct.pack("=I", (bias >> 1) + 0x07800000))[0]22 bits = struct.unpack("=I", struct.pack("=f", base))[0]23 exp_bits = (bits >> 13) & 0x00007c0024 mantissa_bits = bits & 0x00000fff25 nonsign = exp_bits + mantissa_bits26 return (sign >> 16) | (0x7e00 if shl1_w > 0xff000000 else nonsign)27def pack_r11g11b10f(r, g, b):28 return ((pack_fp16(r) >> 4) & 0x000007ff) | ((pack_fp16(g) << 7) & 0x003ff800) | ((pack_fp16(b) << 17) & 0xffc00000)29def pack_unorm8(v): return int(min(max(v * 255, 0), 255))30def pack_snorm8(v): return int(min(max(v * 127.5 * x - 0.5, -128), 127))31def pack_uint8(v): return int(min(max(v, 0), 255))32def pack_sint8(v): return int(min(max(v, -128), 127))33def pack_unorm16(v): return int(min(max(v * 65535, 0), 65535))34def pack_snorm16(v): return int(min(max(v * 32767.5 * x - 0.5, -32768), 32767))35def pack_uint16(v): return int(min(max(v, 0), 65535))36def pack_sint16(v): return int(min(max(v, -32768), 32767))37def pack_unorm32(v): return int(min(max(v * 4294967295, 0), 4294967295))38def pack_snorm32(v): return int(min(max(v * 2147483647.5 * x - 0.5, -2147483648), 2147483647))39def pack_uint32(v): return int(min(max(v, 0), 4294967295))40def pack_sint32(v): return int(min(max(v, -2147483648), 2147483647))41def pack_unorm64(v): return int(min(max(v * 18446744073709551615, 0), 18446744073709551615))42def pack_snorm64(v): return int(min(max(v * 9223372036854775807.5 * x - 0.5, -9223372036854775808), 9223372036854775807))43def pack_uint64(v): return int(min(max(v, 0), 18446744073709551615))44def pack_sint64(v): return int(min(max(v, -9223372036854775808), 9223372036854775807))45def pack_r10g10b10a2_unorm(r, g, b, a):46 r = (int(min(max(r * 1023, 0), 1023)) << 0) & 0x000003ff47 g = (int(min(max(g * 1023, 0), 1023)) << 10) & 0x000ffc0048 b = (int(min(max(b * 1023, 0), 1023)) << 20) & 0x3ff0000049 a = (int(min(max(a * 3, 0), 3)) << 30) & 0xc000000050 return r | g | b | a51def pack_r10g10b10a2_snorm(r, g, b, a):52 r = (int(min(max(r * 511.5 - 0.5, -512), 511)) << 0) & 0x000003ff53 g = (int(min(max(g * 511.5 - 0.5, -512), 511)) << 10) & 0x000ffc0054 b = (int(min(max(b * 511.5 - 0.5, -512), 511)) << 20) & 0x3ff0000055 a = (int(min(max(a * 1.5 - 0.5, -2), 1)) << 30) & 0xc000000056 return r | g | b | a57def pack_r10g10b10a2_uint(r, g, b, a):58 r = (int(min(max(r, 0), 1023)) << 0) & 0x000003ff59 g = (int(min(max(g, 0), 1023)) << 10) & 0x000ffc0060 b = (int(min(max(b, 0), 1023)) << 20) & 0x3ff0000061 a = (int(min(max(a, 0), 3)) << 30) & 0xc000000062 return r | g | b | a63def pack_r10g10b10a2_sint(r, g, b, a):64 r = (int(min(max(r, -512), 511)) << 0) & 0x000003ff65 g = (int(min(max(g, -512), 511)) << 10) & 0x000ffc0066 b = (int(min(max(b, -512), 511)) << 20) & 0x3ff0000067 a = (int(min(max(a, -2), 1)) << 30) & 0xc000000068 return r | g | b | a69PF_VULKAN = 070PF_DXGI = 171PF_PACKING = 272PF_BPP = 373PF_BLKW = 474PF_BLKH = 575PF_FUNC = 676PIXELFORMATS = {77 'r4g4-unorm': [ 1, 0, 'L', 8, 1, 1 ],78 'r4g4b4a4-unorm': [ 2, 0, 'L', 16, 1, 1 ],79 'b4g4r4a4-unorm': [ 3, 115, 'L', 16, 1, 1 ],80 'r5g6b5-unorm': [ 4, 0, 'L', 16, 1, 1 ],81 'b5g6r5-unorm': [ 5, 85, 'L', 16, 1, 1 ],82 'r5g5b5a1-unorm': [ 6, 0, 'L', 16, 1, 1 ],83 'b5g5r5a1-unorm': [ 7, 86, 'L', 16, 1, 1 ],84 'a1r5g5b5-unorm': [ 8, 0, 'L', 16, 1, 1 ],85 'r8-unorm': [ 9, 61, 'L', 8, 1, 1, lambda x: struct.pack("=B", pack_unorm8(x[0][0][0])) ],86 'r8-snorm': [ 10, 63, 'L', 8, 1, 1, lambda x: struct.pack("=B", pack_snorm8(x[0][0][0])) ],87 'r8-uscaled': [ 11, 0, 'L', 8, 1, 1, lambda x: struct.pack("=B", pack_uint8(x[0][0][0])) ],88 'r8-sscaled': [ 12, 0, 'L', 8, 1, 1, lambda x: struct.pack("=B", pack_sint8(x[0][0][0])) ],89 'r8-uint': [ 13, 62, 'L', 8, 1, 1, lambda x: struct.pack("=B", pack_uint8(x[0][0][0])) ],90 'r8-sint': [ 14, 64, 'L', 8, 1, 1, lambda x: struct.pack("=B", pack_sint8(x[0][0][0])) ],91 'r8-srgb': [ 15, 0, 'L', 8, 1, 1, lambda x: struct.pack("=B", pack_unorm8(x[0][0][0])) ],92 'r8g8-unorm': [ 16, 49, 'L', 16, 1, 1, lambda x: struct.pack("=BB", pack_unorm8(x[0][0][0]), pack_unorm8(x[0][0][1])) ],93 'r8g8-snorm': [ 17, 51, 'L', 16, 1, 1, lambda x: struct.pack("=BB", pack_snorm8(x[0][0][0]), pack_snorm8(x[0][0][1])) ],94 'r8g8-uscaled': [ 16, 0, 'L', 16, 1, 1, lambda x: struct.pack("=BB", pack_uint8(x[0][0][0]), pack_uint8(x[0][0][1])) ],95 'r8g8-sscaled': [ 19, 0, 'L', 16, 1, 1, lambda x: struct.pack("=BB", pack_sint8(x[0][0][0]), pack_sint8(x[0][0][1])) ],96 'r8g8-uint': [ 20, 50, 'L', 16, 1, 1, lambda x: struct.pack("=BB", pack_uint8(x[0][0][0]), pack_sint8(x[0][0][1])) ],97 'r8g8-sint': [ 21, 52, 'L', 16, 1, 1, lambda x: struct.pack("=BB", pack_sint8(x[0][0][0]), pack_sint8(x[0][0][1])) ],98 'r8g8-srgb': [ 22, 0, 'L', 16, 1, 1, lambda x: struct.pack("=BB", pack_unorm8(x[0][0][0]), pack_unorm8(x[0][0][1])) ],99 'r8g8b8-unorm': [ 23, 0, 'L', 24, 1, 1, lambda x: struct.pack("=BBB", pack_unorm8(x[0][0][0]), pack_unorm8(x[0][0][1]), pack_unorm8(x[0][0][2])) ],100 'r8g8b8-snorm': [ 24, 0, 'L', 24, 1, 1, lambda x: struct.pack("=BBB", pack_snorm8(x[0][0][0]), pack_snorm8(x[0][0][1]), pack_snorm8(x[0][0][2])) ],101 'r8g8b8-uscaled': [ 25, 0, 'L', 24, 1, 1, lambda x: struct.pack("=BBB", pack_uint8(x[0][0][0]), pack_uint8(x[0][0][1]), pack_uint8(x[0][0][2])) ],102 'r8g8b8-sscaled': [ 26, 0, 'L', 24, 1, 1, lambda x: struct.pack("=BBB", pack_sint8(x[0][0][0]), pack_sint8(x[0][0][1]), pack_sint8(x[0][0][2])) ],103 'r8g8b8-uint': [ 27, 0, 'L', 24, 1, 1, lambda x: struct.pack("=BBB", pack_uint8(x[0][0][0]), pack_uint8(x[0][0][1]), pack_uint8(x[0][0][2])) ],104 'r8g8b8-sint': [ 28, 0, 'L', 24, 1, 1, lambda x: struct.pack("=BBB", pack_sint8(x[0][0][0]), pack_sint8(x[0][0][1]), pack_sint8(x[0][0][2])) ],105 'r8g8b8-srgb': [ 29, 0, 'L', 24, 1, 1, lambda x: struct.pack("=BBB", pack_unorm8(x[0][0][0]), pack_unorm8(x[0][0][1]), pack_unorm8(x[0][0][2])) ],106 'b8g8r8-unorm': [ 30, 0, 'L', 24, 1, 1, lambda x: struct.pack("=BBB", pack_unorm8(x[0][0][2]), pack_unorm8(x[0][0][1]), pack_unorm8(x[0][0][0])) ],107 'b8g8r8-snorm': [ 31, 0, 'L', 24, 1, 1, lambda x: struct.pack("=BBB", pack_snorm8(x[0][0][2]), pack_snorm8(x[0][0][1]), pack_snorm8(x[0][0][0])) ],108 'b8g8r8-uscaled': [ 32, 0, 'L', 24, 1, 1, lambda x: struct.pack("=BBB", pack_uint8(x[0][0][2]), pack_uint8(x[0][0][1]), pack_uint8(x[0][0][0])) ],109 'b8g8r8-sscaled': [ 33, 0, 'L', 24, 1, 1, lambda x: struct.pack("=BBB", pack_sint8(x[0][0][2]), pack_sint8(x[0][0][1]), pack_sint8(x[0][0][0])) ],110 'b8g8r8-uint': [ 34, 0, 'L', 24, 1, 1, lambda x: struct.pack("=BBB", pack_uint8(x[0][0][2]), pack_uint8(x[0][0][1]), pack_uint8(x[0][0][0])) ],111 'b8g8r8-sint': [ 35, 0, 'L', 24, 1, 1, lambda x: struct.pack("=BBB", pack_sint8(x[0][0][2]), pack_sint8(x[0][0][1]), pack_sint8(x[0][0][0])) ],112 'b8g8r8-srgb': [ 36, 0, 'L', 24, 1, 1, lambda x: struct.pack("=BBB", pack_unorm8(x[0][0][2]), pack_unorm8(x[0][0][1]), pack_unorm8(x[0][0][0])) ],113 'r8g8b8a8-unorm': [ 37, 28, 'L', 32, 1, 1, lambda x: struct.pack("=BBBB", pack_unorm8(x[0][0][0]), pack_unorm8(x[0][0][1]), pack_unorm8(x[0][0][2]), pack_unorm8(x[0][0][3])) ],114 'r8g8b8a8-snorm': [ 38, 31, 'L', 32, 1, 1, lambda x: struct.pack("=BBBB", pack_snorm8(x[0][0][0]), pack_snorm8(x[0][0][1]), pack_snorm8(x[0][0][2]), pack_snorm8(x[0][0][3])) ],115 'r8g8b8a8-uscaled': [ 39, 0, 'L', 32, 1, 1, lambda x: struct.pack("=BBBB", pack_uint8(x[0][0][0]), pack_uint8(x[0][0][1]), pack_uint8(x[0][0][2]), pack_uint8(x[0][0][3])) ],116 'r8g8b8a8-sscaled': [ 40, 0, 'L', 32, 1, 1, lambda x: struct.pack("=BBBB", pack_sint8(x[0][0][0]), pack_sint8(x[0][0][1]), pack_sint8(x[0][0][2]), pack_sint8(x[0][0][3])) ],117 'r8g8b8a8-uint': [ 41, 30, 'L', 32, 1, 1, lambda x: struct.pack("=BBBB", pack_uint8(x[0][0][0]), pack_uint8(x[0][0][1]), pack_uint8(x[0][0][2]), pack_uint8(x[0][0][3])) ],118 'r8g8b8a8-sint': [ 42, 32, 'L', 32, 1, 1, lambda x: struct.pack("=BBBB", pack_sint8(x[0][0][0]), pack_sint8(x[0][0][1]), pack_sint8(x[0][0][2]), pack_sint8(x[0][0][3])) ],119 'r8g8b8a8-srgb': [ 43, 29, 'L', 32, 1, 1, lambda x: struct.pack("=BBBB", pack_unorm8(x[0][0][0]), pack_unorm8(x[0][0][1]), pack_unorm8(x[0][0][2]), pack_unorm8(x[0][0][3])) ],120 'b8g8r8a8-unorm': [ 44, 87, 'L', 32, 1, 1, lambda x: struct.pack("=BBBB", pack_unorm8(x[0][0][2]), pack_unorm8(x[0][0][1]), pack_unorm8(x[0][0][0]), pack_unorm8(x[0][0][3])) ],121 'b8g8r8a8-snorm': [ 45, 0, 'L', 32, 1, 1, lambda x: struct.pack("=BBBB", pack_snorm8(x[0][0][2]), pack_snorm8(x[0][0][1]), pack_snorm8(x[0][0][0]), pack_snorm8(x[0][0][3])) ],122 'b8g8r8a8-uscaled': [ 46, 0, 'L', 32, 1, 1, lambda x: struct.pack("=BBBB", pack_uint8(x[0][0][2]), pack_uint8(x[0][0][1]), pack_uint8(x[0][0][0]), pack_uint8(x[0][0][3])) ],123 'b8g8r8a8-sscaled': [ 47, 0, 'L', 32, 1, 1, lambda x: struct.pack("=BBBB", pack_sint8(x[0][0][2]), pack_sint8(x[0][0][1]), pack_sint8(x[0][0][0]), pack_sint8(x[0][0][3])) ],124 'b8g8r8a8-uint': [ 48, 0, 'L', 32, 1, 1, lambda x: struct.pack("=BBBB", pack_uint8(x[0][0][2]), pack_uint8(x[0][0][1]), pack_uint8(x[0][0][0]), pack_uint8(x[0][0][3])) ],125 'b8g8r8a8-sint': [ 49, 0, 'L', 32, 1, 1, lambda x: struct.pack("=BBBB", pack_sint8(x[0][0][2]), pack_sint8(x[0][0][1]), pack_sint8(x[0][0][0]), pack_sint8(x[0][0][3])) ],126 'b8g8r8a8-srgb': [ 50, 91, 'L', 32, 1, 1, lambda x: struct.pack("=BBBB", pack_unorm8(x[0][0][2]), pack_unorm8(x[0][0][1]), pack_unorm8(x[0][0][0]), pack_unorm8(x[0][0][3])) ],127 'a8b8g8r8-unorm': [ 51, 0, 'L', 32, 1, 1, lambda x: struct.pack("=BBBB", pack_unorm8(x[0][0][3]), pack_unorm8(x[0][0][2]), pack_unorm8(x[0][0][1]), pack_unorm8(x[0][0][0])) ],128 'a8b8g8r8-snorm': [ 52, 0, 'L', 32, 1, 1, lambda x: struct.pack("=BBBB", pack_snorm8(x[0][0][3]), pack_snorm8(x[0][0][2]), pack_snorm8(x[0][0][1]), pack_snorm8(x[0][0][0])) ],129 'a8b8g8r8-uscaled': [ 53, 0, 'L', 32, 1, 1, lambda x: struct.pack("=BBBB", pack_uint8(x[0][0][3]), pack_uint8(x[0][0][2]), pack_uint8(x[0][0][1]), pack_uint8(x[0][0][0])) ],130 'a8b8g8r8-sscaled': [ 54, 0, 'L', 32, 1, 1, lambda x: struct.pack("=BBBB", pack_sint8(x[0][0][3]), pack_sint8(x[0][0][2]), pack_sint8(x[0][0][1]), pack_sint8(x[0][0][0])) ],131 'a8b8g8r8-uint': [ 55, 0, 'L', 32, 1, 1, lambda x: struct.pack("=BBBB", pack_uint8(x[0][0][3]), pack_uint8(x[0][0][2]), pack_uint8(x[0][0][1]), pack_uint8(x[0][0][0])) ],132 'a8b8g8r8-sint': [ 56, 0, 'L', 32, 1, 1, lambda x: struct.pack("=BBBB", pack_sint8(x[0][0][3]), pack_sint8(x[0][0][2]), pack_sint8(x[0][0][1]), pack_sint8(x[0][0][0])) ],133 'a8b8g8r8-srgb': [ 57, 0, 'L', 32, 1, 1, lambda x: struct.pack("=BBBB", pack_unorm8(x[0][0][3]), pack_unorm8(x[0][0][2]), pack_unorm8(x[0][0][1]), pack_unorm8(x[0][0][0])) ],134 'a2r10g10b10-unorm': [ 58, 0, 'L', 32, 1, 1 ],135 'a2r10g10b10-snorm': [ 59, 0, 'L', 32, 1, 1 ],136 'a2r10g10b10-uscaled': [ 60, 0, 'L', 32, 1, 1 ],137 'a2r10g10b10-sscaled': [ 61, 0, 'L', 32, 1, 1 ],138 'a2r10g10b10-uint': [ 62, 0, 'L', 32, 1, 1 ],139 'a2r10g10b10-sint': [ 63, 0, 'L', 32, 1, 1 ],140 'a2b10g10r10-unorm': [ 64, 24, 'L', 32, 1, 1 ],141 'a2b10g10r10-snorm': [ 65, 0, 'L', 32, 1, 1 ],142 'a2b10g10r10-uscaled': [ 66, 0, 'L', 32, 1, 1 ],143 'a2b10g10r10-sscaled': [ 67, 0, 'L', 32, 1, 1 ],144 'a2b10g10r10-uint': [ 68, 25, 'L', 32, 1, 1 ],145 'a2b10g10r10-sint': [ 69, 0, 'L', 32, 1, 1 ],146 'r16-unorm': [ 70, 56, 'L', 16, 1, 1, lambda x: struct.pack("=H", pack_unorm16(x[0][0][0])) ],147 'r16-snorm': [ 71, 58, 'L', 16, 1, 1, lambda x: struct.pack("=H", pack_snorm16(x[0][0][0])) ],148 'r16-uscaled': [ 72, 0, 'L', 16, 1, 1, lambda x: struct.pack("=H", pack_uint16(x[0][0][0])) ],149 'r16-sscaled': [ 73, 0, 'L', 16, 1, 1, lambda x: struct.pack("=H", pack_sint16(x[0][0][0])) ],150 'r16-uint': [ 74, 57, 'L', 16, 1, 1, lambda x: struct.pack("=H", pack_uint16(x[0][0][0])) ],151 'r16-sint': [ 75, 59, 'L', 16, 1, 1, lambda x: struct.pack("=H", pack_sint16(x[0][0][0])) ],152 'r16-sfloat': [ 76, 54, 'L', 16, 1, 1, lambda x: struct.pack("=H", pack_fp16(x[0][0][0])) ],153 'r16g16-unorm': [ 77, 35, 'L', 32, 1, 1, lambda x: struct.pack("=HH", pack_unorm16(x[0][0][0]), pack_unorm16(x[0][0][1])) ],154 'r16g16-snorm': [ 78, 37, 'L', 32, 1, 1, lambda x: struct.pack("=HH", pack_snorm16(x[0][0][0]), pack_snorm16(x[0][0][1])) ],155 'r16g16-uscaled': [ 79, 0, 'L', 32, 1, 1, lambda x: struct.pack("=HH", pack_uint16(x[0][0][0]), pack_uint16(x[0][0][1])) ],156 'r16g16-sscaled': [ 80, 0, 'L', 32, 1, 1, lambda x: struct.pack("=HH", pack_sint16(x[0][0][0]), pack_sint16(x[0][0][1])) ],157 'r16g16-uint': [ 81, 36, 'L', 32, 1, 1, lambda x: struct.pack("=HH", pack_uint16(x[0][0][0]), pack_uint16(x[0][0][1])) ],158 'r16g16-sint': [ 82, 38, 'L', 32, 1, 1, lambda x: struct.pack("=HH", pack_sint16(x[0][0][0]), pack_sint16(x[0][0][1])) ],159 'r16g16-sfloat': [ 83, 34, 'L', 32, 1, 1, lambda x: struct.pack("=HH", pack_fp16(x[0][0][0]), pack_fp16(x[0][0][1])) ],160 'r16g16b16-unorm': [ 84, 0, 'L', 48, 1, 1, lambda x: struct.pack("=HHH", pack_unorm16(x[0][0][0]), pack_unorm16(x[0][0][1]), pack_unorm16(x[0][0][2])) ],161 'r16g16b16-snorm': [ 85, 0, 'L', 48, 1, 1, lambda x: struct.pack("=HHH", pack_snorm16(x[0][0][0]), pack_snorm16(x[0][0][1]), pack_snorm16(x[0][0][2])) ],162 'r16g16b16-uscaled': [ 86, 0, 'L', 48, 1, 1, lambda x: struct.pack("=HHH", pack_uint16(x[0][0][0]), pack_uint16(x[0][0][1]), pack_uint16(x[0][0][2])) ],163 'r16g16b16-sscaled': [ 87, 0, 'L', 48, 1, 1, lambda x: struct.pack("=HHH", pack_sint16(x[0][0][0]), pack_sint16(x[0][0][1]), pack_sint16(x[0][0][2])) ],164 'r16g16b16-uint': [ 88, 0, 'L', 48, 1, 1, lambda x: struct.pack("=HHH", pack_uint16(x[0][0][0]), pack_uint16(x[0][0][1]), pack_uint16(x[0][0][2])) ],165 'r16g16b16-sint': [ 89, 0, 'L', 48, 1, 1, lambda x: struct.pack("=HHH", pack_sint16(x[0][0][0]), pack_sint16(x[0][0][1]), pack_sint16(x[0][0][2])) ],166 'r16g16b16-sfloat': [ 90, 0, 'L', 48, 1, 1, lambda x: struct.pack("=HHH", pack_fp16(x[0][0][0]), pack_fp16(x[0][0][1]), pack_fp16(x[0][0][2])) ],167 'r16g16b16a16-unorm': [ 91, 11, 'L', 64, 1, 1, lambda x: struct.pack("=HHHH", pack_unorm16(x[0][0][0]), pack_unorm16(x[0][0][1]), pack_unorm16(x[0][0][2]), pack_unorm16(x[0][0][3])) ],168 'r16g16b16a16-snorm': [ 92, 13, 'L', 64, 1, 1, lambda x: struct.pack("=HHHH", pack_snorm16(x[0][0][0]), pack_snorm16(x[0][0][1]), pack_snorm16(x[0][0][2]), pack_snorm16(x[0][0][3])) ],169 'r16g16b16a16-uscaled': [ 93, 0, 'L', 64, 1, 1, lambda x: struct.pack("=HHHH", pack_uint16(x[0][0][0]), pack_uint16(x[0][0][1]), pack_uint16(x[0][0][2]), pack_uint16(x[0][0][3])) ],170 'r16g16b16a16-sscaled': [ 94, 0, 'L', 64, 1, 1, lambda x: struct.pack("=HHHH", pack_sint16(x[0][0][0]), pack_sint16(x[0][0][1]), pack_sint16(x[0][0][2]), pack_sint16(x[0][0][3])) ],171 'r16g16b16a16-uint': [ 95, 12, 'L', 64, 1, 1, lambda x: struct.pack("=HHHH", pack_uint16(x[0][0][0]), pack_uint16(x[0][0][1]), pack_uint16(x[0][0][2]), pack_uint16(x[0][0][3])) ],172 'r16g16b16a16-sint': [ 96, 14, 'L', 64, 1, 1, lambda x: struct.pack("=HHHH", pack_sint16(x[0][0][0]), pack_sint16(x[0][0][1]), pack_sint16(x[0][0][2]), pack_sint16(x[0][0][3])) ],173 'r16g16b16a16-sfloat': [ 97, 10, 'L', 64, 1, 1, lambda x: struct.pack("=HHHH", pack_fp16(x[0][0][0]), pack_fp16(x[0][0][1]), pack_fp16(x[0][0][2]), pack_fp16(x[0][0][3])) ],174 'r32-uint': [ 98, 42, 'L', 32, 1, 1, lambda x: struct.pack("=I", pack_uint32(x[0][0][0])) ],175 'r32-sint': [ 99, 43, 'L', 32, 1, 1, lambda x: struct.pack("=I", pack_sint32(x[0][0][0])) ],176 'r32-sfloat': [ 100, 41, 'L', 32, 1, 1, lambda x: struct.pack("=f", x[0][0][0]) ],177 'r32g32-uint': [ 101, 17, 'L', 64, 1, 1, lambda x: struct.pack("=II", pack_uint32(x[0][0][0]), pack_uint32(x[0][0][1])) ],178 'r32g32-sint': [ 102, 18, 'L', 64, 1, 1, lambda x: struct.pack("=II", pack_sint32(x[0][0][0]), pack_sint323(x[0][0][1])) ],179 'r32g32-sfloat': [ 103, 16, 'L', 64, 1, 1, lambda x: struct.pack("=ff", x[0][0][0], x[0][0][1]) ],180 'r32g32b32-uint': [ 104, 7, 'L', 96, 1, 1, lambda x: struct.pack("=III", pack_uint32(x[0][0][0]), pack_uint32(x[0][0][1]), pack_uint32(x[0][0][2])) ],181 'r32g32b32-sint': [ 105, 8, 'L', 96, 1, 1, lambda x: struct.pack("=III", pack_sint32(x[0][0][0]), pack_sint32(x[0][0][1]), pack_sint32(x[0][0][2])) ],182 'r32g32b32-sfloat': [ 106, 6, 'L', 96, 1, 1, lambda x: struct.pack("=fff", x[0][0][0], x[0][0][1], x[0][0][2]) ],183 'r32g32b32a32-uint': [ 106, 3, 'L', 128, 1, 1, lambda x: struct.pack("=IIII", pack_uint32(x[0][0][0]), pack_uint32(x[0][0][1]), pack_uint32(x[0][0][2]), pack_uint32(x[0][0][3])) ],184 'r32g32b32a32-sint': [ 108, 4, 'L', 128, 1, 1, lambda x: struct.pack("=IIII", pack_sint32(x[0][0][0]), pack_sint32(x[0][0][1]), pack_sint32(x[0][0][2]), pack_sint32(x[0][0][3])) ],185 'r32g32b32a32-sfloat': [ 109, 2, 'L', 128, 1, 1, lambda x: struct.pack("=ffff", x[0][0][0], x[0][0][1], x[0][0][2], x[0][0][3]) ],186 'r64-uint': [ 110, 0, 'L', 64, 1, 1, lambda x: struct.pack("=Q", pack_uint64(x[0][0][0])) ],187 'r64-sint': [ 111, 0, 'L', 64, 1, 1, lambda x: struct.pack("=Q", pack_sint64(x[0][0][0])) ],188 'r64-sfloat': [ 112, 0, 'L', 64, 1, 1, lambda x: struct.pack("=d", x[0][0][0]) ],189 'r64g64-uint': [ 113, 0, 'L', 128, 1, 1, lambda x: struct.pack("=QQ", pack_uint64(x[0][0][0]), pack_uint64(x[0][0][1])) ],190 'r64g64-sint': [ 114, 0, 'L', 128, 1, 1, lambda x: struct.pack("=QQ", pack_sint64(x[0][0][0]), pack_sint64(x[0][0][1])) ],191 'r64g64-sfloat': [ 115, 0, 'L', 128, 1, 1, lambda x: struct.pack("=dd", x[0][0][0], x[0][0][1]) ],192 'r64g64b64-uint': [ 116, 0, 'L', 192, 1, 1, lambda x: struct.pack("=QQQ", pack_uint64(x[0][0][0]), pack_uint64(x[0][0][1]), pack_uint64(x[0][0][2])) ],193 'r64g64b64-sint': [ 117, 0, 'L', 192, 1, 1, lambda x: struct.pack("=QQQ", pack_sint64(x[0][0][0]), pack_sint64(x[0][0][1]), pack_sint64(x[0][0][2])) ],194 'r64g64b64-sfloat': [ 118, 0, 'L', 192, 1, 1, lambda x: struct.pack("=ddd", x[0][0][0], x[0][0][1], x[0][0][2]) ],195 'r64g64b64a64-uint': [ 119, 0, 'L', 256, 1, 1, lambda x: struct.pack("=QQQQ", pack_uint64(x[0][0][0]), pack_uint64(x[0][0][1]), pack_uint64(x[0][0][2]), pack_uint64(x[0][0][3])) ],196 'r64g64b64a64-sint': [ 120, 0, 'L', 256, 1, 1, lambda x: struct.pack("=QQQQ", pack_sint64(x[0][0][0]), pack_sint64(x[0][0][1]), pack_sint64(x[0][0][2]), pack_sint64(x[0][0][3])) ],197 'r64g64b64a64-sfloat': [ 121, 0, 'L', 256, 1, 1, lambda x: struct.pack("=dddd", x[0][0][0], x[0][0][1], x[0][0][2], x[0][0][3]) ],198 'b10g11r11-ufloat': [ 122, 26, 'L', 32, 1, 1 ],199# 'e5b9g9r9-ufloat':200# 'bc1-rgb-unorm':201# 'bc1-rgb-srgb':202# 'bc1-rgba-unorm':203# 'bc1-rgba-srgb':204# 'bc2-unorm':205# 'bc2-srgb':206# 'bc3-unorm':207# 'bc3-srgb':208# 'bc4-unorm':209# 'bc4-snorm':210# 'bc5-unorm':211# 'bc5-snorm':212# 'bc6h-ufloat':213# 'bc6h-sfloat':214# 'bc7-unorm':215# 'bc7-srgb':216# 'etc2-r8g8b8-unorm':217# 'etc2-r8g8b8-srgb':218# 'etc2-r8g8b8a1-unorm':219# 'etc2-r8g8b8a1-srgb':220# 'etc2-r8g8b8a8-unorm':221# 'etc2-r8g8b8a8-srgb':222# 'eac-r11-unorm':223# 'eac-r11-snorm':224# 'eac-r11g11-unorm':225# 'eac-r11g11-snorm':226# 'astc-4x4-unorm':227# 'astc-4x4-srgb':228# 'astc-5x4-unorm':229# 'astc-5x4-srgb':230# 'astc-5x5-unorm':231# 'astc-5x5-srgb':232# 'astc-6x5-unorm':233# 'astc-6x5-srgb':234# 'astc-6x6-unorm':235# 'astc-6x6-srgb':236# 'astc-8x5-unorm':237# 'astc-8x5-srgb':238# 'astc-8x6-unorm':239# 'astc-8x6-srgb':240# 'astc-8x8-unorm':241# 'astc-8x8-srgb':242# 'astc-10x5-unorm':243# 'astc-10x5-srgb':244# 'astc-10x6-unorm':245# 'astc-10x6-srgb':246# 'astc-10x8-unorm':247# 'astc-10x8-srgb':248# 'astc-10x10-unorm':249# 'astc-10x10-srgb':250# 'astc-12x10-unorm':251# 'astc-12x10-srgb':252# 'astc-12x12-unorm':253# 'astc-12x12-srgb':254}255def perror(str):256 sys.stderr.write("textool: ")257 sys.stderr.write(str)258 sys.stderr.write("\n")259 sys.stderr.flush()260 sys.exit(1)261def pwarn(str):262 sys.stderr.write("textool: ")263 sys.stderr.write(str)264 sys.stderr.write("\n")265 sys.stderr.flush()266def parse_command_line():267 argp = argparse.ArgumentParser(description="Process and compress textures")268 argp.add_argument('-m', '--merge', action='store_true', help='Combine textures into one single file')269 argp.add_argument('-c', '--cubemap', action='store_true', help='Create cubemap, implies merge')270 argp.add_argument('-g', '--generate-mipmaps', action='store_true', help='Generate mipmaps')271 argp.add_argument('-l', '--list-formats', action='store_true', help='List supported formats, then exit')272 argp.add_argument('-f', '--format' , action='store', type=str, help='Select output format (r16g16b16a16-sfloat)')273 argp.add_argument('-S', '--reshape', action='store', type=str, help='Reshape image to w:h:d:l')274 argp.add_argument('-s', '--scale', action='store', type=str, help='Multiply all pixels by r:g:b:a')275 argp.add_argument('-b', '--bias', action='store', type=str, help='Add r:g:b:a to all pixels')276 argp.add_argument('-o', '--output', action='store', type=str, help='Output file ({input}.dds)')277 argp.add_argument('-C', '--directory', action='store', type=str, help='Set working directory')278 argp.add_argument('images', nargs=argparse.REMAINDER)279 argv = argp.parse_args()280 if not argv.format:281 argv.format = 'r16g16b16a16-sfloat'282 if not argv.directory:283 argv.directory = ""284 if not argv.output:285 argv.output = "{input}.dds"286 if not argv.list_formats and len(argv.images) < 1:287 perror("No input files specified")288 return argv289def image_load(images):290 for image in images:291 pwarn("Processing %s..." % image)292 img = Image.open(image)293 img.load()294 pixels = np.asarray(img, dtype='float32')295 channels = pixels.shape[2] if len(pixels.shape) > 2 else 1296 pixels = pixels.reshape((pixels.shape[0], pixels.shape[1], 1, 1, channels))297 if channels < 4:298 pixels = np.pad(pixels, ((0,0),(0,0),(0,0),(0,0),(0, 4 - channels)), mode='constant', constant_values=0)299 if img.mode != 'F':300 pixels /= 255.0301 yield image, pixels302def image_load_combined(images):303 return []304def image_resize_half(pixels):305 return pixels306def image_convert(pixels, fmt, mipmaps):307 data = []308 for l in xrange(pixels.shape[3]):309 slice = ""310 for z in xrange(pixels.shape[2]):311 for y in xrange(0, pixels.shape[1], fmt[PF_BLKH]):312 for x in xrange(0, pixels.shape[0], fmt[PF_BLKW]):313 slice += fmt[PF_FUNC](pixels[y:y+fmt[PF_BLKH],x:x+fmt[PF_BLKW],z,l,:])314 data.append([ slice ])315 return data316def dds_write(output, pixels, shape, fmt, cubemap):317 pwarn("Writing to '%s'..." % output)318 try:319 out = open(output, 'wb')320 except:321 perror("Failed to open output file!")322 flags = 0x1007 # DDS_CAPS, DDS_WIDTH, DDS_HEIGHT, DDS_PF323 caps0 = 0x00001008 # DDSCAPS_COMPLEX, DDSCAPS_TEXTURE324 caps1 = 0325 flags10 = 0326 dims = 2327 mipmaps = len(pixels[0])328 if fmt[PF_PACKING] == 'L': pitch = int((shape[1] * fmt[PF_BPP] + 7) / 8)329 if fmt[PF_PACKING] == 'B': pitch = max(int((shape[1] + 3) / 4), 1) * fmt[PF_BPP]330 if pitch > 0: flags |= 0x8 # DDS_PITCH331 if mipmaps > 1: flags |= 0x20000 # DDS_MIPMAPCOUNT332 if shape[2] > 1: flags |= 0x800000 # DDS_DEPTH333 if mipmaps > 1: caps0 |= 0x400000 # DDSCAPS_MIPMAP334 if cubemap: caps1 |= 0xfe00 # DDSCAPS2_CUBEMAP, DDSCAPS2_CUBEMAP_ALL_FACES335 if cubemap: flags10 |= 0x4 # DDS_RESOURCE_MISC_TEXTURECUBE336 if shape[0] > 1: dims = 3337 if shape[2] > 1: dims = 4338 out.write(struct.pack("=I II IIII I IIII IIII III III I IIII IIII I II III",339 0x20534444, 124, flags, # magic, size, flags340 shape[1], shape[0], pitch, shape[2], mipmaps, # width, height, pitch, depth, mipmaps341 0,0,0,0, 0,0,0,0, 0,0,0, # reserved[11]342 32, 0x04, 0x30315844, 0, 0, 0, 0, 0, # pf_size, flags:FOURCC, fourcc:DX10, bits, rmask, gmask, bmask, amask343 caps0, caps1, 0, 0, 0, # caps0, caps1, caps2, caps3, reserved344 fmt[PF_DXGI], dims, flags10, shape[3], 0)) # dx10_fmt, dimensions, flags, array_count, reserved345 for image in pixels:346 for mipmap in image:347 out.write(mipmap)348 out.close()349np.set_printoptions(threshold=np.nan)350argv = parse_command_line()351if argv.list_formats:352 pwarn("Supported formats:")...
db distinct.py
Source:db distinct.py
1import rethinkdb as r2import json3from datetime import datetime, tzinfo4conn = r.connect()5conn.use("ygo")6# pack list before processing7# packnames = [8# {"pack": 'Absolute Powerforce', "release": datetime.strptime("02, 16, 2010", '%m, %d, %Y'), "shortname": "TAEV"},9# {"pack": 'Abyss Rising', "release": datetime.strptime("11, 9, 2012", '%m, %d, %Y'), "shortname": "TAEV"},10# {"pack": 'Ancient Prophecy', "release": datetime.strptime("09, 1, 2009", '%m, %d, %Y'), "shortname": "TAEV"},11# {"pack": 'Ancient Sanctuary', "release": datetime.strptime("06, 1, 2004", '%m, %d, %Y'), "shortname": "TAEV"},12# {"pack": 'Battles of Legend: Light\'s Revenge', "release": datetime.strptime("07, 7, 2017", '%m, %d, %Y'), "shortname": "TAEV"},13# {"pack": 'Battles of Legend: Relentless Revenge', "release": datetime.strptime("06, 29, 2018", '%m, %d, %Y'), "shortname": "TAEV"},14# {"pack": 'Breakers of Shadow', "release": datetime.strptime("1, 15, 2016", '%m, %d, %Y'), "shortname": "TAEV"},15# {"pack": 'Circuit Break', "release": datetime.strptime("10, 20, 2017", '%m, %d, %Y'), "shortname": "TAEV"},16# {"pack": 'Clash of Rebellions', "release": datetime.strptime("08, 7, 2015", '%m, %d, %Y'), "shortname": "TAEV"},17# {"pack": 'Code of the Duelist', "release": datetime.strptime("08, 4, 2017", '%m, %d, %Y'), "shortname": "TAEV"},18# {"pack": 'Cosmo Blazer', "release": datetime.strptime("1, 25, 2013", '%m, %d, %Y'), "shortname": "TAEV"},19# {"pack": 'Crimson Crisis', "release": datetime.strptime("03, 3, 2009", '%m, %d, %Y'), "shortname": "TAEV"},20# {"pack": 'Crossed Souls', "release": datetime.strptime("05, 15, 2015", '%m, %d, %Y'), "shortname": "TAEV"},21# {"pack": 'Crossroads of Chaos', "release": datetime.strptime("11, 18, 2008", '%m, %d, %Y'), "shortname": "TAEV"},22# {"pack": 'Cyberdark Impact', "release": datetime.strptime("11, 15, 2006", '%m, %d, %Y'), "shortname": "TAEV"},23# {"pack": 'Cybernetic Horizon', "release": datetime.strptime("07, 27, 2018", '%m, %d, %Y'), "shortname": "TAEV"},24# {"pack": 'Cybernetic Revolution', "release": datetime.strptime("08, 17, 2005", '%m, %d, %Y'), "shortname": "TAEV"},25# {"pack": 'Dark Beginning 1', "release": datetime.strptime("10, 12, 2004", '%m, %d, %Y'), "shortname": "TAEV"},26# {"pack": 'Dark Beginning 2', "release": datetime.strptime("07, 27, 2005", '%m, %d, %Y'), "shortname": "TAEV"},27# {"pack": 'Dark Crisis', "release": datetime.strptime("12, 1, 2003", '%m, %d, %Y'), "shortname": "TAEV"},28# {"pack": 'Dark Legends', "release": datetime.strptime("11, 21, 2008", '%m, %d, %Y'), "shortname": "TAEV"},29# {"pack": 'Dark Revelation Volume 4', "release": datetime.strptime("11, 14, 2007", '%m, %d, %Y'), "shortname": "TAEV"},30# {"pack": 'Dark Saviors', "release": datetime.strptime("05, 25, 2018", '%m, %d, %Y'), "shortname": "TAEV"},31# {"pack": 'Destiny Soldiers', "release": datetime.strptime("11, 18, 2016", '%m, %d, %Y'), "shortname": "TAEV"},32# {"pack": 'Dimension of Chaos', "release": datetime.strptime("11, 6, 2015", '%m, %d, %Y'), "shortname": "TAEV"},33# {"pack": 'Dragons of Legend', "release": datetime.strptime("04, 25, 2014", '%m, %d, %Y'), "shortname": "TAEV"},34# {"pack": 'Dragons of Legend 2', "release": datetime.strptime("1, 1, 2012", '%m, %d, %Y'), "shortname": "TAEV"},35# {"pack": 'Duelist Alliance', "release": datetime.strptime("08, 15, 2014", '%m, %d, %Y'), "shortname": "TAEV"},36# {"pack": 'Duelist Revolution', "release": datetime.strptime("08, 17, 2010", '%m, %d, %Y'), "shortname": "TAEV"},37# {"pack": 'Elemental Energy', "release": datetime.strptime("11, 16, 2005", '%m, %d, %Y'), "shortname": "TAEV"},38# {"pack": 'Enemy of Justice', "release": datetime.strptime("05, 17, 2006", '%m, %d, %Y'), "shortname": "TAEV"},39# {"pack": 'Exclusive Pack', "release": datetime.strptime("08, 1, 2004", '%m, %d, %Y'), "shortname": "TAEV"},40# {"pack": 'Extreme Force', "release": datetime.strptime("02, 2, 2018", '%m, %d, %Y'), "shortname": "TAEV"},41# {"pack": 'Extreme Victory', "release": datetime.strptime("05, 10, 2011", '%m, %d, %Y'), "shortname": "TAEV"},42# {"pack": 'Flames of Destruction', "release": datetime.strptime("05, 4, 2018", '%m, %d, %Y'), "shortname": "TAEV"},43# {"pack": 'Flaming Eternity', "release": datetime.strptime("03, 1, 2005", '%m, %d, %Y'), "shortname": "TAEV"},44# {"pack": 'Force of the Breaker', "release": datetime.strptime("05, 16, 2007", '%m, %d, %Y'), "shortname": "TAEV"},45# {"pack": 'Fusion Enforcers', "release": datetime.strptime("02, 24, 2017", '%m, %d, %Y'), "shortname": "TAEV"},46# {"pack": 'Galactic Overlord', "release": datetime.strptime("05, 8, 2012", '%m, %d, %Y'), "shortname": "TAEV"},47# {"pack": 'Generation Force', "release": datetime.strptime("08, 16, 2011", '%m, %d, %Y'), "shortname": "TAEV"},48# {"pack": 'Gladiator\'s Assault', "release": datetime.strptime("11, 14, 2007", '%m, %d, %Y'), "shortname": "TAEV"},49# {"pack": 'Hidden Arsenal', "release": datetime.strptime("11, 10, 2009", '%m, %d, %Y'), "shortname": "TAEV"},50# {"pack": 'Hidden Arsenal 2', "release": datetime.strptime("07, 20, 2010", '%m, %d, %Y'), "shortname": "TAEV"},51# {"pack": 'Hidden Arsenal 3', "release": datetime.strptime("12, 7, 2010", '%m, %d, %Y'), "shortname": "TAEV"},52# {"pack": 'Hidden Arsenal 4: Trishula\'s Triumph', "release": datetime.strptime("04, 19, 2011", '%m, %d, %Y'), "shortname": "TAEV"},53# {"pack": 'High-Speed Riders', "release": datetime.strptime("10, 2, 2015", '%m, %d, %Y'), "shortname": "TAEV"},54# {"pack": 'Invasion of Chaos', "release": datetime.strptime("03, 1, 2004", '%m, %d, %Y'), "shortname": "TAEV"},55# {"pack": 'Invasion: Vengeance', "release": datetime.strptime("11, 4, 2016", '%m, %d, %Y'), "shortname": "TAEV"},56# {"pack": 'Judgment of the Light', "release": datetime.strptime("08, 9, 2013", '%m, %d, %Y'), "shortname": "TAEV"},57# {"pack": 'Labyrinth of Nightmare', "release": datetime.strptime("03, 1, 2003", '%m, %d, %Y'), "shortname": "TAEV"},58# {"pack": 'Legacy of Darkness', "release": datetime.strptime("06, 6, 2003", '%m, %d, %Y'), "shortname": "TAEV"},59# {"pack": 'Legend of Blue Eyes White Dragon', "release": datetime.strptime("12, 1, 2004", '%m, %d, %Y'), "shortname": "TAEV"},60# {"pack": 'Legendary Duelists', "release": datetime.strptime("09, 8, 2017", '%m, %d, %Y'), "shortname": "TAEV"},61# {"pack": 'Legendary Duelists: Ancient Millennium', "release": datetime.strptime("02, 23, 2018", '%m, %d, %Y'), "shortname": "TAEV"},62# {"pack": 'Legendary Duelists: White Dragon Abyss', "release": datetime.strptime("09, 28, 2018", '%m, %d, %Y'), "shortname": "TAEV"},63# {"pack": 'Light of Destruction', "release": datetime.strptime("05, 13, 2008", '%m, %d, %Y'), "shortname": "TAEV"},64# {"pack": 'Lord of the Tachyon Galaxy', "release": datetime.strptime("05, 17, 2013", '%m, %d, %Y'), "shortname": "TAEV"},65# {"pack": 'Magician\'s Force', "release": datetime.strptime("10, 10, 2003", '%m, %d, %Y'), "shortname": "TAEV"},66# {"pack": 'Maximum Crisis', "release": datetime.strptime("05, 5, 2017", '%m, %d, %Y'), "shortname": "TAEV"},67# {"pack": 'Metal Raiders', "release": datetime.strptime("06, 26, 2002", '%m, %d, %Y'), "shortname": "TAEV"},68# {"pack": 'Movie Pack', "release": datetime.strptime("08, 13, 2004", '%m, %d, %Y'), "shortname": "TAEV"},69# {"pack": 'Number Hunters', "release": datetime.strptime("07, 12, 2013", '%m, %d, %Y'), "shortname": "TAEV"},70# {"pack": 'Order of Chaos', "release": datetime.strptime("1, 24, 2012", '%m, %d, %Y'), "shortname": "TAEV"},71# {"pack": 'Pendulum Evolution', "release": datetime.strptime("06, 23, 2017", '%m, %d, %Y'), "shortname": "TAEV"},72# {"pack": 'Phantom Darkness', "release": datetime.strptime("02, 13, 2008", '%m, %d, %Y'), "shortname": "TAEV"},73# {"pack": 'Pharaoh\'s Servant', "release": datetime.strptime("10, 20, 2002", "%m, %d, %Y"), "shortname": "TAEV"},74# {"pack": 'Pharaonic Guardian', "release": datetime.strptime("07, 18, 2003", '%m, %d, %Y'), "shortname": "TAEV"},75# {"pack": 'Photon Shockwave', "release": datetime.strptime("11, 15, 2011", '%m, %d, %Y'), "shortname": "TAEV"},76# {"pack": 'Primal Origin', "release": datetime.strptime("05, 16, 2014", '%m, %d, %Y'), "shortname": "TAEV"},77# {"pack": 'Raging Battle', "release": datetime.strptime("05, 12, 2009", '%m, %d, %Y'), "shortname": "TAEV"},78# {"pack": 'Raging Tempest', "release": datetime.strptime("02, 10, 2017", '%m, %d, %Y'), "shortname": "TAEV"},79# {"pack": 'Return of the Duelist', "release": datetime.strptime("08, 28, 2012", '%m, %d, %Y'), "shortname": "TAEV"},80# {"pack": 'Rise of Destiny', "release": datetime.strptime("12, 1, 2004", '%m, %d, %Y'), "shortname": "TAEV"},81# {"pack": 'Secrets of Eternity', "release": datetime.strptime("1, 16, 2015", '%m, %d, %Y'), "shortname": "TAEV"},82# {"pack": 'Shadow of Infinity', "release": datetime.strptime("02, 18, 2006", '%m, %d, %Y'), "shortname": "TAEV"},83# {"pack": 'Shadow Specters', "release": datetime.strptime("11, 8, 2013", '%m, %d, %Y'), "shortname": "TAEV"},84# {"pack": 'Shadows in Valhalla', "release": datetime.strptime("08, 17, 2018", '%m, %d, %Y'), "shortname": "TAEV"},85# {"pack": 'Shining Victories', "release": datetime.strptime("05, 6, 2016", '%m, %d, %Y'), "shortname": "TAEV"},86# {"pack": 'Soul Fusion', "release": datetime.strptime("10, 19, 2018", '%m, %d, %Y'), "shortname": "TAEV"},87# {"pack": 'Soul of the Duelist', "release": datetime.strptime("10, 1, 2004", '%m, %d, %Y'), "shortname": "TAEV"},88# {"pack": 'Spell Ruler', "release": datetime.strptime("09, 16, 2002", "%m, %d, %Y"), "shortname": "TAEV"},89# {"pack": 'Spirit Warriors', "release": datetime.strptime("11, 17, 2017", '%m, %d, %Y'), "shortname": "TAEV"},90# {"pack": 'Stardust Overdrive', "release": datetime.strptime("11, 17, 2009", '%m, %d, %Y'), "shortname": "TAEV"},91# {"pack": 'Starstrike Blast', "release": datetime.strptime("11, 16, 2010", '%m, %d, %Y'), "shortname": "TAEV"},92# {"pack": 'Storm of Ragnarok', "release": datetime.strptime("02, 8, 2011", '%m, %d, %Y'), "shortname": "TAEV"},93# {"pack": 'Strike of Neos', "release": datetime.strptime("02, 28, 2007", '%m, %d, %Y'), "shortname": "TAEV"},94# {"pack": 'Tactical Evolution', "release": datetime.strptime("08, 15, 2007", '%m, %d, %Y'), "shortname": "TAEV"},95# {"pack": 'The Dark Illusion', "release": datetime.strptime("08, 5, 2016", '%m, %d, %Y'), "shortname": "TAEV"},96# {"pack": 'The Duelist Genesis', "release": datetime.strptime("09, 2, 2008", '%m, %d, %Y'), "shortname": "TAEV"},97# {"pack": 'The Lost Millennium', "release": datetime.strptime("06, 1, 2005", '%m, %d, %Y'), "shortname": "TAEV"},98# {"pack": 'The New Challengers', "release": datetime.strptime("11, 7, 2014", '%m, %d, %Y'), "shortname": "TAEV"},99# {"pack": 'The Shining Darkness', "release": datetime.strptime("05, 11, 2010", '%m, %d, %Y'), "shortname": "TAEV"},100# {"pack": 'War of the Giants: Round 2', "release": datetime.strptime("1, 17, 2014", '%m, %d, %Y'), "shortname": "TAEV"},101# {"pack": 'Wing Raiders', "release": datetime.strptime("02, 12, 2016", '%m, %d, %Y'), "shortname": "TAEV"},102# {"pack": 'World Superstars', "release": datetime.strptime("04, 17, 2015", '%m, %d, %Y'), "shortname": "TAEV"}]103# grabs shortnames from abbrv file104# y = ""105# file = open("packAbbrv")106# for line in file:107# for x, value in enumerate(packnames):108# if packnames[x]["pack"] == line.strip():109# y = line.strip()110# elif y == packnames[x]["pack"]:111# packnames[x]["shortname"] = line.strip()112# print("%s," % (packnames[x]))113# y = ""114# insert packs into packlist115# time = r.make_timezone("-06:00")116#117# packnames = [118# {'pack': 'Absolute Powerforce', 'shortname': 'ABPF', 'release': datetime(2010, 2, 16, 0, 0, 0, 0, time)},119# {'pack': 'Abyss Rising', 'shortname': 'ABYR', 'release': datetime(2012, 11, 9, 0, 0, 0, 0, time)},120# {'pack': 'Ancient Prophecy', 'shortname': 'ANPR', 'release': datetime(2009, 9, 1, 0, 0, 0, 0, time)},121# {'pack': 'Ancient Sanctuary', 'shortname': 'AST', 'release': datetime(2004, 6, 1, 0, 0, 0, 0, time)},122# {'pack': "Battles of Legend: Light's Revenge", 'shortname': 'BLLR', 'release': datetime(2017, 7, 7, 0, 0, 0, 0, time)},123# {'pack': 'Battles of Legend: Relentless Revenge', 'shortname': 'BLRR', 'release': datetime(2018, 6, 29, 0, 0, 0, 0, time)},124# {'pack': 'Breakers of Shadow', 'shortname': 'BOSH', 'release': datetime(2016, 1, 15, 0, 0, 0, 0, time)},125# {'pack': 'Circuit Break', 'shortname': 'CIBR', 'release': datetime(2017, 10, 20, 0, 0, 0, 0, time)},126# {'pack': 'Clash of Rebellions', 'shortname': 'CORE', 'release': datetime(2015, 8, 7, 0, 0, 0, 0, time)},127# {'pack': 'Code of the Duelist', 'shortname': 'COTD', 'release': datetime(2017, 8, 4, 0, 0, 0, 0, time)},128# {'pack': 'Cosmo Blazer', 'shortname': 'CBLZ', 'release': datetime(2013, 1, 25, 0, 0, 0, 0, time)},129# {'pack': 'Crimson Crisis', 'shortname': 'CRMS', 'release': datetime(2009, 3, 3, 0, 0, 0, 0, time)},130# {'pack': 'Crossed Souls', 'shortname': 'CROS', 'release': datetime(2015, 5, 15, 0, 0, 0, 0, time)},131# {'pack': 'Crossroads of Chaos', 'shortname': 'CSOC', 'release': datetime(2008, 11, 18, 0, 0, 0, 0, time)},132# {'pack': 'Cyberdark Impact', 'shortname': 'CDIP', 'release': datetime(2006, 11, 15, 0, 0, 0, 0, time)},133# {'pack': 'Cybernetic Horizon', 'shortname': 'CYHO', 'release': datetime(2018, 7, 27, 0, 0, 0, 0, time)},134# {'pack': 'Cybernetic Revolution', 'shortname': 'CRV', 'release': datetime(2005, 8, 17, 0, 0, 0, 0, time)},135# {'pack': 'Dark Beginning 1', 'shortname': 'DB1', 'release': datetime(2004, 10, 12, 0, 0, 0, 0, time)},136# {'pack': 'Dark Beginning 2', 'shortname': 'DB2', 'release': datetime(2005, 7, 27, 0, 0, 0, 0, time)},137# {'pack': 'Dark Crisis', 'shortname': 'DCR', 'release': datetime(2003, 12, 1, 0, 0, 0, 0, time)},138# {'pack': 'Dark Legends', 'shortname': 'DLG1', 'release': datetime(2008, 11, 21, 0, 0, 0, 0, time)},139# {'pack': 'Dark Revelation Volume 4', 'shortname': 'DR04', 'release': datetime(2007, 11, 14, 0, 0, 0, 0, time)},140# {'pack': 'Dark Saviors', 'shortname': 'DASA', 'release': datetime(2018, 5, 25, 0, 0, 0, 0, time)},141# {'pack': 'Destiny Soldiers', 'shortname': 'DESO', 'release': datetime(2016, 11, 18, 0, 0, 0, 0, time)},142# {'pack': 'Dimension of Chaos', 'shortname': 'DOCS', 'release': datetime(2015, 11, 6, 0, 0, 0, 0, time)},143# {'pack': 'Dragons of Legend', 'shortname': 'DRLG', 'release': datetime(2014, 4, 25, 0, 0, 0, 0, time)},144# {'pack': 'Dragons of Legend 2', 'shortname': 'DRL2', 'release': datetime(2012, 1, 1, 0, 0, 0, 0, time)},145# {'pack': 'Duelist Alliance', 'shortname': 'DUEA', 'release': datetime(2014, 8, 15, 0, 0, 0, 0, time)},146# {'pack': 'Duelist Revolution', 'shortname': 'DREV', 'release': datetime(2010, 8, 17, 0, 0, 0, 0, time)},147# {'pack': 'Elemental Energy', 'shortname': 'EEN', 'release': datetime(2005, 11, 16, 0, 0, 0, 0, time)},148# {'pack': 'Enemy of Justice', 'shortname': 'EOJ', 'release': datetime(2006, 5, 17, 0, 0, 0, 0, time)},149# {'pack': 'Exclusive Pack', 'shortname': 'EP1', 'release': datetime(2004, 8, 1, 0, 0, 0, 0, time)},150# {'pack': 'Extreme Force', 'shortname': 'EXFO', 'release': datetime(2018, 2, 2, 0, 0, 0, 0, time)},151# {'pack': 'Extreme Victory', 'shortname': 'EXVC', 'release': datetime(2011, 5, 10, 0, 0, 0, 0, time)},152# {'pack': 'Flames of Destruction', 'shortname': 'FLOD', 'release': datetime(2018, 5, 4, 0, 0, 0, 0, time)},153# {'pack': 'Flaming Eternity', 'shortname': 'FET', 'release': datetime(2005, 3, 1, 0, 0, 0, 0, time)},154# {'pack': 'Force of the Breaker', 'shortname': 'FOTB', 'release': datetime(2007, 5, 16, 0, 0, 0, 0, time)},155# {'pack': 'Fusion Enforcers', 'shortname': 'FUEN', 'release': datetime(2017, 2, 24, 0, 0, 0, 0, time)},156# {'pack': 'Galactic Overlord', 'shortname': 'GAOV', 'release': datetime(2012, 5, 8, 0, 0, 0, 0, time)},157# {'pack': 'Generation Force', 'shortname': 'GENF', 'release': datetime(2011, 8, 16, 0, 0, 0, 0, time)},158# {'pack': "Gladiator's Assault", 'shortname': 'GLAS', 'release': datetime(2007, 11, 14, 0, 0, 0, 0, time)},159# {'pack': 'Hidden Arsenal', 'shortname': 'HA01', 'release': datetime(2009, 11, 10, 0, 0, 0, 0, time)},160# {'pack': 'Hidden Arsenal 2', 'shortname': 'HA02', 'release': datetime(2010, 7, 20, 0, 0, 0, 0, time)},161# {'pack': 'Hidden Arsenal 3', 'shortname': 'HA03', 'release': datetime(2010, 12, 7, 0, 0, 0, 0, time)},162# {'pack': "Hidden Arsenal 4: Trishula's Triumph", 'shortname': 'HA04', 'release': datetime(2011, 4, 19, 0, 0, 0, 0, time)},163# {'pack': 'High-Speed Riders', 'shortname': 'HSRD', 'release': datetime(2015, 10, 2, 0, 0, 0, 0, time)},164# {'pack': 'Invasion of Chaos', 'shortname': 'IOC', 'release': datetime(2004, 3, 1, 0, 0, 0, 0, time)},165# {'pack': 'Invasion: Vengeance', 'shortname': 'INOV', 'release': datetime(2016, 11, 4, 0, 0, 0, 0, time)},166# {'pack': 'Judgment of the Light', 'shortname': 'JOTL', 'release': datetime(2013, 8, 9, 0, 0, 0, 0, time)},167# {'pack': 'Labyrinth of Nightmare', 'shortname': 'LON', 'release': datetime(2003, 3, 1, 0, 0, 0, 0, time)},168# {'pack': 'Legacy of Darkness', 'shortname': 'LOD', 'release': datetime(2003, 6, 6, 0, 0, 0, 0, time)},169# {'pack': 'Legend of Blue Eyes White Dragon', 'shortname': 'LOB', 'release': datetime(2004, 12, 1, 0, 0, 0, 0, time)},170# {'pack': 'Legendary Duelists', 'shortname': 'LEDU', 'release': datetime(2017, 9, 8, 0, 0, 0, 0, time)},171# {'pack': 'Legendary Duelists: Ancient Millennium', 'shortname': 'LED2', 'release': datetime(2018, 2, 23, 0, 0, 0, 0, time)},172# {'pack': 'Legendary Duelists: White Dragon Abyss', 'shortname': 'LED3', 'release': datetime(2018, 9, 28, 0, 0, 0, 0, time)},173# {'pack': 'Light of Destruction', 'shortname': 'LODT', 'release': datetime(2008, 5, 13, 0, 0, 0, 0, time)},174# {'pack': 'Lord of the Tachyon Galaxy', 'shortname': 'LTGY', 'release': datetime(2013, 5, 17, 0, 0, 0, 0, time)},175# {'pack': "Magician's Force", 'shortname': 'MFC', 'release': datetime(2003, 10, 10, 0, 0, 0, 0, time)},176# {'pack': 'Maximum Crisis', 'shortname': 'MACR', 'release': datetime(2017, 5, 5, 0, 0, 0, 0, time)},177# {'pack': 'Metal Raiders', 'shortname': 'MRD', 'release': datetime(2002, 6, 26, 0, 0, 0, 0, time)},178# {'pack': 'Movie Pack', 'shortname': 'MOV', 'release': datetime(2004, 8, 13, 0, 0, 0, 0, time)},179# {'pack': 'Number Hunters', 'shortname': 'NUMH', 'release': datetime(2013, 7, 12, 0, 0, 0, 0, time)},180# {'pack': 'Order of Chaos', 'shortname': 'ORCS', 'release': datetime(2012, 1, 24, 0, 0, 0, 0, time)},181# {'pack': 'Pendulum Evolution', 'shortname': 'PEVO', 'release': datetime(2017, 6, 23, 0, 0, 0, 0, time)},182# {'pack': 'Phantom Darkness', 'shortname': 'PTDN', 'release': datetime(2008, 2, 13, 0, 0, 0, 0, time)},183# {'pack': "Pharaoh's Servant", 'shortname': 'PSV', 'release': datetime(2002, 10, 20, 0, 0, 0, 0, time)},184# {'pack': 'Pharaonic Guardian', 'shortname': 'PGD', 'release': datetime(2003, 7, 18, 0, 0, 0, 0, time)},185# {'pack': 'Photon Shockwave', 'shortname': 'PHSW', 'release': datetime(2011, 11, 15, 0, 0, 0, 0, time)},186# {'pack': 'Primal Origin', 'shortname': 'PRIO', 'release': datetime(2014, 5, 16, 0, 0, 0, 0, time)},187# {'pack': 'Raging Battle', 'shortname': 'RGBT', 'release': datetime(2009, 5, 12, 0, 0, 0, 0, time)},188# {'pack': 'Raging Tempest', 'shortname': 'RATE', 'release': datetime(2017, 2, 10, 0, 0, 0, 0, time)},189# {'pack': 'Return of the Duelist', 'shortname': 'REDU', 'release': datetime(2012, 8, 28, 0, 0, 0, 0, time)},190# {'pack': 'Rise of Destiny', 'shortname': 'RDS', 'release': datetime(2004, 12, 1, 0, 0, 0, 0, time)},191# {'pack': 'Secrets of Eternity', 'shortname': 'SECE', 'release': datetime(2015, 1, 16, 0, 0, 0, 0, time)},192# {'pack': 'Shadow of Infinity', 'shortname': 'SOI', 'release': datetime(2006, 2, 18, 0, 0, 0, 0, time)},193# {'pack': 'Shadow Specters', 'shortname': 'SHSP', 'release': datetime(2013, 11, 8, 0, 0, 0, 0, time)},194# {'pack': 'Shadows in Valhalla', 'shortname': 'SHVA', 'release': datetime(2018, 8, 17, 0, 0, 0, 0, time)},195# {'pack': 'Shining Victories', 'shortname': 'SHVI', 'release': datetime(2016, 5, 6, 0, 0, 0, 0, time)},196# {'pack': 'Soul Fusion', 'shortname': 'SOFU', 'release': datetime(2018, 10, 19, 0, 0, 0, 0, time)},197# {'pack': 'Soul of the Duelist', 'shortname': 'SOD', 'release': datetime(2004, 10, 1, 0, 0, 0, 0, time)},198# {'pack': 'Spell Ruler', 'shortname': 'SRL', 'release': datetime(2002, 9, 16, 0, 0, 0, 0, time)},199# {'pack': 'Spirit Warriors', 'shortname': 'SPWA', 'release': datetime(2017, 11, 17, 0, 0, 0, 0, time)},200# {'pack': 'Stardust Overdrive', 'shortname': 'SOVR', 'release': datetime(2009, 11, 17, 0, 0, 0, 0, time)},201# {'pack': 'Starstrike Blast', 'shortname': 'STBL', 'release': datetime(2010, 11, 16, 0, 0, 0, 0, time)},202# {'pack': 'Storm of Ragnarok', 'shortname': 'STOR', 'release': datetime(2011, 2, 8, 0, 0, 0, 0, time)},203# {'pack': 'Strike of Neos', 'shortname': 'STON', 'release': datetime(2007, 2, 28, 0, 0, 0, 0, time)},204# {'pack': 'Tactical Evolution', 'shortname': 'TAEV', 'release': datetime(2007, 8, 15, 0, 0, 0, 0, time)},205# {'pack': 'The Dark Illusion', 'shortname': 'TDIL', 'release': datetime(2016, 8, 5, 0, 0, 0, 0, time)},206# {'pack': 'The Duelist Genesis', 'shortname': 'TDGS', 'release': datetime(2008, 9, 2, 0, 0, 0, 0, time)},207# {'pack': 'The Lost Millennium', 'shortname': 'TLM', 'release': datetime(2005, 6, 1, 0, 0, 0, 0, time)},208# {'pack': 'The New Challengers', 'shortname': 'NECH', 'release': datetime(2014, 11, 7, 0, 0, 0, 0, time)},209# {'pack': 'The Shining Darkness', 'shortname': 'TSHD', 'release': datetime(2010, 5, 11, 0, 0, 0, 0, time)},210# {'pack': 'War of the Giants: Round 2', 'shortname': 'BPW2', 'release': datetime(2014, 1, 17, 0, 0, 0, 0, time)},211# {'pack': 'Wing Raiders', 'shortname': 'WIRA', 'release': datetime(2016, 2, 12, 0, 0, 0, 0, time)},212# {'pack': 'World Superstars', 'shortname': 'WSUP', 'release': datetime(2015, 4, 17, 0, 0, 0, 0, time)}]213#214# results = r.table("packlist").insert(packnames).run(conn)...
ism.py
Source:ism.py
...16s88 = compat_Struct('>bx')17s16 = compat_Struct('>h')18s1616 = compat_Struct('>hxx')19s32 = compat_Struct('>i')20unity_matrix = (s32.pack(0x10000) + s32.pack(0) * 3) * 2 + s32.pack(0x40000000)21TRACK_ENABLED = 0x122TRACK_IN_MOVIE = 0x223TRACK_IN_PREVIEW = 0x424SELF_CONTAINED = 0x125def box(box_type, payload):26 return u32.pack(8 + len(payload)) + box_type + payload27def full_box(box_type, version, flags, payload):28 return box(box_type, u8.pack(version) + u32.pack(flags)[1:] + payload)29def write_piff_header(stream, params):30 track_id = params['track_id']31 fourcc = params['fourcc']32 duration = params['duration']33 timescale = params.get('timescale', 10000000)34 language = params.get('language', 'und')35 height = params.get('height', 0)36 width = params.get('width', 0)37 is_audio = width == 0 and height == 038 creation_time = modification_time = int(time.time())39 ftyp_payload = b'isml' # major brand40 ftyp_payload += u32.pack(1) # minor version41 ftyp_payload += b'piff' + b'iso2' # compatible brands42 stream.write(box(b'ftyp', ftyp_payload)) # File Type Box43 mvhd_payload = u64.pack(creation_time)44 mvhd_payload += u64.pack(modification_time)45 mvhd_payload += u32.pack(timescale)46 mvhd_payload += u64.pack(duration)47 mvhd_payload += s1616.pack(1) # rate48 mvhd_payload += s88.pack(1) # volume49 mvhd_payload += u16.pack(0) # reserved50 mvhd_payload += u32.pack(0) * 2 # reserved51 mvhd_payload += unity_matrix52 mvhd_payload += u32.pack(0) * 6 # pre defined53 mvhd_payload += u32.pack(0xffffffff) # next track id54 moov_payload = full_box(b'mvhd', 1, 0, mvhd_payload) # Movie Header Box55 tkhd_payload = u64.pack(creation_time)56 tkhd_payload += u64.pack(modification_time)57 tkhd_payload += u32.pack(track_id) # track id58 tkhd_payload += u32.pack(0) # reserved59 tkhd_payload += u64.pack(duration)60 tkhd_payload += u32.pack(0) * 2 # reserved61 tkhd_payload += s16.pack(0) # layer62 tkhd_payload += s16.pack(0) # alternate group63 tkhd_payload += s88.pack(1 if is_audio else 0) # volume64 tkhd_payload += u16.pack(0) # reserved65 tkhd_payload += unity_matrix66 tkhd_payload += u1616.pack(width)67 tkhd_payload += u1616.pack(height)68 trak_payload = full_box(b'tkhd', 1, TRACK_ENABLED | TRACK_IN_MOVIE | TRACK_IN_PREVIEW, tkhd_payload) # Track Header Box69 mdhd_payload = u64.pack(creation_time)70 mdhd_payload += u64.pack(modification_time)71 mdhd_payload += u32.pack(timescale)72 mdhd_payload += u64.pack(duration)73 mdhd_payload += u16.pack(((ord(language[0]) - 0x60) << 10) | ((ord(language[1]) - 0x60) << 5) | (ord(language[2]) - 0x60))74 mdhd_payload += u16.pack(0) # pre defined75 mdia_payload = full_box(b'mdhd', 1, 0, mdhd_payload) # Media Header Box76 hdlr_payload = u32.pack(0) # pre defined77 hdlr_payload += b'soun' if is_audio else b'vide' # handler type78 hdlr_payload += u32.pack(0) * 3 # reserved79 hdlr_payload += (b'Sound' if is_audio else b'Video') + b'Handler\0' # name80 mdia_payload += full_box(b'hdlr', 0, 0, hdlr_payload) # Handler Reference Box81 if is_audio:82 smhd_payload = s88.pack(0) # balance83 smhd_payload += u16.pack(0) # reserved84 media_header_box = full_box(b'smhd', 0, 0, smhd_payload) # Sound Media Header85 else:86 vmhd_payload = u16.pack(0) # graphics mode87 vmhd_payload += u16.pack(0) * 3 # opcolor88 media_header_box = full_box(b'vmhd', 0, 1, vmhd_payload) # Video Media Header89 minf_payload = media_header_box90 dref_payload = u32.pack(1) # entry count91 dref_payload += full_box(b'url ', 0, SELF_CONTAINED, b'') # Data Entry URL Box92 dinf_payload = full_box(b'dref', 0, 0, dref_payload) # Data Reference Box93 minf_payload += box(b'dinf', dinf_payload) # Data Information Box94 stsd_payload = u32.pack(1) # entry count95 sample_entry_payload = u8.pack(0) * 6 # reserved96 sample_entry_payload += u16.pack(1) # data reference index97 if is_audio:98 sample_entry_payload += u32.pack(0) * 2 # reserved99 sample_entry_payload += u16.pack(params.get('channels', 2))100 sample_entry_payload += u16.pack(params.get('bits_per_sample', 16))101 sample_entry_payload += u16.pack(0) # pre defined102 sample_entry_payload += u16.pack(0) # reserved103 sample_entry_payload += u1616.pack(params['sampling_rate'])104 if fourcc == 'AACL':105 sample_entry_box = box(b'mp4a', sample_entry_payload)106 else:107 sample_entry_payload += u16.pack(0) # pre defined108 sample_entry_payload += u16.pack(0) # reserved109 sample_entry_payload += u32.pack(0) * 3 # pre defined110 sample_entry_payload += u16.pack(width)111 sample_entry_payload += u16.pack(height)112 sample_entry_payload += u1616.pack(0x48) # horiz resolution 72 dpi113 sample_entry_payload += u1616.pack(0x48) # vert resolution 72 dpi114 sample_entry_payload += u32.pack(0) # reserved115 sample_entry_payload += u16.pack(1) # frame count116 sample_entry_payload += u8.pack(0) * 32 # compressor name117 sample_entry_payload += u16.pack(0x18) # depth118 sample_entry_payload += s16.pack(-1) # pre defined119 codec_private_data = binascii.unhexlify(params['codec_private_data'].encode('utf-8'))120 if fourcc in ('H264', 'AVC1'):121 sps, pps = codec_private_data.split(u32.pack(1))[1:]122 avcc_payload = u8.pack(1) # configuration version123 avcc_payload += sps[1:4] # avc profile indication + profile compatibility + avc level indication124 avcc_payload += u8.pack(0xfc | (params.get('nal_unit_length_field', 4) - 1)) # complete representation (1) + reserved (11111) + length size minus one125 avcc_payload += u8.pack(1) # reserved (0) + number of sps (0000001)126 avcc_payload += u16.pack(len(sps))127 avcc_payload += sps128 avcc_payload += u8.pack(1) # number of pps129 avcc_payload += u16.pack(len(pps))130 avcc_payload += pps131 sample_entry_payload += box(b'avcC', avcc_payload) # AVC Decoder Configuration Record132 sample_entry_box = box(b'avc1', sample_entry_payload) # AVC Simple Entry133 stsd_payload += sample_entry_box134 stbl_payload = full_box(b'stsd', 0, 0, stsd_payload) # Sample Description Box135 stts_payload = u32.pack(0) # entry count136 stbl_payload += full_box(b'stts', 0, 0, stts_payload) # Decoding Time to Sample Box137 stsc_payload = u32.pack(0) # entry count138 stbl_payload += full_box(b'stsc', 0, 0, stsc_payload) # Sample To Chunk Box139 stco_payload = u32.pack(0) # entry count140 stbl_payload += full_box(b'stco', 0, 0, stco_payload) # Chunk Offset Box141 minf_payload += box(b'stbl', stbl_payload) # Sample Table Box142 mdia_payload += box(b'minf', minf_payload) # Media Information Box143 trak_payload += box(b'mdia', mdia_payload) # Media Box144 moov_payload += box(b'trak', trak_payload) # Track Box145 mehd_payload = u64.pack(duration)146 mvex_payload = full_box(b'mehd', 1, 0, mehd_payload) # Movie Extends Header Box147 trex_payload = u32.pack(track_id) # track id148 trex_payload += u32.pack(1) # default sample description index149 trex_payload += u32.pack(0) # default sample duration150 trex_payload += u32.pack(0) # default sample size151 trex_payload += u32.pack(0) # default sample flags152 mvex_payload += full_box(b'trex', 0, 0, trex_payload) # Track Extends Box153 moov_payload += box(b'mvex', mvex_payload) # Movie Extends Box154 stream.write(box(b'moov', moov_payload)) # Movie Box155def extract_box_data(data, box_sequence):156 data_reader = io.BytesIO(data)157 while True:158 box_size = u32.unpack(data_reader.read(4))[0]159 box_type = data_reader.read(4)160 if box_type == box_sequence[0]:161 box_data = data_reader.read(box_size - 8)162 if len(box_sequence) == 1:163 return box_data164 return extract_box_data(box_data, box_sequence[1:])165 data_reader.seek(box_size - 8, 1)166class IsmFD(FragmentFD):167 """168 Download segments in a ISM manifest169 """170 FD_NAME = 'ism'171 def real_download(self, filename, info_dict):172 segments = info_dict['fragments'][:1] if self.params.get(173 'test', False) else info_dict['fragments']174 ctx = {175 'filename': filename,176 'total_frags': len(segments),177 }178 self._prepare_and_start_frag_download(ctx)179 fragment_retries = self.params.get('fragment_retries', 0)180 skip_unavailable_fragments = self.params.get('skip_unavailable_fragments', True)181 track_written = False182 frag_index = 0183 for i, segment in enumerate(segments):184 frag_index += 1185 if frag_index <= ctx['fragment_index']:186 continue187 count = 0188 while count <= fragment_retries:189 try:190 success, frag_content = self._download_fragment(ctx, segment['url'], info_dict)191 if not success:192 return False193 if not track_written:194 tfhd_data = extract_box_data(frag_content, [b'moof', b'traf', b'tfhd'])195 info_dict['_download_params']['track_id'] = u32.unpack(tfhd_data[4:8])[0]196 write_piff_header(ctx['dest_stream'], info_dict['_download_params'])197 track_written = True198 self._append_fragment(ctx, frag_content)199 break200 except compat_urllib_error.HTTPError as err:201 count += 1202 if count <= fragment_retries:203 self.report_retry_fragment(err, frag_index, count, fragment_retries)204 if count > fragment_retries:205 if skip_unavailable_fragments:206 self.report_skip_fragment(frag_index)207 continue208 self.report_error('giving up after %s fragment retries' % fragment_retries)209 return False...
test_pack.py
Source:test_pack.py
...103 for indexfile, version, size in (self.packindexfile_v1, self.packindexfile_v2):104 index = PackIndexFile(indexfile)105 self._assert_index_file(index, version, size)106 # END run tests107 def test_pack(self):108 # there is this special version 3, but apparently its like 2 ...109 for packfile, version, size in (self.packfile_v2_3_ascii, self.packfile_v2_1, self.packfile_v2_2):110 pack = PackFile(packfile)111 self._assert_pack_file(pack, version, size)112 # END for each pack to test113 @with_rw_directory114 def test_pack_entity(self, rw_dir):115 pack_objs = list()116 for packinfo, indexinfo in ((self.packfile_v2_1, self.packindexfile_v1),117 (self.packfile_v2_2, self.packindexfile_v2),118 (self.packfile_v2_3_ascii, self.packindexfile_v2_3_ascii)):119 packfile, version, size = packinfo120 indexfile, version, size = indexinfo121 entity = PackEntity(packfile)122 assert entity.pack().path() == packfile123 assert entity.index().path() == indexfile124 pack_objs.extend(entity.stream_iter())125 count = 0126 for info, stream in izip(entity.info_iter(), entity.stream_iter()):127 count += 1128 assert info.binsha == stream.binsha129 assert len(info.binsha) == 20130 assert info.type_id == stream.type_id131 assert info.size == stream.size132 # we return fully resolved items, which is implied by the sha centric access133 assert not info.type_id in delta_types134 # try all calls135 assert len(entity.collect_streams(info.binsha))136 oinfo = entity.info(info.binsha)137 assert isinstance(oinfo, OInfo)138 assert oinfo.binsha is not None139 ostream = entity.stream(info.binsha)140 assert isinstance(ostream, OStream)141 assert ostream.binsha is not None142 # verify the stream143 try:144 assert entity.is_valid_stream(info.binsha, use_crc=True)145 except UnsupportedOperation:146 pass147 # END ignore version issues148 assert entity.is_valid_stream(info.binsha, use_crc=False)149 # END for each info, stream tuple150 assert count == size151 # END for each entity152 # pack writing - write all packs into one153 # index path can be None154 pack_path1 = tempfile.mktemp('', "pack1", rw_dir)155 pack_path2 = tempfile.mktemp('', "pack2", rw_dir)156 index_path = tempfile.mktemp('', 'index', rw_dir)157 iteration = 0158 def rewind_streams():159 for obj in pack_objs:160 obj.stream.seek(0)161 # END utility162 for ppath, ipath, num_obj in zip((pack_path1, pack_path2),163 (index_path, None),164 (len(pack_objs), None)):165 iwrite = None166 if ipath:167 ifile = open(ipath, 'wb')168 iwrite = ifile.write169 # END handle ip170 # make sure we rewind the streams ... we work on the same objects over and over again171 if iteration > 0:172 rewind_streams()173 # END rewind streams174 iteration += 1175 with open(ppath, 'wb') as pfile:176 pack_sha, index_sha = PackEntity.write_pack(pack_objs, pfile.write, iwrite, object_count=num_obj)177 assert os.path.getsize(ppath) > 100178 # verify pack179 pf = PackFile(ppath)180 assert pf.size() == len(pack_objs)181 assert pf.version() == PackFile.pack_version_default182 assert pf.checksum() == pack_sha183 pf.close()184 # verify index185 if ipath is not None:186 ifile.close()187 assert os.path.getsize(ipath) > 100188 idx = PackIndexFile(ipath)189 assert idx.version() == PackIndexFile.index_version_default190 assert idx.packfile_checksum() == pack_sha...
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!