| | 1395 | |
|---|
| | 1396 | |
|---|
| | 1397 | |
|---|
| | 1398 | |
|---|
| | 1399 | # This is basically test code, do not call it will break Sage's |
|---|
| | 1400 | # assumptions about matrices (malb). |
|---|
| | 1401 | |
|---|
| | 1402 | def _read_bits(Matrix_mod2_dense A, int x, int y, int n): |
|---|
| | 1403 | return mzd_read_bits(A._entries, x, y, n) |
|---|
| | 1404 | |
|---|
| | 1405 | def _write_zeroed_bits(Matrix_mod2_dense A, int x, int y, int n, unsigned long values): |
|---|
| | 1406 | """ |
|---|
| | 1407 | EXAMPLE: |
|---|
| | 1408 | sage: A = matrix(GF(2),4,66) |
|---|
| | 1409 | sage: sage.matrix.matrix_mod2_dense._write_zeroed_bits(A,0,0,4,13) |
|---|
| | 1410 | sage: print A.str() |
|---|
| | 1411 | [1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] |
|---|
| | 1412 | [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] |
|---|
| | 1413 | [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] |
|---|
| | 1414 | [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] |
|---|
| | 1415 | sage: ZZ(sage.matrix.matrix_mod2_dense._read_bits(A,0,0,4)) |
|---|
| | 1416 | 13 |
|---|
| | 1417 | |
|---|
| | 1418 | sage: sage.matrix.matrix_mod2_dense._write_zeroed_bits(A,1,1,4,13) |
|---|
| | 1419 | sage: print A.str() |
|---|
| | 1420 | [1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] |
|---|
| | 1421 | [0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] |
|---|
| | 1422 | [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] |
|---|
| | 1423 | [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] |
|---|
| | 1424 | sage: ZZ(sage.matrix.matrix_mod2_dense._read_bits(A,1,1,4)) |
|---|
| | 1425 | 13 |
|---|
| | 1426 | |
|---|
| | 1427 | sage: sage.matrix.matrix_mod2_dense._write_zeroed_bits(A,2,0,64,2^63 + 2^62 + 1) |
|---|
| | 1428 | sage: print A.str() |
|---|
| | 1429 | [1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] |
|---|
| | 1430 | [0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] |
|---|
| | 1431 | [1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0] |
|---|
| | 1432 | [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] |
|---|
| | 1433 | sage: ZZ(sage.matrix.matrix_mod2_dense._read_bits(A,2,0,64)) |
|---|
| | 1434 | 13835058055282163713 |
|---|
| | 1435 | |
|---|
| | 1436 | sage: sage.matrix.matrix_mod2_dense._write_zeroed_bits(A,3,1,64,2^63 + 2^62 + 1) |
|---|
| | 1437 | sage: print A.str() |
|---|
| | 1438 | [1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] |
|---|
| | 1439 | [0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] |
|---|
| | 1440 | [1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0] |
|---|
| | 1441 | [0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0] |
|---|
| | 1442 | sage: ZZ(sage.matrix.matrix_mod2_dense._read_bits(A,3,1,64)) |
|---|
| | 1443 | 13835058055282163713 |
|---|
| | 1444 | """ |
|---|
| | 1445 | mzd_write_zeroed_bits(A._entries, x, y, n, values) |
|---|
| | 1446 | |
|---|
| | 1447 | def _clear_bits(Matrix_mod2_dense A, int x, int y, int n): |
|---|
| | 1448 | """ |
|---|
| | 1449 | EXAMPLE: |
|---|
| | 1450 | sage: A = matrix(GF(2),3,66) |
|---|
| | 1451 | sage: for i in range(A.nrows()): |
|---|
| | 1452 | ... for j in range(A.ncols()): |
|---|
| | 1453 | ... A[i,j] = 1 |
|---|
| | 1454 | |
|---|
| | 1455 | sage: print A.str() |
|---|
| | 1456 | [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1] |
|---|
| | 1457 | [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1] |
|---|
| | 1458 | [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1] |
|---|
| | 1459 | |
|---|
| | 1460 | sage: sage.matrix.matrix_mod2_dense._clear_bits(A,0,0,3) |
|---|
| | 1461 | sage: sage.matrix.matrix_mod2_dense._clear_bits(A,1,1,3) |
|---|
| | 1462 | sage: print A.str() |
|---|
| | 1463 | [0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1] |
|---|
| | 1464 | [1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1] |
|---|
| | 1465 | [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1] |
|---|
| | 1466 | |
|---|
| | 1467 | sage: sage.matrix.matrix_mod2_dense._clear_bits(A,0,0,64) |
|---|
| | 1468 | sage: sage.matrix.matrix_mod2_dense._clear_bits(A,1,1,64) |
|---|
| | 1469 | sage: print A.str() |
|---|
| | 1470 | [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1] |
|---|
| | 1471 | [1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1] |
|---|
| | 1472 | [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1] |
|---|
| | 1473 | """ |
|---|
| | 1474 | mzd_clear_bits(A._entries, x, y, n) |
|---|
| | 1475 | |
|---|
| | 1476 | |
|---|
| | 1477 | def _addmul(Matrix_mod2_dense C, Matrix_mod2_dense A, Matrix_mod2_dense B, int cutoff): |
|---|
| | 1478 | """ |
|---|
| | 1479 | EXAMPLE: |
|---|
| | 1480 | sage: def check_addmul(m,k,n, cutoff): |
|---|
| | 1481 | ... A = random_matrix(GF(2),m, k) |
|---|
| | 1482 | ... B = random_matrix(GF(2),k, n) |
|---|
| | 1483 | ... C = random_matrix(GF(2),m, n) |
|---|
| | 1484 | ... D1 = C + A*B |
|---|
| | 1485 | ... D2 = sage.matrix.matrix_mod2_dense._addmul(C,A,B, cutoff=cutoff) |
|---|
| | 1486 | ... if D1 != D2: |
|---|
| | 1487 | ... return False |
|---|
| | 1488 | ... else: |
|---|
| | 1489 | ... return True |
|---|
| | 1490 | |
|---|
| | 1491 | sage: check_addmul(1000,1000,1000, 256) |
|---|
| | 1492 | True |
|---|
| | 1493 | sage: check_addmul(1000,10,20, 64) |
|---|
| | 1494 | True |
|---|
| | 1495 | sage: check_addmul(1710,1290,1000, 256) |
|---|
| | 1496 | True |
|---|
| | 1497 | sage: check_addmul(1290, 1710, 200, 64) |
|---|
| | 1498 | True |
|---|
| | 1499 | sage: check_addmul(1290, 1710, 2000, 256) |
|---|
| | 1500 | True |
|---|
| | 1501 | sage: check_addmul(1290, 1290, 2000, 64) |
|---|
| | 1502 | True |
|---|
| | 1503 | """ |
|---|
| | 1504 | cdef Matrix_mod2_dense D = <Matrix_mod2_dense>C.copy() |
|---|
| | 1505 | mzd_addmul(D._entries, A._entries, B._entries, cutoff) |
|---|
| | 1506 | return D |
|---|
| | 1507 | |
|---|
| | 1508 | def _col_block_rotate(Matrix_mod2_dense A, int zs, int ze, int de): |
|---|
| | 1509 | """ |
|---|
| | 1510 | EXAMPLE: |
|---|
| | 1511 | sage: A = matrix(GF(2), 10, 128) |
|---|
| | 1512 | sage: for i in range(10): |
|---|
| | 1513 | ... A[i,i+10] = 1 |
|---|
| | 1514 | ... for j in range(20,A.ncols()): |
|---|
| | 1515 | ... A[i,j] = 1 |
|---|
| | 1516 | ... |
|---|
| | 1517 | |
|---|
| | 1518 | sage: sage.matrix.matrix_mod2_dense._col_block_rotate(A, 0, 10, A.ncols()) |
|---|
| | 1519 | sage: A.submatrix(0,0,10,10) |
|---|
| | 1520 | [1 0 0 0 0 0 0 0 0 0] |
|---|
| | 1521 | [0 1 0 0 0 0 0 0 0 0] |
|---|
| | 1522 | [0 0 1 0 0 0 0 0 0 0] |
|---|
| | 1523 | [0 0 0 1 0 0 0 0 0 0] |
|---|
| | 1524 | [0 0 0 0 1 0 0 0 0 0] |
|---|
| | 1525 | [0 0 0 0 0 1 0 0 0 0] |
|---|
| | 1526 | [0 0 0 0 0 0 1 0 0 0] |
|---|
| | 1527 | [0 0 0 0 0 0 0 1 0 0] |
|---|
| | 1528 | [0 0 0 0 0 0 0 0 1 0] |
|---|
| | 1529 | [0 0 0 0 0 0 0 0 0 1] |
|---|
| | 1530 | |
|---|
| | 1531 | sage: A.submatrix(0,10,10,10) |
|---|
| | 1532 | [1 1 1 1 1 1 1 1 1 1] |
|---|
| | 1533 | [1 1 1 1 1 1 1 1 1 1] |
|---|
| | 1534 | [1 1 1 1 1 1 1 1 1 1] |
|---|
| | 1535 | [1 1 1 1 1 1 1 1 1 1] |
|---|
| | 1536 | [1 1 1 1 1 1 1 1 1 1] |
|---|
| | 1537 | [1 1 1 1 1 1 1 1 1 1] |
|---|
| | 1538 | [1 1 1 1 1 1 1 1 1 1] |
|---|
| | 1539 | [1 1 1 1 1 1 1 1 1 1] |
|---|
| | 1540 | [1 1 1 1 1 1 1 1 1 1] |
|---|
| | 1541 | [1 1 1 1 1 1 1 1 1 1] |
|---|
| | 1542 | |
|---|
| | 1543 | sage: A.submatrix(0,100,10,28) |
|---|
| | 1544 | [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0] |
|---|
| | 1545 | [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0] |
|---|
| | 1546 | [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0] |
|---|
| | 1547 | [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0] |
|---|
| | 1548 | [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0] |
|---|
| | 1549 | [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0] |
|---|
| | 1550 | [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0] |
|---|
| | 1551 | [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0] |
|---|
| | 1552 | [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0] |
|---|
| | 1553 | [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0] |
|---|
| | 1554 | """ |
|---|
| | 1555 | mzd_col_block_rotate(A._entries, zs, ze, de, 1, NULL) |