/usr/share/gap/pkg/scscp/example/mindist.gi is in gap-scscp 2.1.4+ds-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | ############################################################################
#
# Parallelised method to compute minimal distance for linear codes
#
LoadPackage("scscp");
LoadPackage("guava");
InstallMethod( MinimumDistance, "parallel attribute method for linear codes",
true, [IsLinearCode], 0,
function(C)
local k, i, j, G, F, zero, ListOfWeightVecFFE, minwt, num, n, l,
# new local variables
remoteG, remoteF, remotezero, s;
# new auxiliary code
if not ForAny( SCSCPservers, s -> PingSCSCPservice(s[1],s[2]) = true ) then
Print("No SCSCP servers found - using sequential version of MinimumDistance ... \n");
TryNextMethod();
fi;
Print("Using parallel version of MinimumDistance ... \n");
# auxiliary part ends here
# now existing code from GUAVA package
if IsBound(C!.upperBoundMinimumDistance) and
IsBound(C!.lowerBoundMinimumDistance) and
C!.upperBoundMinimumDistance = C!.lowerBoundMinimumDistance then
return C!.lowerBoundMinimumDistance;
fi;
F := LeftActingDomain(C);
n := WordLength(C);
zero := Zero(F)*NullVector(n);
G := GeneratorMat(C);
minwt:=n;
########################################################################
# Old sequential code from the GUAVA package
# for i in [1..Length(G)] do
# AClosestVec:=AClosestVectorCombinationsMatFFEVecFFE(G, F, zero, i, 1);
# if WeightVecFFE(AClosestVec)<minwt then
# minwt := WeightVecFFE(AClosestVec);
# fi;
# od;
########################################################################
# New parallel code
for s in [1..Length(SCSCPservers)] do
if EvaluateBySCSCP( "ResetMinimumDistanceService",
[ IO_PickleToString(G), F, IO_PickleToString(zero) ],
SCSCPservers[s][1], SCSCPservers[s][2] ).object <> true then
Error("Data initialisation error!!!\n");
fi;
od;
ListOfWeightVecFFE := ParListWithSCSCP(
[1..Length(G)],
"AClosestVectorCombinationsMatFFEVecFFE" );
minwt := Minimum( ListOfWeightVecFFE );
# Parallelisation finishes here
########################################################################
# now return results
C!.lowerBoundMinimumDistance := minwt;
C!.upperBoundMinimumDistance := minwt;
return(minwt);
end);
############################################################################
##
#E
|